{"version":3,"sources":["webpack:///./node_modules/rxjs/_esm2015/observable/ArrayObservable.js","webpack:///./node_modules/@angular/platform-browser/esm2015/platform-browser.js","webpack:///./node_modules/rxjs/_esm2015/util/errorObject.js","webpack:///./node_modules/rxjs/_esm2015/util/tryCatch.js","webpack:///./node_modules/rxjs/_esm2015/util/UnsubscriptionError.js","webpack:///./node_modules/rxjs/_esm2015/Subscription.js","webpack:///./node_modules/rxjs/_esm2015/OuterSubscriber.js","webpack:///./node_modules/rxjs/_esm2015/observable/PromiseObservable.js","webpack:///./node_modules/rxjs/_esm2015/util/isFunction.js","webpack:///./node_modules/rxjs/_esm2015/Observable.js","webpack:///./node_modules/rxjs/_esm2015/util/toSubscriber.js","webpack:///./node_modules/rxjs/_esm2015/util/isScheduler.js","webpack:///./node_modules/rxjs/_esm2015/observable/ForkJoinObservable.js","webpack:///./node_modules/rxjs/_esm2015/observable/forkJoin.js","webpack:///./node_modules/@angular/forms/esm2015/forms.js","webpack:///./node_modules/@angular/common/esm2015/common.js","webpack:///./node_modules/rxjs/_esm2015/symbol/iterator.js","webpack:///./node_modules/rxjs/_esm2015/Observer.js","webpack:///./node_modules/rxjs/_esm2015/symbol/rxSubscriber.js","webpack:///./node_modules/rxjs/_esm2015/symbol/observable.js","webpack:///./node_modules/rxjs/_esm2015/util/noop.js","webpack:///./node_modules/rxjs/_esm2015/util/pipe.js","webpack:///./node_modules/rxjs/_esm2015/observable/EmptyObservable.js","webpack:///./node_modules/rxjs/_esm2015/observable/fromPromise.js","webpack:///./node_modules/rxjs/_esm2015/SubjectSubscription.js","webpack:///./node_modules/rxjs/_esm2015/Subject.js","webpack:///./node_modules/rxjs/_esm2015/add/operator/map.js","webpack:///./node_modules/rxjs/_esm2015/operators/mergeMap.js","webpack:///./node_modules/rxjs/_esm2015/InnerSubscriber.js","webpack:///./node_modules/rxjs/_esm2015/util/subscribeToResult.js","webpack:///./node_modules/@angular/http/esm2015/http.js","webpack:///./node_modules/rxjs/_esm2015/operators/map.js","webpack:///./node_modules/rxjs/_esm2015/operator/map.js","webpack:///./node_modules/rxjs/_esm2015/operators/refCount.js","webpack:///./node_modules/rxjs/_esm2015/observable/ConnectableObservable.js","webpack:///./node_modules/rxjs/_esm2015/operators/multicast.js","webpack:///./node_modules/rxjs/_esm2015/operators/share.js","webpack:///./node_modules/@angular/core/esm2015/core.js","webpack:///./node_modules/rxjs/_esm2015/observable/merge.js","webpack:///./node_modules/rxjs/_esm2015/operator/share.js","webpack:///./node_modules/rxjs/_esm2015/util/isArrayLike.js","webpack:///./node_modules/rxjs/_esm2015/util/root.js","webpack:///./node_modules/rxjs/_esm2015/BehaviorSubject.js","webpack:///./node_modules/rxjs/_esm2015/observable/of.js","webpack:///./node_modules/rxjs/_esm2015/operator/concatMap.js","webpack:///./node_modules/rxjs/_esm2015/operators/concatMap.js","webpack:///./node_modules/rxjs/_esm2015/operator/mergeMap.js","webpack:///./node_modules/rxjs/_esm2015/observable/IteratorObservable.js","webpack:///./node_modules/rxjs/_esm2015/observable/ArrayLikeObservable.js","webpack:///./node_modules/rxjs/_esm2015/Notification.js","webpack:///./node_modules/rxjs/_esm2015/operators/observeOn.js","webpack:///./node_modules/rxjs/_esm2015/observable/FromObservable.js","webpack:///./node_modules/rxjs/_esm2015/observable/from.js","webpack:///./node_modules/rxjs/_esm2015/operators/catchError.js","webpack:///./node_modules/rxjs/_esm2015/operator/catch.js","webpack:///./node_modules/rxjs/_esm2015/operator/concatAll.js","webpack:///./node_modules/rxjs/_esm2015/operators/concatAll.js","webpack:///./node_modules/rxjs/_esm2015/util/EmptyError.js","webpack:///./node_modules/rxjs/_esm2015/operators/first.js","webpack:///./node_modules/rxjs/_esm2015/operator/first.js","webpack:///./node_modules/rxjs/_esm2015/operators/every.js","webpack:///./node_modules/rxjs/_esm2015/operator/every.js","webpack:///./node_modules/rxjs/_esm2015/operators/last.js","webpack:///./node_modules/rxjs/_esm2015/operator/last.js","webpack:///./node_modules/rxjs/_esm2015/operator/mergeAll.js","webpack:///./node_modules/rxjs/_esm2015/operators/scan.js","webpack:///./node_modules/rxjs/_esm2015/util/ArgumentOutOfRangeError.js","webpack:///./node_modules/rxjs/_esm2015/operators/takeLast.js","webpack:///./node_modules/rxjs/_esm2015/operators/defaultIfEmpty.js","webpack:///./node_modules/rxjs/_esm2015/operators/reduce.js","webpack:///./node_modules/rxjs/_esm2015/operators/filter.js","webpack:///./node_modules/rxjs/_esm2015/operator/filter.js","webpack:///./node_modules/@angular/router/esm2015/router.js","webpack:///./node_modules/rxjs/_esm2015/operator/reduce.js","webpack:///./node_modules/rxjs/_esm2015/util/identity.js","webpack:///./node_modules/rxjs/_esm2015/operators/mergeAll.js","webpack:///./node_modules/rxjs/_esm2015/util/isArray.js","webpack:///./node_modules/rxjs/_esm2015/util/ObjectUnsubscribedError.js","webpack:///./node_modules/rxjs/_esm2015/util/isObject.js","webpack:///./node_modules/rxjs/_esm2015/Subscriber.js","webpack:///./node_modules/rxjs/_esm2015/util/isPromise.js","webpack:///./node_modules/rxjs/_esm2015/observable/ScalarObservable.js"],"names":["ArrayObservable","_Observable__WEBPACK_IMPORTED_MODULE_0__","[object Object]","array","scheduler","super","this","length","_isScalar","value","Object","_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__","pop","len","_ScalarObservable__WEBPACK_IMPORTED_MODULE_1__","_EmptyObservable__WEBPACK_IMPORTED_MODULE_2__","state","index","count","subscriber","complete","next","closed","schedule","dispatch","i","_angular_core__WEBPACK_IMPORTED_MODULE_1__","__webpack_require__","_DOM","getDOM","DomAdapter","resourceLoaderType","attrToPropMap","_attrToPropMap","GenericBrowserDomAdapter","_animationPrefix","_transitionEnd","element","createElement","document","getStyle","domPrefixes","toLowerCase","transEndEventNames","WebkitTransition","MozTransition","OTransition","transition","keys","forEach","key","e","el","getDistributedNodes","baseUrl","href","createShadowRoot","class","innerHtml","readonly","tabindex","DOM_KEY_LOCATION_NUMPAD","_keyMap","\b","\t","","\u001b","Del","Esc","Left","Right","Up","Down","Menu","Scroll","Win","_chromeNumKeyPadMap","A","B","C","D","E","F","G","H","I","J","K","M","N","O","`","","nodeContains","prototype","contains","node","compareDocumentPosition","BrowserDomAdapter","templateHtml","Error","adapter","setRootDomAdapter","name","methodName","args","error","window","console","log","group","groupEnd","nodeA","nodeB","call","selector","querySelector","querySelectorAll","evt","listener","addEventListener","removeEventListener","dispatchEvent","eventType","getDefaultDocument","createEvent","initEvent","preventDefault","returnValue","defaultPrevented","innerHTML","isTemplateElement","content","outerHTML","nodeName","nodeValue","type","hasProperty","firstChild","nextSibling","parentNode","childNodes","res","Array","removeChild","appendChild","newChild","oldChild","replaceChild","parent","ref","insertBefore","nodes","n","textContent","checked","text","createComment","html","t","tagName","doc","ns","createElementNS","createTextNode","attrName","attrValue","setAttribute","css","style","shadowRoot","host","cloneNode","getElementsByClassName","getElementsByTagName","slice","classList","className","add","remove","styleName","styleValue","stylename","Map","elAttrs","attributes","attrib","item","set","attribute","hasAttribute","hasAttributeNS","getAttribute","getAttributeNS","setAttributeNS","removeAttribute","removeAttributeNS","implementation","createHTMLDocument","getBoundingClientRect","top","bottom","left","right","width","height","title","newTitle","isElementNode","matches","msMatchesSelector","webkitMatchesSelector","nodeType","Node","TEXT_NODE","COMMENT_NODE","ELEMENT_NODE","HTMLElement","DocumentFragment","importNode","templateAwareRoot","adoptNode","event","keyIdentifier","startsWith","String","fromCharCode","parseInt","substring","location","hasOwnProperty","target","body","history","baseElement","getBaseElementHref","url","urlParsingNode","pathname","charAt","relativePath","navigator","userAgent","getComputedStyle","performance","now","Date","getTime","_angular_common__WEBPACK_IMPORTED_MODULE_0__","cookie","encodeURIComponent","DOCUMENT$1","supportsState","pushState","BrowserPlatformLocation","_doc","_init","getLocation","_history","getHistory","getBaseHref","fn","getGlobalEventTarget","search","hash","newPath","replaceState","forward","back","decorators","ctorParameters","undefined","Meta","_dom","tag","forceCreation","_getOrCreateElement","tags","reduce","result","push","attrSelector","list","_parseSelector","meta","getTag","_setMetaElementAttributes","removeTagElement","elem","_containsAttributes","head","prop","attr","every","TRANSITION_ID","SERVER_TRANSITION_PROVIDERS","provide","useFactory","transitionId","injector","get","donePromise","then","dom","apply","filter","deps","multi","BrowserGetTestability","registry","findInAncestors","testability","findTestabilityInTree","getAllTestabilities","getAllRootElements","callback","testabilities","didWork","decrement","didWork_","whenStable","getTestability","isShadowRoot","getHost","parentElement","Title","getTitle","setTitle","exportNgVar","COMPILED","CORE_TOKENS","ApplicationRef","NgZone","INSPECT_GLOBAL_NAME","CORE_TOKENS_GLOBAL_NAME","inspectNativeElement","_createNgProbe","coreTokens","assign","tokens","prev","token","_ngProbeTokensToMap","ELEMENT_PROBE_PROVIDERS","EVENT_MANAGER_PLUGINS","EventManager","plugins","_zone","_eventNameToPlugin","p","manager","_plugins","reverse","eventName","handler","_findPluginFor","addGlobalEventListener","plugin","supports","EventManagerPlugin","SharedStylesHost","_stylesSet","Set","styles","additions","has","onStylesAdded","from","DomSharedStylesHost","_hostNodes","_styleNodes","styleEl","hostNode","_addStylesToHost","delete","styleNode","NAMESPACE_URIS","svg","xhtml","xlink","xml","xmlns","COMPONENT_REGEX","HOST_ATTR","CONTENT_ATTR","flattenStyles","compId","isArray","replace","decoratePreventDefault","eventHandler","DomRendererFactory2","eventManager","sharedStylesHost","rendererByCompId","defaultRenderer","DefaultDomRenderer2","encapsulation","Emulated","renderer","id","EmulatedEncapsulationDomRenderer2","applyToHost","Native","ShadowDomRenderer","addStyles","data","create","namespace","refChild","selectorOrNode","namespaceUri","flags","DashCase","setProperty","Important","removeProperty","checkNoSyntheticProp","AT_CHARCODE","charCodeAt","nameKind","component","contentAttr","componentShortId","shimContentAttribute","hostAttr","shimHostAttribute","hostEl","addHost","removeHost","nodeOrShadowRoot","__symbol__","Zone","v","ADD_EVENT_LISTENER","REMOVE_EVENT_LISTENER","symbolNames","FALSE","ANGULAR","NATIVE_ADD_LISTENER","NATIVE_REMOVE_LISTENER","stopSymbol","stopMethodSymbol","blackListedEvents","blackListedMap","isBlackListedEvent","globalListener","symbolName","taskDatas","taskData","zone","current","run","copiedTasks","DomEventsPlugin","ngZone","patchEvent","Event","delegate","stopImmediatePropagation","arguments","isInAngularZone","globalListenerRegistered","root","callbackRegistered","underlyingRemove","found","splice","EVENT_NAMES","pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","press","pressup","rotate","rotatestart","rotatemove","rotateend","rotatecancel","swipe","swipeleft","swiperight","swipeup","swipedown","tap","HAMMER_GESTURE_CONFIG","HammerGestureConfig","events","overrides","mc","Hammer","enable","HammerGesturesPlugin","_config","isCustomEvent","getZone","runOutsideAngular","buildHammer","eventObj","runGuarded","on","off","indexOf","MODIFIER_KEYS","MODIFIER_KEY_GETTERS","alt","altKey","control","ctrlKey","metaKey","shift","shiftKey","KeyEventsPlugin","parseEventName","parsedEvent","outsideHandler","eventCallback","onAndCancel","parts","split","domEventName","_normalizeKey","fullKey","modifierName","getEventKey","modifierGetter","getEventFullKey","keyName","InertBodyHelper","defaultDoc","DOM","inertDocument","createHtmlDocument","inertBodyElement","inertHtml","setInnerHTML","DOMParser","isDOMParserAvailable","getInertBodyElement","getInertBodyElement_DOMParser","getInertBodyElement_InertDocument","getInertBodyElement_XHR","encodeURI","xhr","XMLHttpRequest","responseType","open","send","response","parseFromString","templateEl","documentMode","stripCustomNsAttrs","attributeMap","_","childNodesAsList","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeUrl","match","tagSet","merge","sets","s","VOID_ELEMENTS","OPTIONAL_END_TAG_BLOCK_ELEMENTS","OPTIONAL_END_TAG_INLINE_ELEMENTS","OPTIONAL_END_TAG_ELEMENTS","BLOCK_ELEMENTS","INLINE_ELEMENTS","VALID_ELEMENTS","URI_ATTRS","SRCSET_ATTRS","HTML_ATTRS","VALID_ATTRS","SanitizingHtmlSerializer","sanitizedSomething","buf","startElement","isTextNode","chars","endElement","checkClobberedElement","join","lower","srcset","map","trim","sanitizeSrcset","encodeEntities","nextNode","getOuterHTML","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","inertBodyHelper","SAFE_STYLE_VALUE","RegExp","URL_RE","DomSanitizer","DomSanitizerImpl","ctx","NONE","HTML","SafeHtmlImpl","changingThisBreaksApplicationSecurity","checkNotSafeValue","unsafeHtmlInput","unsafeHtml","mXSSAttempts","parsedHtml","getInnerHTML","sanitizer","safeHtml","sanitizeChildren","getTemplateContent","child","sanitizeHtml","STYLE","SafeStyleImpl","urlMatch","outsideSingle","outsideDouble","c","hasBalancedQuotes","sanitizeStyle","SCRIPT","SafeScriptImpl","URL","SafeResourceUrlImpl","SafeUrlImpl","RESOURCE_URL","expectedType","SafeValueImpl","getTypeName","INTERNAL_BROWSER_PLATFORM_PROVIDERS","useValue","makeCurrent","init","useClass","BROWSER_SANITIZATION_PROVIDERS","useExisting","platformBrowser","errorHandler","BrowserModule","parentModule","params","ngModule","providers","appId","exports","TransferState","store","onSerializeCallbacks","initState","transferState","defaultValue","warn","JSON","stringify","BrowserTransferStateModule","script","getElementById","initialState","parse","unescapedText","&a;","&q;","&s;","&l;","&g;","unescapeHtml","errorObject","tryCatchTarget","tryCatcher","tryCatch","UnsubscriptionError","errors","err","toString","stack","message","Subscription_Subscription","unsubscribe","_parent","_parents","_subscriptions","_unsubscribe","hasErrors","isFunction","flattenUnsubscriptionErrors","sub","isObject","concat","teardown","EMPTY","subscription","_addParent","tmp","subscriptions","subscriptionIndex","errs","empty","OuterSubscriber","_Subscriber__WEBPACK_IMPORTED_MODULE_0__","outerValue","innerValue","outerIndex","innerIndex","innerSub","destination","PromiseObservable","_Observable__WEBPACK_IMPORTED_MODULE_1__","promise","_util_root__WEBPACK_IMPORTED_MODULE_0__","setTimeout","dispatchNext","dispatchError","arg","x","Observable_Observable","subscribe","_subscribe","operator","observable","source","observerOrNext","sink","nextOrObserver","Subscriber","rxSubscriber","Observer","toSubscriber","syncErrorThrowable","_trySubscribe","syncErrorThrown","syncErrorValue","PromiseCtor","Rx","config","Promise","resolve","reject","operations","pipe","isScheduler","ForkJoinObservable_ForkJoinObservable","Observable","sources","resultSelector","EmptyObservable","ForkJoinObservable_ForkJoinSubscriber","completed","haveValues","total","values","innerSubscription","subscribeToResult","_hasValue","forkJoin","AbstractControlDirective","valid","invalid","pending","disabled","enabled","pristine","dirty","touched","status","untouched","statusChanges","valueChanges","path","reset","errorCode","hasError","getError","ControlContainer","formDirective","isEmptyInputValue","NG_VALIDATORS","core","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","forms_Validators","min","parseFloat","isNaN","actual","max","required","test","email","minLength","minlength","requiredLength","actualLength","maxLength","maxlength","pattern","nullValidator","regex","regexStr","requiredPattern","actualValue","validators","presentValidators","isPresent","_mergeErrors","_executeValidators","observables","_executeAsyncValidators","toObservable","o","r","obs","fromPromise","arrayOfErrors","NG_VALUE_ACCESSOR","CHECKBOX_VALUE_ACCESSOR","CheckboxControlValueAccessor","_renderer","_elementRef","onChange","onTouched","nativeElement","isDisabled","(change)","(blur)","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","COMPOSITION_BUFFER_MODE","_compositionMode","_composing","platform_browser","getUserAgent","_isAndroid","normalizedValue","normalizeValidator","validator","validate","normalizeAsyncValidator","(input)","(compositionstart)","(compositionend)","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","unimplemented","NgControl","valueAccessor","_rawValidators","_rawAsyncValidators","asyncValidator","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistry","_accessors","accessor","_isSameGroup","fireUncheck","controlPair","_control","_registry","_injector","_checkName","_state","_fn","select","writeValue","formControlName","_throwNameError","propDecorators","RANGE_VALUE_ACCESSOR","RangeValueAccessor","SELECT_VALUE_ACCESSOR","forms_SelectControlValueAccessor","_buildValueString","_optionMap","_idCounter","_compareWith","compareWith","_getOptionId","valueString","_getOptionValue","_extractId","NgSelectOption","_element","_select","_registerOption","ngValue","_setElementValue","SELECT_MULTIPLE_VALUE_ACCESSOR","forms_SelectMultipleControlValueAccessor","_buildValueString$1","optionSelectedStateSetter","ids","opt","_setSelected","selected","options","selectedOptions","val","_value","_extractId$1","NgSelectMultipleOption","controlPath","setUpControl","dir","_throwError","compose","composeAsync","registerOnChange","newValue","_pendingValue","_pendingChange","_pendingDirty","updateOn","updateControl","setUpViewChangePipeline","emitModelEvent","viewToModelUpdate","setUpModelChangePipeline","registerOnTouched","_pendingTouched","markAsTouched","setUpBlurPipeline","setDisabledState","registerOnDisabledChange","registerOnValidatorChange","updateValueAndValidity","markAsDirty","setValue","emitModelToViewChange","setUpFormContainer","_noControlError","messageEnd","composeValidators","composeAsyncValidators","isPropertyUpdated","changes","viewModel","change","isFirstChange","currentValue","BUILTIN_ACCESSORS","syncPendingControls","form","directives","_syncPendingControls","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","constructor","some","a","isBuiltInAccessor","removeDir","AbstractFormGroupDirective","_checkParentType","addFormGroup","removeFormGroup","getFormGroup","_validators","_asyncValidators","AbstractControlStatus","cd","_cd","ngClassUntouched","ngClassTouched","ngClassPristine","ngClassDirty","ngClassValid","ngClassInvalid","ngClassPending","ngControlStatusHost","[class.ng-untouched]","[class.ng-touched]","[class.ng-pristine]","[class.ng-dirty]","[class.ng-valid]","[class.ng-invalid]","[class.ng-pending]","NgControlStatus","NgControlStatusGroup","VALID","INVALID","PENDING","DISABLED","coerceToValidator","validatorOrOpts","isOptionsObj","coerceToAsyncValidator","origAsyncValidator","asyncValidators","forms_AbstractControl","_onCollectionChange","_onDisabledChange","_updateOn","newValidator","opts","onlySelf","_forEachChild","markAsUntouched","_updateTouched","markAsPristine","_updatePristine","markAsPending","disable","_updateValue","emitEvent","emit","_updateAncestors","changeFn","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","ctrl","_updateTreeValidity","_allControlsDisabled","_asyncValidationSubscription","setErrors","_updateControlsErrors","delimiter","FormGroup","controls","FormArray","at","_find","_anyControlsHaveStatus","_anyControls","_anyControlsDirty","_anyControlsTouched","formState","FormControl","_onChange","_applyFormState","_setUpdateStrategy","_initObservables","emitViewToModelChange","condition","cb","_isBoxedValue","_setUpControls","setParent","_registerOnCollectionChange","registerControl","controlName","_checkAllValuesPresent","_throwIfControlMissing","patchValue","_reduceChildren","acc","getRawValue","subtreeUpdated","updated","k","_reduceValue","initValue","_registerControl","formDirectiveProvider","forms_NgForm","resolvedPromise","submitted","_directives","ngSubmit","container","_findContainer","removeControl","$event","resetForm","(submit)","(reset)","outputs","exportAs","FormErrorExamples","formGroupName","formArrayName","ngModelGroup","ngModelWithFormGroup","TemplateDrivenErrors","modelGroupProvider","NgModelGroup","modelGroupParentException","formControlBinding","forms_NgModel","resolvedPromise$1","_registered","update","_checkForErrors","_setUpControl","_updateDisabled","model","_isStandalone","_setUpStandalone","addControl","standalone","formGroupNameException","modelParentException","missingNameException","disabledValue","ReactiveErrors","formControlBinding$1","forms_FormControlDirective","disabledAttrWarning","_isControlChanged","formDirectiveProvider$1","forms_FormGroupDirective","_checkFormPresent","_updateValidators","_updateDomValue","_updateRegistrations","newCtrl","_clearChangeFns","cleanUpControl","_oldForm","sync","async","missingFormException","formGroupNameProvider","FormGroupName","_hasInvalidParent","groupParentException","formArrayNameProvider","FormArrayName","addFormArray","removeFormArray","getFormArray","arrayParentException","controlNameBinding","forms_FormControlName","_added","updateModel","ngModelGroupException","controlParentException","REQUIRED_VALIDATOR","RequiredValidator","CHECKBOX_REQUIRED_VALIDATOR","CheckboxRequiredValidator","_required","[attr.required]","requiredTrue","EMAIL_VALIDATOR","EmailValidator","_enabled","MIN_LENGTH_VALIDATOR","MinLengthValidator","_createValidator","_validator","[attr.minlength]","MAX_LENGTH_VALIDATOR","MaxLengthValidator","[attr.maxlength]","PATTERN_VALIDATOR","PatternValidator","[attr.pattern]","FormBuilder","controlsConfig","extra","_reduceControls","_createControl","controlConfig","NgNoValidate","novalidate","SHARED_FORM_DIRECTIVES","TEMPLATE_DRIVEN_DIRECTIVES","REACTIVE_DRIVEN_DIRECTIVES","InternalFormsSharedModule","declarations","FormsModule","ReactiveFormsModule","_angular_core__WEBPACK_IMPORTED_MODULE_0__","PlatformLocation","LOCATION_INITIALIZED","LocationStrategy","APP_BASE_HREF","Location","platformStrategy","_subject","_platformStrategy","browserBaseHref","_baseHref","stripTrailingSlash","_stripIndexHtml","onPopState","ev","includeHash","normalize","query","normalizeQueryParams","baseHref","_stripBaseHref","prepareExternalUrl","onNext","onThrow","onReturn","start","end","slashes","endsWith","pathEndIdx","droppedSlashIdx","HashLocationStrategy","_platformLocation","onHashChange","internal","joinWithSlash","queryParams","PathLocationStrategy","getBaseHrefFromDOM","externalUrl","CURRENCIES","AOA","ARS","AUD","BAM","BBD","BDT","BMD","BND","BOB","BRL","BSD","BWP","BYN","BZD","CAD","CLP","CNY","COP","CRC","CUC","CUP","CZK","DKK","DOP","EGP","ESP","EUR","FJD","FKP","GBP","GEL","GIP","GNF","GTQ","GYD","HKD","HNL","HRK","HUF","IDR","ILS","INR","ISK","JMD","JPY","KHR","KMF","KPW","KRW","KYD","KZT","LAK","LBP","LKR","LRD","LTL","LVL","MGA","MMK","MNT","MUR","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","PHP","PKR","PLN","PYG","RON","RUB","RUR","RWF","SBD","SEK","SGD","SHP","SRD","SSP","STD","SYP","THB","TOP","TRY","TTD","TWD","UAH","USD","UYU","VEF","VND","XAF","XCD","XOF","XPF","ZAR","ZMW","localeEn","Math","floor","abs","LOCALE_DATA","NumberFormatStyle","Decimal","Percent","Currency","Scientific","Plural","Zero","One","Two","Few","Many","Other","FormStyle","Format","Standalone","TranslationWidth","Narrow","Abbreviated","Wide","Short","FormatWidth","Medium","Long","Full","NumberSymbol","Group","List","PercentSign","PlusSign","MinusSign","Exponential","SuperscriptingExponent","PerMille","Infinity","NaN","TimeSeparator","CurrencyDecimal","CurrencyGroup","WeekDay","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","getLocaleDateFormat","locale","getLastDefinedValue","findLocaleData","getLocaleTimeFormat","getLocaleDateTimeFormat","getLocaleNumberSymbol","symbol","checkFullData","extractTime","time","h","m","hours","minutes","normalizedLocale","parentLocale","DEPRECATED_PLURAL_FN","NgLocalization","getPluralCategory","cases","ngLocalization","NgLocaleLocalization","deprecatedPluralFn","getLocalePluralCase","parseCookieValue","cookieStr","eqIndex","cookieName","cookieValue","decodeURIComponent","NgClass","_iterableDiffers","_keyValueDiffers","_ngEl","_initialClasses","klass","_removeClasses","_applyClasses","_rawClass","ngClass","_iterableDiffer","_keyValueDiffer","find","iterableChanges","diff","_applyIterableChanges","keyValueChanges","_applyKeyValueChanges","forEachAddedItem","record","_toggleClass","forEachChangedItem","forEachRemovedItem","previousValue","rawClassVal","addClass","removeClass","NgComponentOutlet","_viewContainerRef","_componentRef","_moduleRef","clear","ngComponentOutlet","elInjector","ngComponentOutletInjector","parentInjector","destroy","ngComponentOutletNgModuleFactory","componentFactory","componentFactoryResolver","resolveComponentFactory","createComponent","ngComponentOutletContent","NgForOfContext","$implicit","ngForOf","first","last","even","odd","NgForOf","_viewContainer","_template","_differs","_differ","ngForTrackBy","_trackByFn","ngForTemplate","getTypeNameForDebugging","_applyChanges","insertTuples","forEachOperation","adjustedPreviousIndex","currentIndex","previousIndex","view","createEmbeddedView","tuple","RecordViewTuple","move","_perViewChange","ilen","viewRef","context","forEachIdentityChange","NgIf","templateRef","_context","NgIfContext","_thenTemplateRef","_elseTemplateRef","_thenViewRef","_elseViewRef","ngIf","_updateView","ngIfThen","ngIfElse","SwitchView","_templateRef","_created","created","NgSwitch","_defaultUsed","_caseCount","_lastCaseCheckIndex","_lastCasesMatched","ngSwitch","_ngSwitch","_updateDefaultCases","_defaultViews","matched","useDefault","enforceState","NgSwitchCase","viewContainer","_addCase","_view","_matchCase","ngSwitchCase","NgSwitchDefault","_addDefault","NgPlural","_localization","_caseViews","ngPlural","_switchValue","switchView","_clearViews","_activateView","_activeView","NgPluralCase","template","isANumber","Number","addCase","NgStyle","ngStyle","_ngStyle","_setStyle","nameAndUnit","unit","setStyle","removeStyle","NgTemplateOutlet","_shouldRecreateView","_viewRef","ngTemplateOutlet","ngTemplateOutletContext","_updateExistingContext","ctxChange","_hasContextShapeChanged","prevCtxKeys","currCtxKeys","propName","COMMON_DIRECTIVES","NAMED_FORMATS","DATE_FORMATS_SPLIT","ZoneWidth","ShortGMT","Extended","DateType","FullYear","Month","Hours","Minutes","Seconds","Milliseconds","Day","TranslationType","DayPeriods","Days","Months","Eras","formatDate","date","format","timezone","getNamedFormat","localeId","getLocaleId","formatValue","shortTime","shortDate","formatDateTime","mediumTime","mediumDate","longTime","longDate","fullTime","fullDate","exec","part","dateTimezoneOffset","getTimezoneOffset","timezoneToOffset","reverseValue","timezoneOffset","setMinutes","getMinutes","addDateMinutes","convertTimezoneToLocal","dateFormatter","DATE_FORMATS","formatter","dateStrGetter","dateGetter","weekGetter","timeZoneGetter","getDateFormatter","str","opt_values","padNumber","num","digits","minusSign","negWrap","neg","strNum","substr","size","offset","getFullYear","getMonth","getDate","getHours","getSeconds","div","round","getMilliseconds","getDay","getDatePart","extended","formStyle","getLocaleMonthNames","getLocaleDayNames","currentHours","currentMinutes","rules","rule","getLocaleExtraDayPeriodRules","dayPeriods","getLocaleExtraDayPeriods","hoursFrom","minutesFrom","hoursTo","minutesTo","getLocaleDayPeriods","getLocaleEraNames","unexpected","getDateTranslation","ceil","JANUARY","THURSDAY","monthBased","nbDaysBefore1stDayOfMonth","today","firstThurs","year","firstDayOfYear","getFirstThursdayOfYear","datetime","getThursdayThisWeek","fallback","requestedTimezoneOffset","invalidPipeArgumentError","ISO8601_DATE_REGEX","DatePipe","isDate$1","y","d","isoStringToDate","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","ms","valueOf","pure","NumberFormatter","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","currency","currencyAsSymbol","currencyDisplay","Intl","NumberFormat","DATE_FORMATS_SPLIT$1","PATTERN_ALIASES","yMMMdjms","datePartGetterFactory","combine","digitCondition","nameCondition","yMdjm","yMMMMEEEEd","yMMMMd","yMMMd","yMd","jms","jm","DATE_FORMATS$1","yyyy","yy","MMMM","MMM","MM","LLLL","L","dd","HH","digitModifier","hourExtractor","hour12Modify","hh","jj","j","mm","ss","sss","EEEE","EEE","EE","inner","hourClockExtractor","Z","timeZoneGetter$1","z","ww","w","GG","GGG","GGGG","intlDateFormat","DateTimeFormat","hour","hour12","timeZoneName","merged","ret","DATE_FORMATTER_CACHE","DateFormatter","cacheKey","_format","partToTime","DeprecatedDatePipe","_locale","isDate","_ALIASES","medium","short","NUMBER_FORMAT_REGEXP","MAX_DIGITS","DECIMAL_SEP","ZERO_CHAR","PATTERN_SEP","GROUP_SEP","DIGIT_CHAR","CURRENCY_CHAR","PERCENT_CHAR","formatNumber$1","digitsInfo","getLocaleNumberFormat","minInt","minFrac","maxFrac","posPre","posSuf","negPre","negSuf","gSize","lgSize","patternParts","positive","negative","positiveParts","lastIndexOf","integer","fraction","ch","groups","trunkLen","pos","parseNumberFormat","formattedText","isZero","isFinite","parsedNumber","integerLen","zeros","numStr","exponent","parseNumber","fractionLen","toPercent","minFraction","maxFraction","minIntPart","minFractionPart","maxFractionPart","parseIntAutoRadix","fractionSize","roundAt","digit","unshift","dropTrailingZeros","minLen","carry","reduceRight","roundNumber","decimals","groupSymbol","formatNumber","DeprecatedDecimalPipe","DeprecatedPercentPipe","DeprecatedCurrencyPipe","currencyCode","symbolDisplay","COMMON_DEPRECATED_I18N_PIPES","_promiseStrategy","updateLatestValue","_observableStrategy","AsyncPipe","_ref","_latestValue","_latestReturnedValue","_subscription","_obj","_strategy","_dispose","obj","transform","wrap","_selectStrategy","createSubscription","_updateLatestValue","dispose","markForCheck","LowerCasePipe","TitleCasePipe","word","toUpperCase","titleCaseWord","UpperCasePipe","_INTERPOLATION_REGEXP","I18nPluralPipe","pluralMap","I18nSelectPipe","mapping","JsonPipe","DecimalPipe","isEmpty","PercentPipe","CurrencyPipe","display","code","symbolNarrow","getCurrencySymbol","SlicePipe","COMMON_PIPES","CommonModule","ɵ0","nLike","nDecimal","f","DeprecatedI18NPipesModule","DOCUMENT","PLATFORM_BROWSER_ID","iterator","Symbol","getOwnPropertyNames","symbolIteratorPonyfill","for","$$observable","getSymbolObservable","noop","fns","pipeFromArray","input","SubjectSubscription_SubjectSubscription","Subscription","subject","observers","isStopped","subscriberIndex","Subject_SubjectSubscriber","Subject_Subject","thrownError","Subject_AnonymousSubject","ObjectUnsubscribedError","copy","_operator_map__WEBPACK_IMPORTED_MODULE_1__","mergeMap","project","concurrent","POSITIVE_INFINITY","lift","MergeMapOperator","observer","MergeMapSubscriber","_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__","hasCompleted","buffer","active","_tryNext","_innerSub","ish","_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_0__","_notifyResultSelector","_next","InnerSubscriber_InnerSubscriber","notifyNext","notifyError","notifyComplete","outerSubscriber","isArrayLike","isPromise","symbol_iterator","done","TypeError","msg","_angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__","BrowserXhr","RequestMethod","Get","Post","Put","Delete","Options","Head","Patch","ReadyState","Unsent","Open","HeadersReceived","Loading","Done","Cancelled","ResponseType","Basic","Cors","Default","Opaque","ContentType","FORM","FORM_DATA","TEXT","BLOB","ARRAY_BUFFER","ResponseContentType","Text","Json","ArrayBuffer","Blob","Headers","headers","_headers","_normalizedNames","append","headersString","line","getAll","lcName","mayBeSetNormalizedName","serialized","ResponseOptions","statusText","BaseResponseOptions","ConnectionBackend","XSRFStrategy","normalizeMethodName","method","isSuccess","QueryEncoder","standardEncoding","URLSearchParams","rawParams","queryEncoder","paramsMap","param","eqIdx","paramParser","clone","appendAll","storedParam","searchParams","paramsList","encodeKey","encodeValue","Body","_body","encodingHint","Uint16Array","Uint8Array","strLen","stringToArrayBuffer","Response","responseOptions","ok","_nextRequestId","JSONP_HOME","_jsonpConnections","_getJsonpConnections","BrowserJsonp","src","connection","JSONP_ERR_NO_CALLBACK","JSONP_ERR_WRONG_METHOD","JSONPConnection","req","baseResponseOptions","_finished","request","rxjs_Observable__WEBPACK_IMPORTED_MODULE_1__","responseObserver","readyState","_id","nextRequestID","exposeConnection","requestCallback","_script","build","onLoad","cleanup","_responseData","onError","removeConnection","JSONPBackend","_browserJSONP","_baseResponseOptions","XSSI_PREFIX","XHRConnection","browserXHR","_xhr","withCredentials","responseText","fromResponseHeaderString","getAllResponseHeaders","responseURL","getResponseHeader","getResponseURL","setDetectedContentType","setRequestHeader","getBody","abort","contentType","blob","CookieXSRFStrategy","_cookieName","_headerName","xsrfToken","getCookie","XHRBackend","_browserXHR","_xsrfStrategy","configureRequest","RequestOptions","_mergeSearchParams","_parseParams","objParams","_appendParam","BaseRequestOptions","Request","requestOptions","paramsArg","urlEncodeParams","prefix","detectContentType","ArrayBuffer$1","detectContentTypeFromBody","FormData","Blob$1","arrayBuffer","httpRequest","backend","createConnection","mergeOptions","defaultOpts","providedOpts","newOptions","Http","_backend","_defaultOptions","responseObservable","Jsonp","defaultOptions","_createDefaultCookieXSRFStrategy","httpFactory","xhrBackend","HttpModule","JsonpModule","jsonpBackend","MapOperator","thisArg","map_MapSubscriber","map_map","refCount","RefCountOperator","connectable","_refCount","refCounter","refCount_RefCountSubscriber","connect","sharedConnection","_connection","connectableProto","subjectFactory","_isComplete","getSubject","ConnectableObservable_ConnectableSubscriber","connectableObservableDescriptor","writable","Subject","_error","_complete","MulticastOperator","shareSubjectFactory","share","subjectOrSubjectFactory","multicast","InjectionToken","_desc","ngMetadataName","ANNOTATIONS","PARAMETERS","PROP_METADATA","makeDecorator","props","parentClass","chainFn","metaCtor","makeMetadataCtor","DecoratorFactory","objOrType","annotationInstance","TypeDecorator","cls","defineProperty","annotationCls","makeParamDecorator","ParamDecoratorFactory","annotation","ParamDecorator","unusedKey","parameters","makePropDecorator","PropDecoratorFactory","decoratorInstance","ANALYZE_FOR_ENTRY_COMPONENTS","Attribute","attributeName","Query","ContentChildren","isViewQuery","descendants","ChangeDetectionStrategy","OnPush","ChangeDetectorStatus","CheckOnce","Checked","CheckAlways","Detached","Errored","Destroyed","Directive","Pipe","changeDetection","Input","bindingPropertyName","Output","HostBinding","hostPropertyName","HostListener","NgModule","ViewEncapsulation","None","Version","full","major","minor","patch","VERSION","Inject","Optional","Injectable","Self","SkipSelf","Host","__window","__self","self","WorkerGlobalScope","__global","global","_global","_symbolIterator","getSymbolIterator","scheduleMicroTask","looseIdentical","b","overriddenName","newLineIndex","forwardRef","forwardRefFn","__forward_ref__","resolveForwardRef","SOURCE","_THROW_IF_NOT_FOUND","THROW_IF_NOT_FOUND","Injector","StaticInjector","NULL","notFoundValue","IDENT","CIRCULAR","MULTI_PROVIDER_FN","GET_PROPERTY_NAME","USE_VALUE","objWithPropertyToExtract","getClosureSafeProperty","NG_TOKEN_PATH","NG_TEMP_TOKEN_PATH","NULL_INJECTOR","NEW_LINE","NO_NEW_LINE","records","_records","useNew","recursivelyProcessProviders","provider","staticError","resolvedProvider","providerDeps","annotations","computeDeps","resolveProvider","multiProvider","multiProviderMixError","tryResolveToken","tokenPath","formatError","depRecords","depRecord","childRecord","resolveToken","ERROR_DEBUG_CONTEXT","ERROR_ORIGINAL_ERROR","ERROR_LOGGER","getDebugContext","getOriginalError","defaultErrorLogger","ErrorHandler","_console","originalError","_findOriginalError","_findContext","errorLogger","getErrorLogger","constructResolvingPath","findFirstClosedCycle","injectionError","constructResolvingMessage","errMsg","wrappedError","addKey","injectors","noAnnotationError","typeOrFunc","signature","ii","parameter","mixingMultiProvidersWithRegularProvidersError","provider1","provider2","ReflectiveKey","displayName","_globalKeyRegistry","numberOfKeys","_allKeys","newKey","Type","Function","isType","DELEGATE_CTOR","INHERITED_CLASS","INHERITED_CLASS_WITH_CTOR","convertTsickleDecoratorIntoMetadata","decoratorInvocations","decoratorInvocation","getParentCtor","ctor","parentProto","getPrototypeOf","reflector","reflectionCapabilities","caps","factory","propMetadata","lcProperty","hasLifecycleHook","getter","setter","importUri","resourceUri","moduleUrl","members","runtime","resolveIdentifier","identifier","resolveEnum","reflect","_reflect","paramTypes","paramAnnotations","parentCtor","typeStr","tsickleCtorParams","ctorParam","_zipTypesAndAnnotations","getOwnMetadata","fill","_ownParameters","ownAnnotations","_ownAnnotations","parentPropMetadata","ownPropMetadata","_ownPropMetadata","functionBody","enumIdentifier","ReflectiveDependency","optional","visibility","_EMPTY_LIST","ResolvedReflectiveProvider_","resolvedFactories","resolvedFactory","ResolvedReflectiveFactory","dependencies","resolveReflectiveFactory","factoryFn","resolvedDeps","_dependenciesFor","aliasInstance","fromKey","_extractToken","constructDependencies","resolveReflectiveProvider","resolveReflectiveProviders","resolvedProviderMap","normalizedProvidersMap","existing","mergeResolvedReflectiveProviders","_normalizeProviders","invalidProviderError","metadata","_createDependency","paramMetadata","UNDEFINED","ReflectiveInjector","ResolvedReflectiveProviders","fromResolvedProviders","ReflectiveInjector_","_providers","_constructionCounter","keyIds","objs","_getByKey","createChildFromResolved","inj","instantiateResolved","_instantiateProvider","outOfBoundsError","_getMaxNumberOfObjects","cyclicDependencyError","_instantiate","ResolvedReflectiveFactory$$1","dep","_getByReflectiveDependency","originalException","originalStack","instantiationError","INJECTOR_KEY","_getByKeySelf","_getByKeyDefault","keyId","_new","noProviderError","_getObjByKeyId","_throwOrNull","inj_","getProviderAtIndex","_mapProviders","isObservable","APP_INITIALIZER","ApplicationInitStatus","appInits","initialized","rej","asyncInitPromises","initResult","all","catch","APP_ID","_appIdRandomProviderFactory","_randomChar","APP_ID_RANDOM_PROVIDER","random","PLATFORM_INITIALIZER","PLATFORM_ID","APP_BOOTSTRAP_LISTENER","Console","Compiler","moduleType","CompilerFactory","ComponentRef","ComponentFactory","noComponentFactoryError","ERROR_COMPONENT","ComponentFactoryResolver","CodegenComponentFactoryResolver","factories","_ngModule","_factories","componentType","ComponentFactoryBoundToModule","ngContentSelectors","inputs","projectableNodes","rootSelectorOrNode","NgModuleRef","NgModuleFactory","trace","wtfEnabled","wtf","detectWTF","wtfCreateScope","createScope","arg0","arg1","wtfLeave","scope","leaveScope","core_EventEmitter","isAsync","__isAsync","generatorOrNext","schedulerFn","errorFn","completeFn","enableLongStackTrace","hasPendingMicrotasks","hasPendingMacrotasks","isStable","onUnstable","onMicrotaskEmpty","onStable","assertZonePatched","_nesting","_outer","_inner","fork","properties","isAngularZone","onInvokeTask","task","applyThis","applyArgs","onEnter","invokeTask","onLeave","onInvoke","invoke","onHasTask","hasTaskState","hasTask","microTask","checkStable","macroTask","onHandleError","handleError","forkInnerZoneWithAngularBehavior","scheduleEventTask","EMPTY_PAYLOAD","runTask","cancelTask","NoopNgZone","Testability","_ngZone","_pendingCount","_isZoneStable","_didWork","_callbacks","_watchAngularEvents","assertNotInAngularZone","_runCallbacksIfReady","using","exactMatch","TestabilityRegistry","_applications","_testabilityGetter","addToWindow","setTestabilityGetter","_platform","_devMode","_runModeLocked","ALLOW_MULTIPLE_PLATFORMS","enableProdMode","isDevMode","NgProbeToken","createPlatformFactory","parentPlatformFactory","desc","marker","extraProviders","platform","getPlatform","injectedProviders","destroyed","PlatformRef","inits","createPlatform","requiredToken","assertPlatform","_modules","_destroyListeners","_destroyed","moduleFactory","ngZoneOption","getNgZone","ngZoneInjector","moduleRef","exceptionHandler","onDestroy","_callAndReportToErrorHandler","initStatus","runInitializers","_moduleDoBootstrap","compilerOptions","compilerFactory","optionsReducer","createCompiler","compileModuleAsync","bootstrapModuleFactory","appRef","core_ApplicationRef","_bootstrapComponents","bootstrap","instance","ngDoBootstrap","module","dst","_exceptionHandler","_componentFactoryResolver","_initStatus","_bootstrapListeners","_views","_runningTick","_enforceNoNewChanges","_stable","componentTypes","components","tick","isCurrentlyStable","stableSub","unstableSub","assertInAngularZone","mergeAll","componentOrFactory","compRef","_unloadComponent","registerApplication","_loadComponent","_tickScope","detectChanges","checkNoChanges","attachToAppRef","detachFromAppRef","componentRef","attachView","hostView","detachView","viewCount","Renderer","RendererFactory2","RendererStyleFlags2","Renderer2","ElementRef","NgModuleFactoryLoader","QueryList","_results","flatten","flat","flatItem","_SEPARATOR","FACTORY_CLASS_SUFFIX","SystemJsNgModuleLoaderConfig","DEFAULT_CONFIG","factoryPathPrefix","factoryPathSuffix","SystemJsNgModuleLoader","_compiler","loadFactory","loadAndCompile","exportName","checkNotEmpty","factoryClassSuffix","modulePath","TemplateRef","ViewContainerRef","ChangeDetectorRef","EventListener","DebugNode","nativeNode","_debugContext","DebugElement","addChild","listeners","componentInstance","references","providerTokens","classes","childIndex","newChildren","siblingIndex","refIndex","predicate","queryAll","_queryElementChildren","_queryNodeChildren","children","_nativeNodeToDebugNode","getDebugNode","indexDebugNode","devModeEqual","isListLikeIterableA","isListLikeIterable","isListLikeIterableB","comparator","iterator1","iterator2","item1","item2","areIterablesEqual","WrappedValue","wrapped","isWrapped","SimpleChange","firstChange","isJsObject","trackByIdentity","DefaultIterableDiffer","trackByFn","_linkedRecords","_unlinkedRecords","_previousItHead","_itHead","_itTail","_additionsHead","_additionsTail","_movesHead","_movesTail","_removalsHead","_removalsTail","_identityChangesHead","_identityChangesTail","nextIt","nextRemove","addRemoveOffset","moveOffsets","getPreviousIndex","adjPreviousIndex","_nextRemoved","localMovePreviousIndex","localCurrentIndex","_nextPrevious","_nextAdded","_nextMoved","_nextIdentityChange","collection","check","_reset","itemTrackBy","mayBeDirty","trackById","_verifyReinsertion","_addIdentityChange","_mismatch","iterateListLike","_truncate","isDirty","nextRecord","previousRecord","_prev","_remove","_moveAfter","_reinsertAfter","_addAfter","IterableChangeRecord_","reinsertRecord","_addToMoves","_addToRemovals","_unlink","prevRecord","_prevRemoved","_insertAfter","_DuplicateMap","put","toIndex","_prevDup","_nextDup","_DuplicateItemRecordList","_head","_tail","atOrAfterIndex","duplicates","recordList","moveOffset","DefaultKeyValueDiffer","_mapHead","_appendAfter","_previousMapHead","_changesHead","_changesTail","_nextChanged","_forEach","_maybeAddToChanges","_getOrCreateRecordForKey","_insertBeforeOrAppend","before","KeyValueChangeRecord_","_addToAdditions","_addToChanges","IterableDiffers","copied","iterable","KeyValueDiffers","kv","keyValDiff","iterableDiff","defaultIterableDiffers","defaultKeyValueDiffers","platformCore","LOCALE_ID","MissingTranslationStrategy","Warning","Ignore","_iterableDiffersFactory","_keyValueDiffersFactory","_localeFactory","ApplicationModule","SecurityContext","Sanitizer","shiftInitState","priorInitState","newInitState","initIndex","shouldCallLifecycleInitHook","asTextData","asElementData","asProviderData","asPureExpressionData","asQueryList","Services","setCurrentNode","createRootView","createComponentView","createNgModuleRef","overrideProvider","overrideComponentView","clearOverrides","checkAndUpdateView","checkNoChangesView","destroyView","resolveDep","createDebugContext","handleEvent","updateDirectives","updateRenderer","dirtyParentQueries","expressionChangedAfterItHasBeenCheckedError","oldValue","currValue","isFirstCheck","_addDebugContext","viewDebugError","logError","bind","viewDestroyedError","action","NOOP","_tokenKeyCache","tokenKey","UNDEFINED_RENDERER_TYPE_ID","EMPTY_RENDERER_TYPE_ID","createRendererType2","_renderCompCount","resolveRendererType2","isFilled","checkBinding","def","bindingIdx","oldValues","bindingIndex","checkAndUpdateBinding","checkBindingNoChanges","bindingName","bindings","nodeIndex","markParentViewsForCheck","currView","viewContainerParent","markParentViewsForCheckProjectedViews","endView","componentView","declaredViewContainer","viewParentEl","renderNode","renderElement","renderText","elementEventFullName","isComponentView","isEmbeddedView","filterQueryId","queryId","splitMatchedQueriesDsl","matchedQueriesDsl","matchedQueries","matchedQueryIds","valueType","splitDepsDsl","sourceName","configurable","getParentRenderElement","renderHost","renderParent","componentRendererType","DEFINITION_CACHE","WeakMap","resolveDefinition","visitRootRenderNodes","visitSiblingRenderNodes","startIndex","endIndex","nodeDef","visitRenderNode","childCount","visitProjectedRenderNodes","ngContentIndex","compView","hostElDef","projectedNodes","execRenderNodeAction","rn","bindingFlags","embeddedViews","_embeddedViews","NS_PREFIX_RE","splitNamespace","calcBindingFlags","inlineInterpolate","valueCount","c0","a1","c1","a2","c2","a3","c3","a4","c4","a5","c5","a6","c6","a7","c7","a8","c8","a9","c9","_toStringWithNull","anchorDef","templateFactory","outputIndex","checkIndex","childFlags","directChildFlags","childMatchedQueries","attrs","componentProvider","publicProviders","allProviders","ngContent","elementDef","namespaceAndName","fixedAttrs","bindingDefs","suffixOrSecurityContext","securityContext","suffix","nonMinifiedName","outputDefs","elDef","parentEl","selectRootElement","listenToElementOutputs","output","handleEventClosure","renderEventHandlerClosure","listenTarget","listenerView","disposable","listen","checkAndUpdateElementValue","binding","elData","renderNode$$1","renderValue","sanitize","setElementAttribute","setElementClass","setElementStyle","setElementProperty","UNDEFINED_VALUE","InjectorRefTokenKey$1","NgModuleRefTokenKey","moduleProvideDef","moduleDef","providersByKey","resolveNgModuleDep","depDef","tokenKey$$1","providerDef","_def","providerInstance","_createProviderInstance$1","injectable","depValues","_createClass","_callFactory","attachEmbeddedView","parentView","elementData","viewIndex","addToArray","vcElementData","dvcElementData","projectedViews","_projectedViews","viewDef","nodeFlags","parentNodeDef","markNodeAsProjectedTemplate","attachProjectedView","renderAttachEmbeddedView","detachEmbeddedView","removeFromArray","renderDetachView","prevView","prevRenderNode","arr","EMPTY_CONTEXT","createComponentFactory","viewDefFactory","ComponentFactory_","_inputs","_outputs","inputsArr","templateName","outputsArr","componentNodeIndex","ComponentRef_","ViewRef_","_component","_elDef","changeDetectorRef","Injector_","createViewContainerData","ViewContainerRef_","_data","attachToViewContainerRef","insert","ngModuleRef","contextInjector","viewRef_","viewData","oldViewIndex","newViewIndex","moveEmbeddedView","createChangeDetectorRef","_appRef","rootNodes","renderNodes","rootRenderNodes","fs","rendererFactory","begin","disposables","detach","vcRef","createTemplateData","TemplateRef_","_parentView","elementRef","createInjector","allowPrivateServices","createRendererV1","RendererAdapter","hostElement","comment","createText","viewRootNodes","viewAllNodes","propertyName","propertyValue","attributeValue","isAdd","bootstrapComponents","NgModuleRef_","_moduleType","provDef","initNgModule","lifecycles","ngOnDestroy","callNgModuleLifecycle","RendererV1TokenKey","Renderer2TokenKey","ElementRefTokenKey","ViewContainerRefTokenKey","TemplateRefTokenKey","ChangeDetectorRefTokenKey","InjectorRefTokenKey","directiveDef","depDefs","createProviderInstance","_createProviderInstance","createPipeInstance","createClass","createDirectiveInstance","eventHandlerClosure","callFactory","NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR","startView","findCompView","providerData","updateProp","unwrap","callLifecycleHooksChildrenFirst","callProviderLifecycles","callElementProvidersLifecycles","ngAfterContentInit","ngAfterContentChecked","ngAfterViewInit","ngAfterViewChecked","queryIds","nodeMatchedQueries","tplDef","filterId","setDirty","checkAndUpdateQuery","queryList","directiveInstance","newValues","calcQueryValues","notify","boundValue","bindingType","notifyOnChanges","queryDef","getQueryValue","embeddedView","dvc","projectedView","queryValueType","appendNgContent","pureObjectDef","propToIndex","nbKeys","propertyNames","_pureExpressionDef","textDef","staticText","_addInterpolationPart","viewBindingCount","viewDisposableCount","viewNodeFlags","viewRootNodeFlags","viewMatchedQueries","currentParent","currentRenderParent","currentElementHasPublicProviders","currentElementHasPrivateProviders","lastRenderRootNode","validateNode","isPrivateService","isComponent","isNgContainer","newParent","rootNodeFlags","bindingCount","outputCount","nodeCount","parentEnd","anchorDef$$1","createView","initView","createViewNodes","rendererType","compRenderer","createRenderer","hostDef","nodeData","compViewDef","execComponentViewsAction","ViewAction","CreateViewNodes","execQueriesAction","markProjectedViewsForCheck","execEmbeddedViewsAction","CheckNoChanges","CheckAndUpdate","callInit","checkAndUpdateNode","argStyle","v0","v1","v2","v3","v4","v5","v6","v7","v8","v9","bindLen","changed","checkAndUpdateElementInline","checkAndUpdateTextInline","directive","ngOnChanges","ngOnInit","ngDoCheck","checkAndUpdateDirectiveInline","checkAndUpdatePureExpressionInline","checkAndUpdateNodeInline","checkAndUpdateElementDynamic","checkAndUpdateTextDynamic","checkAndUpdateDirectiveDynamic","checkAndUpdatePureExpressionDynamic","checkAndUpdateNodeDynamic","checkNoChangesNode","checkNoChangesNodeInline","checkNoChangesNodeDynamic","checkNoChangesQuery","Destroy","detachProjectedView","destroyNode","destroyViewNodes","CheckNoChangesProjectedViews","CheckAndUpdateProjectedViews","callViewAction","viewState","execProjectedViewsAction","queryFlags","staticDynamicQueryFlag","checkType","initServicesIfNeeded","services","debugSetCurrentNode","debugCreateRootView","debugCreateEmbeddedView","debugCreateComponentView","debugCreateNgModuleRef","debugOverrideProvider","debugOverrideComponentView","debugClearOverrides","debugCheckAndUpdateView","debugCheckNoChangesView","debugDestroyView","DebugContext_","debugHandleEvent","debugUpdateDirectives","debugUpdateRenderer","createProdRootView","prodCheckAndUpdateNode","prodCheckNoChangesNode","createRootData","DebugRendererFactory2","defWithOverride","applyProviderOverridesToView","callWithDebugContext","DebugAction","viewDef$$1","viewDefOverrides","hasOverrides","hasDeprecatedOverrides","providerOverrides","override","deprecatedBehavior","calcHasOverrides","applyProviderOverrides","applyProviderOverridesToNgModule","comp","compFactory","getComponentViewDefinitionFactory","elementIndicesWithOverwrittenProviders","elIndicesWithOverwrittenProviders","lastElementDef","findElementIndicesWithOverwrittenProviders","applyProviderOverridesToElement","elIndex","_currentAction","_currentView","_currentNodeIndex","nextDirectiveWithBinding","debugCheckAndUpdateNode","debugCheckNoChangesNode","nextRenderNodeWithBinding","givenValues","bindingValues","normalizeDebugBindingName","normalizeDebugBindingValue","CAMEL_CASE_REGEXP","camelCaseToDashCase","elView","elOrCompView","childDef","collectReferences","componentRenderElement","findHostElement","logViewDef","logNodeIndex","renderNodeIndex","getRenderNodeIndex","currRenderNodeIndex","refName","oldAction","oldView","oldNodeIndex","isViewDebugError","viewWrappedDebugError","getCurrentDebugContext","renderData","DebugRenderer2","whenRenderingDone","removeDebugNodeFromIndex","debugCtx","debugEl","debugChildEl","debugRefEl","fullName","createNgModuleFactory","ngModuleType","defFactory","NgModuleFactory_","_ngModuleDefFactory","ngDevMode","RendererStyleFlags3","currentView","createViewState","viewId","ngStaticData","tail","bindingStartIndex","creationMode","viewHookStartIndex","__webpack_exports__","_root","BehaviorSubject_BehaviorSubject","getValue","of","concatMap_concatMap","concatMap","mergeMap_mergeMap","IteratorObservable_IteratorObservable","getIterator","return","IteratorObservable_StringIterator","idx","IteratorObservable_ArrayIterator","util_root","numberIsFinite","valueAsNumber","sign","maxSafeInteger","toLength","pow","ArrayLikeObservable_ArrayLikeObservable","arrayLike","ScalarObservable","Notification_Notification","kind","hasValue","observe","do","throw","undefinedValueNotification","completeNotification","observeOn_ObserveOnSubscriber","delay","notification","ObserveOnMessage","scheduleMessage","createNext","createError","createComplete","FromObservable_FromObservable","symbol_observable","CatchOperator","catchError_CatchSubscriber","caught","err2","_unsubscribeAndRecycle","_catch","catchError","concatAll_concatAll","concatAll","EmptyError","FirstOperator","first_FirstSubscriber","_emitted","_tryPredicate","_emit","_tryResultSelector","_emitFinal","first_first","EveryOperator","every_EverySubscriber","everyValueMatch","every_every","LastOperator","last_LastSubscriber","lastValue","last_last","mergeAll_mergeAll","scan","accumulator","seed","hasSeed","ScanOperator","scan_ScanSubscriber","_seed","ArgumentOutOfRangeError","takeLast","takeLast_TakeLastOperator","takeLast_TakeLastSubscriber","ring","DefaultIfEmptyOperator","defaultIfEmpty_DefaultIfEmptySubscriber","defaultIfEmpty","FilterOperator","filter_FilterSubscriber","filter_filter","RouterEvent","NavigationStart","NavigationEnd","urlAfterRedirects","NavigationCancel","reason","NavigationError","RoutesRecognized","GuardsCheckStart","GuardsCheckEnd","shouldActivate","ResolveStart","ResolveEnd","RouteConfigLoadStart","route","RouteConfigLoadEnd","ChildActivationStart","snapshot","routeConfig","ChildActivationEnd","ActivationStart","ActivationEnd","PRIMARY_OUTLET","ParamsAsMap","convertToParamMap","NAVIGATION_CANCELING_ERROR","defaultUrlMatcher","segments","segmentGroup","pathMatch","hasChildren","posParams","segment","consumed","LoadedRouterConfig","routes","validateConfig","parentPath","getFullPath","fullPath","outlet","redirectTo","loadChildren","matcher","exp","currentRoute","copyConfig","shallowEqual","k1","k2","last$1","map$$1","andObservables","merged$","wrapIntoObservable","containsTree","containee","exact","equalQueryParams","equalSegmentGroups","equalPath","numberOfChildren","containsQueryParams","containsSegmentGroup","containsSegmentGroupHelper","containeePaths","UrlTree","fragment","queryParamMap","_queryParamMap","DEFAULT_SERIALIZER","serialize","UrlSegmentGroup","serializePaths","UrlSegment","parameterMap","_parameterMap","serializePath","as","bs","mapChildrenIntoArray","childOutlet","UrlSerializer","DefaultUrlSerializer","UrlParser","parseRootSegment","parseQueryParams","parseFragment","tree","serializeSegment","primary","strParams","encodeUriQuery","serializeQueryParams","encodeUriFragment","encodeUriString","encodeUriSegment","decode","decodeQuery","serializeMatrixParams","SEGMENT_RE","matchSegments","QUERY_PARAM_RE","QUERY_PARAM_VALUE_RE","remaining","consumeOptional","peekStartsWith","parseChildren","parseQueryParam","parseSegment","capture","parseParens","parseMatrixParams","parseParam","valueMatch","matchQueryParams","matchUrlQueryParamValue","decodedKey","decodedVal","currentVal","allowPrimary","outletName","NoMatch","AbsoluteRedirect","urlTree","noMatch","absoluteRedirect","newTree","namedOutletsRedirect","canLoadFails","navigationCancelingError","router_ApplyRedirects","moduleInjector","configLoader","urlSerializer","allowRedirects","expanded$","expandSegmentGroup","urlTrees$","rootSegmentGroup","createUrlTree","noMatchError","mapped$","rootCandidate","expandChildren","expandSegment","waitHead","waitTail","mapped","concat$","last$","waitForMap","routes$","processedRoutes$","expandSegmentAgainstRoute","concattedProcessedRoutes$","first$","noLeftoversInUrl","paths","getOutlet","matchSegmentAgainstRoute","expandSegmentAgainstRouteUsingRedirect","expandWildCardWithParamsAgainstRouteUsingRedirect","expandRegularSegmentAgainstRouteUsingRedirect","applyRedirectCommands","lineralizeSegments","newSegments","consumedSegments","lastChild","positionalParamSegments","rawSegmentGroup","load","cfg","_loadedConfig","rawSlicedSegments","childConfig$","getChildConfig","routerConfig","childModule","childConfig","slicedSegments","isEmptyPathRedirect","containsEmptyPathRedirectsWithNamedOutlets","primarySegmentGroup","createChildrenForEmptySegments","mergeTrivialChildren","containsEmptyPathRedirects","addEmptySegmentsToChildrenIfNeeded","cs","canLoad","injectionToken","guard","runCanLoadGuard","shouldLoad","applyRedirectCreatreUrlTree","newRoot","createSegmentGroup","createQueryParams","redirectToParams","actualParams","updatedSegments","createSegments","redirectToSegments","actualSegments","findPosParam","findOrReturn","redirectToUrlSegment","Tree","pathFromRoot","findNode","findPath","cc","TreeNode","nodeChildrenAsMap","RouterState","setRouterState","createEmptyState","rootComponent","activated","ActivatedRouteSnapshot","RouterStateSnapshot","createEmptyStateSnapshot","emptyUrl","emptyParams","emptyData","emptyQueryParams","router_ActivatedRoute","futureSnapshot","_futureSnapshot","_routerState","paramMap","_paramMap","inheritedParamsDataResolve","paramsInheritanceStrategy","inheritingStartingFrom","curr","_resolvedData","flattenInherited","urlSegment","lastPathIndex","_urlSegment","_lastPathIndex","_resolve","serializeNode","advanceActivatedRoute","currentSnapshot","nextSnapshot","shallowEqualArrays","equalParamsAndUrlSegments","equalUrlParams","equalSegments","parentsMismatch","createNode","routeReuseStrategy","prevState","shouldReuseRoute","createOrReuseChildren","retrieve","setFutureSnapshotsOfActivatedRoutes","createActivatedRoute","commands","router_tree","nav","Navigation","numberOfDoubleDots","isAbsolute","cmd","cmdIdx","outlets","segmentPath","urlPart","partIndex","computeNavigation","toRoot","startingPosition","Position","modifier","isMatrixParams","g","ci","createPositionApplyingDoubleDots","findStartingPosition","processChildren","updateSegmentGroupChildren","updateSegmentGroup","command","oldSegmentGroup","newSegmentGroup","qp","replaceSegment","oldSegment","newSegment","cmdWithOutlet","getPath","currentCommandIndex","currentPathIndex","pathIndex","commandIndex","compare","prefixedWith","slicedCommands","createNewSegmentGroup","getOutlets","createNewSegmentChildren","CanActivate","CanDeactivate","router_PreActivation","future","forwardEvent","canActivateChecks","canDeactivateChecks","parentContexts","futureRoot","currRoot","setupChildRouteGuards","isDeactivating","isActivating","canDeactivate$","runCanDeactivateChecks","canDeactivate","runCanActivateChecks","checks$","runningChecks$","runResolve","__","futureNode","currNode","contexts","futurePath","prevChildren","setupRouteGuards","deactivateRouteAndItsChildren","getContext","shouldRunGuardsAndResolvers","runGuardsAndResolvers","mode","childName","isActivated","runCanDeactivate","fireChildActivationStart","fireActivationStart","runCanActivateChild","runCanActivate","canActivate","getToken","canActivateChildGuards","extractCanActivateChild","guards","canActivateChild","resolveNode","resolvedData","getResolver","runningResolvers$","resolver","closestLoadedConfig","NoMatch$1","router_Recognizer","rootComponentType","split$1","processSegmentGroup","freeze","rootNode","routeState","inheritParamsAndData","routeNode","processSegment","names","routeWithSameOutletName","checkOutletNameUniqueness","sort","localeCompare","sortActivatedRouteSnapshots","processSegmentAgainstRoute","rawSegment","getData","getSourceSegmentGroup","getPathIndexShift","getResolve","match$1","_sourceSegment","_segmentIndexShift","emptyPathMatch","getOutlet$1","containsEmptyPathMatchesWithNamedOutlets","primarySegment","createChildrenForEmptyPaths","containsEmptyPathMatches","addEmptyPathsToChildrenIfNeeded","RouteReuseStrategy","DefaultRouteReuseStrategy","detachedTree","ROUTES","router_RouterConfigLoader","loader","compiler","onLoadStartListener","onLoadEndListener","moduleFactory$","loadModuleFactory","UrlHandlingStrategy","DefaultUrlHandlingStrategy","newUrlPart","wholeUrl","defaultErrorHandler","defaultRouterHook","router_Router","rootContexts","navigations","navigationId","navigated","hooks","beforePreactivation","afterPreactivation","urlHandlingStrategy","onSameUrlNavigation","resetConfig","currentUrlTree","rawUrlTree","triggerEvent","routerState","processNavigations","setUpLocationChangeListener","navigateByUrl","replaceUrl","locationSubscription","scheduleNavigation","serializeUrl","navigationExtras","relativeTo","preserveQueryParams","queryParamsHandling","preserveFragment","q","removeEmptyProps","extras","skipLocationChange","parseUrl","mergedTree","validateCommands","executeScheduledNavigation","rawUrl","lastNavigation","extract","urlTransition","shouldProcessUrl","runNavigate","precreatedState","resolvePromise","rejectPromise","urlAndSnapshot$","appliedUrl","redirectsApplied$","applyRedirects","recognize","beforePreactivationDone$","preActivation","preactivationSetup$","initialize","preactivationCheckGuards$","checkGuards","preactivationResolveData$","resolveData","preactivationDone$","routerState$","createRouterState","activateRoutes","storedState","storedUrl","navigationIsSuccessful","isCurrentPathEqualTo","go","ActivateRoutes","activate","resetUrlToCurrentUrlTree","isNavigationCancelingError","resetStateAndUrl","ee","futureState","currState","deactivateChildRoutes","activateChildRoutes","futureChild","childOutletName","deactivateRoutes","parentContext","shouldDetach","detachAndStoreRouteSubtree","deactivateRouteAndOutlet","onOutletDeactivated","deactivate","getOrCreateContext","shouldAttach","stored","onOutletReAttached","attachRef","attach","advanceActivatedRouteNodeAndItsChildren","parentLoadedConfig","cmpFactoryResolver","activateWith","router_RouterLink","router","tabIndex","routerLink","preserve","attrBoolValue","onClick","router_RouterLinkWithHref","locationStrategy","updateTargetUrlAndHref","button","common","RouterLinkActive","cdr","isActive","routerLinkActiveOptions","links","linksWithHrefs","routerLinkActive","hasActiveLinks","link","isLinkActive","OutletContext","ChildrenOutletContexts","router_RouterOutlet","changeDetector","_activatedRoute","activateEvents","deactivateEvents","onChildOutletCreated","onChildOutletDestroyed","activatedRoute","activatedRouteData","cmp","childContexts","OutletInjector","PreloadingStrategy","router_PreloadAllModules","router_NoPreloading","router_RouterPreloader","moduleLoader","preloadingStrategy","navigations$","preload","processRoutes","preloadConfig","loaded$","ROUTER_DIRECTIVES","ROUTER_CONFIGURATION","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","setupRouter","rootRoute","enableTracing","routerNgProbeToken","router_RouterModule","provideRoutes","provideForRootGuard","provideLocationStrategy","router_RouterInitializer","getAppInitializer","ROUTER_INITIALIZER","getBootstrapListener","platformLocationStrategy","useHash","logGroup","logGroupEnd","initNavigation","resultOfPreactivationDone","isLegacyDisabled","isLegacyEnabled","initialNavigation","bootstrappedComponentRef","preloader","setUpPreloading","resetRootComponentType","appInitializer","bootstrapListener","identity","_Subscription__WEBPACK_IMPORTED_MODULE_1__","destinationOrNext","_Observer__WEBPACK_IMPORTED_MODULE_2__","_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_3__","isTrustedSubscriber","trustedSubscriber","SafeSubscriber","_parentSubscriber","_util_isFunction__WEBPACK_IMPORTED_MODULE_0__","__tryOrSetError","__tryOrUnsub","wrappedComplete"],"mappings":"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qBF,KAAA,QAAA2iD,MAAA,MAG1BqL,GAAAzjD,eAAA,SAgBA,MAAA0jD,IACArC,GACAqB,GACAL,GACAW,GACAS,GACAR,GACAE,GACAb,GACAc,GACA/L,GACAuL,GACAE,UAmBAa,IAEAA,GAAA5jD,aACKrI,KAAA2hC,EAAA,EAAA1jC,OACLujC,cAAAmX,EAAAqT,IACAlrC,SAAA63B,EAAAqT,IACAprC,YACqB5W,QAAA8kC,EAAA3uB,SAAA+uB,QAKrB+c,GAAA3jD,eAAA,SACA,MAAA4jD,GA32IA,SAAAre,EAAAse,GAEA,iBAAAA,IACAA,EAAAxmD,SAAsC,OAEtC,MAAuB1E,EAAqB,EACrBmrD,EAAAnrD,EAAA0hB,WAAA/S,QAAA,gBACA3W,EAAAyxC,KAAAC,MAAAD,KAAAE,IAAA3pC,IACAwR,EAAA25C,EAAAr0D,OACAs0D,EAAA1mD,SAAAymD,EAAA,IACA7qD,EAAAoE,SAAA1E,EAAA0hB,WAAA/S,QAAA,4BAEvB,OADuBi+B,EAAAj1B,MAAA,QAAA1e,eAEvB,SACA,UACA,SACA,UACA,UACA,SACA,UACA,SACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,SACA,UACA,SACA,UACA,UACA,SACA,SACA,UACA,SACA,SACA,UACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,WAAA+G,EACAkqC,EAAAE,IACAF,EAAAM,MACA,SACA,SACA,SACA,SACA,SACA,OAAAxqC,IAAAypC,KAAAC,MAAA1pC,OAAA,GAAAA,GAAA,EACAkqC,EAAAE,IACAF,EAAAM,MACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,WAAAxyC,GAAA,IAAAgI,EACAkqC,EAAAE,IACAF,EAAAM,MACA,SACA,WAAAxqC,EACAkqC,EAAAC,KACA,IAAAnqC,EACAk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","file":"vendor.2d5e6b3a9d143b9231bb.js","sourcesContent":["import { Observable } from '../Observable';\nimport { ScalarObservable } from './ScalarObservable';\nimport { EmptyObservable } from './EmptyObservable';\nimport { isScheduler } from '../util/isScheduler';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nexport class ArrayObservable extends Observable {\n constructor(array, scheduler) {\n super();\n this.array = array;\n this.scheduler = scheduler;\n if (!scheduler && array.length === 1) {\n this._isScalar = true;\n this.value = array[0];\n }\n }\n static create(array, scheduler) {\n return new ArrayObservable(array, scheduler);\n }\n /**\n * Creates an Observable that emits some values you specify as arguments,\n * immediately one after the other, and then emits a complete notification.\n *\n * Emits the arguments you provide, then completes.\n * \n *\n * \n *\n * This static operator is useful for creating a simple Observable that only\n * emits the arguments given, and the complete notification thereafter. It can\n * be used for composing with other Observables, such as with {@link concat}.\n * By default, it uses a `null` IScheduler, which means the `next`\n * notifications are sent synchronously, although with a different IScheduler\n * it is possible to determine when those notifications will be delivered.\n *\n * @example Emit 10, 20, 30, then 'a', 'b', 'c', then start ticking every second.\n * var numbers = Rx.Observable.of(10, 20, 30);\n * var letters = Rx.Observable.of('a', 'b', 'c');\n * var interval = Rx.Observable.interval(1000);\n * var result = numbers.concat(letters).concat(interval);\n * result.subscribe(x => console.log(x));\n *\n * @see {@link create}\n * @see {@link empty}\n * @see {@link never}\n * @see {@link throw}\n *\n * @param {...T} values Arguments that represent `next` values to be emitted.\n * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling\n * the emissions of the `next` notifications.\n * @return {Observable} An Observable that emits each given input value.\n * @static true\n * @name of\n * @owner Observable\n */\n static of(...array) {\n let scheduler = array[array.length - 1];\n if (isScheduler(scheduler)) {\n array.pop();\n }\n else {\n scheduler = null;\n }\n const len = array.length;\n if (len > 1) {\n return new ArrayObservable(array, scheduler);\n }\n else if (len === 1) {\n return new ScalarObservable(array[0], scheduler);\n }\n else {\n return new EmptyObservable(scheduler);\n }\n }\n static dispatch(state) {\n const { array, index, count, subscriber } = state;\n if (index >= count) {\n subscriber.complete();\n return;\n }\n subscriber.next(array[index]);\n if (subscriber.closed) {\n return;\n }\n state.index = index + 1;\n this.schedule(state);\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n let index = 0;\n const array = this.array;\n const count = array.length;\n const scheduler = this.scheduler;\n if (scheduler) {\n return scheduler.schedule(ArrayObservable.dispatch, 0, {\n array, index, count, subscriber\n });\n }\n else {\n for (let i = 0; i < count && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n }\n }\n}\n//# sourceMappingURL=ArrayObservable.js.map","/**\n * @license Angular v5.2.10\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { CommonModule, DOCUMENT, PlatformLocation, ɵPLATFORM_BROWSER_ID, ɵparseCookieValue } from '@angular/common';\nimport { APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, ErrorHandler, Inject, Injectable, InjectionToken, Injector, NgModule, NgProbeToken, NgZone, Optional, PLATFORM_ID, PLATFORM_INITIALIZER, RendererFactory2, RendererStyleFlags2, Sanitizer, SecurityContext, SkipSelf, Testability, Version, ViewEncapsulation, createPlatformFactory, getDebugNode, isDevMode, platformCore, setTestabilityGetter, ɵglobal } from '@angular/core';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nlet _DOM = /** @type {?} */ ((null));\n/**\n * @return {?}\n */\nfunction getDOM() {\n return _DOM;\n}\n/**\n * @param {?} adapter\n * @return {?}\n */\n\n/**\n * @param {?} adapter\n * @return {?}\n */\nfunction setRootDomAdapter(adapter) {\n if (!_DOM) {\n _DOM = adapter;\n }\n}\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 * @abstract\n */\nclass DomAdapter {\n constructor() {\n this.resourceLoaderType = /** @type {?} */ ((null));\n }\n /**\n * Maps attribute names to their corresponding property names for cases\n * where attribute name doesn't match property name.\n * @return {?}\n */\n get attrToPropMap() { return this._attrToPropMap; }\n /**\n * @param {?} value\n * @return {?}\n */\n set attrToPropMap(value) { this._attrToPropMap = value; }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 * @abstract\n */\nclass GenericBrowserDomAdapter extends DomAdapter {\n constructor() {\n super();\n this._animationPrefix = null;\n this._transitionEnd = null;\n try {\n const /** @type {?} */ element = this.createElement('div', document);\n if (this.getStyle(element, 'animationName') != null) {\n this._animationPrefix = '';\n }\n else {\n const /** @type {?} */ domPrefixes = ['Webkit', 'Moz', 'O', 'ms'];\n for (let /** @type {?} */ i = 0; i < domPrefixes.length; i++) {\n if (this.getStyle(element, domPrefixes[i] + 'AnimationName') != null) {\n this._animationPrefix = '-' + domPrefixes[i].toLowerCase() + '-';\n break;\n }\n }\n }\n const /** @type {?} */ transEndEventNames = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend'\n };\n Object.keys(transEndEventNames).forEach((key) => {\n if (this.getStyle(element, key) != null) {\n this._transitionEnd = transEndEventNames[key];\n }\n });\n }\n catch (/** @type {?} */ e) {\n this._animationPrefix = null;\n this._transitionEnd = null;\n }\n }\n /**\n * @param {?} el\n * @return {?}\n */\n getDistributedNodes(el) { return (/** @type {?} */ (el)).getDistributedNodes(); }\n /**\n * @param {?} el\n * @param {?} baseUrl\n * @param {?} href\n * @return {?}\n */\n resolveAndSetHref(el, baseUrl, href) {\n el.href = href == null ? baseUrl : baseUrl + '/../' + href;\n }\n /**\n * @return {?}\n */\n supportsDOMEvents() { return true; }\n /**\n * @return {?}\n */\n supportsNativeShadowDOM() {\n return typeof (/** @type {?} */ (document.body)).createShadowRoot === 'function';\n }\n /**\n * @return {?}\n */\n getAnimationPrefix() { return this._animationPrefix ? this._animationPrefix : ''; }\n /**\n * @return {?}\n */\n getTransitionEnd() { return this._transitionEnd ? this._transitionEnd : ''; }\n /**\n * @return {?}\n */\n supportsAnimation() {\n return this._animationPrefix != null && this._transitionEnd != null;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst _attrToPropMap = {\n 'class': 'className',\n 'innerHtml': 'innerHTML',\n 'readonly': 'readOnly',\n 'tabindex': 'tabIndex',\n};\nconst DOM_KEY_LOCATION_NUMPAD = 3;\n// Map to convert some key or keyIdentifier values to what will be returned by getEventKey\nconst _keyMap = {\n // The following values are here for cross-browser compatibility and to match the W3C standard\n // cf http://www.w3.org/TR/DOM-Level-3-Events-key/\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// There is a bug in Chrome for numeric keypad keys:\n// https://code.google.com/p/chromium/issues/detail?id=155654\n// 1, 2, 3 ... are reported as A, B, C ...\nconst _chromeNumKeyPadMap = {\n 'A': '1',\n 'B': '2',\n 'C': '3',\n 'D': '4',\n 'E': '5',\n 'F': '6',\n 'G': '7',\n 'H': '8',\n 'I': '9',\n 'J': '*',\n 'K': '+',\n 'M': '-',\n 'N': '.',\n 'O': '/',\n '\\x60': '0',\n '\\x90': 'NumLock'\n};\nlet nodeContains;\nif (ɵglobal['Node']) {\n nodeContains = ɵglobal['Node'].prototype.contains || function (node) {\n return !!(this.compareDocumentPosition(node) & 16);\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 */\nclass BrowserDomAdapter extends GenericBrowserDomAdapter {\n /**\n * @param {?} templateHtml\n * @return {?}\n */\n parse(templateHtml) { throw new Error('parse not implemented'); }\n /**\n * @return {?}\n */\n static makeCurrent() { setRootDomAdapter(new BrowserDomAdapter()); }\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n hasProperty(element, name) { return name in element; }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n setProperty(el, name, value) { (/** @type {?} */ (el))[name] = value; }\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n getProperty(el, name) { return (/** @type {?} */ (el))[name]; }\n /**\n * @param {?} el\n * @param {?} methodName\n * @param {?} args\n * @return {?}\n */\n invoke(el, methodName, args) { (/** @type {?} */ (el))[methodName](...args); }\n /**\n * @param {?} error\n * @return {?}\n */\n logError(error) {\n if (window.console) {\n if (console.error) {\n console.error(error);\n }\n else {\n console.log(error);\n }\n }\n }\n /**\n * @param {?} error\n * @return {?}\n */\n log(error) {\n if (window.console) {\n window.console.log && window.console.log(error);\n }\n }\n /**\n * @param {?} error\n * @return {?}\n */\n logGroup(error) {\n if (window.console) {\n window.console.group && window.console.group(error);\n }\n }\n /**\n * @return {?}\n */\n logGroupEnd() {\n if (window.console) {\n window.console.groupEnd && window.console.groupEnd();\n }\n }\n /**\n * @return {?}\n */\n get attrToPropMap() { return _attrToPropMap; }\n /**\n * @param {?} nodeA\n * @param {?} nodeB\n * @return {?}\n */\n contains(nodeA, nodeB) { return nodeContains.call(nodeA, nodeB); }\n /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n querySelector(el, selector) { return el.querySelector(selector); }\n /**\n * @param {?} el\n * @param {?} selector\n * @return {?}\n */\n querySelectorAll(el, selector) { return el.querySelectorAll(selector); }\n /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n on(el, evt, listener) { el.addEventListener(evt, listener, false); }\n /**\n * @param {?} el\n * @param {?} evt\n * @param {?} listener\n * @return {?}\n */\n onAndCancel(el, evt, listener) {\n el.addEventListener(evt, listener, false);\n // Needed to follow Dart's subscription semantic, until fix of\n // https://code.google.com/p/dart/issues/detail?id=17406\n return () => { el.removeEventListener(evt, listener, false); };\n }\n /**\n * @param {?} el\n * @param {?} evt\n * @return {?}\n */\n dispatchEvent(el, evt) { el.dispatchEvent(evt); }\n /**\n * @param {?} eventType\n * @return {?}\n */\n createMouseEvent(eventType) {\n const /** @type {?} */ evt = this.getDefaultDocument().createEvent('MouseEvent');\n evt.initEvent(eventType, true, true);\n return evt;\n }\n /**\n * @param {?} eventType\n * @return {?}\n */\n createEvent(eventType) {\n const /** @type {?} */ evt = this.getDefaultDocument().createEvent('Event');\n evt.initEvent(eventType, true, true);\n return evt;\n }\n /**\n * @param {?} evt\n * @return {?}\n */\n preventDefault(evt) {\n evt.preventDefault();\n evt.returnValue = false;\n }\n /**\n * @param {?} evt\n * @return {?}\n */\n isPrevented(evt) {\n return evt.defaultPrevented || evt.returnValue != null && !evt.returnValue;\n }\n /**\n * @param {?} el\n * @return {?}\n */\n getInnerHTML(el) { return el.innerHTML; }\n /**\n * @param {?} el\n * @return {?}\n */\n getTemplateContent(el) {\n return 'content' in el && this.isTemplateElement(el) ? (/** @type {?} */ (el)).content : null;\n }\n /**\n * @param {?} el\n * @return {?}\n */\n getOuterHTML(el) { return el.outerHTML; }\n /**\n * @param {?} node\n * @return {?}\n */\n nodeName(node) { return node.nodeName; }\n /**\n * @param {?} node\n * @return {?}\n */\n nodeValue(node) { return node.nodeValue; }\n /**\n * @param {?} node\n * @return {?}\n */\n type(node) { return node.type; }\n /**\n * @param {?} node\n * @return {?}\n */\n content(node) {\n if (this.hasProperty(node, 'content')) {\n return (/** @type {?} */ (node)).content;\n }\n else {\n return node;\n }\n }\n /**\n * @param {?} el\n * @return {?}\n */\n firstChild(el) { return el.firstChild; }\n /**\n * @param {?} el\n * @return {?}\n */\n nextSibling(el) { return el.nextSibling; }\n /**\n * @param {?} el\n * @return {?}\n */\n parentElement(el) { return el.parentNode; }\n /**\n * @param {?} el\n * @return {?}\n */\n childNodes(el) { return el.childNodes; }\n /**\n * @param {?} el\n * @return {?}\n */\n childNodesAsList(el) {\n const /** @type {?} */ childNodes = el.childNodes;\n const /** @type {?} */ res = new Array(childNodes.length);\n for (let /** @type {?} */ i = 0; i < childNodes.length; i++) {\n res[i] = childNodes[i];\n }\n return res;\n }\n /**\n * @param {?} el\n * @return {?}\n */\n clearNodes(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n }\n /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n appendChild(el, node) { el.appendChild(node); }\n /**\n * @param {?} el\n * @param {?} node\n * @return {?}\n */\n removeChild(el, node) { el.removeChild(node); }\n /**\n * @param {?} el\n * @param {?} newChild\n * @param {?} oldChild\n * @return {?}\n */\n replaceChild(el, newChild, oldChild) { el.replaceChild(newChild, oldChild); }\n /**\n * @param {?} node\n * @return {?}\n */\n remove(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n return node;\n }\n /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n insertBefore(parent, ref, node) { parent.insertBefore(node, ref); }\n /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} nodes\n * @return {?}\n */\n insertAllBefore(parent, ref, nodes) {\n nodes.forEach((n) => parent.insertBefore(n, ref));\n }\n /**\n * @param {?} parent\n * @param {?} ref\n * @param {?} node\n * @return {?}\n */\n insertAfter(parent, ref, node) { parent.insertBefore(node, ref.nextSibling); }\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n setInnerHTML(el, value) { el.innerHTML = value; }\n /**\n * @param {?} el\n * @return {?}\n */\n getText(el) { return el.textContent; }\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n setText(el, value) { el.textContent = value; }\n /**\n * @param {?} el\n * @return {?}\n */\n getValue(el) { return el.value; }\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n setValue(el, value) { el.value = value; }\n /**\n * @param {?} el\n * @return {?}\n */\n getChecked(el) { return el.checked; }\n /**\n * @param {?} el\n * @param {?} value\n * @return {?}\n */\n setChecked(el, value) { el.checked = value; }\n /**\n * @param {?} text\n * @return {?}\n */\n createComment(text) { return this.getDefaultDocument().createComment(text); }\n /**\n * @param {?} html\n * @return {?}\n */\n createTemplate(html) {\n const /** @type {?} */ t = this.getDefaultDocument().createElement('template');\n t.innerHTML = html;\n return t;\n }\n /**\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n createElement(tagName, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createElement(tagName);\n }\n /**\n * @param {?} ns\n * @param {?} tagName\n * @param {?=} doc\n * @return {?}\n */\n createElementNS(ns, tagName, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createElementNS(ns, tagName);\n }\n /**\n * @param {?} text\n * @param {?=} doc\n * @return {?}\n */\n createTextNode(text, doc) {\n doc = doc || this.getDefaultDocument();\n return doc.createTextNode(text);\n }\n /**\n * @param {?} attrName\n * @param {?} attrValue\n * @param {?=} doc\n * @return {?}\n */\n createScriptTag(attrName, attrValue, doc) {\n doc = doc || this.getDefaultDocument();\n const /** @type {?} */ el = /** @type {?} */ (doc.createElement('SCRIPT'));\n el.setAttribute(attrName, attrValue);\n return el;\n }\n /**\n * @param {?} css\n * @param {?=} doc\n * @return {?}\n */\n createStyleElement(css, doc) {\n doc = doc || this.getDefaultDocument();\n const /** @type {?} */ style = /** @type {?} */ (doc.createElement('style'));\n this.appendChild(style, this.createTextNode(css, doc));\n return style;\n }\n /**\n * @param {?} el\n * @return {?}\n */\n createShadowRoot(el) { return (/** @type {?} */ (el)).createShadowRoot(); }\n /**\n * @param {?} el\n * @return {?}\n */\n getShadowRoot(el) { return (/** @type {?} */ (el)).shadowRoot; }\n /**\n * @param {?} el\n * @return {?}\n */\n getHost(el) { return (/** @type {?} */ (el)).host; }\n /**\n * @param {?} node\n * @return {?}\n */\n clone(node) { return node.cloneNode(true); }\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n getElementsByClassName(element, name) {\n return element.getElementsByClassName(name);\n }\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n getElementsByTagName(element, name) {\n return element.getElementsByTagName(name);\n }\n /**\n * @param {?} element\n * @return {?}\n */\n classList(element) { return Array.prototype.slice.call(element.classList, 0); }\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n addClass(element, className) { element.classList.add(className); }\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n removeClass(element, className) { element.classList.remove(className); }\n /**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\n hasClass(element, className) {\n return element.classList.contains(className);\n }\n /**\n * @param {?} element\n * @param {?} styleName\n * @param {?} styleValue\n * @return {?}\n */\n setStyle(element, styleName, styleValue) {\n element.style[styleName] = styleValue;\n }\n /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n removeStyle(element, stylename) {\n // IE requires '' instead of null\n // see https://github.com/angular/angular/issues/7916\n element.style[stylename] = '';\n }\n /**\n * @param {?} element\n * @param {?} stylename\n * @return {?}\n */\n getStyle(element, stylename) { return element.style[stylename]; }\n /**\n * @param {?} element\n * @param {?} styleName\n * @param {?=} styleValue\n * @return {?}\n */\n hasStyle(element, styleName, styleValue) {\n const /** @type {?} */ value = this.getStyle(element, styleName) || '';\n return styleValue ? value == styleValue : value.length > 0;\n }\n /**\n * @param {?} element\n * @return {?}\n */\n tagName(element) { return element.tagName; }\n /**\n * @param {?} element\n * @return {?}\n */\n attributeMap(element) {\n const /** @type {?} */ res = new Map();\n const /** @type {?} */ elAttrs = element.attributes;\n for (let /** @type {?} */ i = 0; i < elAttrs.length; i++) {\n const /** @type {?} */ attrib = elAttrs.item(i);\n res.set(attrib.name, attrib.value);\n }\n return res;\n }\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n hasAttribute(element, attribute) {\n return element.hasAttribute(attribute);\n }\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} attribute\n * @return {?}\n */\n hasAttributeNS(element, ns, attribute) {\n return element.hasAttributeNS(ns, attribute);\n }\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n getAttribute(element, attribute) {\n return element.getAttribute(attribute);\n }\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n getAttributeNS(element, ns, name) {\n return element.getAttributeNS(ns, name);\n }\n /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n setAttribute(element, name, value) { element.setAttribute(name, value); }\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n setAttributeNS(element, ns, name, value) {\n element.setAttributeNS(ns, name, value);\n }\n /**\n * @param {?} element\n * @param {?} attribute\n * @return {?}\n */\n removeAttribute(element, attribute) { element.removeAttribute(attribute); }\n /**\n * @param {?} element\n * @param {?} ns\n * @param {?} name\n * @return {?}\n */\n removeAttributeNS(element, ns, name) {\n element.removeAttributeNS(ns, name);\n }\n /**\n * @param {?} el\n * @return {?}\n */\n templateAwareRoot(el) { return this.isTemplateElement(el) ? this.content(el) : el; }\n /**\n * @return {?}\n */\n createHtmlDocument() {\n return document.implementation.createHTMLDocument('fakeTitle');\n }\n /**\n * @return {?}\n */\n getDefaultDocument() { return document; }\n /**\n * @param {?} el\n * @return {?}\n */\n getBoundingClientRect(el) {\n try {\n return el.getBoundingClientRect();\n }\n catch (/** @type {?} */ e) {\n return { top: 0, bottom: 0, left: 0, right: 0, width: 0, height: 0 };\n }\n }\n /**\n * @param {?} doc\n * @return {?}\n */\n getTitle(doc) { return doc.title; }\n /**\n * @param {?} doc\n * @param {?} newTitle\n * @return {?}\n */\n setTitle(doc, newTitle) { doc.title = newTitle || ''; }\n /**\n * @param {?} n\n * @param {?} selector\n * @return {?}\n */\n elementMatches(n, selector) {\n if (this.isElementNode(n)) {\n return n.matches && n.matches(selector) ||\n n.msMatchesSelector && n.msMatchesSelector(selector) ||\n n.webkitMatchesSelector && n.webkitMatchesSelector(selector);\n }\n return false;\n }\n /**\n * @param {?} el\n * @return {?}\n */\n isTemplateElement(el) {\n return this.isElementNode(el) && el.nodeName === 'TEMPLATE';\n }\n /**\n * @param {?} node\n * @return {?}\n */\n isTextNode(node) { return node.nodeType === Node.TEXT_NODE; }\n /**\n * @param {?} node\n * @return {?}\n */\n isCommentNode(node) { return node.nodeType === Node.COMMENT_NODE; }\n /**\n * @param {?} node\n * @return {?}\n */\n isElementNode(node) { return node.nodeType === Node.ELEMENT_NODE; }\n /**\n * @param {?} node\n * @return {?}\n */\n hasShadowRoot(node) {\n return node.shadowRoot != null && node instanceof HTMLElement;\n }\n /**\n * @param {?} node\n * @return {?}\n */\n isShadowRoot(node) { return node instanceof DocumentFragment; }\n /**\n * @param {?} node\n * @return {?}\n */\n importIntoDoc(node) { return document.importNode(this.templateAwareRoot(node), true); }\n /**\n * @param {?} node\n * @return {?}\n */\n adoptNode(node) { return document.adoptNode(node); }\n /**\n * @param {?} el\n * @return {?}\n */\n getHref(el) { return /** @type {?} */ ((el.getAttribute('href'))); }\n /**\n * @param {?} event\n * @return {?}\n */\n getEventKey(event) {\n let /** @type {?} */ key = event.key;\n if (key == null) {\n key = event.keyIdentifier;\n // keyIdentifier is defined in the old draft of DOM Level 3 Events implemented by Chrome and\n // Safari cf\n // http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/events.html#Events-KeyboardEvents-Interfaces\n if (key == null) {\n return 'Unidentified';\n }\n if (key.startsWith('U+')) {\n key = String.fromCharCode(parseInt(key.substring(2), 16));\n if (event.location === DOM_KEY_LOCATION_NUMPAD && _chromeNumKeyPadMap.hasOwnProperty(key)) {\n // There is a bug in Chrome for numeric keypad keys:\n // https://code.google.com/p/chromium/issues/detail?id=155654\n // 1, 2, 3 ... are reported as A, B, C ...\n key = (/** @type {?} */ (_chromeNumKeyPadMap))[key];\n }\n }\n }\n return _keyMap[key] || key;\n }\n /**\n * @param {?} doc\n * @param {?} target\n * @return {?}\n */\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 /**\n * @return {?}\n */\n getHistory() { return window.history; }\n /**\n * @return {?}\n */\n getLocation() { return window.location; }\n /**\n * @param {?} doc\n * @return {?}\n */\n getBaseHref(doc) {\n const /** @type {?} */ href = getBaseElementHref();\n return href == null ? null : relativePath(href);\n }\n /**\n * @return {?}\n */\n resetBaseElement() { baseElement = null; }\n /**\n * @return {?}\n */\n getUserAgent() { return window.navigator.userAgent; }\n /**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n setData(element, name, value) {\n this.setAttribute(element, 'data-' + name, value);\n }\n /**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\n getData(element, name) {\n return this.getAttribute(element, 'data-' + name);\n }\n /**\n * @param {?} element\n * @return {?}\n */\n getComputedStyle(element) { return getComputedStyle(element); }\n /**\n * @return {?}\n */\n supportsWebAnimation() {\n return typeof (/** @type {?} */ (Element)).prototype['animate'] === 'function';\n }\n /**\n * @return {?}\n */\n performanceNow() {\n // performance.now() is not available in all browsers, see\n // http://caniuse.com/#search=performance.now\n return window.performance && window.performance.now ? window.performance.now() :\n new Date().getTime();\n }\n /**\n * @return {?}\n */\n supportsCookies() { return true; }\n /**\n * @param {?} name\n * @return {?}\n */\n getCookie(name) { return ɵparseCookieValue(document.cookie, name); }\n /**\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n setCookie(name, value) {\n // document.cookie is magical, assigning into it assigns/overrides one cookie value, but does\n // not clear other cookies.\n document.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n }\n}\nlet baseElement = null;\n/**\n * @return {?}\n */\nfunction getBaseElementHref() {\n if (!baseElement) {\n baseElement = /** @type {?} */ ((document.querySelector('base')));\n if (!baseElement) {\n return null;\n }\n }\n return baseElement.getAttribute('href');\n}\n// based on urlUtils.js in AngularJS 1\nlet urlParsingNode;\n/**\n * @param {?} url\n * @return {?}\n */\nfunction relativePath(url) {\n if (!urlParsingNode) {\n urlParsingNode = document.createElement('a');\n }\n urlParsingNode.setAttribute('href', url);\n return (urlParsingNode.pathname.charAt(0) === '/') ? urlParsingNode.pathname :\n '/' + urlParsingNode.pathname;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A DI Token representing the main rendering context. In a browser this is the DOM Document.\n *\n * Note: Document might not be available in the Application Context when Application and Rendering\n * Contexts are not the same (e.g. when running the application into a Web Worker).\n *\n * @deprecated import from `\\@angular/common` instead.\n */\nconst DOCUMENT$1 = DOCUMENT;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @return {?}\n */\nfunction supportsState() {\n return !!window.history.pushState;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\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 */\nclass BrowserPlatformLocation extends PlatformLocation {\n /**\n * @param {?} _doc\n */\n constructor(_doc) {\n super();\n this._doc = _doc;\n this._init();\n }\n /**\n * \\@internal\n * @return {?}\n */\n _init() {\n (/** @type {?} */ (this)).location = getDOM().getLocation();\n this._history = getDOM().getHistory();\n }\n /**\n * @return {?}\n */\n getBaseHrefFromDOM() { return /** @type {?} */ ((getDOM().getBaseHref(this._doc))); }\n /**\n * @param {?} fn\n * @return {?}\n */\n onPopState(fn) {\n getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('popstate', fn, false);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n onHashChange(fn) {\n getDOM().getGlobalEventTarget(this._doc, 'window').addEventListener('hashchange', fn, false);\n }\n /**\n * @return {?}\n */\n get pathname() { return this.location.pathname; }\n /**\n * @return {?}\n */\n get search() { return this.location.search; }\n /**\n * @return {?}\n */\n get hash() { return this.location.hash; }\n /**\n * @param {?} newPath\n * @return {?}\n */\n set pathname(newPath) { this.location.pathname = newPath; }\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n pushState(state, title, url) {\n if (supportsState()) {\n this._history.pushState(state, title, url);\n }\n else {\n this.location.hash = url;\n }\n }\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\n replaceState(state, title, url) {\n if (supportsState()) {\n this._history.replaceState(state, title, url);\n }\n else {\n this.location.hash = url;\n }\n }\n /**\n * @return {?}\n */\n forward() { this._history.forward(); }\n /**\n * @return {?}\n */\n back() { this._history.back(); }\n}\nBrowserPlatformLocation.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nBrowserPlatformLocation.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT$1,] },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A service that can be used to get and add meta tags.\n *\n * \\@experimental\n */\nclass Meta {\n /**\n * @param {?} _doc\n */\n constructor(_doc) {\n this._doc = _doc;\n this._dom = getDOM();\n }\n /**\n * @param {?} tag\n * @param {?=} forceCreation\n * @return {?}\n */\n addTag(tag, forceCreation = false) {\n if (!tag)\n return null;\n return this._getOrCreateElement(tag, forceCreation);\n }\n /**\n * @param {?} tags\n * @param {?=} forceCreation\n * @return {?}\n */\n addTags(tags, forceCreation = false) {\n if (!tags)\n 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 * @param {?} attrSelector\n * @return {?}\n */\n getTag(attrSelector) {\n if (!attrSelector)\n return null;\n return this._dom.querySelector(this._doc, `meta[${attrSelector}]`) || null;\n }\n /**\n * @param {?} attrSelector\n * @return {?}\n */\n getTags(attrSelector) {\n if (!attrSelector)\n return [];\n const /** @type {?} */ list = this._dom.querySelectorAll(this._doc, `meta[${attrSelector}]`);\n return list ? [].slice.call(list) : [];\n }\n /**\n * @param {?} tag\n * @param {?=} selector\n * @return {?}\n */\n updateTag(tag, selector) {\n if (!tag)\n return null;\n selector = selector || this._parseSelector(tag);\n const /** @type {?} */ meta = /** @type {?} */ ((this.getTag(selector)));\n if (meta) {\n return this._setMetaElementAttributes(tag, meta);\n }\n return this._getOrCreateElement(tag, true);\n }\n /**\n * @param {?} attrSelector\n * @return {?}\n */\n removeTag(attrSelector) { this.removeTagElement(/** @type {?} */ ((this.getTag(attrSelector)))); }\n /**\n * @param {?} meta\n * @return {?}\n */\n removeTagElement(meta) {\n if (meta) {\n this._dom.remove(meta);\n }\n }\n /**\n * @param {?} meta\n * @param {?=} forceCreation\n * @return {?}\n */\n _getOrCreateElement(meta, forceCreation = false) {\n if (!forceCreation) {\n const /** @type {?} */ selector = this._parseSelector(meta);\n const /** @type {?} */ elem = /** @type {?} */ ((this.getTag(selector)));\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 if (elem && this._containsAttributes(meta, elem))\n return elem;\n }\n const /** @type {?} */ element = /** @type {?} */ (this._dom.createElement('meta'));\n this._setMetaElementAttributes(meta, element);\n const /** @type {?} */ head = this._dom.getElementsByTagName(this._doc, 'head')[0];\n this._dom.appendChild(head, element);\n return element;\n }\n /**\n * @param {?} tag\n * @param {?} el\n * @return {?}\n */\n _setMetaElementAttributes(tag, el) {\n Object.keys(tag).forEach((prop) => this._dom.setAttribute(el, prop, tag[prop]));\n return el;\n }\n /**\n * @param {?} tag\n * @return {?}\n */\n _parseSelector(tag) {\n const /** @type {?} */ attr = tag.name ? 'name' : 'property';\n return `${attr}=\"${tag[attr]}\"`;\n }\n /**\n * @param {?} tag\n * @param {?} elem\n * @return {?}\n */\n _containsAttributes(tag, elem) {\n return Object.keys(tag).every((key) => this._dom.getAttribute(elem, key) === tag[key]);\n }\n}\nMeta.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nMeta.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT$1,] },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * An id that identifies a particular application being bootstrapped, that should\n * match across the client/server boundary.\n */\nconst TRANSITION_ID = new InjectionToken('TRANSITION_ID');\n/**\n * @param {?} transitionId\n * @param {?} document\n * @param {?} injector\n * @return {?}\n */\nfunction appInitializerFactory(transitionId, document, injector) {\n return () => {\n // Wait for all application initializers to be completed before removing the styles set by\n // the server.\n injector.get(ApplicationInitStatus).donePromise.then(() => {\n const /** @type {?} */ dom = getDOM();\n const /** @type {?} */ styles = Array.prototype.slice.apply(dom.querySelectorAll(document, `style[ng-transition]`));\n styles.filter(el => dom.getAttribute(el, 'ng-transition') === transitionId)\n .forEach(el => dom.remove(el));\n });\n };\n}\nconst SERVER_TRANSITION_PROVIDERS = [\n {\n provide: APP_INITIALIZER,\n useFactory: appInitializerFactory,\n deps: [TRANSITION_ID, DOCUMENT$1, Injector],\n multi: true\n },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass BrowserGetTestability {\n /**\n * @return {?}\n */\n static init() { setTestabilityGetter(new BrowserGetTestability()); }\n /**\n * @param {?} registry\n * @return {?}\n */\n addToWindow(registry) {\n ɵglobal['getAngularTestability'] = (elem, findInAncestors = true) => {\n const /** @type {?} */ testability = registry.findTestabilityInTree(elem, findInAncestors);\n if (testability == null) {\n throw new Error('Could not find testability for element.');\n }\n return testability;\n };\n ɵglobal['getAllAngularTestabilities'] = () => registry.getAllTestabilities();\n ɵglobal['getAllAngularRootElements'] = () => registry.getAllRootElements();\n const /** @type {?} */ whenAllStable = (callback /** TODO #9100 */) => {\n const /** @type {?} */ testabilities = ɵglobal['getAllAngularTestabilities']();\n let /** @type {?} */ count = testabilities.length;\n let /** @type {?} */ didWork = false;\n const /** @type {?} */ decrement = function (didWork_ /** TODO #9100 */) {\n didWork = didWork || didWork_;\n count--;\n if (count == 0) {\n callback(didWork);\n }\n };\n testabilities.forEach(function (testability /** TODO #9100 */) {\n testability.whenStable(decrement);\n });\n };\n if (!ɵglobal['frameworkStabilizers']) {\n ɵglobal['frameworkStabilizers'] = [];\n }\n ɵglobal['frameworkStabilizers'].push(whenAllStable);\n }\n /**\n * @param {?} registry\n * @param {?} elem\n * @param {?} findInAncestors\n * @return {?}\n */\n findTestabilityInTree(registry, elem, findInAncestors) {\n if (elem == null) {\n return null;\n }\n const /** @type {?} */ t = registry.getTestability(elem);\n if (t != null) {\n return t;\n }\n else if (!findInAncestors) {\n return null;\n }\n if (getDOM().isShadowRoot(elem)) {\n return this.findTestabilityInTree(registry, getDOM().getHost(elem), true);\n }\n return this.findTestabilityInTree(registry, getDOM().parentElement(elem), true);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 (`` tag)\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\n * (representing the `` tag). Instead, this service can be used to set and get the current\n * title value.\n *\n * \\@experimental\n */\nclass Title {\n /**\n * @param {?} _doc\n */\n constructor(_doc) {\n this._doc = _doc;\n }\n /**\n * Get the title of the current HTML document.\n * @return {?}\n */\n getTitle() { return getDOM().getTitle(this._doc); }\n /**\n * Set the title of the current HTML document.\n * @param {?} newTitle\n * @return {?}\n */\n setTitle(newTitle) { getDOM().setTitle(this._doc, newTitle); }\n}\nTitle.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nTitle.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT$1,] },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} input\n * @return {?}\n */\n\n/**\n * @param {?} input\n * @return {?}\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 * @return {?}\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 /** @type {?} */ ng = ɵglobal['ng'] = (/** @type {?} */ (ɵglobal['ng'])) || {};\n ng[name] = value;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst CORE_TOKENS = {\n 'ApplicationRef': ApplicationRef,\n 'NgZone': NgZone,\n};\nconst INSPECT_GLOBAL_NAME = 'probe';\nconst CORE_TOKENS_GLOBAL_NAME = 'coreTokens';\n/**\n * Returns a {\\@link DebugElement} for the given native DOM element, or\n * null if the given native element does not have an Angular view associated\n * with it.\n * @param {?} element\n * @return {?}\n */\nfunction inspectNativeElement(element) {\n return getDebugNode(element);\n}\n/**\n * @param {?} coreTokens\n * @return {?}\n */\nfunction _createNgProbe(coreTokens) {\n exportNgVar(INSPECT_GLOBAL_NAME, inspectNativeElement);\n exportNgVar(CORE_TOKENS_GLOBAL_NAME, Object.assign({}, CORE_TOKENS, _ngProbeTokensToMap(coreTokens || [])));\n return () => inspectNativeElement;\n}\n/**\n * @param {?} tokens\n * @return {?}\n */\nfunction _ngProbeTokensToMap(tokens) {\n return tokens.reduce((prev, t) => (prev[t.name] = t.token, prev), {});\n}\n/**\n * Providers which support debugging Angular applications (e.g. via `ng.probe`).\n */\nconst ELEMENT_PROBE_PROVIDERS = [\n {\n provide: APP_INITIALIZER,\n useFactory: _createNgProbe,\n deps: [\n [NgProbeToken, new Optional()],\n ],\n multi: true,\n },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@stable\n */\nconst EVENT_MANAGER_PLUGINS = new InjectionToken('EventManagerPlugins');\n/**\n * \\@stable\n */\nclass EventManager {\n /**\n * @param {?} plugins\n * @param {?} _zone\n */\n constructor(plugins, _zone) {\n this._zone = _zone;\n this._eventNameToPlugin = new Map();\n plugins.forEach(p => p.manager = this);\n this._plugins = plugins.slice().reverse();\n }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n addEventListener(element, eventName, handler) {\n const /** @type {?} */ plugin = this._findPluginFor(eventName);\n return plugin.addEventListener(element, eventName, handler);\n }\n /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n addGlobalEventListener(target, eventName, handler) {\n const /** @type {?} */ plugin = this._findPluginFor(eventName);\n return plugin.addGlobalEventListener(target, eventName, handler);\n }\n /**\n * @return {?}\n */\n getZone() { return this._zone; }\n /**\n * \\@internal\n * @param {?} eventName\n * @return {?}\n */\n _findPluginFor(eventName) {\n const /** @type {?} */ plugin = this._eventNameToPlugin.get(eventName);\n if (plugin) {\n return plugin;\n }\n const /** @type {?} */ plugins = this._plugins;\n for (let /** @type {?} */ i = 0; i < plugins.length; i++) {\n const /** @type {?} */ plugin = plugins[i];\n if (plugin.supports(eventName)) {\n this._eventNameToPlugin.set(eventName, plugin);\n return plugin;\n }\n }\n throw new Error(`No event manager plugin found for event ${eventName}`);\n }\n}\nEventManager.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nEventManager.ctorParameters = () => [\n { type: Array, decorators: [{ type: Inject, args: [EVENT_MANAGER_PLUGINS,] },] },\n { type: NgZone, },\n];\n/**\n * @abstract\n */\nclass EventManagerPlugin {\n /**\n * @param {?} _doc\n */\n constructor(_doc) {\n this._doc = _doc;\n }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n addGlobalEventListener(element, eventName, handler) {\n const /** @type {?} */ target = getDOM().getGlobalEventTarget(this._doc, element);\n if (!target) {\n throw new Error(`Unsupported event target ${target} for event ${eventName}`);\n }\n return this.addEventListener(target, eventName, handler);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass SharedStylesHost {\n constructor() {\n /**\n * \\@internal\n */\n this._stylesSet = new Set();\n }\n /**\n * @param {?} styles\n * @return {?}\n */\n addStyles(styles) {\n const /** @type {?} */ additions = new Set();\n styles.forEach(style => {\n if (!this._stylesSet.has(style)) {\n this._stylesSet.add(style);\n additions.add(style);\n }\n });\n this.onStylesAdded(additions);\n }\n /**\n * @param {?} additions\n * @return {?}\n */\n onStylesAdded(additions) { }\n /**\n * @return {?}\n */\n getAllStyles() { return Array.from(this._stylesSet); }\n}\nSharedStylesHost.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nSharedStylesHost.ctorParameters = () => [];\nclass DomSharedStylesHost extends SharedStylesHost {\n /**\n * @param {?} _doc\n */\n constructor(_doc) {\n super();\n this._doc = _doc;\n this._hostNodes = new Set();\n this._styleNodes = new Set();\n this._hostNodes.add(_doc.head);\n }\n /**\n * @param {?} styles\n * @param {?} host\n * @return {?}\n */\n _addStylesToHost(styles, host) {\n styles.forEach((style) => {\n const /** @type {?} */ styleEl = this._doc.createElement('style');\n styleEl.textContent = style;\n this._styleNodes.add(host.appendChild(styleEl));\n });\n }\n /**\n * @param {?} hostNode\n * @return {?}\n */\n addHost(hostNode) {\n this._addStylesToHost(this._stylesSet, hostNode);\n this._hostNodes.add(hostNode);\n }\n /**\n * @param {?} hostNode\n * @return {?}\n */\n removeHost(hostNode) { this._hostNodes.delete(hostNode); }\n /**\n * @param {?} additions\n * @return {?}\n */\n onStylesAdded(additions) {\n this._hostNodes.forEach(hostNode => this._addStylesToHost(additions, hostNode));\n }\n /**\n * @return {?}\n */\n ngOnDestroy() { this._styleNodes.forEach(styleNode => getDOM().remove(styleNode)); }\n}\nDomSharedStylesHost.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nDomSharedStylesHost.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT$1,] },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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};\nconst COMPONENT_REGEX = /%COMP%/g;\nconst COMPONENT_VARIABLE = '%COMP%';\nconst HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;\nconst CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;\n/**\n * @param {?} componentShortId\n * @return {?}\n */\nfunction shimContentAttribute(componentShortId) {\n return CONTENT_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n/**\n * @param {?} componentShortId\n * @return {?}\n */\nfunction shimHostAttribute(componentShortId) {\n return HOST_ATTR.replace(COMPONENT_REGEX, componentShortId);\n}\n/**\n * @param {?} compId\n * @param {?} styles\n * @param {?} target\n * @return {?}\n */\nfunction flattenStyles(compId, styles, target) {\n for (let /** @type {?} */ i = 0; i < styles.length; i++) {\n let /** @type {?} */ style = styles[i];\n if (Array.isArray(style)) {\n flattenStyles(compId, style, target);\n }\n else {\n style = style.replace(COMPONENT_REGEX, compId);\n target.push(style);\n }\n }\n return target;\n}\n/**\n * @param {?} eventHandler\n * @return {?}\n */\nfunction decoratePreventDefault(eventHandler) {\n return (event) => {\n const /** @type {?} */ allowDefaultBehavior = eventHandler(event);\n if (allowDefaultBehavior === false) {\n // TODO(tbosch): move preventDefault into event plugins...\n event.preventDefault();\n event.returnValue = false;\n }\n };\n}\nclass DomRendererFactory2 {\n /**\n * @param {?} eventManager\n * @param {?} sharedStylesHost\n */\n constructor(eventManager, sharedStylesHost) {\n this.eventManager = eventManager;\n this.sharedStylesHost = sharedStylesHost;\n this.rendererByCompId = new Map();\n this.defaultRenderer = new DefaultDomRenderer2(eventManager);\n }\n /**\n * @param {?} element\n * @param {?} type\n * @return {?}\n */\n createRenderer(element, type) {\n if (!element || !type) {\n return this.defaultRenderer;\n }\n switch (type.encapsulation) {\n case ViewEncapsulation.Emulated: {\n let /** @type {?} */ renderer = this.rendererByCompId.get(type.id);\n if (!renderer) {\n renderer =\n new EmulatedEncapsulationDomRenderer2(this.eventManager, this.sharedStylesHost, type);\n this.rendererByCompId.set(type.id, renderer);\n }\n (/** @type {?} */ (renderer)).applyToHost(element);\n return renderer;\n }\n case ViewEncapsulation.Native:\n return new ShadowDomRenderer(this.eventManager, this.sharedStylesHost, element, type);\n default: {\n if (!this.rendererByCompId.has(type.id)) {\n const /** @type {?} */ styles = flattenStyles(type.id, type.styles, []);\n this.sharedStylesHost.addStyles(styles);\n this.rendererByCompId.set(type.id, this.defaultRenderer);\n }\n return this.defaultRenderer;\n }\n }\n }\n /**\n * @return {?}\n */\n begin() { }\n /**\n * @return {?}\n */\n end() { }\n}\nDomRendererFactory2.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nDomRendererFactory2.ctorParameters = () => [\n { type: EventManager, },\n { type: DomSharedStylesHost, },\n];\nclass DefaultDomRenderer2 {\n /**\n * @param {?} eventManager\n */\n constructor(eventManager) {\n this.eventManager = eventManager;\n this.data = Object.create(null);\n }\n /**\n * @return {?}\n */\n destroy() { }\n /**\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n createElement(name, namespace) {\n if (namespace) {\n return document.createElementNS(NAMESPACE_URIS[namespace], name);\n }\n return document.createElement(name);\n }\n /**\n * @param {?} value\n * @return {?}\n */\n createComment(value) { return document.createComment(value); }\n /**\n * @param {?} value\n * @return {?}\n */\n createText(value) { return document.createTextNode(value); }\n /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n appendChild(parent, newChild) { parent.appendChild(newChild); }\n /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n insertBefore(parent, newChild, refChild) {\n if (parent) {\n parent.insertBefore(newChild, refChild);\n }\n }\n /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n removeChild(parent, oldChild) {\n if (parent) {\n parent.removeChild(oldChild);\n }\n }\n /**\n * @param {?} selectorOrNode\n * @return {?}\n */\n selectRootElement(selectorOrNode) {\n let /** @type {?} */ el = typeof selectorOrNode === 'string' ? document.querySelector(selectorOrNode) :\n selectorOrNode;\n if (!el) {\n throw new Error(`The selector \"${selectorOrNode}\" did not match any elements`);\n }\n el.textContent = '';\n return el;\n }\n /**\n * @param {?} node\n * @return {?}\n */\n parentNode(node) { return node.parentNode; }\n /**\n * @param {?} node\n * @return {?}\n */\n nextSibling(node) { return node.nextSibling; }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @param {?=} namespace\n * @return {?}\n */\n setAttribute(el, name, value, namespace) {\n if (namespace) {\n name = `${namespace}:${name}`;\n const /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.setAttributeNS(namespaceUri, name, value);\n }\n else {\n el.setAttribute(name, value);\n }\n }\n else {\n el.setAttribute(name, value);\n }\n }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n removeAttribute(el, name, namespace) {\n if (namespace) {\n const /** @type {?} */ namespaceUri = NAMESPACE_URIS[namespace];\n if (namespaceUri) {\n el.removeAttributeNS(namespaceUri, name);\n }\n else {\n el.removeAttribute(`${namespace}:${name}`);\n }\n }\n else {\n el.removeAttribute(name);\n }\n }\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n addClass(el, name) { el.classList.add(name); }\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n removeClass(el, name) { el.classList.remove(name); }\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} value\n * @param {?} flags\n * @return {?}\n */\n setStyle(el, style, value, flags) {\n if (flags & RendererStyleFlags2.DashCase) {\n el.style.setProperty(style, value, !!(flags & RendererStyleFlags2.Important) ? 'important' : '');\n }\n else {\n el.style[style] = value;\n }\n }\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} flags\n * @return {?}\n */\n removeStyle(el, style, flags) {\n if (flags & RendererStyleFlags2.DashCase) {\n el.style.removeProperty(style);\n }\n else {\n // IE requires '' instead of null\n // see https://github.com/angular/angular/issues/7916\n el.style[style] = '';\n }\n }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n setProperty(el, name, value) {\n checkNoSyntheticProp(name, 'property');\n el[name] = value;\n }\n /**\n * @param {?} node\n * @param {?} value\n * @return {?}\n */\n setValue(node, value) { node.nodeValue = value; }\n /**\n * @param {?} target\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\n listen(target, event, callback) {\n checkNoSyntheticProp(event, 'listener');\n if (typeof target === 'string') {\n return /** @type {?} */ (this.eventManager.addGlobalEventListener(target, event, decoratePreventDefault(callback)));\n }\n return /** @type {?} */ ((this.eventManager.addEventListener(target, event, decoratePreventDefault(callback))));\n }\n}\nconst AT_CHARCODE = '@'.charCodeAt(0);\n/**\n * @param {?} name\n * @param {?} nameKind\n * @return {?}\n */\nfunction checkNoSyntheticProp(name, nameKind) {\n if (name.charCodeAt(0) === AT_CHARCODE) {\n throw new Error(`Found the synthetic ${nameKind} ${name}. Please include either \"BrowserAnimationsModule\" or \"NoopAnimationsModule\" in your application.`);\n }\n}\nclass EmulatedEncapsulationDomRenderer2 extends DefaultDomRenderer2 {\n /**\n * @param {?} eventManager\n * @param {?} sharedStylesHost\n * @param {?} component\n */\n constructor(eventManager, sharedStylesHost, component) {\n super(eventManager);\n this.component = component;\n const /** @type {?} */ styles = flattenStyles(component.id, component.styles, []);\n sharedStylesHost.addStyles(styles);\n this.contentAttr = shimContentAttribute(component.id);\n this.hostAttr = shimHostAttribute(component.id);\n }\n /**\n * @param {?} element\n * @return {?}\n */\n applyToHost(element) { super.setAttribute(element, this.hostAttr, ''); }\n /**\n * @param {?} parent\n * @param {?} name\n * @return {?}\n */\n createElement(parent, name) {\n const /** @type {?} */ el = super.createElement(parent, name);\n super.setAttribute(el, this.contentAttr, '');\n return el;\n }\n}\nclass ShadowDomRenderer extends DefaultDomRenderer2 {\n /**\n * @param {?} eventManager\n * @param {?} sharedStylesHost\n * @param {?} hostEl\n * @param {?} component\n */\n constructor(eventManager, sharedStylesHost, hostEl, component) {\n super(eventManager);\n this.sharedStylesHost = sharedStylesHost;\n this.hostEl = hostEl;\n this.component = component;\n this.shadowRoot = (/** @type {?} */ (hostEl)).createShadowRoot();\n this.sharedStylesHost.addHost(this.shadowRoot);\n const /** @type {?} */ styles = flattenStyles(component.id, component.styles, []);\n for (let /** @type {?} */ i = 0; i < styles.length; i++) {\n const /** @type {?} */ styleEl = document.createElement('style');\n styleEl.textContent = styles[i];\n this.shadowRoot.appendChild(styleEl);\n }\n }\n /**\n * @param {?} node\n * @return {?}\n */\n nodeOrShadowRoot(node) { return node === this.hostEl ? this.shadowRoot : node; }\n /**\n * @return {?}\n */\n destroy() { this.sharedStylesHost.removeHost(this.shadowRoot); }\n /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n appendChild(parent, newChild) {\n return super.appendChild(this.nodeOrShadowRoot(parent), newChild);\n }\n /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n insertBefore(parent, newChild, refChild) {\n return super.insertBefore(this.nodeOrShadowRoot(parent), newChild, refChild);\n }\n /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n removeChild(parent, oldChild) {\n return super.removeChild(this.nodeOrShadowRoot(parent), oldChild);\n }\n /**\n * @param {?} node\n * @return {?}\n */\n parentNode(node) {\n return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(node)));\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst ɵ0 = function (v) {\n return '__zone_symbol__' + v;\n};\n/**\n * Detect if Zone is present. If it is then use simple zone aware 'addEventListener'\n * since Angular can do much more\n * efficient bookkeeping than Zone can, because we have additional information. This speeds up\n * addEventListener by 3x.\n */\nconst __symbol__ = (typeof Zone !== 'undefined') && (/** @type {?} */ (Zone))['__symbol__'] || ɵ0;\nconst ADD_EVENT_LISTENER = __symbol__('addEventListener');\nconst REMOVE_EVENT_LISTENER = __symbol__('removeEventListener');\nconst symbolNames = {};\nconst FALSE = 'FALSE';\nconst ANGULAR = 'ANGULAR';\nconst NATIVE_ADD_LISTENER = 'addEventListener';\nconst NATIVE_REMOVE_LISTENER = 'removeEventListener';\n// use the same symbol string which is used in zone.js\nconst stopSymbol = '__zone_symbol__propagationStopped';\nconst stopMethodSymbol = '__zone_symbol__stopImmediatePropagation';\nconst blackListedEvents = (typeof Zone !== 'undefined') && (/** @type {?} */ (Zone))[__symbol__('BLACK_LISTED_EVENTS')];\nlet blackListedMap;\nif (blackListedEvents) {\n blackListedMap = {};\n blackListedEvents.forEach(eventName => { blackListedMap[eventName] = eventName; });\n}\nconst isBlackListedEvent = function (eventName) {\n if (!blackListedMap) {\n return false;\n }\n return blackListedMap.hasOwnProperty(eventName);\n};\n// a global listener to handle all dom event,\n// so we do not need to create a closure everytime\nconst globalListener = function (event) {\n const /** @type {?} */ symbolName = symbolNames[event.type];\n if (!symbolName) {\n return;\n }\n const /** @type {?} */ taskDatas = this[symbolName];\n if (!taskDatas) {\n return;\n }\n const /** @type {?} */ args = [event];\n if (taskDatas.length === 1) {\n // if taskDatas only have one element, just invoke it\n const /** @type {?} */ taskData = taskDatas[0];\n if (taskData.zone !== Zone.current) {\n // only use Zone.run when Zone.current not equals to stored zone\n return taskData.zone.run(taskData.handler, this, args);\n }\n else {\n return taskData.handler.apply(this, args);\n }\n }\n else {\n // copy tasks as a snapshot to avoid event handlers remove\n // itself or others\n const /** @type {?} */ copiedTasks = taskDatas.slice();\n for (let /** @type {?} */ i = 0; i < copiedTasks.length; i++) {\n // if other listener call event.stopImmediatePropagation\n // just break\n if ((/** @type {?} */ (event))[stopSymbol] === true) {\n break;\n }\n const /** @type {?} */ taskData = copiedTasks[i];\n if (taskData.zone !== Zone.current) {\n // only use Zone.run when Zone.current not equals to stored zone\n taskData.zone.run(taskData.handler, this, args);\n }\n else {\n taskData.handler.apply(this, args);\n }\n }\n }\n};\nclass DomEventsPlugin extends EventManagerPlugin {\n /**\n * @param {?} doc\n * @param {?} ngZone\n */\n constructor(doc, ngZone) {\n super(doc);\n this.ngZone = ngZone;\n this.patchEvent();\n }\n /**\n * @return {?}\n */\n patchEvent() {\n if (!Event || !Event.prototype) {\n return;\n }\n if ((/** @type {?} */ (Event.prototype))[stopMethodSymbol]) {\n // already patched by zone.js\n return;\n }\n const /** @type {?} */ delegate = (/** @type {?} */ (Event.prototype))[stopMethodSymbol] =\n Event.prototype.stopImmediatePropagation;\n Event.prototype.stopImmediatePropagation = function () {\n if (this) {\n this[stopSymbol] = true;\n }\n // should call native delegate in case\n // in some enviroment part of the application\n // will not use the patched Event\n delegate && delegate.apply(this, arguments);\n };\n }\n /**\n * @param {?} eventName\n * @return {?}\n */\n supports(eventName) { return true; }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n addEventListener(element, eventName, handler) {\n /**\n * This code is about to add a listener to the DOM. If Zone.js is present, than\n * `addEventListener` has been patched. The patched code adds overhead in both\n * memory and speed (3x slower) than native. For this reason if we detect that\n * Zone.js is present we use a simple version of zone aware addEventListener instead.\n * The result is faster registration and the zone will be restored.\n * But ZoneSpec.onScheduleTask, ZoneSpec.onInvokeTask, ZoneSpec.onCancelTask\n * will not be invoked\n * We also do manual zone restoration in element.ts renderEventHandlerClosure method.\n *\n * NOTE: it is possible that the element is from different iframe, and so we\n * have to check before we execute the method.\n */\n const /** @type {?} */ self = this;\n const /** @type {?} */ zoneJsLoaded = element[ADD_EVENT_LISTENER];\n let /** @type {?} */ callback = /** @type {?} */ (handler);\n // if zonejs is loaded and current zone is not ngZone\n // we keep Zone.current on target for later restoration.\n if (zoneJsLoaded && (!NgZone.isInAngularZone() || isBlackListedEvent(eventName))) {\n let /** @type {?} */ symbolName = symbolNames[eventName];\n if (!symbolName) {\n symbolName = symbolNames[eventName] = __symbol__(ANGULAR + eventName + FALSE);\n }\n let /** @type {?} */ taskDatas = (/** @type {?} */ (element))[symbolName];\n const /** @type {?} */ globalListenerRegistered = taskDatas && taskDatas.length > 0;\n if (!taskDatas) {\n taskDatas = (/** @type {?} */ (element))[symbolName] = [];\n }\n const /** @type {?} */ zone = isBlackListedEvent(eventName) ? Zone.root : Zone.current;\n if (taskDatas.length === 0) {\n taskDatas.push({ zone: zone, handler: callback });\n }\n else {\n let /** @type {?} */ callbackRegistered = false;\n for (let /** @type {?} */ i = 0; i < taskDatas.length; i++) {\n if (taskDatas[i].handler === callback) {\n callbackRegistered = true;\n break;\n }\n }\n if (!callbackRegistered) {\n taskDatas.push({ zone: zone, handler: callback });\n }\n }\n if (!globalListenerRegistered) {\n element[ADD_EVENT_LISTENER](eventName, globalListener, false);\n }\n }\n else {\n element[NATIVE_ADD_LISTENER](eventName, callback, false);\n }\n return () => this.removeEventListener(element, eventName, callback);\n }\n /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n removeEventListener(target, eventName, callback) {\n let /** @type {?} */ underlyingRemove = target[REMOVE_EVENT_LISTENER];\n // zone.js not loaded, use native removeEventListener\n if (!underlyingRemove) {\n return target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n let /** @type {?} */ symbolName = symbolNames[eventName];\n let /** @type {?} */ taskDatas = symbolName && target[symbolName];\n if (!taskDatas) {\n // addEventListener not using patched version\n // just call native removeEventListener\n return target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n // fix issue 20532, should be able to remove\n // listener which was added inside of ngZone\n let /** @type {?} */ found = false;\n for (let /** @type {?} */ i = 0; i < taskDatas.length; i++) {\n // remove listener from taskDatas if the callback equals\n if (taskDatas[i].handler === callback) {\n found = true;\n taskDatas.splice(i, 1);\n break;\n }\n }\n if (found) {\n if (taskDatas.length === 0) {\n // all listeners are removed, we can remove the globalListener from target\n underlyingRemove.apply(target, [eventName, globalListener, false]);\n }\n }\n else {\n // not found in taskDatas, the callback may be added inside of ngZone\n // use native remove listener to remove the calback\n target[NATIVE_REMOVE_LISTENER].apply(target, [eventName, callback, false]);\n }\n }\n}\nDomEventsPlugin.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nDomEventsPlugin.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT$1,] },] },\n { type: NgZone, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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};\n/**\n * A DI token that you can use to provide{\\@link HammerGestureConfig} to Angular. Use it to configure\n * Hammer gestures.\n *\n * \\@experimental\n */\nconst HAMMER_GESTURE_CONFIG = new InjectionToken('HammerGestureConfig');\n/**\n * @record\n */\n\n/**\n * \\@experimental\n */\nclass HammerGestureConfig {\n constructor() {\n this.events = [];\n this.overrides = {};\n }\n /**\n * @param {?} element\n * @return {?}\n */\n buildHammer(element) {\n const /** @type {?} */ mc = new Hammer(element);\n mc.get('pinch').set({ enable: true });\n mc.get('rotate').set({ enable: true });\n for (const /** @type {?} */ eventName in this.overrides) {\n mc.get(eventName).set(this.overrides[eventName]);\n }\n return mc;\n }\n}\nHammerGestureConfig.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nHammerGestureConfig.ctorParameters = () => [];\nclass HammerGesturesPlugin extends EventManagerPlugin {\n /**\n * @param {?} doc\n * @param {?} _config\n */\n constructor(doc, _config) {\n super(doc);\n this._config = _config;\n }\n /**\n * @param {?} eventName\n * @return {?}\n */\n supports(eventName) {\n if (!EVENT_NAMES.hasOwnProperty(eventName.toLowerCase()) && !this.isCustomEvent(eventName)) {\n return false;\n }\n if (!(/** @type {?} */ (window)).Hammer) {\n throw new Error(`Hammer.js is not loaded, can not bind ${eventName} event`);\n }\n return true;\n }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n addEventListener(element, eventName, handler) {\n const /** @type {?} */ zone = this.manager.getZone();\n eventName = eventName.toLowerCase();\n return zone.runOutsideAngular(() => {\n // Creating the manager bind events, must be done outside of angular\n const /** @type {?} */ mc = this._config.buildHammer(element);\n const /** @type {?} */ callback = function (eventObj) {\n zone.runGuarded(function () { handler(eventObj); });\n };\n mc.on(eventName, callback);\n return () => mc.off(eventName, callback);\n });\n }\n /**\n * @param {?} eventName\n * @return {?}\n */\n isCustomEvent(eventName) { return this._config.events.indexOf(eventName) > -1; }\n}\nHammerGesturesPlugin.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nHammerGesturesPlugin.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT$1,] },] },\n { type: HammerGestureConfig, decorators: [{ type: Inject, args: [HAMMER_GESTURE_CONFIG,] },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst MODIFIER_KEYS = ['alt', 'control', 'meta', 'shift'];\nconst ɵ0$1 = (event) => event.altKey;\nconst ɵ1$1 = (event) => event.ctrlKey;\nconst ɵ2$1 = (event) => event.metaKey;\nconst ɵ3 = (event) => event.shiftKey;\nconst MODIFIER_KEY_GETTERS = {\n 'alt': ɵ0$1,\n 'control': ɵ1$1,\n 'meta': ɵ2$1,\n 'shift': ɵ3\n};\n/**\n * \\@experimental\n */\nclass KeyEventsPlugin extends EventManagerPlugin {\n /**\n * @param {?} doc\n */\n constructor(doc) { super(doc); }\n /**\n * @param {?} eventName\n * @return {?}\n */\n supports(eventName) { return KeyEventsPlugin.parseEventName(eventName) != null; }\n /**\n * @param {?} element\n * @param {?} eventName\n * @param {?} handler\n * @return {?}\n */\n addEventListener(element, eventName, handler) {\n const /** @type {?} */ parsedEvent = /** @type {?} */ ((KeyEventsPlugin.parseEventName(eventName)));\n const /** @type {?} */ 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 * @param {?} eventName\n * @return {?}\n */\n static parseEventName(eventName) {\n const /** @type {?} */ parts = eventName.toLowerCase().split('.');\n const /** @type {?} */ domEventName = parts.shift();\n if ((parts.length === 0) || !(domEventName === 'keydown' || domEventName === 'keyup')) {\n return null;\n }\n const /** @type {?} */ key = KeyEventsPlugin._normalizeKey(/** @type {?} */ ((parts.pop())));\n let /** @type {?} */ fullKey = '';\n MODIFIER_KEYS.forEach(modifierName => {\n const /** @type {?} */ 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 const /** @type {?} */ result = {};\n result['domEventName'] = domEventName;\n result['fullKey'] = fullKey;\n return result;\n }\n /**\n * @param {?} event\n * @return {?}\n */\n static getEventFullKey(event) {\n let /** @type {?} */ fullKey = '';\n let /** @type {?} */ key = getDOM().getEventKey(event);\n key = key.toLowerCase();\n if (key === ' ') {\n key = 'space'; // for readability\n }\n else if (key === '.') {\n key = 'dot'; // because '.' is used as a separator in event names\n }\n MODIFIER_KEYS.forEach(modifierName => {\n if (modifierName != key) {\n const /** @type {?} */ modifierGetter = MODIFIER_KEY_GETTERS[modifierName];\n if (modifierGetter(event)) {\n fullKey += modifierName + '.';\n }\n }\n });\n fullKey += key;\n return fullKey;\n }\n /**\n * @param {?} fullKey\n * @param {?} handler\n * @param {?} zone\n * @return {?}\n */\n static eventCallback(fullKey, handler, zone) {\n return (event /** TODO #9100 */) => {\n if (KeyEventsPlugin.getEventFullKey(event) === fullKey) {\n zone.runGuarded(() => handler(event));\n }\n };\n }\n /**\n * \\@internal\n * @param {?} keyName\n * @return {?}\n */\n static _normalizeKey(keyName) {\n // TODO: switch to a Map if the mapping grows too much\n switch (keyName) {\n case 'esc':\n return 'escape';\n default:\n return keyName;\n }\n }\n}\nKeyEventsPlugin.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nKeyEventsPlugin.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT$1,] },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * This helper class 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 must use one of three strategies for doing this.\n * Support: Safari 10.x -> XHR strategy\n * Support: Firefox -> DomParser strategy\n * Default: InertDocument strategy\n */\nclass InertBodyHelper {\n /**\n * @param {?} defaultDoc\n * @param {?} DOM\n */\n constructor(defaultDoc, DOM) {\n this.defaultDoc = defaultDoc;\n this.DOM = DOM;\n const /** @type {?} */ inertDocument = this.DOM.createHtmlDocument();\n this.inertBodyElement = inertDocument.body;\n if (this.inertBodyElement == null) {\n // usually there should be only one body element in the document, but IE doesn't have any, so\n // we need to create one.\n const /** @type {?} */ inertHtml = this.DOM.createElement('html', inertDocument);\n this.inertBodyElement = this.DOM.createElement('body', inertDocument);\n this.DOM.appendChild(inertHtml, this.inertBodyElement);\n this.DOM.appendChild(inertDocument, inertHtml);\n }\n this.DOM.setInnerHTML(this.inertBodyElement, '<svg><g onload=\"this.parentNode.remove()\"></g></svg>');\n if (this.inertBodyElement.querySelector && !this.inertBodyElement.querySelector('svg')) {\n // We just hit the Safari 10.1 bug - which allows JS to run inside the SVG G element\n // so use the XHR strategy.\n this.getInertBodyElement = this.getInertBodyElement_XHR;\n return;\n }\n this.DOM.setInnerHTML(this.inertBodyElement, '<svg><p><style><img src=\"</style><img src=x onerror=alert(1)//\">');\n if (this.inertBodyElement.querySelector && this.inertBodyElement.querySelector('svg img')) {\n // We just hit the Firefox bug - which prevents the inner img JS from being sanitized\n // so use the DOMParser strategy, if it is available.\n // If the DOMParser is not available then we are not in Firefox (Server/WebWorker?) so we\n // fall through to the default strategy below.\n if (isDOMParserAvailable()) {\n this.getInertBodyElement = this.getInertBodyElement_DOMParser;\n return;\n }\n }\n // None of the bugs were hit so it is safe for us to use the default InertDocument strategy\n this.getInertBodyElement = this.getInertBodyElement_InertDocument;\n }\n /**\n * Use XHR to create and fill an inert body element (on Safari 10.1)\n * See\n * https://github.com/cure53/DOMPurify/blob/a992d3a75031cb8bb032e5ea8399ba972bdf9a65/src/purify.js#L439-L449\n * @param {?} html\n * @return {?}\n */\n getInertBodyElement_XHR(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.\n html = '<body><remove></remove>' + html + '</body>';\n try {\n html = encodeURI(html);\n }\n catch (/** @type {?} */ e) {\n return null;\n }\n const /** @type {?} */ xhr = new XMLHttpRequest();\n xhr.responseType = 'document';\n xhr.open('GET', 'data:text/html;charset=utf-8,' + html, false);\n xhr.send(null);\n const /** @type {?} */ body = xhr.response.body;\n body.removeChild(/** @type {?} */ ((body.firstChild)));\n return body;\n }\n /**\n * Use DOMParser to create and fill an inert body element (on Firefox)\n * See https://github.com/cure53/DOMPurify/releases/tag/0.6.7\n *\n * @param {?} html\n * @return {?}\n */\n getInertBodyElement_DOMParser(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.\n html = '<body><remove></remove>' + html + '</body>';\n try {\n const /** @type {?} */ body = /** @type {?} */ (new (/** @type {?} */ (window))\n .DOMParser()\n .parseFromString(html, 'text/html')\n .body);\n body.removeChild(/** @type {?} */ ((body.firstChild)));\n return body;\n }\n catch (/** @type {?} */ e) {\n return null;\n }\n }\n /**\n * Use an HTML5 `template` element, if supported, or an inert body element created via\n * `createHtmlDocument` to create and fill an inert DOM element.\n * This is the default sane strategy to use if the browser does not require one of the specialised\n * strategies above.\n * @param {?} html\n * @return {?}\n */\n getInertBodyElement_InertDocument(html) {\n // Prefer using <template> element if supported.\n const /** @type {?} */ templateEl = this.DOM.createElement('template');\n if ('content' in templateEl) {\n this.DOM.setInnerHTML(templateEl, html);\n return templateEl;\n }\n this.DOM.setInnerHTML(this.inertBodyElement, html);\n // Support: IE 9-11 only\n // strip custom-namespaced attributes on IE<=11\n if (this.defaultDoc.documentMode) {\n this.stripCustomNsAttrs(this.inertBodyElement);\n }\n return this.inertBodyElement;\n }\n /**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1'\n * attribute to declare ns1 namespace and prefixes the attribute with 'ns1' (e.g.\n * 'ns1:xlink:foo').\n *\n * This is undesirable since we don't want to allow any of these custom attributes. This method\n * strips them all.\n * @param {?} el\n * @return {?}\n */\n stripCustomNsAttrs(el) {\n this.DOM.attributeMap(el).forEach((_, attrName) => {\n if (attrName === 'xmlns:ns1' || attrName.indexOf('ns1:') === 0) {\n this.DOM.removeAttribute(el, attrName);\n }\n });\n for (const /** @type {?} */ n of this.DOM.childNodesAsList(el)) {\n if (this.DOM.isElementNode(n))\n this.stripCustomNsAttrs(/** @type {?} */ (n));\n }\n }\n}\n/**\n * We need to determine whether the DOMParser exists in the global context.\n * The try-catch is because, on some browsers, trying to access this property\n * on window can actually throw an error.\n *\n * @suppress {uselessCode}\n * @return {?}\n */\nfunction isDOMParserAvailable() {\n try {\n return !!(/** @type {?} */ (window)).DOMParser;\n }\n catch (/** @type {?} */ e) {\n return false;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\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 (comment from here on and regex copied from\n * Soy's EscapingConventions):\n * (1) Either a protocol in a whitelist (http, https, mailto or ftp).\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. \"http\" for \"http\".\n * It also disallows HTML entities in the first path part of a relative path,\n * e.g. \"foo<bar/baz\". Our existing escaping functions should not produce\n * that. More importantly, it disallows masking of a colon,\n * e.g. \"javascript:...\".\n *\n * This regular expression was taken from the Closure sanitization library.\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\\/]+=*$/i;\n/**\n * @param {?} url\n * @return {?}\n */\nfunction sanitizeUrl(url) {\n url = String(url);\n if (url.match(SAFE_URL_PATTERN) || url.match(DATA_URL_PATTERN))\n return url;\n if (isDevMode()) {\n getDOM().log(`WARNING: sanitizing unsafe URL value ${url} (see http://g.co/ng/security#xss)`);\n }\n return 'unsafe:' + url;\n}\n/**\n * @param {?} srcset\n * @return {?}\n */\nfunction sanitizeSrcset(srcset) {\n srcset = String(srcset);\n return srcset.split(',').map((srcset) => sanitizeUrl(srcset.trim())).join(', ');\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} tags\n * @return {?}\n */\nfunction tagSet(tags) {\n const /** @type {?} */ res = {};\n for (const /** @type {?} */ t of tags.split(','))\n res[t] = true;\n return res;\n}\n/**\n * @param {...?} sets\n * @return {?}\n */\nfunction merge(...sets) {\n const /** @type {?} */ res = {};\n for (const /** @type {?} */ s of sets) {\n for (const /** @type {?} */ v in s) {\n if (s.hasOwnProperty(v))\n res[v] = true;\n }\n }\n return res;\n}\n// Good source of info about elements and attributes\n// http://dev.w3.org/html5/spec/Overview.html#semantics\n// http://simon.html5.org/html-elements\n// Safe Void Elements - HTML5\n// http://dev.w3.org/html5/spec/Overview.html#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// http://dev.w3.org/html5/spec/Overview.html#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,' +\n 'aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +\n '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,' +\n 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,' +\n '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');\n// Attributes that have special href set hence need to be sanitized\nconst SRCSET_ATTRS = tagSet('srcset');\nconst HTML_ATTRS = tagSet('abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,' +\n 'compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,' +\n 'ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,' +\n 'scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,' +\n 'valign,value,vspace,width');\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, SRCSET_ATTRS, HTML_ATTRS);\n/**\n * SanitizingHtmlSerializer serializes a DOM fragment, stripping out any unsafe elements and unsafe\n * attributes.\n */\nclass SanitizingHtmlSerializer {\n constructor() {\n this.sanitizedSomething = false;\n this.buf = [];\n this.DOM = getDOM();\n }\n /**\n * @param {?} el\n * @return {?}\n */\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 /** @type {?} */ current = /** @type {?} */ ((this.DOM.firstChild(el)));\n while (current) {\n if (this.DOM.isElementNode(current)) {\n this.startElement(/** @type {?} */ (current));\n }\n else if (this.DOM.isTextNode(current)) {\n this.chars(/** @type {?} */ ((this.DOM.nodeValue(current))));\n }\n else {\n // Strip non-element, non-text nodes.\n this.sanitizedSomething = true;\n }\n if (this.DOM.firstChild(current)) {\n current = /** @type {?} */ ((this.DOM.firstChild(current)));\n continue;\n }\n while (current) {\n // Leaving the element. Walk up and to the right, closing tags as we go.\n if (this.DOM.isElementNode(current)) {\n this.endElement(/** @type {?} */ (current));\n }\n let /** @type {?} */ next = this.checkClobberedElement(current, /** @type {?} */ ((this.DOM.nextSibling(current))));\n if (next) {\n current = next;\n break;\n }\n current = this.checkClobberedElement(current, /** @type {?} */ ((this.DOM.parentElement(current))));\n }\n }\n return this.buf.join('');\n }\n /**\n * @param {?} element\n * @return {?}\n */\n startElement(element) {\n const /** @type {?} */ tagName = this.DOM.nodeName(element).toLowerCase();\n if (!VALID_ELEMENTS.hasOwnProperty(tagName)) {\n this.sanitizedSomething = true;\n return;\n }\n this.buf.push('<');\n this.buf.push(tagName);\n this.DOM.attributeMap(element).forEach((value, attrName) => {\n const /** @type {?} */ lower = attrName.toLowerCase();\n if (!VALID_ATTRS.hasOwnProperty(lower)) {\n this.sanitizedSomething = true;\n return;\n }\n // TODO(martinprobst): Special case image URIs for data:image/...\n if (URI_ATTRS[lower])\n value = sanitizeUrl(value);\n if (SRCSET_ATTRS[lower])\n value = sanitizeSrcset(value);\n this.buf.push(' ');\n this.buf.push(attrName);\n this.buf.push('=\"');\n this.buf.push(encodeEntities(value));\n this.buf.push('\"');\n });\n this.buf.push('>');\n }\n /**\n * @param {?} current\n * @return {?}\n */\n endElement(current) {\n const /** @type {?} */ tagName = this.DOM.nodeName(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 /**\n * @param {?} chars\n * @return {?}\n */\n chars(chars) { this.buf.push(encodeEntities(chars)); }\n /**\n * @param {?} node\n * @param {?} nextNode\n * @return {?}\n */\n checkClobberedElement(node, nextNode) {\n if (nextNode && this.DOM.contains(node, nextNode)) {\n throw new Error(`Failed to sanitize html because the element is clobbered: ${this.DOM.getOuterHTML(node)}`);\n }\n return nextNode;\n }\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 * @return {?}\n */\nfunction encodeEntities(value) {\n return value.replace(/&/g, '&')\n .replace(SURROGATE_PAIR_REGEXP, function (match) {\n const /** @type {?} */ hi = match.charCodeAt(0);\n const /** @type {?} */ low = match.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n })\n .replace(NON_ALPHANUMERIC_REGEXP, function (match) { return '&#' + match.charCodeAt(0) + ';'; })\n .replace(/</g, '<')\n .replace(/>/g, '>');\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 * @param {?} defaultDoc\n * @param {?} unsafeHtmlInput\n * @return {?}\n */\nfunction sanitizeHtml(defaultDoc, unsafeHtmlInput) {\n const /** @type {?} */ DOM = getDOM();\n let /** @type {?} */ inertBodyElement = null;\n try {\n inertBodyHelper = inertBodyHelper || new InertBodyHelper(defaultDoc, DOM);\n // Make sure unsafeHtml is actually a string (TypeScript types are not enforced at runtime).\n let /** @type {?} */ 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 /** @type {?} */ mXSSAttempts = 5;\n let /** @type {?} */ 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 = DOM.getInnerHTML(inertBodyElement);\n inertBodyElement = inertBodyHelper.getInertBodyElement(unsafeHtml);\n } while (unsafeHtml !== parsedHtml);\n const /** @type {?} */ sanitizer = new SanitizingHtmlSerializer();\n const /** @type {?} */ safeHtml = sanitizer.sanitizeChildren(DOM.getTemplateContent(inertBodyElement) || inertBodyElement);\n if (isDevMode() && sanitizer.sanitizedSomething) {\n DOM.log('WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).');\n }\n return safeHtml;\n }\n finally {\n // In case anything goes wrong, clear out inertElement to reset the entire DOM structure.\n if (inertBodyElement) {\n const /** @type {?} */ parent = DOM.getTemplateContent(inertBodyElement) || inertBodyElement;\n for (const /** @type {?} */ child of DOM.childNodesAsList(parent)) {\n DOM.removeChild(parent, child);\n }\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Regular expression for safe style values.\n *\n * Quotes (\" and ') are allowed, but a check must be done elsewhere to ensure they're balanced.\n *\n * ',' allows multiple values to be assigned to the same property (e.g. background-attachment or\n * font-family) and hence could allow multiple values to get injected, but that should pose no risk\n * of XSS.\n *\n * The function expression checks only for XSS safety, not for CSS validity.\n *\n * This regular expression was taken from the Closure sanitization library, and augmented for\n * transformation values.\n */\nconst VALUES = '[-,.\"\\'%_!# a-zA-Z0-9]+';\nconst TRANSFORMATION_FNS = '(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?';\nconst COLOR_FNS = '(?:rgb|hsl)a?';\nconst GRADIENTS = '(?:repeating-)?(?:linear|radial)-gradient';\nconst CSS3_FNS = '(?:calc|attr)';\nconst FN_ARGS = '\\\\([-0-9.%, #a-zA-Z]+\\\\)';\nconst SAFE_STYLE_VALUE = new RegExp(`^(${VALUES}|` +\n `(?:${TRANSFORMATION_FNS}|${COLOR_FNS}|${GRADIENTS}|${CSS3_FNS})` +\n `${FN_ARGS})$`, 'g');\n/**\n * Matches a `url(...)` value with an arbitrary argument as long as it does\n * not contain parentheses.\n *\n * The URL value still needs to be sanitized separately.\n *\n * `url(...)` values are a very common use case, e.g. for `background-image`. With carefully crafted\n * CSS style rules, it is possible to construct an information leak with `url` values in CSS, e.g.\n * by observing whether scroll bars are displayed, or character ranges used by a font face\n * definition.\n *\n * Angular only allows binding CSS values (as opposed to entire CSS rules), so it is unlikely that\n * binding a URL value without further cooperation from the page will cause an information leak, and\n * if so, it is just a leak, not a full blown XSS vulnerability.\n *\n * Given the common use case, low likelihood of attack vector, and low impact of an attack, this\n * code is permissive and allows URLs that sanitize otherwise.\n */\nconst URL_RE = /^url\\(([^)]+)\\)$/;\n/**\n * Checks that quotes (\" and ') are properly balanced inside a string. Assumes\n * that neither escape (\\) nor any other character that could result in\n * breaking out of a string parsing context are allowed;\n * see http://www.w3.org/TR/css3-syntax/#string-token-diagram.\n *\n * This code was taken from the Closure sanitization library.\n * @param {?} value\n * @return {?}\n */\nfunction hasBalancedQuotes(value) {\n let /** @type {?} */ outsideSingle = true;\n let /** @type {?} */ outsideDouble = true;\n for (let /** @type {?} */ i = 0; i < value.length; i++) {\n const /** @type {?} */ c = value.charAt(i);\n if (c === '\\'' && outsideDouble) {\n outsideSingle = !outsideSingle;\n }\n else if (c === '\"' && outsideSingle) {\n outsideDouble = !outsideDouble;\n }\n }\n return outsideSingle && outsideDouble;\n}\n/**\n * Sanitizes the given untrusted CSS style property value (i.e. not an entire object, just a single\n * value) and returns a value that is safe to use in a browser environment.\n * @param {?} value\n * @return {?}\n */\nfunction sanitizeStyle(value) {\n value = String(value).trim(); // Make sure it's actually a string.\n if (!value)\n return '';\n // Single url(...) values are supported, but only for URLs that sanitize cleanly. See above for\n // reasoning behind this.\n const /** @type {?} */ urlMatch = value.match(URL_RE);\n if ((urlMatch && sanitizeUrl(urlMatch[1]) === urlMatch[1]) ||\n value.match(SAFE_STYLE_VALUE) && hasBalancedQuotes(value)) {\n return value; // Safe style values.\n }\n if (isDevMode()) {\n getDOM().log(`WARNING: sanitizing unsafe style value ${value} (see http://g.co/ng/security#xss).`);\n }\n return 'unsafe';\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Marker interface for a value that's safe to use in a particular context.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as HTML.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as style (CSS).\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as JavaScript.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as a URL linking to a document.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Marker interface for a value that's safe to use as a URL to load executable code from.\n *\n * \\@stable\n * @record\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](http://g.co/ng/security).\n *\n * \\@stable\n * @abstract\n */\nclass DomSanitizer {\n}\nclass DomSanitizerImpl extends DomSanitizer {\n /**\n * @param {?} _doc\n */\n constructor(_doc) {\n super();\n this._doc = _doc;\n }\n /**\n * @param {?} ctx\n * @param {?} value\n * @return {?}\n */\n sanitize(ctx, value) {\n if (value == null)\n return null;\n switch (ctx) {\n case SecurityContext.NONE:\n return /** @type {?} */ (value);\n case SecurityContext.HTML:\n if (value instanceof SafeHtmlImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'HTML');\n return sanitizeHtml(this._doc, String(value));\n case SecurityContext.STYLE:\n if (value instanceof SafeStyleImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'Style');\n return sanitizeStyle(/** @type {?} */ (value));\n case SecurityContext.SCRIPT:\n if (value instanceof SafeScriptImpl)\n return value.changingThisBreaksApplicationSecurity;\n this.checkNotSafeValue(value, 'Script');\n throw new Error('unsafe value used in a script context');\n case SecurityContext.URL:\n if (value instanceof SafeResourceUrlImpl || value instanceof SafeUrlImpl) {\n // Allow resource URLs in URL contexts, they are strictly more trusted.\n return value.changingThisBreaksApplicationSecurity;\n }\n this.checkNotSafeValue(value, 'URL');\n return sanitizeUrl(String(value));\n case SecurityContext.RESOURCE_URL:\n if (value instanceof SafeResourceUrlImpl) {\n return value.changingThisBreaksApplicationSecurity;\n }\n this.checkNotSafeValue(value, 'ResourceURL');\n throw new Error('unsafe value used in a resource URL context (see http://g.co/ng/security#xss)');\n default:\n throw new Error(`Unexpected SecurityContext ${ctx} (see http://g.co/ng/security#xss)`);\n }\n }\n /**\n * @param {?} value\n * @param {?} expectedType\n * @return {?}\n */\n checkNotSafeValue(value, expectedType) {\n if (value instanceof SafeValueImpl) {\n throw new Error(`Required a safe ${expectedType}, got a ${value.getTypeName()} ` +\n `(see http://g.co/ng/security#xss)`);\n }\n }\n /**\n * @param {?} value\n * @return {?}\n */\n bypassSecurityTrustHtml(value) { return new SafeHtmlImpl(value); }\n /**\n * @param {?} value\n * @return {?}\n */\n bypassSecurityTrustStyle(value) { return new SafeStyleImpl(value); }\n /**\n * @param {?} value\n * @return {?}\n */\n bypassSecurityTrustScript(value) { return new SafeScriptImpl(value); }\n /**\n * @param {?} value\n * @return {?}\n */\n bypassSecurityTrustUrl(value) { return new SafeUrlImpl(value); }\n /**\n * @param {?} value\n * @return {?}\n */\n bypassSecurityTrustResourceUrl(value) {\n return new SafeResourceUrlImpl(value);\n }\n}\nDomSanitizerImpl.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nDomSanitizerImpl.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT$1,] },] },\n];\n/**\n * @abstract\n */\nclass SafeValueImpl {\n /**\n * @param {?} changingThisBreaksApplicationSecurity\n */\n constructor(changingThisBreaksApplicationSecurity) {\n // empty\n this.changingThisBreaksApplicationSecurity = changingThisBreaksApplicationSecurity;\n }\n /**\n * @return {?}\n */\n toString() {\n return `SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity}` +\n ` (see http://g.co/ng/security#xss)`;\n }\n}\nclass SafeHtmlImpl extends SafeValueImpl {\n /**\n * @return {?}\n */\n getTypeName() { return 'HTML'; }\n}\nclass SafeStyleImpl extends SafeValueImpl {\n /**\n * @return {?}\n */\n getTypeName() { return 'Style'; }\n}\nclass SafeScriptImpl extends SafeValueImpl {\n /**\n * @return {?}\n */\n getTypeName() { return 'Script'; }\n}\nclass SafeUrlImpl extends SafeValueImpl {\n /**\n * @return {?}\n */\n getTypeName() { return 'URL'; }\n}\nclass SafeResourceUrlImpl extends SafeValueImpl {\n /**\n * @return {?}\n */\n getTypeName() { return 'ResourceURL'; }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst INTERNAL_BROWSER_PLATFORM_PROVIDERS = [\n { provide: PLATFORM_ID, useValue: ɵPLATFORM_BROWSER_ID },\n { provide: PLATFORM_INITIALIZER, useValue: initDomAdapter, multi: true },\n { provide: PlatformLocation, useClass: BrowserPlatformLocation, deps: [DOCUMENT$1] },\n { provide: DOCUMENT$1, useFactory: _document, deps: [] },\n];\n/**\n * \\@security Replacing built-in sanitization providers exposes the application to XSS risks.\n * Attacker-controlled data introduced by an unsanitized provider could expose your\n * application to XSS risks. For more detail, see the [Security Guide](http://g.co/ng/security).\n * \\@experimental\n */\nconst BROWSER_SANITIZATION_PROVIDERS = [\n { provide: Sanitizer, useExisting: DomSanitizer },\n { provide: DomSanitizer, useClass: DomSanitizerImpl, deps: [DOCUMENT$1] },\n];\n/**\n * \\@stable\n */\nconst platformBrowser = createPlatformFactory(platformCore, 'browser', INTERNAL_BROWSER_PLATFORM_PROVIDERS);\n/**\n * @return {?}\n */\nfunction initDomAdapter() {\n BrowserDomAdapter.makeCurrent();\n BrowserGetTestability.init();\n}\n/**\n * @return {?}\n */\nfunction errorHandler() {\n return new ErrorHandler();\n}\n/**\n * @return {?}\n */\nfunction _document() {\n return document;\n}\n/**\n * The ng module for the browser.\n *\n * \\@stable\n */\nclass BrowserModule {\n /**\n * @param {?} parentModule\n */\n constructor(parentModule) {\n if (parentModule) {\n throw new Error(`BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.`);\n }\n }\n /**\n * Configures a browser-based application to transition from a server-rendered app, if\n * one is present on the page. The specified parameters must include an application id,\n * which must match between the client and server applications.\n *\n * \\@experimental\n * @param {?} params\n * @return {?}\n */\n static withServerTransition(params) {\n return {\n ngModule: BrowserModule,\n providers: [\n { provide: APP_ID, useValue: params.appId },\n { provide: TRANSITION_ID, useExisting: APP_ID },\n SERVER_TRANSITION_PROVIDERS,\n ],\n };\n }\n}\nBrowserModule.decorators = [\n { type: NgModule, args: [{\n providers: [\n BROWSER_SANITIZATION_PROVIDERS,\n { provide: ErrorHandler, useFactory: errorHandler, deps: [] },\n { provide: EVENT_MANAGER_PLUGINS, useClass: DomEventsPlugin, multi: true },\n { provide: EVENT_MANAGER_PLUGINS, useClass: KeyEventsPlugin, multi: true },\n { provide: EVENT_MANAGER_PLUGINS, useClass: HammerGesturesPlugin, multi: true },\n { provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig },\n DomRendererFactory2,\n { provide: RendererFactory2, useExisting: DomRendererFactory2 },\n { provide: SharedStylesHost, useExisting: DomSharedStylesHost },\n DomSharedStylesHost,\n Testability,\n EventManager,\n ELEMENT_PROBE_PROVIDERS,\n Meta,\n Title,\n ],\n exports: [CommonModule, ApplicationModule]\n },] },\n];\n/** @nocollapse */\nBrowserModule.ctorParameters = () => [\n { type: BrowserModule, decorators: [{ type: Optional }, { type: SkipSelf },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst win = typeof window !== 'undefined' && window || /** @type {?} */ ({});\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass ChangeDetectionPerfRecord {\n /**\n * @param {?} msPerTick\n * @param {?} numTicks\n */\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 /**\n * @param {?} ref\n */\n constructor(ref) { this.appRef = ref.injector.get(ApplicationRef); }\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 * @param {?} config\n * @return {?}\n */\n timeChangeDetection(config) {\n const /** @type {?} */ record = config && config['record'];\n const /** @type {?} */ profileName = 'Change Detection';\n // Profiler is not available in Android browsers, nor in IE 9 without dev tools opened\n const /** @type {?} */ isProfilerAvailable = win.console.profile != null;\n if (record && isProfilerAvailable) {\n win.console.profile(profileName);\n }\n const /** @type {?} */ start = getDOM().performanceNow();\n let /** @type {?} */ numTicks = 0;\n while (numTicks < 5 || (getDOM().performanceNow() - start) < 500) {\n this.appRef.tick();\n numTicks++;\n }\n const /** @type {?} */ end = getDOM().performanceNow();\n if (record && isProfilerAvailable) {\n // need to cast to <any> because type checker thinks there's no argument\n // while in fact there is:\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/Console/profileEnd\n (/** @type {?} */ (win.console.profileEnd))(profileName);\n }\n const /** @type {?} */ msPerTick = (end - start) / numTicks;\n win.console.log(`ran ${numTicks} change detection cycles`);\n win.console.log(`${msPerTick.toFixed(2)} ms per check`);\n return new ChangeDetectionPerfRecord(msPerTick, numTicks);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 * \\@experimental All debugging apis are currently experimental.\n * @template T\n * @param {?} ref\n * @return {?}\n */\nfunction enableDebugTools(ref) {\n exportNgVar(PROFILER_GLOBAL_NAME, new AngularProfiler(ref));\n return ref;\n}\n/**\n * Disables Angular tools.\n *\n * \\@experimental All debugging apis are currently experimental.\n * @return {?}\n */\nfunction disableDebugTools() {\n exportNgVar(PROFILER_GLOBAL_NAME, null);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} text\n * @return {?}\n */\nfunction escapeHtml(text) {\n const /** @type {?} */ escapedText = {\n '&': '&a;',\n '\"': '&q;',\n '\\'': '&s;',\n '<': '&l;',\n '>': '&g;',\n };\n return text.replace(/[&\"'<>]/g, s => escapedText[s]);\n}\n/**\n * @param {?} text\n * @return {?}\n */\nfunction unescapeHtml(text) {\n const /** @type {?} */ unescapedText = {\n '&a;': '&',\n '&q;': '\"',\n '&s;': '\\'',\n '&l;': '<',\n '&g;': '>',\n };\n return text.replace(/&[^;]+;/g, s => unescapedText[s]);\n}\n/**\n * Create a `StateKey<T>` that can be used to store value of type T with `TransferState`.\n *\n * Example:\n *\n * ```\n * const COUNTER_KEY = makeStateKey<number>('counter');\n * let value = 10;\n *\n * transferState.set(COUNTER_KEY, value);\n * ```\n *\n * \\@experimental\n * @template T\n * @param {?} key\n * @return {?}\n */\nfunction makeStateKey(key) {\n return /** @type {?} */ (key);\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 * `TransferState` will be available as an injectable token. To use it import\n * `ServerTransferStateModule` on the server and `BrowserTransferStateModule` on the client.\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 deserialzied in a\n * non-lossy manner.\n *\n * \\@experimental\n */\nclass TransferState {\n constructor() {\n this.store = {};\n this.onSerializeCallbacks = {};\n }\n /**\n * \\@internal\n * @param {?} initState\n * @return {?}\n */\n static init(initState) {\n const /** @type {?} */ transferState = new TransferState();\n transferState.store = initState;\n return transferState;\n }\n /**\n * Get the value corresponding to a key. Return `defaultValue` if key is not found.\n * @template T\n * @param {?} key\n * @param {?} defaultValue\n * @return {?}\n */\n get(key, defaultValue) {\n return this.store[key] !== undefined ? /** @type {?} */ (this.store[key]) : defaultValue;\n }\n /**\n * Set the value corresponding to a key.\n * @template T\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\n set(key, value) { this.store[key] = value; }\n /**\n * Remove a key from the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n remove(key) { delete this.store[key]; }\n /**\n * Test whether a key exists in the store.\n * @template T\n * @param {?} key\n * @return {?}\n */\n hasKey(key) { return this.store.hasOwnProperty(key); }\n /**\n * Register a callback to provide the value for a key when `toJson` is called.\n * @template T\n * @param {?} key\n * @param {?} callback\n * @return {?}\n */\n onSerialize(key, callback) {\n this.onSerializeCallbacks[key] = callback;\n }\n /**\n * Serialize the current state of the store to JSON.\n * @return {?}\n */\n toJson() {\n // Call the onSerialize callbacks and put those values into the store.\n for (const /** @type {?} */ key in this.onSerializeCallbacks) {\n if (this.onSerializeCallbacks.hasOwnProperty(key)) {\n try {\n this.store[key] = this.onSerializeCallbacks[key]();\n }\n catch (/** @type {?} */ e) {\n console.warn('Exception in onSerialize callback: ', e);\n }\n }\n }\n return JSON.stringify(this.store);\n }\n}\nTransferState.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nTransferState.ctorParameters = () => [];\n/**\n * @param {?} doc\n * @param {?} appId\n * @return {?}\n */\nfunction initTransferState(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 /** @type {?} */ script = doc.getElementById(appId + '-state');\n let /** @type {?} */ initialState = {};\n if (script && script.textContent) {\n try {\n initialState = JSON.parse(unescapeHtml(script.textContent));\n }\n catch (/** @type {?} */ e) {\n console.warn('Exception while restoring TransferState for app ' + appId, e);\n }\n }\n return TransferState.init(initialState);\n}\n/**\n * NgModule to install on the client side while using the `TransferState` to transfer state from\n * server to client.\n *\n * \\@experimental\n */\nclass BrowserTransferStateModule {\n}\nBrowserTransferStateModule.decorators = [\n { type: NgModule, args: [{\n providers: [{ provide: TransferState, useFactory: initTransferState, deps: [DOCUMENT$1, APP_ID] }],\n },] },\n];\n/** @nocollapse */\nBrowserTransferStateModule.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Predicates for use with {\\@link DebugElement}'s query functions.\n *\n * \\@experimental All debugging apis are currently experimental.\n */\nclass By {\n /**\n * Match all elements.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_all'}\n * @return {?}\n */\n static all() { return (debugElement) => true; }\n /**\n * Match elements by the given CSS selector.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_css'}\n * @param {?} selector\n * @return {?}\n */\n static css(selector) {\n return (debugElement) => {\n return debugElement.nativeElement != null ?\n getDOM().elementMatches(debugElement.nativeElement, selector) :\n false;\n };\n }\n /**\n * Match elements that have the given directive present.\n *\n * ## Example\n *\n * {\\@example platform-browser/dom/debug/ts/by/by.ts region='by_directive'}\n * @param {?} type\n * @return {?}\n */\n static directive(type) {\n return (debugElement) => /** @type {?} */ ((debugElement.providerTokens)).indexOf(type) !== -1;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@stable\n */\nconst VERSION = new Version('5.2.10');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BrowserModule, platformBrowser, Meta, Title, disableDebugTools, enableDebugTools, BrowserTransferStateModule, TransferState, makeStateKey, By, DOCUMENT$1 as DOCUMENT, EVENT_MANAGER_PLUGINS, EventManager, HAMMER_GESTURE_CONFIG, HammerGestureConfig, DomSanitizer, VERSION, BROWSER_SANITIZATION_PROVIDERS as ɵBROWSER_SANITIZATION_PROVIDERS, INTERNAL_BROWSER_PLATFORM_PROVIDERS as ɵINTERNAL_BROWSER_PLATFORM_PROVIDERS, initDomAdapter as ɵinitDomAdapter, BrowserDomAdapter as ɵBrowserDomAdapter, BrowserPlatformLocation as ɵBrowserPlatformLocation, TRANSITION_ID as ɵTRANSITION_ID, BrowserGetTestability as ɵBrowserGetTestability, escapeHtml as ɵescapeHtml, ELEMENT_PROBE_PROVIDERS as ɵELEMENT_PROBE_PROVIDERS, DomAdapter as ɵDomAdapter, getDOM as ɵgetDOM, setRootDomAdapter as ɵsetRootDomAdapter, DomRendererFactory2 as ɵDomRendererFactory2, NAMESPACE_URIS as ɵNAMESPACE_URIS, flattenStyles as ɵflattenStyles, shimContentAttribute as ɵshimContentAttribute, shimHostAttribute as ɵshimHostAttribute, DomEventsPlugin as ɵDomEventsPlugin, HammerGesturesPlugin as ɵHammerGesturesPlugin, KeyEventsPlugin as ɵKeyEventsPlugin, DomSharedStylesHost as ɵDomSharedStylesHost, SharedStylesHost as ɵSharedStylesHost, _document as ɵb, errorHandler as ɵa, GenericBrowserDomAdapter as ɵi, SERVER_TRANSITION_PROVIDERS as ɵg, appInitializerFactory as ɵf, initTransferState as ɵc, _createNgProbe as ɵh, EventManagerPlugin as ɵd, DomSanitizerImpl as ɵe };\n//# sourceMappingURL=platform-browser.js.map\n","// typeof any so that it we don't have to cast when comparing a result to the error object\nexport const errorObject = { e: {} };\n//# sourceMappingURL=errorObject.js.map","import { errorObject } from './errorObject';\nlet tryCatchTarget;\nfunction tryCatcher() {\n try {\n return tryCatchTarget.apply(this, arguments);\n }\n catch (e) {\n errorObject.e = e;\n return errorObject;\n }\n}\nexport function tryCatch(fn) {\n tryCatchTarget = fn;\n return tryCatcher;\n}\n;\n//# sourceMappingURL=tryCatch.js.map","/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport class UnsubscriptionError extends Error {\n constructor(errors) {\n super();\n this.errors = errors;\n const err = Error.call(this, errors ?\n `${errors.length} errors occurred during unsubscription:\n ${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}` : '');\n this.name = err.name = 'UnsubscriptionError';\n this.stack = err.stack;\n this.message = err.message;\n }\n}\n//# sourceMappingURL=UnsubscriptionError.js.map","import { isArray } from './util/isArray';\nimport { isObject } from './util/isObject';\nimport { isFunction } from './util/isFunction';\nimport { tryCatch } from './util/tryCatch';\nimport { errorObject } from './util/errorObject';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription {\n /**\n * @param {function(): void} [unsubscribe] A function describing how to\n * perform the disposal of resources when the `unsubscribe` method is called.\n */\n constructor(unsubscribe) {\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n * @type {boolean}\n */\n this.closed = false;\n this._parent = null;\n this._parents = null;\n this._subscriptions = null;\n if (unsubscribe) {\n this._unsubscribe = unsubscribe;\n }\n }\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe() {\n let hasErrors = false;\n let errors;\n if (this.closed) {\n return;\n }\n let { _parent, _parents, _unsubscribe, _subscriptions } = this;\n this.closed = true;\n this._parent = null;\n this._parents = null;\n // null out _subscriptions first so any child subscriptions that attempt\n // to remove themselves from this subscription will noop\n this._subscriptions = null;\n let index = -1;\n let len = _parents ? _parents.length : 0;\n // if this._parent is null, then so is this._parents, and we\n // don't have to remove ourselves from any parent subscriptions.\n while (_parent) {\n _parent.remove(this);\n // if this._parents is null or index >= len,\n // then _parent is set to null, and the loop exits\n _parent = ++index < len && _parents[index] || null;\n }\n if (isFunction(_unsubscribe)) {\n let trial = tryCatch(_unsubscribe).call(this);\n if (trial === errorObject) {\n hasErrors = true;\n errors = errors || (errorObject.e instanceof UnsubscriptionError ?\n flattenUnsubscriptionErrors(errorObject.e.errors) : [errorObject.e]);\n }\n }\n if (isArray(_subscriptions)) {\n index = -1;\n len = _subscriptions.length;\n while (++index < len) {\n const sub = _subscriptions[index];\n if (isObject(sub)) {\n let trial = tryCatch(sub.unsubscribe).call(sub);\n if (trial === errorObject) {\n hasErrors = true;\n errors = errors || [];\n let err = errorObject.e;\n if (err instanceof UnsubscriptionError) {\n errors = errors.concat(flattenUnsubscriptionErrors(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n }\n if (hasErrors) {\n throw new UnsubscriptionError(errors);\n }\n }\n /**\n * Adds a tear down to be called during the unsubscribe() of this\n * Subscription.\n *\n * If the tear down being added is a subscription that is already\n * unsubscribed, is the same reference `add` is being called on, or is\n * `Subscription.EMPTY`, it will not be added.\n *\n * If this subscription is already in an `closed` state, the passed\n * tear down logic will be executed immediately.\n *\n * @param {TeardownLogic} teardown The additional logic to execute on\n * teardown.\n * @return {Subscription} Returns the Subscription used or created to be\n * added to the inner subscriptions list. This Subscription can be used with\n * `remove()` to remove the passed teardown logic from the inner subscriptions\n * list.\n */\n add(teardown) {\n if (!teardown || (teardown === Subscription.EMPTY)) {\n return Subscription.EMPTY;\n }\n if (teardown === this) {\n return this;\n }\n let subscription = teardown;\n switch (typeof teardown) {\n case 'function':\n subscription = new Subscription(teardown);\n case 'object':\n if (subscription.closed || typeof subscription.unsubscribe !== 'function') {\n return subscription;\n }\n else if (this.closed) {\n subscription.unsubscribe();\n return subscription;\n }\n else if (typeof subscription._addParent !== 'function' /* quack quack */) {\n const tmp = subscription;\n subscription = new Subscription();\n subscription._subscriptions = [tmp];\n }\n break;\n default:\n throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');\n }\n const subscriptions = this._subscriptions || (this._subscriptions = []);\n subscriptions.push(subscription);\n subscription._addParent(this);\n return subscription;\n }\n /**\n * Removes a Subscription from the internal list of subscriptions that will\n * unsubscribe during the unsubscribe process of this Subscription.\n * @param {Subscription} subscription The subscription to remove.\n * @return {void}\n */\n remove(subscription) {\n const subscriptions = this._subscriptions;\n if (subscriptions) {\n const subscriptionIndex = subscriptions.indexOf(subscription);\n if (subscriptionIndex !== -1) {\n subscriptions.splice(subscriptionIndex, 1);\n }\n }\n }\n _addParent(parent) {\n let { _parent, _parents } = this;\n if (!_parent || _parent === parent) {\n // If we don't have a parent, or the new parent is the same as the\n // current parent, then set this._parent to the new parent.\n this._parent = parent;\n }\n else if (!_parents) {\n // If there's already one parent, but not multiple, allocate an Array to\n // store the rest of the parent Subscriptions.\n this._parents = [parent];\n }\n else if (_parents.indexOf(parent) === -1) {\n // Only add the new parent to the _parents list if it's not already there.\n _parents.push(parent);\n }\n }\n}\nSubscription.EMPTY = (function (empty) {\n empty.closed = true;\n return empty;\n}(new Subscription()));\nfunction flattenUnsubscriptionErrors(errors) {\n return errors.reduce((errs, err) => errs.concat((err instanceof UnsubscriptionError) ? err.errors : err), []);\n}\n//# sourceMappingURL=Subscription.js.map","import { Subscriber } from './Subscriber';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nexport class OuterSubscriber extends Subscriber {\n notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.destination.next(innerValue);\n }\n notifyError(error, innerSub) {\n this.destination.error(error);\n }\n notifyComplete(innerSub) {\n this.destination.complete();\n }\n}\n//# sourceMappingURL=OuterSubscriber.js.map","import { root } from '../util/root';\nimport { Observable } from '../Observable';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nexport class PromiseObservable extends Observable {\n constructor(promise, scheduler) {\n super();\n this.promise = promise;\n this.scheduler = scheduler;\n }\n /**\n * Converts a Promise to an Observable.\n *\n * <span class=\"informal\">Returns an Observable that just emits the Promise's\n * resolved value, then completes.</span>\n *\n * Converts an ES2015 Promise or a Promises/A+ spec compliant Promise to an\n * Observable. If the Promise resolves with a value, the output Observable\n * emits that resolved value as a `next`, and then completes. If the Promise\n * is rejected, then the output Observable emits the corresponding Error.\n *\n * @example <caption>Convert the Promise returned by Fetch to an Observable</caption>\n * var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));\n * result.subscribe(x => console.log(x), e => console.error(e));\n *\n * @see {@link bindCallback}\n * @see {@link from}\n *\n * @param {PromiseLike<T>} promise The promise to be converted.\n * @param {Scheduler} [scheduler] An optional IScheduler to use for scheduling\n * the delivery of the resolved value (or the rejection).\n * @return {Observable<T>} An Observable which wraps the Promise.\n * @static true\n * @name fromPromise\n * @owner Observable\n */\n static create(promise, scheduler) {\n return new PromiseObservable(promise, scheduler);\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n const promise = this.promise;\n const scheduler = this.scheduler;\n if (scheduler == null) {\n if (this._isScalar) {\n if (!subscriber.closed) {\n subscriber.next(this.value);\n subscriber.complete();\n }\n }\n else {\n promise.then((value) => {\n this.value = value;\n this._isScalar = true;\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, (err) => {\n if (!subscriber.closed) {\n subscriber.error(err);\n }\n })\n .then(null, err => {\n // escape the promise trap, throw unhandled errors\n root.setTimeout(() => { throw err; });\n });\n }\n }\n else {\n if (this._isScalar) {\n if (!subscriber.closed) {\n return scheduler.schedule(dispatchNext, 0, { value: this.value, subscriber });\n }\n }\n else {\n promise.then((value) => {\n this.value = value;\n this._isScalar = true;\n if (!subscriber.closed) {\n subscriber.add(scheduler.schedule(dispatchNext, 0, { value, subscriber }));\n }\n }, (err) => {\n if (!subscriber.closed) {\n subscriber.add(scheduler.schedule(dispatchError, 0, { err, subscriber }));\n }\n })\n .then(null, (err) => {\n // escape the promise trap, throw unhandled errors\n root.setTimeout(() => { throw err; });\n });\n }\n }\n }\n}\nfunction dispatchNext(arg) {\n const { value, subscriber } = arg;\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n}\nfunction dispatchError(arg) {\n const { err, subscriber } = arg;\n if (!subscriber.closed) {\n subscriber.error(err);\n }\n}\n//# sourceMappingURL=PromiseObservable.js.map","export function isFunction(x) {\n return typeof x === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","import { root } from './util/root';\nimport { toSubscriber } from './util/toSubscriber';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n *\n * @class Observable<T>\n */\nexport class Observable {\n /**\n * @constructor\n * @param {Function} subscribe the function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe) {\n this._isScalar = false;\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n /**\n * Creates a new Observable, with this Observable as the source, and the passed\n * operator defined as the new observable's operator.\n * @method lift\n * @param {Operator} operator the operator defining the operation to take on the observable\n * @return {Observable} a new observable with the Operator applied\n */\n lift(operator) {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * <span class=\"informal\">Use it when you have all these Observables, but still nothing is happening.</span>\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to a {@link create} static factory, but most of the time it is\n * a library implementation, which defines what and when will be emitted by an Observable. This means that calling\n * `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, that if `error` method is not provided, all errors will\n * be left uncaught.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where first function is equivalent\n * of a `next` method, second of an `error` method and third of a `complete` method. Just as in case of Observer,\n * if you do not need to listen for something, you can omit a function, preferably by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to `error` function, just as before, if not provided, errors emitted by an Observable will be thrown.\n *\n * Whatever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a {@link Scheduler}.\n *\n * @example <caption>Subscribe with an Observer</caption>\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() { // We actually could just remove this method,\n * }, // since we do not really care about errors right now.\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * Rx.Observable.of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // \"Adding: 1\"\n * // \"Adding: 2\"\n * // \"Adding: 3\"\n * // \"Sum equals: 6\"\n *\n *\n * @example <caption>Subscribe with functions</caption>\n * let sum = 0;\n *\n * Rx.Observable.of(1, 2, 3)\n * .subscribe(\n * function(value) {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * function() {\n * console.log('Sum equals: ' + sum);\n * }\n * );\n *\n * // Logs:\n * // \"Adding: 1\"\n * // \"Adding: 2\"\n * // \"Adding: 3\"\n * // \"Sum equals: 6\"\n *\n *\n * @example <caption>Cancel a subscription</caption>\n * const subscription = Rx.Observable.interval(1000).subscribe(\n * num => console.log(num),\n * undefined,\n * () => console.log('completed!') // Will not be called, even\n * ); // when cancelling subscription\n *\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // \"unsubscribed!\" after 2.5s\n *\n *\n * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n * or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n * Observable.\n * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown as unhandled.\n * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n * @return {ISubscription} a subscription reference to the registered handlers\n * @method subscribe\n */\n subscribe(observerOrNext, error, complete) {\n const { operator } = this;\n const sink = toSubscriber(observerOrNext, error, complete);\n if (operator) {\n operator.call(sink, this.source);\n }\n else {\n sink.add(this.source || !sink.syncErrorThrowable ? this._subscribe(sink) : this._trySubscribe(sink));\n }\n if (sink.syncErrorThrowable) {\n sink.syncErrorThrowable = false;\n if (sink.syncErrorThrown) {\n throw sink.syncErrorValue;\n }\n }\n return sink;\n }\n _trySubscribe(sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.syncErrorThrown = true;\n sink.syncErrorValue = err;\n sink.error(err);\n }\n }\n /**\n * @method forEach\n * @param {Function} next a handler for each value emitted by the observable\n * @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise\n * @return {Promise} a promise that either resolves on observable completion or\n * rejects with the handled error\n */\n forEach(next, PromiseCtor) {\n if (!PromiseCtor) {\n if (root.Rx && root.Rx.config && root.Rx.config.Promise) {\n PromiseCtor = root.Rx.config.Promise;\n }\n else if (root.Promise) {\n PromiseCtor = root.Promise;\n }\n }\n if (!PromiseCtor) {\n throw new Error('no Promise impl found');\n }\n return new PromiseCtor((resolve, reject) => {\n // Must be declared in a separate statement to avoid a RefernceError when\n // accessing subscription below in the closure due to Temporal Dead Zone.\n let subscription;\n subscription = this.subscribe((value) => {\n if (subscription) {\n // if there is a subscription, then we can surmise\n // the next handling is asynchronous. Any errors thrown\n // need to be rejected explicitly and unsubscribe must be\n // called manually\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscription.unsubscribe();\n }\n }\n else {\n // if there is NO subscription, then we're getting a nexted\n // value synchronously during subscription. We can just call it.\n // If it errors, Observable's `subscribe` will ensure the\n // unsubscription logic is called, then synchronously rethrow the error.\n // After that, Promise will trap the error and send it\n // down the rejection path.\n next(value);\n }\n }, reject, resolve);\n });\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n return this.source.subscribe(subscriber);\n }\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @method Symbol.observable\n * @return {Observable} this instance of the observable\n */\n [Symbol_observable]() {\n return this;\n }\n /* tslint:enable:max-line-length */\n /**\n * Used to stitch together functional operators into a chain.\n * @method pipe\n * @return {Observable} the Observable result of all of the operators having\n * been called in the order they were passed in.\n *\n * @example\n *\n * import { map, filter, scan } from 'rxjs/operators';\n *\n * Rx.Observable.interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x))\n */\n pipe(...operations) {\n if (operations.length === 0) {\n return this;\n }\n return pipeFromArray(operations)(this);\n }\n /* tslint:enable:max-line-length */\n toPromise(PromiseCtor) {\n if (!PromiseCtor) {\n if (root.Rx && root.Rx.config && root.Rx.config.Promise) {\n PromiseCtor = root.Rx.config.Promise;\n }\n else if (root.Promise) {\n PromiseCtor = root.Promise;\n }\n }\n if (!PromiseCtor) {\n throw new Error('no Promise impl found');\n }\n return new PromiseCtor((resolve, reject) => {\n let value;\n this.subscribe((x) => value = x, (err) => reject(err), () => resolve(value));\n });\n }\n}\n// HACK: Since TypeScript inherits static properties too, we have to\n// fight against TypeScript here so Subject can have a different static create signature\n/**\n * Creates a new cold Observable by calling the Observable constructor\n * @static true\n * @owner Observable\n * @method create\n * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n * @return {Observable} a new cold observable\n */\nObservable.create = (subscribe) => {\n return new Observable(subscribe);\n};\n//# sourceMappingURL=Observable.js.map","import { Subscriber } from '../Subscriber';\nimport { rxSubscriber as rxSubscriberSymbol } from '../symbol/rxSubscriber';\nimport { empty as emptyObserver } from '../Observer';\nexport function toSubscriber(nextOrObserver, error, complete) {\n if (nextOrObserver) {\n if (nextOrObserver instanceof Subscriber) {\n return nextOrObserver;\n }\n if (nextOrObserver[rxSubscriberSymbol]) {\n return nextOrObserver[rxSubscriberSymbol]();\n }\n }\n if (!nextOrObserver && !error && !complete) {\n return new Subscriber(emptyObserver);\n }\n return new Subscriber(nextOrObserver, error, complete);\n}\n//# sourceMappingURL=toSubscriber.js.map","export function isScheduler(value) {\n return value && typeof value.schedule === 'function';\n}\n//# sourceMappingURL=isScheduler.js.map","import { Observable } from '../Observable';\nimport { EmptyObservable } from './EmptyObservable';\nimport { isArray } from '../util/isArray';\nimport { subscribeToResult } from '../util/subscribeToResult';\nimport { OuterSubscriber } from '../OuterSubscriber';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nexport class ForkJoinObservable extends Observable {\n constructor(sources, resultSelector) {\n super();\n this.sources = sources;\n this.resultSelector = resultSelector;\n }\n /* tslint:enable:max-line-length */\n /**\n * Joins last values emitted by passed Observables.\n *\n * <span class=\"informal\">Wait for Observables to complete and then combine last values they emitted.</span>\n *\n * <img src=\"./img/forkJoin.png\" width=\"100%\">\n *\n * `forkJoin` is an operator that takes any number of Observables which can be passed either as an array\n * or directly as arguments. If no input Observables are provided, resulting stream will complete\n * immediately.\n *\n * `forkJoin` will wait for all passed Observables to complete and then it will emit an array with last\n * values from corresponding Observables. So if you pass `n` Observables to the operator, resulting\n * array will have `n` values, where first value is the last thing emitted by the first Observable,\n * second value is the last thing emitted by the second Observable and so on. That means `forkJoin` will\n * not emit more than once and it will complete after that. If you need to emit combined values not only\n * at the end of lifecycle of passed Observables, but also throughout it, try out {@link combineLatest}\n * or {@link zip} instead.\n *\n * In order for resulting array to have the same length as the number of input Observables, whenever any of\n * that Observables completes without emitting any value, `forkJoin` will complete at that moment as well\n * and it will not emit anything either, even if it already has some last values from other Observables.\n * Conversely, if there is an Observable that never completes, `forkJoin` will never complete as well,\n * unless at any point some other Observable completes without emitting value, which brings us back to\n * the previous case. Overall, in order for `forkJoin` to emit a value, all Observables passed as arguments\n * have to emit something at least once and complete.\n *\n * If any input Observable errors at some point, `forkJoin` will error as well and all other Observables\n * will be immediately unsubscribed.\n *\n * Optionally `forkJoin` accepts project function, that will be called with values which normally\n * would land in emitted array. Whatever is returned by project function, will appear in output\n * Observable instead. This means that default project can be thought of as a function that takes\n * all its arguments and puts them into an array. Note that project function will be called only\n * when output Observable is supposed to emit a result.\n *\n * @example <caption>Use forkJoin with operator emitting immediately</caption>\n * const observable = Rx.Observable.forkJoin(\n * Rx.Observable.of(1, 2, 3, 4),\n * Rx.Observable.of(5, 6, 7, 8)\n * );\n * observable.subscribe(\n * value => console.log(value),\n * err => {},\n * () => console.log('This is how it ends!')\n * );\n *\n * // Logs:\n * // [4, 8]\n * // \"This is how it ends!\"\n *\n *\n * @example <caption>Use forkJoin with operator emitting after some time</caption>\n * const observable = Rx.Observable.forkJoin(\n * Rx.Observable.interval(1000).take(3), // emit 0, 1, 2 every second and complete\n * Rx.Observable.interval(500).take(4) // emit 0, 1, 2, 3 every half a second and complete\n * );\n * observable.subscribe(\n * value => console.log(value),\n * err => {},\n * () => console.log('This is how it ends!')\n * );\n *\n * // Logs:\n * // [2, 3] after 3 seconds\n * // \"This is how it ends!\" immediately after\n *\n *\n * @example <caption>Use forkJoin with project function</caption>\n * const observable = Rx.Observable.forkJoin(\n * Rx.Observable.interval(1000).take(3), // emit 0, 1, 2 every second and complete\n * Rx.Observable.interval(500).take(4), // emit 0, 1, 2, 3 every half a second and complete\n * (n, m) => n + m\n * );\n * observable.subscribe(\n * value => console.log(value),\n * err => {},\n * () => console.log('This is how it ends!')\n * );\n *\n * // Logs:\n * // 5 after 3 seconds\n * // \"This is how it ends!\" immediately after\n *\n * @see {@link combineLatest}\n * @see {@link zip}\n *\n * @param {...SubscribableOrPromise} sources Any number of Observables provided either as an array or as an arguments\n * passed directly to the operator.\n * @param {function} [project] Function that takes values emitted by input Observables and returns value\n * that will appear in resulting Observable instead of default array.\n * @return {Observable} Observable emitting either an array of last values emitted by passed Observables\n * or value from project function.\n * @static true\n * @name forkJoin\n * @owner Observable\n */\n static create(...sources) {\n if (sources === null || arguments.length === 0) {\n return new EmptyObservable();\n }\n let resultSelector = null;\n if (typeof sources[sources.length - 1] === 'function') {\n resultSelector = sources.pop();\n }\n // if the first and only other argument besides the resultSelector is an array\n // assume it's been called with `forkJoin([obs1, obs2, obs3], resultSelector)`\n if (sources.length === 1 && isArray(sources[0])) {\n sources = sources[0];\n }\n if (sources.length === 0) {\n return new EmptyObservable();\n }\n return new ForkJoinObservable(sources, resultSelector);\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n return new ForkJoinSubscriber(subscriber, this.sources, this.resultSelector);\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass ForkJoinSubscriber extends OuterSubscriber {\n constructor(destination, sources, resultSelector) {\n super(destination);\n this.sources = sources;\n this.resultSelector = resultSelector;\n this.completed = 0;\n this.haveValues = 0;\n const len = sources.length;\n this.total = len;\n this.values = new Array(len);\n for (let i = 0; i < len; i++) {\n const source = sources[i];\n const innerSubscription = subscribeToResult(this, source, null, i);\n if (innerSubscription) {\n innerSubscription.outerIndex = i;\n this.add(innerSubscription);\n }\n }\n }\n notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n this.values[outerIndex] = innerValue;\n if (!innerSub._hasValue) {\n innerSub._hasValue = true;\n this.haveValues++;\n }\n }\n notifyComplete(innerSub) {\n const destination = this.destination;\n const { haveValues, resultSelector, values } = this;\n const len = values.length;\n if (!innerSub._hasValue) {\n destination.complete();\n return;\n }\n this.completed++;\n if (this.completed !== len) {\n return;\n }\n if (haveValues === len) {\n const value = resultSelector ? resultSelector.apply(this, values) : values;\n destination.next(value);\n }\n destination.complete();\n }\n}\n//# sourceMappingURL=ForkJoinObservable.js.map","import { ForkJoinObservable } from './ForkJoinObservable';\nexport const forkJoin = ForkJoinObservable.create;\n//# sourceMappingURL=forkJoin.js.map","/**\n * @license Angular v5.2.10\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { Directive, ElementRef, EventEmitter, Host, Inject, Injectable, InjectionToken, Injector, Input, NgModule, Optional, Output, Renderer2, Self, SkipSelf, Version, forwardRef, ɵisObservable, ɵisPromise, ɵlooseIdentical } from '@angular/core';\nimport { forkJoin } from 'rxjs/observable/forkJoin';\nimport { fromPromise } from 'rxjs/observable/fromPromise';\nimport { map } from 'rxjs/operator/map';\nimport { ɵgetDOM } from '@angular/platform-browser';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Base class for control directives.\n *\n * Only used internally in the forms module.\n *\n * \\@stable\n * @abstract\n */\nclass AbstractControlDirective {\n /**\n * The value of the control.\n * @return {?}\n */\n get value() { return this.control ? this.control.value : null; }\n /**\n * A control is `valid` when its `status === VALID`.\n *\n * In order to have this status, the control must have passed all its\n * validation checks.\n * @return {?}\n */\n get valid() { return this.control ? this.control.valid : null; }\n /**\n * A control is `invalid` when its `status === INVALID`.\n *\n * In order to have this status, the control must have failed\n * at least one of its validation checks.\n * @return {?}\n */\n get invalid() { return this.control ? this.control.invalid : null; }\n /**\n * A control is `pending` when its `status === PENDING`.\n *\n * In order to have this status, the control must be in the\n * middle of conducting a validation check.\n * @return {?}\n */\n get pending() { return this.control ? this.control.pending : null; }\n /**\n * A control is `disabled` when its `status === DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n * @return {?}\n */\n get disabled() { return this.control ? this.control.disabled : null; }\n /**\n * A control is `enabled` as long as its `status !== DISABLED`.\n *\n * In other words, it has a status of `VALID`, `INVALID`, or\n * `PENDING`.\n * @return {?}\n */\n get enabled() { return this.control ? this.control.enabled : null; }\n /**\n * Returns any errors generated by failing validation. If there\n * are no errors, it will return null.\n * @return {?}\n */\n get errors() { return this.control ? this.control.errors : null; }\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * Note that programmatic changes to a control's value will\n * *not* mark it dirty.\n * @return {?}\n */\n get pristine() { return this.control ? this.control.pristine : null; }\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * Note that programmatic changes to a control's value will\n * *not* mark it dirty.\n * @return {?}\n */\n get dirty() { return this.control ? this.control.dirty : null; }\n /**\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n * @return {?}\n */\n get touched() { return this.control ? this.control.touched : null; }\n /**\n * @return {?}\n */\n get status() { return this.control ? this.control.status : null; }\n /**\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n * @return {?}\n */\n get untouched() { return this.control ? this.control.untouched : null; }\n /**\n * Emits an event every time the validation status of the control\n * is re-calculated.\n * @return {?}\n */\n get statusChanges() {\n return this.control ? this.control.statusChanges : null;\n }\n /**\n * Emits an event every time the value of the control changes, in\n * the UI or programmatically.\n * @return {?}\n */\n get valueChanges() {\n return this.control ? this.control.valueChanges : null;\n }\n /**\n * Returns an array that represents the path from the top-level form\n * to this control. Each index is the string name of the control on\n * that level.\n * @return {?}\n */\n get path() { return null; }\n /**\n * Resets the form control. This means by default:\n *\n * * it is marked as `pristine`\n * * it is marked as `untouched`\n * * value is set to null\n *\n * For more information, see {\\@link AbstractControl}.\n * @param {?=} value\n * @return {?}\n */\n reset(value = undefined) {\n if (this.control)\n this.control.reset(value);\n }\n /**\n * Returns true if the control with the given path has the error specified. Otherwise\n * returns false.\n *\n * If no path is given, it checks for the error on the present control.\n * @param {?} errorCode\n * @param {?=} path\n * @return {?}\n */\n hasError(errorCode, path) {\n return this.control ? this.control.hasError(errorCode, path) : false;\n }\n /**\n * Returns error data if the control with the given path has the error specified. Otherwise\n * returns null or undefined.\n *\n * If no path is given, it checks for the error on the present control.\n * @param {?} errorCode\n * @param {?=} path\n * @return {?}\n */\n getError(errorCode, path) {\n return this.control ? this.control.getError(errorCode, path) : null;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A directive that contains multiple {\\@link NgControl}s.\n *\n * Only used by the forms module.\n *\n * \\@stable\n * @abstract\n */\nclass ControlContainer extends AbstractControlDirective {\n /**\n * Get the form to which this container belongs.\n * @return {?}\n */\n get formDirective() { return null; }\n /**\n * Get the path to this container.\n * @return {?}\n */\n get path() { return null; }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isEmptyInputValue(value) {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n/**\n * Providers for validators to be used for {\\@link FormControl}s in a form.\n *\n * Provide this using `multi: true` to add validators.\n *\n * ### Example\n *\n * ```typescript\n * \\@Directive({\n * selector: '[custom-validator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(control: AbstractControl): ValidationErrors | null {\n * return {\"custom\": true};\n * }\n * }\n * ```\n *\n * \\@stable\n */\nconst NG_VALIDATORS = new InjectionToken('NgValidators');\n/**\n * Providers for asynchronous validators to be used for {\\@link FormControl}s\n * in a form.\n *\n * Provide this using `multi: true` to add validators.\n *\n * See {\\@link NG_VALIDATORS} for more details.\n *\n * \\@stable\n */\nconst NG_ASYNC_VALIDATORS = new InjectionToken('NgAsyncValidators');\nconst EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n/**\n * Provides a set of validators used by form controls.\n *\n * A validator is a function that processes a {\\@link FormControl} or collection of\n * controls and returns a map of errors. A null map means that validation has passed.\n *\n * ### Example\n *\n * ```typescript\n * var loginControl = new FormControl(\"\", Validators.required)\n * ```\n *\n * \\@stable\n */\nclass Validators {\n /**\n * Validator that requires controls to have a value greater than a number.\n * `min()` exists only as a function, not as a directive. For example,\n * `control = new FormControl('', Validators.min(3));`.\n * @param {?} min\n * @return {?}\n */\n static min(min) {\n return (control) => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n return null; // don't validate empty values to allow optional controls\n }\n const /** @type {?} */ value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n return !isNaN(value) && value < min ? { 'min': { 'min': min, 'actual': control.value } } : null;\n };\n }\n /**\n * Validator that requires controls to have a value less than a number.\n * `max()` exists only as a function, not as a directive. For example,\n * `control = new FormControl('', Validators.max(15));`.\n * @param {?} max\n * @return {?}\n */\n static max(max) {\n return (control) => {\n if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n return null; // don't validate empty values to allow optional controls\n }\n const /** @type {?} */ value = parseFloat(control.value);\n // Controls with NaN values after parsing should be treated as not having a\n // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n return !isNaN(value) && value > max ? { 'max': { 'max': max, 'actual': control.value } } : null;\n };\n }\n /**\n * Validator that requires controls to have a non-empty value.\n * @param {?} control\n * @return {?}\n */\n static required(control) {\n return isEmptyInputValue(control.value) ? { 'required': true } : null;\n }\n /**\n * Validator that requires control value to be true.\n * @param {?} control\n * @return {?}\n */\n static requiredTrue(control) {\n return control.value === true ? null : { 'required': true };\n }\n /**\n * Validator that performs email validation.\n * @param {?} control\n * @return {?}\n */\n static email(control) {\n return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };\n }\n /**\n * Validator that requires controls to have a value of a minimum length.\n * @param {?} minLength\n * @return {?}\n */\n static minLength(minLength) {\n return (control) => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const /** @type {?} */ length = control.value ? control.value.length : 0;\n return length < minLength ?\n { 'minlength': { 'requiredLength': minLength, 'actualLength': length } } :\n null;\n };\n }\n /**\n * Validator that requires controls to have a value of a maximum length.\n * @param {?} maxLength\n * @return {?}\n */\n static maxLength(maxLength) {\n return (control) => {\n const /** @type {?} */ length = control.value ? control.value.length : 0;\n return length > maxLength ?\n { 'maxlength': { 'requiredLength': maxLength, 'actualLength': length } } :\n null;\n };\n }\n /**\n * Validator that requires a control to match a regex to its value.\n * @param {?} pattern\n * @return {?}\n */\n static pattern(pattern) {\n if (!pattern)\n return Validators.nullValidator;\n let /** @type {?} */ regex;\n let /** @type {?} */ regexStr;\n if (typeof pattern === 'string') {\n regexStr = '';\n if (pattern.charAt(0) !== '^')\n regexStr += '^';\n regexStr += pattern;\n if (pattern.charAt(pattern.length - 1) !== '$')\n regexStr += '$';\n regex = new RegExp(regexStr);\n }\n else {\n regexStr = pattern.toString();\n regex = pattern;\n }\n return (control) => {\n if (isEmptyInputValue(control.value)) {\n return null; // don't validate empty values to allow optional controls\n }\n const /** @type {?} */ value = control.value;\n return regex.test(value) ? null :\n { 'pattern': { 'requiredPattern': regexStr, 'actualValue': value } };\n };\n }\n /**\n * No-op validator.\n * @param {?} c\n * @return {?}\n */\n static nullValidator(c) { return null; }\n /**\n * @param {?} validators\n * @return {?}\n */\n static compose(validators) {\n if (!validators)\n return null;\n const /** @type {?} */ presentValidators = /** @type {?} */ (validators.filter(isPresent));\n if (presentValidators.length == 0)\n return null;\n return function (control) {\n return _mergeErrors(_executeValidators(control, presentValidators));\n };\n }\n /**\n * @param {?} validators\n * @return {?}\n */\n static composeAsync(validators) {\n if (!validators)\n return null;\n const /** @type {?} */ presentValidators = /** @type {?} */ (validators.filter(isPresent));\n if (presentValidators.length == 0)\n return null;\n return function (control) {\n const /** @type {?} */ observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n return map.call(forkJoin(observables), _mergeErrors);\n };\n }\n}\n/**\n * @param {?} o\n * @return {?}\n */\nfunction isPresent(o) {\n return o != null;\n}\n/**\n * @param {?} r\n * @return {?}\n */\nfunction toObservable(r) {\n const /** @type {?} */ obs = ɵisPromise(r) ? fromPromise(r) : r;\n if (!(ɵisObservable(obs))) {\n throw new Error(`Expected validator to return Promise or Observable.`);\n }\n return obs;\n}\n/**\n * @param {?} control\n * @param {?} validators\n * @return {?}\n */\nfunction _executeValidators(control, validators) {\n return validators.map(v => v(control));\n}\n/**\n * @param {?} control\n * @param {?} validators\n * @return {?}\n */\nfunction _executeAsyncValidators(control, validators) {\n return validators.map(v => v(control));\n}\n/**\n * @param {?} arrayOfErrors\n * @return {?}\n */\nfunction _mergeErrors(arrayOfErrors) {\n const /** @type {?} */ res = arrayOfErrors.reduce((res, errors) => {\n return errors != null ? Object.assign({}, /** @type {?} */ ((res)), errors) : /** @type {?} */ ((res));\n }, {});\n return Object.keys(res).length === 0 ? null : res;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A `ControlValueAccessor` acts as a bridge between the Angular forms API and a\n * native element in the DOM.\n *\n * Implement this interface if you want to create a custom form control directive\n * that integrates with Angular forms.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Used to provide a {\\@link ControlValueAccessor} for form controls.\n *\n * See {\\@link DefaultValueAccessor} for how to implement one.\n * \\@stable\n */\nconst NG_VALUE_ACCESSOR = new InjectionToken('NgValueAccessor');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst CHECKBOX_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxControlValueAccessor),\n multi: true,\n};\n/**\n * The accessor for writing a value and listening to changes on a checkbox input element.\n *\n * ### Example\n * ```\n * <input type=\"checkbox\" name=\"rememberLogin\" ngModel>\n * ```\n *\n * \\@stable\n */\nclass CheckboxControlValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) { this.onChange = fn; }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\nCheckboxControlValueAccessor.decorators = [\n { type: Directive, args: [{\n selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n host: { '(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()' },\n providers: [CHECKBOX_VALUE_ACCESSOR]\n },] },\n];\n/** @nocollapse */\nCheckboxControlValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst DEFAULT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DefaultValueAccessor),\n multi: true\n};\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n * @return {?}\n */\nfunction _isAndroid() {\n const /** @type {?} */ userAgent = ɵgetDOM() ? ɵgetDOM().getUserAgent() : '';\n return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n/**\n * Turn this mode on if you want form directives to buffer IME input until compositionend\n * \\@experimental\n */\nconst COMPOSITION_BUFFER_MODE = new InjectionToken('CompositionEventMode');\n/**\n * The default accessor for writing a value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n * ### Example\n * ```\n * <input type=\"text\" name=\"searchQuery\" ngModel>\n * ```\n *\n * \\@stable\n */\nclass DefaultValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n * @param {?} _compositionMode\n */\n constructor(_renderer, _elementRef, _compositionMode) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._compositionMode = _compositionMode;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n /**\n * Whether the user is creating a composition string (IME events).\n */\n this._composing = false;\n if (this._compositionMode == null) {\n this._compositionMode = !_isAndroid();\n }\n }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n const /** @type {?} */ normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) { this.onChange = fn; }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _handleInput(value) {\n if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n this.onChange(value);\n }\n }\n /**\n * \\@internal\n * @return {?}\n */\n _compositionStart() { this._composing = true; }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _compositionEnd(value) {\n this._composing = false;\n this._compositionMode && this.onChange(value);\n }\n}\nDefaultValueAccessor.decorators = [\n { type: Directive, args: [{\n selector: 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n // TODO: vsavkin replace the above selector with the one below it once\n // https://github.com/angular/angular/issues/3011 is implemented\n // selector: '[ngModel],[formControl],[formControlName]',\n host: {\n '(input)': '$any(this)._handleInput($event.target.value)',\n '(blur)': 'onTouched()',\n '(compositionstart)': '$any(this)._compositionStart()',\n '(compositionend)': '$any(this)._compositionEnd($event.target.value)'\n },\n providers: [DEFAULT_VALUE_ACCESSOR]\n },] },\n];\n/** @nocollapse */\nDefaultValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [COMPOSITION_BUFFER_MODE,] },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} validator\n * @return {?}\n */\nfunction normalizeValidator(validator) {\n if ((/** @type {?} */ (validator)).validate) {\n return (c) => (/** @type {?} */ (validator)).validate(c);\n }\n else {\n return /** @type {?} */ (validator);\n }\n}\n/**\n * @param {?} validator\n * @return {?}\n */\nfunction normalizeAsyncValidator(validator) {\n if ((/** @type {?} */ (validator)).validate) {\n return (c) => (/** @type {?} */ (validator)).validate(c);\n }\n else {\n return /** @type {?} */ (validator);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst NUMBER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberValueAccessor),\n multi: true\n};\n/**\n * The accessor for writing a number value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n * ### Example\n * ```\n * <input type=\"number\" [(ngModel)]=\"age\">\n * ```\n */\nclass NumberValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n const /** @type {?} */ normalizedValue = value == null ? '' : value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\nNumberValueAccessor.decorators = [\n { type: Directive, args: [{\n selector: 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [NUMBER_VALUE_ACCESSOR]\n },] },\n];\n/** @nocollapse */\nNumberValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @return {?}\n */\nfunction unimplemented() {\n throw new Error('unimplemented');\n}\n/**\n * A base class that all control directive extend.\n * It binds a {\\@link FormControl} object to a DOM element.\n *\n * Used internally by Angular forms.\n *\n * \\@stable\n * @abstract\n */\nclass NgControl extends AbstractControlDirective {\n constructor() {\n super(...arguments);\n /**\n * \\@internal\n */\n this._parent = null;\n this.name = null;\n this.valueAccessor = null;\n /**\n * \\@internal\n */\n this._rawValidators = [];\n /**\n * \\@internal\n */\n this._rawAsyncValidators = [];\n }\n /**\n * @return {?}\n */\n get validator() { return /** @type {?} */ (unimplemented()); }\n /**\n * @return {?}\n */\n get asyncValidator() { return /** @type {?} */ (unimplemented()); }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst RADIO_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioControlValueAccessor),\n multi: true\n};\n/**\n * Internal class used by Angular to uncheck radio buttons with the matching name.\n */\nclass RadioControlRegistry {\n constructor() {\n this._accessors = [];\n }\n /**\n * @param {?} control\n * @param {?} accessor\n * @return {?}\n */\n add(control, accessor) {\n this._accessors.push([control, accessor]);\n }\n /**\n * @param {?} accessor\n * @return {?}\n */\n remove(accessor) {\n for (let /** @type {?} */ i = this._accessors.length - 1; i >= 0; --i) {\n if (this._accessors[i][1] === accessor) {\n this._accessors.splice(i, 1);\n return;\n }\n }\n }\n /**\n * @param {?} accessor\n * @return {?}\n */\n select(accessor) {\n this._accessors.forEach((c) => {\n if (this._isSameGroup(c, accessor) && c[1] !== accessor) {\n c[1].fireUncheck(accessor.value);\n }\n });\n }\n /**\n * @param {?} controlPair\n * @param {?} accessor\n * @return {?}\n */\n _isSameGroup(controlPair, accessor) {\n if (!controlPair[0].control)\n return false;\n return controlPair[0]._parent === accessor._control._parent &&\n controlPair[1].name === accessor.name;\n }\n}\nRadioControlRegistry.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nRadioControlRegistry.ctorParameters = () => [];\n/**\n * \\@whatItDoes Writes radio control values and listens to radio control changes.\n *\n * Used by {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName}\n * to keep the view synced with the {\\@link FormControl} model.\n *\n * \\@howToUse\n *\n * If you have imported the {\\@link FormsModule} or the {\\@link ReactiveFormsModule}, this\n * value accessor will be active on any radio control that has a form directive. You do\n * **not** need to add a special selector to activate it.\n *\n * ### How to use radio buttons with form directives\n *\n * To use radio buttons in a template-driven form, you'll want to ensure that radio buttons\n * in the same group have the same `name` attribute. Radio buttons with different `name`\n * attributes do not affect each other.\n *\n * {\\@example forms/ts/radioButtons/radio_button_example.ts region='TemplateDriven'}\n *\n * When using radio buttons in a reactive form, radio buttons in the same group should have the\n * same `formControlName`. You can also add a `name` attribute, but it's optional.\n *\n * {\\@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nclass RadioControlValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n * @param {?} _registry\n * @param {?} _injector\n */\n constructor(_renderer, _elementRef, _registry, _injector) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._registry = _registry;\n this._injector = _injector;\n this.onChange = () => { };\n this.onTouched = () => { };\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this._control = this._injector.get(NgControl);\n this._checkName();\n this._registry.add(this._control, this);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() { this._registry.remove(this); }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this._state = value === this.value;\n this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this._fn = fn;\n this.onChange = () => {\n fn(this.value);\n this._registry.select(this);\n };\n }\n /**\n * @param {?} value\n * @return {?}\n */\n fireUncheck(value) { this.writeValue(value); }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n /**\n * @return {?}\n */\n _checkName() {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this._throwNameError();\n }\n if (!this.name && this.formControlName)\n this.name = this.formControlName;\n }\n /**\n * @return {?}\n */\n _throwNameError() {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `);\n }\n}\nRadioControlValueAccessor.decorators = [\n { type: Directive, args: [{\n selector: 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n host: { '(change)': 'onChange()', '(blur)': 'onTouched()' },\n providers: [RADIO_VALUE_ACCESSOR]\n },] },\n];\n/** @nocollapse */\nRadioControlValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n { type: RadioControlRegistry, },\n { type: Injector, },\n];\nRadioControlValueAccessor.propDecorators = {\n \"name\": [{ type: Input },],\n \"formControlName\": [{ type: Input },],\n \"value\": [{ type: Input },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst RANGE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeValueAccessor),\n multi: true\n};\n/**\n * The accessor for writing a range value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n * ### Example\n * ```\n * <input type=\"range\" [(ngModel)]=\"age\" >\n * ```\n */\nclass RangeValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this.onChange = (value) => { fn(value == '' ? null : parseFloat(value)); };\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n}\nRangeValueAccessor.decorators = [\n { type: Directive, args: [{\n selector: 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n host: {\n '(change)': 'onChange($event.target.value)',\n '(input)': 'onChange($event.target.value)',\n '(blur)': 'onTouched()'\n },\n providers: [RANGE_VALUE_ACCESSOR]\n },] },\n];\n/** @nocollapse */\nRangeValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst SELECT_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectControlValueAccessor),\n multi: true\n};\n/**\n * @param {?} id\n * @param {?} value\n * @return {?}\n */\nfunction _buildValueString(id, value) {\n if (id == null)\n return `${value}`;\n if (value && typeof value === 'object')\n value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n/**\n * @param {?} valueString\n * @return {?}\n */\nfunction _extractId(valueString) {\n return valueString.split(':')[0];\n}\n/**\n * \\@whatItDoes Writes values and listens to changes on a select element.\n *\n * Used by {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName}\n * to keep the view synced with the {\\@link FormControl} model.\n *\n * \\@howToUse\n *\n * If you have imported the {\\@link FormsModule} or the {\\@link ReactiveFormsModule}, this\n * value accessor will be active on any select control that has a form directive. You do\n * **not** need to add a special selector to activate it.\n *\n * ### How to use select controls with form directives\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * If your option values are simple strings, you can bind to the normal `value` property\n * on the option. If your option values happen to be objects (and you'd like to save the\n * selection in your form as an object), use `ngValue` instead:\n *\n * {\\@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * In reactive forms, you'll also want to add your form directive (`formControlName` or\n * `formControl`) on the main `<select>` tag. Like in the former example, you have the\n * choice of binding to the `value` or `ngValue` property on the select's options.\n *\n * {\\@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Caveat: Option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * #### Syntax\n *\n * ```\n * <select [compareWith]=\"compareFn\" [(ngModel)]=\"selectedCountries\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{country.name}}\n * </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * Note: We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nclass SelectControlValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * \\@internal\n */\n this._optionMap = new Map();\n /**\n * \\@internal\n */\n this._idCounter = 0;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n this._compareWith = ɵlooseIdentical;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n set compareWith(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this.value = value;\n const /** @type {?} */ id = this._getOptionId(value);\n if (id == null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n }\n const /** @type {?} */ valueString = _buildValueString(id, value);\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this.onChange = (valueString) => {\n this.value = this._getOptionValue(valueString);\n fn(this.value);\n };\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n /**\n * \\@internal\n * @return {?}\n */\n _registerOption() { return (this._idCounter++).toString(); }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _getOptionId(value) {\n for (const /** @type {?} */ id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(this._optionMap.get(id), value))\n return id;\n }\n return null;\n }\n /**\n * \\@internal\n * @param {?} valueString\n * @return {?}\n */\n _getOptionValue(valueString) {\n const /** @type {?} */ id = _extractId(valueString);\n return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n }\n}\nSelectControlValueAccessor.decorators = [\n { type: Directive, args: [{\n selector: 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n host: { '(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()' },\n providers: [SELECT_VALUE_ACCESSOR]\n },] },\n];\n/** @nocollapse */\nSelectControlValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n];\nSelectControlValueAccessor.propDecorators = {\n \"compareWith\": [{ type: Input },],\n};\n/**\n * \\@whatItDoes Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * \\@howToUse\n *\n * See docs for {\\@link SelectControlValueAccessor} for usage examples.\n *\n * \\@stable\n */\nclass NgSelectOption {\n /**\n * @param {?} _element\n * @param {?} _renderer\n * @param {?} _select\n */\n constructor(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select)\n this.id = this._select._registerOption();\n }\n /**\n * @param {?} value\n * @return {?}\n */\n set ngValue(value) {\n if (this._select == null)\n return;\n this._select._optionMap.set(this.id, value);\n this._setElementValue(_buildValueString(this.id, value));\n this._select.writeValue(this._select.value);\n }\n /**\n * @param {?} value\n * @return {?}\n */\n set value(value) {\n this._setElementValue(value);\n if (this._select)\n this._select.writeValue(this._select.value);\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _setElementValue(value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\nNgSelectOption.decorators = [\n { type: Directive, args: [{ selector: 'option' },] },\n];\n/** @nocollapse */\nNgSelectOption.ctorParameters = () => [\n { type: ElementRef, },\n { type: Renderer2, },\n { type: SelectControlValueAccessor, decorators: [{ type: Optional }, { type: Host },] },\n];\nNgSelectOption.propDecorators = {\n \"ngValue\": [{ type: Input, args: ['ngValue',] },],\n \"value\": [{ type: Input, args: ['value',] },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst SELECT_MULTIPLE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectMultipleControlValueAccessor),\n multi: true\n};\n/**\n * @param {?} id\n * @param {?} value\n * @return {?}\n */\nfunction _buildValueString$1(id, value) {\n if (id == null)\n return `${value}`;\n if (typeof value === 'string')\n value = `'${value}'`;\n if (value && typeof value === 'object')\n value = 'Object';\n return `${id}: ${value}`.slice(0, 50);\n}\n/**\n * @param {?} valueString\n * @return {?}\n */\nfunction _extractId$1(valueString) {\n return valueString.split(':')[0];\n}\n/**\n * The accessor for writing a value and listening to changes on a select element.\n *\n * ### Caveat: Options selection\n *\n * Angular uses object identity to select options. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select multiple>` supports `compareWith`\n * input. `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects options by the return value of the function.\n *\n * #### Syntax\n *\n * ```\n * <select multiple [compareWith]=\"compareFn\" [(ngModel)]=\"selectedCountries\">\n * <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n * {{country.name}}\n * </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n * return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * \\@stable\n */\nclass SelectMultipleControlValueAccessor {\n /**\n * @param {?} _renderer\n * @param {?} _elementRef\n */\n constructor(_renderer, _elementRef) {\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n /**\n * \\@internal\n */\n this._optionMap = new Map();\n /**\n * \\@internal\n */\n this._idCounter = 0;\n this.onChange = (_) => { };\n this.onTouched = () => { };\n this._compareWith = ɵlooseIdentical;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n set compareWith(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`compareWith must be a function, but received ${JSON.stringify(fn)}`);\n }\n this._compareWith = fn;\n }\n /**\n * @param {?} value\n * @return {?}\n */\n writeValue(value) {\n this.value = value;\n let /** @type {?} */ optionSelectedStateSetter;\n if (Array.isArray(value)) {\n // convert values to ids\n const /** @type {?} */ ids = value.map((v) => this._getOptionId(v));\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(ids.indexOf(o.toString()) > -1); };\n }\n else {\n optionSelectedStateSetter = (opt, o) => { opt._setSelected(false); };\n }\n this._optionMap.forEach(optionSelectedStateSetter);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) {\n this.onChange = (_) => {\n const /** @type {?} */ selected = [];\n if (_.hasOwnProperty('selectedOptions')) {\n const /** @type {?} */ options = _.selectedOptions;\n for (let /** @type {?} */ i = 0; i < options.length; i++) {\n const /** @type {?} */ opt = options.item(i);\n const /** @type {?} */ val = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n else {\n const /** @type {?} */ options = /** @type {?} */ (_.options);\n for (let /** @type {?} */ i = 0; i < options.length; i++) {\n const /** @type {?} */ opt = options.item(i);\n if (opt.selected) {\n const /** @type {?} */ val = this._getOptionValue(opt.value);\n selected.push(val);\n }\n }\n }\n this.value = selected;\n fn(selected);\n };\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnTouched(fn) { this.onTouched = fn; }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n setDisabledState(isDisabled) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _registerOption(value) {\n const /** @type {?} */ id = (this._idCounter++).toString();\n this._optionMap.set(id, value);\n return id;\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _getOptionId(value) {\n for (const /** @type {?} */ id of Array.from(this._optionMap.keys())) {\n if (this._compareWith(/** @type {?} */ ((this._optionMap.get(id)))._value, value))\n return id;\n }\n return null;\n }\n /**\n * \\@internal\n * @param {?} valueString\n * @return {?}\n */\n _getOptionValue(valueString) {\n const /** @type {?} */ id = _extractId$1(valueString);\n return this._optionMap.has(id) ? /** @type {?} */ ((this._optionMap.get(id)))._value : valueString;\n }\n}\nSelectMultipleControlValueAccessor.decorators = [\n { type: Directive, args: [{\n selector: 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n host: { '(change)': 'onChange($event.target)', '(blur)': 'onTouched()' },\n providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n },] },\n];\n/** @nocollapse */\nSelectMultipleControlValueAccessor.ctorParameters = () => [\n { type: Renderer2, },\n { type: ElementRef, },\n];\nSelectMultipleControlValueAccessor.propDecorators = {\n \"compareWith\": [{ type: Input },],\n};\n/**\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * ### Example\n *\n * ```\n * <select multiple name=\"city\" ngModel>\n * <option *ngFor=\"let c of cities\" [value]=\"c\"></option>\n * </select>\n * ```\n */\nclass NgSelectMultipleOption {\n /**\n * @param {?} _element\n * @param {?} _renderer\n * @param {?} _select\n */\n constructor(_element, _renderer, _select) {\n this._element = _element;\n this._renderer = _renderer;\n this._select = _select;\n if (this._select) {\n this.id = this._select._registerOption(this);\n }\n }\n /**\n * @param {?} value\n * @return {?}\n */\n set ngValue(value) {\n if (this._select == null)\n return;\n this._value = value;\n this._setElementValue(_buildValueString$1(this.id, value));\n this._select.writeValue(this._select.value);\n }\n /**\n * @param {?} value\n * @return {?}\n */\n set value(value) {\n if (this._select) {\n this._value = value;\n this._setElementValue(_buildValueString$1(this.id, value));\n this._select.writeValue(this._select.value);\n }\n else {\n this._setElementValue(value);\n }\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _setElementValue(value) {\n this._renderer.setProperty(this._element.nativeElement, 'value', value);\n }\n /**\n * \\@internal\n * @param {?} selected\n * @return {?}\n */\n _setSelected(selected) {\n this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this._select) {\n this._select._optionMap.delete(this.id);\n this._select.writeValue(this._select.value);\n }\n }\n}\nNgSelectMultipleOption.decorators = [\n { type: Directive, args: [{ selector: 'option' },] },\n];\n/** @nocollapse */\nNgSelectMultipleOption.ctorParameters = () => [\n { type: ElementRef, },\n { type: Renderer2, },\n { type: SelectMultipleControlValueAccessor, decorators: [{ type: Optional }, { type: Host },] },\n];\nNgSelectMultipleOption.propDecorators = {\n \"ngValue\": [{ type: Input, args: ['ngValue',] },],\n \"value\": [{ type: Input, args: ['value',] },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} name\n * @param {?} parent\n * @return {?}\n */\nfunction controlPath(name, parent) {\n return [.../** @type {?} */ ((parent.path)), name];\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpControl(control, dir) {\n if (!control)\n _throwError(dir, 'Cannot find control with');\n if (!dir.valueAccessor)\n _throwError(dir, 'No value accessor for form control with');\n control.validator = Validators.compose([/** @type {?} */ ((control.validator)), dir.validator]);\n control.asyncValidator = Validators.composeAsync([/** @type {?} */ ((control.asyncValidator)), dir.asyncValidator]); /** @type {?} */\n ((dir.valueAccessor)).writeValue(control.value);\n setUpViewChangePipeline(control, dir);\n setUpModelChangePipeline(control, dir);\n setUpBlurPipeline(control, dir);\n if (/** @type {?} */ ((dir.valueAccessor)).setDisabledState) {\n control.registerOnDisabledChange((isDisabled) => { /** @type {?} */ ((/** @type {?} */ ((dir.valueAccessor)).setDisabledState))(isDisabled); });\n }\n // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n dir._rawValidators.forEach((validator) => {\n if ((/** @type {?} */ (validator)).registerOnValidatorChange)\n /** @type {?} */ (((/** @type {?} */ (validator)).registerOnValidatorChange))(() => control.updateValueAndValidity());\n });\n dir._rawAsyncValidators.forEach((validator) => {\n if ((/** @type {?} */ (validator)).registerOnValidatorChange)\n /** @type {?} */ (((/** @type {?} */ (validator)).registerOnValidatorChange))(() => control.updateValueAndValidity());\n });\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction cleanUpControl(control, dir) {\n /** @type {?} */ ((dir.valueAccessor)).registerOnChange(() => _noControlError(dir)); /** @type {?} */\n ((dir.valueAccessor)).registerOnTouched(() => _noControlError(dir));\n dir._rawValidators.forEach((validator) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n dir._rawAsyncValidators.forEach((validator) => {\n if (validator.registerOnValidatorChange) {\n validator.registerOnValidatorChange(null);\n }\n });\n if (control)\n control._clearChangeFns();\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpViewChangePipeline(control, dir) {\n /** @type {?} */ ((dir.valueAccessor)).registerOnChange((newValue) => {\n control._pendingValue = newValue;\n control._pendingChange = true;\n control._pendingDirty = true;\n if (control.updateOn === 'change')\n updateControl(control, dir);\n });\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpBlurPipeline(control, dir) {\n /** @type {?} */ ((dir.valueAccessor)).registerOnTouched(() => {\n control._pendingTouched = true;\n if (control.updateOn === 'blur' && control._pendingChange)\n updateControl(control, dir);\n if (control.updateOn !== 'submit')\n control.markAsTouched();\n });\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction updateControl(control, dir) {\n dir.viewToModelUpdate(control._pendingValue);\n if (control._pendingDirty)\n control.markAsDirty();\n control.setValue(control._pendingValue, { emitModelToViewChange: false });\n control._pendingChange = false;\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpModelChangePipeline(control, dir) {\n control.registerOnChange((newValue, emitModelEvent) => {\n /** @type {?} */ ((\n // control -> view\n dir.valueAccessor)).writeValue(newValue);\n // control -> ngModel\n if (emitModelEvent)\n dir.viewToModelUpdate(newValue);\n });\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpFormContainer(control, dir) {\n if (control == null)\n _throwError(dir, 'Cannot find control with');\n control.validator = Validators.compose([control.validator, dir.validator]);\n control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n}\n/**\n * @param {?} dir\n * @return {?}\n */\nfunction _noControlError(dir) {\n return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\n/**\n * @param {?} dir\n * @param {?} message\n * @return {?}\n */\nfunction _throwError(dir, message) {\n let /** @type {?} */ messageEnd;\n if (/** @type {?} */ ((dir.path)).length > 1) {\n messageEnd = `path: '${(/** @type {?} */ ((dir.path))).join(' -> ')}'`;\n }\n else if (/** @type {?} */ ((dir.path))[0]) {\n messageEnd = `name: '${dir.path}'`;\n }\n else {\n messageEnd = 'unspecified name attribute';\n }\n throw new Error(`${message} ${messageEnd}`);\n}\n/**\n * @param {?} validators\n * @return {?}\n */\nfunction composeValidators(validators) {\n return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n/**\n * @param {?} validators\n * @return {?}\n */\nfunction composeAsyncValidators(validators) {\n return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n null;\n}\n/**\n * @param {?} changes\n * @param {?} viewModel\n * @return {?}\n */\nfunction isPropertyUpdated(changes, viewModel) {\n if (!changes.hasOwnProperty('model'))\n return false;\n const /** @type {?} */ change = changes['model'];\n if (change.isFirstChange())\n return true;\n return !ɵlooseIdentical(viewModel, change.currentValue);\n}\nconst BUILTIN_ACCESSORS = [\n CheckboxControlValueAccessor,\n RangeValueAccessor,\n NumberValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n];\n/**\n * @param {?} valueAccessor\n * @return {?}\n */\nfunction isBuiltInAccessor(valueAccessor) {\n return BUILTIN_ACCESSORS.some(a => valueAccessor.constructor === a);\n}\n/**\n * @param {?} form\n * @param {?} directives\n * @return {?}\n */\nfunction syncPendingControls(form, directives) {\n form._syncPendingControls();\n directives.forEach(dir => {\n const /** @type {?} */ control = /** @type {?} */ (dir.control);\n if (control.updateOn === 'submit' && control._pendingChange) {\n dir.viewToModelUpdate(control._pendingValue);\n control._pendingChange = false;\n }\n });\n}\n/**\n * @param {?} dir\n * @param {?} valueAccessors\n * @return {?}\n */\nfunction selectValueAccessor(dir, valueAccessors) {\n if (!valueAccessors)\n return null;\n if (!Array.isArray(valueAccessors))\n _throwError(dir, 'Value accessor was not provided as an array for form control with');\n let /** @type {?} */ defaultAccessor = undefined;\n let /** @type {?} */ builtinAccessor = undefined;\n let /** @type {?} */ customAccessor = undefined;\n valueAccessors.forEach((v) => {\n if (v.constructor === DefaultValueAccessor) {\n defaultAccessor = v;\n }\n else if (isBuiltInAccessor(v)) {\n if (builtinAccessor)\n _throwError(dir, 'More than one built-in value accessor matches form control with');\n builtinAccessor = v;\n }\n else {\n if (customAccessor)\n _throwError(dir, 'More than one custom value accessor matches form control with');\n customAccessor = v;\n }\n });\n if (customAccessor)\n return customAccessor;\n if (builtinAccessor)\n return builtinAccessor;\n if (defaultAccessor)\n return defaultAccessor;\n _throwError(dir, 'No valid value accessor for form control with');\n return null;\n}\n/**\n * @template T\n * @param {?} list\n * @param {?} el\n * @return {?}\n */\nfunction removeDir(list, el) {\n const /** @type {?} */ index = list.indexOf(el);\n if (index > -1)\n list.splice(index, 1);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * This is a base class for code shared between {\\@link NgModelGroup} and {\\@link FormGroupName}.\n *\n * \\@stable\n */\nclass AbstractFormGroupDirective extends ControlContainer {\n /**\n * @return {?}\n */\n ngOnInit() {\n this._checkParentType(); /** @type {?} */\n ((this.formDirective)).addFormGroup(this);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this.formDirective) {\n this.formDirective.removeFormGroup(this);\n }\n }\n /**\n * Get the {\\@link FormGroup} backing this binding.\n * @return {?}\n */\n get control() { return /** @type {?} */ ((this.formDirective)).getFormGroup(this); }\n /**\n * Get the path to this control group.\n * @return {?}\n */\n get path() { return controlPath(this.name, this._parent); }\n /**\n * Get the {\\@link Form} to which this group belongs.\n * @return {?}\n */\n get formDirective() { return this._parent ? this._parent.formDirective : null; }\n /**\n * @return {?}\n */\n get validator() { return composeValidators(this._validators); }\n /**\n * @return {?}\n */\n get asyncValidator() {\n return composeAsyncValidators(this._asyncValidators);\n }\n /**\n * \\@internal\n * @return {?}\n */\n _checkParentType() { }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass AbstractControlStatus {\n /**\n * @param {?} cd\n */\n constructor(cd) { this._cd = cd; }\n /**\n * @return {?}\n */\n get ngClassUntouched() { return this._cd.control ? this._cd.control.untouched : false; }\n /**\n * @return {?}\n */\n get ngClassTouched() { return this._cd.control ? this._cd.control.touched : false; }\n /**\n * @return {?}\n */\n get ngClassPristine() { return this._cd.control ? this._cd.control.pristine : false; }\n /**\n * @return {?}\n */\n get ngClassDirty() { return this._cd.control ? this._cd.control.dirty : false; }\n /**\n * @return {?}\n */\n get ngClassValid() { return this._cd.control ? this._cd.control.valid : false; }\n /**\n * @return {?}\n */\n get ngClassInvalid() { return this._cd.control ? this._cd.control.invalid : false; }\n /**\n * @return {?}\n */\n get ngClassPending() { return this._cd.control ? this._cd.control.pending : false; }\n}\nconst ngControlStatusHost = {\n '[class.ng-untouched]': 'ngClassUntouched',\n '[class.ng-touched]': 'ngClassTouched',\n '[class.ng-pristine]': 'ngClassPristine',\n '[class.ng-dirty]': 'ngClassDirty',\n '[class.ng-valid]': 'ngClassValid',\n '[class.ng-invalid]': 'ngClassInvalid',\n '[class.ng-pending]': 'ngClassPending',\n};\n/**\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status. The following classes are applied as the properties\n * become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * \\@stable\n */\nclass NgControlStatus extends AbstractControlStatus {\n /**\n * @param {?} cd\n */\n constructor(cd) { super(cd); }\n}\nNgControlStatus.decorators = [\n { type: Directive, args: [{ selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost },] },\n];\n/** @nocollapse */\nNgControlStatus.ctorParameters = () => [\n { type: NgControl, decorators: [{ type: Self },] },\n];\n/**\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n *\n * \\@stable\n */\nclass NgControlStatusGroup extends AbstractControlStatus {\n /**\n * @param {?} cd\n */\n constructor(cd) { super(cd); }\n}\nNgControlStatusGroup.decorators = [\n { type: Directive, args: [{\n selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n host: ngControlStatusHost\n },] },\n];\n/** @nocollapse */\nNgControlStatusGroup.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Self },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Indicates that a FormControl is valid, i.e. that no errors exist in the input value.\n */\nconst VALID = 'VALID';\n/**\n * Indicates that a FormControl is invalid, i.e. that an error exists in the input value.\n */\nconst INVALID = 'INVALID';\n/**\n * Indicates that a FormControl is pending, i.e. that async validation is occurring and\n * errors are not yet available for the input value.\n */\nconst PENDING = 'PENDING';\n/**\n * Indicates that a FormControl is disabled, i.e. that the control is exempt from ancestor\n * calculations of validity or value.\n */\nconst DISABLED = 'DISABLED';\n/**\n * @param {?} control\n * @param {?} path\n * @param {?} delimiter\n * @return {?}\n */\nfunction _find(control, path, delimiter) {\n if (path == null)\n return null;\n if (!(path instanceof Array)) {\n path = (/** @type {?} */ (path)).split(delimiter);\n }\n if (path instanceof Array && (path.length === 0))\n return null;\n return (/** @type {?} */ (path)).reduce((v, name) => {\n if (v instanceof FormGroup) {\n return v.controls[name] || null;\n }\n if (v instanceof FormArray) {\n return v.at(/** @type {?} */ (name)) || null;\n }\n return null;\n }, control);\n}\n/**\n * @param {?=} validatorOrOpts\n * @return {?}\n */\nfunction coerceToValidator(validatorOrOpts) {\n const /** @type {?} */ validator = /** @type {?} */ ((isOptionsObj(validatorOrOpts) ? (/** @type {?} */ (validatorOrOpts)).validators :\n validatorOrOpts));\n return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n/**\n * @param {?=} asyncValidator\n * @param {?=} validatorOrOpts\n * @return {?}\n */\nfunction coerceToAsyncValidator(asyncValidator, validatorOrOpts) {\n const /** @type {?} */ origAsyncValidator = /** @type {?} */ ((isOptionsObj(validatorOrOpts) ? (/** @type {?} */ (validatorOrOpts)).asyncValidators :\n asyncValidator));\n return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :\n origAsyncValidator || null;\n}\n/**\n * @record\n */\n\n/**\n * @param {?=} validatorOrOpts\n * @return {?}\n */\nfunction isOptionsObj(validatorOrOpts) {\n return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&\n typeof validatorOrOpts === 'object';\n}\n/**\n * \\@whatItDoes This is the base class for {\\@link FormControl}, {\\@link FormGroup}, and\n * {\\@link FormArray}.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * \\@stable\n * @abstract\n */\nclass AbstractControl {\n /**\n * @param {?} validator\n * @param {?} asyncValidator\n */\n constructor(validator, asyncValidator) {\n this.validator = validator;\n this.asyncValidator = asyncValidator;\n /**\n * \\@internal\n */\n this._onCollectionChange = () => { };\n /**\n * A control is `pristine` if the user has not yet changed\n * the value in the UI.\n *\n * Note that programmatic changes to a control's value will\n * *not* mark it dirty.\n */\n this.pristine = true;\n /**\n * A control is marked `touched` once the user has triggered\n * a `blur` event on it.\n */\n this.touched = false;\n /**\n * \\@internal\n */\n this._onDisabledChange = [];\n }\n /**\n * The parent control.\n * @return {?}\n */\n get parent() { return this._parent; }\n /**\n * A control is `valid` when its `status === VALID`.\n *\n * In order to have this status, the control must have passed all its\n * validation checks.\n * @return {?}\n */\n get valid() { return this.status === VALID; }\n /**\n * A control is `invalid` when its `status === INVALID`.\n *\n * In order to have this status, the control must have failed\n * at least one of its validation checks.\n * @return {?}\n */\n get invalid() { return this.status === INVALID; }\n /**\n * A control is `pending` when its `status === PENDING`.\n *\n * In order to have this status, the control must be in the\n * middle of conducting a validation check.\n * @return {?}\n */\n get pending() { return this.status == PENDING; }\n /**\n * A control is `disabled` when its `status === DISABLED`.\n *\n * Disabled controls are exempt from validation checks and\n * are not included in the aggregate value of their ancestor\n * controls.\n * @return {?}\n */\n get disabled() { return this.status === DISABLED; }\n /**\n * A control is `enabled` as long as its `status !== DISABLED`.\n *\n * In other words, it has a status of `VALID`, `INVALID`, or\n * `PENDING`.\n * @return {?}\n */\n get enabled() { return this.status !== DISABLED; }\n /**\n * A control is `dirty` if the user has changed the value\n * in the UI.\n *\n * Note that programmatic changes to a control's value will\n * *not* mark it dirty.\n * @return {?}\n */\n get dirty() { return !this.pristine; }\n /**\n * A control is `untouched` if the user has not yet triggered\n * a `blur` event on it.\n * @return {?}\n */\n get untouched() { return !this.touched; }\n /**\n * Returns the update strategy of the `AbstractControl` (i.e.\n * the event on which the control will update itself).\n * Possible values: `'change'` (default) | `'blur'` | `'submit'`\n * @return {?}\n */\n get updateOn() {\n return this._updateOn ? this._updateOn : (this.parent ? this.parent.updateOn : 'change');\n }\n /**\n * Sets the synchronous validators that are active on this control. Calling\n * this will overwrite any existing sync validators.\n * @param {?} newValidator\n * @return {?}\n */\n setValidators(newValidator) {\n this.validator = coerceToValidator(newValidator);\n }\n /**\n * Sets the async validators that are active on this control. Calling this\n * will overwrite any existing async validators.\n * @param {?} newValidator\n * @return {?}\n */\n setAsyncValidators(newValidator) {\n this.asyncValidator = coerceToAsyncValidator(newValidator);\n }\n /**\n * Empties out the sync validator list.\n * @return {?}\n */\n clearValidators() { this.validator = null; }\n /**\n * Empties out the async validator list.\n * @return {?}\n */\n clearAsyncValidators() { this.asyncValidator = null; }\n /**\n * Marks the control as `touched`.\n *\n * This will also mark all direct ancestors as `touched` to maintain\n * the model.\n * @param {?=} opts\n * @return {?}\n */\n markAsTouched(opts = {}) {\n (/** @type {?} */ (this)).touched = true;\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsTouched(opts);\n }\n }\n /**\n * Marks the control as `untouched`.\n *\n * If the control has any children, it will also mark all children as `untouched`\n * to maintain the model, and re-calculate the `touched` status of all parent\n * controls.\n * @param {?=} opts\n * @return {?}\n */\n markAsUntouched(opts = {}) {\n (/** @type {?} */ (this)).touched = false;\n this._pendingTouched = false;\n this._forEachChild((control) => { control.markAsUntouched({ onlySelf: true }); });\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n /**\n * Marks the control as `dirty`.\n *\n * This will also mark all direct ancestors as `dirty` to maintain\n * the model.\n * @param {?=} opts\n * @return {?}\n */\n markAsDirty(opts = {}) {\n (/** @type {?} */ (this)).pristine = false;\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsDirty(opts);\n }\n }\n /**\n * Marks the control as `pristine`.\n *\n * If the control has any children, it will also mark all children as `pristine`\n * to maintain the model, and re-calculate the `pristine` status of all parent\n * controls.\n * @param {?=} opts\n * @return {?}\n */\n markAsPristine(opts = {}) {\n (/** @type {?} */ (this)).pristine = true;\n this._pendingDirty = false;\n this._forEachChild((control) => { control.markAsPristine({ onlySelf: true }); });\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n /**\n * Marks the control as `pending`.\n * @param {?=} opts\n * @return {?}\n */\n markAsPending(opts = {}) {\n (/** @type {?} */ (this)).status = PENDING;\n if (this._parent && !opts.onlySelf) {\n this._parent.markAsPending(opts);\n }\n }\n /**\n * Disables the control. This means the control will be exempt from validation checks and\n * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n *\n * If the control has children, all children will be disabled to maintain the model.\n * @param {?=} opts\n * @return {?}\n */\n disable(opts = {}) {\n (/** @type {?} */ (this)).status = DISABLED;\n (/** @type {?} */ (this)).errors = null;\n this._forEachChild((control) => { control.disable(Object.assign({}, opts, { onlySelf: true })); });\n this._updateValue();\n if (opts.emitEvent !== false) {\n (/** @type {?} */ (this.valueChanges)).emit(this.value);\n (/** @type {?} */ (this.statusChanges)).emit(this.status);\n }\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(true));\n }\n /**\n * Enables the control. This means the control will be included in validation checks and\n * the aggregate value of its parent. Its status is re-calculated based on its value and\n * its validators.\n *\n * If the control has children, all children will be enabled.\n * @param {?=} opts\n * @return {?}\n */\n enable(opts = {}) {\n (/** @type {?} */ (this)).status = VALID;\n this._forEachChild((control) => { control.enable(Object.assign({}, opts, { onlySelf: true })); });\n this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n this._updateAncestors(opts);\n this._onDisabledChange.forEach((changeFn) => changeFn(false));\n }\n /**\n * @param {?} opts\n * @return {?}\n */\n _updateAncestors(opts) {\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n this._parent._updatePristine();\n this._parent._updateTouched();\n }\n }\n /**\n * @param {?} parent\n * @return {?}\n */\n setParent(parent) { this._parent = parent; }\n /**\n * Re-calculates the value and validation status of the control.\n *\n * By default, it will also update the value and validity of its ancestors.\n * @param {?=} opts\n * @return {?}\n */\n updateValueAndValidity(opts = {}) {\n this._setInitialStatus();\n this._updateValue();\n if (this.enabled) {\n this._cancelExistingSubscription();\n (/** @type {?} */ (this)).errors = this._runValidator();\n (/** @type {?} */ (this)).status = this._calculateStatus();\n if (this.status === VALID || this.status === PENDING) {\n this._runAsyncValidator(opts.emitEvent);\n }\n }\n if (opts.emitEvent !== false) {\n (/** @type {?} */ (this.valueChanges)).emit(this.value);\n (/** @type {?} */ (this.statusChanges)).emit(this.status);\n }\n if (this._parent && !opts.onlySelf) {\n this._parent.updateValueAndValidity(opts);\n }\n }\n /**\n * \\@internal\n * @param {?=} opts\n * @return {?}\n */\n _updateTreeValidity(opts = { emitEvent: true }) {\n this._forEachChild((ctrl) => ctrl._updateTreeValidity(opts));\n this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n }\n /**\n * @return {?}\n */\n _setInitialStatus() {\n (/** @type {?} */ (this)).status = this._allControlsDisabled() ? DISABLED : VALID;\n }\n /**\n * @return {?}\n */\n _runValidator() {\n return this.validator ? this.validator(this) : null;\n }\n /**\n * @param {?=} emitEvent\n * @return {?}\n */\n _runAsyncValidator(emitEvent) {\n if (this.asyncValidator) {\n (/** @type {?} */ (this)).status = PENDING;\n const /** @type {?} */ obs = toObservable(this.asyncValidator(this));\n this._asyncValidationSubscription =\n obs.subscribe((errors) => this.setErrors(errors, { emitEvent }));\n }\n }\n /**\n * @return {?}\n */\n _cancelExistingSubscription() {\n if (this._asyncValidationSubscription) {\n this._asyncValidationSubscription.unsubscribe();\n }\n }\n /**\n * Sets errors on a form control.\n *\n * This is used when validations are run manually by the user, rather than automatically.\n *\n * Calling `setErrors` will also update the validity of the parent control.\n *\n * ### Example\n *\n * ```\n * const login = new FormControl(\"someLogin\");\n * login.setErrors({\n * \"notUnique\": true\n * });\n *\n * expect(login.valid).toEqual(false);\n * expect(login.errors).toEqual({\"notUnique\": true});\n *\n * login.setValue(\"someOtherLogin\");\n *\n * expect(login.valid).toEqual(true);\n * ```\n * @param {?} errors\n * @param {?=} opts\n * @return {?}\n */\n setErrors(errors, opts = {}) {\n (/** @type {?} */ (this)).errors = errors;\n this._updateControlsErrors(opts.emitEvent !== false);\n }\n /**\n * Retrieves a child control given the control's name or path.\n *\n * Paths can be passed in as an array or a string delimited by a dot.\n *\n * To get a control nested within a `person` sub-group:\n *\n * * `this.form.get('person.name');`\n *\n * -OR-\n *\n * * `this.form.get(['person', 'name']);`\n * @param {?} path\n * @return {?}\n */\n get(path) { return _find(this, path, '.'); }\n /**\n * Returns error data if the control with the given path has the error specified. Otherwise\n * returns null or undefined.\n *\n * If no path is given, it checks for the error on the present control.\n * @param {?} errorCode\n * @param {?=} path\n * @return {?}\n */\n getError(errorCode, path) {\n const /** @type {?} */ control = path ? this.get(path) : this;\n return control && control.errors ? control.errors[errorCode] : null;\n }\n /**\n * Returns true if the control with the given path has the error specified. Otherwise\n * returns false.\n *\n * If no path is given, it checks for the error on the present control.\n * @param {?} errorCode\n * @param {?=} path\n * @return {?}\n */\n hasError(errorCode, path) { return !!this.getError(errorCode, path); }\n /**\n * Retrieves the top-level ancestor of this control.\n * @return {?}\n */\n get root() {\n let /** @type {?} */ x = this;\n while (x._parent) {\n x = x._parent;\n }\n return x;\n }\n /**\n * \\@internal\n * @param {?} emitEvent\n * @return {?}\n */\n _updateControlsErrors(emitEvent) {\n (/** @type {?} */ (this)).status = this._calculateStatus();\n if (emitEvent) {\n (/** @type {?} */ (this.statusChanges)).emit(this.status);\n }\n if (this._parent) {\n this._parent._updateControlsErrors(emitEvent);\n }\n }\n /**\n * \\@internal\n * @return {?}\n */\n _initObservables() {\n (/** @type {?} */ (this)).valueChanges = new EventEmitter();\n (/** @type {?} */ (this)).statusChanges = new EventEmitter();\n }\n /**\n * @return {?}\n */\n _calculateStatus() {\n if (this._allControlsDisabled())\n return DISABLED;\n if (this.errors)\n return INVALID;\n if (this._anyControlsHaveStatus(PENDING))\n return PENDING;\n if (this._anyControlsHaveStatus(INVALID))\n return INVALID;\n return VALID;\n }\n /**\n * \\@internal\n * @param {?} status\n * @return {?}\n */\n _anyControlsHaveStatus(status) {\n return this._anyControls((control) => control.status === status);\n }\n /**\n * \\@internal\n * @return {?}\n */\n _anyControlsDirty() {\n return this._anyControls((control) => control.dirty);\n }\n /**\n * \\@internal\n * @return {?}\n */\n _anyControlsTouched() {\n return this._anyControls((control) => control.touched);\n }\n /**\n * \\@internal\n * @param {?=} opts\n * @return {?}\n */\n _updatePristine(opts = {}) {\n (/** @type {?} */ (this)).pristine = !this._anyControlsDirty();\n if (this._parent && !opts.onlySelf) {\n this._parent._updatePristine(opts);\n }\n }\n /**\n * \\@internal\n * @param {?=} opts\n * @return {?}\n */\n _updateTouched(opts = {}) {\n (/** @type {?} */ (this)).touched = this._anyControlsTouched();\n if (this._parent && !opts.onlySelf) {\n this._parent._updateTouched(opts);\n }\n }\n /**\n * \\@internal\n * @param {?} formState\n * @return {?}\n */\n _isBoxedValue(formState) {\n return typeof formState === 'object' && formState !== null &&\n Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n }\n /**\n * \\@internal\n * @param {?} fn\n * @return {?}\n */\n _registerOnCollectionChange(fn) { this._onCollectionChange = fn; }\n /**\n * \\@internal\n * @param {?=} opts\n * @return {?}\n */\n _setUpdateStrategy(opts) {\n if (isOptionsObj(opts) && (/** @type {?} */ (opts)).updateOn != null) {\n this._updateOn = /** @type {?} */ (((/** @type {?} */ (opts)).updateOn));\n }\n }\n}\n/**\n * \\@whatItDoes Tracks the value and validation status of an individual form control.\n *\n * It is one of the three fundamental building blocks of Angular forms, along with\n * {\\@link FormGroup} and {\\@link FormArray}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormControl}, you can pass in an initial value as the\n * first argument. Example:\n *\n * ```ts\n * const ctrl = new FormControl('some value');\n * console.log(ctrl.value); // 'some value'\n * ```\n *\n * You can also initialize the control with a form state object on instantiation,\n * which includes both the value and whether or not the control is disabled.\n * You can't use the value key without the disabled key; both are required\n * to use this way of initialization.\n *\n * ```ts\n * const ctrl = new FormControl({value: 'n/a', disabled: true});\n * console.log(ctrl.value); // 'n/a'\n * console.log(ctrl.status); // 'DISABLED'\n * ```\n *\n * The second {\\@link FormControl} argument can accept one of three things:\n * * a sync validator function\n * * an array of sync validator functions\n * * an options object containing validator and/or async validator functions\n *\n * Example of a single sync validator function:\n *\n * ```ts\n * const ctrl = new FormControl('', Validators.required);\n * console.log(ctrl.value); // ''\n * console.log(ctrl.status); // 'INVALID'\n * ```\n *\n * Example using options object:\n *\n * ```ts\n * const ctrl = new FormControl('', {\n * validators: Validators.required,\n * asyncValidators: myAsyncValidator\n * });\n * ```\n *\n * The options object can also be used to define when the control should update.\n * By default, the value and validity of a control updates whenever the value\n * changes. You can configure it to update on the blur event instead by setting\n * the `updateOn` option to `'blur'`.\n *\n * ```ts\n * const c = new FormControl('', { updateOn: 'blur' });\n * ```\n *\n * You can also set `updateOn` to `'submit'`, which will delay value and validity\n * updates until the parent form of the control fires a submit event.\n *\n * See its superclass, {\\@link AbstractControl}, for more properties and methods.\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nclass FormControl extends AbstractControl {\n /**\n * @param {?=} formState\n * @param {?=} validatorOrOpts\n * @param {?=} asyncValidator\n */\n constructor(formState = null, validatorOrOpts, asyncValidator) {\n super(coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n /**\n * \\@internal\n */\n this._onChange = [];\n this._applyFormState(formState);\n this._setUpdateStrategy(validatorOrOpts);\n this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n this._initObservables();\n }\n /**\n * Set the value of the form control to `value`.\n *\n * If `onlySelf` is `true`, this change will only affect the validation of this `FormControl`\n * and not its parent component. This defaults to false.\n *\n * If `emitEvent` is `true`, this\n * change will cause a `valueChanges` event on the `FormControl` to be emitted. This defaults\n * to true (as it falls through to `updateValueAndValidity`).\n *\n * If `emitModelToViewChange` is `true`, the view will be notified about the new value\n * via an `onChange` event. This is the default behavior if `emitModelToViewChange` is not\n * specified.\n *\n * If `emitViewToModelChange` is `true`, an ngModelChange event will be fired to update the\n * model. This is the default behavior if `emitViewToModelChange` is not specified.\n * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n setValue(value, options = {}) {\n (/** @type {?} */ (this)).value = this._pendingValue = value;\n if (this._onChange.length && options.emitModelToViewChange !== false) {\n this._onChange.forEach((changeFn) => changeFn(this.value, options.emitViewToModelChange !== false));\n }\n this.updateValueAndValidity(options);\n }\n /**\n * Patches the value of a control.\n *\n * This function is functionally the same as {\\@link FormControl#setValue setValue} at this level.\n * It exists for symmetry with {\\@link FormGroup#patchValue patchValue} on `FormGroups` and\n * `FormArrays`, where it does behave differently.\n * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n patchValue(value, options = {}) {\n this.setValue(value, options);\n }\n /**\n * Resets the form control. This means by default:\n *\n * * it is marked as `pristine`\n * * it is marked as `untouched`\n * * value is set to null\n *\n * You can also reset to a specific form state by passing through a standalone\n * value or a form state object that contains both a value and a disabled state\n * (these are the only two properties that cannot be calculated).\n *\n * Ex:\n *\n * ```ts\n * this.control.reset('Nancy');\n *\n * console.log(this.control.value); // 'Nancy'\n * ```\n *\n * OR\n *\n * ```\n * this.control.reset({value: 'Nancy', disabled: true});\n *\n * console.log(this.control.value); // 'Nancy'\n * console.log(this.control.status); // 'DISABLED'\n * ```\n * @param {?=} formState\n * @param {?=} options\n * @return {?}\n */\n reset(formState = null, options = {}) {\n this._applyFormState(formState);\n this.markAsPristine(options);\n this.markAsUntouched(options);\n this.setValue(this.value, options);\n this._pendingChange = false;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _updateValue() { }\n /**\n * \\@internal\n * @param {?} condition\n * @return {?}\n */\n _anyControls(condition) { return false; }\n /**\n * \\@internal\n * @return {?}\n */\n _allControlsDisabled() { return this.disabled; }\n /**\n * Register a listener for change events.\n * @param {?} fn\n * @return {?}\n */\n registerOnChange(fn) { this._onChange.push(fn); }\n /**\n * \\@internal\n * @return {?}\n */\n _clearChangeFns() {\n this._onChange = [];\n this._onDisabledChange = [];\n this._onCollectionChange = () => { };\n }\n /**\n * Register a listener for disabled events.\n * @param {?} fn\n * @return {?}\n */\n registerOnDisabledChange(fn) {\n this._onDisabledChange.push(fn);\n }\n /**\n * \\@internal\n * @param {?} cb\n * @return {?}\n */\n _forEachChild(cb) { }\n /**\n * \\@internal\n * @return {?}\n */\n _syncPendingControls() {\n if (this.updateOn === 'submit') {\n if (this._pendingDirty)\n this.markAsDirty();\n if (this._pendingTouched)\n this.markAsTouched();\n if (this._pendingChange) {\n this.setValue(this._pendingValue, { onlySelf: true, emitModelToViewChange: false });\n return true;\n }\n }\n return false;\n }\n /**\n * @param {?} formState\n * @return {?}\n */\n _applyFormState(formState) {\n if (this._isBoxedValue(formState)) {\n (/** @type {?} */ (this)).value = this._pendingValue = formState.value;\n formState.disabled ? this.disable({ onlySelf: true, emitEvent: false }) :\n this.enable({ onlySelf: true, emitEvent: false });\n }\n else {\n (/** @type {?} */ (this)).value = this._pendingValue = formState;\n }\n }\n}\n/**\n * \\@whatItDoes Tracks the value and validity state of a group of {\\@link FormControl}\n * instances.\n *\n * A `FormGroup` aggregates the values of each child {\\@link FormControl} into one object,\n * with each control name as the key. It calculates its status by reducing the statuses\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with {\\@link FormControl} and {\\@link FormArray}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormGroup}, pass in a collection of child controls as the first\n * argument. The key for each child will be the name under which it is registered.\n *\n * ### Example\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl('Nancy', Validators.minLength(2)),\n * last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value); // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status); // 'VALID'\n * ```\n *\n * You can also include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ### Example\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('', Validators.minLength(2)),\n * passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n * return g.get('password').value === g.get('passwordConfirm').value\n * ? null : {'mismatch': true};\n * }\n * ```\n *\n * Like {\\@link FormControl} instances, you can alternatively choose to pass in\n * validators and async validators as part of an options object.\n *\n * ```\n * const form = new FormGroup({\n * password: new FormControl('')\n * passwordConfirm: new FormControl('')\n * }, {validators: passwordMatchValidator, asyncValidators: otherValidator});\n * ```\n *\n * The options object can also be used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * group level, all child controls will default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormGroup({\n * one: new FormControl()\n * }, {updateOn: 'blur'});\n * ```\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nclass FormGroup extends AbstractControl {\n /**\n * @param {?} controls\n * @param {?=} validatorOrOpts\n * @param {?=} asyncValidator\n */\n constructor(controls, validatorOrOpts, asyncValidator) {\n super(coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this.controls = controls;\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n }\n /**\n * Registers a control with the group's list of controls.\n *\n * This method does not update the value or validity of the control, so for most cases you'll want\n * to use {\\@link FormGroup#addControl addControl} instead.\n * @param {?} name\n * @param {?} control\n * @return {?}\n */\n registerControl(name, control) {\n if (this.controls[name])\n return this.controls[name];\n this.controls[name] = control;\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n return control;\n }\n /**\n * Add a control to this group.\n * @param {?} name\n * @param {?} control\n * @return {?}\n */\n addControl(name, control) {\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n /**\n * Remove a control from this group.\n * @param {?} name\n * @return {?}\n */\n removeControl(name) {\n if (this.controls[name])\n this.controls[name]._registerOnCollectionChange(() => { });\n delete (this.controls[name]);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n /**\n * Replace an existing control.\n * @param {?} name\n * @param {?} control\n * @return {?}\n */\n setControl(name, control) {\n if (this.controls[name])\n this.controls[name]._registerOnCollectionChange(() => { });\n delete (this.controls[name]);\n if (control)\n this.registerControl(name, control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n /**\n * Check whether there is an enabled control with the given name in the group.\n *\n * It will return false for disabled controls. If you'd like to check for existence in the group\n * only, use {\\@link AbstractControl#get get} instead.\n * @param {?} controlName\n * @return {?}\n */\n contains(controlName) {\n return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n }\n /**\n * Sets the value of the {\\@link FormGroup}. It accepts an object that matches\n * the structure of the group, with control names as keys.\n *\n * This method performs strict checks, so it will throw an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * ### Example\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.setValue({first: 'Nancy', last: 'Drew'});\n * console.log(form.value); // {first: 'Nancy', last: 'Drew'}\n *\n * ```\n * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n setValue(value, options = {}) {\n this._checkAllValuesPresent(value);\n Object.keys(value).forEach(name => {\n this._throwIfControlMissing(name);\n this.controls[name].setValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n }\n /**\n * Patches the value of the {\\@link FormGroup}. It accepts an object with control\n * names as keys, and will do its best to match the values to the correct controls\n * in the group.\n *\n * It accepts both super-sets and sub-sets of the group without throwing an error.\n *\n * ### Example\n *\n * ```\n * const form = new FormGroup({\n * first: new FormControl(),\n * last: new FormControl()\n * });\n * console.log(form.value); // {first: null, last: null}\n *\n * form.patchValue({first: 'Nancy'});\n * console.log(form.value); // {first: 'Nancy', last: null}\n *\n * ```\n * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n patchValue(value, options = {}) {\n Object.keys(value).forEach(name => {\n if (this.controls[name]) {\n this.controls[name].patchValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n }\n });\n this.updateValueAndValidity(options);\n }\n /**\n * Resets the {\\@link FormGroup}. This means by default:\n *\n * * The group and all descendants are marked `pristine`\n * * The group and all descendants are marked `untouched`\n * * The value of all descendants will be null or null maps\n *\n * You can also reset to a specific form state by passing in a map of states\n * that matches the structure of your form, with control names as keys. The state\n * can be a standalone value or a form state object with both a value and a disabled\n * status.\n *\n * ### Example\n *\n * ```ts\n * this.form.reset({first: 'name', last: 'last name'});\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * ```\n *\n * - OR -\n *\n * ```\n * this.form.reset({\n * first: {value: 'name', disabled: true},\n * last: 'last'\n * });\n *\n * console.log(this.form.value); // {first: 'name', last: 'last name'}\n * console.log(this.form.get('first').status); // 'DISABLED'\n * ```\n * @param {?=} value\n * @param {?=} options\n * @return {?}\n */\n reset(value = {}, options = {}) {\n this._forEachChild((control, name) => {\n control.reset(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n /**\n * The aggregate value of the {\\@link FormGroup}, including any disabled controls.\n *\n * If you'd like to include all values regardless of disabled status, use this method.\n * Otherwise, the `value` property is the best way to get the value of the group.\n * @return {?}\n */\n getRawValue() {\n return this._reduceChildren({}, (acc, control, name) => {\n acc[name] = control instanceof FormControl ? control.value : (/** @type {?} */ (control)).getRawValue();\n return acc;\n });\n }\n /**\n * \\@internal\n * @return {?}\n */\n _syncPendingControls() {\n let /** @type {?} */ subtreeUpdated = this._reduceChildren(false, (updated, child) => {\n return child._syncPendingControls() ? true : updated;\n });\n if (subtreeUpdated)\n this.updateValueAndValidity({ onlySelf: true });\n return subtreeUpdated;\n }\n /**\n * \\@internal\n * @param {?} name\n * @return {?}\n */\n _throwIfControlMissing(name) {\n if (!Object.keys(this.controls).length) {\n throw new Error(`\n There are no form controls registered with this group yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.controls[name]) {\n throw new Error(`Cannot find form control with name: ${name}.`);\n }\n }\n /**\n * \\@internal\n * @param {?} cb\n * @return {?}\n */\n _forEachChild(cb) {\n Object.keys(this.controls).forEach(k => cb(this.controls[k], k));\n }\n /**\n * \\@internal\n * @return {?}\n */\n _setUpControls() {\n this._forEachChild((control) => {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n });\n }\n /**\n * \\@internal\n * @return {?}\n */\n _updateValue() { (/** @type {?} */ (this)).value = this._reduceValue(); }\n /**\n * \\@internal\n * @param {?} condition\n * @return {?}\n */\n _anyControls(condition) {\n let /** @type {?} */ res = false;\n this._forEachChild((control, name) => {\n res = res || (this.contains(name) && condition(control));\n });\n return res;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _reduceValue() {\n return this._reduceChildren({}, (acc, control, name) => {\n if (control.enabled || this.disabled) {\n acc[name] = control.value;\n }\n return acc;\n });\n }\n /**\n * \\@internal\n * @param {?} initValue\n * @param {?} fn\n * @return {?}\n */\n _reduceChildren(initValue, fn) {\n let /** @type {?} */ res = initValue;\n this._forEachChild((control, name) => { res = fn(res, control, name); });\n return res;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _allControlsDisabled() {\n for (const /** @type {?} */ controlName of Object.keys(this.controls)) {\n if (this.controls[controlName].enabled) {\n return false;\n }\n }\n return Object.keys(this.controls).length > 0 || this.disabled;\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _checkAllValuesPresent(value) {\n this._forEachChild((control, name) => {\n if (value[name] === undefined) {\n throw new Error(`Must supply a value for form control with name: '${name}'.`);\n }\n });\n }\n}\n/**\n * \\@whatItDoes Tracks the value and validity state of an array of {\\@link FormControl},\n * {\\@link FormGroup} or {\\@link FormArray} instances.\n *\n * A `FormArray` aggregates the values of each child {\\@link FormControl} into an array.\n * It calculates its status by reducing the statuses of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with {\\@link FormControl} and {\\@link FormGroup}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormArray}, pass in an array of child controls as the first\n * argument.\n *\n * ### Example\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy', Validators.minLength(2)),\n * new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value); // ['Nancy', 'Drew']\n * console.log(arr.status); // 'VALID'\n * ```\n *\n * You can also include array-level validators and async validators. These come in handy\n * when you want to perform validation that considers the value of more than one child\n * control.\n *\n * The two types of validators can be passed in separately as the second and third arg\n * respectively, or together as part of an options object.\n *\n * ```\n * const arr = new FormArray([\n * new FormControl('Nancy'),\n * new FormControl('Drew')\n * ], {validators: myValidator, asyncValidators: myAsyncValidator});\n * ```\n *\n * The options object can also be used to set a default value for each child\n * control's `updateOn` property. If you set `updateOn` to `'blur'` at the\n * array level, all child controls will default to 'blur', unless the child\n * has explicitly specified a different `updateOn` value.\n *\n * ```ts\n * const c = new FormArray([\n * new FormControl()\n * ], {updateOn: 'blur'});\n * ```\n *\n * ### Adding or removing controls\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that will result in strange and unexpected behavior such\n * as broken change detection.\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nclass FormArray extends AbstractControl {\n /**\n * @param {?} controls\n * @param {?=} validatorOrOpts\n * @param {?=} asyncValidator\n */\n constructor(controls, validatorOrOpts, asyncValidator) {\n super(coerceToValidator(validatorOrOpts), coerceToAsyncValidator(asyncValidator, validatorOrOpts));\n this.controls = controls;\n this._initObservables();\n this._setUpdateStrategy(validatorOrOpts);\n this._setUpControls();\n this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n }\n /**\n * Get the {\\@link AbstractControl} at the given `index` in the array.\n * @param {?} index\n * @return {?}\n */\n at(index) { return this.controls[index]; }\n /**\n * Insert a new {\\@link AbstractControl} at the end of the array.\n * @param {?} control\n * @return {?}\n */\n push(control) {\n this.controls.push(control);\n this._registerControl(control);\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n /**\n * Insert a new {\\@link AbstractControl} at the given `index` in the array.\n * @param {?} index\n * @param {?} control\n * @return {?}\n */\n insert(index, control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n this.updateValueAndValidity();\n }\n /**\n * Remove the control at the given `index` in the array.\n * @param {?} index\n * @return {?}\n */\n removeAt(index) {\n if (this.controls[index])\n this.controls[index]._registerOnCollectionChange(() => { });\n this.controls.splice(index, 1);\n this.updateValueAndValidity();\n }\n /**\n * Replace an existing control.\n * @param {?} index\n * @param {?} control\n * @return {?}\n */\n setControl(index, control) {\n if (this.controls[index])\n this.controls[index]._registerOnCollectionChange(() => { });\n this.controls.splice(index, 1);\n if (control) {\n this.controls.splice(index, 0, control);\n this._registerControl(control);\n }\n this.updateValueAndValidity();\n this._onCollectionChange();\n }\n /**\n * Length of the control array.\n * @return {?}\n */\n get length() { return this.controls.length; }\n /**\n * Sets the value of the {\\@link FormArray}. It accepts an array that matches\n * the structure of the control.\n *\n * This method performs strict checks, so it will throw an error if you try\n * to set the value of a control that doesn't exist or if you exclude the\n * value of a control.\n *\n * ### Example\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.setValue(['Nancy', 'Drew']);\n * console.log(arr.value); // ['Nancy', 'Drew']\n * ```\n * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n setValue(value, options = {}) {\n this._checkAllValuesPresent(value);\n value.forEach((newValue, index) => {\n this._throwIfControlMissing(index);\n this.at(index).setValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n }\n /**\n * Patches the value of the {\\@link FormArray}. It accepts an array that matches the\n * structure of the control, and will do its best to match the values to the correct\n * controls in the group.\n *\n * It accepts both super-sets and sub-sets of the array without throwing an error.\n *\n * ### Example\n *\n * ```\n * const arr = new FormArray([\n * new FormControl(),\n * new FormControl()\n * ]);\n * console.log(arr.value); // [null, null]\n *\n * arr.patchValue(['Nancy']);\n * console.log(arr.value); // ['Nancy', null]\n * ```\n * @param {?} value\n * @param {?=} options\n * @return {?}\n */\n patchValue(value, options = {}) {\n value.forEach((newValue, index) => {\n if (this.at(index)) {\n this.at(index).patchValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });\n }\n });\n this.updateValueAndValidity(options);\n }\n /**\n * Resets the {\\@link FormArray}. This means by default:\n *\n * * The array and all descendants are marked `pristine`\n * * The array and all descendants are marked `untouched`\n * * The value of all descendants will be null or null maps\n *\n * You can also reset to a specific form state by passing in an array of states\n * that matches the structure of the control. The state can be a standalone value\n * or a form state object with both a value and a disabled status.\n *\n * ### Example\n *\n * ```ts\n * this.arr.reset(['name', 'last name']);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * ```\n *\n * - OR -\n *\n * ```\n * this.arr.reset([\n * {value: 'name', disabled: true},\n * 'last'\n * ]);\n *\n * console.log(this.arr.value); // ['name', 'last name']\n * console.log(this.arr.get(0).status); // 'DISABLED'\n * ```\n * @param {?=} value\n * @param {?=} options\n * @return {?}\n */\n reset(value = [], options = {}) {\n this._forEachChild((control, index) => {\n control.reset(value[index], { onlySelf: true, emitEvent: options.emitEvent });\n });\n this.updateValueAndValidity(options);\n this._updatePristine(options);\n this._updateTouched(options);\n }\n /**\n * The aggregate value of the array, including any disabled controls.\n *\n * If you'd like to include all values regardless of disabled status, use this method.\n * Otherwise, the `value` property is the best way to get the value of the array.\n * @return {?}\n */\n getRawValue() {\n return this.controls.map((control) => {\n return control instanceof FormControl ? control.value : (/** @type {?} */ (control)).getRawValue();\n });\n }\n /**\n * \\@internal\n * @return {?}\n */\n _syncPendingControls() {\n let /** @type {?} */ subtreeUpdated = this.controls.reduce((updated, child) => {\n return child._syncPendingControls() ? true : updated;\n }, false);\n if (subtreeUpdated)\n this.updateValueAndValidity({ onlySelf: true });\n return subtreeUpdated;\n }\n /**\n * \\@internal\n * @param {?} index\n * @return {?}\n */\n _throwIfControlMissing(index) {\n if (!this.controls.length) {\n throw new Error(`\n There are no form controls registered with this array yet. If you're using ngModel,\n you may want to check next tick (e.g. use setTimeout).\n `);\n }\n if (!this.at(index)) {\n throw new Error(`Cannot find form control at index ${index}`);\n }\n }\n /**\n * \\@internal\n * @param {?} cb\n * @return {?}\n */\n _forEachChild(cb) {\n this.controls.forEach((control, index) => { cb(control, index); });\n }\n /**\n * \\@internal\n * @return {?}\n */\n _updateValue() {\n (/** @type {?} */ (this)).value =\n this.controls.filter((control) => control.enabled || this.disabled)\n .map((control) => control.value);\n }\n /**\n * \\@internal\n * @param {?} condition\n * @return {?}\n */\n _anyControls(condition) {\n return this.controls.some((control) => control.enabled && condition(control));\n }\n /**\n * \\@internal\n * @return {?}\n */\n _setUpControls() {\n this._forEachChild((control) => this._registerControl(control));\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _checkAllValuesPresent(value) {\n this._forEachChild((control, i) => {\n if (value[i] === undefined) {\n throw new Error(`Must supply a value for form control at index: ${i}.`);\n }\n });\n }\n /**\n * \\@internal\n * @return {?}\n */\n _allControlsDisabled() {\n for (const /** @type {?} */ control of this.controls) {\n if (control.enabled)\n return false;\n }\n return this.controls.length > 0 || this.disabled;\n }\n /**\n * @param {?} control\n * @return {?}\n */\n _registerControl(control) {\n control.setParent(this);\n control._registerOnCollectionChange(this._onCollectionChange);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst formDirectiveProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgForm)\n};\nconst resolvedPromise = Promise.resolve(null);\n/**\n * \\@whatItDoes Creates a top-level {\\@link FormGroup} instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * \\@howToUse\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags. You don't need to add a special selector.\n *\n * You can export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful. Many properties from the underlying\n * {\\@link FormGroup} instance are duplicated on the directive itself, so a reference to it\n * will give you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, you'll want to use {\\@link NgModel} with a\n * `name` attribute. You can also use {\\@link NgModelGroup} if you'd like to create\n * sub-groups within the form.\n *\n * You can listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event will be emitted with the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * If you want to import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, you can add `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * {\\@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `FormsModule`\n *\n * \\@stable\n */\nclass NgForm extends ControlContainer {\n /**\n * @param {?} validators\n * @param {?} asyncValidators\n */\n constructor(validators, asyncValidators) {\n super();\n this.submitted = false;\n this._directives = [];\n this.ngSubmit = new EventEmitter();\n this.form =\n new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n }\n /**\n * @return {?}\n */\n ngAfterViewInit() { this._setUpdateStrategy(); }\n /**\n * @return {?}\n */\n get formDirective() { return this; }\n /**\n * @return {?}\n */\n get control() { return this.form; }\n /**\n * @return {?}\n */\n get path() { return []; }\n /**\n * @return {?}\n */\n get controls() { return this.form.controls; }\n /**\n * @param {?} dir\n * @return {?}\n */\n addControl(dir) {\n resolvedPromise.then(() => {\n const /** @type {?} */ container = this._findContainer(dir.path);\n (/** @type {?} */ (dir)).control = /** @type {?} */ (container.registerControl(dir.name, dir.control));\n setUpControl(dir.control, dir);\n dir.control.updateValueAndValidity({ emitEvent: false });\n this._directives.push(dir);\n });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n getControl(dir) { return /** @type {?} */ (this.form.get(dir.path)); }\n /**\n * @param {?} dir\n * @return {?}\n */\n removeControl(dir) {\n resolvedPromise.then(() => {\n const /** @type {?} */ container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n removeDir(this._directives, dir);\n });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n addFormGroup(dir) {\n resolvedPromise.then(() => {\n const /** @type {?} */ container = this._findContainer(dir.path);\n const /** @type {?} */ group = new FormGroup({});\n setUpFormContainer(group, dir);\n container.registerControl(dir.name, group);\n group.updateValueAndValidity({ emitEvent: false });\n });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n removeFormGroup(dir) {\n resolvedPromise.then(() => {\n const /** @type {?} */ container = this._findContainer(dir.path);\n if (container) {\n container.removeControl(dir.name);\n }\n });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n getFormGroup(dir) { return /** @type {?} */ (this.form.get(dir.path)); }\n /**\n * @param {?} dir\n * @param {?} value\n * @return {?}\n */\n updateModel(dir, value) {\n resolvedPromise.then(() => {\n const /** @type {?} */ ctrl = /** @type {?} */ (this.form.get(/** @type {?} */ ((dir.path))));\n ctrl.setValue(value);\n });\n }\n /**\n * @param {?} value\n * @return {?}\n */\n setValue(value) { this.control.setValue(value); }\n /**\n * @param {?} $event\n * @return {?}\n */\n onSubmit($event) {\n (/** @type {?} */ (this)).submitted = true;\n syncPendingControls(this.form, this._directives);\n this.ngSubmit.emit($event);\n return false;\n }\n /**\n * @return {?}\n */\n onReset() { this.resetForm(); }\n /**\n * @param {?=} value\n * @return {?}\n */\n resetForm(value = undefined) {\n this.form.reset(value);\n (/** @type {?} */ (this)).submitted = false;\n }\n /**\n * @return {?}\n */\n _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.form._updateOn = this.options.updateOn;\n }\n }\n /**\n * \\@internal\n * @param {?} path\n * @return {?}\n */\n _findContainer(path) {\n path.pop();\n return path.length ? /** @type {?} */ (this.form.get(path)) : this.form;\n }\n}\nNgForm.decorators = [\n { type: Directive, args: [{\n selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,[ngForm]',\n providers: [formDirectiveProvider],\n host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n outputs: ['ngSubmit'],\n exportAs: 'ngForm'\n },] },\n];\n/** @nocollapse */\nNgForm.ctorParameters = () => [\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n];\nNgForm.propDecorators = {\n \"options\": [{ type: Input, args: ['ngFormOptions',] },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst FormErrorExamples = {\n formControlName: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n firstName: new FormControl()\n });`,\n formGroupName: `\n <div [formGroup]=\"myGroup\">\n <div formGroupName=\"person\">\n <input formControlName=\"firstName\">\n </div>\n </div>\n\n In your class:\n\n this.myGroup = new FormGroup({\n person: new FormGroup({ firstName: new FormControl() })\n });`,\n formArrayName: `\n <div [formGroup]=\"myGroup\">\n <div formArrayName=\"cities\">\n <div *ngFor=\"let city of cityArray.controls; index as i\">\n <input [formControlName]=\"i\">\n </div>\n </div>\n </div>\n\n In your class:\n\n this.cityArray = new FormArray([new FormControl('SF')]);\n this.myGroup = new FormGroup({\n cities: this.cityArray\n });`,\n ngModelGroup: `\n <form>\n <div ngModelGroup=\"person\">\n <input [(ngModel)]=\"person.name\" name=\"firstName\">\n </div>\n </form>`,\n ngModelWithFormGroup: `\n <div [formGroup]=\"myGroup\">\n <input formControlName=\"firstName\">\n <input [(ngModel)]=\"showMoreControls\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n `\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass TemplateDrivenErrors {\n /**\n * @return {?}\n */\n static modelParentException() {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroup directive. Try using\n formGroup's partner directive \"formControlName\" instead. Example:\n\n ${FormErrorExamples.formControlName}\n\n Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\n\n Example:\n\n ${FormErrorExamples.ngModelWithFormGroup}`);\n }\n /**\n * @return {?}\n */\n static formGroupNameException() {\n throw new Error(`\n ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\n\n Option 1: Use formControlName instead of ngModel (reactive strategy):\n\n ${FormErrorExamples.formGroupName}\n\n Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):\n\n ${FormErrorExamples.ngModelGroup}`);\n }\n /**\n * @return {?}\n */\n static missingNameException() {\n throw new Error(`If ngModel is used within a form tag, either the name attribute must be set or the form\n control must be defined as 'standalone' in ngModelOptions.\n\n Example 1: <input [(ngModel)]=\"person.firstName\" name=\"first\">\n Example 2: <input [(ngModel)]=\"person.firstName\" [ngModelOptions]=\"{standalone: true}\">`);\n }\n /**\n * @return {?}\n */\n static modelGroupParentException() {\n throw new Error(`\n ngModelGroup cannot be used with a parent formGroup directive.\n\n Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\n\n ${FormErrorExamples.formGroupName}\n\n Option 2: Use a regular form tag instead of the formGroup directive (template-driven strategy):\n\n ${FormErrorExamples.ngModelGroup}`);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst modelGroupProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => NgModelGroup)\n};\n/**\n * \\@whatItDoes Creates and binds a {\\@link FormGroup} instance to a DOM element.\n *\n * \\@howToUse\n *\n * This directive can only be used as a child of {\\@link NgForm} (or in other words,\n * within `<form>` tags).\n *\n * Use this directive if you'd like to create a sub-group within a form. This can\n * come in handy if you want to validate a sub-group of your form separately from\n * the rest of your form, or if some values in your domain model make more sense to\n * consume together in a nested object.\n *\n * Pass in the name you'd like this sub-group to have and it will become the key\n * for the sub-group in the form's full value. You can also export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * {\\@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `FormsModule`\n *\n * \\@stable\n */\nclass NgModelGroup extends AbstractFormGroupDirective {\n /**\n * @param {?} parent\n * @param {?} validators\n * @param {?} asyncValidators\n */\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _checkParentType() {\n if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelGroupParentException();\n }\n }\n}\nNgModelGroup.decorators = [\n { type: Directive, args: [{ selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup' },] },\n];\n/** @nocollapse */\nNgModelGroup.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Host }, { type: SkipSelf },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n];\nNgModelGroup.propDecorators = {\n \"name\": [{ type: Input, args: ['ngModelGroup',] },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst formControlBinding = {\n provide: NgControl,\n useExisting: forwardRef(() => NgModel)\n};\n/**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\nconst resolvedPromise$1 = Promise.resolve(null);\n/**\n * \\@whatItDoes Creates a {\\@link FormControl} instance from a domain model and binds it\n * to a form control element.\n *\n * The {\\@link FormControl} instance will track the value, user interaction, and\n * validation status of the control and keep the view synced with the model. If used\n * within a parent form, the directive will also register itself with the form as a child\n * control.\n *\n * \\@howToUse\n *\n * This directive can be used by itself or as part of a larger form. All you need is the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional {\\@link Input}. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class will set the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI will always be synced back to\n * the domain model in your class as well.\n *\n * If you wish to inspect the properties of the associated {\\@link FormControl} (like\n * validity state), you can also export the directive into a local template variable using\n * `ngModel` as the key (ex: `#myVar=\"ngModel\"`). You can then access the control using the\n * directive's `control` property, but most properties you'll need (like `valid` and `dirty`)\n * will fall through to the control anyway, so you can access them directly. You can see a\n * full list of properties directly available in {\\@link AbstractControlDirective}.\n *\n * The following is an example of a simple standalone control using `ngModel`:\n *\n * {\\@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * It's worth noting that in the context of a parent form, you often can skip one-way or\n * two-way binding because the parent form will sync the value for you. You can access\n * its properties by exporting it into a local template variable using `ngForm` (ex:\n * `#f=\"ngForm\"`). Then you can pass it where it needs to go on submit.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n *\n * Take a look at an example of using `ngModel` within a form:\n *\n * {\\@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * To see `ngModel` examples with different form control types, see:\n *\n * * Radio buttons: {\\@link RadioControlValueAccessor}\n * * Selects: {\\@link SelectControlValueAccessor}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: `FormsModule`\n *\n * \\@stable\n */\nclass NgModel extends NgControl {\n /**\n * @param {?} parent\n * @param {?} validators\n * @param {?} asyncValidators\n * @param {?} valueAccessors\n */\n constructor(parent, validators, asyncValidators, valueAccessors) {\n super();\n this.control = new FormControl();\n /**\n * \\@internal\n */\n this._registered = false;\n this.update = new EventEmitter();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n this._checkForErrors();\n if (!this._registered)\n this._setUpControl();\n if ('isDisabled' in changes) {\n this._updateDisabled(changes);\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n this._updateValue(this.model);\n this.viewModel = this.model;\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() { this.formDirective && this.formDirective.removeControl(this); }\n /**\n * @return {?}\n */\n get path() {\n return this._parent ? controlPath(this.name, this._parent) : [this.name];\n }\n /**\n * @return {?}\n */\n get formDirective() { return this._parent ? this._parent.formDirective : null; }\n /**\n * @return {?}\n */\n get validator() { return composeValidators(this._rawValidators); }\n /**\n * @return {?}\n */\n get asyncValidator() {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n /**\n * @param {?} newValue\n * @return {?}\n */\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n /**\n * @return {?}\n */\n _setUpControl() {\n this._setUpdateStrategy();\n this._isStandalone() ? this._setUpStandalone() :\n this.formDirective.addControl(this);\n this._registered = true;\n }\n /**\n * @return {?}\n */\n _setUpdateStrategy() {\n if (this.options && this.options.updateOn != null) {\n this.control._updateOn = this.options.updateOn;\n }\n }\n /**\n * @return {?}\n */\n _isStandalone() {\n return !this._parent || !!(this.options && this.options.standalone);\n }\n /**\n * @return {?}\n */\n _setUpStandalone() {\n setUpControl(this.control, this);\n this.control.updateValueAndValidity({ emitEvent: false });\n }\n /**\n * @return {?}\n */\n _checkForErrors() {\n if (!this._isStandalone()) {\n this._checkParentType();\n }\n this._checkName();\n }\n /**\n * @return {?}\n */\n _checkParentType() {\n if (!(this._parent instanceof NgModelGroup) &&\n this._parent instanceof AbstractFormGroupDirective) {\n TemplateDrivenErrors.formGroupNameException();\n }\n else if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n TemplateDrivenErrors.modelParentException();\n }\n }\n /**\n * @return {?}\n */\n _checkName() {\n if (this.options && this.options.name)\n this.name = this.options.name;\n if (!this._isStandalone() && !this.name) {\n TemplateDrivenErrors.missingNameException();\n }\n }\n /**\n * @param {?} value\n * @return {?}\n */\n _updateValue(value) {\n resolvedPromise$1.then(() => { this.control.setValue(value, { emitViewToModelChange: false }); });\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n _updateDisabled(changes) {\n const /** @type {?} */ disabledValue = changes['isDisabled'].currentValue;\n const /** @type {?} */ isDisabled = disabledValue === '' || (disabledValue && disabledValue !== 'false');\n resolvedPromise$1.then(() => {\n if (isDisabled && !this.control.disabled) {\n this.control.disable();\n }\n else if (!isDisabled && this.control.disabled) {\n this.control.enable();\n }\n });\n }\n}\nNgModel.decorators = [\n { type: Directive, args: [{\n selector: '[ngModel]:not([formControlName]):not([formControl])',\n providers: [formControlBinding],\n exportAs: 'ngModel'\n },] },\n];\n/** @nocollapse */\nNgModel.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Optional }, { type: Host },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] },] },\n];\nNgModel.propDecorators = {\n \"name\": [{ type: Input },],\n \"isDisabled\": [{ type: Input, args: ['disabled',] },],\n \"model\": [{ type: Input, args: ['ngModel',] },],\n \"options\": [{ type: Input, args: ['ngModelOptions',] },],\n \"update\": [{ type: Output, args: ['ngModelChange',] },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass ReactiveErrors {\n /**\n * @return {?}\n */\n static controlParentException() {\n throw new Error(`formControlName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${FormErrorExamples.formControlName}`);\n }\n /**\n * @return {?}\n */\n static ngModelGroupException() {\n throw new Error(`formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\n that also have a \"form\" prefix: formGroupName, formArrayName, or formGroup.\n\n Option 1: Update the parent to be formGroupName (reactive form strategy)\n\n ${FormErrorExamples.formGroupName}\n\n Option 2: Use ngModel instead of formControlName (template-driven strategy)\n\n ${FormErrorExamples.ngModelGroup}`);\n }\n /**\n * @return {?}\n */\n static missingFormException() {\n throw new Error(`formGroup expects a FormGroup instance. Please pass one in.\n\n Example:\n\n ${FormErrorExamples.formControlName}`);\n }\n /**\n * @return {?}\n */\n static groupParentException() {\n throw new Error(`formGroupName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${FormErrorExamples.formGroupName}`);\n }\n /**\n * @return {?}\n */\n static arrayParentException() {\n throw new Error(`formArrayName must be used with a parent formGroup directive. You'll want to add a formGroup\n directive and pass it an existing FormGroup instance (you can create one in your class).\n\n Example:\n\n ${FormErrorExamples.formArrayName}`);\n }\n /**\n * @return {?}\n */\n static disabledAttrWarning() {\n console.warn(`\n It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\n when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\n you. We recommend using this approach to avoid 'changed after checked' errors.\n \n Example: \n form = new FormGroup({\n first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\n last: new FormControl('Drew', Validators.required)\n });\n `);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst formControlBinding$1 = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlDirective)\n};\n/**\n * \\@whatItDoes Syncs a standalone {\\@link FormControl} instance to a form control element.\n *\n * In other words, this directive ensures that any values written to the {\\@link FormControl}\n * instance programmatically will be written to the DOM element (model -> view). Conversely,\n * any values written to the DOM element through user input will be reflected in the\n * {\\@link FormControl} instance (view -> model).\n *\n * \\@howToUse\n *\n * Use this directive if you'd like to create and manage a {\\@link FormControl} instance directly.\n * Simply create a {\\@link FormControl}, save it to your component class, and pass it into the\n * {\\@link FormControlDirective}.\n *\n * This directive is designed to be used as a standalone control. Unlike {\\@link FormControlName},\n * it does not require that your {\\@link FormControl} instance be part of any parent\n * {\\@link FormGroup}, and it won't be registered to any {\\@link FormGroupDirective} that\n * exists above it.\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormControl} instance. See a full list of available properties in\n * {\\@link AbstractControl}.\n *\n * **Set the value**: You can pass in an initial value when instantiating the {\\@link FormControl},\n * or you can set it programmatically later using {\\@link AbstractControl#setValue setValue} or\n * {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the control, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event. You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * {\\@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n * \\@stable\n */\nclass FormControlDirective extends NgControl {\n /**\n * @param {?} validators\n * @param {?} asyncValidators\n * @param {?} valueAccessors\n */\n constructor(validators, asyncValidators, valueAccessors) {\n super();\n this.update = new EventEmitter();\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n set isDisabled(isDisabled) { ReactiveErrors.disabledAttrWarning(); }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if (this._isControlChanged(changes)) {\n setUpControl(this.form, this);\n if (this.control.disabled && /** @type {?} */ ((this.valueAccessor)).setDisabledState) {\n /** @type {?} */ ((/** @type {?} */ ((this.valueAccessor)).setDisabledState))(true);\n }\n this.form.updateValueAndValidity({ emitEvent: false });\n }\n if (isPropertyUpdated(changes, this.viewModel)) {\n this.form.setValue(this.model);\n this.viewModel = this.model;\n }\n }\n /**\n * @return {?}\n */\n get path() { return []; }\n /**\n * @return {?}\n */\n get validator() { return composeValidators(this._rawValidators); }\n /**\n * @return {?}\n */\n get asyncValidator() {\n return composeAsyncValidators(this._rawAsyncValidators);\n }\n /**\n * @return {?}\n */\n get control() { return this.form; }\n /**\n * @param {?} newValue\n * @return {?}\n */\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n _isControlChanged(changes) {\n return changes.hasOwnProperty('form');\n }\n}\nFormControlDirective.decorators = [\n { type: Directive, args: [{ selector: '[formControl]', providers: [formControlBinding$1], exportAs: 'ngForm' },] },\n];\n/** @nocollapse */\nFormControlDirective.ctorParameters = () => [\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] },] },\n];\nFormControlDirective.propDecorators = {\n \"form\": [{ type: Input, args: ['formControl',] },],\n \"model\": [{ type: Input, args: ['ngModel',] },],\n \"update\": [{ type: Output, args: ['ngModelChange',] },],\n \"isDisabled\": [{ type: Input, args: ['disabled',] },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst formDirectiveProvider$1 = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupDirective)\n};\n/**\n * \\@whatItDoes Binds an existing {\\@link FormGroup} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive accepts an existing {\\@link FormGroup} instance. It will then use this\n * {\\@link FormGroup} instance to match any child {\\@link FormControl}, {\\@link FormGroup},\n * and {\\@link FormArray} instances to child {\\@link FormControlName}, {\\@link FormGroupName},\n * and {\\@link FormArrayName} directives.\n *\n * **Set value**: You can set the form's initial value when instantiating the\n * {\\@link FormGroup}, or you can set it programmatically later using the {\\@link FormGroup}'s\n * {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}\n * methods.\n *\n * **Listen to value**: If you want to listen to changes in the value of the form, you can subscribe\n * to the {\\@link FormGroup}'s {\\@link AbstractControl#valueChanges valueChanges} event. You can also\n * listen to its {\\@link AbstractControl#statusChanges statusChanges} event to be notified when the\n * validation status is re-calculated.\n *\n * Furthermore, you can listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event will be emitted with the original form\n * submission event.\n *\n * ### Example\n *\n * In this example, we create form controls for first name and last name.\n *\n * {\\@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: {\\@link ReactiveFormsModule}\n *\n * \\@stable\n */\nclass FormGroupDirective extends ControlContainer {\n /**\n * @param {?} _validators\n * @param {?} _asyncValidators\n */\n constructor(_validators, _asyncValidators) {\n super();\n this._validators = _validators;\n this._asyncValidators = _asyncValidators;\n this.submitted = false;\n this.directives = [];\n this.form = /** @type {?} */ ((null));\n this.ngSubmit = new EventEmitter();\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n this._checkFormPresent();\n if (changes.hasOwnProperty('form')) {\n this._updateValidators();\n this._updateDomValue();\n this._updateRegistrations();\n }\n }\n /**\n * @return {?}\n */\n get formDirective() { return this; }\n /**\n * @return {?}\n */\n get control() { return this.form; }\n /**\n * @return {?}\n */\n get path() { return []; }\n /**\n * @param {?} dir\n * @return {?}\n */\n addControl(dir) {\n const /** @type {?} */ ctrl = this.form.get(dir.path);\n setUpControl(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n this.directives.push(dir);\n return ctrl;\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n getControl(dir) { return /** @type {?} */ (this.form.get(dir.path)); }\n /**\n * @param {?} dir\n * @return {?}\n */\n removeControl(dir) { removeDir(this.directives, dir); }\n /**\n * @param {?} dir\n * @return {?}\n */\n addFormGroup(dir) {\n const /** @type {?} */ ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n removeFormGroup(dir) { }\n /**\n * @param {?} dir\n * @return {?}\n */\n getFormGroup(dir) { return /** @type {?} */ (this.form.get(dir.path)); }\n /**\n * @param {?} dir\n * @return {?}\n */\n addFormArray(dir) {\n const /** @type {?} */ ctrl = this.form.get(dir.path);\n setUpFormContainer(ctrl, dir);\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n /**\n * @param {?} dir\n * @return {?}\n */\n removeFormArray(dir) { }\n /**\n * @param {?} dir\n * @return {?}\n */\n getFormArray(dir) { return /** @type {?} */ (this.form.get(dir.path)); }\n /**\n * @param {?} dir\n * @param {?} value\n * @return {?}\n */\n updateModel(dir, value) {\n const /** @type {?} */ ctrl = /** @type {?} */ (this.form.get(dir.path));\n ctrl.setValue(value);\n }\n /**\n * @param {?} $event\n * @return {?}\n */\n onSubmit($event) {\n (/** @type {?} */ (this)).submitted = true;\n syncPendingControls(this.form, this.directives);\n this.ngSubmit.emit($event);\n return false;\n }\n /**\n * @return {?}\n */\n onReset() { this.resetForm(); }\n /**\n * @param {?=} value\n * @return {?}\n */\n resetForm(value = undefined) {\n this.form.reset(value);\n (/** @type {?} */ (this)).submitted = false;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _updateDomValue() {\n this.directives.forEach(dir => {\n const /** @type {?} */ newCtrl = this.form.get(dir.path);\n if (dir.control !== newCtrl) {\n cleanUpControl(dir.control, dir);\n if (newCtrl)\n setUpControl(newCtrl, dir);\n (/** @type {?} */ (dir)).control = newCtrl;\n }\n });\n this.form._updateTreeValidity({ emitEvent: false });\n }\n /**\n * @return {?}\n */\n _updateRegistrations() {\n this.form._registerOnCollectionChange(() => this._updateDomValue());\n if (this._oldForm)\n this._oldForm._registerOnCollectionChange(() => { });\n this._oldForm = this.form;\n }\n /**\n * @return {?}\n */\n _updateValidators() {\n const /** @type {?} */ sync = composeValidators(this._validators);\n this.form.validator = Validators.compose([/** @type {?} */ ((this.form.validator)), /** @type {?} */ ((sync))]);\n const /** @type {?} */ async = composeAsyncValidators(this._asyncValidators);\n this.form.asyncValidator = Validators.composeAsync([/** @type {?} */ ((this.form.asyncValidator)), /** @type {?} */ ((async))]);\n }\n /**\n * @return {?}\n */\n _checkFormPresent() {\n if (!this.form) {\n ReactiveErrors.missingFormException();\n }\n }\n}\nFormGroupDirective.decorators = [\n { type: Directive, args: [{\n selector: '[formGroup]',\n providers: [formDirectiveProvider$1],\n host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n exportAs: 'ngForm'\n },] },\n];\n/** @nocollapse */\nFormGroupDirective.ctorParameters = () => [\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n];\nFormGroupDirective.propDecorators = {\n \"form\": [{ type: Input, args: ['formGroup',] },],\n \"ngSubmit\": [{ type: Output },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst formGroupNameProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormGroupName)\n};\n/**\n * \\@whatItDoes Syncs a nested {\\@link FormGroup} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive can only be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested {\\@link FormGroup} you want to link, and\n * will look for a {\\@link FormGroup} registered with that name in the parent\n * {\\@link FormGroup} instance you passed into {\\@link FormGroupDirective}.\n *\n * Nested form groups can come in handy when you want to validate a sub-group of a\n * form separately from the rest or when you'd like to group the values of certain\n * controls into their own nested object.\n *\n * **Access the group**: You can access the associated {\\@link FormGroup} using the\n * {\\@link AbstractControl#get get} method. Ex: `this.form.get('name')`.\n *\n * You can also access individual controls within the group using dot syntax.\n * Ex: `this.form.get('name.first')`\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormGroup}. See a full list of available properties in {\\@link AbstractControl}.\n *\n * **Set the value**: You can set an initial value for each child control when instantiating\n * the {\\@link FormGroup}, or you can set it programmatically later using\n * {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the group, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event. You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * {\\@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n * \\@stable\n */\nclass FormGroupName extends AbstractFormGroupDirective {\n /**\n * @param {?} parent\n * @param {?} validators\n * @param {?} asyncValidators\n */\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _checkParentType() {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.groupParentException();\n }\n }\n}\nFormGroupName.decorators = [\n { type: Directive, args: [{ selector: '[formGroupName]', providers: [formGroupNameProvider] },] },\n];\n/** @nocollapse */\nFormGroupName.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n];\nFormGroupName.propDecorators = {\n \"name\": [{ type: Input, args: ['formGroupName',] },],\n};\nconst formArrayNameProvider = {\n provide: ControlContainer,\n useExisting: forwardRef(() => FormArrayName)\n};\n/**\n * \\@whatItDoes Syncs a nested {\\@link FormArray} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive is designed to be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested {\\@link FormArray} you want to link, and\n * will look for a {\\@link FormArray} registered with that name in the parent\n * {\\@link FormGroup} instance you passed into {\\@link FormGroupDirective}.\n *\n * Nested form arrays can come in handy when you have a group of form controls but\n * you're not sure how many there will be. Form arrays allow you to create new\n * form controls dynamically.\n *\n * **Access the array**: You can access the associated {\\@link FormArray} using the\n * {\\@link AbstractControl#get get} method on the parent {\\@link FormGroup}.\n * Ex: `this.form.get('cities')`.\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormArray}. See a full list of available properties in {\\@link AbstractControl}.\n *\n * **Set the value**: You can set an initial value for each child control when instantiating\n * the {\\@link FormArray}, or you can set the value programmatically later using the\n * {\\@link FormArray}'s {\\@link AbstractControl#setValue setValue} or\n * {\\@link AbstractControl#patchValue patchValue} methods.\n *\n * **Listen to value**: If you want to listen to changes in the value of the array, you can\n * subscribe to the {\\@link FormArray}'s {\\@link AbstractControl#valueChanges valueChanges} event.\n * You can also listen to its {\\@link AbstractControl#statusChanges statusChanges} event to be\n * notified when the validation status is re-calculated.\n *\n * **Add new controls**: You can add new controls to the {\\@link FormArray} dynamically by calling\n * its {\\@link FormArray#push push} method.\n * Ex: `this.form.get('cities').push(new FormControl());`\n *\n * ### Example\n *\n * {\\@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n * \\@stable\n */\nclass FormArrayName extends ControlContainer {\n /**\n * @param {?} parent\n * @param {?} validators\n * @param {?} asyncValidators\n */\n constructor(parent, validators, asyncValidators) {\n super();\n this._parent = parent;\n this._validators = validators;\n this._asyncValidators = asyncValidators;\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this._checkParentType(); /** @type {?} */\n ((this.formDirective)).addFormArray(this);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this.formDirective) {\n this.formDirective.removeFormArray(this);\n }\n }\n /**\n * @return {?}\n */\n get control() { return /** @type {?} */ ((this.formDirective)).getFormArray(this); }\n /**\n * @return {?}\n */\n get formDirective() {\n return this._parent ? /** @type {?} */ (this._parent.formDirective) : null;\n }\n /**\n * @return {?}\n */\n get path() { return controlPath(this.name, this._parent); }\n /**\n * @return {?}\n */\n get validator() { return composeValidators(this._validators); }\n /**\n * @return {?}\n */\n get asyncValidator() {\n return composeAsyncValidators(this._asyncValidators);\n }\n /**\n * @return {?}\n */\n _checkParentType() {\n if (_hasInvalidParent(this._parent)) {\n ReactiveErrors.arrayParentException();\n }\n }\n}\nFormArrayName.decorators = [\n { type: Directive, args: [{ selector: '[formArrayName]', providers: [formArrayNameProvider] },] },\n];\n/** @nocollapse */\nFormArrayName.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n];\nFormArrayName.propDecorators = {\n \"name\": [{ type: Input, args: ['formArrayName',] },],\n};\n/**\n * @param {?} parent\n * @return {?}\n */\nfunction _hasInvalidParent(parent) {\n return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n !(parent instanceof FormArrayName);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst controlNameBinding = {\n provide: NgControl,\n useExisting: forwardRef(() => FormControlName)\n};\n/**\n * \\@whatItDoes Syncs a {\\@link FormControl} in an existing {\\@link FormGroup} to a form control\n * element by name.\n *\n * In other words, this directive ensures that any values written to the {\\@link FormControl}\n * instance programmatically will be written to the DOM element (model -> view). Conversely,\n * any values written to the DOM element through user input will be reflected in the\n * {\\@link FormControl} instance (view -> model).\n *\n * \\@howToUse\n *\n * This directive is designed to be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the {\\@link FormControl} instance you want to\n * link, and will look for a {\\@link FormControl} registered with that name in the\n * closest {\\@link FormGroup} or {\\@link FormArray} above it.\n *\n * **Access the control**: You can access the {\\@link FormControl} associated with\n * this directive by using the {\\@link AbstractControl#get get} method.\n * Ex: `this.form.get('first');`\n *\n * **Get value**: the `value` property is always synced and available on the {\\@link FormControl}.\n * See a full list of available properties in {\\@link AbstractControl}.\n *\n * **Set value**: You can set an initial value for the control when instantiating the\n * {\\@link FormControl}, or you can set it programmatically later using\n * {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the control, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event. You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * In this example, we create form controls for first name and last name.\n *\n * {\\@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: {\\@link RadioControlValueAccessor}\n * * Selects: {\\@link SelectControlValueAccessor}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: {\\@link ReactiveFormsModule}\n *\n * \\@stable\n */\nclass FormControlName extends NgControl {\n /**\n * @param {?} parent\n * @param {?} validators\n * @param {?} asyncValidators\n * @param {?} valueAccessors\n */\n constructor(parent, validators, asyncValidators, valueAccessors) {\n super();\n this._added = false;\n this.update = new EventEmitter();\n this._parent = parent;\n this._rawValidators = validators || [];\n this._rawAsyncValidators = asyncValidators || [];\n this.valueAccessor = selectValueAccessor(this, valueAccessors);\n }\n /**\n * @param {?} isDisabled\n * @return {?}\n */\n set isDisabled(isDisabled) { ReactiveErrors.disabledAttrWarning(); }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if (!this._added)\n this._setUpControl();\n if (isPropertyUpdated(changes, this.viewModel)) {\n this.viewModel = this.model;\n this.formDirective.updateModel(this, this.model);\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this.formDirective) {\n this.formDirective.removeControl(this);\n }\n }\n /**\n * @param {?} newValue\n * @return {?}\n */\n viewToModelUpdate(newValue) {\n this.viewModel = newValue;\n this.update.emit(newValue);\n }\n /**\n * @return {?}\n */\n get path() { return controlPath(this.name, /** @type {?} */ ((this._parent))); }\n /**\n * @return {?}\n */\n get formDirective() { return this._parent ? this._parent.formDirective : null; }\n /**\n * @return {?}\n */\n get validator() { return composeValidators(this._rawValidators); }\n /**\n * @return {?}\n */\n get asyncValidator() {\n return /** @type {?} */ ((composeAsyncValidators(this._rawAsyncValidators)));\n }\n /**\n * @return {?}\n */\n _checkParentType() {\n if (!(this._parent instanceof FormGroupName) &&\n this._parent instanceof AbstractFormGroupDirective) {\n ReactiveErrors.ngModelGroupException();\n }\n else if (!(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n !(this._parent instanceof FormArrayName)) {\n ReactiveErrors.controlParentException();\n }\n }\n /**\n * @return {?}\n */\n _setUpControl() {\n this._checkParentType();\n (/** @type {?} */ (this)).control = this.formDirective.addControl(this);\n if (this.control.disabled && /** @type {?} */ ((this.valueAccessor)).setDisabledState) {\n /** @type {?} */ ((/** @type {?} */ ((this.valueAccessor)).setDisabledState))(true);\n }\n this._added = true;\n }\n}\nFormControlName.decorators = [\n { type: Directive, args: [{ selector: '[formControlName]', providers: [controlNameBinding] },] },\n];\n/** @nocollapse */\nFormControlName.ctorParameters = () => [\n { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] },] },\n];\nFormControlName.propDecorators = {\n \"name\": [{ type: Input, args: ['formControlName',] },],\n \"model\": [{ type: Input, args: ['ngModel',] },],\n \"update\": [{ type: Output, args: ['ngModelChange',] },],\n \"isDisabled\": [{ type: Input, args: ['disabled',] },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * An interface that can be implemented by classes that can act as validators.\n *\n * ## Usage\n *\n * ```typescript\n * \\@Directive({\n * selector: '[custom-validator]',\n * providers: [{provide: NG_VALIDATORS, useExisting: CustomValidatorDirective, multi: true}]\n * })\n * class CustomValidatorDirective implements Validator {\n * validate(c: Control): {[key: string]: any} {\n * return {\"custom\": true};\n * }\n * }\n * ```\n *\n * \\@stable\n * @record\n */\n\n/**\n * \\@experimental\n * @record\n */\n\nconst REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RequiredValidator),\n multi: true\n};\nconst CHECKBOX_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CheckboxRequiredValidator),\n multi: true\n};\n/**\n * A Directive that adds the `required` validator to any controls marked with the\n * `required` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * \\@stable\n */\nclass RequiredValidator {\n /**\n * @return {?}\n */\n get required() { return this._required; }\n /**\n * @param {?} value\n * @return {?}\n */\n set required(value) {\n this._required = value != null && value !== false && `${value}` !== 'false';\n if (this._onChange)\n this._onChange();\n }\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) {\n return this.required ? Validators.required(c) : null;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnValidatorChange(fn) { this._onChange = fn; }\n}\nRequiredValidator.decorators = [\n { type: Directive, args: [{\n selector: ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n providers: [REQUIRED_VALIDATOR],\n host: { '[attr.required]': 'required ? \"\" : null' }\n },] },\n];\n/** @nocollapse */\nRequiredValidator.ctorParameters = () => [];\nRequiredValidator.propDecorators = {\n \"required\": [{ type: Input },],\n};\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * \\@experimental\n */\nclass CheckboxRequiredValidator extends RequiredValidator {\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) {\n return this.required ? Validators.requiredTrue(c) : null;\n }\n}\nCheckboxRequiredValidator.decorators = [\n { type: Directive, args: [{\n selector: 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n providers: [CHECKBOX_REQUIRED_VALIDATOR],\n host: { '[attr.required]': 'required ? \"\" : null' }\n },] },\n];\n/** @nocollapse */\nCheckboxRequiredValidator.ctorParameters = () => [];\n/**\n * Provider which adds {\\@link EmailValidator} to {\\@link NG_VALIDATORS}.\n */\nconst EMAIL_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EmailValidator),\n multi: true\n};\n/**\n * A Directive that adds the `email` validator to controls marked with the\n * `email` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * \\@experimental\n */\nclass EmailValidator {\n /**\n * @param {?} value\n * @return {?}\n */\n set email(value) {\n this._enabled = value === '' || value === true || value === 'true';\n if (this._onChange)\n this._onChange();\n }\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) {\n return this._enabled ? Validators.email(c) : null;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnValidatorChange(fn) { this._onChange = fn; }\n}\nEmailValidator.decorators = [\n { type: Directive, args: [{\n selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n providers: [EMAIL_VALIDATOR]\n },] },\n];\n/** @nocollapse */\nEmailValidator.ctorParameters = () => [];\nEmailValidator.propDecorators = {\n \"email\": [{ type: Input },],\n};\n/**\n * \\@stable\n * @record\n */\n\n/**\n * \\@stable\n * @record\n */\n\n/**\n * Provider which adds {\\@link MinLengthValidator} to {\\@link NG_VALIDATORS}.\n *\n * ## Example:\n *\n * {\\@example common/forms/ts/validators/validators.ts region='min'}\n */\nconst MIN_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MinLengthValidator),\n multi: true\n};\n/**\n * A directive which installs the {\\@link MinLengthValidator} for any `formControlName`,\n * `formControl`, or control with `ngModel` that also has a `minlength` attribute.\n *\n * \\@stable\n */\nclass MinLengthValidator {\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if ('minlength' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n }\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) {\n return this.minlength == null ? null : this._validator(c);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnValidatorChange(fn) { this._onChange = fn; }\n /**\n * @return {?}\n */\n _createValidator() {\n this._validator = Validators.minLength(parseInt(this.minlength, 10));\n }\n}\nMinLengthValidator.decorators = [\n { type: Directive, args: [{\n selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n providers: [MIN_LENGTH_VALIDATOR],\n host: { '[attr.minlength]': 'minlength ? minlength : null' }\n },] },\n];\n/** @nocollapse */\nMinLengthValidator.ctorParameters = () => [];\nMinLengthValidator.propDecorators = {\n \"minlength\": [{ type: Input },],\n};\n/**\n * Provider which adds {\\@link MaxLengthValidator} to {\\@link NG_VALIDATORS}.\n *\n * ## Example:\n *\n * {\\@example common/forms/ts/validators/validators.ts region='max'}\n */\nconst MAX_LENGTH_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaxLengthValidator),\n multi: true\n};\n/**\n * A directive which installs the {\\@link MaxLengthValidator} for any `formControlName,\n * `formControl`,\n * or control with `ngModel` that also has a `maxlength` attribute.\n *\n * \\@stable\n */\nclass MaxLengthValidator {\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if ('maxlength' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n }\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) {\n return this.maxlength != null ? this._validator(c) : null;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnValidatorChange(fn) { this._onChange = fn; }\n /**\n * @return {?}\n */\n _createValidator() {\n this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n }\n}\nMaxLengthValidator.decorators = [\n { type: Directive, args: [{\n selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n providers: [MAX_LENGTH_VALIDATOR],\n host: { '[attr.maxlength]': 'maxlength ? maxlength : null' }\n },] },\n];\n/** @nocollapse */\nMaxLengthValidator.ctorParameters = () => [];\nMaxLengthValidator.propDecorators = {\n \"maxlength\": [{ type: Input },],\n};\nconst PATTERN_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => PatternValidator),\n multi: true\n};\n/**\n * A Directive that adds the `pattern` validator to any controls marked with the\n * `pattern` attribute, via the {\\@link NG_VALIDATORS} binding. Uses attribute value\n * as the regex to validate Control value against. Follows pattern attribute\n * semantics; i.e. regex must match entire Control value.\n *\n * ### Example\n *\n * ```\n * <input [name]=\"fullName\" pattern=\"[a-zA-Z ]*\" ngModel>\n * ```\n * \\@stable\n */\nclass PatternValidator {\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if ('pattern' in changes) {\n this._createValidator();\n if (this._onChange)\n this._onChange();\n }\n }\n /**\n * @param {?} c\n * @return {?}\n */\n validate(c) { return this._validator(c); }\n /**\n * @param {?} fn\n * @return {?}\n */\n registerOnValidatorChange(fn) { this._onChange = fn; }\n /**\n * @return {?}\n */\n _createValidator() { this._validator = Validators.pattern(this.pattern); }\n}\nPatternValidator.decorators = [\n { type: Directive, args: [{\n selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n providers: [PATTERN_VALIDATOR],\n host: { '[attr.pattern]': 'pattern ? pattern : null' }\n },] },\n];\n/** @nocollapse */\nPatternValidator.ctorParameters = () => [];\nPatternValidator.propDecorators = {\n \"pattern\": [{ type: Input },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Creates an {\\@link AbstractControl} from a user-specified configuration.\n *\n * It is essentially syntactic sugar that shortens the `new FormGroup()`,\n * `new FormControl()`, and `new FormArray()` boilerplate that can build up in larger\n * forms.\n *\n * \\@howToUse\n *\n * To use, inject `FormBuilder` into your component class. You can then call its methods\n * directly.\n *\n * {\\@example forms/ts/formBuilder/form_builder_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: {\\@link ReactiveFormsModule}\n *\n * \\@stable\n */\nclass FormBuilder {\n /**\n * Construct a new {\\@link FormGroup} with the given map of configuration.\n * Valid keys for the `extra` parameter map are `validator` and `asyncValidator`.\n *\n * See the {\\@link FormGroup} constructor for more details.\n * @param {?} controlsConfig\n * @param {?=} extra\n * @return {?}\n */\n group(controlsConfig, extra = null) {\n const /** @type {?} */ controls = this._reduceControls(controlsConfig);\n const /** @type {?} */ validator = extra != null ? extra['validator'] : null;\n const /** @type {?} */ asyncValidator = extra != null ? extra['asyncValidator'] : null;\n return new FormGroup(controls, validator, asyncValidator);\n }\n /**\n * Construct a new {\\@link FormControl} with the given `formState`,`validator`, and\n * `asyncValidator`.\n *\n * `formState` can either be a standalone value for the form control or an object\n * that contains both a value and a disabled status.\n *\n * @param {?} formState\n * @param {?=} validator\n * @param {?=} asyncValidator\n * @return {?}\n */\n control(formState, validator, asyncValidator) {\n return new FormControl(formState, validator, asyncValidator);\n }\n /**\n * Construct a {\\@link FormArray} from the given `controlsConfig` array of\n * configuration, with the given optional `validator` and `asyncValidator`.\n * @param {?} controlsConfig\n * @param {?=} validator\n * @param {?=} asyncValidator\n * @return {?}\n */\n array(controlsConfig, validator, asyncValidator) {\n const /** @type {?} */ controls = controlsConfig.map(c => this._createControl(c));\n return new FormArray(controls, validator, asyncValidator);\n }\n /**\n * \\@internal\n * @param {?} controlsConfig\n * @return {?}\n */\n _reduceControls(controlsConfig) {\n const /** @type {?} */ controls = {};\n Object.keys(controlsConfig).forEach(controlName => {\n controls[controlName] = this._createControl(controlsConfig[controlName]);\n });\n return controls;\n }\n /**\n * \\@internal\n * @param {?} controlConfig\n * @return {?}\n */\n _createControl(controlConfig) {\n if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n controlConfig instanceof FormArray) {\n return controlConfig;\n }\n else if (Array.isArray(controlConfig)) {\n const /** @type {?} */ value = controlConfig[0];\n const /** @type {?} */ validator = controlConfig.length > 1 ? controlConfig[1] : null;\n const /** @type {?} */ asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null;\n return this.control(value, validator, asyncValidator);\n }\n else {\n return this.control(controlConfig);\n }\n }\n}\nFormBuilder.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nFormBuilder.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@stable\n */\nconst VERSION = new Version('5.2.10');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * \\@experimental\n */\nclass NgNoValidate {\n}\nNgNoValidate.decorators = [\n { type: Directive, args: [{\n selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n host: { 'novalidate': '' },\n },] },\n];\n/** @nocollapse */\nNgNoValidate.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst SHARED_FORM_DIRECTIVES = [\n NgNoValidate,\n NgSelectOption,\n NgSelectMultipleOption,\n DefaultValueAccessor,\n NumberValueAccessor,\n RangeValueAccessor,\n CheckboxControlValueAccessor,\n SelectControlValueAccessor,\n SelectMultipleControlValueAccessor,\n RadioControlValueAccessor,\n NgControlStatus,\n NgControlStatusGroup,\n RequiredValidator,\n MinLengthValidator,\n MaxLengthValidator,\n PatternValidator,\n CheckboxRequiredValidator,\n EmailValidator,\n];\nconst TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm];\nconst REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\nclass InternalFormsSharedModule {\n}\nInternalFormsSharedModule.decorators = [\n { type: NgModule, args: [{\n declarations: SHARED_FORM_DIRECTIVES,\n exports: SHARED_FORM_DIRECTIVES,\n },] },\n];\n/** @nocollapse */\nInternalFormsSharedModule.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * The ng module for forms.\n * \\@stable\n */\nclass FormsModule {\n}\nFormsModule.decorators = [\n { type: NgModule, args: [{\n declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n providers: [RadioControlRegistry],\n exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n },] },\n];\n/** @nocollapse */\nFormsModule.ctorParameters = () => [];\n/**\n * The ng module for reactive forms.\n * \\@stable\n */\nclass ReactiveFormsModule {\n}\nReactiveFormsModule.decorators = [\n { type: NgModule, args: [{\n declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n providers: [FormBuilder, RadioControlRegistry],\n exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n },] },\n];\n/** @nocollapse */\nReactiveFormsModule.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AbstractControlDirective, AbstractFormGroupDirective, CheckboxControlValueAccessor, ControlContainer, NG_VALUE_ACCESSOR, COMPOSITION_BUFFER_MODE, DefaultValueAccessor, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, RadioControlValueAccessor, FormControlDirective, FormControlName, FormGroupDirective, FormArrayName, FormGroupName, NgSelectOption, SelectControlValueAccessor, SelectMultipleControlValueAccessor, CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator, FormBuilder, AbstractControl, FormArray, FormControl, FormGroup, NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators, VERSION, FormsModule, ReactiveFormsModule, InternalFormsSharedModule as ɵba, REACTIVE_DRIVEN_DIRECTIVES as ɵz, SHARED_FORM_DIRECTIVES as ɵx, TEMPLATE_DRIVEN_DIRECTIVES as ɵy, CHECKBOX_VALUE_ACCESSOR as ɵa, DEFAULT_VALUE_ACCESSOR as ɵb, AbstractControlStatus as ɵc, ngControlStatusHost as ɵd, formDirectiveProvider as ɵe, formControlBinding as ɵf, modelGroupProvider as ɵg, NgNoValidate as ɵbf, NUMBER_VALUE_ACCESSOR as ɵbb, NumberValueAccessor as ɵbc, RADIO_VALUE_ACCESSOR as ɵh, RadioControlRegistry as ɵi, RANGE_VALUE_ACCESSOR as ɵbd, RangeValueAccessor as ɵbe, formControlBinding$1 as ɵj, controlNameBinding as ɵk, formDirectiveProvider$1 as ɵl, formArrayNameProvider as ɵn, formGroupNameProvider as ɵm, SELECT_VALUE_ACCESSOR as ɵo, NgSelectMultipleOption as ɵq, SELECT_MULTIPLE_VALUE_ACCESSOR as ɵp, CHECKBOX_REQUIRED_VALIDATOR as ɵs, EMAIL_VALIDATOR as ɵt, MAX_LENGTH_VALIDATOR as ɵv, MIN_LENGTH_VALIDATOR as ɵu, PATTERN_VALIDATOR as ɵw, REQUIRED_VALIDATOR as ɵr };\n//# sourceMappingURL=forms.js.map\n","/**\n * @license Angular v5.2.10\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { Attribute, ChangeDetectorRef, ComponentFactoryResolver, Directive, ElementRef, EventEmitter, Host, Inject, Injectable, InjectionToken, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, NgModule, NgModuleRef, Optional, Pipe, Renderer2, TemplateRef, Version, ViewContainerRef, WrappedValue, isDevMode, ɵisListLikeIterable, ɵisObservable, ɵisPromise, ɵstringify } from '@angular/core';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 platform\n * 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-webworker` provides\n * one suitable for use with web workers.\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 independent.\n *\n * \\@stable\n * @abstract\n */\nclass PlatformLocation {\n}\n/**\n * \\@whatItDoes indicates when a location is initialized\n * \\@experimental\n */\nconst LOCATION_INITIALIZED = new InjectionToken('Location Initialized');\n/**\n * A serializable version of the event from onPopState or onHashChange\n *\n * \\@experimental\n * @record\n */\n\n/**\n * \\@experimental\n * @record\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * `LocationStrategy` is responsible for representing and reading route state\n * from the browser's URL. Angular provides two strategies:\n * {\\@link HashLocationStrategy} and {\\@link PathLocationStrategy}.\n *\n * This is used under the hood of the {\\@link Location} service.\n *\n * Applications should use the {\\@link Router} or {\\@link Location} services to\n * interact with application route state.\n *\n * For instance, {\\@link HashLocationStrategy} produces URLs like\n * `http://example.com#/foo`, and {\\@link PathLocationStrategy} produces\n * `http://example.com/foo` as an equivalent URL.\n *\n * See these two classes for more.\n *\n * \\@stable\n * @abstract\n */\nclass LocationStrategy {\n}\n/**\n * The `APP_BASE_HREF` token represents the base href to be used with the\n * {\\@link PathLocationStrategy}.\n *\n * If you're using {\\@link PathLocationStrategy}, you must provide a provider to a string\n * representing the URL prefix that should be preserved when generating and recognizing\n * URLs.\n *\n * ### Example\n *\n * ```typescript\n * import {Component, 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 * \\@stable\n */\nconst APP_BASE_HREF = new InjectionToken('appBaseHref');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@experimental\n * @record\n */\n\n/**\n * \\@whatItDoes `Location` is a service that applications can use to interact with a browser's URL.\n * \\@description\n * Depending on which {\\@link LocationStrategy} is used, `Location` will either persist\n * to the URL's path or the URL's hash segment.\n *\n * Note: it's better to use {\\@link 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 * {\\@example common/location/ts/path_location_component.ts region='LocationComponent'}\n * \\@stable\n */\nclass Location {\n /**\n * @param {?} platformStrategy\n */\n constructor(platformStrategy) {\n /**\n * \\@internal\n */\n this._subject = new EventEmitter();\n this._platformStrategy = platformStrategy;\n const /** @type {?} */ browserBaseHref = this._platformStrategy.getBaseHref();\n this._baseHref = Location.stripTrailingSlash(_stripIndexHtml(browserBaseHref));\n this._platformStrategy.onPopState((ev) => {\n this._subject.emit({\n 'url': this.path(true),\n 'pop': true,\n 'type': ev.type,\n });\n });\n }\n /**\n * Returns the normalized URL path.\n * @param {?=} includeHash\n * @return {?}\n */\n path(includeHash = false) {\n return this.normalize(this._platformStrategy.path(includeHash));\n }\n /**\n * Normalizes the given path and compares to the current normalized path.\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\n isCurrentPathEqualTo(path, query = '') {\n return this.path() == this.normalize(path + Location.normalizeQueryParams(query));\n }\n /**\n * Given a string representing a URL, returns the normalized URL path without leading or\n * trailing slashes.\n * @param {?} url\n * @return {?}\n */\n normalize(url) {\n return Location.stripTrailingSlash(_stripBaseHref(this._baseHref, _stripIndexHtml(url)));\n }\n /**\n * Given a string representing a URL, returns the platform-specific external URL path.\n * If the given URL doesn't begin with a leading slash (`'/'`), this method adds one\n * before normalizing. This method will also add a hash if `HashLocationStrategy` is\n * used, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.\n * @param {?} url\n * @return {?}\n */\n prepareExternalUrl(url) {\n if (url && url[0] !== '/') {\n url = '/' + url;\n }\n return this._platformStrategy.prepareExternalUrl(url);\n }\n /**\n * Changes the browsers URL to the normalized version of the given URL, and pushes a\n * new item onto the platform's history.\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\n go(path, query = '') {\n this._platformStrategy.pushState(null, '', path, query);\n }\n /**\n * Changes the browsers URL to the normalized version of the given URL, and replaces\n * the top item on the platform's history stack.\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\n replaceState(path, query = '') {\n this._platformStrategy.replaceState(null, '', path, query);\n }\n /**\n * Navigates forward in the platform's history.\n * @return {?}\n */\n forward() { this._platformStrategy.forward(); }\n /**\n * Navigates back in the platform's history.\n * @return {?}\n */\n back() { this._platformStrategy.back(); }\n /**\n * Subscribe to the platform's `popState` events.\n * @param {?} onNext\n * @param {?=} onThrow\n * @param {?=} onReturn\n * @return {?}\n */\n subscribe(onNext, onThrow, onReturn) {\n return this._subject.subscribe({ next: onNext, error: onThrow, complete: onReturn });\n }\n /**\n * Given a string of url parameters, prepend with '?' if needed, otherwise return parameters as\n * is.\n * @param {?} params\n * @return {?}\n */\n static normalizeQueryParams(params) {\n return params && params[0] !== '?' ? '?' + params : params;\n }\n /**\n * Given 2 parts of a url, join them with a slash if needed.\n * @param {?} start\n * @param {?} end\n * @return {?}\n */\n static joinWithSlash(start, end) {\n if (start.length == 0) {\n return end;\n }\n if (end.length == 0) {\n return start;\n }\n let /** @type {?} */ 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 * If url has a trailing slash, remove it, otherwise return url as is. This\n * method looks for the first occurence of either #, ?, or the end of the\n * line as `/` characters after any of these should not be replaced.\n * @param {?} url\n * @return {?}\n */\n static stripTrailingSlash(url) {\n const /** @type {?} */ match = url.match(/#|\\?|$/);\n const /** @type {?} */ pathEndIdx = match && match.index || url.length;\n const /** @type {?} */ droppedSlashIdx = pathEndIdx - (url[pathEndIdx - 1] === '/' ? 1 : 0);\n return url.slice(0, droppedSlashIdx) + url.slice(pathEndIdx);\n }\n}\nLocation.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nLocation.ctorParameters = () => [\n { type: LocationStrategy, },\n];\n/**\n * @param {?} baseHref\n * @param {?} url\n * @return {?}\n */\nfunction _stripBaseHref(baseHref, url) {\n return baseHref && url.startsWith(baseHref) ? url.substring(baseHref.length) : url;\n}\n/**\n * @param {?} url\n * @return {?}\n */\nfunction _stripIndexHtml(url) {\n return url.replace(/\\/index.html$/, '');\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Use URL hash for storing application location data.\n * \\@description\n * `HashLocationStrategy` is a {\\@link LocationStrategy} used to configure the\n * {\\@link Location} service to 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 * ### Example\n *\n * {\\@example common/location/ts/hash_location_component.ts region='LocationComponent'}\n *\n * \\@stable\n */\nclass HashLocationStrategy extends LocationStrategy {\n /**\n * @param {?} _platformLocation\n * @param {?=} _baseHref\n */\n constructor(_platformLocation, _baseHref) {\n super();\n this._platformLocation = _platformLocation;\n this._baseHref = '';\n if (_baseHref != null) {\n this._baseHref = _baseHref;\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n onPopState(fn) {\n this._platformLocation.onPopState(fn);\n this._platformLocation.onHashChange(fn);\n }\n /**\n * @return {?}\n */\n getBaseHref() { return this._baseHref; }\n /**\n * @param {?=} includeHash\n * @return {?}\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 let /** @type {?} */ path = this._platformLocation.hash;\n if (path == null)\n path = '#';\n return path.length > 0 ? path.substring(1) : path;\n }\n /**\n * @param {?} internal\n * @return {?}\n */\n prepareExternalUrl(internal) {\n const /** @type {?} */ url = Location.joinWithSlash(this._baseHref, internal);\n return url.length > 0 ? ('#' + url) : url;\n }\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} path\n * @param {?} queryParams\n * @return {?}\n */\n pushState(state, title, path, queryParams) {\n let /** @type {?} */ url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams));\n if (url.length == 0) {\n url = this._platformLocation.pathname;\n }\n this._platformLocation.pushState(state, title, url);\n }\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} path\n * @param {?} queryParams\n * @return {?}\n */\n replaceState(state, title, path, queryParams) {\n let /** @type {?} */ url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams));\n if (url.length == 0) {\n url = this._platformLocation.pathname;\n }\n this._platformLocation.replaceState(state, title, url);\n }\n /**\n * @return {?}\n */\n forward() { this._platformLocation.forward(); }\n /**\n * @return {?}\n */\n back() { this._platformLocation.back(); }\n}\nHashLocationStrategy.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nHashLocationStrategy.ctorParameters = () => [\n { type: PlatformLocation, },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_BASE_HREF,] },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Use URL for storing application location data.\n * \\@description\n * `PathLocationStrategy` is a {\\@link LocationStrategy} used to configure the\n * {\\@link Location} service to 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 must provide a {\\@link APP_BASE_HREF}\n * or add a base element to the document. This URL prefix that will be preserved\n * when generating and recognizing URLs.\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`.\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 * ### Example\n *\n * {\\@example common/location/ts/path_location_component.ts region='LocationComponent'}\n *\n * \\@stable\n */\nclass PathLocationStrategy extends LocationStrategy {\n /**\n * @param {?} _platformLocation\n * @param {?=} href\n */\n constructor(_platformLocation, href) {\n super();\n this._platformLocation = _platformLocation;\n if (href == null) {\n href = this._platformLocation.getBaseHrefFromDOM();\n }\n if (href == null) {\n throw new Error(`No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.`);\n }\n this._baseHref = href;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n onPopState(fn) {\n this._platformLocation.onPopState(fn);\n this._platformLocation.onHashChange(fn);\n }\n /**\n * @return {?}\n */\n getBaseHref() { return this._baseHref; }\n /**\n * @param {?} internal\n * @return {?}\n */\n prepareExternalUrl(internal) {\n return Location.joinWithSlash(this._baseHref, internal);\n }\n /**\n * @param {?=} includeHash\n * @return {?}\n */\n path(includeHash = false) {\n const /** @type {?} */ pathname = this._platformLocation.pathname +\n Location.normalizeQueryParams(this._platformLocation.search);\n const /** @type {?} */ hash = this._platformLocation.hash;\n return hash && includeHash ? `${pathname}${hash}` : pathname;\n }\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @param {?} queryParams\n * @return {?}\n */\n pushState(state, title, url, queryParams) {\n const /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));\n this._platformLocation.pushState(state, title, externalUrl);\n }\n /**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @param {?} queryParams\n * @return {?}\n */\n replaceState(state, title, url, queryParams) {\n const /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));\n this._platformLocation.replaceState(state, title, externalUrl);\n }\n /**\n * @return {?}\n */\n forward() { this._platformLocation.forward(); }\n /**\n * @return {?}\n */\n back() { this._platformLocation.back(); }\n}\nPathLocationStrategy.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nPathLocationStrategy.ctorParameters = () => [\n { type: PlatformLocation, },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_BASE_HREF,] },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n// THIS CODE IS GENERATED - DO NOT MODIFY\n// See angular/tools/gulp-tasks/cldr/extract.js\n/**\n * \\@internal\n */\nconst CURRENCIES = {\n 'AOA': [, 'Kz'],\n 'ARS': [, '$'],\n 'AUD': ['A$', '$'],\n 'BAM': [, 'KM'],\n 'BBD': [, '$'],\n 'BDT': [, '৳'],\n 'BMD': [, '$'],\n 'BND': [, '$'],\n 'BOB': [, 'Bs'],\n 'BRL': ['R$'],\n 'BSD': [, '$'],\n 'BWP': [, 'P'],\n 'BYN': [, 'р.'],\n 'BZD': [, '$'],\n 'CAD': ['CA$', '$'],\n 'CLP': [, '$'],\n 'CNY': ['CN¥', '¥'],\n 'COP': [, '$'],\n 'CRC': [, '₡'],\n 'CUC': [, '$'],\n 'CUP': [, '$'],\n 'CZK': [, 'Kč'],\n 'DKK': [, 'kr'],\n 'DOP': [, '$'],\n 'EGP': [, 'E£'],\n 'ESP': [, '₧'],\n 'EUR': ['€'],\n 'FJD': [, '$'],\n 'FKP': [, '£'],\n 'GBP': ['£'],\n 'GEL': [, '₾'],\n 'GIP': [, '£'],\n 'GNF': [, 'FG'],\n 'GTQ': [, 'Q'],\n 'GYD': [, '$'],\n 'HKD': ['HK$', '$'],\n 'HNL': [, 'L'],\n 'HRK': [, 'kn'],\n 'HUF': [, 'Ft'],\n 'IDR': [, 'Rp'],\n 'ILS': ['₪'],\n 'INR': ['₹'],\n 'ISK': [, 'kr'],\n 'JMD': [, '$'],\n 'JPY': ['¥'],\n 'KHR': [, '៛'],\n 'KMF': [, 'CF'],\n 'KPW': [, '₩'],\n 'KRW': ['₩'],\n 'KYD': [, '$'],\n 'KZT': [, '₸'],\n 'LAK': [, '₭'],\n 'LBP': [, 'L£'],\n 'LKR': [, 'Rs'],\n 'LRD': [, '$'],\n 'LTL': [, 'Lt'],\n 'LVL': [, 'Ls'],\n 'MGA': [, 'Ar'],\n 'MMK': [, 'K'],\n 'MNT': [, '₮'],\n 'MUR': [, 'Rs'],\n 'MXN': ['MX$', '$'],\n 'MYR': [, 'RM'],\n 'NAD': [, '$'],\n 'NGN': [, '₦'],\n 'NIO': [, 'C$'],\n 'NOK': [, 'kr'],\n 'NPR': [, 'Rs'],\n 'NZD': ['NZ$', '$'],\n 'PHP': [, '₱'],\n 'PKR': [, 'Rs'],\n 'PLN': [, 'zł'],\n 'PYG': [, '₲'],\n 'RON': [, 'lei'],\n 'RUB': [, '₽'],\n 'RUR': [, 'р.'],\n 'RWF': [, 'RF'],\n 'SBD': [, '$'],\n 'SEK': [, 'kr'],\n 'SGD': [, '$'],\n 'SHP': [, '£'],\n 'SRD': [, '$'],\n 'SSP': [, '£'],\n 'STD': [, 'Db'],\n 'SYP': [, '£'],\n 'THB': [, '฿'],\n 'TOP': [, 'T$'],\n 'TRY': [, '₺'],\n 'TTD': [, '$'],\n 'TWD': ['NT$', '$'],\n 'UAH': [, '₴'],\n 'USD': ['$'],\n 'UYU': [, '$'],\n 'VEF': [, 'Bs'],\n 'VND': ['₫'],\n 'XAF': ['FCFA'],\n 'XCD': ['EC$', '$'],\n 'XOF': ['CFA'],\n 'XPF': ['CFPF'],\n 'ZAR': [, 'R'],\n 'ZMW': [, 'ZK'],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n// THIS CODE IS GENERATED - DO NOT MODIFY\n// See angular/tools/gulp-tasks/cldr/extract.js\n/**\n * @param {?} n\n * @return {?}\n */\nfunction plural(n) {\n let /** @type {?} */ i = Math.floor(Math.abs(n)), /** @type {?} */ v = n.toString().replace(/^[^.]*\\.?/, '').length;\n if (i === 1 && v === 0)\n return 1;\n return 5;\n}\nvar localeEn = [\n 'en',\n [\n ['a', 'p'],\n ['AM', 'PM'],\n ],\n [\n ['AM', 'PM'],\n ,\n ],\n [\n ['S', 'M', 'T', 'W', 'T', 'F', 'S'], ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\n ],\n ,\n [\n ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September',\n 'October', 'November', 'December'\n ]\n ],\n ,\n [['B', 'A'], ['BC', 'AD'], ['Before Christ', 'Anno Domini']], 0, [6, 0],\n ['M/d/yy', 'MMM d, y', 'MMMM d, y', 'EEEE, MMMM d, y'],\n ['h:mm a', 'h:mm:ss a', 'h:mm:ss a z', 'h:mm:ss a zzzz'],\n [\n '{1}, {0}',\n ,\n '{1} \\'at\\' {0}',\n ],\n ['.', ',', ';', '%', '+', '-', 'E', '×', '‰', '∞', 'NaN', ':'],\n ['#,##0.###', '#,##0%', '¤#,##0.00', '#E0'], '$', 'US Dollar', plural\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@experimental i18n support is experimental.\n */\nconst LOCALE_DATA = {};\n/**\n * Register global data to be used internally by Angular. See the\n * {\\@linkDocs guide/i18n#i18n-pipes \"I18n guide\"} to know how to import additional locale data.\n *\n * \\@experimental i18n support is experimental.\n * @param {?} data\n * @param {?=} localeId\n * @param {?=} extraData\n * @return {?}\n */\nfunction registerLocaleData(data, localeId, extraData) {\n if (typeof localeId !== 'string') {\n extraData = localeId;\n localeId = data[0 /* LocaleId */];\n }\n localeId = localeId.toLowerCase().replace(/_/g, '-');\n LOCALE_DATA[localeId] = data;\n if (extraData) {\n LOCALE_DATA[localeId][18 /* ExtraData */] = extraData;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/** @enum {number} */\nconst NumberFormatStyle = {\n Decimal: 0,\n Percent: 1,\n Currency: 2,\n Scientific: 3,\n};\nNumberFormatStyle[NumberFormatStyle.Decimal] = \"Decimal\";\nNumberFormatStyle[NumberFormatStyle.Percent] = \"Percent\";\nNumberFormatStyle[NumberFormatStyle.Currency] = \"Currency\";\nNumberFormatStyle[NumberFormatStyle.Scientific] = \"Scientific\";\n/** @enum {number} */\nconst Plural = {\n Zero: 0,\n One: 1,\n Two: 2,\n Few: 3,\n Many: 4,\n Other: 5,\n};\nPlural[Plural.Zero] = \"Zero\";\nPlural[Plural.One] = \"One\";\nPlural[Plural.Two] = \"Two\";\nPlural[Plural.Few] = \"Few\";\nPlural[Plural.Many] = \"Many\";\nPlural[Plural.Other] = \"Other\";\n/** @enum {number} */\nconst FormStyle = {\n Format: 0,\n Standalone: 1,\n};\nFormStyle[FormStyle.Format] = \"Format\";\nFormStyle[FormStyle.Standalone] = \"Standalone\";\n/** @enum {number} */\nconst TranslationWidth = {\n Narrow: 0,\n Abbreviated: 1,\n Wide: 2,\n Short: 3,\n};\nTranslationWidth[TranslationWidth.Narrow] = \"Narrow\";\nTranslationWidth[TranslationWidth.Abbreviated] = \"Abbreviated\";\nTranslationWidth[TranslationWidth.Wide] = \"Wide\";\nTranslationWidth[TranslationWidth.Short] = \"Short\";\n/** @enum {number} */\nconst FormatWidth = {\n Short: 0,\n Medium: 1,\n Long: 2,\n Full: 3,\n};\nFormatWidth[FormatWidth.Short] = \"Short\";\nFormatWidth[FormatWidth.Medium] = \"Medium\";\nFormatWidth[FormatWidth.Long] = \"Long\";\nFormatWidth[FormatWidth.Full] = \"Full\";\n/** @enum {number} */\nconst NumberSymbol = {\n Decimal: 0,\n Group: 1,\n List: 2,\n PercentSign: 3,\n PlusSign: 4,\n MinusSign: 5,\n Exponential: 6,\n SuperscriptingExponent: 7,\n PerMille: 8,\n Infinity: 9,\n NaN: 10,\n TimeSeparator: 11,\n CurrencyDecimal: 12,\n CurrencyGroup: 13,\n};\nNumberSymbol[NumberSymbol.Decimal] = \"Decimal\";\nNumberSymbol[NumberSymbol.Group] = \"Group\";\nNumberSymbol[NumberSymbol.List] = \"List\";\nNumberSymbol[NumberSymbol.PercentSign] = \"PercentSign\";\nNumberSymbol[NumberSymbol.PlusSign] = \"PlusSign\";\nNumberSymbol[NumberSymbol.MinusSign] = \"MinusSign\";\nNumberSymbol[NumberSymbol.Exponential] = \"Exponential\";\nNumberSymbol[NumberSymbol.SuperscriptingExponent] = \"SuperscriptingExponent\";\nNumberSymbol[NumberSymbol.PerMille] = \"PerMille\";\nNumberSymbol[NumberSymbol.Infinity] = \"Infinity\";\nNumberSymbol[NumberSymbol.NaN] = \"NaN\";\nNumberSymbol[NumberSymbol.TimeSeparator] = \"TimeSeparator\";\nNumberSymbol[NumberSymbol.CurrencyDecimal] = \"CurrencyDecimal\";\nNumberSymbol[NumberSymbol.CurrencyGroup] = \"CurrencyGroup\";\n/** @enum {number} */\nconst WeekDay = {\n Sunday: 0,\n Monday: 1,\n Tuesday: 2,\n Wednesday: 3,\n Thursday: 4,\n Friday: 5,\n Saturday: 6,\n};\nWeekDay[WeekDay.Sunday] = \"Sunday\";\nWeekDay[WeekDay.Monday] = \"Monday\";\nWeekDay[WeekDay.Tuesday] = \"Tuesday\";\nWeekDay[WeekDay.Wednesday] = \"Wednesday\";\nWeekDay[WeekDay.Thursday] = \"Thursday\";\nWeekDay[WeekDay.Friday] = \"Friday\";\nWeekDay[WeekDay.Saturday] = \"Saturday\";\n/**\n * The locale id for the chosen locale (e.g `en-GB`).\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @return {?}\n */\nfunction getLocaleId(locale) {\n return findLocaleData(locale)[0 /* LocaleId */];\n}\n/**\n * Periods of the day (e.g. `[AM, PM]` for en-US).\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @param {?} formStyle\n * @param {?} width\n * @return {?}\n */\nfunction getLocaleDayPeriods(locale, formStyle, width) {\n const /** @type {?} */ data = findLocaleData(locale);\n const /** @type {?} */ amPmData = /** @type {?} */ ([data[1 /* DayPeriodsFormat */], data[2 /* DayPeriodsStandalone */]]);\n const /** @type {?} */ amPm = getLastDefinedValue(amPmData, formStyle);\n return getLastDefinedValue(amPm, width);\n}\n/**\n * Days of the week for the Gregorian calendar (e.g. `[Sunday, Monday, ... Saturday]` for en-US).\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @param {?} formStyle\n * @param {?} width\n * @return {?}\n */\nfunction getLocaleDayNames(locale, formStyle, width) {\n const /** @type {?} */ data = findLocaleData(locale);\n const /** @type {?} */ daysData = /** @type {?} */ ([data[3 /* DaysFormat */], data[4 /* DaysStandalone */]]);\n const /** @type {?} */ days = getLastDefinedValue(daysData, formStyle);\n return getLastDefinedValue(days, width);\n}\n/**\n * Months of the year for the Gregorian calendar (e.g. `[January, February, ...]` for en-US).\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @param {?} formStyle\n * @param {?} width\n * @return {?}\n */\nfunction getLocaleMonthNames(locale, formStyle, width) {\n const /** @type {?} */ data = findLocaleData(locale);\n const /** @type {?} */ monthsData = /** @type {?} */ ([data[5 /* MonthsFormat */], data[6 /* MonthsStandalone */]]);\n const /** @type {?} */ months = getLastDefinedValue(monthsData, formStyle);\n return getLastDefinedValue(months, width);\n}\n/**\n * Eras for the Gregorian calendar (e.g. AD/BC).\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @param {?} width\n * @return {?}\n */\nfunction getLocaleEraNames(locale, width) {\n const /** @type {?} */ data = findLocaleData(locale);\n const /** @type {?} */ erasData = /** @type {?} */ (data[7 /* Eras */]);\n return getLastDefinedValue(erasData, width);\n}\n/**\n * First day of the week for this locale, based on english days (Sunday = 0, Monday = 1, ...).\n * For example in french the value would be 1 because the first day of the week is Monday.\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @return {?}\n */\nfunction getLocaleFirstDayOfWeek(locale) {\n const /** @type {?} */ data = findLocaleData(locale);\n return data[8 /* FirstDayOfWeek */];\n}\n/**\n * Range of days in the week that represent the week-end for this locale, based on english days\n * (Sunday = 0, Monday = 1, ...).\n * For example in english the value would be [6,0] for Saturday to Sunday.\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @return {?}\n */\nfunction getLocaleWeekEndRange(locale) {\n const /** @type {?} */ data = findLocaleData(locale);\n return data[9 /* WeekendRange */];\n}\n/**\n * Date format that depends on the locale.\n *\n * There are four basic date formats:\n * - `full` should contain long-weekday (EEEE), year (y), long-month (MMMM), day (d).\n *\n * For example, English uses `EEEE, MMMM d, y`, corresponding to a date like\n * \"Tuesday, September 14, 1999\".\n *\n * - `long` should contain year, long-month, day.\n *\n * For example, `MMMM d, y`, corresponding to a date like \"September 14, 1999\".\n *\n * - `medium` should contain year, abbreviated-month (MMM), day.\n *\n * For example, `MMM d, y`, corresponding to a date like \"Sep 14, 1999\".\n * For languages that do not use abbreviated months, use the numeric month (MM/M). For example,\n * `y/MM/dd`, corresponding to a date like \"1999/09/14\".\n *\n * - `short` should contain year, numeric-month (MM/M), and day.\n *\n * For example, `M/d/yy`, corresponding to a date like \"9/14/99\".\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @param {?} width\n * @return {?}\n */\nfunction getLocaleDateFormat(locale, width) {\n const /** @type {?} */ data = findLocaleData(locale);\n return getLastDefinedValue(data[10 /* DateFormat */], width);\n}\n/**\n * Time format that depends on the locale.\n *\n * The standard formats include four basic time formats:\n * - `full` should contain hour (h/H), minute (mm), second (ss), and zone (zzzz).\n * - `long` should contain hour, minute, second, and zone (z)\n * - `medium` should contain hour, minute, second.\n * - `short` should contain hour, minute.\n *\n * Note: The patterns depend on whether the main country using your language uses 12-hour time or\n * not:\n * - For 12-hour time, use a pattern like `hh:mm a` using h to mean a 12-hour clock cycle running\n * 1 through 12 (midnight plus 1 minute is 12:01), or using K to mean a 12-hour clock cycle\n * running 0 through 11 (midnight plus 1 minute is 0:01).\n * - For 24-hour time, use a pattern like `HH:mm` using H to mean a 24-hour clock cycle running 0\n * through 23 (midnight plus 1 minute is 0:01), or using k to mean a 24-hour clock cycle running\n * 1 through 24 (midnight plus 1 minute is 24:01).\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @param {?} width\n * @return {?}\n */\nfunction getLocaleTimeFormat(locale, width) {\n const /** @type {?} */ data = findLocaleData(locale);\n return getLastDefinedValue(data[11 /* TimeFormat */], width);\n}\n/**\n * Date-time format that depends on the locale.\n *\n * The date-time pattern shows how to combine separate patterns for date (represented by {1})\n * and time (represented by {0}) into a single pattern. It usually doesn't need to be changed.\n * What you want to pay attention to are:\n * - possibly removing a space for languages that don't use it, such as many East Asian languages\n * - possibly adding a comma, other punctuation, or a combining word\n *\n * For example:\n * - English uses `{1} 'at' {0}` or `{1}, {0}` (depending on date style), while Japanese uses\n * `{1}{0}`.\n * - An English formatted date-time using the combining pattern `{1}, {0}` could be\n * `Dec 10, 2010, 3:59:49 PM`. Notice the comma and space between the date portion and the time\n * portion.\n *\n * There are four formats (`full`, `long`, `medium`, `short`); the determination of which to use\n * is normally based on the date style. For example, if the date has a full month and weekday\n * name, the full combining pattern will be used to combine that with a time. If the date has\n * numeric month, the short version of the combining pattern will be used to combine that with a\n * time. English uses `{1} 'at' {0}` for full and long styles, and `{1}, {0}` for medium and short\n * styles.\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @param {?} width\n * @return {?}\n */\nfunction getLocaleDateTimeFormat(locale, width) {\n const /** @type {?} */ data = findLocaleData(locale);\n const /** @type {?} */ dateTimeFormatData = /** @type {?} */ (data[12 /* DateTimeFormat */]);\n return getLastDefinedValue(dateTimeFormatData, width);\n}\n/**\n * Number symbol that can be used to replace placeholders in number formats.\n * See {\\@link NumberSymbol} for more information.\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @param {?} symbol\n * @return {?}\n */\nfunction getLocaleNumberSymbol(locale, symbol) {\n const /** @type {?} */ data = findLocaleData(locale);\n const /** @type {?} */ res = data[13 /* NumberSymbols */][symbol];\n if (typeof res === 'undefined') {\n if (symbol === NumberSymbol.CurrencyDecimal) {\n return data[13 /* NumberSymbols */][NumberSymbol.Decimal];\n }\n else if (symbol === NumberSymbol.CurrencyGroup) {\n return data[13 /* NumberSymbols */][NumberSymbol.Group];\n }\n }\n return res;\n}\n/**\n * Number format that depends on the 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,67\". 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 * they 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 Number Symbols 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 * | ¤ | This will be replaced by a currency symbol, such as $ or USD. |\n * | % | This marks a percent format. The % symbol may change position, but must be retained. |\n * | E | This 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 * You can find more information\n * [on the CLDR website](http://cldr.unicode.org/translation/number-patterns)\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @param {?} type\n * @return {?}\n */\nfunction getLocaleNumberFormat(locale, type) {\n const /** @type {?} */ data = findLocaleData(locale);\n return data[14 /* NumberFormats */][type];\n}\n/**\n * The symbol used to represent the currency for the main country using this locale (e.g. $ for\n * the locale en-US).\n * The symbol will be `null` if the main country cannot be determined.\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @return {?}\n */\nfunction getLocaleCurrencySymbol(locale) {\n const /** @type {?} */ data = findLocaleData(locale);\n return data[15 /* CurrencySymbol */] || null;\n}\n/**\n * The name of the currency for the main country using this locale (e.g. USD for the locale\n * en-US).\n * The name will be `null` if the main country cannot be determined.\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @return {?}\n */\nfunction getLocaleCurrencyName(locale) {\n const /** @type {?} */ data = findLocaleData(locale);\n return data[16 /* CurrencyName */] || null;\n}\n/**\n * The locale plural function used by ICU expressions to determine the plural case to use.\n * See {\\@link NgPlural} for more information.\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @return {?}\n */\nfunction getLocalePluralCase(locale) {\n const /** @type {?} */ data = findLocaleData(locale);\n return data[17 /* PluralCase */];\n}\n/**\n * @param {?} data\n * @return {?}\n */\nfunction checkFullData(data) {\n if (!data[18 /* ExtraData */]) {\n throw new Error(`Missing extra locale data for the locale \"${data[0 /* LocaleId */]}\". Use \"registerLocaleData\" to load new data. See the \"I18n guide\" on angular.io to know more.`);\n }\n}\n/**\n * Rules used to determine which day period to use (See `dayPeriods` below).\n * The rules can either be an array or a single value. If it's an array, consider it as \"from\"\n * and \"to\". If it's a single value then it means that the period is only valid at this exact\n * value.\n * There is always the same number of rules as the number of day periods, which means that the\n * first rule is applied to the first day period and so on.\n * You should fallback to AM/PM when there are no rules available.\n *\n * Note: this is only available if you load the full locale data.\n * See the {\\@linkDocs guide/i18n#i18n-pipes \"I18n guide\"} to know how to import additional locale\n * data.\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @return {?}\n */\nfunction getLocaleExtraDayPeriodRules(locale) {\n const /** @type {?} */ data = findLocaleData(locale);\n checkFullData(data);\n const /** @type {?} */ rules = data[18 /* ExtraData */][2 /* 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 * Day Periods indicate roughly how the day is broken up in different languages (e.g. morning,\n * noon, afternoon, midnight, ...).\n * You should use the function {\\@link getLocaleExtraDayPeriodRules} to determine which period to\n * use.\n * You should fallback to AM/PM when there are no day periods available.\n *\n * Note: this is only available if you load the full locale data.\n * See the {\\@linkDocs guide/i18n#i18n-pipes \"I18n guide\"} to know how to import additional locale\n * data.\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @param {?} formStyle\n * @param {?} width\n * @return {?}\n */\nfunction getLocaleExtraDayPeriods(locale, formStyle, width) {\n const /** @type {?} */ data = findLocaleData(locale);\n checkFullData(data);\n const /** @type {?} */ dayPeriodsData = /** @type {?} */ ([\n data[18 /* ExtraData */][0 /* ExtraDayPeriodFormats */],\n data[18 /* ExtraData */][1 /* ExtraDayPeriodStandalone */]\n ]);\n const /** @type {?} */ dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];\n return getLastDefinedValue(dayPeriods, width) || [];\n}\n/**\n * Returns the first value that is defined in an array, going backwards.\n *\n * To avoid repeating the same data (e.g. when \"format\" and \"standalone\" are the same) we only\n * add the first one to the locale data arrays, the other ones are only defined when different.\n * We use this function to retrieve the first defined value.\n *\n * \\@experimental i18n support is experimental.\n * @template T\n * @param {?} data\n * @param {?} index\n * @return {?}\n */\nfunction getLastDefinedValue(data, index) {\n for (let /** @type {?} */ 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 * Extract the hours and minutes from a string like \"15:45\"\n * @param {?} time\n * @return {?}\n */\nfunction extractTime(time) {\n const [h, m] = time.split(':');\n return { hours: +h, minutes: +m };\n}\n/**\n * Finds the locale data for a locale id\n *\n * \\@experimental i18n support is experimental.\n * @param {?} locale\n * @return {?}\n */\nfunction findLocaleData(locale) {\n const /** @type {?} */ normalizedLocale = locale.toLowerCase().replace(/_/g, '-');\n let /** @type {?} */ match = LOCALE_DATA[normalizedLocale];\n if (match) {\n return match;\n }\n // let's try to find a parent locale\n const /** @type {?} */ parentLocale = normalizedLocale.split('-')[0];\n match = LOCALE_DATA[parentLocale];\n if (match) {\n return match;\n }\n if (parentLocale === 'en') {\n return localeEn;\n }\n throw new Error(`Missing locale data for the locale \"${locale}\".`);\n}\n/**\n * Return the currency symbol for a given currency code, or the code if no symbol available\n * (e.g.: format narrow = $, format wide = US$, code = USD)\n *\n * \\@experimental i18n support is experimental.\n * @param {?} code\n * @param {?} format\n * @return {?}\n */\nfunction getCurrencySymbol(code, format) {\n const /** @type {?} */ currency = CURRENCIES[code] || [];\n const /** @type {?} */ symbolNarrow = currency[1];\n if (format === 'narrow' && typeof symbolNarrow === 'string') {\n return symbolNarrow;\n }\n return currency[0] || code;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @deprecated from v5\n */\nconst DEPRECATED_PLURAL_FN = new InjectionToken('UseV4Plurals');\n/**\n * \\@experimental\n * @abstract\n */\nclass NgLocalization {\n}\n/**\n * Returns the plural category for a given value.\n * - \"=value\" when the case exists,\n * - the plural category otherwise\n * @param {?} value\n * @param {?} cases\n * @param {?} ngLocalization\n * @param {?=} locale\n * @return {?}\n */\nfunction getPluralCategory(value, cases, ngLocalization, locale) {\n let /** @type {?} */ 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 * \\@experimental\n */\nclass NgLocaleLocalization extends NgLocalization {\n /**\n * @param {?} locale\n * @param {?=} deprecatedPluralFn\n */\n constructor(locale, /** @deprecated from v5 */\n deprecatedPluralFn) {\n super();\n this.locale = locale;\n this.deprecatedPluralFn = deprecatedPluralFn;\n }\n /**\n * @param {?} value\n * @param {?=} locale\n * @return {?}\n */\n getPluralCategory(value, locale) {\n const /** @type {?} */ plural = this.deprecatedPluralFn ? this.deprecatedPluralFn(locale || this.locale, value) :\n 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}\nNgLocaleLocalization.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nNgLocaleLocalization.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID,] },] },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DEPRECATED_PLURAL_FN,] },] },\n];\n/**\n * Returns the plural case based on the locale\n *\n * @deprecated from v5 the plural case function is in locale data files common/locales/*.ts\n * \\@experimental\n * @param {?} locale\n * @param {?} nLike\n * @return {?}\n */\nfunction getPluralCase(locale, nLike) {\n // TODO(vicb): lazy compute\n if (typeof nLike === 'string') {\n nLike = parseInt(/** @type {?} */ (nLike), 10);\n }\n const /** @type {?} */ n = /** @type {?} */ (nLike);\n const /** @type {?} */ nDecimal = n.toString().replace(/^[^.]*\\.?/, '');\n const /** @type {?} */ i = Math.floor(Math.abs(n));\n const /** @type {?} */ v = nDecimal.length;\n const /** @type {?} */ f = parseInt(nDecimal, 10);\n const /** @type {?} */ t = parseInt(n.toString().replace(/^[^.]*\\.?|0+$/g, ''), 10) || 0;\n const /** @type {?} */ lang = locale.split('-')[0].toLowerCase();\n switch (lang) {\n case 'af':\n case 'asa':\n case 'az':\n case 'bem':\n case 'bez':\n case 'bg':\n case 'brx':\n case 'ce':\n case 'cgg':\n case 'chr':\n case 'ckb':\n case 'ee':\n case 'el':\n case 'eo':\n case 'es':\n case 'eu':\n case 'fo':\n case 'fur':\n case 'gsw':\n case 'ha':\n case 'haw':\n case 'hu':\n case 'jgo':\n case 'jmc':\n case 'ka':\n case 'kk':\n case 'kkj':\n case 'kl':\n case 'ks':\n case 'ksb':\n case 'ky':\n case 'lb':\n case 'lg':\n case 'mas':\n case 'mgo':\n case 'ml':\n case 'mn':\n case 'nb':\n case 'nd':\n case 'ne':\n case 'nn':\n case 'nnh':\n case 'nyn':\n case 'om':\n case 'or':\n case 'os':\n case 'ps':\n case 'rm':\n case 'rof':\n case 'rwk':\n case 'saq':\n case 'seh':\n case 'sn':\n case 'so':\n case 'sq':\n case 'ta':\n case 'te':\n case 'teo':\n case 'tk':\n case 'tr':\n case 'ug':\n case 'uz':\n case 'vo':\n case 'vun':\n case 'wae':\n case 'xog':\n if (n === 1)\n return Plural.One;\n return Plural.Other;\n case 'ak':\n case 'ln':\n case 'mg':\n case 'pa':\n case 'ti':\n if (n === Math.floor(n) && n >= 0 && n <= 1)\n return Plural.One;\n return Plural.Other;\n case 'am':\n case 'as':\n case 'bn':\n case 'fa':\n case 'gu':\n case 'hi':\n case 'kn':\n case 'mr':\n case 'zu':\n if (i === 0 || n === 1)\n return Plural.One;\n return Plural.Other;\n case 'ar':\n if (n === 0)\n return Plural.Zero;\n if (n === 1)\n return Plural.One;\n if (n === 2)\n return Plural.Two;\n if (n % 100 === Math.floor(n % 100) && n % 100 >= 3 && n % 100 <= 10)\n return Plural.Few;\n if (n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 99)\n return Plural.Many;\n return Plural.Other;\n case 'ast':\n case 'ca':\n case 'de':\n case 'en':\n case 'et':\n case 'fi':\n case 'fy':\n case 'gl':\n case 'it':\n case 'nl':\n case 'sv':\n case 'sw':\n case 'ur':\n case 'yi':\n if (i === 1 && v === 0)\n return Plural.One;\n return Plural.Other;\n case 'be':\n if (n % 10 === 1 && !(n % 100 === 11))\n return Plural.One;\n if (n % 10 === Math.floor(n % 10) && n % 10 >= 2 && n % 10 <= 4 &&\n !(n % 100 >= 12 && n % 100 <= 14))\n return Plural.Few;\n if (n % 10 === 0 || n % 10 === Math.floor(n % 10) && n % 10 >= 5 && n % 10 <= 9 ||\n n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 14)\n return Plural.Many;\n return Plural.Other;\n case 'br':\n if (n % 10 === 1 && !(n % 100 === 11 || n % 100 === 71 || n % 100 === 91))\n return Plural.One;\n if (n % 10 === 2 && !(n % 100 === 12 || n % 100 === 72 || n % 100 === 92))\n return Plural.Two;\n if (n % 10 === Math.floor(n % 10) && (n % 10 >= 3 && n % 10 <= 4 || n % 10 === 9) &&\n !(n % 100 >= 10 && n % 100 <= 19 || n % 100 >= 70 && n % 100 <= 79 ||\n n % 100 >= 90 && n % 100 <= 99))\n return Plural.Few;\n if (!(n === 0) && n % 1e6 === 0)\n return Plural.Many;\n return Plural.Other;\n case 'bs':\n case 'hr':\n case 'sr':\n if (v === 0 && i % 10 === 1 && !(i % 100 === 11) || f % 10 === 1 && !(f % 100 === 11))\n return Plural.One;\n if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n !(i % 100 >= 12 && i % 100 <= 14) ||\n f % 10 === Math.floor(f % 10) && f % 10 >= 2 && f % 10 <= 4 &&\n !(f % 100 >= 12 && f % 100 <= 14))\n return Plural.Few;\n return Plural.Other;\n case 'cs':\n case 'sk':\n if (i === 1 && v === 0)\n return Plural.One;\n if (i === Math.floor(i) && i >= 2 && i <= 4 && v === 0)\n return Plural.Few;\n if (!(v === 0))\n return Plural.Many;\n return Plural.Other;\n case 'cy':\n if (n === 0)\n return Plural.Zero;\n if (n === 1)\n return Plural.One;\n if (n === 2)\n return Plural.Two;\n if (n === 3)\n return Plural.Few;\n if (n === 6)\n return Plural.Many;\n return Plural.Other;\n case 'da':\n if (n === 1 || !(t === 0) && (i === 0 || i === 1))\n return Plural.One;\n return Plural.Other;\n case 'dsb':\n case 'hsb':\n if (v === 0 && i % 100 === 1 || f % 100 === 1)\n return Plural.One;\n if (v === 0 && i % 100 === 2 || f % 100 === 2)\n return Plural.Two;\n if (v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 3 && i % 100 <= 4 ||\n f % 100 === Math.floor(f % 100) && f % 100 >= 3 && f % 100 <= 4)\n return Plural.Few;\n return Plural.Other;\n case 'ff':\n case 'fr':\n case 'hy':\n case 'kab':\n if (i === 0 || i === 1)\n return Plural.One;\n return Plural.Other;\n case 'fil':\n if (v === 0 && (i === 1 || i === 2 || i === 3) ||\n v === 0 && !(i % 10 === 4 || i % 10 === 6 || i % 10 === 9) ||\n !(v === 0) && !(f % 10 === 4 || f % 10 === 6 || f % 10 === 9))\n return Plural.One;\n return Plural.Other;\n case 'ga':\n if (n === 1)\n return Plural.One;\n if (n === 2)\n return Plural.Two;\n if (n === Math.floor(n) && n >= 3 && n <= 6)\n return Plural.Few;\n if (n === Math.floor(n) && n >= 7 && n <= 10)\n return Plural.Many;\n return Plural.Other;\n case 'gd':\n if (n === 1 || n === 11)\n return Plural.One;\n if (n === 2 || n === 12)\n return Plural.Two;\n if (n === Math.floor(n) && (n >= 3 && n <= 10 || n >= 13 && n <= 19))\n return Plural.Few;\n return Plural.Other;\n case 'gv':\n if (v === 0 && i % 10 === 1)\n return Plural.One;\n if (v === 0 && i % 10 === 2)\n return Plural.Two;\n if (v === 0 &&\n (i % 100 === 0 || i % 100 === 20 || i % 100 === 40 || i % 100 === 60 || i % 100 === 80))\n return Plural.Few;\n if (!(v === 0))\n return Plural.Many;\n return Plural.Other;\n case 'he':\n if (i === 1 && v === 0)\n return Plural.One;\n if (i === 2 && v === 0)\n return Plural.Two;\n if (v === 0 && !(n >= 0 && n <= 10) && n % 10 === 0)\n return Plural.Many;\n return Plural.Other;\n case 'is':\n if (t === 0 && i % 10 === 1 && !(i % 100 === 11) || !(t === 0))\n return Plural.One;\n return Plural.Other;\n case 'ksh':\n if (n === 0)\n return Plural.Zero;\n if (n === 1)\n return Plural.One;\n return Plural.Other;\n case 'kw':\n case 'naq':\n case 'se':\n case 'smn':\n if (n === 1)\n return Plural.One;\n if (n === 2)\n return Plural.Two;\n return Plural.Other;\n case 'lag':\n if (n === 0)\n return Plural.Zero;\n if ((i === 0 || i === 1) && !(n === 0))\n return Plural.One;\n return Plural.Other;\n case 'lt':\n if (n % 10 === 1 && !(n % 100 >= 11 && n % 100 <= 19))\n return Plural.One;\n if (n % 10 === Math.floor(n % 10) && n % 10 >= 2 && n % 10 <= 9 &&\n !(n % 100 >= 11 && n % 100 <= 19))\n return Plural.Few;\n if (!(f === 0))\n return Plural.Many;\n return Plural.Other;\n case 'lv':\n case 'prg':\n if (n % 10 === 0 || n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 19 ||\n v === 2 && f % 100 === Math.floor(f % 100) && f % 100 >= 11 && f % 100 <= 19)\n return Plural.Zero;\n if (n % 10 === 1 && !(n % 100 === 11) || v === 2 && f % 10 === 1 && !(f % 100 === 11) ||\n !(v === 2) && f % 10 === 1)\n return Plural.One;\n return Plural.Other;\n case 'mk':\n if (v === 0 && i % 10 === 1 || f % 10 === 1)\n return Plural.One;\n return Plural.Other;\n case 'mt':\n if (n === 1)\n return Plural.One;\n if (n === 0 || n % 100 === Math.floor(n % 100) && n % 100 >= 2 && n % 100 <= 10)\n return Plural.Few;\n if (n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 19)\n return Plural.Many;\n return Plural.Other;\n case 'pl':\n if (i === 1 && v === 0)\n return Plural.One;\n if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n !(i % 100 >= 12 && i % 100 <= 14))\n return Plural.Few;\n if (v === 0 && !(i === 1) && i % 10 === Math.floor(i % 10) && i % 10 >= 0 && i % 10 <= 1 ||\n v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 5 && i % 10 <= 9 ||\n v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 12 && i % 100 <= 14)\n return Plural.Many;\n return Plural.Other;\n case 'pt':\n if (n === Math.floor(n) && n >= 0 && n <= 2 && !(n === 2))\n return Plural.One;\n return Plural.Other;\n case 'ro':\n if (i === 1 && v === 0)\n return Plural.One;\n if (!(v === 0) || n === 0 ||\n !(n === 1) && n % 100 === Math.floor(n % 100) && n % 100 >= 1 && n % 100 <= 19)\n return Plural.Few;\n return Plural.Other;\n case 'ru':\n case 'uk':\n if (v === 0 && i % 10 === 1 && !(i % 100 === 11))\n return Plural.One;\n if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n !(i % 100 >= 12 && i % 100 <= 14))\n return Plural.Few;\n if (v === 0 && i % 10 === 0 ||\n v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 5 && i % 10 <= 9 ||\n v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 11 && i % 100 <= 14)\n return Plural.Many;\n return Plural.Other;\n case 'shi':\n if (i === 0 || n === 1)\n return Plural.One;\n if (n === Math.floor(n) && n >= 2 && n <= 10)\n return Plural.Few;\n return Plural.Other;\n case 'si':\n if (n === 0 || n === 1 || i === 0 && f === 1)\n return Plural.One;\n return Plural.Other;\n case 'sl':\n if (v === 0 && i % 100 === 1)\n return Plural.One;\n if (v === 0 && i % 100 === 2)\n return Plural.Two;\n if (v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 3 && i % 100 <= 4 || !(v === 0))\n return Plural.Few;\n return Plural.Other;\n case 'tzm':\n if (n === Math.floor(n) && n >= 0 && n <= 1 || n === Math.floor(n) && n >= 11 && n <= 99)\n return Plural.One;\n return Plural.Other;\n // When there is no specification, the default is always \"other\"\n // Spec: http://cldr.unicode.org/index/cldr-spec/plural-rules\n // > other (required—general plural form — also used if the language only has a single form)\n default:\n return Plural.Other;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} cookieStr\n * @param {?} name\n * @return {?}\n */\nfunction parseCookieValue(cookieStr, name) {\n name = encodeURIComponent(name);\n for (const /** @type {?} */ cookie of cookieStr.split(';')) {\n const /** @type {?} */ 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}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Adds and removes CSS classes on an HTML element.\n *\n * \\@howToUse\n * ```\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 * 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 * \\@stable\n */\nclass NgClass {\n /**\n * @param {?} _iterableDiffers\n * @param {?} _keyValueDiffers\n * @param {?} _ngEl\n * @param {?} _renderer\n */\n constructor(_iterableDiffers, _keyValueDiffers, _ngEl, _renderer) {\n this._iterableDiffers = _iterableDiffers;\n this._keyValueDiffers = _keyValueDiffers;\n this._ngEl = _ngEl;\n this._renderer = _renderer;\n this._initialClasses = [];\n }\n /**\n * @param {?} v\n * @return {?}\n */\n set klass(v) {\n this._removeClasses(this._initialClasses);\n this._initialClasses = typeof v === 'string' ? v.split(/\\s+/) : [];\n this._applyClasses(this._initialClasses);\n this._applyClasses(this._rawClass);\n }\n /**\n * @param {?} v\n * @return {?}\n */\n set ngClass(v) {\n this._removeClasses(this._rawClass);\n this._applyClasses(this._initialClasses);\n this._iterableDiffer = null;\n this._keyValueDiffer = null;\n this._rawClass = typeof v === 'string' ? v.split(/\\s+/) : v;\n if (this._rawClass) {\n if (ɵisListLikeIterable(this._rawClass)) {\n this._iterableDiffer = this._iterableDiffers.find(this._rawClass).create();\n }\n else {\n this._keyValueDiffer = this._keyValueDiffers.find(this._rawClass).create();\n }\n }\n }\n /**\n * @return {?}\n */\n ngDoCheck() {\n if (this._iterableDiffer) {\n const /** @type {?} */ iterableChanges = this._iterableDiffer.diff(/** @type {?} */ (this._rawClass));\n if (iterableChanges) {\n this._applyIterableChanges(iterableChanges);\n }\n }\n else if (this._keyValueDiffer) {\n const /** @type {?} */ keyValueChanges = this._keyValueDiffer.diff(/** @type {?} */ (this._rawClass));\n if (keyValueChanges) {\n this._applyKeyValueChanges(keyValueChanges);\n }\n }\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n _applyKeyValueChanges(changes) {\n changes.forEachAddedItem((record) => this._toggleClass(record.key, record.currentValue));\n changes.forEachChangedItem((record) => this._toggleClass(record.key, record.currentValue));\n changes.forEachRemovedItem((record) => {\n if (record.previousValue) {\n this._toggleClass(record.key, false);\n }\n });\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n _applyIterableChanges(changes) {\n changes.forEachAddedItem((record) => {\n if (typeof record.item === 'string') {\n this._toggleClass(record.item, true);\n }\n else {\n throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${ɵstringify(record.item)}`);\n }\n });\n changes.forEachRemovedItem((record) => this._toggleClass(record.item, false));\n }\n /**\n * Applies a collection of CSS classes to the DOM element.\n *\n * For argument of type Set and Array CSS class names contained in those collections are always\n * added.\n * For argument of type Map CSS class name in the map's key is toggled based on the value (added\n * for truthy and removed for falsy).\n * @param {?} rawClassVal\n * @return {?}\n */\n _applyClasses(rawClassVal) {\n if (rawClassVal) {\n if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {\n (/** @type {?} */ (rawClassVal)).forEach((klass) => this._toggleClass(klass, true));\n }\n else {\n Object.keys(rawClassVal).forEach(klass => this._toggleClass(klass, !!rawClassVal[klass]));\n }\n }\n }\n /**\n * Removes a collection of CSS classes from the DOM element. This is mostly useful for cleanup\n * purposes.\n * @param {?} rawClassVal\n * @return {?}\n */\n _removeClasses(rawClassVal) {\n if (rawClassVal) {\n if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {\n (/** @type {?} */ (rawClassVal)).forEach((klass) => this._toggleClass(klass, false));\n }\n else {\n Object.keys(rawClassVal).forEach(klass => this._toggleClass(klass, false));\n }\n }\n }\n /**\n * @param {?} klass\n * @param {?} enabled\n * @return {?}\n */\n _toggleClass(klass, enabled) {\n klass = klass.trim();\n if (klass) {\n klass.split(/\\s+/g).forEach(klass => {\n if (enabled) {\n this._renderer.addClass(this._ngEl.nativeElement, klass);\n }\n else {\n this._renderer.removeClass(this._ngEl.nativeElement, klass);\n }\n });\n }\n }\n}\nNgClass.decorators = [\n { type: Directive, args: [{ selector: '[ngClass]' },] },\n];\n/** @nocollapse */\nNgClass.ctorParameters = () => [\n { type: IterableDiffers, },\n { type: KeyValueDiffers, },\n { type: ElementRef, },\n { type: Renderer2, },\n];\nNgClass.propDecorators = {\n \"klass\": [{ type: Input, args: ['class',] },],\n \"ngClass\": [{ type: Input },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Instantiates a single {\\@link Component} type and inserts its Host View into 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 get destroyed.\n *\n * ### Fine tune control\n *\n * You can control the component creation process by using the following optional attributes:\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 exists.\n *\n * * `ngComponentOutletNgModuleFactory`: Optional module factory to allow dynamically loading other\n * module, then load a component from that module.\n *\n * ### Syntax\n *\n * Simple\n * ```\n * <ng-container *ngComponentOutlet=\"componentTypeExpression\"></ng-container>\n * ```\n *\n * Customized injector/content\n * ```\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n * injector: injectorExpression;\n * content: contentNodesExpression;\">\n * </ng-container>\n * ```\n *\n * Customized ngModuleFactory\n * ```\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n * ngModuleFactory: moduleFactory;\">\n * </ng-container>\n * ```\n * ## 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 * A more complete example with ngModuleFactory:\n *\n * {\\@example common/ngComponentOutlet/ts/module.ts region='NgModuleFactoryExample'}\n *\n * \\@experimental\n */\nclass NgComponentOutlet {\n /**\n * @param {?} _viewContainerRef\n */\n constructor(_viewContainerRef) {\n this._viewContainerRef = _viewContainerRef;\n this._componentRef = null;\n this._moduleRef = null;\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n this._viewContainerRef.clear();\n this._componentRef = null;\n if (this.ngComponentOutlet) {\n const /** @type {?} */ elInjector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;\n if (changes['ngComponentOutletNgModuleFactory']) {\n if (this._moduleRef)\n this._moduleRef.destroy();\n if (this.ngComponentOutletNgModuleFactory) {\n const /** @type {?} */ parentModule = elInjector.get(NgModuleRef);\n this._moduleRef = this.ngComponentOutletNgModuleFactory.create(parentModule.injector);\n }\n else {\n this._moduleRef = null;\n }\n }\n const /** @type {?} */ componentFactoryResolver = this._moduleRef ? this._moduleRef.componentFactoryResolver :\n elInjector.get(ComponentFactoryResolver);\n const /** @type {?} */ componentFactory = componentFactoryResolver.resolveComponentFactory(this.ngComponentOutlet);\n this._componentRef = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, elInjector, this.ngComponentOutletContent);\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this._moduleRef)\n this._moduleRef.destroy();\n }\n}\nNgComponentOutlet.decorators = [\n { type: Directive, args: [{ selector: '[ngComponentOutlet]' },] },\n];\n/** @nocollapse */\nNgComponentOutlet.ctorParameters = () => [\n { type: ViewContainerRef, },\n];\nNgComponentOutlet.propDecorators = {\n \"ngComponentOutlet\": [{ type: Input },],\n \"ngComponentOutletInjector\": [{ type: Input },],\n \"ngComponentOutletContent\": [{ type: Input },],\n \"ngComponentOutletNgModuleFactory\": [{ type: Input },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@stable\n * @template T\n */\nclass NgForOfContext {\n /**\n * @param {?} $implicit\n * @param {?} ngForOf\n * @param {?} index\n * @param {?} count\n */\n constructor($implicit, ngForOf, index, count) {\n this.$implicit = $implicit;\n this.ngForOf = ngForOf;\n this.index = index;\n this.count = count;\n }\n /**\n * @return {?}\n */\n get first() { return this.index === 0; }\n /**\n * @return {?}\n */\n get last() { return this.index === this.count - 1; }\n /**\n * @return {?}\n */\n get even() { return this.index % 2 === 0; }\n /**\n * @return {?}\n */\n get odd() { return !this.even; }\n}\n/**\n * The `NgForOf` directive instantiates a template once per item from an iterable. The context\n * for each instantiated template inherits from the outer context with the given loop variable\n * set to the current item from the iterable.\n *\n * ### Local Variables\n *\n * `NgForOf` provides several exported values that 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 * - `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 * ```\n * <li *ngFor=\"let user of userObservable | async as users; index as i; first as isFirst\">\n * {{i}}/{{users.length}}. {{user}} <span *ngIf=\"isFirst\">default</span>\n * </li>\n * ```\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 * * Otherwise, the DOM element for that item will remain the same.\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 (such as `<input>` elements which accept user input) that are present. 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 *\n * It is possible for the identities of elements in the iterator to change while the data does not.\n * This can happen, for example, if the iterator produced from an RPC to the server, and that\n * RPC is re-run. Even if the data hasn't changed, the second response will produce objects with\n * different identities, and Angular will tear down the entire DOM and rebuild it (as if all old\n * elements were deleted and all new elements inserted). This is an expensive operation and should\n * be avoided if possible.\n *\n * To customize the default tracking algorithm, `NgForOf` supports `trackBy` option.\n * `trackBy` takes a function which has two arguments: `index` and `item`.\n * If `trackBy` is given, Angular tracks changes by the return value of the function.\n *\n * ### Syntax\n *\n * - `<li *ngFor=\"let item of items; index as i; trackBy: trackByFn\">...</li>`\n *\n * With `<ng-template>` element:\n *\n * ```\n * <ng-template ngFor let-item [ngForOf]=\"items\" let-i=\"index\" [ngForTrackBy]=\"trackByFn\">\n * <li>...</li>\n * </ng-template>\n * ```\n *\n * ### Example\n *\n * See a [live demo](http://plnkr.co/edit/KVuXxDp0qinGDyo307QW?p=preview) for a more detailed\n * example.\n *\n * \\@stable\n * @template T\n */\nclass NgForOf {\n /**\n * @param {?} _viewContainer\n * @param {?} _template\n * @param {?} _differs\n */\n constructor(_viewContainer, _template, _differs) {\n this._viewContainer = _viewContainer;\n this._template = _template;\n this._differs = _differs;\n this._differ = null;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n set ngForTrackBy(fn) {\n if (isDevMode() && fn != null && typeof fn !== 'function') {\n // TODO(vicb): use a log service once there is a public one available\n if (/** @type {?} */ (console) && /** @type {?} */ (console.warn)) {\n console.warn(`trackBy must be a function, but received ${JSON.stringify(fn)}. ` +\n `See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information.`);\n }\n }\n this._trackByFn = fn;\n }\n /**\n * @return {?}\n */\n get ngForTrackBy() { return this._trackByFn; }\n /**\n * @param {?} value\n * @return {?}\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 * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if ('ngForOf' in changes) {\n // React on ngForOf changes only once all inputs have been initialized\n const /** @type {?} */ value = changes['ngForOf'].currentValue;\n if (!this._differ && value) {\n try {\n this._differ = this._differs.find(value).create(this.ngForTrackBy);\n }\n catch (/** @type {?} */ e) {\n throw new Error(`Cannot find a differ supporting object '${value}' of type '${getTypeNameForDebugging(value)}'. NgFor only supports binding to Iterables such as Arrays.`);\n }\n }\n }\n }\n /**\n * @return {?}\n */\n ngDoCheck() {\n if (this._differ) {\n const /** @type {?} */ changes = this._differ.diff(this.ngForOf);\n if (changes)\n this._applyChanges(changes);\n }\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n _applyChanges(changes) {\n const /** @type {?} */ insertTuples = [];\n changes.forEachOperation((item, adjustedPreviousIndex, currentIndex) => {\n if (item.previousIndex == null) {\n const /** @type {?} */ view = this._viewContainer.createEmbeddedView(this._template, new NgForOfContext(/** @type {?} */ ((null)), this.ngForOf, -1, -1), currentIndex);\n const /** @type {?} */ tuple = new RecordViewTuple(item, view);\n insertTuples.push(tuple);\n }\n else if (currentIndex == null) {\n this._viewContainer.remove(adjustedPreviousIndex);\n }\n else {\n const /** @type {?} */ view = /** @type {?} */ ((this._viewContainer.get(adjustedPreviousIndex)));\n this._viewContainer.move(view, currentIndex);\n const /** @type {?} */ tuple = new RecordViewTuple(item, /** @type {?} */ (view));\n insertTuples.push(tuple);\n }\n });\n for (let /** @type {?} */ i = 0; i < insertTuples.length; i++) {\n this._perViewChange(insertTuples[i].view, insertTuples[i].record);\n }\n for (let /** @type {?} */ i = 0, /** @type {?} */ ilen = this._viewContainer.length; i < ilen; i++) {\n const /** @type {?} */ viewRef = /** @type {?} */ (this._viewContainer.get(i));\n viewRef.context.index = i;\n viewRef.context.count = ilen;\n }\n changes.forEachIdentityChange((record) => {\n const /** @type {?} */ viewRef = /** @type {?} */ (this._viewContainer.get(record.currentIndex));\n viewRef.context.$implicit = record.item;\n });\n }\n /**\n * @param {?} view\n * @param {?} record\n * @return {?}\n */\n _perViewChange(view, record) {\n view.context.$implicit = record.item;\n }\n}\nNgForOf.decorators = [\n { type: Directive, args: [{ selector: '[ngFor][ngForOf]' },] },\n];\n/** @nocollapse */\nNgForOf.ctorParameters = () => [\n { type: ViewContainerRef, },\n { type: TemplateRef, },\n { type: IterableDiffers, },\n];\nNgForOf.propDecorators = {\n \"ngForOf\": [{ type: Input },],\n \"ngForTrackBy\": [{ type: Input },],\n \"ngForTemplate\": [{ type: Input },],\n};\n/**\n * @template T\n */\nclass RecordViewTuple {\n /**\n * @param {?} record\n * @param {?} view\n */\n constructor(record, view) {\n this.record = record;\n this.view = view;\n }\n}\n/**\n * @param {?} type\n * @return {?}\n */\nfunction getTypeNameForDebugging(type) {\n return type['name'] || typeof type;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Conditionally includes a template based on the value of an `expression`.\n *\n * `ngIf` evaluates the `expression` and then renders the `then` or `else` template in its place\n * when expression is truthy or falsy respectively. Typically the:\n * - `then` template is the inline template of `ngIf` unless bound to a different value.\n * - `else` template is blank unless it is bound.\n *\n * ## Most common usage\n *\n * The most common usage of the `ngIf` directive is to conditionally show the inline template as\n * seen in this example:\n * {\\@example common/ngIf/ts/module.ts region='NgIfSimple'}\n *\n * ## Showing an alternative template using `else`\n *\n * If it is necessary to display a template when the `expression` is falsy use the `else` template\n * binding as shown. Note that the `else` binding points to a `<ng-template>` 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 non-inlined `then` template\n *\n * Usually the `then` template is the inlined template of the `ngIf`, but it can be changed using\n * a binding (just like `else`). Because `then` and `else` are bindings, the template references can\n * change at runtime as shown in this example.\n *\n * {\\@example common/ngIf/ts/module.ts region='NgIfThenElse'}\n *\n * ## Storing conditional result in a variable\n *\n * A common pattern is that we need to show a set of properties from the same object. If the\n * object is undefined, then we have to use the safe-traversal-operator `?.` to guard against\n * dereferencing a `null` value. This is especially the case when waiting on async data such as\n * when using the `async` pipe as shown in following example:\n *\n * ```\n * Hello {{ (userStream|async)?.last }}, {{ (userStream|async)?.first }}!\n * ```\n *\n * There are several inefficiencies in the above example:\n * - We create multiple subscriptions on `userStream`. One for each `async` pipe, or two in the\n * example above.\n * - We cannot display an alternative screen while waiting for the data to arrive asynchronously.\n * - We have to use the safe-traversal-operator `?.` to access properties, which is cumbersome.\n * - We have to place the `async` pipe in parenthesis.\n *\n * A better way to do this is to use `ngIf` and store the result of the condition in a local\n * variable as shown in the the example below:\n *\n * {\\@example common/ngIf/ts/module.ts region='NgIfAs'}\n *\n * Notice that:\n * - We use only one `async` pipe and hence only one subscription gets created.\n * - `ngIf` stores the result of the `userStream|async` in the local variable `user`.\n * - The local `user` can then be bound repeatedly in a more efficient way.\n * - No need to use the safe-traversal-operator `?.` to access properties as `ngIf` will only\n * display the data if `userStream` returns a value.\n * - We can display an alternative template while waiting for the data.\n *\n * ### Syntax\n *\n * Simple form:\n * - `<div *ngIf=\"condition\">...</div>`\n * - `<ng-template [ngIf]=\"condition\"><div>...</div></ng-template>`\n *\n * Form with an else block:\n * ```\n * <div *ngIf=\"condition; else elseBlock\">...</div>\n * <ng-template #elseBlock>...</ng-template>\n * ```\n *\n * Form with a `then` and `else` block:\n * ```\n * <div *ngIf=\"condition; then thenBlock else elseBlock\"></div>\n * <ng-template #thenBlock>...</ng-template>\n * <ng-template #elseBlock>...</ng-template>\n * ```\n *\n * Form with storing the value locally:\n * ```\n * <div *ngIf=\"condition as value; else elseBlock\">{{value}}</div>\n * <ng-template #elseBlock>...</ng-template>\n * ```\n *\n * \\@stable\n */\nclass NgIf {\n /**\n * @param {?} _viewContainer\n * @param {?} templateRef\n */\n constructor(_viewContainer, templateRef) {\n this._viewContainer = _viewContainer;\n this._context = new NgIfContext();\n this._thenTemplateRef = null;\n this._elseTemplateRef = null;\n this._thenViewRef = null;\n this._elseViewRef = null;\n this._thenTemplateRef = templateRef;\n }\n /**\n * @param {?} condition\n * @return {?}\n */\n set ngIf(condition) {\n this._context.$implicit = this._context.ngIf = condition;\n this._updateView();\n }\n /**\n * @param {?} templateRef\n * @return {?}\n */\n set ngIfThen(templateRef) {\n this._thenTemplateRef = templateRef;\n this._thenViewRef = null; // clear previous view if any.\n this._updateView();\n }\n /**\n * @param {?} templateRef\n * @return {?}\n */\n set ngIfElse(templateRef) {\n this._elseTemplateRef = templateRef;\n this._elseViewRef = null; // clear previous view if any.\n this._updateView();\n }\n /**\n * @return {?}\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 =\n this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);\n }\n }\n }\n else {\n if (!this._elseViewRef) {\n this._viewContainer.clear();\n this._thenViewRef = null;\n if (this._elseTemplateRef) {\n this._elseViewRef =\n this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);\n }\n }\n }\n }\n}\nNgIf.decorators = [\n { type: Directive, args: [{ selector: '[ngIf]' },] },\n];\n/** @nocollapse */\nNgIf.ctorParameters = () => [\n { type: ViewContainerRef, },\n { type: TemplateRef, },\n];\nNgIf.propDecorators = {\n \"ngIf\": [{ type: Input },],\n \"ngIfThen\": [{ type: Input },],\n \"ngIfElse\": [{ type: Input },],\n};\n/**\n * \\@stable\n */\nclass NgIfContext {\n constructor() {\n this.$implicit = null;\n this.ngIf = null;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass SwitchView {\n /**\n * @param {?} _viewContainerRef\n * @param {?} _templateRef\n */\n constructor(_viewContainerRef, _templateRef) {\n this._viewContainerRef = _viewContainerRef;\n this._templateRef = _templateRef;\n this._created = false;\n }\n /**\n * @return {?}\n */\n create() {\n this._created = true;\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n /**\n * @return {?}\n */\n destroy() {\n this._created = false;\n this._viewContainerRef.clear();\n }\n /**\n * @param {?} created\n * @return {?}\n */\n enforceState(created) {\n if (created && !this._created) {\n this.create();\n }\n else if (!created && this._created) {\n this.destroy();\n }\n }\n}\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Adds / removes DOM sub-trees when the nest match expressions matches the switch\n * expression.\n *\n * \\@howToUse\n * ```\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 * \\@description\n *\n * `NgSwitch` stamps out nested views when their match expression value matches the value of the\n * switch expression.\n *\n * In other words:\n * - you define a container element (where you place the directive with a switch expression on the\n * `[ngSwitch]=\"...\"` attribute)\n * - you define inner views inside the `NgSwitch` and place a `*ngSwitchCase` attribute on the view\n * root elements.\n *\n * Elements within `NgSwitch` but outside of a `NgSwitchCase` or `NgSwitchDefault` directives will\n * be preserved at the location.\n *\n * The `ngSwitchCase` directive informs the parent `NgSwitch` of which view to display when the\n * expression is evaluated.\n * When no matching expression is found on a `ngSwitchCase` view, the `ngSwitchDefault` view is\n * stamped out.\n *\n * \\@stable\n */\nclass NgSwitch {\n constructor() {\n this._defaultUsed = false;\n this._caseCount = 0;\n this._lastCaseCheckIndex = 0;\n this._lastCasesMatched = false;\n }\n /**\n * @param {?} newValue\n * @return {?}\n */\n set ngSwitch(newValue) {\n this._ngSwitch = newValue;\n if (this._caseCount === 0) {\n this._updateDefaultCases(true);\n }\n }\n /**\n * \\@internal\n * @return {?}\n */\n _addCase() { return this._caseCount++; }\n /**\n * \\@internal\n * @param {?} view\n * @return {?}\n */\n _addDefault(view) {\n if (!this._defaultViews) {\n this._defaultViews = [];\n }\n this._defaultViews.push(view);\n }\n /**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n _matchCase(value) {\n const /** @type {?} */ matched = value == this._ngSwitch;\n this._lastCasesMatched = 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 /**\n * @param {?} useDefault\n * @return {?}\n */\n _updateDefaultCases(useDefault) {\n if (this._defaultViews && useDefault !== this._defaultUsed) {\n this._defaultUsed = useDefault;\n for (let /** @type {?} */ i = 0; i < this._defaultViews.length; i++) {\n const /** @type {?} */ defaultView = this._defaultViews[i];\n defaultView.enforceState(useDefault);\n }\n }\n }\n}\nNgSwitch.decorators = [\n { type: Directive, args: [{ selector: '[ngSwitch]' },] },\n];\n/** @nocollapse */\nNgSwitch.ctorParameters = () => [];\nNgSwitch.propDecorators = {\n \"ngSwitch\": [{ type: Input },],\n};\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Creates a view that will be added/removed from the parent {\\@link NgSwitch} when the\n * given expression evaluate to respectively the same/different value as the switch\n * expression.\n *\n * \\@howToUse\n * ```\n * <container-element [ngSwitch]=\"switch_expression\">\n * <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n * </container-element>\n * ```\n * \\@description\n *\n * Insert the sub-tree when the expression evaluates to the same value as the enclosing switch\n * expression.\n *\n * If multiple match expressions match the switch expression value, all of them are displayed.\n *\n * See {\\@link NgSwitch} for more details and example.\n *\n * \\@stable\n */\nclass NgSwitchCase {\n /**\n * @param {?} viewContainer\n * @param {?} templateRef\n * @param {?} ngSwitch\n */\n constructor(viewContainer, templateRef, ngSwitch) {\n this.ngSwitch = ngSwitch;\n ngSwitch._addCase();\n this._view = new SwitchView(viewContainer, templateRef);\n }\n /**\n * @return {?}\n */\n ngDoCheck() { this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase)); }\n}\nNgSwitchCase.decorators = [\n { type: Directive, args: [{ selector: '[ngSwitchCase]' },] },\n];\n/** @nocollapse */\nNgSwitchCase.ctorParameters = () => [\n { type: ViewContainerRef, },\n { type: TemplateRef, },\n { type: NgSwitch, decorators: [{ type: Host },] },\n];\nNgSwitchCase.propDecorators = {\n \"ngSwitchCase\": [{ type: Input },],\n};\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Creates a view that is added to the parent {\\@link NgSwitch} when no case expressions\n * match the\n * switch expression.\n *\n * \\@howToUse\n * ```\n * <container-element [ngSwitch]=\"switch_expression\">\n * <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n * <some-other-element *ngSwitchDefault>...</some-other-element>\n * </container-element>\n * ```\n *\n * \\@description\n *\n * Insert the sub-tree when no case expressions evaluate to the same value as the enclosing switch\n * expression.\n *\n * See {\\@link NgSwitch} for more details and example.\n *\n * \\@stable\n */\nclass NgSwitchDefault {\n /**\n * @param {?} viewContainer\n * @param {?} templateRef\n * @param {?} ngSwitch\n */\n constructor(viewContainer, templateRef, ngSwitch) {\n ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));\n }\n}\nNgSwitchDefault.decorators = [\n { type: Directive, args: [{ selector: '[ngSwitchDefault]' },] },\n];\n/** @nocollapse */\nNgSwitchDefault.ctorParameters = () => [\n { type: ViewContainerRef, },\n { type: TemplateRef, },\n { type: NgSwitch, decorators: [{ type: Host },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization.\n *\n * \\@howToUse\n * ```\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 * 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 * \\@experimental\n */\nclass NgPlural {\n /**\n * @param {?} _localization\n */\n constructor(_localization) {\n this._localization = _localization;\n this._caseViews = {};\n }\n /**\n * @param {?} value\n * @return {?}\n */\n set ngPlural(value) {\n this._switchValue = value;\n this._updateView();\n }\n /**\n * @param {?} value\n * @param {?} switchView\n * @return {?}\n */\n addCase(value, switchView) { this._caseViews[value] = switchView; }\n /**\n * @return {?}\n */\n _updateView() {\n this._clearViews();\n const /** @type {?} */ cases = Object.keys(this._caseViews);\n const /** @type {?} */ key = getPluralCategory(this._switchValue, cases, this._localization);\n this._activateView(this._caseViews[key]);\n }\n /**\n * @return {?}\n */\n _clearViews() {\n if (this._activeView)\n this._activeView.destroy();\n }\n /**\n * @param {?} view\n * @return {?}\n */\n _activateView(view) {\n if (view) {\n this._activeView = view;\n this._activeView.create();\n }\n }\n}\nNgPlural.decorators = [\n { type: Directive, args: [{ selector: '[ngPlural]' },] },\n];\n/** @nocollapse */\nNgPlural.ctorParameters = () => [\n { type: NgLocalization, },\n];\nNgPlural.propDecorators = {\n \"ngPlural\": [{ type: Input },],\n};\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes 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 * \\@howToUse\n * ```\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 * \\@experimental\n */\nclass NgPluralCase {\n /**\n * @param {?} value\n * @param {?} template\n * @param {?} viewContainer\n * @param {?} ngPlural\n */\n constructor(value, template, viewContainer, ngPlural) {\n this.value = value;\n const /** @type {?} */ isANumber = !isNaN(Number(value));\n ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));\n }\n}\nNgPluralCase.decorators = [\n { type: Directive, args: [{ selector: '[ngPluralCase]' },] },\n];\n/** @nocollapse */\nNgPluralCase.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Attribute, args: ['ngPluralCase',] },] },\n { type: TemplateRef, },\n { type: ViewContainerRef, },\n { type: NgPlural, decorators: [{ type: Host },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Update an HTML element styles.\n *\n * \\@howToUse\n * ```\n * <some-element [ngStyle]=\"{'font-style': styleExp}\">...</some-element>\n *\n * <some-element [ngStyle]=\"{'max-width.px': widthExp}\">...</some-element>\n *\n * <some-element [ngStyle]=\"objExp\">...</some-element>\n * ```\n *\n * \\@description\n *\n * The styles are updated according to the value of the expression evaluation:\n * - keys are style names with an optional `.<unit>` suffix (ie 'top.px', 'font-style.em'),\n * - values are the values assigned to those properties (expressed in the given unit).\n *\n * \\@stable\n */\nclass NgStyle {\n /**\n * @param {?} _differs\n * @param {?} _ngEl\n * @param {?} _renderer\n */\n constructor(_differs, _ngEl, _renderer) {\n this._differs = _differs;\n this._ngEl = _ngEl;\n this._renderer = _renderer;\n }\n /**\n * @param {?} v\n * @return {?}\n */\n set ngStyle(v) {\n this._ngStyle = v;\n if (!this._differ && v) {\n this._differ = this._differs.find(v).create();\n }\n }\n /**\n * @return {?}\n */\n ngDoCheck() {\n if (this._differ) {\n const /** @type {?} */ changes = this._differ.diff(this._ngStyle);\n if (changes) {\n this._applyChanges(changes);\n }\n }\n }\n /**\n * @param {?} changes\n * @return {?}\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 /**\n * @param {?} nameAndUnit\n * @param {?} value\n * @return {?}\n */\n _setStyle(nameAndUnit, value) {\n const [name, unit] = nameAndUnit.split('.');\n value = value != null && unit ? `${value}${unit}` : value;\n if (value != null) {\n this._renderer.setStyle(this._ngEl.nativeElement, name, /** @type {?} */ (value));\n }\n else {\n this._renderer.removeStyle(this._ngEl.nativeElement, name);\n }\n }\n}\nNgStyle.decorators = [\n { type: Directive, args: [{ selector: '[ngStyle]' },] },\n];\n/** @nocollapse */\nNgStyle.ctorParameters = () => [\n { type: KeyValueDiffers, },\n { type: ElementRef, },\n { type: Renderer2, },\n];\nNgStyle.propDecorators = {\n \"ngStyle\": [{ type: Input },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Inserts an embedded view from a prepared `TemplateRef`\n *\n * \\@howToUse\n * ```\n * <ng-container *ngTemplateOutlet=\"templateRefExp; context: contextExp\"></ng-container>\n * ```\n *\n * \\@description\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 * Note: 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 * \\@stable\n */\nclass NgTemplateOutlet {\n /**\n * @param {?} _viewContainerRef\n */\n constructor(_viewContainerRef) {\n this._viewContainerRef = _viewContainerRef;\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n const /** @type {?} */ recreateView = this._shouldRecreateView(changes);\n if (recreateView) {\n if (this._viewRef) {\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef));\n }\n if (this.ngTemplateOutlet) {\n this._viewRef = this._viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, this.ngTemplateOutletContext);\n }\n }\n else {\n if (this._viewRef && this.ngTemplateOutletContext) {\n this._updateExistingContext(this.ngTemplateOutletContext);\n }\n }\n }\n /**\n * We need to re-create existing embedded view if:\n * - templateRef has changed\n * - context has changes\n *\n * We mark context object as changed when the corresponding object\n * shape changes (new properties are added or existing properties are removed).\n * In other words we consider context with the same properties as \"the same\" even\n * if object reference changes (see https://github.com/angular/angular/issues/13407).\n * @param {?} changes\n * @return {?}\n */\n _shouldRecreateView(changes) {\n const /** @type {?} */ ctxChange = changes['ngTemplateOutletContext'];\n return !!changes['ngTemplateOutlet'] || (ctxChange && this._hasContextShapeChanged(ctxChange));\n }\n /**\n * @param {?} ctxChange\n * @return {?}\n */\n _hasContextShapeChanged(ctxChange) {\n const /** @type {?} */ prevCtxKeys = Object.keys(ctxChange.previousValue || {});\n const /** @type {?} */ currCtxKeys = Object.keys(ctxChange.currentValue || {});\n if (prevCtxKeys.length === currCtxKeys.length) {\n for (let /** @type {?} */ propName of currCtxKeys) {\n if (prevCtxKeys.indexOf(propName) === -1) {\n return true;\n }\n }\n return false;\n }\n else {\n return true;\n }\n }\n /**\n * @param {?} ctx\n * @return {?}\n */\n _updateExistingContext(ctx) {\n for (let /** @type {?} */ propName of Object.keys(ctx)) {\n (/** @type {?} */ (this._viewRef.context))[propName] = (/** @type {?} */ (this.ngTemplateOutletContext))[propName];\n }\n }\n}\nNgTemplateOutlet.decorators = [\n { type: Directive, args: [{ selector: '[ngTemplateOutlet]' },] },\n];\n/** @nocollapse */\nNgTemplateOutlet.ctorParameters = () => [\n { type: ViewContainerRef, },\n];\nNgTemplateOutlet.propDecorators = {\n \"ngTemplateOutletContext\": [{ type: Input },],\n \"ngTemplateOutlet\": [{ type: Input },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 = [\n NgClass,\n NgComponentOutlet,\n NgForOf,\n NgIf,\n NgTemplateOutlet,\n NgStyle,\n NgSwitch,\n NgSwitchCase,\n NgSwitchDefault,\n NgPlural,\n NgPluralCase,\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst NAMED_FORMATS = {};\nconst DATE_FORMATS_SPLIT = /((?:[^GyMLwWdEabBhHmsSzZO']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{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]*)/;\n/** @enum {number} */\nconst ZoneWidth = {\n Short: 0,\n ShortGMT: 1,\n Long: 2,\n Extended: 3,\n};\nZoneWidth[ZoneWidth.Short] = \"Short\";\nZoneWidth[ZoneWidth.ShortGMT] = \"ShortGMT\";\nZoneWidth[ZoneWidth.Long] = \"Long\";\nZoneWidth[ZoneWidth.Extended] = \"Extended\";\n/** @enum {number} */\nconst DateType = {\n FullYear: 0,\n Month: 1,\n Date: 2,\n Hours: 3,\n Minutes: 4,\n Seconds: 5,\n Milliseconds: 6,\n Day: 7,\n};\nDateType[DateType.FullYear] = \"FullYear\";\nDateType[DateType.Month] = \"Month\";\nDateType[DateType.Date] = \"Date\";\nDateType[DateType.Hours] = \"Hours\";\nDateType[DateType.Minutes] = \"Minutes\";\nDateType[DateType.Seconds] = \"Seconds\";\nDateType[DateType.Milliseconds] = \"Milliseconds\";\nDateType[DateType.Day] = \"Day\";\n/** @enum {number} */\nconst TranslationType = {\n DayPeriods: 0,\n Days: 1,\n Months: 2,\n Eras: 3,\n};\nTranslationType[TranslationType.DayPeriods] = \"DayPeriods\";\nTranslationType[TranslationType.Days] = \"Days\";\nTranslationType[TranslationType.Months] = \"Months\";\nTranslationType[TranslationType.Eras] = \"Eras\";\n/**\n * Transforms a date to a locale string based on a pattern and a timezone\n *\n * \\@internal\n * @param {?} date\n * @param {?} format\n * @param {?} locale\n * @param {?=} timezone\n * @return {?}\n */\nfunction formatDate(date, format, locale, timezone) {\n const /** @type {?} */ namedFormat = getNamedFormat(locale, format);\n format = namedFormat || format;\n let /** @type {?} */ parts = [];\n let /** @type {?} */ match;\n while (format) {\n match = DATE_FORMATS_SPLIT.exec(format);\n if (match) {\n parts = parts.concat(match.slice(1));\n const /** @type {?} */ part = parts.pop();\n if (!part) {\n break;\n }\n format = part;\n }\n else {\n parts.push(format);\n break;\n }\n }\n let /** @type {?} */ dateTimezoneOffset = date.getTimezoneOffset();\n if (timezone) {\n dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n date = convertTimezoneToLocal(date, timezone, true);\n }\n let /** @type {?} */ text = '';\n parts.forEach(value => {\n const /** @type {?} */ dateFormatter = getDateFormatter(value);\n text += dateFormatter ?\n dateFormatter(date, locale, dateTimezoneOffset) :\n value === '\\'\\'' ? '\\'' : value.replace(/(^'|'$)/g, '').replace(/''/g, '\\'');\n });\n return text;\n}\n/**\n * @param {?} locale\n * @param {?} format\n * @return {?}\n */\nfunction getNamedFormat(locale, format) {\n const /** @type {?} */ localeId = getLocaleId(locale);\n NAMED_FORMATS[localeId] = NAMED_FORMATS[localeId] || {};\n if (NAMED_FORMATS[localeId][format]) {\n return NAMED_FORMATS[localeId][format];\n }\n let /** @type {?} */ 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 /** @type {?} */ shortTime = getNamedFormat(locale, 'shortTime');\n const /** @type {?} */ shortDate = getNamedFormat(locale, 'shortDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Short), [shortTime, shortDate]);\n break;\n case 'medium':\n const /** @type {?} */ mediumTime = getNamedFormat(locale, 'mediumTime');\n const /** @type {?} */ mediumDate = getNamedFormat(locale, 'mediumDate');\n formatValue = formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Medium), [mediumTime, mediumDate]);\n break;\n case 'long':\n const /** @type {?} */ longTime = getNamedFormat(locale, 'longTime');\n const /** @type {?} */ longDate = getNamedFormat(locale, 'longDate');\n formatValue =\n formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Long), [longTime, longDate]);\n break;\n case 'full':\n const /** @type {?} */ fullTime = getNamedFormat(locale, 'fullTime');\n const /** @type {?} */ fullDate = getNamedFormat(locale, 'fullDate');\n formatValue =\n formatDateTime(getLocaleDateTimeFormat(locale, FormatWidth.Full), [fullTime, fullDate]);\n break;\n }\n if (formatValue) {\n NAMED_FORMATS[localeId][format] = formatValue;\n }\n return formatValue;\n}\n/**\n * @param {?} str\n * @param {?} opt_values\n * @return {?}\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}\n/**\n * @param {?} num\n * @param {?} digits\n * @param {?=} minusSign\n * @param {?=} trim\n * @param {?=} negWrap\n * @return {?}\n */\nfunction padNumber(num, digits, minusSign = '-', trim, negWrap) {\n let /** @type {?} */ neg = '';\n if (num < 0 || (negWrap && num <= 0)) {\n if (negWrap) {\n num = -num + 1;\n }\n else {\n num = -num;\n neg = minusSign;\n }\n }\n let /** @type {?} */ strNum = '' + num;\n while (strNum.length < digits)\n strNum = '0' + strNum;\n if (trim) {\n strNum = strNum.substr(strNum.length - digits);\n }\n return neg + strNum;\n}\n/**\n * Returns a date formatter that transforms a date into its locale digit representation\n * @param {?} name\n * @param {?} size\n * @param {?=} offset\n * @param {?=} trim\n * @param {?=} negWrap\n * @return {?}\n */\nfunction dateGetter(name, size, offset = 0, trim = false, negWrap = false) {\n return function (date, locale) {\n let /** @type {?} */ part = getDatePart(name, date, size);\n if (offset > 0 || part > -offset) {\n part += offset;\n }\n if (name === DateType.Hours && part === 0 && offset === -12) {\n part = 12;\n }\n return padNumber(part, size, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign), trim, negWrap);\n };\n}\n/**\n * @param {?} name\n * @param {?} date\n * @param {?} size\n * @return {?}\n */\nfunction getDatePart(name, date, size) {\n switch (name) {\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.Milliseconds:\n const /** @type {?} */ div = size === 1 ? 100 : (size === 2 ? 10 : 1);\n return Math.round(date.getMilliseconds() / div);\n case DateType.Day:\n return date.getDay();\n default:\n throw new Error(`Unknown DateType value \"${name}\".`);\n }\n}\n/**\n * Returns a date formatter that transforms a date into its locale string representation\n * @param {?} name\n * @param {?} width\n * @param {?=} form\n * @param {?=} extended\n * @return {?}\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 * @param {?} date\n * @param {?} locale\n * @param {?} name\n * @param {?} width\n * @param {?} form\n * @param {?} extended\n * @return {?}\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 /** @type {?} */ currentHours = date.getHours();\n const /** @type {?} */ currentMinutes = date.getMinutes();\n if (extended) {\n const /** @type {?} */ rules = getLocaleExtraDayPeriodRules(locale);\n const /** @type {?} */ dayPeriods = getLocaleExtraDayPeriods(locale, form, width);\n let /** @type {?} */ result;\n rules.forEach((rule, index) => {\n if (Array.isArray(rule)) {\n // morning, afternoon, evening, night\n const { hours: hoursFrom, minutes: minutesFrom } = rule[0];\n const { hours: hoursTo, minutes: minutesTo } = rule[1];\n if (currentHours >= hoursFrom && currentMinutes >= minutesFrom &&\n (currentHours < hoursTo ||\n (currentHours === hoursTo && currentMinutes < minutesTo))) {\n result = dayPeriods[index];\n }\n }\n else {\n // noon or midnight\n const { hours, minutes } = rule;\n if (hours === currentHours && minutes === currentMinutes) {\n result = dayPeriods[index];\n }\n }\n });\n if (result) {\n return result;\n }\n }\n // if no rules for the day periods, we use am/pm by default\n return getLocaleDayPeriods(locale, form, /** @type {?} */ (width))[currentHours < 12 ? 0 : 1];\n case TranslationType.Eras:\n return getLocaleEraNames(locale, /** @type {?} */ (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 /** @type {?} */ 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 * @param {?} width\n * @return {?}\n */\nfunction timeZoneGetter(width) {\n return function (date, locale, offset) {\n const /** @type {?} */ zone = -1 * offset;\n const /** @type {?} */ minusSign = getLocaleNumberSymbol(locale, NumberSymbol.MinusSign);\n const /** @type {?} */ 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) +\n 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) + ':' +\n padNumber(Math.abs(zone % 60), 2, minusSign);\n case ZoneWidth.Extended:\n if (offset === 0) {\n return 'Z';\n }\n else {\n return ((zone >= 0) ? '+' : '') + padNumber(hours, 2, minusSign) + ':' +\n 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;\n/**\n * @param {?} year\n * @return {?}\n */\nfunction getFirstThursdayOfYear(year) {\n const /** @type {?} */ firstDayOfYear = (new Date(year, JANUARY, 1)).getDay();\n return new Date(year, 0, 1 + ((firstDayOfYear <= THURSDAY) ? THURSDAY : THURSDAY + 7) - firstDayOfYear);\n}\n/**\n * @param {?} datetime\n * @return {?}\n */\nfunction getThursdayThisWeek(datetime) {\n return new Date(datetime.getFullYear(), datetime.getMonth(), datetime.getDate() + (THURSDAY - datetime.getDay()));\n}\n/**\n * @param {?} size\n * @param {?=} monthBased\n * @return {?}\n */\nfunction weekGetter(size, monthBased = false) {\n return function (date, locale) {\n let /** @type {?} */ result;\n if (monthBased) {\n const /** @type {?} */ nbDaysBefore1stDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1).getDay() - 1;\n const /** @type {?} */ today = date.getDate();\n result = 1 + Math.floor((today + nbDaysBefore1stDayOfMonth) / 7);\n }\n else {\n const /** @type {?} */ firstThurs = getFirstThursdayOfYear(date.getFullYear());\n const /** @type {?} */ thisThurs = getThursdayThisWeek(date);\n const /** @type {?} */ 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}\nconst DATE_FORMATS = {};\n/**\n * @param {?} format\n * @return {?}\n */\nfunction getDateFormatter(format) {\n if (DATE_FORMATS[format]) {\n return DATE_FORMATS[format];\n }\n let /** @type {?} */ 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 // 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 =\n dateStrGetter(TranslationType.Months, TranslationWidth.Abbreviated, FormStyle.Standalone);\n break;\n case 'LLLL':\n formatter =\n dateStrGetter(TranslationType.Months, TranslationWidth.Wide, FormStyle.Standalone);\n break;\n case 'LLLLL':\n formatter =\n 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\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 =\n 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 padded (0-9)\n case 'S':\n formatter = dateGetter(DateType.Milliseconds, 1);\n break;\n case 'SS':\n formatter = dateGetter(DateType.Milliseconds, 2);\n break;\n // = millisecond\n case 'SSS':\n formatter = dateGetter(DateType.Milliseconds, 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}\n/**\n * @param {?} timezone\n * @param {?} fallback\n * @return {?}\n */\nfunction timezoneToOffset(timezone, fallback) {\n // Support: IE 9-11 only, Edge 13-15+\n // IE/Edge do not \"understand\" colon (`:`) in timezone\n timezone = timezone.replace(/:/g, '');\n const /** @type {?} */ requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;\n return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;\n}\n/**\n * @param {?} date\n * @param {?} minutes\n * @return {?}\n */\nfunction addDateMinutes(date, minutes) {\n date = new Date(date.getTime());\n date.setMinutes(date.getMinutes() + minutes);\n return date;\n}\n/**\n * @param {?} date\n * @param {?} timezone\n * @param {?} reverse\n * @return {?}\n */\nfunction convertTimezoneToLocal(date, timezone, reverse) {\n const /** @type {?} */ reverseValue = reverse ? -1 : 1;\n const /** @type {?} */ dateTimezoneOffset = date.getTimezoneOffset();\n const /** @type {?} */ timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);\n return addDateMinutes(date, reverseValue * (timezoneOffset - dateTimezoneOffset));\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} type\n * @param {?} value\n * @return {?}\n */\nfunction invalidPipeArgumentError(type, value) {\n return Error(`InvalidPipeArgument: '${value}' for pipe '${ɵstringify(type)}'`);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a date according to locale rules.\n * \\@howToUse `date_expression | date[:format[:timezone[:locale]]]`\n * \\@description\n *\n * Where:\n * - `expression` is a date object or a number (milliseconds since UTC epoch) or an ISO string\n * (https://www.w3.org/TR/NOTE-datetime).\n * - `format` indicates which date/time components to include. The format can be predefined as\n * shown below (all examples are given for `en-US`) or custom as shown in the table.\n * - `'short'`: equivalent to `'M/d/yy, h:mm a'` (e.g. `6/15/15, 9:03 AM`)\n * - `'medium'`: equivalent to `'MMM d, y, h:mm:ss a'` (e.g. `Jun 15, 2015, 9:03:01 AM`)\n * - `'long'`: equivalent to `'MMMM d, y, h:mm:ss a z'` (e.g. `June 15, 2015 at 9:03:01 AM GMT+1`)\n * - `'full'`: equivalent to `'EEEE, MMMM d, y, h:mm:ss a zzzz'` (e.g. `Monday, June 15, 2015 at\n * 9:03:01 AM GMT+01:00`)\n * - `'shortDate'`: equivalent to `'M/d/yy'` (e.g. `6/15/15`)\n * - `'mediumDate'`: equivalent to `'MMM d, y'` (e.g. `Jun 15, 2015`)\n * - `'longDate'`: equivalent to `'MMMM d, y'` (e.g. `June 15, 2015`)\n * - `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` (e.g. `Monday, June 15, 2015`)\n * - `'shortTime'`: equivalent to `'h:mm a'` (e.g. `9:03 AM`)\n * - `'mediumTime'`: equivalent to `'h:mm:ss a'` (e.g. `9:03:01 AM`)\n * - `'longTime'`: equivalent to `'h:mm:ss a z'` (e.g. `9:03:01 AM GMT+1`)\n * - `'fullTime'`: equivalent to `'h:mm:ss a zzzz'` (e.g. `9:03:01 AM GMT+01:00`)\n * - `timezone` to be used for formatting. It understands UTC/GMT and the continental US time zone\n * abbreviations, but for general use, use a time zone offset, for example,\n * `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian)\n * If not specified, the local system timezone of the end-user's browser will be used.\n * - `locale` is a `string` defining the locale to use (uses the current {\\@link LOCALE_ID} by\n * default)\n *\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 * | 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 * | 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 * | 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 * When the expression is a ISO string without time (e.g. 2016-09-19) the time zone offset is not\n * applied and the formatted text will have the same day, month and year of the expression.\n *\n * WARNINGS:\n * - this pipe has only access to en-US locale data by default. If you want to localize the dates\n * in another language, you will have to import data for other locales.\n * See the {\\@linkDocs guide/i18n#i18n-pipes \"I18n guide\"} to know how to import additional locale\n * data.\n * - Fields suffixed with * are only available in the extra dataset.\n * See the {\\@linkDocs guide/i18n#i18n-pipes \"I18n guide\"} to know how to import extra locale\n * data.\n * - this pipe is marked as pure hence it will not be re-evaluated when the input is mutated.\n * Instead users should treat the date as an immutable object and change the reference when the\n * pipe needs to re-run (this is to avoid reformatting the date on every change detection run\n * which would be an expensive operation).\n *\n * ### Examples\n *\n * Assuming `dateObj` is (year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11)\n * in the _local_ time and locale is 'en-US':\n *\n * {\\@example common/pipes/ts/date_pipe.ts region='DatePipe'}\n *\n * \\@stable\n */\nclass DatePipe {\n /**\n * @param {?} locale\n */\n constructor(locale) {\n this.locale = locale;\n }\n /**\n * @param {?} value\n * @param {?=} format\n * @param {?=} timezone\n * @param {?=} locale\n * @return {?}\n */\n transform(value, format = 'mediumDate', timezone, locale) {\n if (value == null || value === '' || value !== value)\n return null;\n if (typeof value === 'string') {\n value = value.trim();\n }\n let /** @type {?} */ date;\n let /** @type {?} */ match;\n if (isDate$1(value)) {\n date = value;\n }\n else if (!isNaN(value - parseFloat(value))) {\n date = new Date(parseFloat(value));\n }\n else if (typeof value === 'string' && /^(\\d{4}-\\d{1,2}-\\d{1,2})$/.test(value)) {\n /**\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 */\n const [y, m, d] = value.split('-').map((val) => +val);\n date = new Date(y, m - 1, d);\n }\n else if ((typeof value === 'string') && (match = value.match(ISO8601_DATE_REGEX))) {\n date = isoStringToDate(match);\n }\n else {\n date = new Date(value);\n }\n if (!isDate$1(date)) {\n throw invalidPipeArgumentError(DatePipe, value);\n }\n return formatDate(date, format, locale || this.locale, timezone);\n }\n}\nDatePipe.decorators = [\n { type: Pipe, args: [{ name: 'date', pure: true },] },\n];\n/** @nocollapse */\nDatePipe.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID,] },] },\n];\n/**\n * \\@internal\n * @param {?} match\n * @return {?}\n */\nfunction isoStringToDate(match) {\n const /** @type {?} */ date = new Date(0);\n let /** @type {?} */ tzHour = 0;\n let /** @type {?} */ tzMin = 0;\n // match[8] means that the string contains \"Z\" (UTC) or a timezone like \"+01:00\" or \"+0100\"\n const /** @type {?} */ dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;\n const /** @type {?} */ 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 = +(match[9] + match[10]);\n tzMin = +(match[9] + match[11]);\n }\n dateSetter.call(date, +(match[1]), +(match[2]) - 1, +(match[3]));\n const /** @type {?} */ h = +(match[4] || '0') - tzHour;\n const /** @type {?} */ m = +(match[5] || '0') - tzMin;\n const /** @type {?} */ s = +(match[6] || '0');\n const /** @type {?} */ ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);\n timeSetter.call(date, h, m, s, ms);\n return date;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isDate$1(value) {\n return value instanceof Date && !isNaN(value.valueOf());\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nclass NumberFormatter {\n /**\n * @param {?} num\n * @param {?} locale\n * @param {?} style\n * @param {?=} opts\n * @return {?}\n */\n static format(num, locale, style, opts = {}) {\n const { minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, currency, currencyAsSymbol = false } = opts;\n const /** @type {?} */ options = {\n minimumIntegerDigits,\n minimumFractionDigits,\n maximumFractionDigits,\n style: NumberFormatStyle[style].toLowerCase()\n };\n if (style == NumberFormatStyle.Currency) {\n options.currency = typeof currency == 'string' ? currency : undefined;\n options.currencyDisplay = currencyAsSymbol ? 'symbol' : 'code';\n }\n return new Intl.NumberFormat(locale, options).format(num);\n }\n}\nconst DATE_FORMATS_SPLIT$1 = /((?:[^yMLdHhmsazZEwGjJ']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|J+|j+|m+|s+|a|z|Z|G+|w+))(.*)/;\nconst PATTERN_ALIASES = {\n // Keys are quoted so they do not get renamed during closure compilation.\n 'yMMMdjms': datePartGetterFactory(combine([\n digitCondition('year', 1),\n nameCondition('month', 3),\n digitCondition('day', 1),\n digitCondition('hour', 1),\n digitCondition('minute', 1),\n digitCondition('second', 1),\n ])),\n 'yMdjm': datePartGetterFactory(combine([\n digitCondition('year', 1), digitCondition('month', 1), digitCondition('day', 1),\n digitCondition('hour', 1), digitCondition('minute', 1)\n ])),\n 'yMMMMEEEEd': datePartGetterFactory(combine([\n digitCondition('year', 1), nameCondition('month', 4), nameCondition('weekday', 4),\n digitCondition('day', 1)\n ])),\n 'yMMMMd': datePartGetterFactory(combine([digitCondition('year', 1), nameCondition('month', 4), digitCondition('day', 1)])),\n 'yMMMd': datePartGetterFactory(combine([digitCondition('year', 1), nameCondition('month', 3), digitCondition('day', 1)])),\n 'yMd': datePartGetterFactory(combine([digitCondition('year', 1), digitCondition('month', 1), digitCondition('day', 1)])),\n 'jms': datePartGetterFactory(combine([digitCondition('hour', 1), digitCondition('second', 1), digitCondition('minute', 1)])),\n 'jm': datePartGetterFactory(combine([digitCondition('hour', 1), digitCondition('minute', 1)]))\n};\nconst DATE_FORMATS$1 = {\n // Keys are quoted so they do not get renamed.\n 'yyyy': datePartGetterFactory(digitCondition('year', 4)),\n 'yy': datePartGetterFactory(digitCondition('year', 2)),\n 'y': datePartGetterFactory(digitCondition('year', 1)),\n 'MMMM': datePartGetterFactory(nameCondition('month', 4)),\n 'MMM': datePartGetterFactory(nameCondition('month', 3)),\n 'MM': datePartGetterFactory(digitCondition('month', 2)),\n 'M': datePartGetterFactory(digitCondition('month', 1)),\n 'LLLL': datePartGetterFactory(nameCondition('month', 4)),\n 'L': datePartGetterFactory(nameCondition('month', 1)),\n 'dd': datePartGetterFactory(digitCondition('day', 2)),\n 'd': datePartGetterFactory(digitCondition('day', 1)),\n 'HH': digitModifier(hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 2), false)))),\n 'H': hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), false))),\n 'hh': digitModifier(hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 2), true)))),\n 'h': hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), true))),\n 'jj': datePartGetterFactory(digitCondition('hour', 2)),\n 'j': datePartGetterFactory(digitCondition('hour', 1)),\n 'mm': digitModifier(datePartGetterFactory(digitCondition('minute', 2))),\n 'm': datePartGetterFactory(digitCondition('minute', 1)),\n 'ss': digitModifier(datePartGetterFactory(digitCondition('second', 2))),\n 's': datePartGetterFactory(digitCondition('second', 1)),\n // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n // we can be just safely rely on using `sss` since we currently don't support single or two digit\n // fractions\n 'sss': datePartGetterFactory(digitCondition('second', 3)),\n 'EEEE': datePartGetterFactory(nameCondition('weekday', 4)),\n 'EEE': datePartGetterFactory(nameCondition('weekday', 3)),\n 'EE': datePartGetterFactory(nameCondition('weekday', 2)),\n 'E': datePartGetterFactory(nameCondition('weekday', 1)),\n 'a': hourClockExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), true))),\n 'Z': timeZoneGetter$1('short'),\n 'z': timeZoneGetter$1('long'),\n 'ww': datePartGetterFactory({}),\n // Week of year, padded (00-53). Week 01 is the week with the\n // first Thursday of the year. not support ?\n 'w': datePartGetterFactory({}),\n // Week of year (0-53). Week 1 is the week with the first Thursday\n // of the year not support ?\n 'G': datePartGetterFactory(nameCondition('era', 1)),\n 'GG': datePartGetterFactory(nameCondition('era', 2)),\n 'GGG': datePartGetterFactory(nameCondition('era', 3)),\n 'GGGG': datePartGetterFactory(nameCondition('era', 4))\n};\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction digitModifier(inner) {\n return function (date, locale) {\n const /** @type {?} */ result = inner(date, locale);\n return result.length == 1 ? '0' + result : result;\n };\n}\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction hourClockExtractor(inner) {\n return function (date, locale) { return inner(date, locale).split(' ')[1]; };\n}\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction hourExtractor(inner) {\n return function (date, locale) { return inner(date, locale).split(' ')[0]; };\n}\n/**\n * @param {?} date\n * @param {?} locale\n * @param {?} options\n * @return {?}\n */\nfunction intlDateFormat(date, locale, options) {\n return new Intl.DateTimeFormat(locale, options).format(date).replace(/[\\u200e\\u200f]/g, '');\n}\n/**\n * @param {?} timezone\n * @return {?}\n */\nfunction timeZoneGetter$1(timezone) {\n // To workaround `Intl` API restriction for single timezone let format with 24 hours\n const /** @type {?} */ options = { hour: '2-digit', hour12: false, timeZoneName: timezone };\n return function (date, locale) {\n const /** @type {?} */ result = intlDateFormat(date, locale, options);\n // Then extract first 3 letters that related to hours\n return result ? result.substring(3) : '';\n };\n}\n/**\n * @param {?} options\n * @param {?} value\n * @return {?}\n */\nfunction hour12Modify(options, value) {\n options.hour12 = value;\n return options;\n}\n/**\n * @param {?} prop\n * @param {?} len\n * @return {?}\n */\nfunction digitCondition(prop, len) {\n const /** @type {?} */ result = {};\n result[prop] = len === 2 ? '2-digit' : 'numeric';\n return result;\n}\n/**\n * @param {?} prop\n * @param {?} len\n * @return {?}\n */\nfunction nameCondition(prop, len) {\n const /** @type {?} */ result = {};\n if (len < 4) {\n result[prop] = len > 1 ? 'short' : 'narrow';\n }\n else {\n result[prop] = 'long';\n }\n return result;\n}\n/**\n * @param {?} options\n * @return {?}\n */\nfunction combine(options) {\n return options.reduce((merged, opt) => (Object.assign({}, merged, opt)), {});\n}\n/**\n * @param {?} ret\n * @return {?}\n */\nfunction datePartGetterFactory(ret) {\n return (date, locale) => intlDateFormat(date, locale, ret);\n}\nconst DATE_FORMATTER_CACHE = new Map();\n/**\n * @param {?} format\n * @param {?} date\n * @param {?} locale\n * @return {?}\n */\nfunction dateFormatter(format, date, locale) {\n const /** @type {?} */ fn = PATTERN_ALIASES[format];\n if (fn)\n return fn(date, locale);\n const /** @type {?} */ cacheKey = format;\n let /** @type {?} */ parts = DATE_FORMATTER_CACHE.get(cacheKey);\n if (!parts) {\n parts = [];\n let /** @type {?} */ match;\n DATE_FORMATS_SPLIT$1.exec(format);\n let /** @type {?} */ _format = format;\n while (_format) {\n match = DATE_FORMATS_SPLIT$1.exec(_format);\n if (match) {\n parts = parts.concat(match.slice(1));\n _format = /** @type {?} */ ((parts.pop()));\n }\n else {\n parts.push(_format);\n _format = null;\n }\n }\n DATE_FORMATTER_CACHE.set(cacheKey, parts);\n }\n return parts.reduce((text, part) => {\n const /** @type {?} */ fn = DATE_FORMATS$1[part];\n return text + (fn ? fn(date, locale) : partToTime(part));\n }, '');\n}\n/**\n * @param {?} part\n * @return {?}\n */\nfunction partToTime(part) {\n return part === '\\'\\'' ? '\\'' : part.replace(/(^'|'$)/g, '').replace(/''/g, '\\'');\n}\nclass DateFormatter {\n /**\n * @param {?} date\n * @param {?} locale\n * @param {?} pattern\n * @return {?}\n */\n static format(date, locale, pattern) {\n return dateFormatter(pattern, date, locale);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n* @license\n* Copyright Google Inc. 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.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a date according to locale rules.\n * \\@howToUse `date_expression | date[:format]`\n * \\@description\n *\n * Where:\n * - `expression` is a date object or a number (milliseconds since UTC epoch) or an ISO string\n * (https://www.w3.org/TR/NOTE-datetime).\n * - `format` indicates which date/time components to include. The format can be predefined as\n * shown below or custom as shown in the table.\n * - `'medium'`: equivalent to `'yMMMdjms'` (e.g. `Sep 3, 2010, 12:05:08 PM` for `en-US`)\n * - `'short'`: equivalent to `'yMdjm'` (e.g. `9/3/2010, 12:05 PM` for `en-US`)\n * - `'fullDate'`: equivalent to `'yMMMMEEEEd'` (e.g. `Friday, September 3, 2010` for `en-US`)\n * - `'longDate'`: equivalent to `'yMMMMd'` (e.g. `September 3, 2010` for `en-US`)\n * - `'mediumDate'`: equivalent to `'yMMMd'` (e.g. `Sep 3, 2010` for `en-US`)\n * - `'shortDate'`: equivalent to `'yMd'` (e.g. `9/3/2010` for `en-US`)\n * - `'mediumTime'`: equivalent to `'jms'` (e.g. `12:05:08 PM` for `en-US`)\n * - `'shortTime'`: equivalent to `'jm'` (e.g. `12:05 PM` for `en-US`)\n *\n *\n * | Component | Symbol | Narrow | Short Form | Long Form | Numeric | 2-digit |\n * |-----------|:------:|--------|--------------|-------------------|-----------|-----------|\n * | era | G | G (A) | GGG (AD) | GGGG (Anno Domini)| - | - |\n * | year | y | - | - | - | y (2015) | yy (15) |\n * | month | M | L (S) | MMM (Sep) | MMMM (September) | M (9) | MM (09) |\n * | day | d | - | - | - | d (3) | dd (03) |\n * | weekday | E | E (S) | EEE (Sun) | EEEE (Sunday) | - | - |\n * | hour | j | - | - | - | j (13) | jj (13) |\n * | hour12 | h | - | - | - | h (1 PM) | hh (01 PM)|\n * | hour24 | H | - | - | - | H (13) | HH (13) |\n * | minute | m | - | - | - | m (5) | mm (05) |\n * | second | s | - | - | - | s (9) | ss (09) |\n * | timezone | z | - | - | z (Pacific Standard Time)| - | - |\n * | timezone | Z | - | Z (GMT-8:00) | - | - | - |\n * | timezone | a | - | a (PM) | - | - | - |\n *\n * In javascript, only the components specified will be respected (not the ordering,\n * punctuations, ...) and details of the formatting will be dependent on the locale.\n *\n * Timezone of the formatted text will be the local system timezone of the end-user's machine.\n *\n * When the expression is a ISO string without time (e.g. 2016-09-19) the time zone offset is not\n * applied and the formatted text will have the same day, month and year of the expression.\n *\n * WARNINGS:\n * - this pipe is marked as pure hence it will not be re-evaluated when the input is mutated.\n * Instead users should treat the date as an immutable object and change the reference when the\n * pipe needs to re-run (this is to avoid reformatting the date on every change detection run\n * which would be an expensive operation).\n * - this pipe uses the Internationalization API. Therefore it is only reliable in Chrome and Opera\n * browsers.\n *\n * ### Examples\n *\n * Assuming `dateObj` is (year: 2010, month: 9, day: 3, hour: 12 PM, minute: 05, second: 08)\n * in the _local_ time and locale is 'en-US':\n *\n * {\\@example common/pipes/ts/date_pipe.ts region='DeprecatedDatePipe'}\n *\n * \\@stable\n */\nclass DeprecatedDatePipe {\n /**\n * @param {?} _locale\n */\n constructor(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} pattern\n * @return {?}\n */\n transform(value, pattern = 'mediumDate') {\n if (value == null || value === '' || value !== value)\n return null;\n let /** @type {?} */ date;\n if (typeof value === 'string') {\n value = value.trim();\n }\n if (isDate(value)) {\n date = value;\n }\n else if (!isNaN(value - parseFloat(value))) {\n date = new Date(parseFloat(value));\n }\n else if (typeof value === 'string' && /^(\\d{4}-\\d{1,2}-\\d{1,2})$/.test(value)) {\n /**\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\n * timeoffset\n * is applied\n * Note: ISO months are 0 for January, 1 for February, ...\n */\n const [y, m, d] = value.split('-').map((val) => parseInt(val, 10));\n date = new Date(y, m - 1, d);\n }\n else {\n date = new Date(value);\n }\n if (!isDate(date)) {\n let /** @type {?} */ match;\n if ((typeof value === 'string') && (match = value.match(ISO8601_DATE_REGEX))) {\n date = isoStringToDate(match);\n }\n else {\n throw invalidPipeArgumentError(DeprecatedDatePipe, value);\n }\n }\n return DateFormatter.format(date, this._locale, DeprecatedDatePipe._ALIASES[pattern] || pattern);\n }\n}\n/**\n * \\@internal\n */\nDeprecatedDatePipe._ALIASES = {\n 'medium': 'yMMMdjms',\n 'short': 'yMdjm',\n 'fullDate': 'yMMMMEEEEd',\n 'longDate': 'yMMMMd',\n 'mediumDate': 'yMMMd',\n 'shortDate': 'yMd',\n 'mediumTime': 'jms',\n 'shortTime': 'jm'\n};\nDeprecatedDatePipe.decorators = [\n { type: Pipe, args: [{ name: 'date', pure: true },] },\n];\n/** @nocollapse */\nDeprecatedDatePipe.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID,] },] },\n];\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isDate(value) {\n return value instanceof Date && !isNaN(value.valueOf());\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 * Transform a number to a locale string based on a style and a format\n *\n * \\@internal\n * @param {?} value\n * @param {?} locale\n * @param {?} style\n * @param {?=} digitsInfo\n * @param {?=} currency\n * @return {?}\n */\nfunction formatNumber$1(value, locale, style, digitsInfo, currency = null) {\n const /** @type {?} */ res = { str: null };\n const /** @type {?} */ format = getLocaleNumberFormat(locale, style);\n let /** @type {?} */ num;\n // Convert strings to numbers\n if (typeof value === 'string' && !isNaN(+value - parseFloat(value))) {\n num = +value;\n }\n else if (typeof value !== 'number') {\n res.error = `${value} is not a number`;\n return res;\n }\n else {\n num = value;\n }\n const /** @type {?} */ pattern = parseNumberFormat(format, getLocaleNumberSymbol(locale, NumberSymbol.MinusSign));\n let /** @type {?} */ formattedText = '';\n let /** @type {?} */ isZero = false;\n if (!isFinite(num)) {\n formattedText = getLocaleNumberSymbol(locale, NumberSymbol.Infinity);\n }\n else {\n let /** @type {?} */ parsedNumber = parseNumber(num);\n if (style === NumberFormatStyle.Percent) {\n parsedNumber = toPercent(parsedNumber);\n }\n let /** @type {?} */ minInt = pattern.minInt;\n let /** @type {?} */ minFraction = pattern.minFrac;\n let /** @type {?} */ maxFraction = pattern.maxFrac;\n if (digitsInfo) {\n const /** @type {?} */ parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);\n if (parts === null) {\n res.error = `${digitsInfo} is not a valid digit info`;\n return res;\n }\n const /** @type {?} */ minIntPart = parts[1];\n const /** @type {?} */ minFractionPart = parts[3];\n const /** @type {?} */ 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 }\n else if (minFractionPart != null && minFraction > maxFraction) {\n maxFraction = minFraction;\n }\n }\n roundNumber(parsedNumber, minFraction, maxFraction);\n let /** @type {?} */ digits = parsedNumber.digits;\n let /** @type {?} */ integerLen = parsedNumber.integerLen;\n const /** @type {?} */ exponent = parsedNumber.exponent;\n let /** @type {?} */ 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 }\n else {\n decimals = digits;\n digits = [0];\n }\n // format the integer digits with grouping separators\n const /** @type {?} */ 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 const /** @type {?} */ groupSymbol = currency ? NumberSymbol.CurrencyGroup : NumberSymbol.Group;\n formattedText = groups.join(getLocaleNumberSymbol(locale, groupSymbol));\n // append the decimal digits\n if (decimals.length) {\n const /** @type {?} */ decimalSymbol = currency ? NumberSymbol.CurrencyDecimal : NumberSymbol.Decimal;\n formattedText += getLocaleNumberSymbol(locale, decimalSymbol) + decimals.join('');\n }\n if (exponent) {\n formattedText += getLocaleNumberSymbol(locale, NumberSymbol.Exponential) + '+' + exponent;\n }\n }\n if (num < 0 && !isZero) {\n formattedText = pattern.negPre + formattedText + pattern.negSuf;\n }\n else {\n formattedText = pattern.posPre + formattedText + pattern.posSuf;\n }\n if (style === NumberFormatStyle.Currency && currency !== null) {\n res.str = formattedText\n .replace(CURRENCY_CHAR, currency)\n .replace(CURRENCY_CHAR, '');\n return res;\n }\n if (style === NumberFormatStyle.Percent) {\n res.str = formattedText.replace(new RegExp(PERCENT_CHAR, 'g'), getLocaleNumberSymbol(locale, NumberSymbol.PercentSign));\n return res;\n }\n res.str = formattedText;\n return res;\n}\n/**\n * @param {?} format\n * @param {?=} minusSign\n * @return {?}\n */\nfunction parseNumberFormat(format, minusSign = '-') {\n const /** @type {?} */ 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 /** @type {?} */ patternParts = format.split(PATTERN_SEP);\n const /** @type {?} */ positive = patternParts[0];\n const /** @type {?} */ negative = patternParts[1];\n const /** @type {?} */ positiveParts = positive.indexOf(DECIMAL_SEP) !== -1 ?\n positive.split(DECIMAL_SEP) :\n [\n positive.substring(0, positive.lastIndexOf(ZERO_CHAR) + 1),\n positive.substring(positive.lastIndexOf(ZERO_CHAR) + 1)\n ], /** @type {?} */\n integer = positiveParts[0], /** @type {?} */ fraction = positiveParts[1] || '';\n p.posPre = integer.substr(0, integer.indexOf(DIGIT_CHAR));\n for (let /** @type {?} */ i = 0; i < fraction.length; i++) {\n const /** @type {?} */ ch = fraction.charAt(i);\n if (ch === ZERO_CHAR) {\n p.minFrac = p.maxFrac = i + 1;\n }\n else if (ch === DIGIT_CHAR) {\n p.maxFrac = i + 1;\n }\n else {\n p.posSuf += ch;\n }\n }\n const /** @type {?} */ 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 /** @type {?} */ trunkLen = positive.length - p.posPre.length - p.posSuf.length, /** @type {?} */\n pos = negative.indexOf(DIGIT_CHAR);\n p.negPre = negative.substr(0, pos).replace(/'/g, '');\n p.negSuf = negative.substr(pos + trunkLen).replace(/'/g, '');\n }\n else {\n p.negPre = minusSign + p.posPre;\n p.negSuf = p.posSuf;\n }\n return p;\n}\n/**\n * @param {?} parsedNumber\n * @return {?}\n */\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 /** @type {?} */ fractionLen = parsedNumber.digits.length - parsedNumber.integerLen;\n if (parsedNumber.exponent) {\n parsedNumber.exponent += 2;\n }\n else {\n if (fractionLen === 0) {\n parsedNumber.digits.push(0, 0);\n }\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 * @param {?} num\n * @return {?}\n */\nfunction parseNumber(num) {\n let /** @type {?} */ numStr = Math.abs(num) + '';\n let /** @type {?} */ exponent = 0, /** @type {?} */ digits, /** @type {?} */ integerLen;\n let /** @type {?} */ i, /** @type {?} */ j, /** @type {?} */ 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)\n integerLen = i;\n integerLen += +numStr.slice(i + 1);\n numStr = numStr.substring(0, i);\n }\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 }\n else {\n // Count the number of trailing zeros\n zeros--;\n while (numStr.charAt(zeros) === ZERO_CHAR)\n 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] = +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 { digits, exponent, integerLen };\n}\n/**\n * Round the parsed number to the specified number of decimal places\n * This function changes the parsedNumber in-place\n * @param {?} parsedNumber\n * @param {?} minFrac\n * @param {?} maxFrac\n * @return {?}\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 /** @type {?} */ digits = parsedNumber.digits;\n let /** @type {?} */ fractionLen = digits.length - parsedNumber.integerLen;\n const /** @type {?} */ fractionSize = Math.min(Math.max(minFrac, fractionLen), maxFrac);\n // The index of the digit to where rounding is to occur\n let /** @type {?} */ roundAt = fractionSize + parsedNumber.integerLen;\n let /** @type {?} */ 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 /** @type {?} */ j = roundAt; j < digits.length; j++) {\n digits[j] = 0;\n }\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 /** @type {?} */ i = 1; i < roundAt; i++)\n digits[i] = 0;\n }\n if (digit >= 5) {\n if (roundAt - 1 < 0) {\n for (let /** @type {?} */ k = 0; k > roundAt; k--) {\n digits.unshift(0);\n parsedNumber.integerLen++;\n }\n digits.unshift(1);\n parsedNumber.integerLen++;\n }\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++)\n digits.push(0);\n let /** @type {?} */ 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 /** @type {?} */ minLen = minFrac + parsedNumber.integerLen;\n // Do any carrying, e.g. a digit was rounded up to 10\n const /** @type {?} */ 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 }\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}\n/**\n * \\@internal\n * @param {?} text\n * @return {?}\n */\nfunction parseIntAutoRadix(text) {\n const /** @type {?} */ 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 * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} pipe\n * @param {?} locale\n * @param {?} value\n * @param {?} style\n * @param {?=} digits\n * @param {?=} currency\n * @param {?=} currencyAsSymbol\n * @return {?}\n */\nfunction formatNumber(pipe, locale, value, style, digits, currency = null, currencyAsSymbol = false) {\n if (value == null)\n return null;\n // Convert strings to numbers\n value = typeof value === 'string' && !isNaN(+value - parseFloat(value)) ? +value : value;\n if (typeof value !== 'number') {\n throw invalidPipeArgumentError(pipe, value);\n }\n let /** @type {?} */ minInt;\n let /** @type {?} */ minFraction;\n let /** @type {?} */ maxFraction;\n if (style !== NumberFormatStyle.Currency) {\n // rely on Intl default for currency\n minInt = 1;\n minFraction = 0;\n maxFraction = 3;\n }\n if (digits) {\n const /** @type {?} */ parts = digits.match(NUMBER_FORMAT_REGEXP);\n if (parts === null) {\n throw new Error(`${digits} is not a valid digit info for number pipes`);\n }\n if (parts[1] != null) {\n // min integer digits\n minInt = parseIntAutoRadix(parts[1]);\n }\n if (parts[3] != null) {\n // min fraction digits\n minFraction = parseIntAutoRadix(parts[3]);\n }\n if (parts[5] != null) {\n // max fraction digits\n maxFraction = parseIntAutoRadix(parts[5]);\n }\n }\n return NumberFormatter.format(/** @type {?} */ (value), locale, style, {\n minimumIntegerDigits: minInt,\n minimumFractionDigits: minFraction,\n maximumFractionDigits: maxFraction,\n currency: currency,\n currencyAsSymbol: currencyAsSymbol,\n });\n}\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number according to locale rules.\n * \\@howToUse `number_expression | number[:digitInfo]`\n *\n * Formats a number as text. Group sizing and separator and other locale-specific\n * configurations are based on the active locale.\n *\n * where `expression` is a number:\n * - `digitInfo` is a `string` which has a following format: <br>\n * <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>\n * - `minIntegerDigits` is the minimum number of integer digits to use. Defaults to `1`.\n * - `minFractionDigits` is the minimum number of digits after fraction. Defaults to `0`.\n * - `maxFractionDigits` is the maximum number of digits after fraction. Defaults to `3`.\n *\n * For more information on the acceptable range for each of these numbers and other\n * details see your native internationalization library.\n *\n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See [Browser Support](guide/browser-support) for details.\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/number_pipe.ts region='DeprecatedNumberPipe'}\n *\n * \\@stable\n */\nclass DeprecatedDecimalPipe {\n /**\n * @param {?} _locale\n */\n constructor(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} digits\n * @return {?}\n */\n transform(value, digits) {\n return formatNumber(DeprecatedDecimalPipe, this._locale, value, NumberFormatStyle.Decimal, digits);\n }\n}\nDeprecatedDecimalPipe.decorators = [\n { type: Pipe, args: [{ name: 'number' },] },\n];\n/** @nocollapse */\nDeprecatedDecimalPipe.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID,] },] },\n];\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number as a percentage according to locale rules.\n * \\@howToUse `number_expression | percent[:digitInfo]`\n *\n * \\@description\n *\n * Formats a number as percentage.\n *\n * - `digitInfo` See {\\@link DecimalPipe} for detailed description.\n *\n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See [Browser Support](guide/browser-support) for details.\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/percent_pipe.ts region='DeprecatedPercentPipe'}\n *\n * \\@stable\n */\nclass DeprecatedPercentPipe {\n /**\n * @param {?} _locale\n */\n constructor(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} digits\n * @return {?}\n */\n transform(value, digits) {\n return formatNumber(DeprecatedPercentPipe, this._locale, value, NumberFormatStyle.Percent, digits);\n }\n}\nDeprecatedPercentPipe.decorators = [\n { type: Pipe, args: [{ name: 'percent' },] },\n];\n/** @nocollapse */\nDeprecatedPercentPipe.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID,] },] },\n];\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number as currency using locale rules.\n * \\@howToUse `number_expression | currency[:currencyCode[:symbolDisplay[:digitInfo]]]`\n * \\@description\n *\n * Use `currency` to format a number as currency.\n *\n * - `currencyCode` is the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, such\n * as `USD` for the US dollar and `EUR` for the euro.\n * - `symbolDisplay` is a boolean indicating whether to use the currency symbol or code.\n * - `true`: use symbol (e.g. `$`).\n * - `false`(default): use code (e.g. `USD`).\n * - `digitInfo` See {\\@link DecimalPipe} for detailed description.\n *\n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See [Browser Support](guide/browser-support) for details.\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/currency_pipe.ts region='DeprecatedCurrencyPipe'}\n *\n * \\@stable\n */\nclass DeprecatedCurrencyPipe {\n /**\n * @param {?} _locale\n */\n constructor(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} currencyCode\n * @param {?=} symbolDisplay\n * @param {?=} digits\n * @return {?}\n */\n transform(value, currencyCode = 'USD', symbolDisplay = false, digits) {\n return formatNumber(DeprecatedCurrencyPipe, this._locale, value, NumberFormatStyle.Currency, digits, currencyCode, symbolDisplay);\n }\n}\nDeprecatedCurrencyPipe.decorators = [\n { type: Pipe, args: [{ name: 'currency' },] },\n];\n/** @nocollapse */\nDeprecatedCurrencyPipe.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID,] },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A collection of deprecated i18n pipes that require intl api\n *\n * @deprecated from v5\n */\nconst COMMON_DEPRECATED_I18N_PIPES = [DeprecatedDecimalPipe, DeprecatedPercentPipe, DeprecatedCurrencyPipe, DeprecatedDatePipe];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass ObservableStrategy {\n /**\n * @param {?} async\n * @param {?} updateLatestValue\n * @return {?}\n */\n createSubscription(async, updateLatestValue) {\n return async.subscribe({ next: updateLatestValue, error: (e) => { throw e; } });\n }\n /**\n * @param {?} subscription\n * @return {?}\n */\n dispose(subscription) { subscription.unsubscribe(); }\n /**\n * @param {?} subscription\n * @return {?}\n */\n onDestroy(subscription) { subscription.unsubscribe(); }\n}\nclass PromiseStrategy {\n /**\n * @param {?} async\n * @param {?} updateLatestValue\n * @return {?}\n */\n createSubscription(async, updateLatestValue) {\n return async.then(updateLatestValue, e => { throw e; });\n }\n /**\n * @param {?} subscription\n * @return {?}\n */\n dispose(subscription) { }\n /**\n * @param {?} subscription\n * @return {?}\n */\n onDestroy(subscription) { }\n}\nconst _promiseStrategy = new PromiseStrategy();\nconst _observableStrategy = new ObservableStrategy();\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Unwraps a value from an asynchronous primitive.\n * \\@howToUse `observable_or_promise_expression | async`\n * \\@description\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.\n *\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 * \\@stable\n */\nclass AsyncPipe {\n /**\n * @param {?} _ref\n */\n constructor(_ref) {\n this._ref = _ref;\n this._latestValue = null;\n this._latestReturnedValue = null;\n this._subscription = null;\n this._obj = null;\n this._strategy = /** @type {?} */ ((null));\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this._subscription) {\n this._dispose();\n }\n }\n /**\n * @param {?} obj\n * @return {?}\n */\n transform(obj) {\n if (!this._obj) {\n if (obj) {\n this._subscribe(obj);\n }\n this._latestReturnedValue = this._latestValue;\n return this._latestValue;\n }\n if (obj !== this._obj) {\n this._dispose();\n return this.transform(/** @type {?} */ (obj));\n }\n if (this._latestValue === this._latestReturnedValue) {\n return this._latestReturnedValue;\n }\n this._latestReturnedValue = this._latestValue;\n return WrappedValue.wrap(this._latestValue);\n }\n /**\n * @param {?} obj\n * @return {?}\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 /**\n * @param {?} obj\n * @return {?}\n */\n _selectStrategy(obj) {\n if (ɵisPromise(obj)) {\n return _promiseStrategy;\n }\n if (ɵisObservable(obj)) {\n return _observableStrategy;\n }\n throw invalidPipeArgumentError(AsyncPipe, obj);\n }\n /**\n * @return {?}\n */\n _dispose() {\n this._strategy.dispose(/** @type {?} */ ((this._subscription)));\n this._latestValue = null;\n this._latestReturnedValue = null;\n this._subscription = null;\n this._obj = null;\n }\n /**\n * @param {?} async\n * @param {?} value\n * @return {?}\n */\n _updateLatestValue(async, value) {\n if (async === this._obj) {\n this._latestValue = value;\n this._ref.markForCheck();\n }\n }\n}\nAsyncPipe.decorators = [\n { type: Pipe, args: [{ name: 'async', pure: false },] },\n];\n/** @nocollapse */\nAsyncPipe.ctorParameters = () => [\n { type: ChangeDetectorRef, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Transforms text to lowercase.\n *\n * {\\@example common/pipes/ts/lowerupper_pipe.ts region='LowerUpperPipe' }\n *\n * \\@stable\n */\nclass LowerCasePipe {\n /**\n * @param {?} value\n * @return {?}\n */\n transform(value) {\n if (!value)\n return value;\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(LowerCasePipe, value);\n }\n return value.toLowerCase();\n }\n}\nLowerCasePipe.decorators = [\n { type: Pipe, args: [{ name: 'lowercase' },] },\n];\n/** @nocollapse */\nLowerCasePipe.ctorParameters = () => [];\n/**\n * Helper method to transform a single word to titlecase.\n *\n * \\@stable\n * @param {?} word\n * @return {?}\n */\nfunction titleCaseWord(word) {\n if (!word)\n return word;\n return word[0].toUpperCase() + word.substr(1).toLowerCase();\n}\n/**\n * Transforms text to titlecase.\n *\n * \\@stable\n */\nclass TitleCasePipe {\n /**\n * @param {?} value\n * @return {?}\n */\n transform(value) {\n if (!value)\n return value;\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(TitleCasePipe, value);\n }\n return value.split(/\\b/g).map(word => titleCaseWord(word)).join('');\n }\n}\nTitleCasePipe.decorators = [\n { type: Pipe, args: [{ name: 'titlecase' },] },\n];\n/** @nocollapse */\nTitleCasePipe.ctorParameters = () => [];\n/**\n * Transforms text to uppercase.\n *\n * \\@stable\n */\nclass UpperCasePipe {\n /**\n * @param {?} value\n * @return {?}\n */\n transform(value) {\n if (!value)\n return value;\n if (typeof value !== 'string') {\n throw invalidPipeArgumentError(UpperCasePipe, value);\n }\n return value.toUpperCase();\n }\n}\nUpperCasePipe.decorators = [\n { type: Pipe, args: [{ name: 'uppercase' },] },\n];\n/** @nocollapse */\nUpperCasePipe.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst _INTERPOLATION_REGEXP = /#/g;\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Maps a value to a string that pluralizes the value according to locale rules.\n * \\@howToUse `expression | i18nPlural:mapping[:locale]`\n * \\@description\n *\n * Where:\n * - `expression` is a number.\n * - `mapping` is an object that mimics the ICU format, see\n * http://userguide.icu-project.org/formatparse/messages\n * - `locale` is a `string` defining the locale to use (uses the current {\\@link LOCALE_ID} by\n * default)\n *\n * ## Example\n *\n * {\\@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'}\n *\n * \\@experimental\n */\nclass I18nPluralPipe {\n /**\n * @param {?} _localization\n */\n constructor(_localization) {\n this._localization = _localization;\n }\n /**\n * @param {?} value\n * @param {?} pluralMap\n * @param {?=} locale\n * @return {?}\n */\n transform(value, pluralMap, locale) {\n if (value == null)\n return '';\n if (typeof pluralMap !== 'object' || pluralMap === null) {\n throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);\n }\n const /** @type {?} */ key = getPluralCategory(value, Object.keys(pluralMap), this._localization, locale);\n return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());\n }\n}\nI18nPluralPipe.decorators = [\n { type: Pipe, args: [{ name: 'i18nPlural', pure: true },] },\n];\n/** @nocollapse */\nI18nPluralPipe.ctorParameters = () => [\n { type: NgLocalization, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Generic selector that displays the string that matches the current value.\n * \\@howToUse `expression | i18nSelect:mapping`\n * \\@description\n *\n * Where `mapping` is an object that indicates the text that should be displayed\n * for different values of the provided `expression`.\n * If none of the keys of the mapping match the value of the `expression`, then the content\n * of the `other` key is returned when present, otherwise an empty string is returned.\n *\n * ## Example\n *\n * {\\@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'}\n *\n * \\@experimental\n */\nclass I18nSelectPipe {\n /**\n * @param {?} value\n * @param {?} mapping\n * @return {?}\n */\n transform(value, mapping) {\n if (value == null)\n 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}\nI18nSelectPipe.decorators = [\n { type: Pipe, args: [{ name: 'i18nSelect', pure: true },] },\n];\n/** @nocollapse */\nI18nSelectPipe.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Converts value into JSON string.\n * \\@howToUse `expression | json`\n * \\@description\n *\n * Converts value into string using `JSON.stringify`. Useful for debugging.\n *\n * ### Example\n * {\\@example common/pipes/ts/json_pipe.ts region='JsonPipe'}\n *\n * \\@stable\n */\nclass JsonPipe {\n /**\n * @param {?} value\n * @return {?}\n */\n transform(value) { return JSON.stringify(value, null, 2); }\n}\nJsonPipe.decorators = [\n { type: Pipe, args: [{ name: 'json', pure: false },] },\n];\n/** @nocollapse */\nJsonPipe.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number according to locale rules.\n * \\@howToUse `number_expression | number[:digitInfo[:locale]]`\n *\n * Formats a number as text. Group sizing and separator and other locale-specific\n * configurations are based on the active locale.\n *\n * where `expression` is a number:\n * - `digitInfo` is a `string` which has a following format: <br>\n * <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>\n * - `minIntegerDigits` is the minimum number of integer digits to use. Defaults to `1`.\n * - `minFractionDigits` is the minimum number of digits after fraction. Defaults to `0`.\n * - `maxFractionDigits` is the maximum number of digits after fraction. Defaults to `3`.\n * - `locale` is a `string` defining the locale to use (uses the current {\\@link LOCALE_ID} by\n * default)\n *\n * For more information on the acceptable range for each of these numbers and other\n * details see your native internationalization library.\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/number_pipe.ts region='NumberPipe'}\n *\n * \\@stable\n */\nclass DecimalPipe {\n /**\n * @param {?} _locale\n */\n constructor(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} digits\n * @param {?=} locale\n * @return {?}\n */\n transform(value, digits, locale) {\n if (isEmpty(value))\n return null;\n locale = locale || this._locale;\n const { str, error } = formatNumber$1(value, locale, NumberFormatStyle.Decimal, digits);\n if (error) {\n throw invalidPipeArgumentError(DecimalPipe, error);\n }\n return str;\n }\n}\nDecimalPipe.decorators = [\n { type: Pipe, args: [{ name: 'number' },] },\n];\n/** @nocollapse */\nDecimalPipe.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID,] },] },\n];\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number as a percentage according to locale rules.\n * \\@howToUse `number_expression | percent[:digitInfo[:locale]]`\n *\n * \\@description\n *\n * Formats a number as percentage.\n *\n * - `digitInfo` See {\\@link DecimalPipe} for detailed description.\n * - `locale` is a `string` defining the locale to use (uses the current {\\@link LOCALE_ID} by\n * default)\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/percent_pipe.ts region='PercentPipe'}\n *\n * \\@stable\n */\nclass PercentPipe {\n /**\n * @param {?} _locale\n */\n constructor(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} digits\n * @param {?=} locale\n * @return {?}\n */\n transform(value, digits, locale) {\n if (isEmpty(value))\n return null;\n locale = locale || this._locale;\n const { str, error } = formatNumber$1(value, locale, NumberFormatStyle.Percent, digits);\n if (error) {\n throw invalidPipeArgumentError(PercentPipe, error);\n }\n return str;\n }\n}\nPercentPipe.decorators = [\n { type: Pipe, args: [{ name: 'percent' },] },\n];\n/** @nocollapse */\nPercentPipe.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID,] },] },\n];\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number as currency using locale rules.\n * \\@howToUse `number_expression | currency[:currencyCode[:display[:digitInfo[:locale]]]]`\n * \\@description\n *\n * Use `currency` to format a number as currency.\n *\n * - `currencyCode` is the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, such\n * as `USD` for the US dollar and `EUR` for the euro.\n * - `display` indicates whether to show the currency symbol or the code.\n * - `code`: use code (e.g. `USD`).\n * - `symbol`(default): use symbol (e.g. `$`).\n * - `symbol-narrow`: some countries have two symbols for their currency, one regular and one\n * narrow (e.g. the canadian dollar CAD has the symbol `CA$` and the symbol-narrow `$`).\n * - boolean (deprecated from v5): `true` for symbol and false for `code`\n * If there is no narrow symbol for the chosen currency, the regular symbol will be used.\n * - `digitInfo` See {\\@link DecimalPipe} for detailed description.\n * - `locale` is a `string` defining the locale to use (uses the current {\\@link LOCALE_ID} by\n * default)\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/currency_pipe.ts region='CurrencyPipe'}\n *\n * \\@stable\n */\nclass CurrencyPipe {\n /**\n * @param {?} _locale\n */\n constructor(_locale) {\n this._locale = _locale;\n }\n /**\n * @param {?} value\n * @param {?=} currencyCode\n * @param {?=} display\n * @param {?=} digits\n * @param {?=} locale\n * @return {?}\n */\n transform(value, currencyCode, display = 'symbol', digits, locale) {\n if (isEmpty(value))\n return null;\n locale = locale || this._locale;\n if (typeof display === 'boolean') {\n if (/** @type {?} */ (console) && /** @type {?} */ (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 /** @type {?} */ currency = currencyCode || 'USD';\n if (display !== 'code') {\n currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow');\n }\n const { str, error } = formatNumber$1(value, locale, NumberFormatStyle.Currency, digits, currency);\n if (error) {\n throw invalidPipeArgumentError(CurrencyPipe, error);\n }\n return str;\n }\n}\nCurrencyPipe.decorators = [\n { type: Pipe, args: [{ name: 'currency' },] },\n];\n/** @nocollapse */\nCurrencyPipe.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID,] },] },\n];\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isEmpty(value) {\n return value == null || value === '' || value !== value;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Creates a new List or String containing a subset (slice) of the elements.\n * \\@howToUse `array_or_string_expression | slice:start[:end]`\n * \\@description\n *\n * Where the input expression is a `List` or `String`, and:\n * - `start`: The starting index of the subset to return.\n * - **a positive integer**: return the item at `start` index and all items after\n * in the list or string expression.\n * - **a negative integer**: return the item at `start` index from the end and all items after\n * in the list or string expression.\n * - **if positive and greater than the size of the expression**: return an empty list or string.\n * - **if negative and greater than the size of the expression**: return entire list or string.\n * - `end`: The ending index of the subset to return.\n * - **omitted**: return all items until the end.\n * - **if positive**: return all items before `end` index of the list or string.\n * - **if negative**: return all items before `end` index from the end of the list or string.\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 a [List], the returned list 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 * <li>b</li>\n * <li>c</li>\n *\n * ## String Examples\n *\n * {\\@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'}\n *\n * \\@stable\n */\nclass SlicePipe {\n /**\n * @param {?} value\n * @param {?} start\n * @param {?=} end\n * @return {?}\n */\n transform(value, start, end) {\n if (value == null)\n return value;\n if (!this.supports(value)) {\n throw invalidPipeArgumentError(SlicePipe, value);\n }\n return value.slice(start, end);\n }\n /**\n * @param {?} obj\n * @return {?}\n */\n supports(obj) { return typeof obj === 'string' || Array.isArray(obj); }\n}\nSlicePipe.decorators = [\n { type: Pipe, args: [{ name: 'slice', pure: false },] },\n];\n/** @nocollapse */\nSlicePipe.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A collection of Angular pipes that are likely to be used in each and every application.\n */\nconst COMMON_PIPES = [\n AsyncPipe,\n UpperCasePipe,\n LowerCasePipe,\n JsonPipe,\n SlicePipe,\n DecimalPipe,\n PercentPipe,\n TitleCasePipe,\n CurrencyPipe,\n DatePipe,\n I18nPluralPipe,\n I18nSelectPipe,\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * The module that includes all the basic Angular directives like {\\@link NgIf}, {\\@link NgForOf}, ...\n *\n * \\@stable\n */\nclass CommonModule {\n}\nCommonModule.decorators = [\n { type: NgModule, args: [{\n declarations: [COMMON_DIRECTIVES, COMMON_PIPES],\n exports: [COMMON_DIRECTIVES, COMMON_PIPES],\n providers: [\n { provide: NgLocalization, useClass: NgLocaleLocalization },\n ],\n },] },\n];\n/** @nocollapse */\nCommonModule.ctorParameters = () => [];\nconst ɵ0 = getPluralCase;\n/**\n * A module that contains the deprecated i18n pipes.\n *\n * @deprecated from v5\n */\nclass DeprecatedI18NPipesModule {\n}\nDeprecatedI18NPipesModule.decorators = [\n { type: NgModule, args: [{\n declarations: [COMMON_DEPRECATED_I18N_PIPES],\n exports: [COMMON_DEPRECATED_I18N_PIPES],\n providers: [{ provide: DEPRECATED_PLURAL_FN, useValue: ɵ0 }],\n },] },\n];\n/** @nocollapse */\nDeprecatedI18NPipesModule.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A DI Token representing the main rendering context. In a browser this is the DOM Document.\n *\n * Note: Document might not be available in the Application Context when Application and Rendering\n * Contexts are not the same (e.g. when running the application into a Web Worker).\n *\n * \\@stable\n */\nconst DOCUMENT = new InjectionToken('DocumentToken');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst PLATFORM_BROWSER_ID = 'browser';\nconst PLATFORM_SERVER_ID = 'server';\nconst PLATFORM_WORKER_APP_ID = 'browserWorkerApp';\nconst PLATFORM_WORKER_UI_ID = 'browserWorkerUi';\n/**\n * Returns whether a platform id represents a browser platform.\n * \\@experimental\n * @param {?} platformId\n * @return {?}\n */\nfunction isPlatformBrowser(platformId) {\n return platformId === PLATFORM_BROWSER_ID;\n}\n/**\n * Returns whether a platform id represents a server platform.\n * \\@experimental\n * @param {?} platformId\n * @return {?}\n */\nfunction isPlatformServer(platformId) {\n return platformId === PLATFORM_SERVER_ID;\n}\n/**\n * Returns whether a platform id represents a web worker app platform.\n * \\@experimental\n * @param {?} platformId\n * @return {?}\n */\nfunction isPlatformWorkerApp(platformId) {\n return platformId === PLATFORM_WORKER_APP_ID;\n}\n/**\n * Returns whether a platform id represents a web worker UI platform.\n * \\@experimental\n * @param {?} platformId\n * @return {?}\n */\nfunction isPlatformWorkerUi(platformId) {\n return platformId === PLATFORM_WORKER_UI_ID;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@stable\n */\nconst VERSION = new Version('5.2.10');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { registerLocaleData as ɵregisterLocaleData, NgLocaleLocalization, NgLocalization, registerLocaleData, Plural, NumberFormatStyle, FormStyle, TranslationWidth, FormatWidth, NumberSymbol, WeekDay, getCurrencySymbol, getLocaleDayPeriods, getLocaleDayNames, getLocaleMonthNames, getLocaleId, getLocaleEraNames, getLocaleWeekEndRange, getLocaleFirstDayOfWeek, getLocaleDateFormat, getLocaleDateTimeFormat, getLocaleExtraDayPeriodRules, getLocaleExtraDayPeriods, getLocalePluralCase, getLocaleTimeFormat, getLocaleNumberSymbol, getLocaleNumberFormat, getLocaleCurrencyName, getLocaleCurrencySymbol, parseCookieValue as ɵparseCookieValue, CommonModule, DeprecatedI18NPipesModule, NgClass, NgForOf, NgForOfContext, NgIf, NgIfContext, NgPlural, NgPluralCase, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, NgComponentOutlet, DOCUMENT, AsyncPipe, DatePipe, I18nPluralPipe, I18nSelectPipe, JsonPipe, LowerCasePipe, CurrencyPipe, DecimalPipe, PercentPipe, SlicePipe, UpperCasePipe, TitleCasePipe, DeprecatedDatePipe, DeprecatedCurrencyPipe, DeprecatedDecimalPipe, DeprecatedPercentPipe, PLATFORM_BROWSER_ID as ɵPLATFORM_BROWSER_ID, PLATFORM_SERVER_ID as ɵPLATFORM_SERVER_ID, PLATFORM_WORKER_APP_ID as ɵPLATFORM_WORKER_APP_ID, PLATFORM_WORKER_UI_ID as ɵPLATFORM_WORKER_UI_ID, isPlatformBrowser, isPlatformServer, isPlatformWorkerApp, isPlatformWorkerUi, VERSION, PlatformLocation, LOCATION_INITIALIZED, LocationStrategy, APP_BASE_HREF, HashLocationStrategy, PathLocationStrategy, Location, COMMON_DIRECTIVES as ɵe, findLocaleData as ɵd, DEPRECATED_PLURAL_FN as ɵa, getPluralCase as ɵb, COMMON_DEPRECATED_I18N_PIPES as ɵg, COMMON_PIPES as ɵf };\n//# sourceMappingURL=common.js.map\n","import { root } from '../util/root';\nexport function symbolIteratorPonyfill(root) {\n const Symbol = root.Symbol;\n if (typeof Symbol === 'function') {\n if (!Symbol.iterator) {\n Symbol.iterator = Symbol('iterator polyfill');\n }\n return Symbol.iterator;\n }\n else {\n // [for Mozilla Gecko 27-35:](https://mzl.la/2ewE1zC)\n const { Set } = root;\n if (Set && typeof new Set()['@@iterator'] === 'function') {\n return '@@iterator';\n }\n const { Map } = root;\n // required for compatability with es6-shim\n if (Map) {\n let keys = Object.getOwnPropertyNames(Map.prototype);\n for (let i = 0; i < keys.length; ++i) {\n let key = keys[i];\n // according to spec, Map.prototype[@@iterator] and Map.orototype.entries must be equal.\n if (key !== 'entries' && key !== 'size' && Map.prototype[key] === Map.prototype['entries']) {\n return key;\n }\n }\n }\n return '@@iterator';\n }\n}\nexport const iterator = symbolIteratorPonyfill(root);\n/**\n * @deprecated use iterator instead\n */\nexport const $$iterator = iterator;\n//# sourceMappingURL=iterator.js.map","export const empty = {\n closed: true,\n next(value) { },\n error(err) { throw err; },\n complete() { }\n};\n//# sourceMappingURL=Observer.js.map","import { root } from '../util/root';\nconst Symbol = root.Symbol;\nexport const rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?\n Symbol.for('rxSubscriber') : '@@rxSubscriber';\n/**\n * @deprecated use rxSubscriber instead\n */\nexport const $$rxSubscriber = rxSubscriber;\n//# sourceMappingURL=rxSubscriber.js.map","import { root } from '../util/root';\nexport function getSymbolObservable(context) {\n let $$observable;\n let Symbol = context.Symbol;\n if (typeof Symbol === 'function') {\n if (Symbol.observable) {\n $$observable = Symbol.observable;\n }\n else {\n $$observable = Symbol('observable');\n Symbol.observable = $$observable;\n }\n }\n else {\n $$observable = '@@observable';\n }\n return $$observable;\n}\nexport const observable = getSymbolObservable(root);\n/**\n * @deprecated use observable instead\n */\nexport const $$observable = observable;\n//# sourceMappingURL=observable.js.map","/* tslint:disable:no-empty */\nexport function noop() { }\n//# sourceMappingURL=noop.js.map","import { noop } from './noop';\n/* tslint:enable:max-line-length */\nexport function pipe(...fns) {\n return pipeFromArray(fns);\n}\n/* @internal */\nexport function pipeFromArray(fns) {\n if (!fns) {\n return noop;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce((prev, fn) => fn(prev), input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { Observable } from '../Observable';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nexport class EmptyObservable extends Observable {\n constructor(scheduler) {\n super();\n this.scheduler = scheduler;\n }\n /**\n * Creates an Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * <span class=\"informal\">Just emits 'complete', and nothing else.\n * </span>\n *\n * <img src=\"./img/empty.png\" width=\"100%\">\n *\n * This static operator is useful for creating a simple Observable that only\n * emits the complete notification. It can be used for composing with other\n * Observables, such as in a {@link mergeMap}.\n *\n * @example <caption>Emit the number 7, then complete.</caption>\n * var result = Rx.Observable.empty().startWith(7);\n * result.subscribe(x => console.log(x));\n *\n * @example <caption>Map and flatten only odd numbers to the sequence 'a', 'b', 'c'</caption>\n * var interval = Rx.Observable.interval(1000);\n * var result = interval.mergeMap(x =>\n * x % 2 === 1 ? Rx.Observable.of('a', 'b', 'c') : Rx.Observable.empty()\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval eg(0,1,2,3,...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1 print abc\n * // if x % 2 is not equal to 1 nothing will be output\n *\n * @see {@link create}\n * @see {@link never}\n * @see {@link of}\n * @see {@link throw}\n *\n * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling\n * the emission of the complete notification.\n * @return {Observable} An \"empty\" Observable: emits only the complete\n * notification.\n * @static true\n * @name empty\n * @owner Observable\n */\n static create(scheduler) {\n return new EmptyObservable(scheduler);\n }\n static dispatch(arg) {\n const { subscriber } = arg;\n subscriber.complete();\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n const scheduler = this.scheduler;\n if (scheduler) {\n return scheduler.schedule(EmptyObservable.dispatch, 0, { subscriber });\n }\n else {\n subscriber.complete();\n }\n }\n}\n//# sourceMappingURL=EmptyObservable.js.map","import { PromiseObservable } from './PromiseObservable';\nexport const fromPromise = PromiseObservable.create;\n//# sourceMappingURL=fromPromise.js.map","import { Subscription } from './Subscription';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nexport class SubjectSubscription extends Subscription {\n constructor(subject, subscriber) {\n super();\n this.subject = subject;\n this.subscriber = subscriber;\n this.closed = false;\n }\n unsubscribe() {\n if (this.closed) {\n return;\n }\n this.closed = true;\n const subject = this.subject;\n const observers = subject.observers;\n this.subject = null;\n if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {\n return;\n }\n const subscriberIndex = observers.indexOf(this.subscriber);\n if (subscriberIndex !== -1) {\n observers.splice(subscriberIndex, 1);\n }\n }\n}\n//# sourceMappingURL=SubjectSubscription.js.map","import { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { SubjectSubscription } from './SubjectSubscription';\nimport { rxSubscriber as rxSubscriberSymbol } from './symbol/rxSubscriber';\n/**\n * @class SubjectSubscriber<T>\n */\nexport class SubjectSubscriber extends Subscriber {\n constructor(destination) {\n super(destination);\n this.destination = destination;\n }\n}\n/**\n * @class Subject<T>\n */\nexport class Subject extends Observable {\n constructor() {\n super();\n this.observers = [];\n this.closed = false;\n this.isStopped = false;\n this.hasError = false;\n this.thrownError = null;\n }\n [rxSubscriberSymbol]() {\n return new SubjectSubscriber(this);\n }\n lift(operator) {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n }\n next(value) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n if (!this.isStopped) {\n const { observers } = this;\n const len = observers.length;\n const copy = observers.slice();\n for (let i = 0; i < len; i++) {\n copy[i].next(value);\n }\n }\n }\n error(err) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n this.hasError = true;\n this.thrownError = err;\n this.isStopped = true;\n const { observers } = this;\n const len = observers.length;\n const copy = observers.slice();\n for (let i = 0; i < len; i++) {\n copy[i].error(err);\n }\n this.observers.length = 0;\n }\n complete() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n this.isStopped = true;\n const { observers } = this;\n const len = observers.length;\n const copy = observers.slice();\n for (let i = 0; i < len; i++) {\n copy[i].complete();\n }\n this.observers.length = 0;\n }\n unsubscribe() {\n this.isStopped = true;\n this.closed = true;\n this.observers = null;\n }\n _trySubscribe(subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else {\n return super._trySubscribe(subscriber);\n }\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else if (this.hasError) {\n subscriber.error(this.thrownError);\n return Subscription.EMPTY;\n }\n else if (this.isStopped) {\n subscriber.complete();\n return Subscription.EMPTY;\n }\n else {\n this.observers.push(subscriber);\n return new SubjectSubscription(this, subscriber);\n }\n }\n asObservable() {\n const observable = new Observable();\n observable.source = this;\n return observable;\n }\n}\nSubject.create = (destination, source) => {\n return new AnonymousSubject(destination, source);\n};\n/**\n * @class AnonymousSubject<T>\n */\nexport class AnonymousSubject extends Subject {\n constructor(destination, source) {\n super();\n this.destination = destination;\n this.source = source;\n }\n next(value) {\n const { destination } = this;\n if (destination && destination.next) {\n destination.next(value);\n }\n }\n error(err) {\n const { destination } = this;\n if (destination && destination.error) {\n this.destination.error(err);\n }\n }\n complete() {\n const { destination } = this;\n if (destination && destination.complete) {\n this.destination.complete();\n }\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n const { source } = this;\n if (source) {\n return this.source.subscribe(subscriber);\n }\n else {\n return Subscription.EMPTY;\n }\n }\n}\n//# sourceMappingURL=Subject.js.map","import { Observable } from '../../Observable';\nimport { map } from '../../operator/map';\nObservable.prototype.map = map;\n//# sourceMappingURL=map.js.map","import { subscribeToResult } from '../util/subscribeToResult';\nimport { OuterSubscriber } from '../OuterSubscriber';\n/* tslint:enable:max-line-length */\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link mergeAll}.</span>\n *\n * <img src=\"./img/mergeMap.png\" width=\"100%\">\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger.\n *\n * @example <caption>Map and flatten each letter to an Observable ticking every 1 second</caption>\n * var letters = Rx.Observable.of('a', 'b', 'c');\n * var result = letters.mergeMap(x =>\n * Rx.Observable.interval(1000).map(i => x+i)\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // a0\n * // b0\n * // c0\n * // a1\n * // b1\n * // c1\n * // continues to list a,b,c with respective ascending integers\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]\n * A function to produce the value on the output Observable based on the values\n * and the indices of the source (outer) emission and the inner Observable\n * emission. The arguments passed to this function are:\n * - `outerValue`: the value that came from the source\n * - `innerValue`: the value that came from the projected Observable\n * - `outerIndex`: the \"index\" of the value that came from the source\n * - `innerIndex`: the \"index\" of the value from the projected Observable\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return {Observable} An Observable that emits the result of applying the\n * projection function (and the optional `resultSelector`) to each item emitted\n * by the source Observable and merging the results of the Observables obtained\n * from this transformation.\n * @method mergeMap\n * @owner Observable\n */\nexport function mergeMap(project, resultSelector, concurrent = Number.POSITIVE_INFINITY) {\n return function mergeMapOperatorFunction(source) {\n if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n resultSelector = null;\n }\n return source.lift(new MergeMapOperator(project, resultSelector, concurrent));\n };\n}\nexport class MergeMapOperator {\n constructor(project, resultSelector, concurrent = Number.POSITIVE_INFINITY) {\n this.project = project;\n this.resultSelector = resultSelector;\n this.concurrent = concurrent;\n }\n call(observer, source) {\n return source.subscribe(new MergeMapSubscriber(observer, this.project, this.resultSelector, this.concurrent));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nexport class MergeMapSubscriber extends OuterSubscriber {\n constructor(destination, project, resultSelector, concurrent = Number.POSITIVE_INFINITY) {\n super(destination);\n this.project = project;\n this.resultSelector = resultSelector;\n this.concurrent = concurrent;\n this.hasCompleted = false;\n this.buffer = [];\n this.active = 0;\n this.index = 0;\n }\n _next(value) {\n if (this.active < this.concurrent) {\n this._tryNext(value);\n }\n else {\n this.buffer.push(value);\n }\n }\n _tryNext(value) {\n let result;\n const index = this.index++;\n try {\n result = this.project(value, index);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.active++;\n this._innerSub(result, value, index);\n }\n _innerSub(ish, value, index) {\n this.add(subscribeToResult(this, ish, value, index));\n }\n _complete() {\n this.hasCompleted = true;\n if (this.active === 0 && this.buffer.length === 0) {\n this.destination.complete();\n }\n }\n notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n if (this.resultSelector) {\n this._notifyResultSelector(outerValue, innerValue, outerIndex, innerIndex);\n }\n else {\n this.destination.next(innerValue);\n }\n }\n _notifyResultSelector(outerValue, innerValue, outerIndex, innerIndex) {\n let result;\n try {\n result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n }\n notifyComplete(innerSub) {\n const buffer = this.buffer;\n this.remove(innerSub);\n this.active--;\n if (buffer.length > 0) {\n this._next(buffer.shift());\n }\n else if (this.active === 0 && this.hasCompleted) {\n this.destination.complete();\n }\n }\n}\n//# sourceMappingURL=mergeMap.js.map","import { Subscriber } from './Subscriber';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nexport class InnerSubscriber extends Subscriber {\n constructor(parent, outerValue, outerIndex) {\n super();\n this.parent = parent;\n this.outerValue = outerValue;\n this.outerIndex = outerIndex;\n this.index = 0;\n }\n _next(value) {\n this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);\n }\n _error(error) {\n this.parent.notifyError(error, this);\n this.unsubscribe();\n }\n _complete() {\n this.parent.notifyComplete(this);\n this.unsubscribe();\n }\n}\n//# sourceMappingURL=InnerSubscriber.js.map","import { root } from './root';\nimport { isArrayLike } from './isArrayLike';\nimport { isPromise } from './isPromise';\nimport { isObject } from './isObject';\nimport { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { InnerSubscriber } from '../InnerSubscriber';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {\n let destination = new InnerSubscriber(outerSubscriber, outerValue, outerIndex);\n if (destination.closed) {\n return null;\n }\n if (result instanceof Observable) {\n if (result._isScalar) {\n destination.next(result.value);\n destination.complete();\n return null;\n }\n else {\n destination.syncErrorThrowable = true;\n return result.subscribe(destination);\n }\n }\n else if (isArrayLike(result)) {\n for (let i = 0, len = result.length; i < len && !destination.closed; i++) {\n destination.next(result[i]);\n }\n if (!destination.closed) {\n destination.complete();\n }\n }\n else if (isPromise(result)) {\n result.then((value) => {\n if (!destination.closed) {\n destination.next(value);\n destination.complete();\n }\n }, (err) => destination.error(err))\n .then(null, (err) => {\n // Escaping the Promise trap: globally throw unhandled errors\n root.setTimeout(() => { throw err; });\n });\n return destination;\n }\n else if (result && typeof result[Symbol_iterator] === 'function') {\n const iterator = result[Symbol_iterator]();\n do {\n let item = iterator.next();\n if (item.done) {\n destination.complete();\n break;\n }\n destination.next(item.value);\n if (destination.closed) {\n break;\n }\n } while (true);\n }\n else if (result && typeof result[Symbol_observable] === 'function') {\n const obs = result[Symbol_observable]();\n if (typeof obs.subscribe !== 'function') {\n destination.error(new TypeError('Provided object does not correctly implement Symbol.observable'));\n }\n else {\n return obs.subscribe(new InnerSubscriber(outerSubscriber, outerValue, outerIndex));\n }\n }\n else {\n const value = isObject(result) ? 'an invalid object' : `'${result}'`;\n const msg = `You provided ${value} where a stream was expected.`\n + ' You can provide an Observable, Promise, Array, or Iterable.';\n destination.error(new TypeError(msg));\n }\n return null;\n}\n//# sourceMappingURL=subscribeToResult.js.map","/**\n * @license Angular v5.2.10\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { Injectable, NgModule, Version } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { ɵgetDOM } from '@angular/platform-browser';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A backend for http that uses the `XMLHttpRequest` browser API.\n *\n * Take care not to evaluate this in non-browser contexts.\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass BrowserXhr {\n constructor() { }\n /**\n * @return {?}\n */\n build() { return /** @type {?} */ ((new XMLHttpRequest())); }\n}\nBrowserXhr.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nBrowserXhr.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/** @enum {number} */\nconst RequestMethod = {\n Get: 0,\n Post: 1,\n Put: 2,\n Delete: 3,\n Options: 4,\n Head: 5,\n Patch: 6,\n};\nRequestMethod[RequestMethod.Get] = \"Get\";\nRequestMethod[RequestMethod.Post] = \"Post\";\nRequestMethod[RequestMethod.Put] = \"Put\";\nRequestMethod[RequestMethod.Delete] = \"Delete\";\nRequestMethod[RequestMethod.Options] = \"Options\";\nRequestMethod[RequestMethod.Head] = \"Head\";\nRequestMethod[RequestMethod.Patch] = \"Patch\";\n/** @enum {number} */\nconst ReadyState = {\n Unsent: 0,\n Open: 1,\n HeadersReceived: 2,\n Loading: 3,\n Done: 4,\n Cancelled: 5,\n};\nReadyState[ReadyState.Unsent] = \"Unsent\";\nReadyState[ReadyState.Open] = \"Open\";\nReadyState[ReadyState.HeadersReceived] = \"HeadersReceived\";\nReadyState[ReadyState.Loading] = \"Loading\";\nReadyState[ReadyState.Done] = \"Done\";\nReadyState[ReadyState.Cancelled] = \"Cancelled\";\n/** @enum {number} */\nconst ResponseType = {\n Basic: 0,\n Cors: 1,\n Default: 2,\n Error: 3,\n Opaque: 4,\n};\nResponseType[ResponseType.Basic] = \"Basic\";\nResponseType[ResponseType.Cors] = \"Cors\";\nResponseType[ResponseType.Default] = \"Default\";\nResponseType[ResponseType.Error] = \"Error\";\nResponseType[ResponseType.Opaque] = \"Opaque\";\n/** @enum {number} */\nconst ContentType = {\n NONE: 0,\n JSON: 1,\n FORM: 2,\n FORM_DATA: 3,\n TEXT: 4,\n BLOB: 5,\n ARRAY_BUFFER: 6,\n};\nContentType[ContentType.NONE] = \"NONE\";\nContentType[ContentType.JSON] = \"JSON\";\nContentType[ContentType.FORM] = \"FORM\";\nContentType[ContentType.FORM_DATA] = \"FORM_DATA\";\nContentType[ContentType.TEXT] = \"TEXT\";\nContentType[ContentType.BLOB] = \"BLOB\";\nContentType[ContentType.ARRAY_BUFFER] = \"ARRAY_BUFFER\";\n/** @enum {number} */\nconst ResponseContentType = {\n Text: 0,\n Json: 1,\n ArrayBuffer: 2,\n Blob: 3,\n};\nResponseContentType[ResponseContentType.Text] = \"Text\";\nResponseContentType[ResponseContentType.Json] = \"Json\";\nResponseContentType[ResponseContentType.ArrayBuffer] = \"ArrayBuffer\";\nResponseContentType[ResponseContentType.Blob] = \"Blob\";\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Polyfill for [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers/Headers), as\n * specified in the [Fetch Spec](https://fetch.spec.whatwg.org/#headers-class).\n *\n * The only known difference between this `Headers` implementation and the spec is the\n * lack of an `entries` method.\n *\n * ### Example\n *\n * ```\n * import {Headers} from '\\@angular/http';\n *\n * var firstHeaders = new Headers();\n * firstHeaders.append('Content-Type', 'image/jpeg');\n * console.log(firstHeaders.get('Content-Type')) //'image/jpeg'\n *\n * // Create headers from Plain Old JavaScript Object\n * var secondHeaders = new Headers({\n * 'X-My-Custom-Header': 'Angular'\n * });\n * console.log(secondHeaders.get('X-My-Custom-Header')); //'Angular'\n *\n * var thirdHeaders = new Headers(secondHeaders);\n * console.log(thirdHeaders.get('X-My-Custom-Header')); //'Angular'\n * ```\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass Headers {\n /**\n * @param {?=} headers\n */\n constructor(headers) {\n /**\n * \\@internal header names are lower case\n */\n this._headers = new Map();\n /**\n * \\@internal map lower case names to actual names\n */\n this._normalizedNames = new Map();\n if (!headers) {\n return;\n }\n if (headers instanceof Headers) {\n headers.forEach((values, name) => {\n values.forEach(value => this.append(name, value));\n });\n return;\n }\n Object.keys(headers).forEach((name) => {\n const /** @type {?} */ values = Array.isArray(headers[name]) ? headers[name] : [headers[name]];\n this.delete(name);\n values.forEach(value => this.append(name, value));\n });\n }\n /**\n * Returns a new Headers instance from the given DOMString of Response Headers\n * @param {?} headersString\n * @return {?}\n */\n static fromResponseHeaderString(headersString) {\n const /** @type {?} */ headers = new Headers();\n headersString.split('\\n').forEach(line => {\n const /** @type {?} */ index = line.indexOf(':');\n if (index > 0) {\n const /** @type {?} */ name = line.slice(0, index);\n const /** @type {?} */ value = line.slice(index + 1).trim();\n headers.set(name, value);\n }\n });\n return headers;\n }\n /**\n * Appends a header to existing list of header values for a given header name.\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n append(name, value) {\n const /** @type {?} */ values = this.getAll(name);\n if (values === null) {\n this.set(name, value);\n }\n else {\n values.push(value);\n }\n }\n /**\n * Deletes all header values for the given name.\n * @param {?} name\n * @return {?}\n */\n delete(name) {\n const /** @type {?} */ lcName = name.toLowerCase();\n this._normalizedNames.delete(lcName);\n this._headers.delete(lcName);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEach(fn) {\n this._headers.forEach((values, lcName) => fn(values, this._normalizedNames.get(lcName), this._headers));\n }\n /**\n * Returns first header that matches given name.\n * @param {?} name\n * @return {?}\n */\n get(name) {\n const /** @type {?} */ values = this.getAll(name);\n if (values === null) {\n return null;\n }\n return values.length > 0 ? values[0] : null;\n }\n /**\n * Checks for existence of header by given name.\n * @param {?} name\n * @return {?}\n */\n has(name) { return this._headers.has(name.toLowerCase()); }\n /**\n * Returns the names of the headers\n * @return {?}\n */\n keys() { return Array.from(this._normalizedNames.values()); }\n /**\n * Sets or overrides header value for given name.\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n set(name, value) {\n if (Array.isArray(value)) {\n if (value.length) {\n this._headers.set(name.toLowerCase(), [value.join(',')]);\n }\n }\n else {\n this._headers.set(name.toLowerCase(), [value]);\n }\n this.mayBeSetNormalizedName(name);\n }\n /**\n * Returns values of all headers.\n * @return {?}\n */\n values() { return Array.from(this._headers.values()); }\n /**\n * Returns string of all headers.\n * @return {?}\n */\n toJSON() {\n const /** @type {?} */ serialized = {};\n this._headers.forEach((values, name) => {\n const /** @type {?} */ split = [];\n values.forEach(v => split.push(...v.split(',')));\n serialized[/** @type {?} */ ((this._normalizedNames.get(name)))] = split;\n });\n return serialized;\n }\n /**\n * Returns list of header values for a given name.\n * @param {?} name\n * @return {?}\n */\n getAll(name) {\n return this.has(name) ? this._headers.get(name.toLowerCase()) || null : null;\n }\n /**\n * This method is not implemented.\n * @return {?}\n */\n entries() { throw new Error('\"entries\" method is not implemented on Headers class'); }\n /**\n * @param {?} name\n * @return {?}\n */\n mayBeSetNormalizedName(name) {\n const /** @type {?} */ lcName = name.toLowerCase();\n if (!this._normalizedNames.has(lcName)) {\n this._normalizedNames.set(lcName, name);\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Creates a response options object to be optionally provided when instantiating a\n * {\\@link Response}.\n *\n * This class is based on the `ResponseInit` description in the [Fetch\n * Spec](https://fetch.spec.whatwg.org/#responseinit).\n *\n * All values are null by default. Typical defaults can be found in the\n * {\\@link BaseResponseOptions} class, which sub-classes `ResponseOptions`.\n *\n * This class may be used in tests to build {\\@link Response Responses} for\n * mock responses (see {\\@link MockBackend}).\n *\n * ### Example ([live demo](http://plnkr.co/edit/P9Jkk8e8cz6NVzbcxEsD?p=preview))\n *\n * ```typescript\n * import {ResponseOptions, Response} from '\\@angular/http';\n *\n * var options = new ResponseOptions({\n * body: '{\"name\":\"Jeff\"}'\n * });\n * var res = new Response(options);\n *\n * console.log('res.json():', res.json()); // Object {name: \"Jeff\"}\n * ```\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass ResponseOptions {\n /**\n * @param {?=} opts\n */\n constructor(opts = {}) {\n const { body, status, headers, statusText, type, url } = opts;\n this.body = body != null ? body : null;\n this.status = status != null ? status : null;\n this.headers = headers != null ? headers : null;\n this.statusText = statusText != null ? statusText : null;\n this.type = type != null ? type : null;\n this.url = url != null ? url : null;\n }\n /**\n * Creates a copy of the `ResponseOptions` instance, using the optional input as values to\n * override\n * existing values. This method will not change the values of the instance on which it is being\n * called.\n *\n * This may be useful when sharing a base `ResponseOptions` object inside tests,\n * where certain properties may change from test to test.\n *\n * ### Example ([live demo](http://plnkr.co/edit/1lXquqFfgduTFBWjNoRE?p=preview))\n *\n * ```typescript\n * import {ResponseOptions, Response} from '\\@angular/http';\n *\n * var options = new ResponseOptions({\n * body: {name: 'Jeff'}\n * });\n * var res = new Response(options.merge({\n * url: 'https://google.com'\n * }));\n * console.log('options.url:', options.url); // null\n * console.log('res.json():', res.json()); // Object {name: \"Jeff\"}\n * console.log('res.url:', res.url); // https://google.com\n * ```\n * @param {?=} options\n * @return {?}\n */\n merge(options) {\n return new ResponseOptions({\n body: options && options.body != null ? options.body : this.body,\n status: options && options.status != null ? options.status : this.status,\n headers: options && options.headers != null ? options.headers : this.headers,\n statusText: options && options.statusText != null ? options.statusText : this.statusText,\n type: options && options.type != null ? options.type : this.type,\n url: options && options.url != null ? options.url : this.url,\n });\n }\n}\n/**\n * Subclass of {\\@link ResponseOptions}, with default values.\n *\n * Default values:\n * * status: 200\n * * headers: empty {\\@link Headers} object\n *\n * This class could be extended and bound to the {\\@link ResponseOptions} class\n * when configuring an {\\@link Injector}, in order to override the default options\n * used by {\\@link Http} to create {\\@link Response Responses}.\n *\n * ### Example ([live demo](http://plnkr.co/edit/qv8DLT?p=preview))\n *\n * ```typescript\n * import {provide} from '\\@angular/core';\n * import {bootstrap} from '\\@angular/platform-browser/browser';\n * import {HTTP_PROVIDERS, Headers, Http, BaseResponseOptions, ResponseOptions} from\n * '\\@angular/http';\n * import {App} from './myapp';\n *\n * class MyOptions extends BaseResponseOptions {\n * headers:Headers = new Headers({network: 'github'});\n * }\n *\n * bootstrap(App, [HTTP_PROVIDERS, {provide: ResponseOptions, useClass: MyOptions}]);\n * ```\n *\n * The options could also be extended when manually creating a {\\@link Response}\n * object.\n *\n * ### Example ([live demo](http://plnkr.co/edit/VngosOWiaExEtbstDoix?p=preview))\n *\n * ```\n * import {BaseResponseOptions, Response} from '\\@angular/http';\n *\n * var options = new BaseResponseOptions();\n * var res = new Response(options.merge({\n * body: 'Angular',\n * headers: new Headers({framework: 'angular'})\n * }));\n * console.log('res.headers.get(\"framework\"):', res.headers.get('framework')); // angular\n * console.log('res.text():', res.text()); // Angular;\n * ```\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass BaseResponseOptions extends ResponseOptions {\n constructor() {\n super({ status: 200, statusText: 'Ok', type: ResponseType.Default, headers: new Headers() });\n }\n}\nBaseResponseOptions.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nBaseResponseOptions.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Abstract class from which real backends are derived.\n *\n * The primary purpose of a `ConnectionBackend` is to create new connections to fulfill a given\n * {\\@link Request}.\n *\n * @deprecated use \\@angular/common/http instead\n * @abstract\n */\nclass ConnectionBackend {\n}\n/**\n * Abstract class from which real connections are derived.\n *\n * @deprecated use \\@angular/common/http instead\n * @abstract\n */\nclass Connection {\n}\n/**\n * An XSRFStrategy configures XSRF protection (e.g. via headers) on an HTTP request.\n *\n * @deprecated use \\@angular/common/http instead\n * @abstract\n */\nclass XSRFStrategy {\n}\n/**\n * Interface for options to construct a RequestOptions, based on\n * [RequestInit](https://fetch.spec.whatwg.org/#requestinit) from the Fetch spec.\n *\n * @deprecated use \\@angular/common/http instead\n * @record\n */\n\n/**\n * Required structure when constructing new Request();\n * @record\n */\n\n/**\n * Interface for options to construct a Response, based on\n * [ResponseInit](https://fetch.spec.whatwg.org/#responseinit) from the Fetch spec.\n *\n * @deprecated use \\@angular/common/http instead\n * @record\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} method\n * @return {?}\n */\nfunction normalizeMethodName(method) {\n if (typeof method !== 'string')\n return method;\n switch (method.toUpperCase()) {\n case 'GET':\n return RequestMethod.Get;\n case 'POST':\n return RequestMethod.Post;\n case 'PUT':\n return RequestMethod.Put;\n case 'DELETE':\n return RequestMethod.Delete;\n case 'OPTIONS':\n return RequestMethod.Options;\n case 'HEAD':\n return RequestMethod.Head;\n case 'PATCH':\n return RequestMethod.Patch;\n }\n throw new Error(`Invalid request method. The method \"${method}\" is not supported.`);\n}\nconst isSuccess = (status) => (status >= 200 && status < 300);\n/**\n * @param {?} xhr\n * @return {?}\n */\nfunction getResponseURL(xhr) {\n if ('responseURL' in xhr) {\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 * @param {?} input\n * @return {?}\n */\n\n/**\n * @param {?} input\n * @return {?}\n */\nfunction stringToArrayBuffer(input) {\n const /** @type {?} */ view = new Uint16Array(input.length);\n for (let /** @type {?} */ i = 0, /** @type {?} */ strLen = input.length; i < strLen; i++) {\n view[i] = input.charCodeAt(i);\n }\n return view.buffer;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?=} rawParams\n * @return {?}\n */\nfunction paramParser(rawParams = '') {\n const /** @type {?} */ map = new Map();\n if (rawParams.length > 0) {\n const /** @type {?} */ params = rawParams.split('&');\n params.forEach((param) => {\n const /** @type {?} */ eqIdx = param.indexOf('=');\n const [key, val] = eqIdx == -1 ? [param, ''] : [param.slice(0, eqIdx), param.slice(eqIdx + 1)];\n const /** @type {?} */ list = map.get(key) || [];\n list.push(val);\n map.set(key, list);\n });\n }\n return map;\n}\n/**\n * @deprecated use \\@angular/common/http instead\n *\n */\nclass QueryEncoder {\n /**\n * @param {?} k\n * @return {?}\n */\n encodeKey(k) { return standardEncoding(k); }\n /**\n * @param {?} v\n * @return {?}\n */\n encodeValue(v) { return standardEncoding(v); }\n}\n/**\n * @param {?} v\n * @return {?}\n */\nfunction standardEncoding(v) {\n return encodeURIComponent(v)\n .replace(/%40/gi, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/gi, '$')\n .replace(/%2C/gi, ',')\n .replace(/%3B/gi, ';')\n .replace(/%2B/gi, '+')\n .replace(/%3D/gi, '=')\n .replace(/%3F/gi, '?')\n .replace(/%2F/gi, '/');\n}\n/**\n * Map-like representation of url search parameters, based on\n * [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams) in the url living standard,\n * with several extensions for merging URLSearchParams objects:\n * - setAll()\n * - appendAll()\n * - replaceAll()\n *\n * This class accepts an optional second parameter of ${\\@link QueryEncoder},\n * which is used to serialize parameters before making a request. By default,\n * `QueryEncoder` encodes keys and values of parameters using `encodeURIComponent`,\n * and then un-encodes certain characters that are allowed to be part of the query\n * according to IETF RFC 3986: https://tools.ietf.org/html/rfc3986.\n *\n * These are the characters that are not encoded: `! $ \\' ( ) * + , ; A 9 - . _ ~ ? /`\n *\n * If the set of allowed query characters is not acceptable for a particular backend,\n * `QueryEncoder` can be subclassed and provided as the 2nd argument to URLSearchParams.\n *\n * ```\n * import {URLSearchParams, QueryEncoder} from '\\@angular/http';\n * class MyQueryEncoder extends QueryEncoder {\n * encodeKey(k: string): string {\n * return myEncodingFunction(k);\n * }\n *\n * encodeValue(v: string): string {\n * return myEncodingFunction(v);\n * }\n * }\n *\n * let params = new URLSearchParams('', new MyQueryEncoder());\n * ```\n * @deprecated use \\@angular/common/http instead\n */\nclass URLSearchParams {\n /**\n * @param {?=} rawParams\n * @param {?=} queryEncoder\n */\n constructor(rawParams = '', queryEncoder = new QueryEncoder()) {\n this.rawParams = rawParams;\n this.queryEncoder = queryEncoder;\n this.paramsMap = paramParser(rawParams);\n }\n /**\n * @return {?}\n */\n clone() {\n const /** @type {?} */ clone = new URLSearchParams('', this.queryEncoder);\n clone.appendAll(this);\n return clone;\n }\n /**\n * @param {?} param\n * @return {?}\n */\n has(param) { return this.paramsMap.has(param); }\n /**\n * @param {?} param\n * @return {?}\n */\n get(param) {\n const /** @type {?} */ storedParam = this.paramsMap.get(param);\n return Array.isArray(storedParam) ? storedParam[0] : null;\n }\n /**\n * @param {?} param\n * @return {?}\n */\n getAll(param) { return this.paramsMap.get(param) || []; }\n /**\n * @param {?} param\n * @param {?} val\n * @return {?}\n */\n set(param, val) {\n if (val === void 0 || val === null) {\n this.delete(param);\n return;\n }\n const /** @type {?} */ list = this.paramsMap.get(param) || [];\n list.length = 0;\n list.push(val);\n this.paramsMap.set(param, list);\n }\n /**\n * @param {?} searchParams\n * @return {?}\n */\n setAll(searchParams) {\n searchParams.paramsMap.forEach((value, param) => {\n const /** @type {?} */ list = this.paramsMap.get(param) || [];\n list.length = 0;\n list.push(value[0]);\n this.paramsMap.set(param, list);\n });\n }\n /**\n * @param {?} param\n * @param {?} val\n * @return {?}\n */\n append(param, val) {\n if (val === void 0 || val === null)\n return;\n const /** @type {?} */ list = this.paramsMap.get(param) || [];\n list.push(val);\n this.paramsMap.set(param, list);\n }\n /**\n * @param {?} searchParams\n * @return {?}\n */\n appendAll(searchParams) {\n searchParams.paramsMap.forEach((value, param) => {\n const /** @type {?} */ list = this.paramsMap.get(param) || [];\n for (let /** @type {?} */ i = 0; i < value.length; ++i) {\n list.push(value[i]);\n }\n this.paramsMap.set(param, list);\n });\n }\n /**\n * @param {?} searchParams\n * @return {?}\n */\n replaceAll(searchParams) {\n searchParams.paramsMap.forEach((value, param) => {\n const /** @type {?} */ list = this.paramsMap.get(param) || [];\n list.length = 0;\n for (let /** @type {?} */ i = 0; i < value.length; ++i) {\n list.push(value[i]);\n }\n this.paramsMap.set(param, list);\n });\n }\n /**\n * @return {?}\n */\n toString() {\n const /** @type {?} */ paramsList = [];\n this.paramsMap.forEach((values, k) => {\n values.forEach(v => paramsList.push(this.queryEncoder.encodeKey(k) + '=' + this.queryEncoder.encodeValue(v)));\n });\n return paramsList.join('&');\n }\n /**\n * @param {?} param\n * @return {?}\n */\n delete(param) { this.paramsMap.delete(param); }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * HTTP request body used by both {\\@link Request} and {\\@link Response}\n * https://fetch.spec.whatwg.org/#body\n * @abstract\n */\nclass Body {\n /**\n * Attempts to return body as parsed `JSON` object, or raises an exception.\n * @return {?}\n */\n json() {\n if (typeof this._body === 'string') {\n return JSON.parse(/** @type {?} */ (this._body));\n }\n if (this._body instanceof ArrayBuffer) {\n return JSON.parse(this.text());\n }\n return this._body;\n }\n /**\n * Returns the body as a string, presuming `toString()` can be called on the response body.\n *\n * When decoding an `ArrayBuffer`, the optional `encodingHint` parameter determines how the\n * bytes in the buffer will be interpreted. Valid values are:\n *\n * - `legacy` - incorrectly interpret the bytes as UTF-16 (technically, UCS-2). Only characters\n * in the Basic Multilingual Plane are supported, surrogate pairs are not handled correctly.\n * In addition, the endianness of the 16-bit octet pairs in the `ArrayBuffer` is not taken\n * into consideration. This is the default behavior to avoid breaking apps, but should be\n * considered deprecated.\n *\n * - `iso-8859` - interpret the bytes as ISO-8859 (which can be used for ASCII encoded text).\n * @param {?=} encodingHint\n * @return {?}\n */\n text(encodingHint = 'legacy') {\n if (this._body instanceof URLSearchParams) {\n return this._body.toString();\n }\n if (this._body instanceof ArrayBuffer) {\n switch (encodingHint) {\n case 'legacy':\n return String.fromCharCode.apply(null, new Uint16Array(/** @type {?} */ (this._body)));\n case 'iso-8859':\n return String.fromCharCode.apply(null, new Uint8Array(/** @type {?} */ (this._body)));\n default:\n throw new Error(`Invalid value for encodingHint: ${encodingHint}`);\n }\n }\n if (this._body == null) {\n return '';\n }\n if (typeof this._body === 'object') {\n return JSON.stringify(this._body, null, 2);\n }\n return this._body.toString();\n }\n /**\n * Return the body as an ArrayBuffer\n * @return {?}\n */\n arrayBuffer() {\n if (this._body instanceof ArrayBuffer) {\n return /** @type {?} */ (this._body);\n }\n return stringToArrayBuffer(this.text());\n }\n /**\n * Returns the request's body as a Blob, assuming that body exists.\n * @return {?}\n */\n blob() {\n if (this._body instanceof Blob) {\n return /** @type {?} */ (this._body);\n }\n if (this._body instanceof ArrayBuffer) {\n return new Blob([this._body]);\n }\n throw new Error('The request body isn\\'t either a blob or an array buffer');\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Creates `Response` instances from provided values.\n *\n * Though this object isn't\n * usually instantiated by end-users, it is the primary object interacted with when it comes time to\n * add data to a view.\n *\n * ### Example\n *\n * ```\n * http.request('my-friends.txt').subscribe(response => this.friends = response.text());\n * ```\n *\n * The Response's interface is inspired by the Response constructor defined in the [Fetch\n * Spec](https://fetch.spec.whatwg.org/#response-class), but is considered a static value whose body\n * can be accessed many times. There are other differences in the implementation, but this is the\n * most significant.\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass Response extends Body {\n /**\n * @param {?} responseOptions\n */\n constructor(responseOptions) {\n super();\n this._body = responseOptions.body;\n this.status = /** @type {?} */ ((responseOptions.status));\n this.ok = (this.status >= 200 && this.status <= 299);\n this.statusText = responseOptions.statusText;\n this.headers = responseOptions.headers;\n this.type = /** @type {?} */ ((responseOptions.type));\n this.url = /** @type {?} */ ((responseOptions.url));\n }\n /**\n * @return {?}\n */\n toString() {\n return `Response with status: ${this.status} ${this.statusText} for URL: ${this.url}`;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nlet _nextRequestId = 0;\nconst JSONP_HOME = '__ng_jsonp__';\nlet _jsonpConnections = null;\n/**\n * @return {?}\n */\nfunction _getJsonpConnections() {\n const /** @type {?} */ w = typeof window == 'object' ? window : {};\n if (_jsonpConnections === null) {\n _jsonpConnections = w[JSONP_HOME] = {};\n }\n return _jsonpConnections;\n}\nclass BrowserJsonp {\n /**\n * @param {?} url\n * @return {?}\n */\n build(url) {\n const /** @type {?} */ node = document.createElement('script');\n node.src = url;\n return node;\n }\n /**\n * @return {?}\n */\n nextRequestID() { return `__req${_nextRequestId++}`; }\n /**\n * @param {?} id\n * @return {?}\n */\n requestCallback(id) { return `${JSONP_HOME}.${id}.finished`; }\n /**\n * @param {?} id\n * @param {?} connection\n * @return {?}\n */\n exposeConnection(id, connection) {\n const /** @type {?} */ connections = _getJsonpConnections();\n connections[id] = connection;\n }\n /**\n * @param {?} id\n * @return {?}\n */\n removeConnection(id) {\n const /** @type {?} */ connections = _getJsonpConnections();\n connections[id] = null;\n }\n /**\n * @param {?} node\n * @return {?}\n */\n send(node) { document.body.appendChild(/** @type {?} */ ((node))); }\n /**\n * @param {?} node\n * @return {?}\n */\n cleanup(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(/** @type {?} */ ((node)));\n }\n }\n}\nBrowserJsonp.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nBrowserJsonp.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\nconst JSONP_ERR_WRONG_METHOD = 'JSONP requests must use GET request method.';\n/**\n * Base class for an in-flight JSONP request.\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass JSONPConnection {\n /**\n * \\@internal\n * @param {?} req\n * @param {?} _dom\n * @param {?=} baseResponseOptions\n */\n constructor(req, _dom, baseResponseOptions) {\n this._dom = _dom;\n this.baseResponseOptions = baseResponseOptions;\n this._finished = false;\n if (req.method !== RequestMethod.Get) {\n throw new TypeError(JSONP_ERR_WRONG_METHOD);\n }\n this.request = req;\n this.response = new Observable((responseObserver) => {\n this.readyState = ReadyState.Loading;\n const /** @type {?} */ id = this._id = _dom.nextRequestID();\n _dom.exposeConnection(id, this);\n // Workaround Dart\n // url = url.replace(/=JSONP_CALLBACK(&|$)/, `generated method`);\n const /** @type {?} */ callback = _dom.requestCallback(this._id);\n let /** @type {?} */ url = req.url;\n if (url.indexOf('=JSONP_CALLBACK&') > -1) {\n url = url.replace('=JSONP_CALLBACK&', `=${callback}&`);\n }\n else if (url.lastIndexOf('=JSONP_CALLBACK') === url.length - '=JSONP_CALLBACK'.length) {\n url = url.substring(0, url.length - '=JSONP_CALLBACK'.length) + `=${callback}`;\n }\n const /** @type {?} */ script = this._script = _dom.build(url);\n const /** @type {?} */ onLoad = (event) => {\n if (this.readyState === ReadyState.Cancelled)\n return;\n this.readyState = ReadyState.Done;\n _dom.cleanup(script);\n if (!this._finished) {\n let /** @type {?} */ responseOptions = new ResponseOptions({ body: JSONP_ERR_NO_CALLBACK, type: ResponseType.Error, url });\n if (baseResponseOptions) {\n responseOptions = baseResponseOptions.merge(responseOptions);\n }\n responseObserver.error(new Response(responseOptions));\n return;\n }\n let /** @type {?} */ responseOptions = new ResponseOptions({ body: this._responseData, url });\n if (this.baseResponseOptions) {\n responseOptions = this.baseResponseOptions.merge(responseOptions);\n }\n responseObserver.next(new Response(responseOptions));\n responseObserver.complete();\n };\n const /** @type {?} */ onError = (error) => {\n if (this.readyState === ReadyState.Cancelled)\n return;\n this.readyState = ReadyState.Done;\n _dom.cleanup(script);\n let /** @type {?} */ responseOptions = new ResponseOptions({ body: error.message, type: ResponseType.Error });\n if (baseResponseOptions) {\n responseOptions = baseResponseOptions.merge(responseOptions);\n }\n responseObserver.error(new Response(responseOptions));\n };\n script.addEventListener('load', onLoad);\n script.addEventListener('error', onError);\n _dom.send(script);\n return () => {\n this.readyState = ReadyState.Cancelled;\n script.removeEventListener('load', onLoad);\n script.removeEventListener('error', onError);\n this._dom.cleanup(script);\n };\n });\n }\n /**\n * Callback called when the JSONP request completes, to notify the application\n * of the new data.\n * @param {?=} data\n * @return {?}\n */\n finished(data) {\n // Don't leak connections\n this._finished = true;\n this._dom.removeConnection(this._id);\n if (this.readyState === ReadyState.Cancelled)\n return;\n this._responseData = data;\n }\n}\n/**\n * A {\\@link ConnectionBackend} that uses the JSONP strategy of making requests.\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass JSONPBackend extends ConnectionBackend {\n /**\n * \\@internal\n * @param {?} _browserJSONP\n * @param {?} _baseResponseOptions\n */\n constructor(_browserJSONP, _baseResponseOptions) {\n super();\n this._browserJSONP = _browserJSONP;\n this._baseResponseOptions = _baseResponseOptions;\n }\n /**\n * @param {?} request\n * @return {?}\n */\n createConnection(request) {\n return new JSONPConnection(request, this._browserJSONP, this._baseResponseOptions);\n }\n}\nJSONPBackend.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nJSONPBackend.ctorParameters = () => [\n { type: BrowserJsonp, },\n { type: ResponseOptions, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n/**\n * Creates connections using `XMLHttpRequest`. Given a fully-qualified\n * request, an `XHRConnection` will immediately create an `XMLHttpRequest` object and send the\n * request.\n *\n * This class would typically not be created or interacted with directly inside applications, though\n * the {\\@link MockConnection} may be interacted with in tests.\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass XHRConnection {\n /**\n * @param {?} req\n * @param {?} browserXHR\n * @param {?=} baseResponseOptions\n */\n constructor(req, browserXHR, baseResponseOptions) {\n this.request = req;\n this.response = new Observable((responseObserver) => {\n const /** @type {?} */ _xhr = browserXHR.build();\n _xhr.open(RequestMethod[req.method].toUpperCase(), req.url);\n if (req.withCredentials != null) {\n _xhr.withCredentials = req.withCredentials;\n }\n // load event handler\n const /** @type {?} */ onLoad = () => {\n // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n let /** @type {?} */ status = _xhr.status === 1223 ? 204 : _xhr.status;\n let /** @type {?} */ body = null;\n // HTTP 204 means no content\n if (status !== 204) {\n // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n // response/responseType properties were introduced in ResourceLoader Level2 spec\n // (supported by IE10)\n body = (typeof _xhr.response === 'undefined') ? _xhr.responseText : _xhr.response;\n // Implicitly strip a potential XSSI prefix.\n if (typeof body === 'string') {\n body = body.replace(XSSI_PREFIX, '');\n }\n }\n // fix status code when it is 0 (0 status is undocumented).\n // Occurs when accessing file resources or on Android 4.1 stock browser\n // while retrieving files from application cache.\n if (status === 0) {\n status = body ? 200 : 0;\n }\n const /** @type {?} */ headers = Headers.fromResponseHeaderString(_xhr.getAllResponseHeaders());\n // IE 9 does not provide the way to get URL of response\n const /** @type {?} */ url = getResponseURL(_xhr) || req.url;\n const /** @type {?} */ statusText = _xhr.statusText || 'OK';\n let /** @type {?} */ responseOptions = new ResponseOptions({ body, status, headers, statusText, url });\n if (baseResponseOptions != null) {\n responseOptions = baseResponseOptions.merge(responseOptions);\n }\n const /** @type {?} */ response = new Response(responseOptions);\n response.ok = isSuccess(status);\n if (response.ok) {\n responseObserver.next(response);\n // TODO(gdi2290): defer complete if array buffer until done\n responseObserver.complete();\n return;\n }\n responseObserver.error(response);\n };\n // error event handler\n const /** @type {?} */ onError = (err) => {\n let /** @type {?} */ responseOptions = new ResponseOptions({\n body: err,\n type: ResponseType.Error,\n status: _xhr.status,\n statusText: _xhr.statusText,\n });\n if (baseResponseOptions != null) {\n responseOptions = baseResponseOptions.merge(responseOptions);\n }\n responseObserver.error(new Response(responseOptions));\n };\n this.setDetectedContentType(req, _xhr);\n if (req.headers == null) {\n req.headers = new Headers();\n }\n if (!req.headers.has('Accept')) {\n req.headers.append('Accept', 'application/json, text/plain, */*');\n }\n req.headers.forEach((values, name) => _xhr.setRequestHeader(/** @type {?} */ ((name)), values.join(',')));\n // Select the correct buffer type to store the response\n if (req.responseType != null && _xhr.responseType != null) {\n switch (req.responseType) {\n case ResponseContentType.ArrayBuffer:\n _xhr.responseType = 'arraybuffer';\n break;\n case ResponseContentType.Json:\n _xhr.responseType = 'json';\n break;\n case ResponseContentType.Text:\n _xhr.responseType = 'text';\n break;\n case ResponseContentType.Blob:\n _xhr.responseType = 'blob';\n break;\n default:\n throw new Error('The selected responseType is not supported');\n }\n }\n _xhr.addEventListener('load', onLoad);\n _xhr.addEventListener('error', onError);\n _xhr.send(this.request.getBody());\n return () => {\n _xhr.removeEventListener('load', onLoad);\n _xhr.removeEventListener('error', onError);\n _xhr.abort();\n };\n });\n }\n /**\n * @param {?} req\n * @param {?} _xhr\n * @return {?}\n */\n setDetectedContentType(req /** TODO Request */, _xhr /** XMLHttpRequest */) {\n // Skip if a custom Content-Type header is provided\n if (req.headers != null && req.headers.get('Content-Type') != null) {\n return;\n }\n // Set the detected content type\n switch (req.contentType) {\n case ContentType.NONE:\n break;\n case ContentType.JSON:\n _xhr.setRequestHeader('content-type', 'application/json');\n break;\n case ContentType.FORM:\n _xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n break;\n case ContentType.TEXT:\n _xhr.setRequestHeader('content-type', 'text/plain');\n break;\n case ContentType.BLOB:\n const /** @type {?} */ blob = req.blob();\n if (blob.type) {\n _xhr.setRequestHeader('content-type', blob.type);\n }\n break;\n }\n }\n}\n/**\n * `XSRFConfiguration` sets up Cross Site Request Forgery (XSRF) protection for the application\n * using a cookie. See https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)\n * for more information on XSRF.\n *\n * Applications can configure custom cookie and header names by binding an instance of this class\n * with different `cookieName` and `headerName` values. See the main HTTP documentation for more\n * details.\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass CookieXSRFStrategy {\n /**\n * @param {?=} _cookieName\n * @param {?=} _headerName\n */\n constructor(_cookieName = 'XSRF-TOKEN', _headerName = 'X-XSRF-TOKEN') {\n this._cookieName = _cookieName;\n this._headerName = _headerName;\n }\n /**\n * @param {?} req\n * @return {?}\n */\n configureRequest(req) {\n const /** @type {?} */ xsrfToken = ɵgetDOM().getCookie(this._cookieName);\n if (xsrfToken) {\n req.headers.set(this._headerName, xsrfToken);\n }\n }\n}\n/**\n * Creates {\\@link XHRConnection} instances.\n *\n * This class would typically not be used by end users, but could be\n * overridden if a different backend implementation should be used,\n * such as in a node backend.\n *\n * ### Example\n *\n * ```\n * import {Http, MyNodeBackend, HTTP_PROVIDERS, BaseRequestOptions} from '\\@angular/http';\n * \\@Component({\n * viewProviders: [\n * HTTP_PROVIDERS,\n * {provide: Http, useFactory: (backend, options) => {\n * return new Http(backend, options);\n * }, deps: [MyNodeBackend, BaseRequestOptions]}]\n * })\n * class MyComponent {\n * constructor(http:Http) {\n * http.request('people.json').subscribe(res => this.people = res.json());\n * }\n * }\n * ```\n * @deprecated use \\@angular/common/http instead\n */\nclass XHRBackend {\n /**\n * @param {?} _browserXHR\n * @param {?} _baseResponseOptions\n * @param {?} _xsrfStrategy\n */\n constructor(_browserXHR, _baseResponseOptions, _xsrfStrategy) {\n this._browserXHR = _browserXHR;\n this._baseResponseOptions = _baseResponseOptions;\n this._xsrfStrategy = _xsrfStrategy;\n }\n /**\n * @param {?} request\n * @return {?}\n */\n createConnection(request) {\n this._xsrfStrategy.configureRequest(request);\n return new XHRConnection(request, this._browserXHR, this._baseResponseOptions);\n }\n}\nXHRBackend.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nXHRBackend.ctorParameters = () => [\n { type: BrowserXhr, },\n { type: ResponseOptions, },\n { type: XSRFStrategy, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Creates a request options object to be optionally provided when instantiating a\n * {\\@link Request}.\n *\n * This class is based on the `RequestInit` description in the [Fetch\n * Spec](https://fetch.spec.whatwg.org/#requestinit).\n *\n * All values are null by default. Typical defaults can be found in the {\\@link BaseRequestOptions}\n * class, which sub-classes `RequestOptions`.\n *\n * ```typescript\n * import {RequestOptions, Request, RequestMethod} from '\\@angular/http';\n *\n * const options = new RequestOptions({\n * method: RequestMethod.Post,\n * url: 'https://google.com'\n * });\n * const req = new Request(options);\n * console.log('req.method:', RequestMethod[req.method]); // Post\n * console.log('options.url:', options.url); // https://google.com\n * ```\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass RequestOptions {\n /**\n * @deprecated from 4.0.0. Use params instead.\n * @return {?}\n */\n get search() { return this.params; }\n /**\n * @deprecated from 4.0.0. Use params instead.\n * @param {?} params\n * @return {?}\n */\n set search(params) { this.params = params; }\n /**\n * @param {?=} opts\n */\n constructor(opts = {}) {\n const { method, headers, body, url, search, params, withCredentials, responseType } = opts;\n this.method = method != null ? normalizeMethodName(method) : null;\n this.headers = headers != null ? headers : null;\n this.body = body != null ? body : null;\n this.url = url != null ? url : null;\n this.params = this._mergeSearchParams(params || search);\n this.withCredentials = withCredentials != null ? withCredentials : null;\n this.responseType = responseType != null ? responseType : null;\n }\n /**\n * Creates a copy of the `RequestOptions` instance, using the optional input as values to override\n * existing values. This method will not change the values of the instance on which it is being\n * called.\n *\n * Note that `headers` and `search` will override existing values completely if present in\n * the `options` object. If these values should be merged, it should be done prior to calling\n * `merge` on the `RequestOptions` instance.\n *\n * ```typescript\n * import {RequestOptions, Request, RequestMethod} from '\\@angular/http';\n *\n * const options = new RequestOptions({\n * method: RequestMethod.Post\n * });\n * const req = new Request(options.merge({\n * url: 'https://google.com'\n * }));\n * console.log('req.method:', RequestMethod[req.method]); // Post\n * console.log('options.url:', options.url); // null\n * console.log('req.url:', req.url); // https://google.com\n * ```\n * @param {?=} options\n * @return {?}\n */\n merge(options) {\n return new RequestOptions({\n method: options && options.method != null ? options.method : this.method,\n headers: options && options.headers != null ? options.headers : new Headers(this.headers),\n body: options && options.body != null ? options.body : this.body,\n url: options && options.url != null ? options.url : this.url,\n params: options && this._mergeSearchParams(options.params || options.search),\n withCredentials: options && options.withCredentials != null ? options.withCredentials :\n this.withCredentials,\n responseType: options && options.responseType != null ? options.responseType :\n this.responseType\n });\n }\n /**\n * @param {?=} params\n * @return {?}\n */\n _mergeSearchParams(params) {\n if (!params)\n return this.params;\n if (params instanceof URLSearchParams) {\n return params.clone();\n }\n if (typeof params === 'string') {\n return new URLSearchParams(params);\n }\n return this._parseParams(params);\n }\n /**\n * @param {?=} objParams\n * @return {?}\n */\n _parseParams(objParams = {}) {\n const /** @type {?} */ params = new URLSearchParams();\n Object.keys(objParams).forEach((key) => {\n const /** @type {?} */ value = objParams[key];\n if (Array.isArray(value)) {\n value.forEach((item) => this._appendParam(key, item, params));\n }\n else {\n this._appendParam(key, value, params);\n }\n });\n return params;\n }\n /**\n * @param {?} key\n * @param {?} value\n * @param {?} params\n * @return {?}\n */\n _appendParam(key, value, params) {\n if (typeof value !== 'string') {\n value = JSON.stringify(value);\n }\n params.append(key, value);\n }\n}\n/**\n * Subclass of {\\@link RequestOptions}, with default values.\n *\n * Default values:\n * * method: {\\@link RequestMethod RequestMethod.Get}\n * * headers: empty {\\@link Headers} object\n *\n * This class could be extended and bound to the {\\@link RequestOptions} class\n * when configuring an {\\@link Injector}, in order to override the default options\n * used by {\\@link Http} to create and send {\\@link Request Requests}.\n *\n * ```typescript\n * import {BaseRequestOptions, RequestOptions} from '\\@angular/http';\n *\n * class MyOptions extends BaseRequestOptions {\n * search: string = 'coreTeam=true';\n * }\n *\n * {provide: RequestOptions, useClass: MyOptions};\n * ```\n *\n * The options could also be extended when manually creating a {\\@link Request}\n * object.\n *\n * ```\n * import {BaseRequestOptions, Request, RequestMethod} from '\\@angular/http';\n *\n * const options = new BaseRequestOptions();\n * const req = new Request(options.merge({\n * method: RequestMethod.Post,\n * url: 'https://google.com'\n * }));\n * console.log('req.method:', RequestMethod[req.method]); // Post\n * console.log('options.url:', options.url); // null\n * console.log('req.url:', req.url); // https://google.com\n * ```\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass BaseRequestOptions extends RequestOptions {\n constructor() { super({ method: RequestMethod.Get, headers: new Headers() }); }\n}\nBaseRequestOptions.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nBaseRequestOptions.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Creates `Request` instances from provided values.\n *\n * The Request's interface is inspired by the Request constructor defined in the [Fetch\n * Spec](https://fetch.spec.whatwg.org/#request-class),\n * but is considered a static value whose body can be accessed many times. There are other\n * differences in the implementation, but this is the most significant.\n *\n * `Request` instances are typically created by higher-level classes, like {\\@link Http} and\n * {\\@link Jsonp}, but it may occasionally be useful to explicitly create `Request` instances.\n * One such example is when creating services that wrap higher-level services, like {\\@link Http},\n * where it may be useful to generate a `Request` with arbitrary headers and search params.\n *\n * ```typescript\n * import {Injectable, Injector} from '\\@angular/core';\n * import {HTTP_PROVIDERS, Http, Request, RequestMethod} from '\\@angular/http';\n *\n * \\@Injectable()\n * class AutoAuthenticator {\n * constructor(public http:Http) {}\n * request(url:string) {\n * return this.http.request(new Request({\n * method: RequestMethod.Get,\n * url: url,\n * search: 'password=123'\n * }));\n * }\n * }\n *\n * var injector = Injector.resolveAndCreate([HTTP_PROVIDERS, AutoAuthenticator]);\n * var authenticator = injector.get(AutoAuthenticator);\n * authenticator.request('people.json').subscribe(res => {\n * //URL should have included '?password=123'\n * console.log('people', res.json());\n * });\n * ```\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass Request extends Body {\n /**\n * @param {?} requestOptions\n */\n constructor(requestOptions) {\n super();\n // TODO: assert that url is present\n const /** @type {?} */ url = requestOptions.url;\n this.url = /** @type {?} */ ((requestOptions.url));\n const /** @type {?} */ paramsArg = requestOptions.params || requestOptions.search;\n if (paramsArg) {\n let /** @type {?} */ params;\n if (typeof paramsArg === 'object' && !(paramsArg instanceof URLSearchParams)) {\n params = urlEncodeParams(paramsArg).toString();\n }\n else {\n params = paramsArg.toString();\n }\n if (params.length > 0) {\n let /** @type {?} */ prefix = '?';\n if (this.url.indexOf('?') != -1) {\n prefix = (this.url[this.url.length - 1] == '&') ? '' : '&';\n }\n // TODO: just delete search-query-looking string in url?\n this.url = url + prefix + params;\n }\n }\n this._body = requestOptions.body;\n this.method = normalizeMethodName(/** @type {?} */ ((requestOptions.method)));\n // TODO(jeffbcross): implement behavior\n // Defaults to 'omit', consistent with browser\n this.headers = new Headers(requestOptions.headers);\n this.contentType = this.detectContentType();\n this.withCredentials = /** @type {?} */ ((requestOptions.withCredentials));\n this.responseType = /** @type {?} */ ((requestOptions.responseType));\n }\n /**\n * Returns the content type enum based on header options.\n * @return {?}\n */\n detectContentType() {\n switch (this.headers.get('content-type')) {\n case 'application/json':\n return ContentType.JSON;\n case 'application/x-www-form-urlencoded':\n return ContentType.FORM;\n case 'multipart/form-data':\n return ContentType.FORM_DATA;\n case 'text/plain':\n case 'text/html':\n return ContentType.TEXT;\n case 'application/octet-stream':\n return this._body instanceof ArrayBuffer$1 ? ContentType.ARRAY_BUFFER : ContentType.BLOB;\n default:\n return this.detectContentTypeFromBody();\n }\n }\n /**\n * Returns the content type of request's body based on its type.\n * @return {?}\n */\n detectContentTypeFromBody() {\n if (this._body == null) {\n return ContentType.NONE;\n }\n else if (this._body instanceof URLSearchParams) {\n return ContentType.FORM;\n }\n else if (this._body instanceof FormData) {\n return ContentType.FORM_DATA;\n }\n else if (this._body instanceof Blob$1) {\n return ContentType.BLOB;\n }\n else if (this._body instanceof ArrayBuffer$1) {\n return ContentType.ARRAY_BUFFER;\n }\n else if (this._body && typeof this._body === 'object') {\n return ContentType.JSON;\n }\n else {\n return ContentType.TEXT;\n }\n }\n /**\n * Returns the request's body according to its type. If body is undefined, return\n * null.\n * @return {?}\n */\n getBody() {\n switch (this.contentType) {\n case ContentType.JSON:\n return this.text();\n case ContentType.FORM:\n return this.text();\n case ContentType.FORM_DATA:\n return this._body;\n case ContentType.TEXT:\n return this.text();\n case ContentType.BLOB:\n return this.blob();\n case ContentType.ARRAY_BUFFER:\n return this.arrayBuffer();\n default:\n return null;\n }\n }\n}\n/**\n * @param {?} params\n * @return {?}\n */\nfunction urlEncodeParams(params) {\n const /** @type {?} */ searchParams = new URLSearchParams();\n Object.keys(params).forEach(key => {\n const /** @type {?} */ value = params[key];\n if (value && Array.isArray(value)) {\n value.forEach(element => searchParams.append(key, element.toString()));\n }\n else {\n searchParams.append(key, value.toString());\n }\n });\n return searchParams;\n}\nconst noop = function () { };\nconst w = typeof window == 'object' ? window : noop;\nconst FormData = (/** @type {?} */ (w /** TODO #9100 */) /** TODO #9100 */)['FormData'] || noop;\nconst Blob$1 = (/** @type {?} */ (w /** TODO #9100 */) /** TODO #9100 */)['Blob'] || noop;\nconst ArrayBuffer$1 = (/** @type {?} */ (w /** TODO #9100 */) /** TODO #9100 */)['ArrayBuffer'] || noop;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} backend\n * @param {?} request\n * @return {?}\n */\nfunction httpRequest(backend, request) {\n return backend.createConnection(request).response;\n}\n/**\n * @param {?} defaultOpts\n * @param {?} providedOpts\n * @param {?} method\n * @param {?} url\n * @return {?}\n */\nfunction mergeOptions(defaultOpts, providedOpts, method, url) {\n const /** @type {?} */ newOptions = defaultOpts;\n if (providedOpts) {\n // Hack so Dart can used named parameters\n return /** @type {?} */ (newOptions.merge(new RequestOptions({\n method: providedOpts.method || method,\n url: providedOpts.url || url,\n search: providedOpts.search,\n params: providedOpts.params,\n headers: providedOpts.headers,\n body: providedOpts.body,\n withCredentials: providedOpts.withCredentials,\n responseType: providedOpts.responseType\n })));\n }\n return /** @type {?} */ (newOptions.merge(new RequestOptions({ method, url })));\n}\n/**\n * Performs http requests using `XMLHttpRequest` as the default backend.\n *\n * `Http` is available as an injectable class, with methods to perform http requests. Calling\n * `request` returns an `Observable` which will emit a single {\\@link Response} when a\n * response is received.\n *\n * ### Example\n *\n * ```typescript\n * import {Http, HTTP_PROVIDERS} from '\\@angular/http';\n * import 'rxjs/add/operator/map'\n * \\@Component({\n * selector: 'http-app',\n * viewProviders: [HTTP_PROVIDERS],\n * templateUrl: 'people.html'\n * })\n * class PeopleComponent {\n * constructor(http: Http) {\n * http.get('people.json')\n * // Call map on the response observable to get the parsed people object\n * .map(res => res.json())\n * // Subscribe to the observable to get the parsed people object and attach it to the\n * // component\n * .subscribe(people => this.people = people);\n * }\n * }\n * ```\n *\n *\n * ### Example\n *\n * ```\n * http.get('people.json').subscribe((res:Response) => this.people = res.json());\n * ```\n *\n * The default construct used to perform requests, `XMLHttpRequest`, is abstracted as a \"Backend\" (\n * {\\@link XHRBackend} in this case), which could be mocked with dependency injection by replacing\n * the {\\@link XHRBackend} provider, as in the following example:\n *\n * ### Example\n *\n * ```typescript\n * import {BaseRequestOptions, Http} from '\\@angular/http';\n * import {MockBackend} from '\\@angular/http/testing';\n * var injector = Injector.resolveAndCreate([\n * BaseRequestOptions,\n * MockBackend,\n * {provide: Http, useFactory:\n * function(backend, defaultOptions) {\n * return new Http(backend, defaultOptions);\n * },\n * deps: [MockBackend, BaseRequestOptions]}\n * ]);\n * var http = injector.get(Http);\n * http.get('request-from-mock-backend.json').subscribe((res:Response) => doSomething(res));\n * ```\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass Http {\n /**\n * @param {?} _backend\n * @param {?} _defaultOptions\n */\n constructor(_backend, _defaultOptions) {\n this._backend = _backend;\n this._defaultOptions = _defaultOptions;\n }\n /**\n * Performs any type of http request. First argument is required, and can either be a url or\n * a {\\@link Request} instance. If the first argument is a url, an optional {\\@link RequestOptions}\n * object can be provided as the 2nd argument. The options object will be merged with the values\n * of {\\@link BaseRequestOptions} before performing the request.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n request(url, options) {\n let /** @type {?} */ responseObservable;\n if (typeof url === 'string') {\n responseObservable = httpRequest(this._backend, new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get, /** @type {?} */ (url))));\n }\n else if (url instanceof Request) {\n responseObservable = httpRequest(this._backend, url);\n }\n else {\n throw new Error('First argument must be a url string or Request instance.');\n }\n return responseObservable;\n }\n /**\n * Performs a request with `get` http method.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n get(url, options) {\n return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get, url)));\n }\n /**\n * Performs a request with `post` http method.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n post(url, body, options) {\n return this.request(new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({ body: body })), options, RequestMethod.Post, url)));\n }\n /**\n * Performs a request with `put` http method.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n put(url, body, options) {\n return this.request(new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({ body: body })), options, RequestMethod.Put, url)));\n }\n /**\n * Performs a request with `delete` http method.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n delete(url, options) {\n return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Delete, url)));\n }\n /**\n * Performs a request with `patch` http method.\n * @param {?} url\n * @param {?} body\n * @param {?=} options\n * @return {?}\n */\n patch(url, body, options) {\n return this.request(new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({ body: body })), options, RequestMethod.Patch, url)));\n }\n /**\n * Performs a request with `head` http method.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n head(url, options) {\n return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Head, url)));\n }\n /**\n * Performs a request with `options` http method.\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n options(url, options) {\n return this.request(new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Options, url)));\n }\n}\nHttp.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nHttp.ctorParameters = () => [\n { type: ConnectionBackend, },\n { type: RequestOptions, },\n];\n/**\n * @deprecated use \\@angular/common/http instead\n */\nclass Jsonp extends Http {\n /**\n * @param {?} backend\n * @param {?} defaultOptions\n */\n constructor(backend, defaultOptions) {\n super(backend, defaultOptions);\n }\n /**\n * Performs any type of http request. First argument is required, and can either be a url or\n * a {\\@link Request} instance. If the first argument is a url, an optional {\\@link RequestOptions}\n * object can be provided as the 2nd argument. The options object will be merged with the values\n * of {\\@link BaseRequestOptions} before performing the request.\n *\n * \\@security Regular XHR is the safest alternative to JSONP for most applications, and is\n * supported by all current browsers. Because JSONP creates a `<script>` element with\n * contents retrieved from a remote source, attacker-controlled data introduced by an untrusted\n * source could expose your application to XSS risks. Data exposed by JSONP may also be\n * readable by malicious third-party websites. In addition, JSONP introduces potential risk for\n * future security issues (e.g. content sniffing). For more detail, see the\n * [Security Guide](http://g.co/ng/security).\n * @param {?} url\n * @param {?=} options\n * @return {?}\n */\n request(url, options) {\n let /** @type {?} */ responseObservable;\n if (typeof url === 'string') {\n url =\n new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get, /** @type {?} */ (url)));\n }\n if (url instanceof Request) {\n if (url.method !== RequestMethod.Get) {\n throw new Error('JSONP requests must use GET request method.');\n }\n responseObservable = httpRequest(this._backend, url);\n }\n else {\n throw new Error('First argument must be a url string or Request instance.');\n }\n return responseObservable;\n }\n}\nJsonp.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nJsonp.ctorParameters = () => [\n { type: ConnectionBackend, },\n { type: RequestOptions, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @return {?}\n */\nfunction _createDefaultCookieXSRFStrategy() {\n return new CookieXSRFStrategy();\n}\n/**\n * @param {?} xhrBackend\n * @param {?} requestOptions\n * @return {?}\n */\nfunction httpFactory(xhrBackend, requestOptions) {\n return new Http(xhrBackend, requestOptions);\n}\n/**\n * @param {?} jsonpBackend\n * @param {?} requestOptions\n * @return {?}\n */\nfunction jsonpFactory(jsonpBackend, requestOptions) {\n return new Jsonp(jsonpBackend, requestOptions);\n}\n/**\n * The module that includes http's providers\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass HttpModule {\n}\nHttpModule.decorators = [\n { type: NgModule, args: [{\n providers: [\n // TODO(pascal): use factory type annotations once supported in DI\n // issue: https://github.com/angular/angular/issues/3183\n { provide: Http, useFactory: httpFactory, deps: [XHRBackend, RequestOptions] },\n BrowserXhr,\n { provide: RequestOptions, useClass: BaseRequestOptions },\n { provide: ResponseOptions, useClass: BaseResponseOptions },\n XHRBackend,\n { provide: XSRFStrategy, useFactory: _createDefaultCookieXSRFStrategy },\n ],\n },] },\n];\n/** @nocollapse */\nHttpModule.ctorParameters = () => [];\n/**\n * The module that includes jsonp's providers\n *\n * @deprecated use \\@angular/common/http instead\n */\nclass JsonpModule {\n}\nJsonpModule.decorators = [\n { type: NgModule, args: [{\n providers: [\n // TODO(pascal): use factory type annotations once supported in DI\n // issue: https://github.com/angular/angular/issues/3183\n { provide: Jsonp, useFactory: jsonpFactory, deps: [JSONPBackend, RequestOptions] },\n BrowserJsonp,\n { provide: RequestOptions, useClass: BaseRequestOptions },\n { provide: ResponseOptions, useClass: BaseResponseOptions },\n JSONPBackend,\n ],\n },] },\n];\n/** @nocollapse */\nJsonpModule.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @deprecated use \\@angular/common/http instead\n */\nconst VERSION = new Version('5.2.10');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BrowserXhr, JSONPBackend, JSONPConnection, CookieXSRFStrategy, XHRBackend, XHRConnection, BaseRequestOptions, RequestOptions, BaseResponseOptions, ResponseOptions, ReadyState, RequestMethod, ResponseContentType, ResponseType, Headers, Http, Jsonp, HttpModule, JsonpModule, Connection, ConnectionBackend, XSRFStrategy, Request, Response, QueryEncoder, URLSearchParams, VERSION, BrowserJsonp as ɵe, Body as ɵf, _createDefaultCookieXSRFStrategy as ɵa, httpFactory as ɵb, jsonpFactory as ɵc };\n//# sourceMappingURL=http.js.map\n","import { Subscriber } from '../Subscriber';\n/**\n * Applies a given `project` function to each value emitted by the source\n * Observable, and emits the resulting values as an Observable.\n *\n * <span class=\"informal\">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),\n * it passes each source value through a transformation function to get\n * corresponding output values.</span>\n *\n * <img src=\"./img/map.png\" width=\"100%\">\n *\n * Similar to the well known `Array.prototype.map` function, this operator\n * applies a projection to each value and emits that projection in the output\n * Observable.\n *\n * @example <caption>Map every click to the clientX position of that click</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var positions = clicks.map(ev => ev.clientX);\n * positions.subscribe(x => console.log(x));\n *\n * @see {@link mapTo}\n * @see {@link pluck}\n *\n * @param {function(value: T, index: number): R} project The function to apply\n * to each `value` emitted by the source Observable. The `index` parameter is\n * the number `i` for the i-th emission that has happened since the\n * subscription, starting from the number `0`.\n * @param {any} [thisArg] An optional argument to define what `this` is in the\n * `project` function.\n * @return {Observable<R>} An Observable that emits the values from the source\n * Observable transformed by the given `project` function.\n * @method map\n * @owner Observable\n */\nexport function map(project, thisArg) {\n return function mapOperation(source) {\n if (typeof project !== 'function') {\n throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');\n }\n return source.lift(new MapOperator(project, thisArg));\n };\n}\nexport class MapOperator {\n constructor(project, thisArg) {\n this.project = project;\n this.thisArg = thisArg;\n }\n call(subscriber, source) {\n return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass MapSubscriber extends Subscriber {\n constructor(destination, project, thisArg) {\n super(destination);\n this.project = project;\n this.count = 0;\n this.thisArg = thisArg || this;\n }\n // NOTE: This looks unoptimized, but it's actually purposefully NOT\n // using try/catch optimizations.\n _next(value) {\n let result;\n try {\n result = this.project.call(this.thisArg, value, this.count++);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n }\n}\n//# sourceMappingURL=map.js.map","import { map as higherOrderMap } from '../operators/map';\n/**\n * Applies a given `project` function to each value emitted by the source\n * Observable, and emits the resulting values as an Observable.\n *\n * <span class=\"informal\">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),\n * it passes each source value through a transformation function to get\n * corresponding output values.</span>\n *\n * <img src=\"./img/map.png\" width=\"100%\">\n *\n * Similar to the well known `Array.prototype.map` function, this operator\n * applies a projection to each value and emits that projection in the output\n * Observable.\n *\n * @example <caption>Map every click to the clientX position of that click</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var positions = clicks.map(ev => ev.clientX);\n * positions.subscribe(x => console.log(x));\n *\n * @see {@link mapTo}\n * @see {@link pluck}\n *\n * @param {function(value: T, index: number): R} project The function to apply\n * to each `value` emitted by the source Observable. The `index` parameter is\n * the number `i` for the i-th emission that has happened since the\n * subscription, starting from the number `0`.\n * @param {any} [thisArg] An optional argument to define what `this` is in the\n * `project` function.\n * @return {Observable<R>} An Observable that emits the values from the source\n * Observable transformed by the given `project` function.\n * @method map\n * @owner Observable\n */\nexport function map(project, thisArg) {\n return higherOrderMap(project, thisArg)(this);\n}\n//# sourceMappingURL=map.js.map","import { Subscriber } from '../Subscriber';\nexport function refCount() {\n return function refCountOperatorFunction(source) {\n return source.lift(new RefCountOperator(source));\n };\n}\nclass RefCountOperator {\n constructor(connectable) {\n this.connectable = connectable;\n }\n call(subscriber, source) {\n const { connectable } = this;\n connectable._refCount++;\n const refCounter = new RefCountSubscriber(subscriber, connectable);\n const subscription = source.subscribe(refCounter);\n if (!refCounter.closed) {\n refCounter.connection = connectable.connect();\n }\n return subscription;\n }\n}\nclass RefCountSubscriber extends Subscriber {\n constructor(destination, connectable) {\n super(destination);\n this.connectable = connectable;\n }\n /** @deprecated internal use only */ _unsubscribe() {\n const { connectable } = this;\n if (!connectable) {\n this.connection = null;\n return;\n }\n this.connectable = null;\n const refCount = connectable._refCount;\n if (refCount <= 0) {\n this.connection = null;\n return;\n }\n connectable._refCount = refCount - 1;\n if (refCount > 1) {\n this.connection = null;\n return;\n }\n ///\n // Compare the local RefCountSubscriber's connection Subscription to the\n // connection Subscription on the shared ConnectableObservable. In cases\n // where the ConnectableObservable source synchronously emits values, and\n // the RefCountSubscriber's downstream Observers synchronously unsubscribe,\n // execution continues to here before the RefCountOperator has a chance to\n // supply the RefCountSubscriber with the shared connection Subscription.\n // For example:\n // ```\n // Observable.range(0, 10)\n // .publish()\n // .refCount()\n // .take(5)\n // .subscribe();\n // ```\n // In order to account for this case, RefCountSubscriber should only dispose\n // the ConnectableObservable's shared connection Subscription if the\n // connection Subscription exists, *and* either:\n // a. RefCountSubscriber doesn't have a reference to the shared connection\n // Subscription yet, or,\n // b. RefCountSubscriber's connection Subscription reference is identical\n // to the shared connection Subscription\n ///\n const { connection } = this;\n const sharedConnection = connectable._connection;\n this.connection = null;\n if (sharedConnection && (!connection || sharedConnection === connection)) {\n sharedConnection.unsubscribe();\n }\n }\n}\n//# sourceMappingURL=refCount.js.map","import { SubjectSubscriber } from '../Subject';\nimport { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nimport { refCount as higherOrderRefCount } from '../operators/refCount';\n/**\n * @class ConnectableObservable<T>\n */\nexport class ConnectableObservable extends Observable {\n constructor(/** @deprecated internal use only */ source, \n /** @deprecated internal use only */ subjectFactory) {\n super();\n this.source = source;\n this.subjectFactory = subjectFactory;\n /** @deprecated internal use only */ this._refCount = 0;\n this._isComplete = false;\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n return this.getSubject().subscribe(subscriber);\n }\n /** @deprecated internal use only */ getSubject() {\n const subject = this._subject;\n if (!subject || subject.isStopped) {\n this._subject = this.subjectFactory();\n }\n return this._subject;\n }\n connect() {\n let connection = this._connection;\n if (!connection) {\n this._isComplete = false;\n connection = this._connection = new Subscription();\n connection.add(this.source\n .subscribe(new ConnectableSubscriber(this.getSubject(), this)));\n if (connection.closed) {\n this._connection = null;\n connection = Subscription.EMPTY;\n }\n else {\n this._connection = connection;\n }\n }\n return connection;\n }\n refCount() {\n return higherOrderRefCount()(this);\n }\n}\nconst connectableProto = ConnectableObservable.prototype;\nexport const connectableObservableDescriptor = {\n operator: { value: null },\n _refCount: { value: 0, writable: true },\n _subject: { value: null, writable: true },\n _connection: { value: null, writable: true },\n _subscribe: { value: connectableProto._subscribe },\n _isComplete: { value: connectableProto._isComplete, writable: true },\n getSubject: { value: connectableProto.getSubject },\n connect: { value: connectableProto.connect },\n refCount: { value: connectableProto.refCount }\n};\nclass ConnectableSubscriber extends SubjectSubscriber {\n constructor(destination, connectable) {\n super(destination);\n this.connectable = connectable;\n }\n _error(err) {\n this._unsubscribe();\n super._error(err);\n }\n _complete() {\n this.connectable._isComplete = true;\n this._unsubscribe();\n super._complete();\n }\n /** @deprecated internal use only */ _unsubscribe() {\n const connectable = this.connectable;\n if (connectable) {\n this.connectable = null;\n const connection = connectable._connection;\n connectable._refCount = 0;\n connectable._subject = null;\n connectable._connection = null;\n if (connection) {\n connection.unsubscribe();\n }\n }\n }\n}\nclass RefCountOperator {\n constructor(connectable) {\n this.connectable = connectable;\n }\n call(subscriber, source) {\n const { connectable } = this;\n connectable._refCount++;\n const refCounter = new RefCountSubscriber(subscriber, connectable);\n const subscription = source.subscribe(refCounter);\n if (!refCounter.closed) {\n refCounter.connection = connectable.connect();\n }\n return subscription;\n }\n}\nclass RefCountSubscriber extends Subscriber {\n constructor(destination, connectable) {\n super(destination);\n this.connectable = connectable;\n }\n /** @deprecated internal use only */ _unsubscribe() {\n const { connectable } = this;\n if (!connectable) {\n this.connection = null;\n return;\n }\n this.connectable = null;\n const refCount = connectable._refCount;\n if (refCount <= 0) {\n this.connection = null;\n return;\n }\n connectable._refCount = refCount - 1;\n if (refCount > 1) {\n this.connection = null;\n return;\n }\n ///\n // Compare the local RefCountSubscriber's connection Subscription to the\n // connection Subscription on the shared ConnectableObservable. In cases\n // where the ConnectableObservable source synchronously emits values, and\n // the RefCountSubscriber's downstream Observers synchronously unsubscribe,\n // execution continues to here before the RefCountOperator has a chance to\n // supply the RefCountSubscriber with the shared connection Subscription.\n // For example:\n // ```\n // Observable.range(0, 10)\n // .publish()\n // .refCount()\n // .take(5)\n // .subscribe();\n // ```\n // In order to account for this case, RefCountSubscriber should only dispose\n // the ConnectableObservable's shared connection Subscription if the\n // connection Subscription exists, *and* either:\n // a. RefCountSubscriber doesn't have a reference to the shared connection\n // Subscription yet, or,\n // b. RefCountSubscriber's connection Subscription reference is identical\n // to the shared connection Subscription\n ///\n const { connection } = this;\n const sharedConnection = connectable._connection;\n this.connection = null;\n if (sharedConnection && (!connection || sharedConnection === connection)) {\n sharedConnection.unsubscribe();\n }\n }\n}\n//# sourceMappingURL=ConnectableObservable.js.map","import { connectableObservableDescriptor } from '../observable/ConnectableObservable';\n/* tslint:enable:max-line-length */\n/**\n * Returns an Observable that emits the results of invoking a specified selector on items\n * emitted by a ConnectableObservable that shares a single subscription to the underlying stream.\n *\n * <img src=\"./img/multicast.png\" width=\"100%\">\n *\n * @param {Function|Subject} subjectOrSubjectFactory - Factory function to create an intermediate subject through\n * which the source sequence's elements will be multicast to the selector function\n * or Subject to push source elements into.\n * @param {Function} [selector] - Optional selector function that can use the multicasted source stream\n * as many times as needed, without causing multiple subscriptions to the source stream.\n * Subscribers to the given source will receive all notifications of the source from the\n * time of the subscription forward.\n * @return {Observable} An Observable that emits the results of invoking the selector\n * on the items emitted by a `ConnectableObservable` that shares a single subscription to\n * the underlying stream.\n * @method multicast\n * @owner Observable\n */\nexport function multicast(subjectOrSubjectFactory, selector) {\n return function multicastOperatorFunction(source) {\n let subjectFactory;\n if (typeof subjectOrSubjectFactory === 'function') {\n subjectFactory = subjectOrSubjectFactory;\n }\n else {\n subjectFactory = function subjectFactory() {\n return subjectOrSubjectFactory;\n };\n }\n if (typeof selector === 'function') {\n return source.lift(new MulticastOperator(subjectFactory, selector));\n }\n const connectable = Object.create(source, connectableObservableDescriptor);\n connectable.source = source;\n connectable.subjectFactory = subjectFactory;\n return connectable;\n };\n}\nexport class MulticastOperator {\n constructor(subjectFactory, selector) {\n this.subjectFactory = subjectFactory;\n this.selector = selector;\n }\n call(subscriber, source) {\n const { selector } = this;\n const subject = this.subjectFactory();\n const subscription = selector(subject).subscribe(subscriber);\n subscription.add(source.subscribe(subject));\n return subscription;\n }\n}\n//# sourceMappingURL=multicast.js.map","import { multicast } from './multicast';\nimport { refCount } from './refCount';\nimport { Subject } from '../Subject';\nfunction shareSubjectFactory() {\n return new Subject();\n}\n/**\n * Returns a new Observable that multicasts (shares) the original Observable. As long as there is at least one\n * Subscriber this Observable will be subscribed and emitting data. When all subscribers have unsubscribed it will\n * unsubscribe from the source Observable. Because the Observable is multicasting it makes the stream `hot`.\n * This is an alias for .multicast(() => new Subject()).refCount().\n *\n * <img src=\"./img/share.png\" width=\"100%\">\n *\n * @return {Observable<T>} An Observable that upon connection causes the source Observable to emit items to its Observers.\n * @method share\n * @owner Observable\n */\nexport function share() {\n return (source) => refCount()(multicast(shareSubjectFactory)(source));\n}\n;\n//# sourceMappingURL=share.js.map","/**\n * @license Angular v5.2.10\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { Observable } from 'rxjs/Observable';\nimport { merge } from 'rxjs/observable/merge';\nimport { share } from 'rxjs/operator/share';\nimport { Subject } from 'rxjs/Subject';\nimport { Subscription } from 'rxjs/Subscription';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 * parametrized type.\n *\n * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by\n * the `Injector`. This provides additional level of type safety.\n *\n * ```\n * interface MyInterface {...}\n * var myInterface = injector.get(new InjectionToken<MyInterface>('SomeToken'));\n * // myInterface is inferred to be MyInterface.\n * ```\n *\n * ### Example\n *\n * {\\@example core/di/ts/injector_spec.ts region='InjectionToken'}\n *\n * \\@stable\n * @template T\n */\nclass InjectionToken {\n /**\n * @param {?} _desc\n */\n constructor(_desc) {\n this._desc = _desc;\n /**\n * \\@internal\n */\n this.ngMetadataName = 'InjectionToken';\n }\n /**\n * @return {?}\n */\n toString() { return `InjectionToken ${this._desc}`; }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * An interface implemented by all Angular type decorators, which allows them to be used as ES7\n * decorators as well as\n * Angular DSL syntax.\n *\n * ES7 syntax:\n *\n * ```\n * \\@ng.Component({...})\n * class MyClass {...}\n * ```\n * \\@stable\n * @record\n */\n\nconst ANNOTATIONS = '__annotations__';\nconst PARAMETERS = '__paramaters__';\nconst PROP_METADATA = '__prop__metadata__';\n/**\n * @suppress {globalThis}\n * @param {?} name\n * @param {?=} props\n * @param {?=} parentClass\n * @param {?=} chainFn\n * @return {?}\n */\nfunction makeDecorator(name, props, parentClass, chainFn) {\n const /** @type {?} */ metaCtor = makeMetadataCtor(props);\n /**\n * @param {?} objOrType\n * @return {?}\n */\n function DecoratorFactory(objOrType) {\n if (this instanceof DecoratorFactory) {\n metaCtor.call(this, objOrType);\n return this;\n }\n const /** @type {?} */ annotationInstance = new (/** @type {?} */ (DecoratorFactory))(objOrType);\n const /** @type {?} */ TypeDecorator = /** @type {?} */ (function TypeDecorator(cls) {\n // Use of Object.defineProperty is important since it creates non-enumerable property which\n // prevents the property is copied during subclassing.\n const /** @type {?} */ annotations = cls.hasOwnProperty(ANNOTATIONS) ?\n (/** @type {?} */ (cls))[ANNOTATIONS] :\n Object.defineProperty(cls, ANNOTATIONS, { value: [] })[ANNOTATIONS];\n annotations.push(annotationInstance);\n return cls;\n });\n if (chainFn)\n chainFn(TypeDecorator);\n return TypeDecorator;\n }\n if (parentClass) {\n DecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n DecoratorFactory.prototype.ngMetadataName = name;\n (/** @type {?} */ (DecoratorFactory)).annotationCls = DecoratorFactory;\n return /** @type {?} */ (DecoratorFactory);\n}\n/**\n * @param {?=} props\n * @return {?}\n */\nfunction makeMetadataCtor(props) {\n return function ctor(...args) {\n if (props) {\n const /** @type {?} */ values = props(...args);\n for (const /** @type {?} */ propName in values) {\n this[propName] = values[propName];\n }\n }\n };\n}\n/**\n * @param {?} name\n * @param {?=} props\n * @param {?=} parentClass\n * @return {?}\n */\nfunction makeParamDecorator(name, props, parentClass) {\n const /** @type {?} */ metaCtor = makeMetadataCtor(props);\n /**\n * @param {...?} args\n * @return {?}\n */\n function ParamDecoratorFactory(...args) {\n if (this instanceof ParamDecoratorFactory) {\n metaCtor.apply(this, args);\n return this;\n }\n const /** @type {?} */ annotationInstance = new (/** @type {?} */ (ParamDecoratorFactory))(...args);\n (/** @type {?} */ (ParamDecorator)).annotation = annotationInstance;\n return ParamDecorator;\n /**\n * @param {?} cls\n * @param {?} unusedKey\n * @param {?} index\n * @return {?}\n */\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 /** @type {?} */ parameters = cls.hasOwnProperty(PARAMETERS) ?\n (/** @type {?} */ (cls))[PARAMETERS] :\n Object.defineProperty(cls, PARAMETERS, { value: [] })[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 (/** @type {?} */ (ParamDecoratorFactory)).annotationCls = ParamDecoratorFactory;\n return ParamDecoratorFactory;\n}\n/**\n * @param {?} name\n * @param {?=} props\n * @param {?=} parentClass\n * @return {?}\n */\nfunction makePropDecorator(name, props, parentClass) {\n const /** @type {?} */ metaCtor = makeMetadataCtor(props);\n /**\n * @param {...?} args\n * @return {?}\n */\n function PropDecoratorFactory(...args) {\n if (this instanceof PropDecoratorFactory) {\n metaCtor.apply(this, args);\n return this;\n }\n const /** @type {?} */ decoratorInstance = new (/** @type {?} */ (PropDecoratorFactory))(...args);\n return function PropDecorator(target, name) {\n const /** @type {?} */ constructor = target.constructor;\n // Use of Object.defineProperty is important since it creates non-enumerable property which\n // prevents the property is copied during subclassing.\n const /** @type {?} */ meta = constructor.hasOwnProperty(PROP_METADATA) ?\n (/** @type {?} */ (constructor))[PROP_METADATA] :\n Object.defineProperty(constructor, PROP_METADATA, { value: {} })[PROP_METADATA];\n meta[name] = meta.hasOwnProperty(name) && meta[name] || [];\n meta[name].unshift(decoratorInstance);\n };\n }\n if (parentClass) {\n PropDecoratorFactory.prototype = Object.create(parentClass.prototype);\n }\n PropDecoratorFactory.prototype.ngMetadataName = name;\n (/** @type {?} */ (PropDecoratorFactory)).annotationCls = PropDecoratorFactory;\n return PropDecoratorFactory;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * This token can be used to create a virtual provider that will populate the\n * `entryComponents` fields of components and ng modules based on its `useValue`.\n * All components that are referenced in the `useValue` value (either directly\n * or in a nested array or map) will be added to the `entryComponents` property.\n *\n * ### Example\n * The following example shows how the router can populate the `entryComponents`\n * field of an NgModule based on the router configuration which refers\n * to components.\n *\n * ```typescript\n * // helper function inside the router\n * function provideRoutes(routes) {\n * return [\n * {provide: ROUTES, useValue: routes},\n * {provide: ANALYZE_FOR_ENTRY_COMPONENTS, useValue: routes, multi: true}\n * ];\n * }\n *\n * // user code\n * let routes = [\n * {path: '/root', component: RootComp},\n * {path: '/teams', component: TeamsComp}\n * ];\n *\n * \\@NgModule({\n * providers: [provideRoutes(routes)]\n * })\n * class ModuleWithRoutes {}\n * ```\n *\n * \\@experimental\n */\nconst ANALYZE_FOR_ENTRY_COMPONENTS = new InjectionToken('AnalyzeForEntryComponents');\n/**\n * Type of the Attribute decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Attribute decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Attribute = makeParamDecorator('Attribute', (attributeName) => ({ attributeName }));\n/**\n * Base class for query metadata.\n *\n * See {\\@link ContentChildren}, {\\@link ContentChild}, {\\@link ViewChildren}, {\\@link ViewChild} for\n * more information.\n *\n * \\@stable\n * @abstract\n */\nclass Query {\n}\n/**\n * Type of the ContentChildren decorator / constructor function.\n *\n * See {\\@link ContentChildren}.\n *\n * \\@stable\n * @record\n */\n\n/**\n * ContentChildren decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst ContentChildren = makePropDecorator('ContentChildren', (selector, data = {}) => (Object.assign({ selector, first: false, isViewQuery: false, descendants: false }, data)), Query);\n/**\n * Type of the ContentChild decorator / constructor function.\n *\n *\n * \\@stable\n * @record\n */\n\n/**\n * ContentChild decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst ContentChild = makePropDecorator('ContentChild', (selector, data = {}) => (Object.assign({ selector, first: true, isViewQuery: false, descendants: true }, data)), Query);\n/**\n * Type of the ViewChildren decorator / constructor function.\n *\n * See {\\@link ViewChildren}.\n *\n * \\@stable\n * @record\n */\n\n/**\n * ViewChildren decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst ViewChildren = makePropDecorator('ViewChildren', (selector, data = {}) => (Object.assign({ selector, first: false, isViewQuery: true, descendants: true }, data)), Query);\n/**\n * Type of the ViewChild decorator / constructor function.\n *\n * See {\\@link ViewChild}\n *\n * \\@stable\n * @record\n */\n\n/**\n * ViewChild decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst ViewChild = makePropDecorator('ViewChild', (selector, data) => (Object.assign({ selector, first: true, isViewQuery: true, descendants: true }, data)), Query);\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/** @enum {number} */\nconst ChangeDetectionStrategy = {\n /**\n * `OnPush` means that the change detector's mode will be initially set to `CheckOnce`.\n */\n OnPush: 0,\n /**\n * `Default` means that the change detector's mode will be initially set to `CheckAlways`.\n */\n Default: 1,\n};\nChangeDetectionStrategy[ChangeDetectionStrategy.OnPush] = \"OnPush\";\nChangeDetectionStrategy[ChangeDetectionStrategy.Default] = \"Default\";\n/** @enum {number} */\nconst ChangeDetectorStatus = {\n /**\n * `CheckOnce` means that after calling detectChanges the mode of the change detector\n * will become `Checked`.\n */\n CheckOnce: 0,\n /**\n * `Checked` means that the change detector should be skipped until its mode changes to\n * `CheckOnce`.\n */\n Checked: 1,\n /**\n * `CheckAlways` means that after calling detectChanges the mode of the change detector\n * will remain `CheckAlways`.\n */\n CheckAlways: 2,\n /**\n * `Detached` means that the change detector sub tree is not a part of the main tree and\n * should be skipped.\n */\n Detached: 3,\n /**\n * `Errored` means that the change detector encountered an error checking a binding\n * or calling a directive lifecycle method and is now in an inconsistent state. Change\n * detectors in this state will no longer detect changes.\n */\n Errored: 4,\n /**\n * `Destroyed` means that the change detector is destroyed.\n */\n Destroyed: 5,\n};\nChangeDetectorStatus[ChangeDetectorStatus.CheckOnce] = \"CheckOnce\";\nChangeDetectorStatus[ChangeDetectorStatus.Checked] = \"Checked\";\nChangeDetectorStatus[ChangeDetectorStatus.CheckAlways] = \"CheckAlways\";\nChangeDetectorStatus[ChangeDetectorStatus.Detached] = \"Detached\";\nChangeDetectorStatus[ChangeDetectorStatus.Errored] = \"Errored\";\nChangeDetectorStatus[ChangeDetectorStatus.Destroyed] = \"Destroyed\";\n/**\n * @param {?} changeDetectionStrategy\n * @return {?}\n */\nfunction isDefaultChangeDetectionStrategy(changeDetectionStrategy) {\n return changeDetectionStrategy == null ||\n changeDetectionStrategy === ChangeDetectionStrategy.Default;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Type of the Directive decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Directive decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Directive = makeDecorator('Directive', (dir = {}) => dir);\n/**\n * Type of the Component decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Component decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Component = makeDecorator('Component', (c = {}) => (Object.assign({ changeDetection: ChangeDetectionStrategy.Default }, c)), Directive);\n/**\n * Type of the Pipe decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Pipe decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Pipe = makeDecorator('Pipe', (p) => (Object.assign({ pure: true }, p)));\n/**\n * Type of the Input decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Input decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Input = makePropDecorator('Input', (bindingPropertyName) => ({ bindingPropertyName }));\n/**\n * Type of the Output decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Output decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Output = makePropDecorator('Output', (bindingPropertyName) => ({ bindingPropertyName }));\n/**\n * Type of the HostBinding decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * HostBinding decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst HostBinding = makePropDecorator('HostBinding', (hostPropertyName) => ({ hostPropertyName }));\n/**\n * Type of the HostListener decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * HostListener decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst HostListener = makePropDecorator('HostListener', (eventName, args) => ({ eventName, args }));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A wrapper around a module that also includes the providers.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Interface for schema definitions in \\@NgModules.\n *\n * \\@experimental\n * @record\n */\n\n/**\n * Defines a schema that will allow:\n * - any non-Angular elements with a `-` in their name,\n * - any properties on elements with a `-` in their name which is the common rule for custom\n * elements.\n *\n * \\@stable\n */\nconst CUSTOM_ELEMENTS_SCHEMA = {\n name: 'custom-elements'\n};\n/**\n * Defines a schema that will allow any property on any element.\n *\n * \\@experimental\n */\nconst NO_ERRORS_SCHEMA = {\n name: 'no-errors-schema'\n};\n/**\n * Type of the NgModule decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * NgModule decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst NgModule = makeDecorator('NgModule', (ngModule) => ngModule);\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/** @enum {number} */\nconst ViewEncapsulation = {\n /**\n * Emulate `Native` scoping of styles by adding an attribute containing surrogate id to the Host\n * Element and pre-processing the style rules provided via {@link Component#styles styles} or\n * {@link Component#styleUrls styleUrls}, and adding the new Host Element attribute to all\n * selectors.\n *\n * This is the default option.\n */\n Emulated: 0,\n /**\n * Use the native encapsulation mechanism of the renderer.\n *\n * For the DOM this means using [Shadow DOM](https://w3c.github.io/webcomponents/spec/shadow/) and\n * creating a ShadowRoot for Component's Host Element.\n */\n Native: 1,\n /**\n * Don't provide any template or style encapsulation.\n */\n None: 2,\n};\nViewEncapsulation[ViewEncapsulation.Emulated] = \"Emulated\";\nViewEncapsulation[ViewEncapsulation.Native] = \"Native\";\nViewEncapsulation[ViewEncapsulation.None] = \"None\";\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Represents the version of Angular\n *\n * \\@stable\n */\nclass Version {\n /**\n * @param {?} full\n */\n constructor(full) {\n this.full = full;\n this.major = full.split('.')[0];\n this.minor = full.split('.')[1];\n this.patch = full.split('.').slice(2).join('.');\n }\n}\n/**\n * \\@stable\n */\nconst VERSION = new Version('5.2.10');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Type of the Inject decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Inject decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Inject = makeParamDecorator('Inject', (token) => ({ token }));\n/**\n * Type of the Optional decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Optional decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Optional = makeParamDecorator('Optional');\n/**\n * Type of the Injectable decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Injectable decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Injectable = makeDecorator('Injectable');\n/**\n * Type of the Self decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Self decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Self = makeParamDecorator('Self');\n/**\n * Type of the SkipSelf decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * SkipSelf decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst SkipSelf = makeParamDecorator('SkipSelf');\n/**\n * Type of the Host decorator / constructor function.\n *\n * \\@stable\n * @record\n */\n\n/**\n * Host decorator and metadata.\n *\n * \\@stable\n * \\@Annotation\n */\nconst Host = makeParamDecorator('Host');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst __window = typeof window !== 'undefined' && window;\nconst __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&\n self instanceof WorkerGlobalScope && self;\nconst __global = typeof global !== 'undefined' && global;\nconst _global = __window || __global || __self;\nconst promise = Promise.resolve(0);\nlet _symbolIterator = null;\n/**\n * @return {?}\n */\nfunction getSymbolIterator() {\n if (!_symbolIterator) {\n const /** @type {?} */ Symbol = _global['Symbol'];\n if (Symbol && Symbol.iterator) {\n _symbolIterator = Symbol.iterator;\n }\n else {\n // es6-shim specific logic\n const /** @type {?} */ keys = Object.getOwnPropertyNames(Map.prototype);\n for (let /** @type {?} */ i = 0; i < keys.length; ++i) {\n const /** @type {?} */ key = keys[i];\n if (key !== 'entries' && key !== 'size' &&\n (/** @type {?} */ (Map)).prototype[key] === Map.prototype['entries']) {\n _symbolIterator = key;\n }\n }\n }\n }\n return _symbolIterator;\n}\n/**\n * @param {?} fn\n * @return {?}\n */\nfunction scheduleMicroTask(fn) {\n if (typeof Zone === 'undefined') {\n // use promise to schedule microTask instead of use Zone\n promise.then(() => { fn && fn.apply(null, null); });\n }\n else {\n Zone.current.scheduleMicroTask('scheduleMicrotask', fn);\n }\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction looseIdentical(a, b) {\n return a === b || typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b);\n}\n/**\n * @param {?} token\n * @return {?}\n */\nfunction stringify(token) {\n if (typeof token === 'string') {\n return token;\n }\n if (token instanceof Array) {\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 /** @type {?} */ res = token.toString();\n if (res == null) {\n return '' + res;\n }\n const /** @type {?} */ newLineIndex = res.indexOf('\\n');\n return newLineIndex === -1 ? res : res.substring(0, newLineIndex);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * An interface that a function passed into {\\@link forwardRef} has to implement.\n *\n * ### Example\n *\n * {\\@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref_fn'}\n * \\@experimental\n * @record\n */\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,\n * but not yet defined. It is also used when the `token` which we use when creating a query is not\n * yet defined.\n *\n * ### Example\n * {\\@example core/di/ts/forward_ref/forward_ref_spec.ts region='forward_ref'}\n * \\@experimental\n * @param {?} forwardRefFn\n * @return {?}\n */\nfunction forwardRef(forwardRefFn) {\n (/** @type {?} */ (forwardRefFn)).__forward_ref__ = forwardRef;\n (/** @type {?} */ (forwardRefFn)).toString = function () { return stringify(this()); };\n return (/** @type {?} */ (/** @type {?} */ (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 * ### Example ([live demo](http://plnkr.co/edit/GU72mJrk1fiodChcmiDR?p=preview))\n *\n * {\\@example core/di/ts/forward_ref/forward_ref_spec.ts region='resolve_forward_ref'}\n *\n * See: {\\@link forwardRef}\n * \\@experimental\n * @param {?} type\n * @return {?}\n */\nfunction resolveForwardRef(type) {\n if (typeof type === 'function' && type.hasOwnProperty('__forward_ref__') &&\n type.__forward_ref__ === forwardRef) {\n return (/** @type {?} */ (type))();\n }\n else {\n return type;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst SOURCE = '__source';\nconst _THROW_IF_NOT_FOUND = new Object();\nconst THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;\nclass _NullInjector {\n /**\n * @param {?} token\n * @param {?=} notFoundValue\n * @return {?}\n */\n get(token, notFoundValue = _THROW_IF_NOT_FOUND) {\n if (notFoundValue === _THROW_IF_NOT_FOUND) {\n throw new Error(`NullInjectorError: No provider for ${stringify(token)}!`);\n }\n return notFoundValue;\n }\n}\n/**\n * \\@whatItDoes Injector interface\n * \\@howToUse\n * ```\n * const injector: Injector = ...;\n * injector.get(...);\n * ```\n *\n * \\@description\n * For more details, see the {\\@linkDocs guide/dependency-injection \"Dependency Injection Guide\"}.\n *\n * ### Example\n *\n * {\\@example core/di/ts/injector_spec.ts region='Injector'}\n *\n * `Injector` returns itself when given `Injector` as a token:\n * {\\@example core/di/ts/injector_spec.ts region='injectInjector'}\n *\n * \\@stable\n * @abstract\n */\nclass Injector {\n /**\n * Create a new Injector which is configure using `StaticProvider`s.\n *\n * ### Example\n *\n * {\\@example core/di/ts/provider_spec.ts region='ConstructorProvider'}\n * @param {?} options\n * @param {?=} parent\n * @return {?}\n */\n static create(options, parent) {\n if (Array.isArray(options)) {\n return new StaticInjector(options, parent);\n }\n else {\n return new StaticInjector(options.providers, options.parent, options.name || null);\n }\n }\n}\nInjector.THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND;\nInjector.NULL = new _NullInjector();\nconst IDENT = function (value) {\n return value;\n};\nconst EMPTY = /** @type {?} */ ([]);\nconst CIRCULAR = IDENT;\nconst MULTI_PROVIDER_FN = function () {\n return Array.prototype.slice.call(arguments);\n};\nconst GET_PROPERTY_NAME = /** @type {?} */ ({});\nconst ɵ2 = GET_PROPERTY_NAME;\nconst USE_VALUE = getClosureSafeProperty({ provide: String, useValue: ɵ2 });\nconst NG_TOKEN_PATH = 'ngTokenPath';\nconst NG_TEMP_TOKEN_PATH = 'ngTempTokenPath';\nconst NULL_INJECTOR = Injector.NULL;\nconst NEW_LINE = /\\n/gm;\nconst NO_NEW_LINE = 'ɵ';\nclass StaticInjector {\n /**\n * @param {?} providers\n * @param {?=} parent\n * @param {?=} source\n */\n constructor(providers, parent = NULL_INJECTOR, source = null) {\n this.parent = parent;\n this.source = source;\n const /** @type {?} */ records = this._records = new Map();\n records.set(Injector, /** @type {?} */ ({ token: Injector, fn: IDENT, deps: EMPTY, value: this, useNew: false }));\n recursivelyProcessProviders(records, providers);\n }\n /**\n * @param {?} token\n * @param {?=} notFoundValue\n * @return {?}\n */\n get(token, notFoundValue) {\n const /** @type {?} */ record = this._records.get(token);\n try {\n return tryResolveToken(token, record, this._records, this.parent, notFoundValue);\n }\n catch (/** @type {?} */ e) {\n const /** @type {?} */ tokenPath = e[NG_TEMP_TOKEN_PATH];\n if (token[SOURCE]) {\n tokenPath.unshift(token[SOURCE]);\n }\n e.message = formatError('\\n' + e.message, tokenPath, this.source);\n e[NG_TOKEN_PATH] = tokenPath;\n e[NG_TEMP_TOKEN_PATH] = null;\n throw e;\n }\n }\n /**\n * @return {?}\n */\n toString() {\n const /** @type {?} */ tokens = /** @type {?} */ ([]), /** @type {?} */ records = this._records;\n records.forEach((v, token) => tokens.push(stringify(token)));\n return `StaticInjector[${tokens.join(', ')}]`;\n }\n}\n/**\n * @param {?} provider\n * @return {?}\n */\nfunction resolveProvider(provider) {\n const /** @type {?} */ deps = computeDeps(provider);\n let /** @type {?} */ fn = IDENT;\n let /** @type {?} */ value = EMPTY;\n let /** @type {?} */ useNew = false;\n let /** @type {?} */ provide = resolveForwardRef(provider.provide);\n if (USE_VALUE in provider) {\n // We need to use USE_VALUE in provider since provider.useValue could be defined as undefined.\n value = (/** @type {?} */ (provider)).useValue;\n }\n else if ((/** @type {?} */ (provider)).useFactory) {\n fn = (/** @type {?} */ (provider)).useFactory;\n }\n else if ((/** @type {?} */ (provider)).useExisting) {\n // Just use IDENT\n }\n else if ((/** @type {?} */ (provider)).useClass) {\n useNew = true;\n fn = resolveForwardRef((/** @type {?} */ (provider)).useClass);\n }\n else if (typeof provide == 'function') {\n useNew = true;\n fn = provide;\n }\n else {\n throw staticError('StaticProvider does not have [useValue|useFactory|useExisting|useClass] or [provide] is not newable', provider);\n }\n return { deps, fn, useNew, value };\n}\n/**\n * @param {?} token\n * @return {?}\n */\nfunction multiProviderMixError(token) {\n return staticError('Cannot mix multi providers and regular providers', token);\n}\n/**\n * @param {?} records\n * @param {?} provider\n * @return {?}\n */\nfunction recursivelyProcessProviders(records, provider) {\n if (provider) {\n provider = resolveForwardRef(provider);\n if (provider instanceof Array) {\n // if we have an array recurse into the array\n for (let /** @type {?} */ i = 0; i < provider.length; i++) {\n recursivelyProcessProviders(records, provider[i]);\n }\n }\n else if (typeof provider === 'function') {\n // Functions were supported in ReflectiveInjector, but are not here. For safety give useful\n // error messages\n throw staticError('Function/Class not supported', provider);\n }\n else if (provider && typeof provider === 'object' && provider.provide) {\n // At this point we have what looks like a provider: {provide: ?, ....}\n let /** @type {?} */ token = resolveForwardRef(provider.provide);\n const /** @type {?} */ resolvedProvider = resolveProvider(provider);\n if (provider.multi === true) {\n // This is a multi provider.\n let /** @type {?} */ multiProvider = records.get(token);\n if (multiProvider) {\n if (multiProvider.fn !== MULTI_PROVIDER_FN) {\n throw multiProviderMixError(token);\n }\n }\n else {\n // Create a placeholder factory which will look up the constituents of the multi provider.\n records.set(token, multiProvider = /** @type {?} */ ({\n token: provider.provide,\n deps: [],\n useNew: false,\n fn: MULTI_PROVIDER_FN,\n value: EMPTY\n }));\n }\n // Treat the provider as the token.\n token = provider;\n multiProvider.deps.push({ token, options: 6 /* Default */ });\n }\n const /** @type {?} */ record = records.get(token);\n if (record && record.fn == MULTI_PROVIDER_FN) {\n throw multiProviderMixError(token);\n }\n records.set(token, resolvedProvider);\n }\n else {\n throw staticError('Unexpected provider', provider);\n }\n }\n}\n/**\n * @param {?} token\n * @param {?} record\n * @param {?} records\n * @param {?} parent\n * @param {?} notFoundValue\n * @return {?}\n */\nfunction tryResolveToken(token, record, records, parent, notFoundValue) {\n try {\n return resolveToken(token, record, records, parent, notFoundValue);\n }\n catch (/** @type {?} */ e) {\n // ensure that 'e' is of type Error.\n if (!(e instanceof Error)) {\n e = new Error(e);\n }\n const /** @type {?} */ path = e[NG_TEMP_TOKEN_PATH] = e[NG_TEMP_TOKEN_PATH] || [];\n path.unshift(token);\n if (record && record.value == CIRCULAR) {\n // Reset the Circular flag.\n record.value = EMPTY;\n }\n throw e;\n }\n}\n/**\n * @param {?} token\n * @param {?} record\n * @param {?} records\n * @param {?} parent\n * @param {?} notFoundValue\n * @return {?}\n */\nfunction resolveToken(token, record, records, parent, notFoundValue) {\n let /** @type {?} */ value;\n if (record) {\n // If we don't have a record, this implies that we don't own the provider hence don't know how\n // to resolve it.\n value = record.value;\n if (value == CIRCULAR) {\n throw Error(NO_NEW_LINE + 'Circular dependency');\n }\n else if (value === EMPTY) {\n record.value = CIRCULAR;\n let /** @type {?} */ obj = undefined;\n let /** @type {?} */ useNew = record.useNew;\n let /** @type {?} */ fn = record.fn;\n let /** @type {?} */ depRecords = record.deps;\n let /** @type {?} */ deps = EMPTY;\n if (depRecords.length) {\n deps = [];\n for (let /** @type {?} */ i = 0; i < depRecords.length; i++) {\n const /** @type {?} */ depRecord = depRecords[i];\n const /** @type {?} */ options = depRecord.options;\n const /** @type {?} */ childRecord = options & 2 /* CheckSelf */ ? records.get(depRecord.token) : undefined;\n deps.push(tryResolveToken(\n // Current Token to resolve\n depRecord.token, childRecord, records, \n // If we don't know how to resolve dependency and we should not check parent for it,\n // than pass in Null injector.\n !childRecord && !(options & 4 /* CheckParent */) ? NULL_INJECTOR : parent, options & 1 /* Optional */ ? null : Injector.THROW_IF_NOT_FOUND));\n }\n }\n record.value = value = useNew ? new (/** @type {?} */ (fn))(...deps) : fn.apply(obj, deps);\n }\n }\n else {\n value = parent.get(token, notFoundValue);\n }\n return value;\n}\n/**\n * @param {?} provider\n * @return {?}\n */\nfunction computeDeps(provider) {\n let /** @type {?} */ deps = EMPTY;\n const /** @type {?} */ providerDeps = (/** @type {?} */ (provider)).deps;\n if (providerDeps && providerDeps.length) {\n deps = [];\n for (let /** @type {?} */ i = 0; i < providerDeps.length; i++) {\n let /** @type {?} */ options = 6;\n let /** @type {?} */ token = resolveForwardRef(providerDeps[i]);\n if (token instanceof Array) {\n for (let /** @type {?} */ j = 0, /** @type {?} */ annotations = token; j < annotations.length; j++) {\n const /** @type {?} */ annotation = annotations[j];\n if (annotation instanceof Optional || annotation == Optional) {\n options = options | 1 /* Optional */;\n }\n else if (annotation instanceof SkipSelf || annotation == SkipSelf) {\n options = options & ~2 /* CheckSelf */;\n }\n else if (annotation instanceof Self || annotation == Self) {\n options = options & ~4 /* CheckParent */;\n }\n else if (annotation instanceof Inject) {\n token = (/** @type {?} */ (annotation)).token;\n }\n else {\n token = resolveForwardRef(annotation);\n }\n }\n }\n deps.push({ token, options });\n }\n }\n else if ((/** @type {?} */ (provider)).useExisting) {\n const /** @type {?} */ token = resolveForwardRef((/** @type {?} */ (provider)).useExisting);\n deps = [{ token, options: 6 /* Default */ }];\n }\n else if (!providerDeps && !(USE_VALUE in provider)) {\n // useValue & useExisting are the only ones which are exempt from deps all others need it.\n throw staticError('\\'deps\\' required', provider);\n }\n return deps;\n}\n/**\n * @param {?} text\n * @param {?} obj\n * @param {?=} source\n * @return {?}\n */\nfunction formatError(text, obj, source = null) {\n text = text && text.charAt(0) === '\\n' && text.charAt(1) == NO_NEW_LINE ? text.substr(2) : text;\n let /** @type {?} */ context = stringify(obj);\n if (obj instanceof Array) {\n context = obj.map(stringify).join(' -> ');\n }\n else if (typeof obj === 'object') {\n let /** @type {?} */ parts = /** @type {?} */ ([]);\n for (let /** @type {?} */ key in obj) {\n if (obj.hasOwnProperty(key)) {\n let /** @type {?} */ value = obj[key];\n parts.push(key + ':' + (typeof value === 'string' ? JSON.stringify(value) : stringify(value)));\n }\n }\n context = `{${parts.join(', ')}}`;\n }\n return `StaticInjectorError${source ? '(' + source + ')' : ''}[${context}]: ${text.replace(NEW_LINE, '\\n ')}`;\n}\n/**\n * @param {?} text\n * @param {?} obj\n * @return {?}\n */\nfunction staticError(text, obj) {\n return new Error(formatError(text, obj));\n}\n/**\n * @template T\n * @param {?} objWithPropertyToExtract\n * @return {?}\n */\nfunction getClosureSafeProperty(objWithPropertyToExtract) {\n for (let /** @type {?} */ key in objWithPropertyToExtract) {\n if (objWithPropertyToExtract[key] === GET_PROPERTY_NAME) {\n return key;\n }\n }\n throw Error('!prop');\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\nconst ERROR_DEBUG_CONTEXT = 'ngDebugContext';\nconst ERROR_ORIGINAL_ERROR = 'ngOriginalError';\nconst ERROR_LOGGER = 'ngErrorLogger';\n/**\n * @param {?} error\n * @return {?}\n */\n\n/**\n * @param {?} error\n * @return {?}\n */\nfunction getDebugContext(error) {\n return (/** @type {?} */ (error))[ERROR_DEBUG_CONTEXT];\n}\n/**\n * @param {?} error\n * @return {?}\n */\nfunction getOriginalError(error) {\n return (/** @type {?} */ (error))[ERROR_ORIGINAL_ERROR];\n}\n/**\n * @param {?} error\n * @return {?}\n */\nfunction getErrorLogger(error) {\n return (/** @type {?} */ (error))[ERROR_LOGGER] || defaultErrorLogger;\n}\n/**\n * @param {?} console\n * @param {...?} values\n * @return {?}\n */\nfunction defaultErrorLogger(console, ...values) {\n (/** @type {?} */ (console.error))(...values);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Provides a hook for centralized exception handling.\n *\n * \\@description\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 * ### Example\n *\n * ```\n * class MyErrorHandler implements ErrorHandler {\n * handleError(error) {\n * // do something with the exception\n * }\n * }\n *\n * \\@NgModule({\n * providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]\n * })\n * class MyModule {}\n * ```\n *\n * \\@stable\n */\nclass ErrorHandler {\n constructor() {\n /**\n * \\@internal\n */\n this._console = console;\n }\n /**\n * @param {?} error\n * @return {?}\n */\n handleError(error) {\n const /** @type {?} */ originalError = this._findOriginalError(error);\n const /** @type {?} */ context = this._findContext(error);\n // Note: Browser consoles show the place from where console.error was called.\n // We can use this to give users additional information about the error.\n const /** @type {?} */ errorLogger = getErrorLogger(error);\n errorLogger(this._console, `ERROR`, error);\n if (originalError) {\n errorLogger(this._console, `ORIGINAL ERROR`, originalError);\n }\n if (context) {\n errorLogger(this._console, 'ERROR CONTEXT', context);\n }\n }\n /**\n * \\@internal\n * @param {?} error\n * @return {?}\n */\n _findContext(error) {\n if (error) {\n return getDebugContext(error) ? getDebugContext(error) :\n this._findContext(getOriginalError(error));\n }\n return null;\n }\n /**\n * \\@internal\n * @param {?} error\n * @return {?}\n */\n _findOriginalError(error) {\n let /** @type {?} */ e = getOriginalError(error);\n while (e && getOriginalError(e)) {\n e = getOriginalError(e);\n }\n return e;\n }\n}\n/**\n * @param {?} message\n * @param {?} originalError\n * @return {?}\n */\nfunction wrappedError(message, originalError) {\n const /** @type {?} */ msg = `${message} caused by: ${originalError instanceof Error ? originalError.message : originalError}`;\n const /** @type {?} */ error = Error(msg);\n (/** @type {?} */ (error))[ERROR_ORIGINAL_ERROR] = originalError;\n return error;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} keys\n * @return {?}\n */\nfunction findFirstClosedCycle(keys) {\n const /** @type {?} */ res = [];\n for (let /** @type {?} */ i = 0; i < keys.length; ++i) {\n if (res.indexOf(keys[i]) > -1) {\n res.push(keys[i]);\n return res;\n }\n res.push(keys[i]);\n }\n return res;\n}\n/**\n * @param {?} keys\n * @return {?}\n */\nfunction constructResolvingPath(keys) {\n if (keys.length > 1) {\n const /** @type {?} */ reversed = findFirstClosedCycle(keys.slice().reverse());\n const /** @type {?} */ tokenStrs = reversed.map(k => stringify(k.token));\n return ' (' + tokenStrs.join(' -> ') + ')';\n }\n return '';\n}\n/**\n * @record\n */\n\n/**\n * @param {?} injector\n * @param {?} key\n * @param {?} constructResolvingMessage\n * @param {?=} originalError\n * @return {?}\n */\nfunction injectionError(injector, key, constructResolvingMessage, originalError) {\n const /** @type {?} */ keys = [key];\n const /** @type {?} */ errMsg = constructResolvingMessage(keys);\n const /** @type {?} */ error = /** @type {?} */ ((originalError ? wrappedError(errMsg, originalError) : Error(errMsg)));\n error.addKey = addKey;\n error.keys = keys;\n error.injectors = [injector];\n error.constructResolvingMessage = constructResolvingMessage;\n (/** @type {?} */ (error))[ERROR_ORIGINAL_ERROR] = originalError;\n return error;\n}\n/**\n * @this {?}\n * @param {?} injector\n * @param {?} key\n * @return {?}\n */\nfunction addKey(injector, key) {\n this.injectors.push(injector);\n this.keys.push(key);\n // Note: This updated message won't be reflected in the `.stack` property\n this.message = this.constructResolvingMessage(this.keys);\n}\n/**\n * Thrown when trying to retrieve a dependency by key from {\\@link Injector}, but the\n * {\\@link Injector} does not have a {\\@link Provider} for the given key.\n *\n * ### Example ([live demo](http://plnkr.co/edit/vq8D3FRB9aGbnWJqtEPE?p=preview))\n *\n * ```typescript\n * class A {\n * constructor(b:B) {}\n * }\n *\n * expect(() => Injector.resolveAndCreate([A])).toThrowError();\n * ```\n * @param {?} injector\n * @param {?} key\n * @return {?}\n */\nfunction noProviderError(injector, key) {\n return injectionError(injector, key, function (keys) {\n const /** @type {?} */ first = stringify(keys[0].token);\n return `No provider for ${first}!${constructResolvingPath(keys)}`;\n });\n}\n/**\n * Thrown when dependencies form a cycle.\n *\n * ### Example ([live demo](http://plnkr.co/edit/wYQdNos0Tzql3ei1EV9j?p=info))\n *\n * ```typescript\n * var injector = Injector.resolveAndCreate([\n * {provide: \"one\", useFactory: (two) => \"two\", deps: [[new Inject(\"two\")]]},\n * {provide: \"two\", useFactory: (one) => \"one\", deps: [[new Inject(\"one\")]]}\n * ]);\n *\n * expect(() => injector.get(\"one\")).toThrowError();\n * ```\n *\n * Retrieving `A` or `B` throws a `CyclicDependencyError` as the graph above cannot be constructed.\n * @param {?} injector\n * @param {?} key\n * @return {?}\n */\nfunction cyclicDependencyError(injector, key) {\n return injectionError(injector, key, function (keys) {\n return `Cannot instantiate cyclic dependency!${constructResolvingPath(keys)}`;\n });\n}\n/**\n * Thrown when a constructing type returns with an Error.\n *\n * The `InstantiationError` class contains the original error plus the dependency graph which caused\n * this object to be instantiated.\n *\n * ### Example ([live demo](http://plnkr.co/edit/7aWYdcqTQsP0eNqEdUAf?p=preview))\n *\n * ```typescript\n * class A {\n * constructor() {\n * throw new Error('message');\n * }\n * }\n *\n * var injector = Injector.resolveAndCreate([A]);\n * try {\n * injector.get(A);\n * } catch (e) {\n * expect(e instanceof InstantiationError).toBe(true);\n * expect(e.originalException.message).toEqual(\"message\");\n * expect(e.originalStack).toBeDefined();\n * }\n * ```\n * @param {?} injector\n * @param {?} originalException\n * @param {?} originalStack\n * @param {?} key\n * @return {?}\n */\nfunction instantiationError(injector, originalException, originalStack, key) {\n return injectionError(injector, key, function (keys) {\n const /** @type {?} */ first = stringify(keys[0].token);\n return `${originalException.message}: Error during instantiation of ${first}!${constructResolvingPath(keys)}.`;\n }, originalException);\n}\n/**\n * Thrown when an object other then {\\@link Provider} (or `Type`) is passed to {\\@link Injector}\n * creation.\n *\n * ### Example ([live demo](http://plnkr.co/edit/YatCFbPAMCL0JSSQ4mvH?p=preview))\n *\n * ```typescript\n * expect(() => Injector.resolveAndCreate([\"not a type\"])).toThrowError();\n * ```\n * @param {?} provider\n * @return {?}\n */\nfunction invalidProviderError(provider) {\n return Error(`Invalid provider - only instances of Provider and Type are allowed, got: ${provider}`);\n}\n/**\n * Thrown when the class has no annotation information.\n *\n * Lack of annotation information prevents the {\\@link Injector} from determining which dependencies\n * need to be injected into the constructor.\n *\n * ### Example ([live demo](http://plnkr.co/edit/rHnZtlNS7vJOPQ6pcVkm?p=preview))\n *\n * ```typescript\n * class A {\n * constructor(b) {}\n * }\n *\n * expect(() => Injector.resolveAndCreate([A])).toThrowError();\n * ```\n *\n * This error is also thrown when the class not marked with {\\@link Injectable} has parameter types.\n *\n * ```typescript\n * class B {}\n *\n * class A {\n * constructor(b:B) {} // no information about the parameter types of A is available at runtime.\n * }\n *\n * expect(() => Injector.resolveAndCreate([A,B])).toThrowError();\n * ```\n * \\@stable\n * @param {?} typeOrFunc\n * @param {?} params\n * @return {?}\n */\nfunction noAnnotationError(typeOrFunc, params) {\n const /** @type {?} */ signature = [];\n for (let /** @type {?} */ i = 0, /** @type {?} */ ii = params.length; i < ii; i++) {\n const /** @type {?} */ parameter = params[i];\n if (!parameter || parameter.length == 0) {\n signature.push('?');\n }\n else {\n signature.push(parameter.map(stringify).join(' '));\n }\n }\n return Error('Cannot resolve all parameters for \\'' + stringify(typeOrFunc) + '\\'(' +\n signature.join(', ') + '). ' +\n 'Make sure that all the parameters are decorated with Inject or have valid type annotations and that \\'' +\n stringify(typeOrFunc) + '\\' is decorated with Injectable.');\n}\n/**\n * Thrown when getting an object by index.\n *\n * ### Example ([live demo](http://plnkr.co/edit/bRs0SX2OTQiJzqvjgl8P?p=preview))\n *\n * ```typescript\n * class A {}\n *\n * var injector = Injector.resolveAndCreate([A]);\n *\n * expect(() => injector.getAt(100)).toThrowError();\n * ```\n * \\@stable\n * @param {?} index\n * @return {?}\n */\nfunction outOfBoundsError(index) {\n return Error(`Index ${index} is out-of-bounds.`);\n}\n/**\n * Thrown when a multi provider and a regular provider are bound to the same token.\n *\n * ### Example\n *\n * ```typescript\n * expect(() => Injector.resolveAndCreate([\n * { provide: \"Strings\", useValue: \"string1\", multi: true},\n * { provide: \"Strings\", useValue: \"string2\", multi: false}\n * ])).toThrowError();\n * ```\n * @param {?} provider1\n * @param {?} provider2\n * @return {?}\n */\nfunction mixingMultiProvidersWithRegularProvidersError(provider1, provider2) {\n return Error(`Cannot mix multi providers and regular providers, got: ${provider1} ${provider2}`);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A unique object used for retrieving items from the {\\@link ReflectiveInjector}.\n *\n * Keys have:\n * - a system-wide unique `id`.\n * - a `token`.\n *\n * `Key` is used internally by {\\@link ReflectiveInjector} because its system-wide unique `id` allows\n * the\n * injector to store created objects in a more efficient way.\n *\n * `Key` should not be created directly. {\\@link ReflectiveInjector} creates keys automatically when\n * resolving\n * providers.\n * @deprecated No replacement\n */\nclass ReflectiveKey {\n /**\n * Private\n * @param {?} token\n * @param {?} id\n */\n constructor(token, id) {\n this.token = token;\n this.id = id;\n if (!token) {\n throw new Error('Token must be defined!');\n }\n this.displayName = stringify(this.token);\n }\n /**\n * Retrieves a `Key` for a token.\n * @param {?} token\n * @return {?}\n */\n static get(token) {\n return _globalKeyRegistry.get(resolveForwardRef(token));\n }\n /**\n * @return {?} the number of keys registered in the system.\n */\n static get numberOfKeys() { return _globalKeyRegistry.numberOfKeys; }\n}\nclass KeyRegistry {\n constructor() {\n this._allKeys = new Map();\n }\n /**\n * @param {?} token\n * @return {?}\n */\n get(token) {\n if (token instanceof ReflectiveKey)\n return token;\n if (this._allKeys.has(token)) {\n return /** @type {?} */ ((this._allKeys.get(token)));\n }\n const /** @type {?} */ newKey = new ReflectiveKey(token, ReflectiveKey.numberOfKeys);\n this._allKeys.set(token, newKey);\n return newKey;\n }\n /**\n * @return {?}\n */\n get numberOfKeys() { return this._allKeys.size; }\n}\nconst _globalKeyRegistry = new KeyRegistry();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Represents a type that a Component or other object is instances of.\n *\n * \\@description\n *\n * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is be represented by\n * the `MyCustomComponent` constructor function.\n *\n * \\@stable\n */\nconst Type = Function;\n/**\n * @param {?} v\n * @return {?}\n */\nfunction isType(v) {\n return typeof v === 'function';\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Attention: These regex has to hold even if the code is minified!\n */\nconst DELEGATE_CTOR = /^function\\s+\\S+\\(\\)\\s*{[\\s\\S]+\\.apply\\(this,\\s*arguments\\)/;\nconst INHERITED_CLASS = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[A-Za-z\\d$_]+\\s*{/;\nconst INHERITED_CLASS_WITH_CTOR = /^class\\s+[A-Za-z\\d$_]*\\s*extends\\s+[A-Za-z\\d$_]+\\s*{[\\s\\S]*constructor\\s*\\(/;\nclass ReflectionCapabilities {\n /**\n * @param {?=} reflect\n */\n constructor(reflect) { this._reflect = reflect || _global['Reflect']; }\n /**\n * @return {?}\n */\n isReflectionEnabled() { return true; }\n /**\n * @template T\n * @param {?} t\n * @return {?}\n */\n factory(t) { return (...args) => new t(...args); }\n /**\n * \\@internal\n * @param {?} paramTypes\n * @param {?} paramAnnotations\n * @return {?}\n */\n _zipTypesAndAnnotations(paramTypes, paramAnnotations) {\n let /** @type {?} */ result;\n if (typeof paramTypes === 'undefined') {\n result = new Array(paramAnnotations.length);\n }\n else {\n result = new Array(paramTypes.length);\n }\n for (let /** @type {?} */ 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 }\n else if (paramTypes[i] != Object) {\n result[i] = [paramTypes[i]];\n }\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 /**\n * @param {?} type\n * @param {?} parentCtor\n * @return {?}\n */\n _ownParameters(type, parentCtor) {\n const /** @type {?} */ 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 (DELEGATE_CTOR.exec(typeStr) ||\n (INHERITED_CLASS.exec(typeStr) && !INHERITED_CLASS_WITH_CTOR.exec(typeStr))) {\n return null;\n }\n // Prefer the direct API.\n if ((/** @type {?} */ (type)).parameters && (/** @type {?} */ (type)).parameters !== parentCtor.parameters) {\n return (/** @type {?} */ (type)).parameters;\n }\n // API of tsickle for lowering decorators to properties on the class.\n const /** @type {?} */ tsickleCtorParams = (/** @type {?} */ (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 /** @type {?} */ ctorParameters = typeof tsickleCtorParams === 'function' ? tsickleCtorParams() : tsickleCtorParams;\n const /** @type {?} */ paramTypes = ctorParameters.map((ctorParam) => ctorParam && ctorParam.type);\n const /** @type {?} */ 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 /** @type {?} */ paramAnnotations = type.hasOwnProperty(PARAMETERS) && (/** @type {?} */ (type))[PARAMETERS];\n const /** @type {?} */ paramTypes = this._reflect && this._reflect.getOwnMetadata &&\n 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 new Array((/** @type {?} */ (type.length))).fill(undefined);\n }\n /**\n * @param {?} type\n * @return {?}\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 /** @type {?} */ parentCtor = getParentCtor(type);\n let /** @type {?} */ parameters = this._ownParameters(type, parentCtor);\n if (!parameters && parentCtor !== Object) {\n parameters = this.parameters(parentCtor);\n }\n return parameters || [];\n }\n /**\n * @param {?} typeOrFunc\n * @param {?} parentCtor\n * @return {?}\n */\n _ownAnnotations(typeOrFunc, parentCtor) {\n // Prefer the direct API.\n if ((/** @type {?} */ (typeOrFunc)).annotations && (/** @type {?} */ (typeOrFunc)).annotations !== parentCtor.annotations) {\n let /** @type {?} */ annotations = (/** @type {?} */ (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 ((/** @type {?} */ (typeOrFunc)).decorators && (/** @type {?} */ (typeOrFunc)).decorators !== parentCtor.decorators) {\n return convertTsickleDecoratorIntoMetadata((/** @type {?} */ (typeOrFunc)).decorators);\n }\n // API for metadata created by invoking the decorators.\n if (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {\n return (/** @type {?} */ (typeOrFunc))[ANNOTATIONS];\n }\n return null;\n }\n /**\n * @param {?} typeOrFunc\n * @return {?}\n */\n annotations(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return [];\n }\n const /** @type {?} */ parentCtor = getParentCtor(typeOrFunc);\n const /** @type {?} */ ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];\n const /** @type {?} */ parentAnnotations = parentCtor !== Object ? this.annotations(parentCtor) : [];\n return parentAnnotations.concat(ownAnnotations);\n }\n /**\n * @param {?} typeOrFunc\n * @param {?} parentCtor\n * @return {?}\n */\n _ownPropMetadata(typeOrFunc, parentCtor) {\n // Prefer the direct API.\n if ((/** @type {?} */ (typeOrFunc)).propMetadata &&\n (/** @type {?} */ (typeOrFunc)).propMetadata !== parentCtor.propMetadata) {\n let /** @type {?} */ propMetadata = (/** @type {?} */ (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 ((/** @type {?} */ (typeOrFunc)).propDecorators &&\n (/** @type {?} */ (typeOrFunc)).propDecorators !== parentCtor.propDecorators) {\n const /** @type {?} */ propDecorators = (/** @type {?} */ (typeOrFunc)).propDecorators;\n const /** @type {?} */ propMetadata = /** @type {?} */ ({});\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 (/** @type {?} */ (typeOrFunc))[PROP_METADATA];\n }\n return null;\n }\n /**\n * @param {?} typeOrFunc\n * @return {?}\n */\n propMetadata(typeOrFunc) {\n if (!isType(typeOrFunc)) {\n return {};\n }\n const /** @type {?} */ parentCtor = getParentCtor(typeOrFunc);\n const /** @type {?} */ propMetadata = {};\n if (parentCtor !== Object) {\n const /** @type {?} */ parentPropMetadata = this.propMetadata(parentCtor);\n Object.keys(parentPropMetadata).forEach((propName) => {\n propMetadata[propName] = parentPropMetadata[propName];\n });\n }\n const /** @type {?} */ ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);\n if (ownPropMetadata) {\n Object.keys(ownPropMetadata).forEach((propName) => {\n const /** @type {?} */ 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 /**\n * @param {?} type\n * @param {?} lcProperty\n * @return {?}\n */\n hasLifecycleHook(type, lcProperty) {\n return type instanceof Type && lcProperty in type.prototype;\n }\n /**\n * @param {?} type\n * @return {?}\n */\n guards(type) { return {}; }\n /**\n * @param {?} name\n * @return {?}\n */\n getter(name) { return /** @type {?} */ (new Function('o', 'return o.' + name + ';')); }\n /**\n * @param {?} name\n * @return {?}\n */\n setter(name) {\n return /** @type {?} */ (new Function('o', 'v', 'return o.' + name + ' = v;'));\n }\n /**\n * @param {?} name\n * @return {?}\n */\n method(name) {\n const /** @type {?} */ functionBody = `if (!o.${name}) throw new Error('\"${name}\" is undefined');\n return o.${name}.apply(o, args);`;\n return /** @type {?} */ (new Function('o', 'args', functionBody));\n }\n /**\n * @param {?} type\n * @return {?}\n */\n importUri(type) {\n // StaticSymbol\n if (typeof type === 'object' && type['filePath']) {\n return type['filePath'];\n }\n // Runtime type\n return `./${stringify(type)}`;\n }\n /**\n * @param {?} type\n * @return {?}\n */\n resourceUri(type) { return `./${stringify(type)}`; }\n /**\n * @param {?} name\n * @param {?} moduleUrl\n * @param {?} members\n * @param {?} runtime\n * @return {?}\n */\n resolveIdentifier(name, moduleUrl, members, runtime) {\n return runtime;\n }\n /**\n * @param {?} enumIdentifier\n * @param {?} name\n * @return {?}\n */\n resolveEnum(enumIdentifier, name) { return enumIdentifier[name]; }\n}\n/**\n * @param {?} decoratorInvocations\n * @return {?}\n */\nfunction convertTsickleDecoratorIntoMetadata(decoratorInvocations) {\n if (!decoratorInvocations) {\n return [];\n }\n return decoratorInvocations.map(decoratorInvocation => {\n const /** @type {?} */ decoratorType = decoratorInvocation.type;\n const /** @type {?} */ annotationCls = decoratorType.annotationCls;\n const /** @type {?} */ annotationArgs = decoratorInvocation.args ? decoratorInvocation.args : [];\n return new annotationCls(...annotationArgs);\n });\n}\n/**\n * @param {?} ctor\n * @return {?}\n */\nfunction getParentCtor(ctor) {\n const /** @type {?} */ parentProto = ctor.prototype ? Object.getPrototypeOf(ctor.prototype) : null;\n const /** @type {?} */ 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/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Provides access to reflection data about symbols. Used internally by Angular\n * to power dependency injection and compilation.\n */\nclass Reflector {\n /**\n * @param {?} reflectionCapabilities\n */\n constructor(reflectionCapabilities) {\n this.reflectionCapabilities = reflectionCapabilities;\n }\n /**\n * @param {?} caps\n * @return {?}\n */\n updateCapabilities(caps) { this.reflectionCapabilities = caps; }\n /**\n * @param {?} type\n * @return {?}\n */\n factory(type) { return this.reflectionCapabilities.factory(type); }\n /**\n * @param {?} typeOrFunc\n * @return {?}\n */\n parameters(typeOrFunc) {\n return this.reflectionCapabilities.parameters(typeOrFunc);\n }\n /**\n * @param {?} typeOrFunc\n * @return {?}\n */\n annotations(typeOrFunc) {\n return this.reflectionCapabilities.annotations(typeOrFunc);\n }\n /**\n * @param {?} typeOrFunc\n * @return {?}\n */\n propMetadata(typeOrFunc) {\n return this.reflectionCapabilities.propMetadata(typeOrFunc);\n }\n /**\n * @param {?} type\n * @param {?} lcProperty\n * @return {?}\n */\n hasLifecycleHook(type, lcProperty) {\n return this.reflectionCapabilities.hasLifecycleHook(type, lcProperty);\n }\n /**\n * @param {?} name\n * @return {?}\n */\n getter(name) { return this.reflectionCapabilities.getter(name); }\n /**\n * @param {?} name\n * @return {?}\n */\n setter(name) { return this.reflectionCapabilities.setter(name); }\n /**\n * @param {?} name\n * @return {?}\n */\n method(name) { return this.reflectionCapabilities.method(name); }\n /**\n * @param {?} type\n * @return {?}\n */\n importUri(type) { return this.reflectionCapabilities.importUri(type); }\n /**\n * @param {?} type\n * @return {?}\n */\n resourceUri(type) { return this.reflectionCapabilities.resourceUri(type); }\n /**\n * @param {?} name\n * @param {?} moduleUrl\n * @param {?} members\n * @param {?} runtime\n * @return {?}\n */\n resolveIdentifier(name, moduleUrl, members, runtime) {\n return this.reflectionCapabilities.resolveIdentifier(name, moduleUrl, members, runtime);\n }\n /**\n * @param {?} identifier\n * @param {?} name\n * @return {?}\n */\n resolveEnum(identifier, name) {\n return this.reflectionCapabilities.resolveEnum(identifier, name);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * The {\\@link Reflector} used internally in Angular to access metadata\n * about symbols.\n */\nconst reflector = new Reflector(new ReflectionCapabilities());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * `Dependency` is used by the framework to extend DI.\n * This is internal to Angular and should not be used directly.\n */\nclass ReflectiveDependency {\n /**\n * @param {?} key\n * @param {?} optional\n * @param {?} visibility\n */\n constructor(key, optional, visibility) {\n this.key = key;\n this.optional = optional;\n this.visibility = visibility;\n }\n /**\n * @param {?} key\n * @return {?}\n */\n static fromKey(key) {\n return new ReflectiveDependency(key, false, null);\n }\n}\nconst _EMPTY_LIST = [];\n/**\n * An internal resolved representation of a {\\@link Provider} used by the {\\@link Injector}.\n *\n * It is usually created automatically by `Injector.resolveAndCreate`.\n *\n * It can be created manually, as follows:\n *\n * ### Example ([live demo](http://plnkr.co/edit/RfEnhh8kUEI0G3qsnIeT?p%3Dpreview&p=preview))\n *\n * ```typescript\n * var resolvedProviders = Injector.resolve([{ provide: 'message', useValue: 'Hello' }]);\n * var injector = Injector.fromResolvedProviders(resolvedProviders);\n *\n * expect(injector.get('message')).toEqual('Hello');\n * ```\n *\n * \\@experimental\n * @record\n */\n\nclass ResolvedReflectiveProvider_ {\n /**\n * @param {?} key\n * @param {?} resolvedFactories\n * @param {?} multiProvider\n */\n constructor(key, resolvedFactories, multiProvider) {\n this.key = key;\n this.resolvedFactories = resolvedFactories;\n this.multiProvider = multiProvider;\n this.resolvedFactory = this.resolvedFactories[0];\n }\n}\n/**\n * An internal resolved representation of a factory function created by resolving {\\@link\n * Provider}.\n * \\@experimental\n */\nclass ResolvedReflectiveFactory {\n /**\n * @param {?} factory\n * @param {?} dependencies\n */\n constructor(factory, dependencies) {\n this.factory = factory;\n this.dependencies = dependencies;\n }\n}\n/**\n * Resolve a single provider.\n * @param {?} provider\n * @return {?}\n */\nfunction resolveReflectiveFactory(provider) {\n let /** @type {?} */ factoryFn;\n let /** @type {?} */ resolvedDeps;\n if (provider.useClass) {\n const /** @type {?} */ useClass = resolveForwardRef(provider.useClass);\n factoryFn = reflector.factory(useClass);\n resolvedDeps = _dependenciesFor(useClass);\n }\n else if (provider.useExisting) {\n factoryFn = (aliasInstance) => aliasInstance;\n resolvedDeps = [ReflectiveDependency.fromKey(ReflectiveKey.get(provider.useExisting))];\n }\n else if (provider.useFactory) {\n factoryFn = provider.useFactory;\n resolvedDeps = constructDependencies(provider.useFactory, provider.deps);\n }\n else {\n factoryFn = () => provider.useValue;\n resolvedDeps = _EMPTY_LIST;\n }\n return new ResolvedReflectiveFactory(factoryFn, resolvedDeps);\n}\n/**\n * Converts the {\\@link Provider} into {\\@link ResolvedProvider}.\n *\n * {\\@link Injector} internally only uses {\\@link ResolvedProvider}, {\\@link Provider} contains\n * convenience provider syntax.\n * @param {?} provider\n * @return {?}\n */\nfunction resolveReflectiveProvider(provider) {\n return new ResolvedReflectiveProvider_(ReflectiveKey.get(provider.provide), [resolveReflectiveFactory(provider)], provider.multi || false);\n}\n/**\n * Resolve a list of Providers.\n * @param {?} providers\n * @return {?}\n */\nfunction resolveReflectiveProviders(providers) {\n const /** @type {?} */ normalized = _normalizeProviders(providers, []);\n const /** @type {?} */ resolved = normalized.map(resolveReflectiveProvider);\n const /** @type {?} */ resolvedProviderMap = mergeResolvedReflectiveProviders(resolved, new Map());\n return Array.from(resolvedProviderMap.values());\n}\n/**\n * Merges a list of ResolvedProviders into a list where\n * each key is contained exactly once and multi providers\n * have been merged.\n * @param {?} providers\n * @param {?} normalizedProvidersMap\n * @return {?}\n */\nfunction mergeResolvedReflectiveProviders(providers, normalizedProvidersMap) {\n for (let /** @type {?} */ i = 0; i < providers.length; i++) {\n const /** @type {?} */ provider = providers[i];\n const /** @type {?} */ existing = normalizedProvidersMap.get(provider.key.id);\n if (existing) {\n if (provider.multiProvider !== existing.multiProvider) {\n throw mixingMultiProvidersWithRegularProvidersError(existing, provider);\n }\n if (provider.multiProvider) {\n for (let /** @type {?} */ j = 0; j < provider.resolvedFactories.length; j++) {\n existing.resolvedFactories.push(provider.resolvedFactories[j]);\n }\n }\n else {\n normalizedProvidersMap.set(provider.key.id, provider);\n }\n }\n else {\n let /** @type {?} */ resolvedProvider;\n if (provider.multiProvider) {\n resolvedProvider = new ResolvedReflectiveProvider_(provider.key, provider.resolvedFactories.slice(), provider.multiProvider);\n }\n else {\n resolvedProvider = provider;\n }\n normalizedProvidersMap.set(provider.key.id, resolvedProvider);\n }\n }\n return normalizedProvidersMap;\n}\n/**\n * @param {?} providers\n * @param {?} res\n * @return {?}\n */\nfunction _normalizeProviders(providers, res) {\n providers.forEach(b => {\n if (b instanceof Type) {\n res.push({ provide: b, useClass: b });\n }\n else if (b && typeof b == 'object' && (/** @type {?} */ (b)).provide !== undefined) {\n res.push(/** @type {?} */ (b));\n }\n else if (b instanceof Array) {\n _normalizeProviders(b, res);\n }\n else {\n throw invalidProviderError(b);\n }\n });\n return res;\n}\n/**\n * @param {?} typeOrFunc\n * @param {?=} dependencies\n * @return {?}\n */\nfunction constructDependencies(typeOrFunc, dependencies) {\n if (!dependencies) {\n return _dependenciesFor(typeOrFunc);\n }\n else {\n const /** @type {?} */ params = dependencies.map(t => [t]);\n return dependencies.map(t => _extractToken(typeOrFunc, t, params));\n }\n}\n/**\n * @param {?} typeOrFunc\n * @return {?}\n */\nfunction _dependenciesFor(typeOrFunc) {\n const /** @type {?} */ params = reflector.parameters(typeOrFunc);\n if (!params)\n return [];\n if (params.some(p => p == null)) {\n throw noAnnotationError(typeOrFunc, params);\n }\n return params.map(p => _extractToken(typeOrFunc, p, params));\n}\n/**\n * @param {?} typeOrFunc\n * @param {?} metadata\n * @param {?} params\n * @return {?}\n */\nfunction _extractToken(typeOrFunc, metadata, params) {\n let /** @type {?} */ token = null;\n let /** @type {?} */ optional = false;\n if (!Array.isArray(metadata)) {\n if (metadata instanceof Inject) {\n return _createDependency(metadata.token, optional, null);\n }\n else {\n return _createDependency(metadata, optional, null);\n }\n }\n let /** @type {?} */ visibility = null;\n for (let /** @type {?} */ i = 0; i < metadata.length; ++i) {\n const /** @type {?} */ paramMetadata = metadata[i];\n if (paramMetadata instanceof Type) {\n token = paramMetadata;\n }\n else if (paramMetadata instanceof Inject) {\n token = paramMetadata.token;\n }\n else if (paramMetadata instanceof Optional) {\n optional = true;\n }\n else if (paramMetadata instanceof Self || paramMetadata instanceof SkipSelf) {\n visibility = paramMetadata;\n }\n else if (paramMetadata instanceof InjectionToken) {\n token = paramMetadata;\n }\n }\n token = resolveForwardRef(token);\n if (token != null) {\n return _createDependency(token, optional, visibility);\n }\n else {\n throw noAnnotationError(typeOrFunc, params);\n }\n}\n/**\n * @param {?} token\n * @param {?} optional\n * @param {?} visibility\n * @return {?}\n */\nfunction _createDependency(token, optional, visibility) {\n return new ReflectiveDependency(ReflectiveKey.get(token), optional, visibility);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n// Threshold for the dynamic version\nconst UNDEFINED = new Object();\n/**\n * A ReflectiveDependency injection container used for instantiating objects and resolving\n * dependencies.\n *\n * An `Injector` is a replacement for a `new` operator, which can automatically resolve the\n * constructor dependencies.\n *\n * In typical use, application code asks for the dependencies in the constructor and they are\n * resolved by the `Injector`.\n *\n * ### Example ([live demo](http://plnkr.co/edit/jzjec0?p=preview))\n *\n * The following example creates an `Injector` configured to create `Engine` and `Car`.\n *\n * ```typescript\n * \\@Injectable()\n * class Engine {\n * }\n *\n * \\@Injectable()\n * class Car {\n * constructor(public engine:Engine) {}\n * }\n *\n * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);\n * var car = injector.get(Car);\n * expect(car instanceof Car).toBe(true);\n * expect(car.engine instanceof Engine).toBe(true);\n * ```\n *\n * Notice, we don't use the `new` operator because we explicitly want to have the `Injector`\n * resolve all of the object's dependencies automatically.\n *\n * @deprecated from v5 - slow and brings in a lot of code, Use `Injector.create` instead.\n * @abstract\n */\nclass ReflectiveInjector {\n /**\n * Turns an array of provider definitions into an array of resolved providers.\n *\n * A resolution is a process of flattening multiple nested arrays and converting individual\n * providers into an array of {\\@link ResolvedReflectiveProvider}s.\n *\n * ### Example ([live demo](http://plnkr.co/edit/AiXTHi?p=preview))\n *\n * ```typescript\n * \\@Injectable()\n * class Engine {\n * }\n *\n * \\@Injectable()\n * class Car {\n * constructor(public engine:Engine) {}\n * }\n *\n * var providers = ReflectiveInjector.resolve([Car, [[Engine]]]);\n *\n * expect(providers.length).toEqual(2);\n *\n * expect(providers[0] instanceof ResolvedReflectiveProvider).toBe(true);\n * expect(providers[0].key.displayName).toBe(\"Car\");\n * expect(providers[0].dependencies.length).toEqual(1);\n * expect(providers[0].factory).toBeDefined();\n *\n * expect(providers[1].key.displayName).toBe(\"Engine\");\n * });\n * ```\n *\n * See {\\@link ReflectiveInjector#fromResolvedProviders fromResolvedProviders} for more info.\n * @param {?} providers\n * @return {?}\n */\n static resolve(providers) {\n return resolveReflectiveProviders(providers);\n }\n /**\n * Resolves an array of providers and creates an injector from those providers.\n *\n * The passed-in providers can be an array of `Type`, {\\@link Provider},\n * or a recursive array of more providers.\n *\n * ### Example ([live demo](http://plnkr.co/edit/ePOccA?p=preview))\n *\n * ```typescript\n * \\@Injectable()\n * class Engine {\n * }\n *\n * \\@Injectable()\n * class Car {\n * constructor(public engine:Engine) {}\n * }\n *\n * var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);\n * expect(injector.get(Car) instanceof Car).toBe(true);\n * ```\n *\n * This function is slower than the corresponding `fromResolvedProviders`\n * because it needs to resolve the passed-in providers first.\n * See {\\@link ReflectiveInjector#resolve resolve} and\n * {\\@link ReflectiveInjector#fromResolvedProviders fromResolvedProviders}.\n * @param {?} providers\n * @param {?=} parent\n * @return {?}\n */\n static resolveAndCreate(providers, parent) {\n const /** @type {?} */ ResolvedReflectiveProviders = ReflectiveInjector.resolve(providers);\n return ReflectiveInjector.fromResolvedProviders(ResolvedReflectiveProviders, parent);\n }\n /**\n * Creates an injector from previously resolved providers.\n *\n * This API is the recommended way to construct injectors in performance-sensitive parts.\n *\n * ### Example ([live demo](http://plnkr.co/edit/KrSMci?p=preview))\n *\n * ```typescript\n * \\@Injectable()\n * class Engine {\n * }\n *\n * \\@Injectable()\n * class Car {\n * constructor(public engine:Engine) {}\n * }\n *\n * var providers = ReflectiveInjector.resolve([Car, Engine]);\n * var injector = ReflectiveInjector.fromResolvedProviders(providers);\n * expect(injector.get(Car) instanceof Car).toBe(true);\n * ```\n * \\@experimental\n * @param {?} providers\n * @param {?=} parent\n * @return {?}\n */\n static fromResolvedProviders(providers, parent) {\n return new ReflectiveInjector_(providers, parent);\n }\n}\nclass ReflectiveInjector_ {\n /**\n * Private\n * @param {?} _providers\n * @param {?=} _parent\n */\n constructor(_providers, _parent) {\n /**\n * \\@internal\n */\n this._constructionCounter = 0;\n this._providers = _providers;\n this.parent = _parent || null;\n const /** @type {?} */ len = _providers.length;\n this.keyIds = new Array(len);\n this.objs = new Array(len);\n for (let /** @type {?} */ i = 0; i < len; i++) {\n this.keyIds[i] = _providers[i].key.id;\n this.objs[i] = UNDEFINED;\n }\n }\n /**\n * @param {?} token\n * @param {?=} notFoundValue\n * @return {?}\n */\n get(token, notFoundValue = THROW_IF_NOT_FOUND) {\n return this._getByKey(ReflectiveKey.get(token), null, notFoundValue);\n }\n /**\n * @param {?} providers\n * @return {?}\n */\n resolveAndCreateChild(providers) {\n const /** @type {?} */ ResolvedReflectiveProviders = ReflectiveInjector.resolve(providers);\n return this.createChildFromResolved(ResolvedReflectiveProviders);\n }\n /**\n * @param {?} providers\n * @return {?}\n */\n createChildFromResolved(providers) {\n const /** @type {?} */ inj = new ReflectiveInjector_(providers);\n (/** @type {?} */ (inj)).parent = this;\n return inj;\n }\n /**\n * @param {?} provider\n * @return {?}\n */\n resolveAndInstantiate(provider) {\n return this.instantiateResolved(ReflectiveInjector.resolve([provider])[0]);\n }\n /**\n * @param {?} provider\n * @return {?}\n */\n instantiateResolved(provider) {\n return this._instantiateProvider(provider);\n }\n /**\n * @param {?} index\n * @return {?}\n */\n getProviderAtIndex(index) {\n if (index < 0 || index >= this._providers.length) {\n throw outOfBoundsError(index);\n }\n return this._providers[index];\n }\n /**\n * \\@internal\n * @param {?} provider\n * @return {?}\n */\n _new(provider) {\n if (this._constructionCounter++ > this._getMaxNumberOfObjects()) {\n throw cyclicDependencyError(this, provider.key);\n }\n return this._instantiateProvider(provider);\n }\n /**\n * @return {?}\n */\n _getMaxNumberOfObjects() { return this.objs.length; }\n /**\n * @param {?} provider\n * @return {?}\n */\n _instantiateProvider(provider) {\n if (provider.multiProvider) {\n const /** @type {?} */ res = new Array(provider.resolvedFactories.length);\n for (let /** @type {?} */ i = 0; i < provider.resolvedFactories.length; ++i) {\n res[i] = this._instantiate(provider, provider.resolvedFactories[i]);\n }\n return res;\n }\n else {\n return this._instantiate(provider, provider.resolvedFactories[0]);\n }\n }\n /**\n * @param {?} provider\n * @param {?} ResolvedReflectiveFactory\n * @return {?}\n */\n _instantiate(provider, ResolvedReflectiveFactory$$1) {\n const /** @type {?} */ factory = ResolvedReflectiveFactory$$1.factory;\n let /** @type {?} */ deps;\n try {\n deps =\n ResolvedReflectiveFactory$$1.dependencies.map(dep => this._getByReflectiveDependency(dep));\n }\n catch (/** @type {?} */ e) {\n if (e.addKey) {\n e.addKey(this, provider.key);\n }\n throw e;\n }\n let /** @type {?} */ obj;\n try {\n obj = factory(...deps);\n }\n catch (/** @type {?} */ e) {\n throw instantiationError(this, e, e.stack, provider.key);\n }\n return obj;\n }\n /**\n * @param {?} dep\n * @return {?}\n */\n _getByReflectiveDependency(dep) {\n return this._getByKey(dep.key, dep.visibility, dep.optional ? null : THROW_IF_NOT_FOUND);\n }\n /**\n * @param {?} key\n * @param {?} visibility\n * @param {?} notFoundValue\n * @return {?}\n */\n _getByKey(key, visibility, notFoundValue) {\n if (key === ReflectiveInjector_.INJECTOR_KEY) {\n return this;\n }\n if (visibility instanceof Self) {\n return this._getByKeySelf(key, notFoundValue);\n }\n else {\n return this._getByKeyDefault(key, notFoundValue, visibility);\n }\n }\n /**\n * @param {?} keyId\n * @return {?}\n */\n _getObjByKeyId(keyId) {\n for (let /** @type {?} */ i = 0; i < this.keyIds.length; i++) {\n if (this.keyIds[i] === keyId) {\n if (this.objs[i] === UNDEFINED) {\n this.objs[i] = this._new(this._providers[i]);\n }\n return this.objs[i];\n }\n }\n return UNDEFINED;\n }\n /**\n * \\@internal\n * @param {?} key\n * @param {?} notFoundValue\n * @return {?}\n */\n _throwOrNull(key, notFoundValue) {\n if (notFoundValue !== THROW_IF_NOT_FOUND) {\n return notFoundValue;\n }\n else {\n throw noProviderError(this, key);\n }\n }\n /**\n * \\@internal\n * @param {?} key\n * @param {?} notFoundValue\n * @return {?}\n */\n _getByKeySelf(key, notFoundValue) {\n const /** @type {?} */ obj = this._getObjByKeyId(key.id);\n return (obj !== UNDEFINED) ? obj : this._throwOrNull(key, notFoundValue);\n }\n /**\n * \\@internal\n * @param {?} key\n * @param {?} notFoundValue\n * @param {?} visibility\n * @return {?}\n */\n _getByKeyDefault(key, notFoundValue, visibility) {\n let /** @type {?} */ inj;\n if (visibility instanceof SkipSelf) {\n inj = this.parent;\n }\n else {\n inj = this;\n }\n while (inj instanceof ReflectiveInjector_) {\n const /** @type {?} */ inj_ = /** @type {?} */ (inj);\n const /** @type {?} */ obj = inj_._getObjByKeyId(key.id);\n if (obj !== UNDEFINED)\n return obj;\n inj = inj_.parent;\n }\n if (inj !== null) {\n return inj.get(key.token, notFoundValue);\n }\n else {\n return this._throwOrNull(key, notFoundValue);\n }\n }\n /**\n * @return {?}\n */\n get displayName() {\n const /** @type {?} */ providers = _mapProviders(this, (b) => ' \"' + b.key.displayName + '\" ')\n .join(', ');\n return `ReflectiveInjector(providers: [${providers}])`;\n }\n /**\n * @return {?}\n */\n toString() { return this.displayName; }\n}\nReflectiveInjector_.INJECTOR_KEY = ReflectiveKey.get(Injector);\n/**\n * @param {?} injector\n * @param {?} fn\n * @return {?}\n */\nfunction _mapProviders(injector, fn) {\n const /** @type {?} */ res = new Array(injector._providers.length);\n for (let /** @type {?} */ i = 0; i < injector._providers.length; ++i) {\n res[i] = fn(injector.getProviderAtIndex(i));\n }\n return res;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @module\n * @description\n * The `di` module provides dependency injection container services.\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Determine if the argument is shaped like a Promise\n * @param {?} obj\n * @return {?}\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 an Observable\n * @param {?} obj\n * @return {?}\n */\nfunction isObservable(obj) {\n // TODO: use Symbol.observable when https://github.com/ReactiveX/rxjs/issues/2415 will be resolved\n return !!obj && typeof obj.subscribe === 'function';\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A function that will be executed when an application is initialized.\n * \\@experimental\n */\nconst APP_INITIALIZER = new InjectionToken('Application Initializer');\n/**\n * A class that reflects the state of running {\\@link APP_INITIALIZER}s.\n *\n * \\@experimental\n */\nclass ApplicationInitStatus {\n /**\n * @param {?} appInits\n */\n constructor(appInits) {\n this.appInits = appInits;\n this.initialized = false;\n this.done = false;\n this.donePromise = new Promise((res, rej) => {\n this.resolve = res;\n this.reject = rej;\n });\n }\n /**\n * \\@internal\n * @return {?}\n */\n runInitializers() {\n if (this.initialized) {\n return;\n }\n const /** @type {?} */ asyncInitPromises = [];\n const /** @type {?} */ complete = () => {\n (/** @type {?} */ (this)).done = true;\n this.resolve();\n };\n if (this.appInits) {\n for (let /** @type {?} */ i = 0; i < this.appInits.length; i++) {\n const /** @type {?} */ initResult = this.appInits[i]();\n if (isPromise(initResult)) {\n asyncInitPromises.push(initResult);\n }\n }\n }\n Promise.all(asyncInitPromises).then(() => { complete(); }).catch(e => { this.reject(e); });\n if (asyncInitPromises.length === 0) {\n complete();\n }\n this.initialized = true;\n }\n}\nApplicationInitStatus.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nApplicationInitStatus.ctorParameters = () => [\n { type: Array, decorators: [{ type: Inject, args: [APP_INITIALIZER,] }, { type: Optional },] },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A DI Token representing a unique string id assigned to the application by Angular and used\n * primarily for prefixing application attributes and CSS styles when\n * {\\@link ViewEncapsulation#Emulated ViewEncapsulation.Emulated} is being used.\n *\n * If you need to avoid randomly generated value to be used as an application id, you can provide\n * a custom value via a DI provider <!-- TODO: provider --> configuring the root {\\@link Injector}\n * using this token.\n * \\@experimental\n */\nconst APP_ID = new InjectionToken('AppId');\n/**\n * @return {?}\n */\nfunction _appIdRandomProviderFactory() {\n return `${_randomChar()}${_randomChar()}${_randomChar()}`;\n}\n/**\n * Providers that will generate a random APP_ID_TOKEN.\n * \\@experimental\n */\nconst APP_ID_RANDOM_PROVIDER = {\n provide: APP_ID,\n useFactory: _appIdRandomProviderFactory,\n deps: /** @type {?} */ ([]),\n};\n/**\n * @return {?}\n */\nfunction _randomChar() {\n return String.fromCharCode(97 + Math.floor(Math.random() * 25));\n}\n/**\n * A function that will be executed when a platform is initialized.\n * \\@experimental\n */\nconst PLATFORM_INITIALIZER = new InjectionToken('Platform Initializer');\n/**\n * A token that indicates an opaque platform id.\n * \\@experimental\n */\nconst PLATFORM_ID = new InjectionToken('Platform ID');\n/**\n * All callbacks provided via this token will be called for every component that is bootstrapped.\n * Signature of the callback:\n *\n * `(componentRef: ComponentRef) => void`.\n *\n * \\@experimental\n */\nconst APP_BOOTSTRAP_LISTENER = new InjectionToken('appBootstrapListener');\n/**\n * A token which indicates the root directory of the application\n * \\@experimental\n */\nconst PACKAGE_ROOT_URL = new InjectionToken('Application Packages Root URL');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass Console {\n /**\n * @param {?} message\n * @return {?}\n */\n log(message) {\n // tslint:disable-next-line:no-console\n console.log(message);\n }\n /**\n * @param {?} message\n * @return {?}\n */\n warn(message) {\n // tslint:disable-next-line:no-console\n console.warn(message);\n }\n}\nConsole.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nConsole.ctorParameters = () => [];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Combination of NgModuleFactory and ComponentFactorys.\n *\n * \\@experimental\n * @template T\n */\nclass ModuleWithComponentFactories {\n /**\n * @param {?} ngModuleFactory\n * @param {?} componentFactories\n */\n constructor(ngModuleFactory, componentFactories) {\n this.ngModuleFactory = ngModuleFactory;\n this.componentFactories = componentFactories;\n }\n}\n/**\n * @return {?}\n */\nfunction _throwError() {\n throw new Error(`Runtime compiler is not loaded`);\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 * \\@stable\n */\nclass Compiler {\n /**\n * Compiles the given NgModule and all of its components. All templates of the components listed\n * in `entryComponents` have to be inlined.\n * @template T\n * @param {?} moduleType\n * @return {?}\n */\n compileModuleSync(moduleType) { throw _throwError(); }\n /**\n * Compiles the given NgModule and all of its components\n * @template T\n * @param {?} moduleType\n * @return {?}\n */\n compileModuleAsync(moduleType) { throw _throwError(); }\n /**\n * Same as {\\@link #compileModuleSync} but also creates ComponentFactories for all components.\n * @template T\n * @param {?} moduleType\n * @return {?}\n */\n compileModuleAndAllComponentsSync(moduleType) {\n throw _throwError();\n }\n /**\n * Same as {\\@link #compileModuleAsync} but also creates ComponentFactories for all components.\n * @template T\n * @param {?} moduleType\n * @return {?}\n */\n compileModuleAndAllComponentsAsync(moduleType) {\n throw _throwError();\n }\n /**\n * Clears all caches.\n * @return {?}\n */\n clearCache() { }\n /**\n * Clears the cache for the given component/ngModule.\n * @param {?} type\n * @return {?}\n */\n clearCacheFor(type) { }\n}\nCompiler.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nCompiler.ctorParameters = () => [];\n/**\n * Token to provide CompilerOptions in the platform injector.\n *\n * \\@experimental\n */\nconst COMPILER_OPTIONS = new InjectionToken('compilerOptions');\n/**\n * A factory for creating a Compiler\n *\n * \\@experimental\n * @abstract\n */\nclass CompilerFactory {\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 * \\@stable\n * @abstract\n * @template C\n */\nclass ComponentRef {\n}\n/**\n * \\@stable\n * @abstract\n * @template C\n */\nclass ComponentFactory {\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} component\n * @return {?}\n */\nfunction noComponentFactoryError(component) {\n const /** @type {?} */ error = Error(`No component factory found for ${stringify(component)}. Did you add it to @NgModule.entryComponents?`);\n (/** @type {?} */ (error))[ERROR_COMPONENT] = component;\n return error;\n}\nconst ERROR_COMPONENT = 'ngComponent';\n/**\n * @param {?} error\n * @return {?}\n */\n\nclass _NullComponentFactoryResolver {\n /**\n * @template T\n * @param {?} component\n * @return {?}\n */\n resolveComponentFactory(component) {\n throw noComponentFactoryError(component);\n }\n}\n/**\n * \\@stable\n * @abstract\n */\nclass ComponentFactoryResolver {\n}\nComponentFactoryResolver.NULL = new _NullComponentFactoryResolver();\nclass CodegenComponentFactoryResolver {\n /**\n * @param {?} factories\n * @param {?} _parent\n * @param {?} _ngModule\n */\n constructor(factories, _parent, _ngModule) {\n this._parent = _parent;\n this._ngModule = _ngModule;\n this._factories = new Map();\n for (let /** @type {?} */ i = 0; i < factories.length; i++) {\n const /** @type {?} */ factory = factories[i];\n this._factories.set(factory.componentType, factory);\n }\n }\n /**\n * @template T\n * @param {?} component\n * @return {?}\n */\n resolveComponentFactory(component) {\n let /** @type {?} */ factory = this._factories.get(component);\n if (!factory && this._parent) {\n factory = this._parent.resolveComponentFactory(component);\n }\n if (!factory) {\n throw noComponentFactoryError(component);\n }\n return new ComponentFactoryBoundToModule(factory, this._ngModule);\n }\n}\n/**\n * @template C\n */\nclass ComponentFactoryBoundToModule extends ComponentFactory {\n /**\n * @param {?} factory\n * @param {?} ngModule\n */\n constructor(factory, ngModule) {\n super();\n this.factory = factory;\n this.ngModule = ngModule;\n this.selector = factory.selector;\n this.componentType = factory.componentType;\n this.ngContentSelectors = factory.ngContentSelectors;\n this.inputs = factory.inputs;\n this.outputs = factory.outputs;\n }\n /**\n * @param {?} injector\n * @param {?=} projectableNodes\n * @param {?=} rootSelectorOrNode\n * @param {?=} ngModule\n * @return {?}\n */\n create(injector, projectableNodes, rootSelectorOrNode, ngModule) {\n return this.factory.create(injector, projectableNodes, rootSelectorOrNode, ngModule || this.ngModule);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Represents an instance of an NgModule created via a {\\@link NgModuleFactory}.\n *\n * `NgModuleRef` provides access to the NgModule Instance as well other objects related to this\n * NgModule Instance.\n *\n * \\@stable\n * @abstract\n * @template T\n */\nclass NgModuleRef {\n}\n/**\n * @record\n * @template T\n */\n\n/**\n * \\@experimental\n * @abstract\n * @template T\n */\nclass NgModuleFactory {\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A scope function for the Web Tracing Framework (WTF).\n *\n * \\@experimental\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\nlet trace;\nlet events;\n/**\n * @return {?}\n */\nfunction detectWTF() {\n const /** @type {?} */ wtf = (/** @type {?} */ (_global /** TODO #9100 */) /** TODO #9100 */)['wtf'];\n if (wtf) {\n trace = wtf['trace'];\n if (trace) {\n events = trace['events'];\n return true;\n }\n }\n return false;\n}\n/**\n * @param {?} signature\n * @param {?=} flags\n * @return {?}\n */\nfunction createScope$1(signature, flags = null) {\n return events.createScope(signature, flags);\n}\n/**\n * @template T\n * @param {?} scope\n * @param {?=} returnValue\n * @return {?}\n */\nfunction leave(scope, returnValue) {\n trace.leaveScope(scope, returnValue);\n return returnValue;\n}\n/**\n * @param {?} rangeType\n * @param {?} action\n * @return {?}\n */\nfunction startTimeRange(rangeType, action) {\n return trace.beginTimeRange(rangeType, action);\n}\n/**\n * @param {?} range\n * @return {?}\n */\nfunction endTimeRange(range) {\n trace.endTimeRange(range);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * True if WTF is enabled.\n */\nconst wtfEnabled = detectWTF();\n/**\n * @param {?=} arg0\n * @param {?=} arg1\n * @return {?}\n */\nfunction noopScope(arg0, arg1) {\n return null;\n}\n/**\n * Create trace scope.\n *\n * Scopes must be strictly nested and are analogous to stack frames, but\n * do not have to follow the stack frames. Instead it is recommended that they follow logical\n * nesting. You may want to use\n * [Event\n * Signatures](http://google.github.io/tracing-framework/instrumenting-code.html#custom-events)\n * as they are defined in WTF.\n *\n * Used to mark scope entry. The return value is used to leave the scope.\n *\n * var myScope = wtfCreateScope('MyClass#myMethod(ascii someVal)');\n *\n * someMethod() {\n * var s = myScope('Foo'); // 'Foo' gets stored in tracing UI\n * // DO SOME WORK HERE\n * return wtfLeave(s, 123); // Return value 123\n * }\n *\n * Note, adding try-finally block around the work to ensure that `wtfLeave` gets called can\n * negatively impact the performance of your application. For this reason we recommend that\n * you don't add them to ensure that `wtfLeave` gets called. In production `wtfLeave` is a noop and\n * so try-finally block has no value. When debugging perf issues, skipping `wtfLeave`, do to\n * exception, will produce incorrect trace, but presence of exception signifies logic error which\n * needs to be fixed before the app should be profiled. Add try-finally only when you expect that\n * an exception is expected during normal execution while profiling.\n *\n * \\@experimental\n */\nconst wtfCreateScope = wtfEnabled ? createScope$1 : (signature, flags) => noopScope;\n/**\n * Used to mark end of Scope.\n *\n * - `scope` to end.\n * - `returnValue` (optional) to be passed to the WTF.\n *\n * Returns the `returnValue for easy chaining.\n * \\@experimental\n */\nconst wtfLeave = wtfEnabled ? leave : (s, r) => r;\n/**\n * Used to mark Async start. Async are similar to scope but they don't have to be strictly nested.\n * The return value is used in the call to [endAsync]. Async ranges only work if WTF has been\n * enabled.\n *\n * someMethod() {\n * var s = wtfStartTimeRange('HTTP:GET', 'some.url');\n * var future = new Future.delay(5).then((_) {\n * wtfEndTimeRange(s);\n * });\n * }\n * \\@experimental\n */\nconst wtfStartTimeRange = wtfEnabled ? startTimeRange : (rangeType, action) => null;\n/**\n * Ends a async time range operation.\n * [range] is the return value from [wtfStartTimeRange] Async ranges only work if WTF has been\n * enabled.\n * \\@experimental\n */\nconst wtfEndTimeRange = wtfEnabled ? endTimeRange : (r) => null;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Use by directives and components to emit custom Events.\n *\n * ### Examples\n *\n * In the following example, `Zippy` alternatively emits `open` and `close` events when its\n * title gets clicked:\n *\n * ```\n * \\@Component({\n * selector: 'zippy',\n * template: `\n * <div class=\"zippy\">\n * <div (click)=\"toggle()\">Toggle</div>\n * <div [hidden]=\"!visible\">\n * <ng-content></ng-content>\n * </div>\n * </div>`})\n * export class Zippy {\n * visible: boolean = true;\n * \\@Output() open: EventEmitter<any> = new EventEmitter();\n * \\@Output() close: EventEmitter<any> = new EventEmitter();\n *\n * toggle() {\n * this.visible = !this.visible;\n * if (this.visible) {\n * this.open.emit(null);\n * } else {\n * this.close.emit(null);\n * }\n * }\n * }\n * ```\n *\n * The events payload can be accessed by the parameter `$event` on the components output event\n * handler:\n *\n * ```\n * <zippy (open)=\"onOpen($event)\" (close)=\"onClose($event)\"></zippy>\n * ```\n *\n * Uses Rx.Observable but provides an adapter to make it work as specified here:\n * https://github.com/jhusain/observable-spec\n *\n * Once a reference implementation of the spec is available, switch to it.\n * \\@stable\n * @template T\n */\nclass EventEmitter extends Subject {\n /**\n * Creates an instance of {\\@link EventEmitter}, which depending on `isAsync`,\n * delivers events synchronously or asynchronously.\n *\n * @param {?=} isAsync By default, events are delivered synchronously (default value: `false`).\n * Set to `true` for asynchronous event delivery.\n */\n constructor(isAsync = false) {\n super();\n this.__isAsync = isAsync;\n }\n /**\n * @param {?=} value\n * @return {?}\n */\n emit(value) { super.next(value); }\n /**\n * @param {?=} generatorOrNext\n * @param {?=} error\n * @param {?=} complete\n * @return {?}\n */\n subscribe(generatorOrNext, error, complete) {\n let /** @type {?} */ schedulerFn;\n let /** @type {?} */ errorFn = (err) => null;\n let /** @type {?} */ completeFn = () => null;\n if (generatorOrNext && typeof generatorOrNext === 'object') {\n schedulerFn = this.__isAsync ? (value) => {\n setTimeout(() => generatorOrNext.next(value));\n } : (value) => { generatorOrNext.next(value); };\n if (generatorOrNext.error) {\n errorFn = this.__isAsync ? (err) => { setTimeout(() => generatorOrNext.error(err)); } :\n (err) => { generatorOrNext.error(err); };\n }\n if (generatorOrNext.complete) {\n completeFn = this.__isAsync ? () => { setTimeout(() => generatorOrNext.complete()); } :\n () => { generatorOrNext.complete(); };\n }\n }\n else {\n schedulerFn = this.__isAsync ? (value) => { setTimeout(() => generatorOrNext(value)); } :\n (value) => { generatorOrNext(value); };\n if (error) {\n errorFn =\n this.__isAsync ? (err) => { setTimeout(() => error(err)); } : (err) => { error(err); };\n }\n if (complete) {\n completeFn =\n this.__isAsync ? () => { setTimeout(() => complete()); } : () => { complete(); };\n }\n }\n const /** @type {?} */ sink = super.subscribe(schedulerFn, errorFn, completeFn);\n if (generatorOrNext instanceof Subscription) {\n generatorOrNext.add(sink);\n }\n return sink;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\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 * ### Example\n *\n * ```\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 * \\@experimental\n */\nclass NgZone {\n /**\n * @param {?} __0\n */\n constructor({ enableLongStackTrace = false }) {\n this.hasPendingMicrotasks = false;\n this.hasPendingMacrotasks = false;\n /**\n * Whether there are no outstanding microtasks or macrotasks.\n */\n this.isStable = true;\n /**\n * Notifies when code enters Angular Zone. This gets fired first on VM Turn.\n */\n this.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 this.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 this.onStable = new EventEmitter(false);\n /**\n * Notifies that an error has been delivered.\n */\n this.onError = new EventEmitter(false);\n if (typeof Zone == 'undefined') {\n throw new Error(`In this configuration Angular requires Zone.js`);\n }\n Zone.assertZonePatched();\n const /** @type {?} */ self = /** @type {?} */ ((this));\n self._nesting = 0;\n self._outer = self._inner = Zone.current;\n if ((/** @type {?} */ (Zone))['wtfZoneSpec']) {\n self._inner = self._inner.fork((/** @type {?} */ (Zone))['wtfZoneSpec']);\n }\n if (enableLongStackTrace && (/** @type {?} */ (Zone))['longStackTraceZoneSpec']) {\n self._inner = self._inner.fork((/** @type {?} */ (Zone))['longStackTraceZoneSpec']);\n }\n forkInnerZoneWithAngularBehavior(self);\n }\n /**\n * @return {?}\n */\n static isInAngularZone() { return Zone.current.get('isAngularZone') === true; }\n /**\n * @return {?}\n */\n static assertInAngularZone() {\n if (!NgZone.isInAngularZone()) {\n throw new Error('Expected to be in Angular Zone, but it is not!');\n }\n }\n /**\n * @return {?}\n */\n static assertNotInAngularZone() {\n if (NgZone.isInAngularZone()) {\n throw new Error('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 * @template T\n * @param {?} fn\n * @param {?=} applyThis\n * @param {?=} applyArgs\n * @return {?}\n */\n run(fn, applyThis, applyArgs) {\n return /** @type {?} */ ((/** @type {?} */ ((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 `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 * @template T\n * @param {?} fn\n * @param {?=} applyThis\n * @param {?=} applyArgs\n * @param {?=} name\n * @return {?}\n */\n runTask(fn, applyThis, applyArgs, name) {\n const /** @type {?} */ zone = (/** @type {?} */ ((this)))._inner;\n const /** @type {?} */ task = zone.scheduleEventTask('NgZoneEvent: ' + name, fn, EMPTY_PAYLOAD, noop, noop);\n try {\n return /** @type {?} */ (zone.runTask(task, applyThis, applyArgs));\n }\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 * @template T\n * @param {?} fn\n * @param {?=} applyThis\n * @param {?=} applyArgs\n * @return {?}\n */\n runGuarded(fn, applyThis, applyArgs) {\n return /** @type {?} */ ((/** @type {?} */ ((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 * @template T\n * @param {?} fn\n * @return {?}\n */\n runOutsideAngular(fn) {\n return /** @type {?} */ ((/** @type {?} */ ((this)))._outer.run(fn));\n }\n}\n/**\n * @return {?}\n */\nfunction noop() { }\nconst EMPTY_PAYLOAD = {};\n/**\n * @param {?} zone\n * @return {?}\n */\nfunction checkStable(zone) {\n if (zone._nesting == 0 && !zone.hasPendingMicrotasks && !zone.isStable) {\n try {\n zone._nesting++;\n zone.onMicrotaskEmpty.emit(null);\n }\n finally {\n zone._nesting--;\n if (!zone.hasPendingMicrotasks) {\n try {\n zone.runOutsideAngular(() => zone.onStable.emit(null));\n }\n finally {\n zone.isStable = true;\n }\n }\n }\n }\n}\n/**\n * @param {?} zone\n * @return {?}\n */\nfunction forkInnerZoneWithAngularBehavior(zone) {\n zone._inner = zone._inner.fork({\n name: 'angular',\n properties: /** @type {?} */ ({ 'isAngularZone': true }),\n onInvokeTask: (delegate, current, target, task, applyThis, applyArgs) => {\n try {\n onEnter(zone);\n return delegate.invokeTask(target, task, applyThis, applyArgs);\n }\n finally {\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 }\n finally {\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 checkStable(zone);\n }\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}\n/**\n * @param {?} zone\n * @return {?}\n */\nfunction onEnter(zone) {\n zone._nesting++;\n if (zone.isStable) {\n zone.isStable = false;\n zone.onUnstable.emit(null);\n }\n}\n/**\n * @param {?} zone\n * @return {?}\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 constructor() {\n this.hasPendingMicrotasks = false;\n this.hasPendingMacrotasks = false;\n this.isStable = true;\n this.onUnstable = new EventEmitter();\n this.onMicrotaskEmpty = new EventEmitter();\n this.onStable = new EventEmitter();\n this.onError = new EventEmitter();\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n run(fn) { return fn(); }\n /**\n * @param {?} fn\n * @return {?}\n */\n runGuarded(fn) { return fn(); }\n /**\n * @param {?} fn\n * @return {?}\n */\n runOutsideAngular(fn) { return fn(); }\n /**\n * @template T\n * @param {?} fn\n * @return {?}\n */\n runTask(fn) { return fn(); }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * The Testability service provides testing hooks that can be accessed from\n * the browser and by services such as Protractor. Each bootstrapped Angular\n * application on the page will have an instance of Testability.\n * \\@experimental\n */\nclass Testability {\n /**\n * @param {?} _ngZone\n */\n constructor(_ngZone) {\n this._ngZone = _ngZone;\n /**\n * \\@internal\n */\n this._pendingCount = 0;\n /**\n * \\@internal\n */\n this._isZoneStable = true;\n /**\n * Whether any work was done since the last 'whenStable' callback. This is\n * useful to detect if this could have potentially destabilized another\n * component while it is stabilizing.\n * \\@internal\n */\n this._didWork = false;\n /**\n * \\@internal\n */\n this._callbacks = [];\n this._watchAngularEvents();\n }\n /**\n * \\@internal\n * @return {?}\n */\n _watchAngularEvents() {\n this._ngZone.onUnstable.subscribe({\n next: () => {\n this._didWork = true;\n this._isZoneStable = false;\n }\n });\n this._ngZone.runOutsideAngular(() => {\n this._ngZone.onStable.subscribe({\n next: () => {\n NgZone.assertNotInAngularZone();\n scheduleMicroTask(() => {\n this._isZoneStable = true;\n this._runCallbacksIfReady();\n });\n }\n });\n });\n }\n /**\n * Increases the number of pending request\n * @return {?}\n */\n increasePendingRequestCount() {\n this._pendingCount += 1;\n this._didWork = true;\n return this._pendingCount;\n }\n /**\n * Decreases the number of pending request\n * @return {?}\n */\n decreasePendingRequestCount() {\n this._pendingCount -= 1;\n if (this._pendingCount < 0) {\n throw new Error('pending async requests below zero');\n }\n this._runCallbacksIfReady();\n return this._pendingCount;\n }\n /**\n * Whether an associated application is stable\n * @return {?}\n */\n isStable() {\n return this._isZoneStable && this._pendingCount == 0 && !this._ngZone.hasPendingMacrotasks;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _runCallbacksIfReady() {\n if (this.isStable()) {\n // Schedules the call backs in a new frame so that it is always async.\n scheduleMicroTask(() => {\n while (this._callbacks.length !== 0) {\n (/** @type {?} */ ((this._callbacks.pop())))(this._didWork);\n }\n this._didWork = false;\n });\n }\n else {\n // Not Ready\n this._didWork = true;\n }\n }\n /**\n * Run callback when the application is stable\n * @param {?} callback function to be called after the application is stable\n * @return {?}\n */\n whenStable(callback) {\n this._callbacks.push(callback);\n this._runCallbacksIfReady();\n }\n /**\n * Get the number of pending requests\n * @return {?}\n */\n getPendingRequestCount() { return this._pendingCount; }\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 * @return {?}\n */\n findProviders(using, provider, exactMatch) {\n // TODO(juliemr): implement.\n return [];\n }\n}\nTestability.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nTestability.ctorParameters = () => [\n { type: NgZone, },\n];\n/**\n * A global registry of {\\@link Testability} instances for specific elements.\n * \\@experimental\n */\nclass TestabilityRegistry {\n constructor() {\n /**\n * \\@internal\n */\n this._applications = new Map();\n _testabilityGetter.addToWindow(this);\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 * @param {?} testability Testability hook\n * @return {?}\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 * @return {?}\n */\n unregisterApplication(token) { this._applications.delete(token); }\n /**\n * Unregisters all applications\n * @return {?}\n */\n unregisterAllApplications() { this._applications.clear(); }\n /**\n * Get a testability hook associated with the application\n * @param {?} elem root element\n * @return {?}\n */\n getTestability(elem) { return this._applications.get(elem) || null; }\n /**\n * Get all registered testabilities\n * @return {?}\n */\n getAllTestabilities() { return Array.from(this._applications.values()); }\n /**\n * Get all registered applications(root elements)\n * @return {?}\n */\n getAllRootElements() { return Array.from(this._applications.keys()); }\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 * @return {?}\n */\n findTestabilityInTree(elem, findInAncestors = true) {\n return _testabilityGetter.findTestabilityInTree(this, elem, findInAncestors);\n }\n}\nTestabilityRegistry.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nTestabilityRegistry.ctorParameters = () => [];\n/**\n * Adapter interface for retrieving the `Testability` service associated for a\n * particular context.\n *\n * \\@experimental Testability apis are primarily intended to be used by e2e test tool vendors like\n * the Protractor team.\n * @record\n */\n\nclass _NoopGetTestability {\n /**\n * @param {?} registry\n * @return {?}\n */\n addToWindow(registry) { }\n /**\n * @param {?} registry\n * @param {?} elem\n * @param {?} findInAncestors\n * @return {?}\n */\n findTestabilityInTree(registry, elem, findInAncestors) {\n return null;\n }\n}\n/**\n * Set the {\\@link GetTestability} implementation used by the Angular testing framework.\n * \\@experimental\n * @param {?} getter\n * @return {?}\n */\nfunction setTestabilityGetter(getter) {\n _testabilityGetter = getter;\n}\nlet _testabilityGetter = new _NoopGetTestability();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nlet _devMode = true;\nlet _runModeLocked = false;\nlet _platform;\nconst ALLOW_MULTIPLE_PLATFORMS = new InjectionToken('AllowMultipleToken');\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 * \\@stable\n * @return {?}\n */\nfunction enableProdMode() {\n if (_runModeLocked) {\n throw new Error('Cannot enable prod mode after platform setup.');\n }\n _devMode = false;\n}\n/**\n * Returns whether Angular is in development mode. After called once,\n * the value is locked and won't change any more.\n *\n * By default, this is true, unless a user calls `enableProdMode` before calling this.\n *\n * \\@experimental APIs related to application bootstrap are currently under review.\n * @return {?}\n */\nfunction isDevMode() {\n _runModeLocked = true;\n return _devMode;\n}\n/**\n * A token for third-party components that can register themselves with NgProbe.\n *\n * \\@experimental\n */\nclass NgProbeToken {\n /**\n * @param {?} name\n * @param {?} token\n */\n constructor(name, token) {\n this.name = name;\n this.token = token;\n }\n}\n/**\n * Creates a platform.\n * Platforms have to be eagerly created via this function.\n *\n * \\@experimental APIs related to application bootstrap are currently under review.\n * @param {?} injector\n * @return {?}\n */\nfunction createPlatform(injector) {\n if (_platform && !_platform.destroyed &&\n !_platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {\n throw new Error('There can be only one platform. Destroy the previous one to create a new one.');\n }\n _platform = injector.get(PlatformRef);\n const /** @type {?} */ inits = injector.get(PLATFORM_INITIALIZER, null);\n if (inits)\n inits.forEach((init) => init());\n return _platform;\n}\n/**\n * Creates a factory for a platform\n *\n * \\@experimental APIs related to application bootstrap are currently under review.\n * @param {?} parentPlatformFactory\n * @param {?} name\n * @param {?=} providers\n * @return {?}\n */\nfunction createPlatformFactory(parentPlatformFactory, name, providers = []) {\n const /** @type {?} */ desc = `Platform: ${name}`;\n const /** @type {?} */ marker = new InjectionToken(desc);\n return (extraProviders = []) => {\n let /** @type {?} */ platform = getPlatform();\n if (!platform || platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {\n if (parentPlatformFactory) {\n parentPlatformFactory(providers.concat(extraProviders).concat({ provide: marker, useValue: true }));\n }\n else {\n const /** @type {?} */ injectedProviders = providers.concat(extraProviders).concat({ provide: marker, useValue: true });\n createPlatform(Injector.create({ providers: injectedProviders, name: desc }));\n }\n }\n return assertPlatform(marker);\n };\n}\n/**\n * Checks that there currently is a platform which contains the given token as a provider.\n *\n * \\@experimental APIs related to application bootstrap are currently under review.\n * @param {?} requiredToken\n * @return {?}\n */\nfunction assertPlatform(requiredToken) {\n const /** @type {?} */ platform = getPlatform();\n if (!platform) {\n throw new Error('No platform exists!');\n }\n if (!platform.injector.get(requiredToken, null)) {\n throw new Error('A platform with a different configuration has been created. Please destroy it first.');\n }\n return platform;\n}\n/**\n * Destroy the existing platform.\n *\n * \\@experimental APIs related to application bootstrap are currently under review.\n * @return {?}\n */\nfunction destroyPlatform() {\n if (_platform && !_platform.destroyed) {\n _platform.destroy();\n }\n}\n/**\n * Returns the current platform.\n *\n * \\@experimental APIs related to application bootstrap are currently under review.\n * @return {?}\n */\nfunction getPlatform() {\n return _platform && !_platform.destroyed ? _platform : null;\n}\n/**\n * Provides additional options to the bootstraping process.\n *\n * \\@stable\n * @record\n */\n\n/**\n * The Angular platform is the entry point for Angular on a web page. Each page\n * has exactly one platform, and services (such as reflection) which are common\n * to every Angular application running on the page are bound in its scope.\n *\n * A page's platform is initialized implicitly when a platform is created via a platform factory\n * (e.g. {\\@link platformBrowser}), or explicitly by calling the {\\@link createPlatform} function.\n *\n * \\@stable\n */\nclass PlatformRef {\n /**\n * \\@internal\n * @param {?} _injector\n */\n constructor(_injector) {\n this._injector = _injector;\n this._modules = [];\n this._destroyListeners = [];\n this._destroyed = false;\n }\n /**\n * Creates an instance of an `\\@NgModule` for the given platform\n * for offline compilation.\n *\n * ## Simple Example\n *\n * ```typescript\n * my_module.ts:\n *\n * \\@NgModule({\n * imports: [BrowserModule]\n * })\n * class MyModule {}\n *\n * main.ts:\n * import {MyModuleNgFactory} from './my_module.ngfactory';\n * import {platformBrowser} from '\\@angular/platform-browser';\n *\n * let moduleRef = platformBrowser().bootstrapModuleFactory(MyModuleNgFactory);\n * ```\n *\n * \\@experimental APIs related to application bootstrap are currently under review.\n * @template M\n * @param {?} moduleFactory\n * @param {?=} options\n * @return {?}\n */\n bootstrapModuleFactory(moduleFactory, options) {\n // Note: We need to create the NgZone _before_ we instantiate the module,\n // as instantiating the module creates some providers eagerly.\n // So we create a mini parent injector that just contains the new NgZone and\n // pass that as parent to the NgModuleFactory.\n const /** @type {?} */ ngZoneOption = options ? options.ngZone : undefined;\n const /** @type {?} */ ngZone = getNgZone(ngZoneOption);\n const /** @type {?} */ providers = [{ provide: NgZone, useValue: ngZone }];\n // Attention: Don't use ApplicationRef.run here,\n // as we want to be sure that all possible constructor calls are inside `ngZone.run`!\n return ngZone.run(() => {\n const /** @type {?} */ ngZoneInjector = Injector.create({ providers: providers, parent: this.injector, name: moduleFactory.moduleType.name });\n const /** @type {?} */ moduleRef = /** @type {?} */ (moduleFactory.create(ngZoneInjector));\n const /** @type {?} */ exceptionHandler = moduleRef.injector.get(ErrorHandler, null);\n if (!exceptionHandler) {\n throw new Error('No ErrorHandler. Is platform module (BrowserModule) included?');\n }\n moduleRef.onDestroy(() => remove(this._modules, moduleRef)); /** @type {?} */\n ((ngZone)).runOutsideAngular(() => /** @type {?} */ ((ngZone)).onError.subscribe({ next: (error) => { exceptionHandler.handleError(error); } }));\n return _callAndReportToErrorHandler(exceptionHandler, /** @type {?} */ ((ngZone)), () => {\n const /** @type {?} */ initStatus = moduleRef.injector.get(ApplicationInitStatus);\n initStatus.runInitializers();\n return initStatus.donePromise.then(() => {\n this._moduleDoBootstrap(moduleRef);\n return moduleRef;\n });\n });\n });\n }\n /**\n * Creates an instance of an `\\@NgModule` for a given platform using the given runtime compiler.\n *\n * ## Simple Example\n *\n * ```typescript\n * \\@NgModule({\n * imports: [BrowserModule]\n * })\n * class MyModule {}\n *\n * let moduleRef = platformBrowser().bootstrapModule(MyModule);\n * ```\n * \\@stable\n * @template M\n * @param {?} moduleType\n * @param {?=} compilerOptions\n * @return {?}\n */\n bootstrapModule(moduleType, compilerOptions = []) {\n const /** @type {?} */ compilerFactory = this.injector.get(CompilerFactory);\n const /** @type {?} */ options = optionsReducer({}, compilerOptions);\n const /** @type {?} */ compiler = compilerFactory.createCompiler([options]);\n return compiler.compileModuleAsync(moduleType)\n .then((moduleFactory) => this.bootstrapModuleFactory(moduleFactory, options));\n }\n /**\n * @param {?} moduleRef\n * @return {?}\n */\n _moduleDoBootstrap(moduleRef) {\n const /** @type {?} */ appRef = /** @type {?} */ (moduleRef.injector.get(ApplicationRef));\n if (moduleRef._bootstrapComponents.length > 0) {\n moduleRef._bootstrapComponents.forEach(f => appRef.bootstrap(f));\n }\n else if (moduleRef.instance.ngDoBootstrap) {\n moduleRef.instance.ngDoBootstrap(appRef);\n }\n else {\n throw new Error(`The module ${stringify(moduleRef.instance.constructor)} was bootstrapped, but it does not declare \"@NgModule.bootstrap\" components nor a \"ngDoBootstrap\" method. ` +\n `Please define one of these.`);\n }\n this._modules.push(moduleRef);\n }\n /**\n * Register a listener to be called when the platform is disposed.\n * @param {?} callback\n * @return {?}\n */\n onDestroy(callback) { this._destroyListeners.push(callback); }\n /**\n * Retrieve the platform {\\@link Injector}, which is the parent injector for\n * every Angular application on the page and provides singleton providers.\n * @return {?}\n */\n get injector() { return this._injector; }\n /**\n * Destroy the Angular platform and all Angular applications on the page.\n * @return {?}\n */\n destroy() {\n if (this._destroyed) {\n throw new Error('The platform has already been destroyed!');\n }\n this._modules.slice().forEach(module => module.destroy());\n this._destroyListeners.forEach(listener => listener());\n this._destroyed = true;\n }\n /**\n * @return {?}\n */\n get destroyed() { return this._destroyed; }\n}\nPlatformRef.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nPlatformRef.ctorParameters = () => [\n { type: Injector, },\n];\n/**\n * @param {?=} ngZoneOption\n * @return {?}\n */\nfunction getNgZone(ngZoneOption) {\n let /** @type {?} */ ngZone;\n if (ngZoneOption === 'noop') {\n ngZone = new NoopNgZone();\n }\n else {\n ngZone = (ngZoneOption === 'zone.js' ? undefined : ngZoneOption) ||\n new NgZone({ enableLongStackTrace: isDevMode() });\n }\n return ngZone;\n}\n/**\n * @param {?} errorHandler\n * @param {?} ngZone\n * @param {?} callback\n * @return {?}\n */\nfunction _callAndReportToErrorHandler(errorHandler, ngZone, callback) {\n try {\n const /** @type {?} */ 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 }\n catch (/** @type {?} */ e) {\n ngZone.runOutsideAngular(() => errorHandler.handleError(e));\n // rethrow as the exception handler might not do it\n throw e;\n }\n}\n/**\n * @template T\n * @param {?} dst\n * @param {?} objs\n * @return {?}\n */\nfunction optionsReducer(dst, objs) {\n if (Array.isArray(objs)) {\n dst = objs.reduce(optionsReducer, dst);\n }\n else {\n dst = Object.assign({}, dst, (/** @type {?} */ (objs)));\n }\n return dst;\n}\n/**\n * A reference to an Angular application running on a page.\n *\n * \\@stable\n */\nclass ApplicationRef {\n /**\n * \\@internal\n * @param {?} _zone\n * @param {?} _console\n * @param {?} _injector\n * @param {?} _exceptionHandler\n * @param {?} _componentFactoryResolver\n * @param {?} _initStatus\n */\n constructor(_zone, _console, _injector, _exceptionHandler, _componentFactoryResolver, _initStatus) {\n this._zone = _zone;\n this._console = _console;\n this._injector = _injector;\n this._exceptionHandler = _exceptionHandler;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._initStatus = _initStatus;\n this._bootstrapListeners = [];\n this._views = [];\n this._runningTick = false;\n this._enforceNoNewChanges = false;\n this._stable = true;\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 this.componentTypes = [];\n /**\n * Get a list of components registered to this application.\n */\n this.components = [];\n this._enforceNoNewChanges = isDevMode();\n this._zone.onMicrotaskEmpty.subscribe({ next: () => { this._zone.run(() => { this.tick(); }); } });\n const /** @type {?} */ isCurrentlyStable = new Observable((observer) => {\n this._stable = this._zone.isStable && !this._zone.hasPendingMacrotasks &&\n !this._zone.hasPendingMicrotasks;\n this._zone.runOutsideAngular(() => {\n observer.next(this._stable);\n observer.complete();\n });\n });\n const /** @type {?} */ isStable = new Observable((observer) => {\n // Create the subscription to onStable outside the Angular Zone so that\n // the callback is run outside the Angular Zone.\n let /** @type {?} */ stableSub;\n this._zone.runOutsideAngular(() => {\n stableSub = 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 scheduleMicroTask(() => {\n if (!this._stable && !this._zone.hasPendingMacrotasks &&\n !this._zone.hasPendingMicrotasks) {\n this._stable = true;\n observer.next(true);\n }\n });\n });\n });\n const /** @type {?} */ unstableSub = this._zone.onUnstable.subscribe(() => {\n NgZone.assertInAngularZone();\n if (this._stable) {\n this._stable = false;\n this._zone.runOutsideAngular(() => { observer.next(false); });\n }\n });\n return () => {\n stableSub.unsubscribe();\n unstableSub.unsubscribe();\n };\n });\n (/** @type {?} */ (this)).isStable =\n merge(isCurrentlyStable, share.call(isStable));\n }\n /**\n * Bootstrap a new component at the root level of the application.\n *\n * ### Bootstrap process\n *\n * When bootstrapping a new root component into an application, Angular mounts the\n * specified application component onto DOM elements identified by the [componentType]'s\n * selector and kicks off automatic change detection to finish initializing the component.\n *\n * Optionally, a component can be mounted onto a DOM element that does not match the\n * [componentType]'s selector.\n *\n * ### Example\n * {\\@example core/ts/platform/platform.ts region='longform'}\n * @template C\n * @param {?} componentOrFactory\n * @param {?=} rootSelectorOrNode\n * @return {?}\n */\n bootstrap(componentOrFactory, rootSelectorOrNode) {\n if (!this._initStatus.done) {\n throw new Error('Cannot bootstrap as there are still asynchronous initializers running. Bootstrap components in the `ngDoBootstrap` method of the root module.');\n }\n let /** @type {?} */ componentFactory;\n if (componentOrFactory instanceof ComponentFactory) {\n componentFactory = componentOrFactory;\n }\n else {\n componentFactory =\n /** @type {?} */ ((this._componentFactoryResolver.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 /** @type {?} */ ngModule = componentFactory instanceof ComponentFactoryBoundToModule ?\n null :\n this._injector.get(NgModuleRef);\n const /** @type {?} */ selectorOrNode = rootSelectorOrNode || componentFactory.selector;\n const /** @type {?} */ compRef = componentFactory.create(Injector.NULL, [], selectorOrNode, ngModule);\n compRef.onDestroy(() => { this._unloadComponent(compRef); });\n const /** @type {?} */ testability = compRef.injector.get(Testability, null);\n if (testability) {\n compRef.injector.get(TestabilityRegistry)\n .registerApplication(compRef.location.nativeElement, testability);\n }\n this._loadComponent(compRef);\n if (isDevMode()) {\n this._console.log(`Angular is running in the development mode. Call enableProdMode() to enable the production 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 * @return {?}\n */\n tick() {\n if (this._runningTick) {\n throw new Error('ApplicationRef.tick is called recursively');\n }\n const /** @type {?} */ scope = ApplicationRef._tickScope();\n try {\n this._runningTick = true;\n this._views.forEach((view) => view.detectChanges());\n if (this._enforceNoNewChanges) {\n this._views.forEach((view) => view.checkNoChanges());\n }\n }\n catch (/** @type {?} */ e) {\n // Attention: Don't rethrow as it could cancel subscriptions to Observables!\n this._zone.runOutsideAngular(() => this._exceptionHandler.handleError(e));\n }\n finally {\n this._runningTick = false;\n wtfLeave(scope);\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 * @param {?} viewRef\n * @return {?}\n */\n attachView(viewRef) {\n const /** @type {?} */ view = (/** @type {?} */ (viewRef));\n this._views.push(view);\n view.attachToAppRef(this);\n }\n /**\n * Detaches a view from dirty checking again.\n * @param {?} viewRef\n * @return {?}\n */\n detachView(viewRef) {\n const /** @type {?} */ view = (/** @type {?} */ (viewRef));\n remove(this._views, view);\n view.detachFromAppRef();\n }\n /**\n * @param {?} componentRef\n * @return {?}\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 /** @type {?} */ listeners = this._injector.get(APP_BOOTSTRAP_LISTENER, []).concat(this._bootstrapListeners);\n listeners.forEach((listener) => listener(componentRef));\n }\n /**\n * @param {?} componentRef\n * @return {?}\n */\n _unloadComponent(componentRef) {\n this.detachView(componentRef.hostView);\n remove(this.components, componentRef);\n }\n /**\n * \\@internal\n * @return {?}\n */\n ngOnDestroy() {\n // TODO(alxhub): Dispose of the NgZone.\n this._views.slice().forEach((view) => view.destroy());\n }\n /**\n * Returns the number of attached views.\n * @return {?}\n */\n get viewCount() { return this._views.length; }\n}\n/**\n * \\@internal\n */\nApplicationRef._tickScope = wtfCreateScope('ApplicationRef#tick()');\nApplicationRef.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nApplicationRef.ctorParameters = () => [\n { type: NgZone, },\n { type: Console, },\n { type: Injector, },\n { type: ErrorHandler, },\n { type: ComponentFactoryResolver, },\n { type: ApplicationInitStatus, },\n];\n/**\n * @template T\n * @param {?} list\n * @param {?} el\n * @return {?}\n */\nfunction remove(list, el) {\n const /** @type {?} */ index = list.indexOf(el);\n if (index > -1) {\n list.splice(index, 1);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @deprecated Use `RendererType2` (and `Renderer2`) instead.\n */\nclass RenderComponentType {\n /**\n * @param {?} id\n * @param {?} templateUrl\n * @param {?} slotCount\n * @param {?} encapsulation\n * @param {?} styles\n * @param {?} animations\n */\n constructor(id, templateUrl, slotCount, encapsulation, styles, animations) {\n this.id = id;\n this.templateUrl = templateUrl;\n this.slotCount = slotCount;\n this.encapsulation = encapsulation;\n this.styles = styles;\n this.animations = animations;\n }\n}\n/**\n * @deprecated Debug info is handeled internally in the view engine now.\n * @abstract\n */\nclass RenderDebugInfo {\n}\n/**\n * @deprecated Use the `Renderer2` instead.\n * @record\n */\n\n/**\n * @deprecated Use the `Renderer2` instead.\n * @abstract\n */\nclass Renderer {\n}\nconst Renderer2Interceptor = new InjectionToken('Renderer2Interceptor');\n/**\n * Injectable service that provides a low-level interface for modifying the UI.\n *\n * Use this service to bypass Angular's templating and make custom UI changes that can't be\n * expressed declaratively. For example if you need to set a property or an attribute whose name is\n * not statically known, use {\\@link Renderer#setElementProperty setElementProperty} or\n * {\\@link Renderer#setElementAttribute setElementAttribute} respectively.\n *\n * If you are implementing a custom renderer, you must implement this interface.\n *\n * The default Renderer implementation is `DomRenderer`. Also available is `WebWorkerRenderer`.\n *\n * @deprecated Use `RendererFactory2` instead.\n * @abstract\n */\nclass RootRenderer {\n}\n/**\n * \\@experimental\n * @record\n */\n\n/**\n * \\@experimental\n * @abstract\n */\nclass RendererFactory2 {\n}\n/** @enum {number} */\nconst RendererStyleFlags2 = {\n Important: 1,\n DashCase: 2,\n};\nRendererStyleFlags2[RendererStyleFlags2.Important] = \"Important\";\nRendererStyleFlags2[RendererStyleFlags2.DashCase] = \"DashCase\";\n/**\n * \\@experimental\n * @abstract\n */\nclass Renderer2 {\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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](http://g.co/ng/security).\n *\n * \\@stable\n */\nclass ElementRef {\n /**\n * @param {?} nativeElement\n */\n constructor(nativeElement) { this.nativeElement = nativeElement; }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Used to load ng module factories.\n * \\@stable\n * @abstract\n */\nclass NgModuleFactoryLoader {\n}\nlet moduleFactories = new Map();\n/**\n * Registers a loaded module. Should only be called from generated NgModuleFactory code.\n * \\@experimental\n * @param {?} id\n * @param {?} factory\n * @return {?}\n */\nfunction registerModuleFactory(id, factory) {\n const /** @type {?} */ existing = moduleFactories.get(id);\n if (existing) {\n throw new Error(`Duplicate module registered for ${id} - ${existing.moduleType.name} vs ${factory.moduleType.name}`);\n }\n moduleFactories.set(id, factory);\n}\n/**\n * @return {?}\n */\n\n/**\n * Returns the NgModuleFactory with the given id, if it exists and has been loaded.\n * Factories for modules that do not specify an `id` cannot be retrieved. Throws if the module\n * cannot be found.\n * \\@experimental\n * @param {?} id\n * @return {?}\n */\nfunction getModuleFactory(id) {\n const /** @type {?} */ factory = moduleFactories.get(id);\n if (!factory)\n throw new Error(`No module with ID ${id} loaded`);\n return factory;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 * ### Example ([live demo](http://plnkr.co/edit/RX8sJnQYl9FWuSCWme5z?p=preview))\n * ```typescript\n * \\@Component({...})\n * class Container {\n * \\@ViewChildren(Item) items:QueryList<Item>;\n * }\n * ```\n * \\@stable\n * @template T\n */\nclass QueryList {\n constructor() {\n this.dirty = true;\n this._results = [];\n this.changes = new EventEmitter();\n this.length = 0;\n }\n /**\n * See\n * [Array.map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)\n * @template U\n * @param {?} fn\n * @return {?}\n */\n map(fn) { return this._results.map(fn); }\n /**\n * See\n * [Array.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)\n * @param {?} fn\n * @return {?}\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 * @param {?} fn\n * @return {?}\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 * @template U\n * @param {?} fn\n * @param {?} init\n * @return {?}\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 * @param {?} fn\n * @return {?}\n */\n forEach(fn) { this._results.forEach(fn); }\n /**\n * See\n * [Array.some](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some)\n * @param {?} fn\n * @return {?}\n */\n some(fn) {\n return this._results.some(fn);\n }\n /**\n * @return {?}\n */\n toArray() { return this._results.slice(); }\n /**\n * @return {?}\n */\n [getSymbolIterator()]() { return (/** @type {?} */ (this._results))[getSymbolIterator()](); }\n /**\n * @return {?}\n */\n toString() { return this._results.toString(); }\n /**\n * @param {?} res\n * @return {?}\n */\n reset(res) {\n this._results = flatten(res);\n (/** @type {?} */ (this)).dirty = false;\n (/** @type {?} */ (this)).length = this._results.length;\n (/** @type {?} */ (this)).last = this._results[this.length - 1];\n (/** @type {?} */ (this)).first = this._results[0];\n }\n /**\n * @return {?}\n */\n notifyOnChanges() { (/** @type {?} */ (this.changes)).emit(this); }\n /**\n * internal\n * @return {?}\n */\n setDirty() { (/** @type {?} */ (this)).dirty = true; }\n /**\n * internal\n * @return {?}\n */\n destroy() {\n (/** @type {?} */ (this.changes)).complete();\n (/** @type {?} */ (this.changes)).unsubscribe();\n }\n}\n/**\n * @template T\n * @param {?} list\n * @return {?}\n */\nfunction flatten(list) {\n return list.reduce((flat, item) => {\n const /** @type {?} */ flatItem = Array.isArray(item) ? flatten(item) : item;\n return (/** @type {?} */ (flat)).concat(flatItem);\n }, []);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst _SEPARATOR = '#';\nconst FACTORY_CLASS_SUFFIX = 'NgFactory';\n/**\n * Configuration for SystemJsNgModuleLoader.\n * token.\n *\n * \\@experimental\n * @abstract\n */\nclass SystemJsNgModuleLoaderConfig {\n}\nconst DEFAULT_CONFIG = {\n factoryPathPrefix: '',\n factoryPathSuffix: '.ngfactory',\n};\n/**\n * NgModuleFactoryLoader that uses SystemJS to load NgModuleFactory\n * \\@experimental\n */\nclass SystemJsNgModuleLoader {\n /**\n * @param {?} _compiler\n * @param {?=} config\n */\n constructor(_compiler, config) {\n this._compiler = _compiler;\n this._config = config || DEFAULT_CONFIG;\n }\n /**\n * @param {?} path\n * @return {?}\n */\n load(path) {\n const /** @type {?} */ offlineMode = this._compiler instanceof Compiler;\n return offlineMode ? this.loadFactory(path) : this.loadAndCompile(path);\n }\n /**\n * @param {?} path\n * @return {?}\n */\n loadAndCompile(path) {\n let [module, exportName] = path.split(_SEPARATOR);\n if (exportName === undefined) {\n exportName = 'default';\n }\n return System.import(module)\n .then((module) => module[exportName])\n .then((type) => checkNotEmpty(type, module, exportName))\n .then((type) => this._compiler.compileModuleAsync(type));\n }\n /**\n * @param {?} path\n * @return {?}\n */\n loadFactory(path) {\n let [module, exportName] = path.split(_SEPARATOR);\n let /** @type {?} */ factoryClassSuffix = FACTORY_CLASS_SUFFIX;\n if (exportName === undefined) {\n exportName = 'default';\n factoryClassSuffix = '';\n }\n return System.import(this._config.factoryPathPrefix + module + this._config.factoryPathSuffix)\n .then((module) => module[exportName + factoryClassSuffix])\n .then((factory) => checkNotEmpty(factory, module, exportName));\n }\n}\nSystemJsNgModuleLoader.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nSystemJsNgModuleLoader.ctorParameters = () => [\n { type: Compiler, },\n { type: SystemJsNgModuleLoaderConfig, decorators: [{ type: Optional },] },\n];\n/**\n * @param {?} value\n * @param {?} modulePath\n * @param {?} exportName\n * @return {?}\n */\nfunction checkNotEmpty(value, modulePath, exportName) {\n if (!value) {\n throw new Error(`Cannot find '${exportName}' in '${modulePath}'`);\n }\n return value;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Represents an Embedded Template that can be used to instantiate Embedded Views.\n *\n * You can access a `TemplateRef`, in two ways. Via a directive placed on a `<ng-template>` element\n * (or directive prefixed with `*`) and have the `TemplateRef` for this Embedded View injected into\n * the constructor of the directive using the `TemplateRef` Token. Alternatively you can query for\n * the `TemplateRef` from a Component or a Directive via {\\@link Query}.\n *\n * To instantiate Embedded Views based on a Template, use {\\@link ViewContainerRef#\n * createEmbeddedView}, which will create the View and attach it to the View Container.\n * \\@stable\n * @abstract\n * @template C\n */\nclass TemplateRef {\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Represents a container where one or more Views can be attached.\n *\n * The container can contain two kinds of Views. Host Views, created by instantiating a\n * {\\@link Component} via {\\@link #createComponent}, and Embedded Views, created by instantiating an\n * {\\@link TemplateRef Embedded Template} via {\\@link #createEmbeddedView}.\n *\n * The location of the View Container within the containing View is specified by the Anchor\n * `element`. Each View Container can have only one Anchor Element and each Anchor Element can only\n * have a single View Container.\n *\n * Root elements of Views attached to this container become siblings of the Anchor Element in\n * the Rendered View.\n *\n * To access a `ViewContainerRef` of an Element, you can either place a {\\@link Directive} injected\n * with `ViewContainerRef` on the Element, or you obtain it via a {\\@link ViewChild} query.\n * \\@stable\n * @abstract\n */\nclass ViewContainerRef {\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@stable\n * @abstract\n */\nclass ChangeDetectorRef {\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@stable\n * @abstract\n */\nclass ViewRef extends ChangeDetectorRef {\n}\n/**\n * Represents an Angular View.\n *\n * <!-- TODO: move the next two paragraphs to the dev guide -->\n * A View is a fundamental building block of the application UI. It is the smallest grouping of\n * Elements which are created and destroyed together.\n *\n * Properties of elements in a View can change, but the structure (number and order) of elements in\n * a View cannot. Changing the structure of Elements can only be done by inserting, moving or\n * removing nested Views via a {\\@link ViewContainerRef}. Each View can contain many View Containers.\n * <!-- /TODO -->\n *\n * ### Example\n *\n * Given this template...\n *\n * ```\n * Count: {{items.length}}\n * <ul>\n * <li *ngFor=\"let item of items\">{{item}}</li>\n * </ul>\n * ```\n *\n * We have two {\\@link TemplateRef}s:\n *\n * Outer {\\@link TemplateRef}:\n * ```\n * Count: {{items.length}}\n * <ul>\n * <ng-template ngFor let-item [ngForOf]=\"items\"></ng-template>\n * </ul>\n * ```\n *\n * Inner {\\@link TemplateRef}:\n * ```\n * <li>{{item}}</li>\n * ```\n *\n * Notice that the original template is broken down into two separate {\\@link TemplateRef}s.\n *\n * The outer/inner {\\@link TemplateRef}s are then assembled into views like so:\n *\n * ```\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 * \\@experimental\n * @abstract\n * @template C\n */\nclass EmbeddedViewRef extends ViewRef {\n}\n/**\n * @record\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass EventListener {\n /**\n * @param {?} name\n * @param {?} callback\n */\n constructor(name, callback) {\n this.name = name;\n this.callback = callback;\n }\n}\n/**\n * \\@experimental All debugging apis are currently experimental.\n */\nclass DebugNode {\n /**\n * @param {?} nativeNode\n * @param {?} parent\n * @param {?} _debugContext\n */\n constructor(nativeNode, parent, _debugContext) {\n this._debugContext = _debugContext;\n this.nativeNode = nativeNode;\n if (parent && parent instanceof DebugElement) {\n parent.addChild(this);\n }\n else {\n this.parent = null;\n }\n this.listeners = [];\n }\n /**\n * @return {?}\n */\n get injector() { return this._debugContext.injector; }\n /**\n * @return {?}\n */\n get componentInstance() { return this._debugContext.component; }\n /**\n * @return {?}\n */\n get context() { return this._debugContext.context; }\n /**\n * @return {?}\n */\n get references() { return this._debugContext.references; }\n /**\n * @return {?}\n */\n get providerTokens() { return this._debugContext.providerTokens; }\n}\n/**\n * \\@experimental All debugging apis are currently experimental.\n */\nclass DebugElement extends DebugNode {\n /**\n * @param {?} nativeNode\n * @param {?} parent\n * @param {?} _debugContext\n */\n constructor(nativeNode, parent, _debugContext) {\n super(nativeNode, parent, _debugContext);\n this.properties = {};\n this.attributes = {};\n this.classes = {};\n this.styles = {};\n this.childNodes = [];\n this.nativeElement = nativeNode;\n }\n /**\n * @param {?} child\n * @return {?}\n */\n addChild(child) {\n if (child) {\n this.childNodes.push(child);\n child.parent = this;\n }\n }\n /**\n * @param {?} child\n * @return {?}\n */\n removeChild(child) {\n const /** @type {?} */ childIndex = this.childNodes.indexOf(child);\n if (childIndex !== -1) {\n child.parent = null;\n this.childNodes.splice(childIndex, 1);\n }\n }\n /**\n * @param {?} child\n * @param {?} newChildren\n * @return {?}\n */\n insertChildrenAfter(child, newChildren) {\n const /** @type {?} */ siblingIndex = this.childNodes.indexOf(child);\n if (siblingIndex !== -1) {\n this.childNodes.splice(siblingIndex + 1, 0, ...newChildren);\n newChildren.forEach(c => {\n if (c.parent) {\n c.parent.removeChild(c);\n }\n c.parent = this;\n });\n }\n }\n /**\n * @param {?} refChild\n * @param {?} newChild\n * @return {?}\n */\n insertBefore(refChild, newChild) {\n const /** @type {?} */ refIndex = this.childNodes.indexOf(refChild);\n if (refIndex === -1) {\n this.addChild(newChild);\n }\n else {\n if (newChild.parent) {\n newChild.parent.removeChild(newChild);\n }\n newChild.parent = this;\n this.childNodes.splice(refIndex, 0, newChild);\n }\n }\n /**\n * @param {?} predicate\n * @return {?}\n */\n query(predicate) {\n const /** @type {?} */ results = this.queryAll(predicate);\n return results[0] || null;\n }\n /**\n * @param {?} predicate\n * @return {?}\n */\n queryAll(predicate) {\n const /** @type {?} */ matches = [];\n _queryElementChildren(this, predicate, matches);\n return matches;\n }\n /**\n * @param {?} predicate\n * @return {?}\n */\n queryAllNodes(predicate) {\n const /** @type {?} */ matches = [];\n _queryNodeChildren(this, predicate, matches);\n return matches;\n }\n /**\n * @return {?}\n */\n get children() {\n return /** @type {?} */ (this.childNodes.filter((node) => node instanceof DebugElement));\n }\n /**\n * @param {?} eventName\n * @param {?} eventObj\n * @return {?}\n */\n triggerEventHandler(eventName, eventObj) {\n this.listeners.forEach((listener) => {\n if (listener.name == eventName) {\n listener.callback(eventObj);\n }\n });\n }\n}\n/**\n * \\@experimental\n * @param {?} debugEls\n * @return {?}\n */\nfunction asNativeElements(debugEls) {\n return debugEls.map((el) => el.nativeElement);\n}\n/**\n * @param {?} element\n * @param {?} predicate\n * @param {?} matches\n * @return {?}\n */\nfunction _queryElementChildren(element, predicate, matches) {\n element.childNodes.forEach(node => {\n if (node instanceof DebugElement) {\n if (predicate(node)) {\n matches.push(node);\n }\n _queryElementChildren(node, predicate, matches);\n }\n });\n}\n/**\n * @param {?} parentNode\n * @param {?} predicate\n * @param {?} matches\n * @return {?}\n */\nfunction _queryNodeChildren(parentNode, predicate, matches) {\n if (parentNode instanceof DebugElement) {\n parentNode.childNodes.forEach(node => {\n if (predicate(node)) {\n matches.push(node);\n }\n if (node instanceof DebugElement) {\n _queryNodeChildren(node, predicate, matches);\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();\n/**\n * \\@experimental\n * @param {?} nativeNode\n * @return {?}\n */\nfunction getDebugNode(nativeNode) {\n return _nativeNodeToDebugNode.get(nativeNode) || null;\n}\n/**\n * @return {?}\n */\n\n/**\n * @param {?} node\n * @return {?}\n */\nfunction indexDebugNode(node) {\n _nativeNodeToDebugNode.set(node.nativeNode, node);\n}\n/**\n * @param {?} node\n * @return {?}\n */\nfunction removeDebugNodeFromIndex(node) {\n _nativeNodeToDebugNode.delete(node.nativeNode);\n}\n/**\n * A boolean-valued function over a value, possibly including context information\n * regarding that value's position in an array.\n *\n * \\@experimental All debugging apis are currently experimental.\n * @record\n * @template T\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction devModeEqual(a, b) {\n const /** @type {?} */ isListLikeIterableA = isListLikeIterable(a);\n const /** @type {?} */ isListLikeIterableB = isListLikeIterable(b);\n if (isListLikeIterableA && isListLikeIterableB) {\n return areIterablesEqual(a, b, devModeEqual);\n }\n else {\n const /** @type {?} */ isAObject = a && (typeof a === 'object' || typeof a === 'function');\n const /** @type {?} */ isBObject = b && (typeof b === 'object' || typeof b === 'function');\n if (!isListLikeIterableA && isAObject && !isListLikeIterableB && isBObject) {\n return true;\n }\n else {\n return looseIdentical(a, b);\n }\n }\n}\n/**\n * Indicates that the result of a {\\@link Pipe} transformation has changed even though the\n * reference has not changed.\n *\n * Wrapped values are unwrapped automatically during the change detection, and the unwrapped value\n * is stored.\n *\n * Example:\n *\n * ```\n * if (this._latestValue === this._latestReturnedValue) {\n * return this._latestReturnedValue;\n * } else {\n * this._latestReturnedValue = this._latestValue;\n * return WrappedValue.wrap(this._latestValue); // this will force update\n * }\n * ```\n * \\@stable\n */\nclass WrappedValue {\n /**\n * @param {?} value\n */\n constructor(value) { this.wrapped = value; }\n /**\n * Creates a wrapped value.\n * @param {?} value\n * @return {?}\n */\n static wrap(value) { return new WrappedValue(value); }\n /**\n * Returns the underlying value of a wrapped value.\n * Returns the given `value` when it is not wrapped.\n *\n * @param {?} value\n * @return {?}\n */\n static unwrap(value) { return WrappedValue.isWrapped(value) ? value.wrapped : value; }\n /**\n * Returns true if `value` is a wrapped value.\n * @param {?} value\n * @return {?}\n */\n static isWrapped(value) { return value instanceof WrappedValue; }\n}\n/**\n * Represents a basic change from a previous to a new value.\n * \\@stable\n */\nclass SimpleChange {\n /**\n * @param {?} previousValue\n * @param {?} currentValue\n * @param {?} firstChange\n */\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 * @return {?}\n */\n isFirstChange() { return this.firstChange; }\n}\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction isListLikeIterable(obj) {\n if (!isJsObject(obj))\n return false;\n return Array.isArray(obj) ||\n (!(obj instanceof Map) && // JS Map are iterables but return entries as [k, v]\n // JS Map are iterables but return entries as [k, v]\n getSymbolIterator() in obj); // JS Iterable have a Symbol.iterator prop\n}\n/**\n * @param {?} a\n * @param {?} b\n * @param {?} comparator\n * @return {?}\n */\nfunction areIterablesEqual(a, b, comparator) {\n const /** @type {?} */ iterator1 = a[getSymbolIterator()]();\n const /** @type {?} */ iterator2 = b[getSymbolIterator()]();\n while (true) {\n const /** @type {?} */ item1 = iterator1.next();\n const /** @type {?} */ item2 = iterator2.next();\n if (item1.done && item2.done)\n return true;\n if (item1.done || item2.done)\n return false;\n if (!comparator(item1.value, item2.value))\n return false;\n }\n}\n/**\n * @param {?} obj\n * @param {?} fn\n * @return {?}\n */\nfunction iterateListLike(obj, fn) {\n if (Array.isArray(obj)) {\n for (let /** @type {?} */ i = 0; i < obj.length; i++) {\n fn(obj[i]);\n }\n }\n else {\n const /** @type {?} */ iterator = obj[getSymbolIterator()]();\n let /** @type {?} */ item;\n while (!((item = iterator.next()).done)) {\n fn(item.value);\n }\n }\n}\n/**\n * @param {?} o\n * @return {?}\n */\nfunction isJsObject(o) {\n return o !== null && (typeof o === 'function' || typeof o === 'object');\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass DefaultIterableDifferFactory {\n constructor() { }\n /**\n * @param {?} obj\n * @return {?}\n */\n supports(obj) { return isListLikeIterable(obj); }\n /**\n * @template V\n * @param {?=} trackByFn\n * @return {?}\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 * @template V\n */\nclass DefaultIterableDiffer {\n /**\n * @param {?=} trackByFn\n */\n constructor(trackByFn) {\n this.length = 0;\n this._linkedRecords = null;\n this._unlinkedRecords = null;\n this._previousItHead = null;\n this._itHead = null;\n this._itTail = null;\n this._additionsHead = null;\n this._additionsTail = null;\n this._movesHead = null;\n this._movesTail = null;\n this._removalsHead = null;\n this._removalsTail = null;\n this._identityChangesHead = null;\n this._identityChangesTail = null;\n this._trackByFn = trackByFn || trackByIdentity;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachItem(fn) {\n let /** @type {?} */ record;\n for (record = this._itHead; record !== null; record = record._next) {\n fn(record);\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachOperation(fn) {\n let /** @type {?} */ nextIt = this._itHead;\n let /** @type {?} */ nextRemove = this._removalsHead;\n let /** @type {?} */ addRemoveOffset = 0;\n let /** @type {?} */ moveOffsets = null;\n while (nextIt || nextRemove) {\n // Figure out which is the next record to process\n // Order: remove, add, move\n const /** @type {?} */ record = !nextRemove ||\n nextIt && /** @type {?} */ ((nextIt.currentIndex)) < getPreviousIndex(nextRemove, addRemoveOffset, moveOffsets) ? /** @type {?} */\n ((nextIt)) :\n nextRemove;\n const /** @type {?} */ adjPreviousIndex = getPreviousIndex(record, addRemoveOffset, moveOffsets);\n const /** @type {?} */ 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 }\n else {\n nextIt = /** @type {?} */ ((nextIt))._next;\n if (record.previousIndex == null) {\n addRemoveOffset++;\n }\n else {\n // INVARIANT: currentIndex < previousIndex\n if (!moveOffsets)\n moveOffsets = [];\n const /** @type {?} */ localMovePreviousIndex = adjPreviousIndex - addRemoveOffset;\n const /** @type {?} */ localCurrentIndex = /** @type {?} */ ((currentIndex)) - addRemoveOffset;\n if (localMovePreviousIndex != localCurrentIndex) {\n for (let /** @type {?} */ i = 0; i < localMovePreviousIndex; i++) {\n const /** @type {?} */ offset = i < moveOffsets.length ? moveOffsets[i] : (moveOffsets[i] = 0);\n const /** @type {?} */ index = offset + i;\n if (localCurrentIndex <= index && index < localMovePreviousIndex) {\n moveOffsets[i] = offset + 1;\n }\n }\n const /** @type {?} */ previousIndex = record.previousIndex;\n moveOffsets[previousIndex] = localCurrentIndex - localMovePreviousIndex;\n }\n }\n }\n if (adjPreviousIndex !== currentIndex) {\n fn(record, adjPreviousIndex, currentIndex);\n }\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachPreviousItem(fn) {\n let /** @type {?} */ record;\n for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\n fn(record);\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachAddedItem(fn) {\n let /** @type {?} */ record;\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n fn(record);\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachMovedItem(fn) {\n let /** @type {?} */ record;\n for (record = this._movesHead; record !== null; record = record._nextMoved) {\n fn(record);\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachRemovedItem(fn) {\n let /** @type {?} */ record;\n for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n fn(record);\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachIdentityChange(fn) {\n let /** @type {?} */ record;\n for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {\n fn(record);\n }\n }\n /**\n * @param {?} collection\n * @return {?}\n */\n diff(collection) {\n if (collection == null)\n collection = [];\n if (!isListLikeIterable(collection)) {\n throw new Error(`Error trying to diff '${stringify(collection)}'. Only arrays and iterables are allowed`);\n }\n if (this.check(collection)) {\n return this;\n }\n else {\n return null;\n }\n }\n /**\n * @return {?}\n */\n onDestroy() { }\n /**\n * @param {?} collection\n * @return {?}\n */\n check(collection) {\n this._reset();\n let /** @type {?} */ record = this._itHead;\n let /** @type {?} */ mayBeDirty = false;\n let /** @type {?} */ index;\n let /** @type {?} */ item;\n let /** @type {?} */ itemTrackBy;\n if (Array.isArray(collection)) {\n (/** @type {?} */ (this)).length = collection.length;\n for (let /** @type {?} */ index = 0; index < this.length; index++) {\n item = collection[index];\n itemTrackBy = this._trackByFn(index, item);\n if (record === null || !looseIdentical(record.trackById, itemTrackBy)) {\n record = this._mismatch(record, item, itemTrackBy, index);\n mayBeDirty = true;\n }\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 (!looseIdentical(record.item, item))\n this._addIdentityChange(record, item);\n }\n record = record._next;\n }\n }\n else {\n index = 0;\n iterateListLike(collection, (item) => {\n itemTrackBy = this._trackByFn(index, item);\n if (record === null || !looseIdentical(record.trackById, itemTrackBy)) {\n record = this._mismatch(record, item, itemTrackBy, index);\n mayBeDirty = true;\n }\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 (!looseIdentical(record.item, item))\n this._addIdentityChange(record, item);\n }\n record = record._next;\n index++;\n });\n (/** @type {?} */ (this)).length = index;\n }\n this._truncate(record);\n (/** @type {?} */ (this)).collection = collection;\n return this.isDirty;\n }\n /**\n * @return {?}\n */\n get isDirty() {\n return this._additionsHead !== null || this._movesHead !== null ||\n 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 * @return {?}\n */\n _reset() {\n if (this.isDirty) {\n let /** @type {?} */ record;\n let /** @type {?} */ nextRecord;\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 = nextRecord) {\n record.previousIndex = record.currentIndex;\n nextRecord = record._nextMoved;\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 * @param {?} record\n * @param {?} item\n * @param {?} itemTrackBy\n * @param {?} index\n * @return {?}\n */\n _mismatch(record, item, itemTrackBy, index) {\n // The previous record after which we will append the current one.\n let /** @type {?} */ previousRecord;\n if (record === null) {\n previousRecord = this._itTail;\n }\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 // Attempt to see if we have seen the item before.\n record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);\n if (record !== null) {\n // We have seen this before, we need to move it forward in the collection.\n // But first we need to check if identity changed, so we can update in view if necessary\n if (!looseIdentical(record.item, item))\n this._addIdentityChange(record, item);\n this._moveAfter(record, previousRecord, index);\n }\n else {\n // Never seen it, check evicted 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 (!looseIdentical(record.item, item))\n this._addIdentityChange(record, item);\n this._reinsertAfter(record, previousRecord, index);\n }\n else {\n // It is a new item: add it.\n record =\n 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 * @param {?} record\n * @param {?} item\n * @param {?} itemTrackBy\n * @param {?} index\n * @return {?}\n */\n _verifyReinsertion(record, item, itemTrackBy, index) {\n let /** @type {?} */ reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy, null);\n if (reinsertRecord !== null) {\n record = this._reinsertAfter(reinsertRecord, /** @type {?} */ ((record._prev)), index);\n }\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 * @param {?} record\n * @return {?}\n */\n _truncate(record) {\n // Anything after that needs to be removed;\n while (record !== null) {\n const /** @type {?} */ 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 /**\n * \\@internal\n * @param {?} record\n * @param {?} prevRecord\n * @param {?} index\n * @return {?}\n */\n _reinsertAfter(record, prevRecord, index) {\n if (this._unlinkedRecords !== null) {\n this._unlinkedRecords.remove(record);\n }\n const /** @type {?} */ prev = record._prevRemoved;\n const /** @type {?} */ next = record._nextRemoved;\n if (prev === null) {\n this._removalsHead = next;\n }\n else {\n prev._nextRemoved = next;\n }\n if (next === null) {\n this._removalsTail = prev;\n }\n else {\n next._prevRemoved = prev;\n }\n this._insertAfter(record, prevRecord, index);\n this._addToMoves(record, index);\n return record;\n }\n /**\n * \\@internal\n * @param {?} record\n * @param {?} prevRecord\n * @param {?} index\n * @return {?}\n */\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 /**\n * \\@internal\n * @param {?} record\n * @param {?} prevRecord\n * @param {?} index\n * @return {?}\n */\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 }\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 /**\n * \\@internal\n * @param {?} record\n * @param {?} prevRecord\n * @param {?} index\n * @return {?}\n */\n _insertAfter(record, prevRecord, index) {\n // TODO(vicb):\n // assert(record != prevRecord);\n // assert(record._next === null);\n // assert(record._prev === null);\n const /** @type {?} */ 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 }\n else {\n next._prev = record;\n }\n if (prevRecord === null) {\n this._itHead = record;\n }\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 /**\n * \\@internal\n * @param {?} record\n * @return {?}\n */\n _remove(record) {\n return this._addToRemovals(this._unlink(record));\n }\n /**\n * \\@internal\n * @param {?} record\n * @return {?}\n */\n _unlink(record) {\n if (this._linkedRecords !== null) {\n this._linkedRecords.remove(record);\n }\n const /** @type {?} */ prev = record._prev;\n const /** @type {?} */ 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 }\n else {\n prev._next = next;\n }\n if (next === null) {\n this._itTail = prev;\n }\n else {\n next._prev = prev;\n }\n return record;\n }\n /**\n * \\@internal\n * @param {?} record\n * @param {?} toIndex\n * @return {?}\n */\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 }\n else {\n // TODO(vicb):\n // assert(_movesTail._nextMoved === null);\n this._movesTail = this._movesTail._nextMoved = record;\n }\n return record;\n }\n /**\n * @param {?} record\n * @return {?}\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 }\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 /**\n * \\@internal\n * @param {?} record\n * @param {?} item\n * @return {?}\n */\n _addIdentityChange(record, item) {\n record.item = item;\n if (this._identityChangesTail === null) {\n this._identityChangesTail = this._identityChangesHead = record;\n }\n else {\n this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;\n }\n return record;\n }\n}\n/**\n * \\@stable\n * @template V\n */\nclass IterableChangeRecord_ {\n /**\n * @param {?} item\n * @param {?} trackById\n */\n constructor(item, trackById) {\n this.item = item;\n this.trackById = trackById;\n this.currentIndex = null;\n this.previousIndex = null;\n /**\n * \\@internal\n */\n this._nextPrevious = null;\n /**\n * \\@internal\n */\n this._prev = null;\n /**\n * \\@internal\n */\n this._next = null;\n /**\n * \\@internal\n */\n this._prevDup = null;\n /**\n * \\@internal\n */\n this._nextDup = null;\n /**\n * \\@internal\n */\n this._prevRemoved = null;\n /**\n * \\@internal\n */\n this._nextRemoved = null;\n /**\n * \\@internal\n */\n this._nextAdded = null;\n /**\n * \\@internal\n */\n this._nextMoved = null;\n /**\n * \\@internal\n */\n this._nextIdentityChange = null;\n }\n}\n/**\n * @template V\n */\nclass _DuplicateItemRecordList {\n constructor() {\n /**\n * \\@internal\n */\n this._head = null;\n /**\n * \\@internal\n */\n this._tail = null;\n }\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 * @param {?} record\n * @return {?}\n */\n add(record) {\n if (this._head === null) {\n this._head = this._tail = record;\n record._nextDup = null;\n record._prevDup = null;\n }\n else {\n /** @type {?} */ ((\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 /**\n * @param {?} trackById\n * @param {?} atOrAfterIndex\n * @return {?}\n */\n get(trackById, atOrAfterIndex) {\n let /** @type {?} */ record;\n for (record = this._head; record !== null; record = record._nextDup) {\n if ((atOrAfterIndex === null || atOrAfterIndex <= /** @type {?} */ ((record.currentIndex))) &&\n looseIdentical(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 * @param {?} record\n * @return {?}\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 /** @type {?} */ prev = record._prevDup;\n const /** @type {?} */ next = record._nextDup;\n if (prev === null) {\n this._head = next;\n }\n else {\n prev._nextDup = next;\n }\n if (next === null) {\n this._tail = prev;\n }\n else {\n next._prevDup = prev;\n }\n return this._head === null;\n }\n}\n/**\n * @template V\n */\nclass _DuplicateMap {\n constructor() {\n this.map = new Map();\n }\n /**\n * @param {?} record\n * @return {?}\n */\n put(record) {\n const /** @type {?} */ key = record.trackById;\n let /** @type {?} */ 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 * @param {?} trackById\n * @param {?} atOrAfterIndex\n * @return {?}\n */\n get(trackById, atOrAfterIndex) {\n const /** @type {?} */ key = trackById;\n const /** @type {?} */ 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 * @param {?} record\n * @return {?}\n */\n remove(record) {\n const /** @type {?} */ key = record.trackById;\n const /** @type {?} */ recordList = /** @type {?} */ ((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 /**\n * @return {?}\n */\n get isEmpty() { return this.map.size === 0; }\n /**\n * @return {?}\n */\n clear() { this.map.clear(); }\n}\n/**\n * @param {?} item\n * @param {?} addRemoveOffset\n * @param {?} moveOffsets\n * @return {?}\n */\nfunction getPreviousIndex(item, addRemoveOffset, moveOffsets) {\n const /** @type {?} */ previousIndex = item.previousIndex;\n if (previousIndex === null)\n return previousIndex;\n let /** @type {?} */ moveOffset = 0;\n if (moveOffsets && previousIndex < moveOffsets.length) {\n moveOffset = moveOffsets[previousIndex];\n }\n return previousIndex + addRemoveOffset + moveOffset;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @template K, V\n */\nclass DefaultKeyValueDifferFactory {\n constructor() { }\n /**\n * @param {?} obj\n * @return {?}\n */\n supports(obj) { return obj instanceof Map || isJsObject(obj); }\n /**\n * @template K, V\n * @return {?}\n */\n create() { return new DefaultKeyValueDiffer(); }\n}\n/**\n * @template K, V\n */\nclass DefaultKeyValueDiffer {\n constructor() {\n this._records = new Map();\n this._mapHead = null;\n this._appendAfter = null;\n this._previousMapHead = null;\n this._changesHead = null;\n this._changesTail = null;\n this._additionsHead = null;\n this._additionsTail = null;\n this._removalsHead = null;\n this._removalsTail = null;\n }\n /**\n * @return {?}\n */\n get isDirty() {\n return this._additionsHead !== null || this._changesHead !== null ||\n this._removalsHead !== null;\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachItem(fn) {\n let /** @type {?} */ record;\n for (record = this._mapHead; record !== null; record = record._next) {\n fn(record);\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachPreviousItem(fn) {\n let /** @type {?} */ record;\n for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\n fn(record);\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachChangedItem(fn) {\n let /** @type {?} */ record;\n for (record = this._changesHead; record !== null; record = record._nextChanged) {\n fn(record);\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachAddedItem(fn) {\n let /** @type {?} */ record;\n for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n fn(record);\n }\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n forEachRemovedItem(fn) {\n let /** @type {?} */ record;\n for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n fn(record);\n }\n }\n /**\n * @param {?=} map\n * @return {?}\n */\n diff(map) {\n if (!map) {\n map = new Map();\n }\n else if (!(map instanceof Map || isJsObject(map))) {\n throw new Error(`Error trying to diff '${stringify(map)}'. Only maps and objects are allowed`);\n }\n return this.check(map) ? this : null;\n }\n /**\n * @return {?}\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 * @param {?} map\n * @return {?}\n */\n check(map) {\n this._reset();\n let /** @type {?} */ 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 }\n else {\n const /** @type {?} */ 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 /** @type {?} */ 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)\n this._changesTail._nextChanged = null;\n if (this._additionsTail)\n 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 * @param {?} before\n * @param {?} record\n * @return {?}\n */\n _insertBeforeOrAppend(before, record) {\n if (before) {\n const /** @type {?} */ 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 }\n else {\n this._mapHead = record;\n }\n this._appendAfter = record;\n return null;\n }\n /**\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\n _getOrCreateRecordForKey(key, value) {\n if (this._records.has(key)) {\n const /** @type {?} */ record = /** @type {?} */ ((this._records.get(key)));\n this._maybeAddToChanges(record, value);\n const /** @type {?} */ prev = record._prev;\n const /** @type {?} */ 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 /** @type {?} */ record = new KeyValueChangeRecord_(key);\n this._records.set(key, record);\n record.currentValue = value;\n this._addToAdditions(record);\n return record;\n }\n /**\n * \\@internal\n * @return {?}\n */\n _reset() {\n if (this.isDirty) {\n let /** @type {?} */ 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 /**\n * @param {?} record\n * @param {?} newValue\n * @return {?}\n */\n _maybeAddToChanges(record, newValue) {\n if (!looseIdentical(newValue, record.currentValue)) {\n record.previousValue = record.currentValue;\n record.currentValue = newValue;\n this._addToChanges(record);\n }\n }\n /**\n * @param {?} record\n * @return {?}\n */\n _addToAdditions(record) {\n if (this._additionsHead === null) {\n this._additionsHead = this._additionsTail = record;\n }\n else {\n /** @type {?} */ ((this._additionsTail))._nextAdded = record;\n this._additionsTail = record;\n }\n }\n /**\n * @param {?} record\n * @return {?}\n */\n _addToChanges(record) {\n if (this._changesHead === null) {\n this._changesHead = this._changesTail = record;\n }\n else {\n /** @type {?} */ ((this._changesTail))._nextChanged = record;\n this._changesTail = record;\n }\n }\n /**\n * \\@internal\n * @template K, V\n * @param {?} obj\n * @param {?} fn\n * @return {?}\n */\n _forEach(obj, fn) {\n if (obj instanceof Map) {\n obj.forEach(fn);\n }\n else {\n Object.keys(obj).forEach(k => fn(obj[k], k));\n }\n }\n}\n/**\n * \\@stable\n * @template K, V\n */\nclass KeyValueChangeRecord_ {\n /**\n * @param {?} key\n */\n constructor(key) {\n this.key = key;\n this.previousValue = null;\n this.currentValue = null;\n /**\n * \\@internal\n */\n this._nextPrevious = null;\n /**\n * \\@internal\n */\n this._next = null;\n /**\n * \\@internal\n */\n this._prev = null;\n /**\n * \\@internal\n */\n this._nextAdded = null;\n /**\n * \\@internal\n */\n this._nextRemoved = null;\n /**\n * \\@internal\n */\n this._nextChanged = null;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A strategy for tracking changes over time to an iterable. Used by {\\@link NgForOf} to\n * respond to changes in an iterable by effecting equivalent changes in the DOM.\n *\n * \\@stable\n * @record\n * @template V\n */\n\n/**\n * An object describing the changes in the `Iterable` collection since last time\n * `IterableDiffer#diff()` was invoked.\n *\n * \\@stable\n * @record\n * @template V\n */\n\n/**\n * Record representing the item change information.\n *\n * \\@stable\n * @record\n * @template V\n */\n\n/**\n * @deprecated v4.0.0 - Use IterableChangeRecord instead.\n * @record\n * @template V\n */\n\n/**\n * An optional function passed into {\\@link NgForOf} that defines how to track\n * items in an iterable (e.g. fby index or id)\n *\n * \\@stable\n * @record\n * @template T\n */\n\n/**\n * Provides a factory for {\\@link IterableDiffer}.\n *\n * \\@stable\n * @record\n */\n\n/**\n * A repository of different iterable diffing strategies used by NgFor, NgClass, and others.\n * \\@stable\n */\nclass IterableDiffers {\n /**\n * @param {?} factories\n */\n constructor(factories) { this.factories = factories; }\n /**\n * @param {?} factories\n * @param {?=} parent\n * @return {?}\n */\n static create(factories, parent) {\n if (parent != null) {\n const /** @type {?} */ copied = parent.factories.slice();\n factories = factories.concat(copied);\n return new IterableDiffers(factories);\n }\n else {\n return new IterableDiffers(factories);\n }\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 * 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 * ### Example\n *\n * ```\n * \\@Component({\n * viewProviders: [\n * IterableDiffers.extend([new ImmutableListDiffer()])\n * ]\n * })\n * ```\n * @param {?} factories\n * @return {?}\n */\n static extend(factories) {\n return {\n provide: IterableDiffers,\n useFactory: (parent) => {\n if (!parent) {\n // Typically would occur when calling IterableDiffers.extend inside of dependencies passed\n // to\n // bootstrap(), which would override default pipes instead of extending them.\n throw new Error('Cannot extend IterableDiffers without a parent injector');\n }\n return IterableDiffers.create(factories, parent);\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 /**\n * @param {?} iterable\n * @return {?}\n */\n find(iterable) {\n const /** @type {?} */ factory = this.factories.find(f => f.supports(iterable));\n if (factory != null) {\n return factory;\n }\n else {\n throw new Error(`Cannot find a differ supporting object '${iterable}' of type '${getTypeNameForDebugging(iterable)}'`);\n }\n }\n}\n/**\n * @param {?} type\n * @return {?}\n */\nfunction getTypeNameForDebugging(type) {\n return type['name'] || typeof type;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A differ that tracks changes made to an object over time.\n *\n * \\@stable\n * @record\n * @template K, V\n */\n\n/**\n * An object describing the changes in the `Map` or `{[k:string]: string}` since last time\n * `KeyValueDiffer#diff()` was invoked.\n *\n * \\@stable\n * @record\n * @template K, V\n */\n\n/**\n * Record representing the item change information.\n *\n * \\@stable\n * @record\n * @template K, V\n */\n\n/**\n * Provides a factory for {\\@link KeyValueDiffer}.\n *\n * \\@stable\n * @record\n */\n\n/**\n * A repository of different Map diffing strategies used by NgClass, NgStyle, and others.\n * \\@stable\n */\nclass KeyValueDiffers {\n /**\n * @param {?} factories\n */\n constructor(factories) { this.factories = factories; }\n /**\n * @template S\n * @param {?} factories\n * @param {?=} parent\n * @return {?}\n */\n static create(factories, parent) {\n if (parent) {\n const /** @type {?} */ 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 * 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 * ### Example\n *\n * ```\n * \\@Component({\n * viewProviders: [\n * KeyValueDiffers.extend([new ImmutableMapDiffer()])\n * ]\n * })\n * ```\n * @template S\n * @param {?} factories\n * @return {?}\n */\n static extend(factories) {\n return {\n provide: KeyValueDiffers,\n useFactory: (parent) => {\n if (!parent) {\n // Typically would occur when calling KeyValueDiffers.extend inside of dependencies passed\n // to bootstrap(), which would override default pipes instead of extending them.\n throw new Error('Cannot extend KeyValueDiffers without a parent injector');\n }\n return KeyValueDiffers.create(factories, parent);\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 /**\n * @param {?} kv\n * @return {?}\n */\n find(kv) {\n const /** @type {?} */ factory = this.factories.find(f => f.supports(kv));\n if (factory) {\n return factory;\n }\n throw new Error(`Cannot find a differ supporting object '${kv}'`);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst _CORE_PLATFORM_PROVIDERS = [\n // Set a default platform name for platforms that don't set it explicitly.\n { provide: PLATFORM_ID, useValue: 'unknown' },\n { provide: PlatformRef, deps: [Injector] },\n { provide: TestabilityRegistry, deps: [] },\n { provide: Console, deps: [] },\n];\n/**\n * This platform has to be included in any other platform\n *\n * \\@experimental\n */\nconst platformCore = createPlatformFactory(null, 'core', _CORE_PLATFORM_PROVIDERS);\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\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 {\\@linkDocs guide/i18n#setting-up-locale i18n guide} for more information.\n *\n * ### Example\n *\n * ```typescript\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 * \\@experimental i18n support is experimental.\n */\nconst LOCALE_ID = new InjectionToken('LocaleId');\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 {\\@linkDocs guide/i18n#merge i18n guide} for more information.\n *\n * ### Example\n *\n * ```typescript\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 * \\@experimental i18n support is experimental.\n */\nconst TRANSLATIONS = new InjectionToken('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 {\\@linkDocs guide/i18n#merge i18n guide} for more information.\n *\n * ### Example\n *\n * ```typescript\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 * \\@experimental i18n support is experimental.\n */\nconst TRANSLATIONS_FORMAT = new InjectionToken('TranslationsFormat');\n/** @enum {number} */\nconst MissingTranslationStrategy = {\n Error: 0,\n Warning: 1,\n Ignore: 2,\n};\nMissingTranslationStrategy[MissingTranslationStrategy.Error] = \"Error\";\nMissingTranslationStrategy[MissingTranslationStrategy.Warning] = \"Warning\";\nMissingTranslationStrategy[MissingTranslationStrategy.Ignore] = \"Ignore\";\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @return {?}\n */\nfunction _iterableDiffersFactory() {\n return defaultIterableDiffers;\n}\n/**\n * @return {?}\n */\nfunction _keyValueDiffersFactory() {\n return defaultKeyValueDiffers;\n}\n/**\n * @param {?=} locale\n * @return {?}\n */\nfunction _localeFactory(locale) {\n return locale || 'en-US';\n}\n/**\n * This module includes the providers of \\@angular/core that are needed\n * to bootstrap components via `ApplicationRef`.\n *\n * \\@experimental\n */\nclass ApplicationModule {\n /**\n * @param {?} appRef\n */\n constructor(appRef) { }\n}\nApplicationModule.decorators = [\n { type: NgModule, args: [{\n providers: [\n ApplicationRef,\n ApplicationInitStatus,\n Compiler,\n APP_ID_RANDOM_PROVIDER,\n { provide: IterableDiffers, useFactory: _iterableDiffersFactory },\n { provide: KeyValueDiffers, useFactory: _keyValueDiffersFactory },\n {\n provide: LOCALE_ID,\n useFactory: _localeFactory,\n deps: [[new Inject(LOCALE_ID), new Optional(), new SkipSelf()]]\n },\n ]\n },] },\n];\n/** @nocollapse */\nApplicationModule.ctorParameters = () => [\n { type: ApplicationRef, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/** @enum {number} */\nconst SecurityContext = {\n NONE: 0,\n HTML: 1,\n STYLE: 2,\n SCRIPT: 3,\n URL: 4,\n RESOURCE_URL: 5,\n};\nSecurityContext[SecurityContext.NONE] = \"NONE\";\nSecurityContext[SecurityContext.HTML] = \"HTML\";\nSecurityContext[SecurityContext.STYLE] = \"STYLE\";\nSecurityContext[SecurityContext.SCRIPT] = \"SCRIPT\";\nSecurityContext[SecurityContext.URL] = \"URL\";\nSecurityContext[SecurityContext.RESOURCE_URL] = \"RESOURCE_URL\";\n/**\n * Sanitizer is used by the views to sanitize potentially dangerous values.\n *\n * \\@stable\n * @abstract\n */\nclass Sanitizer {\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n// unsupported: template constraints.\n/**\n * Factory for ViewDefinitions/NgModuleDefinitions.\n * We use a function so we can reexeute it in case an error happens and use the given logger\n * function to log the error from the definition of the node, which is shown in all browser\n * logs.\n * @record\n * @template D\n */\n\n/**\n * Function to call console.error at the right source location. This is an indirection\n * via another function as browser will log the location that actually called\n * `console.error`.\n * @record\n */\n\n// unsupported: template constraints.\n/**\n * @record\n * @template DF\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * A node definition in the view.\n *\n * Note: We use one type for all nodes so that loops that loop over all nodes\n * of a ViewDefinition stay monomorphic!\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * View instance data.\n * Attention: Adding fields to this is performance sensitive!\n * @record\n */\n\n/**\n * @param {?} view\n * @param {?} priorInitState\n * @param {?} newInitState\n * @return {?}\n */\nfunction shiftInitState(view, priorInitState, newInitState) {\n // Only update the InitState if we are currently in the prior state.\n // For example, only move into CallingInit if we are in BeforeInit. Only\n // move into CallingContentInit if we are in CallingInit. Normally this will\n // always be true because of how checkCycle is called in checkAndUpdateView.\n // However, if checkAndUpdateView is called recursively or if an exception is\n // thrown while checkAndUpdateView is running, checkAndUpdateView starts over\n // from the beginning. This ensures the state is monotonically increasing,\n // terminating in the AfterInit state, which ensures the Init methods are called\n // at least once and only once.\n const /** @type {?} */ state = view.state;\n const /** @type {?} */ initState = state & 1792;\n if (initState === priorInitState) {\n view.state = (state & ~1792 /* InitState_Mask */) | newInitState;\n view.initIndex = -1;\n return true;\n }\n return initState === newInitState;\n}\n/**\n * @param {?} view\n * @param {?} initState\n * @param {?} index\n * @return {?}\n */\nfunction shouldCallLifecycleInitHook(view, initState, index) {\n if ((view.state & 1792 /* InitState_Mask */) === initState && view.initIndex <= index) {\n view.initIndex = index + 1;\n return true;\n }\n return false;\n}\n/**\n * @record\n */\n\n/**\n * Node instance data.\n *\n * We have a separate type per NodeType to save memory\n * (TextData | ElementData | ProviderData | PureExpressionData | QueryList<any>)\n *\n * To keep our code monomorphic,\n * we prohibit using `NodeData` directly but enforce the use of accessors (`asElementData`, ...).\n * This way, no usage site can get a `NodeData` from view.nodes and then use it for different\n * purposes.\n */\n\n/**\n * Data for an instantiated NodeType.Text.\n *\n * Attention: Adding fields to this is performance sensitive!\n * @record\n */\n\n/**\n * Accessor for view.nodes, enforcing that every usage site stays monomorphic.\n * @param {?} view\n * @param {?} index\n * @return {?}\n */\nfunction asTextData(view, index) {\n return /** @type {?} */ (view.nodes[index]);\n}\n/**\n * Data for an instantiated NodeType.Element.\n *\n * Attention: Adding fields to this is performance sensitive!\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * Accessor for view.nodes, enforcing that every usage site stays monomorphic.\n * @param {?} view\n * @param {?} index\n * @return {?}\n */\nfunction asElementData(view, index) {\n return /** @type {?} */ (view.nodes[index]);\n}\n/**\n * Data for an instantiated NodeType.Provider.\n *\n * Attention: Adding fields to this is performance sensitive!\n * @record\n */\n\n/**\n * Accessor for view.nodes, enforcing that every usage site stays monomorphic.\n * @param {?} view\n * @param {?} index\n * @return {?}\n */\nfunction asProviderData(view, index) {\n return /** @type {?} */ (view.nodes[index]);\n}\n/**\n * Data for an instantiated NodeType.PureExpression.\n *\n * Attention: Adding fields to this is performance sensitive!\n * @record\n */\n\n/**\n * Accessor for view.nodes, enforcing that every usage site stays monomorphic.\n * @param {?} view\n * @param {?} index\n * @return {?}\n */\nfunction asPureExpressionData(view, index) {\n return /** @type {?} */ (view.nodes[index]);\n}\n/**\n * Accessor for view.nodes, enforcing that every usage site stays monomorphic.\n * @param {?} view\n * @param {?} index\n * @return {?}\n */\nfunction asQueryList(view, index) {\n return /** @type {?} */ (view.nodes[index]);\n}\n/**\n * @record\n */\n\n/**\n * @abstract\n */\nclass DebugContext {\n}\n/**\n * @record\n */\n\n/**\n * This object is used to prevent cycles in the source files and to have a place where\n * debug mode can hook it. It is lazily filled when `isDevMode` is known.\n */\nconst Services = {\n setCurrentNode: /** @type {?} */ ((undefined)),\n createRootView: /** @type {?} */ ((undefined)),\n createEmbeddedView: /** @type {?} */ ((undefined)),\n createComponentView: /** @type {?} */ ((undefined)),\n createNgModuleRef: /** @type {?} */ ((undefined)),\n overrideProvider: /** @type {?} */ ((undefined)),\n overrideComponentView: /** @type {?} */ ((undefined)),\n clearOverrides: /** @type {?} */ ((undefined)),\n checkAndUpdateView: /** @type {?} */ ((undefined)),\n checkNoChangesView: /** @type {?} */ ((undefined)),\n destroyView: /** @type {?} */ ((undefined)),\n resolveDep: /** @type {?} */ ((undefined)),\n createDebugContext: /** @type {?} */ ((undefined)),\n handleEvent: /** @type {?} */ ((undefined)),\n updateDirectives: /** @type {?} */ ((undefined)),\n updateRenderer: /** @type {?} */ ((undefined)),\n dirtyParentQueries: /** @type {?} */ ((undefined)),\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} context\n * @param {?} oldValue\n * @param {?} currValue\n * @param {?} isFirstCheck\n * @return {?}\n */\nfunction expressionChangedAfterItHasBeenCheckedError(context, oldValue, currValue, isFirstCheck) {\n let /** @type {?} */ msg = `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '${oldValue}'. Current value: '${currValue}'.`;\n if (isFirstCheck) {\n msg +=\n ` It seems like the view has been created after its parent and its children have been dirty checked.` +\n ` Has it been created in a change detection hook ?`;\n }\n return viewDebugError(msg, context);\n}\n/**\n * @param {?} err\n * @param {?} context\n * @return {?}\n */\nfunction viewWrappedDebugError(err, context) {\n if (!(err instanceof Error)) {\n // errors that are not Error instances don't have a stack,\n // so it is ok to wrap them into a new Error object...\n err = new Error(err.toString());\n }\n _addDebugContext(err, context);\n return err;\n}\n/**\n * @param {?} msg\n * @param {?} context\n * @return {?}\n */\nfunction viewDebugError(msg, context) {\n const /** @type {?} */ err = new Error(msg);\n _addDebugContext(err, context);\n return err;\n}\n/**\n * @param {?} err\n * @param {?} context\n * @return {?}\n */\nfunction _addDebugContext(err, context) {\n (/** @type {?} */ (err))[ERROR_DEBUG_CONTEXT] = context;\n (/** @type {?} */ (err))[ERROR_LOGGER] = context.logError.bind(context);\n}\n/**\n * @param {?} err\n * @return {?}\n */\nfunction isViewDebugError(err) {\n return !!getDebugContext(err);\n}\n/**\n * @param {?} action\n * @return {?}\n */\nfunction viewDestroyedError(action) {\n return new Error(`ViewDestroyedError: Attempt to use a destroyed view: ${action}`);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst NOOP = () => { };\nconst _tokenKeyCache = new Map();\n/**\n * @param {?} token\n * @return {?}\n */\nfunction tokenKey(token) {\n let /** @type {?} */ key = _tokenKeyCache.get(token);\n if (!key) {\n key = stringify(token) + '_' + _tokenKeyCache.size;\n _tokenKeyCache.set(token, key);\n }\n return key;\n}\n/**\n * @param {?} view\n * @param {?} nodeIdx\n * @param {?} bindingIdx\n * @param {?} value\n * @return {?}\n */\nfunction unwrapValue(view, nodeIdx, bindingIdx, value) {\n if (WrappedValue.isWrapped(value)) {\n value = WrappedValue.unwrap(value);\n const /** @type {?} */ globalBindingIdx = view.def.nodes[nodeIdx].bindingIndex + bindingIdx;\n const /** @type {?} */ oldValue = WrappedValue.unwrap(view.oldValues[globalBindingIdx]);\n view.oldValues[globalBindingIdx] = new WrappedValue(oldValue);\n }\n return value;\n}\nconst UNDEFINED_RENDERER_TYPE_ID = '$$undefined';\nconst EMPTY_RENDERER_TYPE_ID = '$$empty';\n/**\n * @param {?} values\n * @return {?}\n */\nfunction createRendererType2(values) {\n return {\n id: UNDEFINED_RENDERER_TYPE_ID,\n styles: values.styles,\n encapsulation: values.encapsulation,\n data: values.data\n };\n}\nlet _renderCompCount = 0;\n/**\n * @param {?=} type\n * @return {?}\n */\nfunction resolveRendererType2(type) {\n if (type && type.id === UNDEFINED_RENDERER_TYPE_ID) {\n // first time we see this RendererType2. Initialize it...\n const /** @type {?} */ isFilled = ((type.encapsulation != null && type.encapsulation !== ViewEncapsulation.None) ||\n type.styles.length || Object.keys(type.data).length);\n if (isFilled) {\n type.id = `c${_renderCompCount++}`;\n }\n else {\n type.id = EMPTY_RENDERER_TYPE_ID;\n }\n }\n if (type && type.id === EMPTY_RENDERER_TYPE_ID) {\n type = null;\n }\n return type || null;\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} bindingIdx\n * @param {?} value\n * @return {?}\n */\nfunction checkBinding(view, def, bindingIdx, value) {\n const /** @type {?} */ oldValues = view.oldValues;\n if ((view.state & 2 /* FirstCheck */) ||\n !looseIdentical(oldValues[def.bindingIndex + bindingIdx], value)) {\n return true;\n }\n return false;\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} bindingIdx\n * @param {?} value\n * @return {?}\n */\nfunction checkAndUpdateBinding(view, def, bindingIdx, value) {\n if (checkBinding(view, def, bindingIdx, value)) {\n view.oldValues[def.bindingIndex + bindingIdx] = value;\n return true;\n }\n return false;\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} bindingIdx\n * @param {?} value\n * @return {?}\n */\nfunction checkBindingNoChanges(view, def, bindingIdx, value) {\n const /** @type {?} */ oldValue = view.oldValues[def.bindingIndex + bindingIdx];\n if ((view.state & 1 /* BeforeFirstCheck */) || !devModeEqual(oldValue, value)) {\n const /** @type {?} */ bindingName = def.bindings[bindingIdx].name;\n throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, def.nodeIndex), `${bindingName}: ${oldValue}`, `${bindingName}: ${value}`, (view.state & 1 /* BeforeFirstCheck */) !== 0);\n }\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction markParentViewsForCheck(view) {\n let /** @type {?} */ currView = view;\n while (currView) {\n if (currView.def.flags & 2 /* OnPush */) {\n currView.state |= 8 /* ChecksEnabled */;\n }\n currView = currView.viewContainerParent || currView.parent;\n }\n}\n/**\n * @param {?} view\n * @param {?} endView\n * @return {?}\n */\nfunction markParentViewsForCheckProjectedViews(view, endView) {\n let /** @type {?} */ currView = view;\n while (currView && currView !== endView) {\n currView.state |= 64 /* CheckProjectedViews */;\n currView = currView.viewContainerParent || currView.parent;\n }\n}\n/**\n * @param {?} view\n * @param {?} nodeIndex\n * @param {?} eventName\n * @param {?} event\n * @return {?}\n */\nfunction dispatchEvent(view, nodeIndex, eventName, event) {\n try {\n const /** @type {?} */ nodeDef = view.def.nodes[nodeIndex];\n const /** @type {?} */ startView = nodeDef.flags & 33554432 /* ComponentView */ ?\n asElementData(view, nodeIndex).componentView :\n view;\n markParentViewsForCheck(startView);\n return Services.handleEvent(view, nodeIndex, eventName, event);\n }\n catch (/** @type {?} */ e) {\n // Attention: Don't rethrow, as it would cancel Observable subscriptions!\n view.root.errorHandler.handleError(e);\n }\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction declaredViewContainer(view) {\n if (view.parent) {\n const /** @type {?} */ parentView = view.parent;\n return asElementData(parentView, /** @type {?} */ ((view.parentNodeDef)).nodeIndex);\n }\n return null;\n}\n/**\n * for component views, this is the host element.\n * for embedded views, this is the index of the parent node\n * that contains the view container.\n * @param {?} view\n * @return {?}\n */\nfunction viewParentEl(view) {\n const /** @type {?} */ parentView = view.parent;\n if (parentView) {\n return /** @type {?} */ ((view.parentNodeDef)).parent;\n }\n else {\n return null;\n }\n}\n/**\n * @param {?} view\n * @param {?} def\n * @return {?}\n */\nfunction renderNode(view, def) {\n switch (def.flags & 201347067 /* Types */) {\n case 1 /* TypeElement */:\n return asElementData(view, def.nodeIndex).renderElement;\n case 2 /* TypeText */:\n return asTextData(view, def.nodeIndex).renderText;\n }\n}\n/**\n * @param {?} target\n * @param {?} name\n * @return {?}\n */\nfunction elementEventFullName(target, name) {\n return target ? `${target}:${name}` : name;\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction isComponentView(view) {\n return !!view.parent && !!(/** @type {?} */ ((view.parentNodeDef)).flags & 32768 /* Component */);\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction isEmbeddedView(view) {\n return !!view.parent && !(/** @type {?} */ ((view.parentNodeDef)).flags & 32768 /* Component */);\n}\n/**\n * @param {?} queryId\n * @return {?}\n */\nfunction filterQueryId(queryId) {\n return 1 << (queryId % 32);\n}\n/**\n * @param {?} matchedQueriesDsl\n * @return {?}\n */\nfunction splitMatchedQueriesDsl(matchedQueriesDsl) {\n const /** @type {?} */ matchedQueries = {};\n let /** @type {?} */ matchedQueryIds = 0;\n const /** @type {?} */ references = {};\n if (matchedQueriesDsl) {\n matchedQueriesDsl.forEach(([queryId, valueType]) => {\n if (typeof queryId === 'number') {\n matchedQueries[queryId] = valueType;\n matchedQueryIds |= filterQueryId(queryId);\n }\n else {\n references[queryId] = valueType;\n }\n });\n }\n return { matchedQueries, references, matchedQueryIds };\n}\n/**\n * @param {?} deps\n * @param {?=} sourceName\n * @return {?}\n */\nfunction splitDepsDsl(deps, sourceName) {\n return deps.map(value => {\n let /** @type {?} */ token;\n let /** @type {?} */ flags;\n if (Array.isArray(value)) {\n [flags, token] = value;\n }\n else {\n flags = 0 /* None */;\n token = value;\n }\n if (token && (typeof token === 'function' || typeof token === 'object') && sourceName) {\n Object.defineProperty(token, SOURCE, { value: sourceName, configurable: true });\n }\n return { flags, token, tokenKey: tokenKey(token) };\n });\n}\n/**\n * @param {?} view\n * @param {?} renderHost\n * @param {?} def\n * @return {?}\n */\nfunction getParentRenderElement(view, renderHost, def) {\n let /** @type {?} */ renderParent = def.renderParent;\n if (renderParent) {\n if ((renderParent.flags & 1 /* TypeElement */) === 0 ||\n (renderParent.flags & 33554432 /* ComponentView */) === 0 ||\n (/** @type {?} */ ((renderParent.element)).componentRendererType && /** @type {?} */ ((/** @type {?} */ ((renderParent.element)).componentRendererType)).encapsulation === ViewEncapsulation.Native)) {\n // only children of non components, or children of components with native encapsulation should\n // be attached.\n return asElementData(view, /** @type {?} */ ((def.renderParent)).nodeIndex).renderElement;\n }\n }\n else {\n return renderHost;\n }\n}\nconst DEFINITION_CACHE = new WeakMap();\n/**\n * @template D\n * @param {?} factory\n * @return {?}\n */\nfunction resolveDefinition(factory) {\n let /** @type {?} */ value = /** @type {?} */ (((DEFINITION_CACHE.get(factory))));\n if (!value) {\n value = factory(() => NOOP);\n value.factory = factory;\n DEFINITION_CACHE.set(factory, value);\n }\n return value;\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction rootRenderNodes(view) {\n const /** @type {?} */ renderNodes = [];\n visitRootRenderNodes(view, 0 /* Collect */, undefined, undefined, renderNodes);\n return renderNodes;\n}\n/**\n * @param {?} view\n * @param {?} action\n * @param {?} parentNode\n * @param {?} nextSibling\n * @param {?=} target\n * @return {?}\n */\nfunction visitRootRenderNodes(view, action, parentNode, nextSibling, target) {\n // We need to re-compute the parent node in case the nodes have been moved around manually\n if (action === 3 /* RemoveChild */) {\n parentNode = view.renderer.parentNode(renderNode(view, /** @type {?} */ ((view.def.lastRenderRootNode))));\n }\n visitSiblingRenderNodes(view, action, 0, view.def.nodes.length - 1, parentNode, nextSibling, target);\n}\n/**\n * @param {?} view\n * @param {?} action\n * @param {?} startIndex\n * @param {?} endIndex\n * @param {?} parentNode\n * @param {?} nextSibling\n * @param {?=} target\n * @return {?}\n */\nfunction visitSiblingRenderNodes(view, action, startIndex, endIndex, parentNode, nextSibling, target) {\n for (let /** @type {?} */ i = startIndex; i <= endIndex; i++) {\n const /** @type {?} */ nodeDef = view.def.nodes[i];\n if (nodeDef.flags & (1 /* TypeElement */ | 2 /* TypeText */ | 8 /* TypeNgContent */)) {\n visitRenderNode(view, nodeDef, action, parentNode, nextSibling, target);\n }\n // jump to next sibling\n i += nodeDef.childCount;\n }\n}\n/**\n * @param {?} view\n * @param {?} ngContentIndex\n * @param {?} action\n * @param {?} parentNode\n * @param {?} nextSibling\n * @param {?=} target\n * @return {?}\n */\nfunction visitProjectedRenderNodes(view, ngContentIndex, action, parentNode, nextSibling, target) {\n let /** @type {?} */ compView = view;\n while (compView && !isComponentView(compView)) {\n compView = compView.parent;\n }\n const /** @type {?} */ hostView = /** @type {?} */ ((compView)).parent;\n const /** @type {?} */ hostElDef = viewParentEl(/** @type {?} */ ((compView)));\n const /** @type {?} */ startIndex = /** @type {?} */ ((hostElDef)).nodeIndex + 1;\n const /** @type {?} */ endIndex = /** @type {?} */ ((hostElDef)).nodeIndex + /** @type {?} */ ((hostElDef)).childCount;\n for (let /** @type {?} */ i = startIndex; i <= endIndex; i++) {\n const /** @type {?} */ nodeDef = /** @type {?} */ ((hostView)).def.nodes[i];\n if (nodeDef.ngContentIndex === ngContentIndex) {\n visitRenderNode(/** @type {?} */ ((hostView)), nodeDef, action, parentNode, nextSibling, target);\n }\n // jump to next sibling\n i += nodeDef.childCount;\n }\n if (!/** @type {?} */ ((hostView)).parent) {\n // a root view\n const /** @type {?} */ projectedNodes = view.root.projectableNodes[ngContentIndex];\n if (projectedNodes) {\n for (let /** @type {?} */ i = 0; i < projectedNodes.length; i++) {\n execRenderNodeAction(view, projectedNodes[i], action, parentNode, nextSibling, target);\n }\n }\n }\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?} action\n * @param {?} parentNode\n * @param {?} nextSibling\n * @param {?=} target\n * @return {?}\n */\nfunction visitRenderNode(view, nodeDef, action, parentNode, nextSibling, target) {\n if (nodeDef.flags & 8 /* TypeNgContent */) {\n visitProjectedRenderNodes(view, /** @type {?} */ ((nodeDef.ngContent)).index, action, parentNode, nextSibling, target);\n }\n else {\n const /** @type {?} */ rn = renderNode(view, nodeDef);\n if (action === 3 /* RemoveChild */ && (nodeDef.flags & 33554432 /* ComponentView */) &&\n (nodeDef.bindingFlags & 48 /* CatSyntheticProperty */)) {\n // Note: we might need to do both actions.\n if (nodeDef.bindingFlags & (16 /* SyntheticProperty */)) {\n execRenderNodeAction(view, rn, action, parentNode, nextSibling, target);\n }\n if (nodeDef.bindingFlags & (32 /* SyntheticHostProperty */)) {\n const /** @type {?} */ compView = asElementData(view, nodeDef.nodeIndex).componentView;\n execRenderNodeAction(compView, rn, action, parentNode, nextSibling, target);\n }\n }\n else {\n execRenderNodeAction(view, rn, action, parentNode, nextSibling, target);\n }\n if (nodeDef.flags & 16777216 /* EmbeddedViews */) {\n const /** @type {?} */ embeddedViews = /** @type {?} */ ((asElementData(view, nodeDef.nodeIndex).viewContainer))._embeddedViews;\n for (let /** @type {?} */ k = 0; k < embeddedViews.length; k++) {\n visitRootRenderNodes(embeddedViews[k], action, parentNode, nextSibling, target);\n }\n }\n if (nodeDef.flags & 1 /* TypeElement */ && !/** @type {?} */ ((nodeDef.element)).name) {\n visitSiblingRenderNodes(view, action, nodeDef.nodeIndex + 1, nodeDef.nodeIndex + nodeDef.childCount, parentNode, nextSibling, target);\n }\n }\n}\n/**\n * @param {?} view\n * @param {?} renderNode\n * @param {?} action\n * @param {?} parentNode\n * @param {?} nextSibling\n * @param {?=} target\n * @return {?}\n */\nfunction execRenderNodeAction(view, renderNode, action, parentNode, nextSibling, target) {\n const /** @type {?} */ renderer = view.renderer;\n switch (action) {\n case 1 /* AppendChild */:\n renderer.appendChild(parentNode, renderNode);\n break;\n case 2 /* InsertBefore */:\n renderer.insertBefore(parentNode, renderNode, nextSibling);\n break;\n case 3 /* RemoveChild */:\n renderer.removeChild(parentNode, renderNode);\n break;\n case 0 /* Collect */:\n /** @type {?} */ ((target)).push(renderNode);\n break;\n }\n}\nconst NS_PREFIX_RE = /^:([^:]+):(.+)$/;\n/**\n * @param {?} name\n * @return {?}\n */\nfunction splitNamespace(name) {\n if (name[0] === ':') {\n const /** @type {?} */ match = /** @type {?} */ ((name.match(NS_PREFIX_RE)));\n return [match[1], match[2]];\n }\n return ['', name];\n}\n/**\n * @param {?} bindings\n * @return {?}\n */\nfunction calcBindingFlags(bindings) {\n let /** @type {?} */ flags = 0;\n for (let /** @type {?} */ i = 0; i < bindings.length; i++) {\n flags |= bindings[i].flags;\n }\n return flags;\n}\n/**\n * @param {?} valueCount\n * @param {?} constAndInterp\n * @return {?}\n */\nfunction interpolate(valueCount, constAndInterp) {\n let /** @type {?} */ result = '';\n for (let /** @type {?} */ i = 0; i < valueCount * 2; i = i + 2) {\n result = result + constAndInterp[i] + _toStringWithNull(constAndInterp[i + 1]);\n }\n return result + constAndInterp[valueCount * 2];\n}\n/**\n * @param {?} valueCount\n * @param {?} c0\n * @param {?} a1\n * @param {?} c1\n * @param {?=} a2\n * @param {?=} c2\n * @param {?=} a3\n * @param {?=} c3\n * @param {?=} a4\n * @param {?=} c4\n * @param {?=} a5\n * @param {?=} c5\n * @param {?=} a6\n * @param {?=} c6\n * @param {?=} a7\n * @param {?=} c7\n * @param {?=} a8\n * @param {?=} c8\n * @param {?=} a9\n * @param {?=} c9\n * @return {?}\n */\nfunction inlineInterpolate(valueCount, c0, a1, c1, a2, c2, a3, c3, a4, c4, a5, c5, a6, c6, a7, c7, a8, c8, a9, c9) {\n switch (valueCount) {\n case 1:\n return c0 + _toStringWithNull(a1) + c1;\n case 2:\n return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2;\n case 3:\n return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +\n c3;\n case 4:\n return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +\n c3 + _toStringWithNull(a4) + c4;\n case 5:\n return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +\n c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5;\n case 6:\n return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +\n c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) + c6;\n case 7:\n return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +\n c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) +\n c6 + _toStringWithNull(a7) + c7;\n case 8:\n return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +\n c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) +\n c6 + _toStringWithNull(a7) + c7 + _toStringWithNull(a8) + c8;\n case 9:\n return c0 + _toStringWithNull(a1) + c1 + _toStringWithNull(a2) + c2 + _toStringWithNull(a3) +\n c3 + _toStringWithNull(a4) + c4 + _toStringWithNull(a5) + c5 + _toStringWithNull(a6) +\n c6 + _toStringWithNull(a7) + c7 + _toStringWithNull(a8) + c8 + _toStringWithNull(a9) + c9;\n default:\n throw new Error(`Does not support more than 9 expressions`);\n }\n}\n/**\n * @param {?} v\n * @return {?}\n */\nfunction _toStringWithNull(v) {\n return v != null ? v.toString() : '';\n}\nconst EMPTY_ARRAY = [];\nconst EMPTY_MAP = {};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} flags\n * @param {?} matchedQueriesDsl\n * @param {?} ngContentIndex\n * @param {?} childCount\n * @param {?=} handleEvent\n * @param {?=} templateFactory\n * @return {?}\n */\nfunction anchorDef(flags, matchedQueriesDsl, ngContentIndex, childCount, handleEvent, templateFactory) {\n flags |= 1 /* TypeElement */;\n const { matchedQueries, references, matchedQueryIds } = splitMatchedQueriesDsl(matchedQueriesDsl);\n const /** @type {?} */ template = templateFactory ? resolveDefinition(templateFactory) : null;\n return {\n // will bet set by the view definition\n nodeIndex: -1,\n parent: null,\n renderParent: null,\n bindingIndex: -1,\n outputIndex: -1,\n // regular values\n flags,\n checkIndex: -1,\n childFlags: 0,\n directChildFlags: 0,\n childMatchedQueries: 0, matchedQueries, matchedQueryIds, references, ngContentIndex, childCount,\n bindings: [],\n bindingFlags: 0,\n outputs: [],\n element: {\n ns: null,\n name: null,\n attrs: null, template,\n componentProvider: null,\n componentView: null,\n componentRendererType: null,\n publicProviders: null,\n allProviders: null,\n handleEvent: handleEvent || NOOP\n },\n provider: null,\n text: null,\n query: null,\n ngContent: null\n };\n}\n/**\n * @param {?} checkIndex\n * @param {?} flags\n * @param {?} matchedQueriesDsl\n * @param {?} ngContentIndex\n * @param {?} childCount\n * @param {?} namespaceAndName\n * @param {?=} fixedAttrs\n * @param {?=} bindings\n * @param {?=} outputs\n * @param {?=} handleEvent\n * @param {?=} componentView\n * @param {?=} componentRendererType\n * @return {?}\n */\nfunction elementDef(checkIndex, flags, matchedQueriesDsl, ngContentIndex, childCount, namespaceAndName, fixedAttrs = [], bindings, outputs, handleEvent, componentView, componentRendererType) {\n if (!handleEvent) {\n handleEvent = NOOP;\n }\n const { matchedQueries, references, matchedQueryIds } = splitMatchedQueriesDsl(matchedQueriesDsl);\n let /** @type {?} */ ns = /** @type {?} */ ((null));\n let /** @type {?} */ name = /** @type {?} */ ((null));\n if (namespaceAndName) {\n [ns, name] = splitNamespace(namespaceAndName);\n }\n bindings = bindings || [];\n const /** @type {?} */ bindingDefs = new Array(bindings.length);\n for (let /** @type {?} */ i = 0; i < bindings.length; i++) {\n const [bindingFlags, namespaceAndName, suffixOrSecurityContext] = bindings[i];\n const [ns, name] = splitNamespace(namespaceAndName);\n let /** @type {?} */ securityContext = /** @type {?} */ ((undefined));\n let /** @type {?} */ suffix = /** @type {?} */ ((undefined));\n switch (bindingFlags & 15 /* Types */) {\n case 4 /* TypeElementStyle */:\n suffix = /** @type {?} */ (suffixOrSecurityContext);\n break;\n case 1 /* TypeElementAttribute */:\n case 8 /* TypeProperty */:\n securityContext = /** @type {?} */ (suffixOrSecurityContext);\n break;\n }\n bindingDefs[i] =\n { flags: bindingFlags, ns, name, nonMinifiedName: name, securityContext, suffix };\n }\n outputs = outputs || [];\n const /** @type {?} */ outputDefs = new Array(outputs.length);\n for (let /** @type {?} */ i = 0; i < outputs.length; i++) {\n const [target, eventName] = outputs[i];\n outputDefs[i] = {\n type: 0 /* ElementOutput */,\n target: /** @type {?} */ (target), eventName,\n propName: null\n };\n }\n fixedAttrs = fixedAttrs || [];\n const /** @type {?} */ attrs = /** @type {?} */ (fixedAttrs.map(([namespaceAndName, value]) => {\n const [ns, name] = splitNamespace(namespaceAndName);\n return [ns, name, value];\n }));\n componentRendererType = resolveRendererType2(componentRendererType);\n if (componentView) {\n flags |= 33554432 /* ComponentView */;\n }\n flags |= 1 /* TypeElement */;\n return {\n // will bet set by the view definition\n nodeIndex: -1,\n parent: null,\n renderParent: null,\n bindingIndex: -1,\n outputIndex: -1,\n // regular values\n checkIndex,\n flags,\n childFlags: 0,\n directChildFlags: 0,\n childMatchedQueries: 0, matchedQueries, matchedQueryIds, references, ngContentIndex, childCount,\n bindings: bindingDefs,\n bindingFlags: calcBindingFlags(bindingDefs),\n outputs: outputDefs,\n element: {\n ns,\n name,\n attrs,\n template: null,\n // will bet set by the view definition\n componentProvider: null,\n componentView: componentView || null,\n componentRendererType: componentRendererType,\n publicProviders: null,\n allProviders: null,\n handleEvent: handleEvent || NOOP,\n },\n provider: null,\n text: null,\n query: null,\n ngContent: null\n };\n}\n/**\n * @param {?} view\n * @param {?} renderHost\n * @param {?} def\n * @return {?}\n */\nfunction createElement(view, renderHost, def) {\n const /** @type {?} */ elDef = /** @type {?} */ ((def.element));\n const /** @type {?} */ rootSelectorOrNode = view.root.selectorOrNode;\n const /** @type {?} */ renderer = view.renderer;\n let /** @type {?} */ el;\n if (view.parent || !rootSelectorOrNode) {\n if (elDef.name) {\n el = renderer.createElement(elDef.name, elDef.ns);\n }\n else {\n el = renderer.createComment('');\n }\n const /** @type {?} */ parentEl = getParentRenderElement(view, renderHost, def);\n if (parentEl) {\n renderer.appendChild(parentEl, el);\n }\n }\n else {\n el = renderer.selectRootElement(rootSelectorOrNode);\n }\n if (elDef.attrs) {\n for (let /** @type {?} */ i = 0; i < elDef.attrs.length; i++) {\n const [ns, name, value] = elDef.attrs[i];\n renderer.setAttribute(el, name, value, ns);\n }\n }\n return el;\n}\n/**\n * @param {?} view\n * @param {?} compView\n * @param {?} def\n * @param {?} el\n * @return {?}\n */\nfunction listenToElementOutputs(view, compView, def, el) {\n for (let /** @type {?} */ i = 0; i < def.outputs.length; i++) {\n const /** @type {?} */ output = def.outputs[i];\n const /** @type {?} */ handleEventClosure = renderEventHandlerClosure(view, def.nodeIndex, elementEventFullName(output.target, output.eventName));\n let /** @type {?} */ listenTarget = output.target;\n let /** @type {?} */ listenerView = view;\n if (output.target === 'component') {\n listenTarget = null;\n listenerView = compView;\n }\n const /** @type {?} */ disposable = /** @type {?} */ (listenerView.renderer.listen(listenTarget || el, output.eventName, handleEventClosure)); /** @type {?} */\n ((view.disposables))[def.outputIndex + i] = disposable;\n }\n}\n/**\n * @param {?} view\n * @param {?} index\n * @param {?} eventName\n * @return {?}\n */\nfunction renderEventHandlerClosure(view, index, eventName) {\n return (event) => dispatchEvent(view, index, eventName, event);\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} v0\n * @param {?} v1\n * @param {?} v2\n * @param {?} v3\n * @param {?} v4\n * @param {?} v5\n * @param {?} v6\n * @param {?} v7\n * @param {?} v8\n * @param {?} v9\n * @return {?}\n */\nfunction checkAndUpdateElementInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {\n const /** @type {?} */ bindLen = def.bindings.length;\n let /** @type {?} */ changed = false;\n if (bindLen > 0 && checkAndUpdateElementValue(view, def, 0, v0))\n changed = true;\n if (bindLen > 1 && checkAndUpdateElementValue(view, def, 1, v1))\n changed = true;\n if (bindLen > 2 && checkAndUpdateElementValue(view, def, 2, v2))\n changed = true;\n if (bindLen > 3 && checkAndUpdateElementValue(view, def, 3, v3))\n changed = true;\n if (bindLen > 4 && checkAndUpdateElementValue(view, def, 4, v4))\n changed = true;\n if (bindLen > 5 && checkAndUpdateElementValue(view, def, 5, v5))\n changed = true;\n if (bindLen > 6 && checkAndUpdateElementValue(view, def, 6, v6))\n changed = true;\n if (bindLen > 7 && checkAndUpdateElementValue(view, def, 7, v7))\n changed = true;\n if (bindLen > 8 && checkAndUpdateElementValue(view, def, 8, v8))\n changed = true;\n if (bindLen > 9 && checkAndUpdateElementValue(view, def, 9, v9))\n changed = true;\n return changed;\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} values\n * @return {?}\n */\nfunction checkAndUpdateElementDynamic(view, def, values) {\n let /** @type {?} */ changed = false;\n for (let /** @type {?} */ i = 0; i < values.length; i++) {\n if (checkAndUpdateElementValue(view, def, i, values[i]))\n changed = true;\n }\n return changed;\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} bindingIdx\n * @param {?} value\n * @return {?}\n */\nfunction checkAndUpdateElementValue(view, def, bindingIdx, value) {\n if (!checkAndUpdateBinding(view, def, bindingIdx, value)) {\n return false;\n }\n const /** @type {?} */ binding = def.bindings[bindingIdx];\n const /** @type {?} */ elData = asElementData(view, def.nodeIndex);\n const /** @type {?} */ renderNode$$1 = elData.renderElement;\n const /** @type {?} */ name = /** @type {?} */ ((binding.name));\n switch (binding.flags & 15 /* Types */) {\n case 1 /* TypeElementAttribute */:\n setElementAttribute(view, binding, renderNode$$1, binding.ns, name, value);\n break;\n case 2 /* TypeElementClass */:\n setElementClass(view, renderNode$$1, name, value);\n break;\n case 4 /* TypeElementStyle */:\n setElementStyle(view, binding, renderNode$$1, name, value);\n break;\n case 8 /* TypeProperty */:\n const /** @type {?} */ bindView = (def.flags & 33554432 /* ComponentView */ &&\n binding.flags & 32 /* SyntheticHostProperty */) ?\n elData.componentView :\n view;\n setElementProperty(bindView, binding, renderNode$$1, name, value);\n break;\n }\n return true;\n}\n/**\n * @param {?} view\n * @param {?} binding\n * @param {?} renderNode\n * @param {?} ns\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nfunction setElementAttribute(view, binding, renderNode$$1, ns, name, value) {\n const /** @type {?} */ securityContext = binding.securityContext;\n let /** @type {?} */ renderValue = securityContext ? view.root.sanitizer.sanitize(securityContext, value) : value;\n renderValue = renderValue != null ? renderValue.toString() : null;\n const /** @type {?} */ renderer = view.renderer;\n if (value != null) {\n renderer.setAttribute(renderNode$$1, name, renderValue, ns);\n }\n else {\n renderer.removeAttribute(renderNode$$1, name, ns);\n }\n}\n/**\n * @param {?} view\n * @param {?} renderNode\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nfunction setElementClass(view, renderNode$$1, name, value) {\n const /** @type {?} */ renderer = view.renderer;\n if (value) {\n renderer.addClass(renderNode$$1, name);\n }\n else {\n renderer.removeClass(renderNode$$1, name);\n }\n}\n/**\n * @param {?} view\n * @param {?} binding\n * @param {?} renderNode\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nfunction setElementStyle(view, binding, renderNode$$1, name, value) {\n let /** @type {?} */ renderValue = view.root.sanitizer.sanitize(SecurityContext.STYLE, /** @type {?} */ (value));\n if (renderValue != null) {\n renderValue = renderValue.toString();\n const /** @type {?} */ unit = binding.suffix;\n if (unit != null) {\n renderValue = renderValue + unit;\n }\n }\n else {\n renderValue = null;\n }\n const /** @type {?} */ renderer = view.renderer;\n if (renderValue != null) {\n renderer.setStyle(renderNode$$1, name, renderValue);\n }\n else {\n renderer.removeStyle(renderNode$$1, name);\n }\n}\n/**\n * @param {?} view\n * @param {?} binding\n * @param {?} renderNode\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\nfunction setElementProperty(view, binding, renderNode$$1, name, value) {\n const /** @type {?} */ securityContext = binding.securityContext;\n let /** @type {?} */ renderValue = securityContext ? view.root.sanitizer.sanitize(securityContext, value) : value;\n view.renderer.setProperty(renderNode$$1, name, renderValue);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst UNDEFINED_VALUE = new Object();\nconst InjectorRefTokenKey$1 = tokenKey(Injector);\nconst NgModuleRefTokenKey = tokenKey(NgModuleRef);\n/**\n * @param {?} flags\n * @param {?} token\n * @param {?} value\n * @param {?} deps\n * @return {?}\n */\nfunction moduleProvideDef(flags, token, value, deps) {\n // Need to resolve forwardRefs as e.g. for `useValue` we\n // lowered the expression and then stopped evaluating it,\n // i.e. also didn't unwrap it.\n value = resolveForwardRef(value);\n const /** @type {?} */ depDefs = splitDepsDsl(deps, stringify(token));\n return {\n // will bet set by the module definition\n index: -1,\n deps: depDefs, flags, token, value\n };\n}\n/**\n * @param {?} providers\n * @return {?}\n */\nfunction moduleDef(providers) {\n const /** @type {?} */ providersByKey = {};\n for (let /** @type {?} */ i = 0; i < providers.length; i++) {\n const /** @type {?} */ provider = providers[i];\n provider.index = i;\n providersByKey[tokenKey(provider.token)] = provider;\n }\n return {\n // Will be filled later...\n factory: null,\n providersByKey,\n providers\n };\n}\n/**\n * @param {?} data\n * @return {?}\n */\nfunction initNgModule(data) {\n const /** @type {?} */ def = data._def;\n const /** @type {?} */ providers = data._providers = new Array(def.providers.length);\n for (let /** @type {?} */ i = 0; i < def.providers.length; i++) {\n const /** @type {?} */ provDef = def.providers[i];\n if (!(provDef.flags & 4096 /* LazyProvider */)) {\n providers[i] = _createProviderInstance$1(data, provDef);\n }\n }\n}\n/**\n * @param {?} data\n * @param {?} depDef\n * @param {?=} notFoundValue\n * @return {?}\n */\nfunction resolveNgModuleDep(data, depDef, notFoundValue = Injector.THROW_IF_NOT_FOUND) {\n if (depDef.flags & 8 /* Value */) {\n return depDef.token;\n }\n if (depDef.flags & 2 /* Optional */) {\n notFoundValue = null;\n }\n if (depDef.flags & 1 /* SkipSelf */) {\n return data._parent.get(depDef.token, notFoundValue);\n }\n const /** @type {?} */ tokenKey$$1 = depDef.tokenKey;\n switch (tokenKey$$1) {\n case InjectorRefTokenKey$1:\n case NgModuleRefTokenKey:\n return data;\n }\n const /** @type {?} */ providerDef = data._def.providersByKey[tokenKey$$1];\n if (providerDef) {\n let /** @type {?} */ providerInstance = data._providers[providerDef.index];\n if (providerInstance === undefined) {\n providerInstance = data._providers[providerDef.index] =\n _createProviderInstance$1(data, providerDef);\n }\n return providerInstance === UNDEFINED_VALUE ? undefined : providerInstance;\n }\n return data._parent.get(depDef.token, notFoundValue);\n}\n/**\n * @param {?} ngModule\n * @param {?} providerDef\n * @return {?}\n */\nfunction _createProviderInstance$1(ngModule, providerDef) {\n let /** @type {?} */ injectable;\n switch (providerDef.flags & 201347067 /* Types */) {\n case 512 /* TypeClassProvider */:\n injectable = _createClass(ngModule, providerDef.value, providerDef.deps);\n break;\n case 1024 /* TypeFactoryProvider */:\n injectable = _callFactory(ngModule, providerDef.value, providerDef.deps);\n break;\n case 2048 /* TypeUseExistingProvider */:\n injectable = resolveNgModuleDep(ngModule, providerDef.deps[0]);\n break;\n case 256 /* TypeValueProvider */:\n injectable = providerDef.value;\n break;\n }\n return injectable === undefined ? UNDEFINED_VALUE : injectable;\n}\n/**\n * @param {?} ngModule\n * @param {?} ctor\n * @param {?} deps\n * @return {?}\n */\nfunction _createClass(ngModule, ctor, deps) {\n const /** @type {?} */ len = deps.length;\n switch (len) {\n case 0:\n return new ctor();\n case 1:\n return new ctor(resolveNgModuleDep(ngModule, deps[0]));\n case 2:\n return new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));\n case 3:\n return new ctor(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));\n default:\n const /** @type {?} */ depValues = new Array(len);\n for (let /** @type {?} */ i = 0; i < len; i++) {\n depValues[i] = resolveNgModuleDep(ngModule, deps[i]);\n }\n return new ctor(...depValues);\n }\n}\n/**\n * @param {?} ngModule\n * @param {?} factory\n * @param {?} deps\n * @return {?}\n */\nfunction _callFactory(ngModule, factory, deps) {\n const /** @type {?} */ len = deps.length;\n switch (len) {\n case 0:\n return factory();\n case 1:\n return factory(resolveNgModuleDep(ngModule, deps[0]));\n case 2:\n return factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]));\n case 3:\n return factory(resolveNgModuleDep(ngModule, deps[0]), resolveNgModuleDep(ngModule, deps[1]), resolveNgModuleDep(ngModule, deps[2]));\n default:\n const /** @type {?} */ depValues = Array(len);\n for (let /** @type {?} */ i = 0; i < len; i++) {\n depValues[i] = resolveNgModuleDep(ngModule, deps[i]);\n }\n return factory(...depValues);\n }\n}\n/**\n * @param {?} ngModule\n * @param {?} lifecycles\n * @return {?}\n */\nfunction callNgModuleLifecycle(ngModule, lifecycles) {\n const /** @type {?} */ def = ngModule._def;\n for (let /** @type {?} */ i = 0; i < def.providers.length; i++) {\n const /** @type {?} */ provDef = def.providers[i];\n if (provDef.flags & 131072 /* OnDestroy */) {\n const /** @type {?} */ instance = ngModule._providers[i];\n if (instance && instance !== UNDEFINED_VALUE) {\n instance.ngOnDestroy();\n }\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} parentView\n * @param {?} elementData\n * @param {?} viewIndex\n * @param {?} view\n * @return {?}\n */\nfunction attachEmbeddedView(parentView, elementData, viewIndex, view) {\n let /** @type {?} */ embeddedViews = /** @type {?} */ ((elementData.viewContainer))._embeddedViews;\n if (viewIndex === null || viewIndex === undefined) {\n viewIndex = embeddedViews.length;\n }\n view.viewContainerParent = parentView;\n addToArray(embeddedViews, /** @type {?} */ ((viewIndex)), view);\n attachProjectedView(elementData, view);\n Services.dirtyParentQueries(view);\n const /** @type {?} */ prevView = /** @type {?} */ ((viewIndex)) > 0 ? embeddedViews[/** @type {?} */ ((viewIndex)) - 1] : null;\n renderAttachEmbeddedView(elementData, prevView, view);\n}\n/**\n * @param {?} vcElementData\n * @param {?} view\n * @return {?}\n */\nfunction attachProjectedView(vcElementData, view) {\n const /** @type {?} */ dvcElementData = declaredViewContainer(view);\n if (!dvcElementData || dvcElementData === vcElementData ||\n view.state & 16 /* IsProjectedView */) {\n return;\n }\n // Note: For performance reasons, we\n // - add a view to template._projectedViews only 1x throughout its lifetime,\n // and remove it not until the view is destroyed.\n // (hard, as when a parent view is attached/detached we would need to attach/detach all\n // nested projected views as well, even accross component boundaries).\n // - don't track the insertion order of views in the projected views array\n // (hard, as when the views of the same template are inserted different view containers)\n view.state |= 16 /* IsProjectedView */;\n let /** @type {?} */ projectedViews = dvcElementData.template._projectedViews;\n if (!projectedViews) {\n projectedViews = dvcElementData.template._projectedViews = [];\n }\n projectedViews.push(view);\n // Note: we are changing the NodeDef here as we cannot calculate\n // the fact whether a template is used for projection during compilation.\n markNodeAsProjectedTemplate(/** @type {?} */ ((view.parent)).def, /** @type {?} */ ((view.parentNodeDef)));\n}\n/**\n * @param {?} viewDef\n * @param {?} nodeDef\n * @return {?}\n */\nfunction markNodeAsProjectedTemplate(viewDef, nodeDef) {\n if (nodeDef.flags & 4 /* ProjectedTemplate */) {\n return;\n }\n viewDef.nodeFlags |= 4 /* ProjectedTemplate */;\n nodeDef.flags |= 4 /* ProjectedTemplate */;\n let /** @type {?} */ parentNodeDef = nodeDef.parent;\n while (parentNodeDef) {\n parentNodeDef.childFlags |= 4 /* ProjectedTemplate */;\n parentNodeDef = parentNodeDef.parent;\n }\n}\n/**\n * @param {?} elementData\n * @param {?=} viewIndex\n * @return {?}\n */\nfunction detachEmbeddedView(elementData, viewIndex) {\n const /** @type {?} */ embeddedViews = /** @type {?} */ ((elementData.viewContainer))._embeddedViews;\n if (viewIndex == null || viewIndex >= embeddedViews.length) {\n viewIndex = embeddedViews.length - 1;\n }\n if (viewIndex < 0) {\n return null;\n }\n const /** @type {?} */ view = embeddedViews[viewIndex];\n view.viewContainerParent = null;\n removeFromArray(embeddedViews, viewIndex);\n // See attachProjectedView for why we don't update projectedViews here.\n Services.dirtyParentQueries(view);\n renderDetachView(view);\n return view;\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction detachProjectedView(view) {\n if (!(view.state & 16 /* IsProjectedView */)) {\n return;\n }\n const /** @type {?} */ dvcElementData = declaredViewContainer(view);\n if (dvcElementData) {\n const /** @type {?} */ projectedViews = dvcElementData.template._projectedViews;\n if (projectedViews) {\n removeFromArray(projectedViews, projectedViews.indexOf(view));\n Services.dirtyParentQueries(view);\n }\n }\n}\n/**\n * @param {?} elementData\n * @param {?} oldViewIndex\n * @param {?} newViewIndex\n * @return {?}\n */\nfunction moveEmbeddedView(elementData, oldViewIndex, newViewIndex) {\n const /** @type {?} */ embeddedViews = /** @type {?} */ ((elementData.viewContainer))._embeddedViews;\n const /** @type {?} */ view = embeddedViews[oldViewIndex];\n removeFromArray(embeddedViews, oldViewIndex);\n if (newViewIndex == null) {\n newViewIndex = embeddedViews.length;\n }\n addToArray(embeddedViews, newViewIndex, view);\n // Note: Don't need to change projectedViews as the order in there\n // as always invalid...\n Services.dirtyParentQueries(view);\n renderDetachView(view);\n const /** @type {?} */ prevView = newViewIndex > 0 ? embeddedViews[newViewIndex - 1] : null;\n renderAttachEmbeddedView(elementData, prevView, view);\n return view;\n}\n/**\n * @param {?} elementData\n * @param {?} prevView\n * @param {?} view\n * @return {?}\n */\nfunction renderAttachEmbeddedView(elementData, prevView, view) {\n const /** @type {?} */ prevRenderNode = prevView ? renderNode(prevView, /** @type {?} */ ((prevView.def.lastRenderRootNode))) :\n elementData.renderElement;\n const /** @type {?} */ parentNode = view.renderer.parentNode(prevRenderNode);\n const /** @type {?} */ nextSibling = view.renderer.nextSibling(prevRenderNode);\n // Note: We can't check if `nextSibling` is present, as on WebWorkers it will always be!\n // However, browsers automatically do `appendChild` when there is no `nextSibling`.\n visitRootRenderNodes(view, 2 /* InsertBefore */, parentNode, nextSibling, undefined);\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction renderDetachView(view) {\n visitRootRenderNodes(view, 3 /* RemoveChild */, null, null, undefined);\n}\n/**\n * @param {?} arr\n * @param {?} index\n * @param {?} value\n * @return {?}\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 }\n else {\n arr.splice(index, 0, value);\n }\n}\n/**\n * @param {?} arr\n * @param {?} index\n * @return {?}\n */\nfunction removeFromArray(arr, index) {\n // perf: array.pop is faster than array.splice!\n if (index >= arr.length - 1) {\n arr.pop();\n }\n else {\n arr.splice(index, 1);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst EMPTY_CONTEXT = new Object();\n/**\n * @param {?} selector\n * @param {?} componentType\n * @param {?} viewDefFactory\n * @param {?} inputs\n * @param {?} outputs\n * @param {?} ngContentSelectors\n * @return {?}\n */\nfunction createComponentFactory(selector, componentType, viewDefFactory, inputs, outputs, ngContentSelectors) {\n return new ComponentFactory_(selector, componentType, viewDefFactory, inputs, outputs, ngContentSelectors);\n}\n/**\n * @param {?} componentFactory\n * @return {?}\n */\nfunction getComponentViewDefinitionFactory(componentFactory) {\n return (/** @type {?} */ (componentFactory)).viewDefFactory;\n}\nclass ComponentFactory_ extends ComponentFactory {\n /**\n * @param {?} selector\n * @param {?} componentType\n * @param {?} viewDefFactory\n * @param {?} _inputs\n * @param {?} _outputs\n * @param {?} ngContentSelectors\n */\n constructor(selector, componentType, viewDefFactory, _inputs, _outputs, ngContentSelectors) {\n // Attention: this ctor is called as top level function.\n // Putting any logic in here will destroy closure tree shaking!\n super();\n this.selector = selector;\n this.componentType = componentType;\n this._inputs = _inputs;\n this._outputs = _outputs;\n this.ngContentSelectors = ngContentSelectors;\n this.viewDefFactory = viewDefFactory;\n }\n /**\n * @return {?}\n */\n get inputs() {\n const /** @type {?} */ inputsArr = [];\n const /** @type {?} */ inputs = /** @type {?} */ ((this._inputs));\n for (let /** @type {?} */ propName in inputs) {\n const /** @type {?} */ templateName = inputs[propName];\n inputsArr.push({ propName, templateName });\n }\n return inputsArr;\n }\n /**\n * @return {?}\n */\n get outputs() {\n const /** @type {?} */ outputsArr = [];\n for (let /** @type {?} */ propName in this._outputs) {\n const /** @type {?} */ templateName = this._outputs[propName];\n outputsArr.push({ propName, templateName });\n }\n return outputsArr;\n }\n /**\n * Creates a new component.\n * @param {?} injector\n * @param {?=} projectableNodes\n * @param {?=} rootSelectorOrNode\n * @param {?=} ngModule\n * @return {?}\n */\n create(injector, projectableNodes, rootSelectorOrNode, ngModule) {\n if (!ngModule) {\n throw new Error('ngModule should be provided');\n }\n const /** @type {?} */ viewDef = resolveDefinition(this.viewDefFactory);\n const /** @type {?} */ componentNodeIndex = /** @type {?} */ ((/** @type {?} */ ((viewDef.nodes[0].element)).componentProvider)).nodeIndex;\n const /** @type {?} */ view = Services.createRootView(injector, projectableNodes || [], rootSelectorOrNode, viewDef, ngModule, EMPTY_CONTEXT);\n const /** @type {?} */ component = asProviderData(view, componentNodeIndex).instance;\n if (rootSelectorOrNode) {\n view.renderer.setAttribute(asElementData(view, 0).renderElement, 'ng-version', VERSION.full);\n }\n return new ComponentRef_(view, new ViewRef_(view), component);\n }\n}\nclass ComponentRef_ extends ComponentRef {\n /**\n * @param {?} _view\n * @param {?} _viewRef\n * @param {?} _component\n */\n constructor(_view, _viewRef, _component) {\n super();\n this._view = _view;\n this._viewRef = _viewRef;\n this._component = _component;\n this._elDef = this._view.def.nodes[0];\n this.hostView = _viewRef;\n this.changeDetectorRef = _viewRef;\n this.instance = _component;\n }\n /**\n * @return {?}\n */\n get location() {\n return new ElementRef(asElementData(this._view, this._elDef.nodeIndex).renderElement);\n }\n /**\n * @return {?}\n */\n get injector() { return new Injector_(this._view, this._elDef); }\n /**\n * @return {?}\n */\n get componentType() { return /** @type {?} */ (this._component.constructor); }\n /**\n * @return {?}\n */\n destroy() { this._viewRef.destroy(); }\n /**\n * @param {?} callback\n * @return {?}\n */\n onDestroy(callback) { this._viewRef.onDestroy(callback); }\n}\n/**\n * @param {?} view\n * @param {?} elDef\n * @param {?} elData\n * @return {?}\n */\nfunction createViewContainerData(view, elDef, elData) {\n return new ViewContainerRef_(view, elDef, elData);\n}\nclass ViewContainerRef_ {\n /**\n * @param {?} _view\n * @param {?} _elDef\n * @param {?} _data\n */\n constructor(_view, _elDef, _data) {\n this._view = _view;\n this._elDef = _elDef;\n this._data = _data;\n /**\n * \\@internal\n */\n this._embeddedViews = [];\n }\n /**\n * @return {?}\n */\n get element() { return new ElementRef(this._data.renderElement); }\n /**\n * @return {?}\n */\n get injector() { return new Injector_(this._view, this._elDef); }\n /**\n * @return {?}\n */\n get parentInjector() {\n let /** @type {?} */ view = this._view;\n let /** @type {?} */ elDef = this._elDef.parent;\n while (!elDef && view) {\n elDef = viewParentEl(view);\n view = /** @type {?} */ ((view.parent));\n }\n return view ? new Injector_(view, elDef) : new Injector_(this._view, null);\n }\n /**\n * @return {?}\n */\n clear() {\n const /** @type {?} */ len = this._embeddedViews.length;\n for (let /** @type {?} */ i = len - 1; i >= 0; i--) {\n const /** @type {?} */ view = /** @type {?} */ ((detachEmbeddedView(this._data, i)));\n Services.destroyView(view);\n }\n }\n /**\n * @param {?} index\n * @return {?}\n */\n get(index) {\n const /** @type {?} */ view = this._embeddedViews[index];\n if (view) {\n const /** @type {?} */ ref = new ViewRef_(view);\n ref.attachToViewContainerRef(this);\n return ref;\n }\n return null;\n }\n /**\n * @return {?}\n */\n get length() { return this._embeddedViews.length; }\n /**\n * @template C\n * @param {?} templateRef\n * @param {?=} context\n * @param {?=} index\n * @return {?}\n */\n createEmbeddedView(templateRef, context, index) {\n const /** @type {?} */ viewRef = templateRef.createEmbeddedView(context || /** @type {?} */ ({}));\n this.insert(viewRef, index);\n return viewRef;\n }\n /**\n * @template C\n * @param {?} componentFactory\n * @param {?=} index\n * @param {?=} injector\n * @param {?=} projectableNodes\n * @param {?=} ngModuleRef\n * @return {?}\n */\n createComponent(componentFactory, index, injector, projectableNodes, ngModuleRef) {\n const /** @type {?} */ contextInjector = injector || this.parentInjector;\n if (!ngModuleRef && !(componentFactory instanceof ComponentFactoryBoundToModule)) {\n ngModuleRef = contextInjector.get(NgModuleRef);\n }\n const /** @type {?} */ componentRef = componentFactory.create(contextInjector, projectableNodes, undefined, ngModuleRef);\n this.insert(componentRef.hostView, index);\n return componentRef;\n }\n /**\n * @param {?} viewRef\n * @param {?=} index\n * @return {?}\n */\n insert(viewRef, index) {\n if (viewRef.destroyed) {\n throw new Error('Cannot insert a destroyed View in a ViewContainer!');\n }\n const /** @type {?} */ viewRef_ = /** @type {?} */ (viewRef);\n const /** @type {?} */ viewData = viewRef_._view;\n attachEmbeddedView(this._view, this._data, index, viewData);\n viewRef_.attachToViewContainerRef(this);\n return viewRef;\n }\n /**\n * @param {?} viewRef\n * @param {?} currentIndex\n * @return {?}\n */\n move(viewRef, currentIndex) {\n if (viewRef.destroyed) {\n throw new Error('Cannot move a destroyed View in a ViewContainer!');\n }\n const /** @type {?} */ previousIndex = this._embeddedViews.indexOf(viewRef._view);\n moveEmbeddedView(this._data, previousIndex, currentIndex);\n return viewRef;\n }\n /**\n * @param {?} viewRef\n * @return {?}\n */\n indexOf(viewRef) {\n return this._embeddedViews.indexOf((/** @type {?} */ (viewRef))._view);\n }\n /**\n * @param {?=} index\n * @return {?}\n */\n remove(index) {\n const /** @type {?} */ viewData = detachEmbeddedView(this._data, index);\n if (viewData) {\n Services.destroyView(viewData);\n }\n }\n /**\n * @param {?=} index\n * @return {?}\n */\n detach(index) {\n const /** @type {?} */ view = detachEmbeddedView(this._data, index);\n return view ? new ViewRef_(view) : null;\n }\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction createChangeDetectorRef(view) {\n return new ViewRef_(view);\n}\nclass ViewRef_ {\n /**\n * @param {?} _view\n */\n constructor(_view) {\n this._view = _view;\n this._viewContainerRef = null;\n this._appRef = null;\n }\n /**\n * @return {?}\n */\n get rootNodes() { return rootRenderNodes(this._view); }\n /**\n * @return {?}\n */\n get context() { return this._view.context; }\n /**\n * @return {?}\n */\n get destroyed() { return (this._view.state & 128 /* Destroyed */) !== 0; }\n /**\n * @return {?}\n */\n markForCheck() { markParentViewsForCheck(this._view); }\n /**\n * @return {?}\n */\n detach() { this._view.state &= ~4 /* Attached */; }\n /**\n * @return {?}\n */\n detectChanges() {\n const /** @type {?} */ fs = this._view.root.rendererFactory;\n if (fs.begin) {\n fs.begin();\n }\n try {\n Services.checkAndUpdateView(this._view);\n }\n finally {\n if (fs.end) {\n fs.end();\n }\n }\n }\n /**\n * @return {?}\n */\n checkNoChanges() { Services.checkNoChangesView(this._view); }\n /**\n * @return {?}\n */\n reattach() { this._view.state |= 4 /* Attached */; }\n /**\n * @param {?} callback\n * @return {?}\n */\n onDestroy(callback) {\n if (!this._view.disposables) {\n this._view.disposables = [];\n }\n this._view.disposables.push(/** @type {?} */ (callback));\n }\n /**\n * @return {?}\n */\n destroy() {\n if (this._appRef) {\n this._appRef.detachView(this);\n }\n else if (this._viewContainerRef) {\n this._viewContainerRef.detach(this._viewContainerRef.indexOf(this));\n }\n Services.destroyView(this._view);\n }\n /**\n * @return {?}\n */\n detachFromAppRef() {\n this._appRef = null;\n renderDetachView(this._view);\n Services.dirtyParentQueries(this._view);\n }\n /**\n * @param {?} appRef\n * @return {?}\n */\n attachToAppRef(appRef) {\n if (this._viewContainerRef) {\n throw new Error('This view is already attached to a ViewContainer!');\n }\n this._appRef = appRef;\n }\n /**\n * @param {?} vcRef\n * @return {?}\n */\n attachToViewContainerRef(vcRef) {\n if (this._appRef) {\n throw new Error('This view is already attached directly to the ApplicationRef!');\n }\n this._viewContainerRef = vcRef;\n }\n}\n/**\n * @param {?} view\n * @param {?} def\n * @return {?}\n */\nfunction createTemplateData(view, def) {\n return new TemplateRef_(view, def);\n}\nclass TemplateRef_ extends TemplateRef {\n /**\n * @param {?} _parentView\n * @param {?} _def\n */\n constructor(_parentView, _def) {\n super();\n this._parentView = _parentView;\n this._def = _def;\n }\n /**\n * @param {?} context\n * @return {?}\n */\n createEmbeddedView(context) {\n return new ViewRef_(Services.createEmbeddedView(this._parentView, this._def, /** @type {?} */ ((/** @type {?} */ ((this._def.element)).template)), context));\n }\n /**\n * @return {?}\n */\n get elementRef() {\n return new ElementRef(asElementData(this._parentView, this._def.nodeIndex).renderElement);\n }\n}\n/**\n * @param {?} view\n * @param {?} elDef\n * @return {?}\n */\nfunction createInjector(view, elDef) {\n return new Injector_(view, elDef);\n}\nclass Injector_ {\n /**\n * @param {?} view\n * @param {?} elDef\n */\n constructor(view, elDef) {\n this.view = view;\n this.elDef = elDef;\n }\n /**\n * @param {?} token\n * @param {?=} notFoundValue\n * @return {?}\n */\n get(token, notFoundValue = Injector.THROW_IF_NOT_FOUND) {\n const /** @type {?} */ allowPrivateServices = this.elDef ? (this.elDef.flags & 33554432 /* ComponentView */) !== 0 : false;\n return Services.resolveDep(this.view, this.elDef, allowPrivateServices, { flags: 0 /* None */, token, tokenKey: tokenKey(token) }, notFoundValue);\n }\n}\n/**\n * @param {?} view\n * @param {?} index\n * @return {?}\n */\nfunction nodeValue(view, index) {\n const /** @type {?} */ def = view.def.nodes[index];\n if (def.flags & 1 /* TypeElement */) {\n const /** @type {?} */ elData = asElementData(view, def.nodeIndex);\n return /** @type {?} */ ((def.element)).template ? elData.template : elData.renderElement;\n }\n else if (def.flags & 2 /* TypeText */) {\n return asTextData(view, def.nodeIndex).renderText;\n }\n else if (def.flags & (20224 /* CatProvider */ | 16 /* TypePipe */)) {\n return asProviderData(view, def.nodeIndex).instance;\n }\n throw new Error(`Illegal state: read nodeValue for node index ${index}`);\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction createRendererV1(view) {\n return new RendererAdapter(view.renderer);\n}\nclass RendererAdapter {\n /**\n * @param {?} delegate\n */\n constructor(delegate) {\n this.delegate = delegate;\n }\n /**\n * @param {?} selectorOrNode\n * @return {?}\n */\n selectRootElement(selectorOrNode) {\n return this.delegate.selectRootElement(selectorOrNode);\n }\n /**\n * @param {?} parent\n * @param {?} namespaceAndName\n * @return {?}\n */\n createElement(parent, namespaceAndName) {\n const [ns, name] = splitNamespace(namespaceAndName);\n const /** @type {?} */ el = this.delegate.createElement(name, ns);\n if (parent) {\n this.delegate.appendChild(parent, el);\n }\n return el;\n }\n /**\n * @param {?} hostElement\n * @return {?}\n */\n createViewRoot(hostElement) { return hostElement; }\n /**\n * @param {?} parentElement\n * @return {?}\n */\n createTemplateAnchor(parentElement) {\n const /** @type {?} */ comment = this.delegate.createComment('');\n if (parentElement) {\n this.delegate.appendChild(parentElement, comment);\n }\n return comment;\n }\n /**\n * @param {?} parentElement\n * @param {?} value\n * @return {?}\n */\n createText(parentElement, value) {\n const /** @type {?} */ node = this.delegate.createText(value);\n if (parentElement) {\n this.delegate.appendChild(parentElement, node);\n }\n return node;\n }\n /**\n * @param {?} parentElement\n * @param {?} nodes\n * @return {?}\n */\n projectNodes(parentElement, nodes) {\n for (let /** @type {?} */ i = 0; i < nodes.length; i++) {\n this.delegate.appendChild(parentElement, nodes[i]);\n }\n }\n /**\n * @param {?} node\n * @param {?} viewRootNodes\n * @return {?}\n */\n attachViewAfter(node, viewRootNodes) {\n const /** @type {?} */ parentElement = this.delegate.parentNode(node);\n const /** @type {?} */ nextSibling = this.delegate.nextSibling(node);\n for (let /** @type {?} */ i = 0; i < viewRootNodes.length; i++) {\n this.delegate.insertBefore(parentElement, viewRootNodes[i], nextSibling);\n }\n }\n /**\n * @param {?} viewRootNodes\n * @return {?}\n */\n detachView(viewRootNodes) {\n for (let /** @type {?} */ i = 0; i < viewRootNodes.length; i++) {\n const /** @type {?} */ node = viewRootNodes[i];\n const /** @type {?} */ parentElement = this.delegate.parentNode(node);\n this.delegate.removeChild(parentElement, node);\n }\n }\n /**\n * @param {?} hostElement\n * @param {?} viewAllNodes\n * @return {?}\n */\n destroyView(hostElement, viewAllNodes) {\n for (let /** @type {?} */ i = 0; i < viewAllNodes.length; i++) {\n /** @type {?} */ ((this.delegate.destroyNode))(viewAllNodes[i]);\n }\n }\n /**\n * @param {?} renderElement\n * @param {?} name\n * @param {?} callback\n * @return {?}\n */\n listen(renderElement, name, callback) {\n return this.delegate.listen(renderElement, name, /** @type {?} */ (callback));\n }\n /**\n * @param {?} target\n * @param {?} name\n * @param {?} callback\n * @return {?}\n */\n listenGlobal(target, name, callback) {\n return this.delegate.listen(target, name, /** @type {?} */ (callback));\n }\n /**\n * @param {?} renderElement\n * @param {?} propertyName\n * @param {?} propertyValue\n * @return {?}\n */\n setElementProperty(renderElement, propertyName, propertyValue) {\n this.delegate.setProperty(renderElement, propertyName, propertyValue);\n }\n /**\n * @param {?} renderElement\n * @param {?} namespaceAndName\n * @param {?} attributeValue\n * @return {?}\n */\n setElementAttribute(renderElement, namespaceAndName, attributeValue) {\n const [ns, name] = splitNamespace(namespaceAndName);\n if (attributeValue != null) {\n this.delegate.setAttribute(renderElement, name, attributeValue, ns);\n }\n else {\n this.delegate.removeAttribute(renderElement, name, ns);\n }\n }\n /**\n * @param {?} renderElement\n * @param {?} propertyName\n * @param {?} propertyValue\n * @return {?}\n */\n setBindingDebugInfo(renderElement, propertyName, propertyValue) { }\n /**\n * @param {?} renderElement\n * @param {?} className\n * @param {?} isAdd\n * @return {?}\n */\n setElementClass(renderElement, className, isAdd) {\n if (isAdd) {\n this.delegate.addClass(renderElement, className);\n }\n else {\n this.delegate.removeClass(renderElement, className);\n }\n }\n /**\n * @param {?} renderElement\n * @param {?} styleName\n * @param {?} styleValue\n * @return {?}\n */\n setElementStyle(renderElement, styleName, styleValue) {\n if (styleValue != null) {\n this.delegate.setStyle(renderElement, styleName, styleValue);\n }\n else {\n this.delegate.removeStyle(renderElement, styleName);\n }\n }\n /**\n * @param {?} renderElement\n * @param {?} methodName\n * @param {?} args\n * @return {?}\n */\n invokeElementMethod(renderElement, methodName, args) {\n (/** @type {?} */ (renderElement))[methodName].apply(renderElement, args);\n }\n /**\n * @param {?} renderNode\n * @param {?} text\n * @return {?}\n */\n setText(renderNode$$1, text) { this.delegate.setValue(renderNode$$1, text); }\n /**\n * @return {?}\n */\n animate() { throw new Error('Renderer.animate is no longer supported!'); }\n}\n/**\n * @param {?} moduleType\n * @param {?} parent\n * @param {?} bootstrapComponents\n * @param {?} def\n * @return {?}\n */\nfunction createNgModuleRef(moduleType, parent, bootstrapComponents, def) {\n return new NgModuleRef_(moduleType, parent, bootstrapComponents, def);\n}\nclass NgModuleRef_ {\n /**\n * @param {?} _moduleType\n * @param {?} _parent\n * @param {?} _bootstrapComponents\n * @param {?} _def\n */\n constructor(_moduleType, _parent, _bootstrapComponents, _def) {\n this._moduleType = _moduleType;\n this._parent = _parent;\n this._bootstrapComponents = _bootstrapComponents;\n this._def = _def;\n this._destroyListeners = [];\n this._destroyed = false;\n this.injector = this;\n initNgModule(this);\n }\n /**\n * @param {?} token\n * @param {?=} notFoundValue\n * @return {?}\n */\n get(token, notFoundValue = Injector.THROW_IF_NOT_FOUND) {\n return resolveNgModuleDep(this, { token: token, tokenKey: tokenKey(token), flags: 0 /* None */ }, notFoundValue);\n }\n /**\n * @return {?}\n */\n get instance() { return this.get(this._moduleType); }\n /**\n * @return {?}\n */\n get componentFactoryResolver() { return this.get(ComponentFactoryResolver); }\n /**\n * @return {?}\n */\n destroy() {\n if (this._destroyed) {\n throw new Error(`The ng module ${stringify(this.instance.constructor)} has already been destroyed.`);\n }\n this._destroyed = true;\n callNgModuleLifecycle(this, 131072 /* OnDestroy */);\n this._destroyListeners.forEach((listener) => listener());\n }\n /**\n * @param {?} callback\n * @return {?}\n */\n onDestroy(callback) { this._destroyListeners.push(callback); }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nconst RendererV1TokenKey = tokenKey(Renderer);\nconst Renderer2TokenKey = tokenKey(Renderer2);\nconst ElementRefTokenKey = tokenKey(ElementRef);\nconst ViewContainerRefTokenKey = tokenKey(ViewContainerRef);\nconst TemplateRefTokenKey = tokenKey(TemplateRef);\nconst ChangeDetectorRefTokenKey = tokenKey(ChangeDetectorRef);\nconst InjectorRefTokenKey = tokenKey(Injector);\n/**\n * @param {?} checkIndex\n * @param {?} flags\n * @param {?} matchedQueries\n * @param {?} childCount\n * @param {?} ctor\n * @param {?} deps\n * @param {?=} props\n * @param {?=} outputs\n * @return {?}\n */\nfunction directiveDef(checkIndex, flags, matchedQueries, childCount, ctor, deps, props, outputs) {\n const /** @type {?} */ bindings = [];\n if (props) {\n for (let /** @type {?} */ prop in props) {\n const [bindingIndex, nonMinifiedName] = props[prop];\n bindings[bindingIndex] = {\n flags: 8 /* TypeProperty */,\n name: prop, nonMinifiedName,\n ns: null,\n securityContext: null,\n suffix: null\n };\n }\n }\n const /** @type {?} */ outputDefs = [];\n if (outputs) {\n for (let /** @type {?} */ propName in outputs) {\n outputDefs.push({ type: 1 /* DirectiveOutput */, propName, target: null, eventName: outputs[propName] });\n }\n }\n flags |= 16384 /* TypeDirective */;\n return _def(checkIndex, flags, matchedQueries, childCount, ctor, ctor, deps, bindings, outputDefs);\n}\n/**\n * @param {?} flags\n * @param {?} ctor\n * @param {?} deps\n * @return {?}\n */\nfunction pipeDef(flags, ctor, deps) {\n flags |= 16 /* TypePipe */;\n return _def(-1, flags, null, 0, ctor, ctor, deps);\n}\n/**\n * @param {?} flags\n * @param {?} matchedQueries\n * @param {?} token\n * @param {?} value\n * @param {?} deps\n * @return {?}\n */\nfunction providerDef(flags, matchedQueries, token, value, deps) {\n return _def(-1, flags, matchedQueries, 0, token, value, deps);\n}\n/**\n * @param {?} checkIndex\n * @param {?} flags\n * @param {?} matchedQueriesDsl\n * @param {?} childCount\n * @param {?} token\n * @param {?} value\n * @param {?} deps\n * @param {?=} bindings\n * @param {?=} outputs\n * @return {?}\n */\nfunction _def(checkIndex, flags, matchedQueriesDsl, childCount, token, value, deps, bindings, outputs) {\n const { matchedQueries, references, matchedQueryIds } = splitMatchedQueriesDsl(matchedQueriesDsl);\n if (!outputs) {\n outputs = [];\n }\n if (!bindings) {\n bindings = [];\n }\n // Need to resolve forwardRefs as e.g. for `useValue` we\n // lowered the expression and then stopped evaluating it,\n // i.e. also didn't unwrap it.\n value = resolveForwardRef(value);\n const /** @type {?} */ depDefs = splitDepsDsl(deps, stringify(token));\n return {\n // will bet set by the view definition\n nodeIndex: -1,\n parent: null,\n renderParent: null,\n bindingIndex: -1,\n outputIndex: -1,\n // regular values\n checkIndex,\n flags,\n childFlags: 0,\n directChildFlags: 0,\n childMatchedQueries: 0, matchedQueries, matchedQueryIds, references,\n ngContentIndex: -1, childCount, bindings,\n bindingFlags: calcBindingFlags(bindings), outputs,\n element: null,\n provider: { token, value, deps: depDefs },\n text: null,\n query: null,\n ngContent: null\n };\n}\n/**\n * @param {?} view\n * @param {?} def\n * @return {?}\n */\nfunction createProviderInstance(view, def) {\n return _createProviderInstance(view, def);\n}\n/**\n * @param {?} view\n * @param {?} def\n * @return {?}\n */\nfunction createPipeInstance(view, def) {\n // deps are looked up from component.\n let /** @type {?} */ compView = view;\n while (compView.parent && !isComponentView(compView)) {\n compView = compView.parent;\n }\n // pipes can see the private services of the component\n const /** @type {?} */ allowPrivateServices = true;\n // pipes are always eager and classes!\n return createClass(/** @type {?} */ ((compView.parent)), /** @type {?} */ ((viewParentEl(compView))), allowPrivateServices, /** @type {?} */ ((def.provider)).value, /** @type {?} */ ((def.provider)).deps);\n}\n/**\n * @param {?} view\n * @param {?} def\n * @return {?}\n */\nfunction createDirectiveInstance(view, def) {\n // components can see other private services, other directives can't.\n const /** @type {?} */ allowPrivateServices = (def.flags & 32768 /* Component */) > 0;\n // directives are always eager and classes!\n const /** @type {?} */ instance = createClass(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((def.provider)).value, /** @type {?} */ ((def.provider)).deps);\n if (def.outputs.length) {\n for (let /** @type {?} */ i = 0; i < def.outputs.length; i++) {\n const /** @type {?} */ output = def.outputs[i];\n const /** @type {?} */ subscription = instance[/** @type {?} */ ((output.propName))].subscribe(eventHandlerClosure(view, /** @type {?} */ ((def.parent)).nodeIndex, output.eventName)); /** @type {?} */\n ((view.disposables))[def.outputIndex + i] = subscription.unsubscribe.bind(subscription);\n }\n }\n return instance;\n}\n/**\n * @param {?} view\n * @param {?} index\n * @param {?} eventName\n * @return {?}\n */\nfunction eventHandlerClosure(view, index, eventName) {\n return (event) => dispatchEvent(view, index, eventName, event);\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} v0\n * @param {?} v1\n * @param {?} v2\n * @param {?} v3\n * @param {?} v4\n * @param {?} v5\n * @param {?} v6\n * @param {?} v7\n * @param {?} v8\n * @param {?} v9\n * @return {?}\n */\nfunction checkAndUpdateDirectiveInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {\n const /** @type {?} */ providerData = asProviderData(view, def.nodeIndex);\n const /** @type {?} */ directive = providerData.instance;\n let /** @type {?} */ changed = false;\n let /** @type {?} */ changes = /** @type {?} */ ((undefined));\n const /** @type {?} */ bindLen = def.bindings.length;\n if (bindLen > 0 && checkBinding(view, def, 0, v0)) {\n changed = true;\n changes = updateProp(view, providerData, def, 0, v0, changes);\n }\n if (bindLen > 1 && checkBinding(view, def, 1, v1)) {\n changed = true;\n changes = updateProp(view, providerData, def, 1, v1, changes);\n }\n if (bindLen > 2 && checkBinding(view, def, 2, v2)) {\n changed = true;\n changes = updateProp(view, providerData, def, 2, v2, changes);\n }\n if (bindLen > 3 && checkBinding(view, def, 3, v3)) {\n changed = true;\n changes = updateProp(view, providerData, def, 3, v3, changes);\n }\n if (bindLen > 4 && checkBinding(view, def, 4, v4)) {\n changed = true;\n changes = updateProp(view, providerData, def, 4, v4, changes);\n }\n if (bindLen > 5 && checkBinding(view, def, 5, v5)) {\n changed = true;\n changes = updateProp(view, providerData, def, 5, v5, changes);\n }\n if (bindLen > 6 && checkBinding(view, def, 6, v6)) {\n changed = true;\n changes = updateProp(view, providerData, def, 6, v6, changes);\n }\n if (bindLen > 7 && checkBinding(view, def, 7, v7)) {\n changed = true;\n changes = updateProp(view, providerData, def, 7, v7, changes);\n }\n if (bindLen > 8 && checkBinding(view, def, 8, v8)) {\n changed = true;\n changes = updateProp(view, providerData, def, 8, v8, changes);\n }\n if (bindLen > 9 && checkBinding(view, def, 9, v9)) {\n changed = true;\n changes = updateProp(view, providerData, def, 9, v9, changes);\n }\n if (changes) {\n directive.ngOnChanges(changes);\n }\n if ((def.flags & 65536 /* OnInit */) &&\n shouldCallLifecycleInitHook(view, 256 /* InitState_CallingOnInit */, def.nodeIndex)) {\n directive.ngOnInit();\n }\n if (def.flags & 262144 /* DoCheck */) {\n directive.ngDoCheck();\n }\n return changed;\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} values\n * @return {?}\n */\nfunction checkAndUpdateDirectiveDynamic(view, def, values) {\n const /** @type {?} */ providerData = asProviderData(view, def.nodeIndex);\n const /** @type {?} */ directive = providerData.instance;\n let /** @type {?} */ changed = false;\n let /** @type {?} */ changes = /** @type {?} */ ((undefined));\n for (let /** @type {?} */ i = 0; i < values.length; i++) {\n if (checkBinding(view, def, i, values[i])) {\n changed = true;\n changes = updateProp(view, providerData, def, i, values[i], changes);\n }\n }\n if (changes) {\n directive.ngOnChanges(changes);\n }\n if ((def.flags & 65536 /* OnInit */) &&\n shouldCallLifecycleInitHook(view, 256 /* InitState_CallingOnInit */, def.nodeIndex)) {\n directive.ngOnInit();\n }\n if (def.flags & 262144 /* DoCheck */) {\n directive.ngDoCheck();\n }\n return changed;\n}\n/**\n * @param {?} view\n * @param {?} def\n * @return {?}\n */\nfunction _createProviderInstance(view, def) {\n // private services can see other private services\n const /** @type {?} */ allowPrivateServices = (def.flags & 8192 /* PrivateProvider */) > 0;\n const /** @type {?} */ providerDef = def.provider;\n switch (def.flags & 201347067 /* Types */) {\n case 512 /* TypeClassProvider */:\n return createClass(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).value, /** @type {?} */ ((providerDef)).deps);\n case 1024 /* TypeFactoryProvider */:\n return callFactory(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).value, /** @type {?} */ ((providerDef)).deps);\n case 2048 /* TypeUseExistingProvider */:\n return resolveDep(view, /** @type {?} */ ((def.parent)), allowPrivateServices, /** @type {?} */ ((providerDef)).deps[0]);\n case 256 /* TypeValueProvider */:\n return /** @type {?} */ ((providerDef)).value;\n }\n}\n/**\n * @param {?} view\n * @param {?} elDef\n * @param {?} allowPrivateServices\n * @param {?} ctor\n * @param {?} deps\n * @return {?}\n */\nfunction createClass(view, elDef, allowPrivateServices, ctor, deps) {\n const /** @type {?} */ len = deps.length;\n switch (len) {\n case 0:\n return new ctor();\n case 1:\n return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]));\n case 2:\n return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));\n case 3:\n return new ctor(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));\n default:\n const /** @type {?} */ depValues = new Array(len);\n for (let /** @type {?} */ i = 0; i < len; i++) {\n depValues[i] = resolveDep(view, elDef, allowPrivateServices, deps[i]);\n }\n return new ctor(...depValues);\n }\n}\n/**\n * @param {?} view\n * @param {?} elDef\n * @param {?} allowPrivateServices\n * @param {?} factory\n * @param {?} deps\n * @return {?}\n */\nfunction callFactory(view, elDef, allowPrivateServices, factory, deps) {\n const /** @type {?} */ len = deps.length;\n switch (len) {\n case 0:\n return factory();\n case 1:\n return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]));\n case 2:\n return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]));\n case 3:\n return factory(resolveDep(view, elDef, allowPrivateServices, deps[0]), resolveDep(view, elDef, allowPrivateServices, deps[1]), resolveDep(view, elDef, allowPrivateServices, deps[2]));\n default:\n const /** @type {?} */ depValues = Array(len);\n for (let /** @type {?} */ i = 0; i < len; i++) {\n depValues[i] = resolveDep(view, elDef, allowPrivateServices, deps[i]);\n }\n return factory(...depValues);\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 * @param {?} view\n * @param {?} elDef\n * @param {?} allowPrivateServices\n * @param {?} depDef\n * @param {?=} notFoundValue\n * @return {?}\n */\nfunction resolveDep(view, elDef, allowPrivateServices, depDef, notFoundValue = Injector.THROW_IF_NOT_FOUND) {\n if (depDef.flags & 8 /* Value */) {\n return depDef.token;\n }\n const /** @type {?} */ startView = view;\n if (depDef.flags & 2 /* Optional */) {\n notFoundValue = null;\n }\n const /** @type {?} */ tokenKey$$1 = depDef.tokenKey;\n if (tokenKey$$1 === ChangeDetectorRefTokenKey) {\n // directives on the same element as a component should be able to control the change detector\n // of that component as well.\n allowPrivateServices = !!(elDef && /** @type {?} */ ((elDef.element)).componentView);\n }\n if (elDef && (depDef.flags & 1 /* SkipSelf */)) {\n allowPrivateServices = false;\n elDef = /** @type {?} */ ((elDef.parent));\n }\n while (view) {\n if (elDef) {\n switch (tokenKey$$1) {\n case RendererV1TokenKey: {\n const /** @type {?} */ compView = findCompView(view, elDef, allowPrivateServices);\n return createRendererV1(compView);\n }\n case Renderer2TokenKey: {\n const /** @type {?} */ compView = findCompView(view, elDef, allowPrivateServices);\n return compView.renderer;\n }\n case ElementRefTokenKey:\n return new ElementRef(asElementData(view, elDef.nodeIndex).renderElement);\n case ViewContainerRefTokenKey:\n return asElementData(view, elDef.nodeIndex).viewContainer;\n case TemplateRefTokenKey: {\n if (/** @type {?} */ ((elDef.element)).template) {\n return asElementData(view, elDef.nodeIndex).template;\n }\n break;\n }\n case ChangeDetectorRefTokenKey: {\n let /** @type {?} */ cdView = findCompView(view, elDef, allowPrivateServices);\n return createChangeDetectorRef(cdView);\n }\n case InjectorRefTokenKey:\n return createInjector(view, elDef);\n default:\n const /** @type {?} */ providerDef = /** @type {?} */ (((allowPrivateServices ? /** @type {?} */ ((elDef.element)).allProviders : /** @type {?} */ ((elDef.element)).publicProviders)))[tokenKey$$1];\n if (providerDef) {\n let /** @type {?} */ providerData = asProviderData(view, providerDef.nodeIndex);\n if (!providerData) {\n providerData = { instance: _createProviderInstance(view, providerDef) };\n view.nodes[providerDef.nodeIndex] = /** @type {?} */ (providerData);\n }\n return providerData.instance;\n }\n }\n }\n allowPrivateServices = isComponentView(view);\n elDef = /** @type {?} */ ((viewParentEl(view)));\n view = /** @type {?} */ ((view.parent));\n }\n const /** @type {?} */ value = startView.root.injector.get(depDef.token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR);\n if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||\n 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 startView.root.ngModule.injector.get(depDef.token, notFoundValue);\n}\n/**\n * @param {?} view\n * @param {?} elDef\n * @param {?} allowPrivateServices\n * @return {?}\n */\nfunction findCompView(view, elDef, allowPrivateServices) {\n let /** @type {?} */ compView;\n if (allowPrivateServices) {\n compView = asElementData(view, elDef.nodeIndex).componentView;\n }\n else {\n compView = view;\n while (compView.parent && !isComponentView(compView)) {\n compView = compView.parent;\n }\n }\n return compView;\n}\n/**\n * @param {?} view\n * @param {?} providerData\n * @param {?} def\n * @param {?} bindingIdx\n * @param {?} value\n * @param {?} changes\n * @return {?}\n */\nfunction updateProp(view, providerData, def, bindingIdx, value, changes) {\n if (def.flags & 32768 /* Component */) {\n const /** @type {?} */ compView = asElementData(view, /** @type {?} */ ((def.parent)).nodeIndex).componentView;\n if (compView.def.flags & 2 /* OnPush */) {\n compView.state |= 8 /* ChecksEnabled */;\n }\n }\n const /** @type {?} */ binding = def.bindings[bindingIdx];\n const /** @type {?} */ propName = /** @type {?} */ ((binding.name));\n // Note: This is still safe with Closure Compiler as\n // the user passed in the property name as an object has to `providerDef`,\n // so Closure Compiler will have renamed the property correctly already.\n providerData.instance[propName] = value;\n if (def.flags & 524288 /* OnChanges */) {\n changes = changes || {};\n const /** @type {?} */ oldValue = WrappedValue.unwrap(view.oldValues[def.bindingIndex + bindingIdx]);\n const /** @type {?} */ binding = def.bindings[bindingIdx];\n changes[/** @type {?} */ ((binding.nonMinifiedName))] =\n new SimpleChange(oldValue, value, (view.state & 2 /* FirstCheck */) !== 0);\n }\n view.oldValues[def.bindingIndex + bindingIdx] = value;\n return changes;\n}\n/**\n * @param {?} view\n * @param {?} lifecycles\n * @return {?}\n */\nfunction callLifecycleHooksChildrenFirst(view, lifecycles) {\n if (!(view.def.nodeFlags & lifecycles)) {\n return;\n }\n const /** @type {?} */ nodes = view.def.nodes;\n let /** @type {?} */ initIndex = 0;\n for (let /** @type {?} */ i = 0; i < nodes.length; i++) {\n const /** @type {?} */ nodeDef = nodes[i];\n let /** @type {?} */ parent = nodeDef.parent;\n if (!parent && nodeDef.flags & lifecycles) {\n // matching root node (e.g. a pipe)\n callProviderLifecycles(view, i, nodeDef.flags & lifecycles, initIndex++);\n }\n if ((nodeDef.childFlags & lifecycles) === 0) {\n // no child matches one of the lifecycles\n i += nodeDef.childCount;\n }\n while (parent && (parent.flags & 1 /* TypeElement */) &&\n i === parent.nodeIndex + parent.childCount) {\n // last child of an element\n if (parent.directChildFlags & lifecycles) {\n initIndex = callElementProvidersLifecycles(view, parent, lifecycles, initIndex);\n }\n parent = parent.parent;\n }\n }\n}\n/**\n * @param {?} view\n * @param {?} elDef\n * @param {?} lifecycles\n * @param {?} initIndex\n * @return {?}\n */\nfunction callElementProvidersLifecycles(view, elDef, lifecycles, initIndex) {\n for (let /** @type {?} */ i = elDef.nodeIndex + 1; i <= elDef.nodeIndex + elDef.childCount; i++) {\n const /** @type {?} */ nodeDef = view.def.nodes[i];\n if (nodeDef.flags & lifecycles) {\n callProviderLifecycles(view, i, nodeDef.flags & lifecycles, initIndex++);\n }\n // only visit direct children\n i += nodeDef.childCount;\n }\n return initIndex;\n}\n/**\n * @param {?} view\n * @param {?} index\n * @param {?} lifecycles\n * @param {?} initIndex\n * @return {?}\n */\nfunction callProviderLifecycles(view, index, lifecycles, initIndex) {\n const /** @type {?} */ providerData = asProviderData(view, index);\n if (!providerData) {\n return;\n }\n const /** @type {?} */ provider = providerData.instance;\n if (!provider) {\n return;\n }\n Services.setCurrentNode(view, index);\n if (lifecycles & 1048576 /* AfterContentInit */ &&\n shouldCallLifecycleInitHook(view, 512 /* InitState_CallingAfterContentInit */, initIndex)) {\n provider.ngAfterContentInit();\n }\n if (lifecycles & 2097152 /* AfterContentChecked */) {\n provider.ngAfterContentChecked();\n }\n if (lifecycles & 4194304 /* AfterViewInit */ &&\n shouldCallLifecycleInitHook(view, 768 /* InitState_CallingAfterViewInit */, initIndex)) {\n provider.ngAfterViewInit();\n }\n if (lifecycles & 8388608 /* AfterViewChecked */) {\n provider.ngAfterViewChecked();\n }\n if (lifecycles & 131072 /* OnDestroy */) {\n provider.ngOnDestroy();\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} flags\n * @param {?} id\n * @param {?} bindings\n * @return {?}\n */\nfunction queryDef(flags, id, bindings) {\n let /** @type {?} */ bindingDefs = [];\n for (let /** @type {?} */ propName in bindings) {\n const /** @type {?} */ bindingType = bindings[propName];\n bindingDefs.push({ propName, bindingType });\n }\n return {\n // will bet set by the view definition\n nodeIndex: -1,\n parent: null,\n renderParent: null,\n bindingIndex: -1,\n outputIndex: -1,\n // regular values\n // TODO(vicb): check\n checkIndex: -1, flags,\n childFlags: 0,\n directChildFlags: 0,\n childMatchedQueries: 0,\n ngContentIndex: -1,\n matchedQueries: {},\n matchedQueryIds: 0,\n references: {},\n childCount: 0,\n bindings: [],\n bindingFlags: 0,\n outputs: [],\n element: null,\n provider: null,\n text: null,\n query: { id, filterId: filterQueryId(id), bindings: bindingDefs },\n ngContent: null\n };\n}\n/**\n * @return {?}\n */\nfunction createQuery() {\n return new QueryList();\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction dirtyParentQueries(view) {\n const /** @type {?} */ queryIds = view.def.nodeMatchedQueries;\n while (view.parent && isEmbeddedView(view)) {\n let /** @type {?} */ tplDef = /** @type {?} */ ((view.parentNodeDef));\n view = view.parent;\n // content queries\n const /** @type {?} */ end = tplDef.nodeIndex + tplDef.childCount;\n for (let /** @type {?} */ i = 0; i <= end; i++) {\n const /** @type {?} */ nodeDef = view.def.nodes[i];\n if ((nodeDef.flags & 67108864 /* TypeContentQuery */) &&\n (nodeDef.flags & 536870912 /* DynamicQuery */) &&\n (/** @type {?} */ ((nodeDef.query)).filterId & queryIds) === /** @type {?} */ ((nodeDef.query)).filterId) {\n asQueryList(view, i).setDirty();\n }\n if ((nodeDef.flags & 1 /* TypeElement */ && i + nodeDef.childCount < tplDef.nodeIndex) ||\n !(nodeDef.childFlags & 67108864 /* TypeContentQuery */) ||\n !(nodeDef.childFlags & 536870912 /* DynamicQuery */)) {\n // skip elements that don't contain the template element or no query.\n i += nodeDef.childCount;\n }\n }\n }\n // view queries\n if (view.def.nodeFlags & 134217728 /* TypeViewQuery */) {\n for (let /** @type {?} */ i = 0; i < view.def.nodes.length; i++) {\n const /** @type {?} */ nodeDef = view.def.nodes[i];\n if ((nodeDef.flags & 134217728 /* TypeViewQuery */) && (nodeDef.flags & 536870912 /* DynamicQuery */)) {\n asQueryList(view, i).setDirty();\n }\n // only visit the root nodes\n i += nodeDef.childCount;\n }\n }\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @return {?}\n */\nfunction checkAndUpdateQuery(view, nodeDef) {\n const /** @type {?} */ queryList = asQueryList(view, nodeDef.nodeIndex);\n if (!queryList.dirty) {\n return;\n }\n let /** @type {?} */ directiveInstance;\n let /** @type {?} */ newValues = /** @type {?} */ ((undefined));\n if (nodeDef.flags & 67108864 /* TypeContentQuery */) {\n const /** @type {?} */ elementDef = /** @type {?} */ ((/** @type {?} */ ((nodeDef.parent)).parent));\n newValues = calcQueryValues(view, elementDef.nodeIndex, elementDef.nodeIndex + elementDef.childCount, /** @type {?} */ ((nodeDef.query)), []);\n directiveInstance = asProviderData(view, /** @type {?} */ ((nodeDef.parent)).nodeIndex).instance;\n }\n else if (nodeDef.flags & 134217728 /* TypeViewQuery */) {\n newValues = calcQueryValues(view, 0, view.def.nodes.length - 1, /** @type {?} */ ((nodeDef.query)), []);\n directiveInstance = view.component;\n }\n queryList.reset(newValues);\n const /** @type {?} */ bindings = /** @type {?} */ ((nodeDef.query)).bindings;\n let /** @type {?} */ notify = false;\n for (let /** @type {?} */ i = 0; i < bindings.length; i++) {\n const /** @type {?} */ binding = bindings[i];\n let /** @type {?} */ boundValue;\n switch (binding.bindingType) {\n case 0 /* First */:\n boundValue = queryList.first;\n break;\n case 1 /* All */:\n boundValue = queryList;\n notify = true;\n break;\n }\n directiveInstance[binding.propName] = boundValue;\n }\n if (notify) {\n queryList.notifyOnChanges();\n }\n}\n/**\n * @param {?} view\n * @param {?} startIndex\n * @param {?} endIndex\n * @param {?} queryDef\n * @param {?} values\n * @return {?}\n */\nfunction calcQueryValues(view, startIndex, endIndex, queryDef, values) {\n for (let /** @type {?} */ i = startIndex; i <= endIndex; i++) {\n const /** @type {?} */ nodeDef = view.def.nodes[i];\n const /** @type {?} */ valueType = nodeDef.matchedQueries[queryDef.id];\n if (valueType != null) {\n values.push(getQueryValue(view, nodeDef, valueType));\n }\n if (nodeDef.flags & 1 /* TypeElement */ && /** @type {?} */ ((nodeDef.element)).template &&\n (/** @type {?} */ ((/** @type {?} */ ((nodeDef.element)).template)).nodeMatchedQueries & queryDef.filterId) ===\n queryDef.filterId) {\n const /** @type {?} */ elementData = asElementData(view, i);\n // check embedded views that were attached at the place of their template,\n // but process child nodes first if some match the query (see issue #16568)\n if ((nodeDef.childMatchedQueries & queryDef.filterId) === queryDef.filterId) {\n calcQueryValues(view, i + 1, i + nodeDef.childCount, queryDef, values);\n i += nodeDef.childCount;\n }\n if (nodeDef.flags & 16777216 /* EmbeddedViews */) {\n const /** @type {?} */ embeddedViews = /** @type {?} */ ((elementData.viewContainer))._embeddedViews;\n for (let /** @type {?} */ k = 0; k < embeddedViews.length; k++) {\n const /** @type {?} */ embeddedView = embeddedViews[k];\n const /** @type {?} */ dvc = declaredViewContainer(embeddedView);\n if (dvc && dvc === elementData) {\n calcQueryValues(embeddedView, 0, embeddedView.def.nodes.length - 1, queryDef, values);\n }\n }\n }\n const /** @type {?} */ projectedViews = elementData.template._projectedViews;\n if (projectedViews) {\n for (let /** @type {?} */ k = 0; k < projectedViews.length; k++) {\n const /** @type {?} */ projectedView = projectedViews[k];\n calcQueryValues(projectedView, 0, projectedView.def.nodes.length - 1, queryDef, values);\n }\n }\n }\n if ((nodeDef.childMatchedQueries & queryDef.filterId) !== queryDef.filterId) {\n // if no child matches the query, skip the children.\n i += nodeDef.childCount;\n }\n }\n return values;\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?} queryValueType\n * @return {?}\n */\nfunction getQueryValue(view, nodeDef, queryValueType) {\n if (queryValueType != null) {\n // a match\n switch (queryValueType) {\n case 1 /* RenderElement */:\n return asElementData(view, nodeDef.nodeIndex).renderElement;\n case 0 /* ElementRef */:\n return new ElementRef(asElementData(view, nodeDef.nodeIndex).renderElement);\n case 2 /* TemplateRef */:\n return asElementData(view, nodeDef.nodeIndex).template;\n case 3 /* ViewContainerRef */:\n return asElementData(view, nodeDef.nodeIndex).viewContainer;\n case 4 /* Provider */:\n return asProviderData(view, nodeDef.nodeIndex).instance;\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} ngContentIndex\n * @param {?} index\n * @return {?}\n */\nfunction ngContentDef(ngContentIndex, index) {\n return {\n // will bet set by the view definition\n nodeIndex: -1,\n parent: null,\n renderParent: null,\n bindingIndex: -1,\n outputIndex: -1,\n // regular values\n checkIndex: -1,\n flags: 8 /* TypeNgContent */,\n childFlags: 0,\n directChildFlags: 0,\n childMatchedQueries: 0,\n matchedQueries: {},\n matchedQueryIds: 0,\n references: {}, ngContentIndex,\n childCount: 0,\n bindings: [],\n bindingFlags: 0,\n outputs: [],\n element: null,\n provider: null,\n text: null,\n query: null,\n ngContent: { index }\n };\n}\n/**\n * @param {?} view\n * @param {?} renderHost\n * @param {?} def\n * @return {?}\n */\nfunction appendNgContent(view, renderHost, def) {\n const /** @type {?} */ parentEl = getParentRenderElement(view, renderHost, def);\n if (!parentEl) {\n // Nothing to do if there is no parent element.\n return;\n }\n const /** @type {?} */ ngContentIndex = /** @type {?} */ ((def.ngContent)).index;\n visitProjectedRenderNodes(view, ngContentIndex, 1 /* AppendChild */, parentEl, null, undefined);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} checkIndex\n * @param {?} argCount\n * @return {?}\n */\nfunction purePipeDef(checkIndex, argCount) {\n // argCount + 1 to include the pipe as first arg\n return _pureExpressionDef(128 /* TypePurePipe */, checkIndex, new Array(argCount + 1));\n}\n/**\n * @param {?} checkIndex\n * @param {?} argCount\n * @return {?}\n */\nfunction pureArrayDef(checkIndex, argCount) {\n return _pureExpressionDef(32 /* TypePureArray */, checkIndex, new Array(argCount));\n}\n/**\n * @param {?} checkIndex\n * @param {?} propToIndex\n * @return {?}\n */\nfunction pureObjectDef(checkIndex, propToIndex) {\n const /** @type {?} */ keys = Object.keys(propToIndex);\n const /** @type {?} */ nbKeys = keys.length;\n const /** @type {?} */ propertyNames = new Array(nbKeys);\n for (let /** @type {?} */ i = 0; i < nbKeys; i++) {\n const /** @type {?} */ key = keys[i];\n const /** @type {?} */ index = propToIndex[key];\n propertyNames[index] = key;\n }\n return _pureExpressionDef(64 /* TypePureObject */, checkIndex, propertyNames);\n}\n/**\n * @param {?} flags\n * @param {?} checkIndex\n * @param {?} propertyNames\n * @return {?}\n */\nfunction _pureExpressionDef(flags, checkIndex, propertyNames) {\n const /** @type {?} */ bindings = new Array(propertyNames.length);\n for (let /** @type {?} */ i = 0; i < propertyNames.length; i++) {\n const /** @type {?} */ prop = propertyNames[i];\n bindings[i] = {\n flags: 8 /* TypeProperty */,\n name: prop,\n ns: null,\n nonMinifiedName: prop,\n securityContext: null,\n suffix: null\n };\n }\n return {\n // will bet set by the view definition\n nodeIndex: -1,\n parent: null,\n renderParent: null,\n bindingIndex: -1,\n outputIndex: -1,\n // regular values\n checkIndex,\n flags,\n childFlags: 0,\n directChildFlags: 0,\n childMatchedQueries: 0,\n matchedQueries: {},\n matchedQueryIds: 0,\n references: {},\n ngContentIndex: -1,\n childCount: 0, bindings,\n bindingFlags: calcBindingFlags(bindings),\n outputs: [],\n element: null,\n provider: null,\n text: null,\n query: null,\n ngContent: null\n };\n}\n/**\n * @param {?} view\n * @param {?} def\n * @return {?}\n */\nfunction createPureExpression(view, def) {\n return { value: undefined };\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} v0\n * @param {?} v1\n * @param {?} v2\n * @param {?} v3\n * @param {?} v4\n * @param {?} v5\n * @param {?} v6\n * @param {?} v7\n * @param {?} v8\n * @param {?} v9\n * @return {?}\n */\nfunction checkAndUpdatePureExpressionInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {\n const /** @type {?} */ bindings = def.bindings;\n let /** @type {?} */ changed = false;\n const /** @type {?} */ bindLen = bindings.length;\n if (bindLen > 0 && checkAndUpdateBinding(view, def, 0, v0))\n changed = true;\n if (bindLen > 1 && checkAndUpdateBinding(view, def, 1, v1))\n changed = true;\n if (bindLen > 2 && checkAndUpdateBinding(view, def, 2, v2))\n changed = true;\n if (bindLen > 3 && checkAndUpdateBinding(view, def, 3, v3))\n changed = true;\n if (bindLen > 4 && checkAndUpdateBinding(view, def, 4, v4))\n changed = true;\n if (bindLen > 5 && checkAndUpdateBinding(view, def, 5, v5))\n changed = true;\n if (bindLen > 6 && checkAndUpdateBinding(view, def, 6, v6))\n changed = true;\n if (bindLen > 7 && checkAndUpdateBinding(view, def, 7, v7))\n changed = true;\n if (bindLen > 8 && checkAndUpdateBinding(view, def, 8, v8))\n changed = true;\n if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9))\n changed = true;\n if (changed) {\n const /** @type {?} */ data = asPureExpressionData(view, def.nodeIndex);\n let /** @type {?} */ value;\n switch (def.flags & 201347067 /* Types */) {\n case 32 /* TypePureArray */:\n value = new Array(bindings.length);\n if (bindLen > 0)\n value[0] = v0;\n if (bindLen > 1)\n value[1] = v1;\n if (bindLen > 2)\n value[2] = v2;\n if (bindLen > 3)\n value[3] = v3;\n if (bindLen > 4)\n value[4] = v4;\n if (bindLen > 5)\n value[5] = v5;\n if (bindLen > 6)\n value[6] = v6;\n if (bindLen > 7)\n value[7] = v7;\n if (bindLen > 8)\n value[8] = v8;\n if (bindLen > 9)\n value[9] = v9;\n break;\n case 64 /* TypePureObject */:\n value = {};\n if (bindLen > 0)\n value[/** @type {?} */ ((bindings[0].name))] = v0;\n if (bindLen > 1)\n value[/** @type {?} */ ((bindings[1].name))] = v1;\n if (bindLen > 2)\n value[/** @type {?} */ ((bindings[2].name))] = v2;\n if (bindLen > 3)\n value[/** @type {?} */ ((bindings[3].name))] = v3;\n if (bindLen > 4)\n value[/** @type {?} */ ((bindings[4].name))] = v4;\n if (bindLen > 5)\n value[/** @type {?} */ ((bindings[5].name))] = v5;\n if (bindLen > 6)\n value[/** @type {?} */ ((bindings[6].name))] = v6;\n if (bindLen > 7)\n value[/** @type {?} */ ((bindings[7].name))] = v7;\n if (bindLen > 8)\n value[/** @type {?} */ ((bindings[8].name))] = v8;\n if (bindLen > 9)\n value[/** @type {?} */ ((bindings[9].name))] = v9;\n break;\n case 128 /* TypePurePipe */:\n const /** @type {?} */ pipe = v0;\n switch (bindLen) {\n case 1:\n value = pipe.transform(v0);\n break;\n case 2:\n value = pipe.transform(v1);\n break;\n case 3:\n value = pipe.transform(v1, v2);\n break;\n case 4:\n value = pipe.transform(v1, v2, v3);\n break;\n case 5:\n value = pipe.transform(v1, v2, v3, v4);\n break;\n case 6:\n value = pipe.transform(v1, v2, v3, v4, v5);\n break;\n case 7:\n value = pipe.transform(v1, v2, v3, v4, v5, v6);\n break;\n case 8:\n value = pipe.transform(v1, v2, v3, v4, v5, v6, v7);\n break;\n case 9:\n value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8);\n break;\n case 10:\n value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8, v9);\n break;\n }\n break;\n }\n data.value = value;\n }\n return changed;\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} values\n * @return {?}\n */\nfunction checkAndUpdatePureExpressionDynamic(view, def, values) {\n const /** @type {?} */ bindings = def.bindings;\n let /** @type {?} */ changed = false;\n for (let /** @type {?} */ i = 0; i < values.length; i++) {\n // Note: We need to loop over all values, so that\n // the old values are updates as well!\n if (checkAndUpdateBinding(view, def, i, values[i])) {\n changed = true;\n }\n }\n if (changed) {\n const /** @type {?} */ data = asPureExpressionData(view, def.nodeIndex);\n let /** @type {?} */ value;\n switch (def.flags & 201347067 /* Types */) {\n case 32 /* TypePureArray */:\n value = values;\n break;\n case 64 /* TypePureObject */:\n value = {};\n for (let /** @type {?} */ i = 0; i < values.length; i++) {\n value[/** @type {?} */ ((bindings[i].name))] = values[i];\n }\n break;\n case 128 /* TypePurePipe */:\n const /** @type {?} */ pipe = values[0];\n const /** @type {?} */ params = values.slice(1);\n value = (/** @type {?} */ (pipe.transform))(...params);\n break;\n }\n data.value = value;\n }\n return changed;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} checkIndex\n * @param {?} ngContentIndex\n * @param {?} staticText\n * @return {?}\n */\nfunction textDef(checkIndex, ngContentIndex, staticText) {\n const /** @type {?} */ bindings = new Array(staticText.length - 1);\n for (let /** @type {?} */ i = 1; i < staticText.length; i++) {\n bindings[i - 1] = {\n flags: 8 /* TypeProperty */,\n name: null,\n ns: null,\n nonMinifiedName: null,\n securityContext: null,\n suffix: staticText[i],\n };\n }\n return {\n // will bet set by the view definition\n nodeIndex: -1,\n parent: null,\n renderParent: null,\n bindingIndex: -1,\n outputIndex: -1,\n // regular values\n checkIndex,\n flags: 2 /* TypeText */,\n childFlags: 0,\n directChildFlags: 0,\n childMatchedQueries: 0,\n matchedQueries: {},\n matchedQueryIds: 0,\n references: {}, ngContentIndex,\n childCount: 0, bindings,\n bindingFlags: 8 /* TypeProperty */,\n outputs: [],\n element: null,\n provider: null,\n text: { prefix: staticText[0] },\n query: null,\n ngContent: null,\n };\n}\n/**\n * @param {?} view\n * @param {?} renderHost\n * @param {?} def\n * @return {?}\n */\nfunction createText(view, renderHost, def) {\n let /** @type {?} */ renderNode$$1;\n const /** @type {?} */ renderer = view.renderer;\n renderNode$$1 = renderer.createText(/** @type {?} */ ((def.text)).prefix);\n const /** @type {?} */ parentEl = getParentRenderElement(view, renderHost, def);\n if (parentEl) {\n renderer.appendChild(parentEl, renderNode$$1);\n }\n return { renderText: renderNode$$1 };\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} v0\n * @param {?} v1\n * @param {?} v2\n * @param {?} v3\n * @param {?} v4\n * @param {?} v5\n * @param {?} v6\n * @param {?} v7\n * @param {?} v8\n * @param {?} v9\n * @return {?}\n */\nfunction checkAndUpdateTextInline(view, def, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {\n let /** @type {?} */ changed = false;\n const /** @type {?} */ bindings = def.bindings;\n const /** @type {?} */ bindLen = bindings.length;\n if (bindLen > 0 && checkAndUpdateBinding(view, def, 0, v0))\n changed = true;\n if (bindLen > 1 && checkAndUpdateBinding(view, def, 1, v1))\n changed = true;\n if (bindLen > 2 && checkAndUpdateBinding(view, def, 2, v2))\n changed = true;\n if (bindLen > 3 && checkAndUpdateBinding(view, def, 3, v3))\n changed = true;\n if (bindLen > 4 && checkAndUpdateBinding(view, def, 4, v4))\n changed = true;\n if (bindLen > 5 && checkAndUpdateBinding(view, def, 5, v5))\n changed = true;\n if (bindLen > 6 && checkAndUpdateBinding(view, def, 6, v6))\n changed = true;\n if (bindLen > 7 && checkAndUpdateBinding(view, def, 7, v7))\n changed = true;\n if (bindLen > 8 && checkAndUpdateBinding(view, def, 8, v8))\n changed = true;\n if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9))\n changed = true;\n if (changed) {\n let /** @type {?} */ value = /** @type {?} */ ((def.text)).prefix;\n if (bindLen > 0)\n value += _addInterpolationPart(v0, bindings[0]);\n if (bindLen > 1)\n value += _addInterpolationPart(v1, bindings[1]);\n if (bindLen > 2)\n value += _addInterpolationPart(v2, bindings[2]);\n if (bindLen > 3)\n value += _addInterpolationPart(v3, bindings[3]);\n if (bindLen > 4)\n value += _addInterpolationPart(v4, bindings[4]);\n if (bindLen > 5)\n value += _addInterpolationPart(v5, bindings[5]);\n if (bindLen > 6)\n value += _addInterpolationPart(v6, bindings[6]);\n if (bindLen > 7)\n value += _addInterpolationPart(v7, bindings[7]);\n if (bindLen > 8)\n value += _addInterpolationPart(v8, bindings[8]);\n if (bindLen > 9)\n value += _addInterpolationPart(v9, bindings[9]);\n const /** @type {?} */ renderNode$$1 = asTextData(view, def.nodeIndex).renderText;\n view.renderer.setValue(renderNode$$1, value);\n }\n return changed;\n}\n/**\n * @param {?} view\n * @param {?} def\n * @param {?} values\n * @return {?}\n */\nfunction checkAndUpdateTextDynamic(view, def, values) {\n const /** @type {?} */ bindings = def.bindings;\n let /** @type {?} */ changed = false;\n for (let /** @type {?} */ i = 0; i < values.length; i++) {\n // Note: We need to loop over all values, so that\n // the old values are updates as well!\n if (checkAndUpdateBinding(view, def, i, values[i])) {\n changed = true;\n }\n }\n if (changed) {\n let /** @type {?} */ value = '';\n for (let /** @type {?} */ i = 0; i < values.length; i++) {\n value = value + _addInterpolationPart(values[i], bindings[i]);\n }\n value = /** @type {?} */ ((def.text)).prefix + value;\n const /** @type {?} */ renderNode$$1 = asTextData(view, def.nodeIndex).renderText;\n view.renderer.setValue(renderNode$$1, value);\n }\n return changed;\n}\n/**\n * @param {?} value\n * @param {?} binding\n * @return {?}\n */\nfunction _addInterpolationPart(value, binding) {\n const /** @type {?} */ valueStr = value != null ? value.toString() : '';\n return valueStr + binding.suffix;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} flags\n * @param {?} nodes\n * @param {?=} updateDirectives\n * @param {?=} updateRenderer\n * @return {?}\n */\nfunction viewDef(flags, nodes, updateDirectives, updateRenderer) {\n // clone nodes and set auto calculated values\n let /** @type {?} */ viewBindingCount = 0;\n let /** @type {?} */ viewDisposableCount = 0;\n let /** @type {?} */ viewNodeFlags = 0;\n let /** @type {?} */ viewRootNodeFlags = 0;\n let /** @type {?} */ viewMatchedQueries = 0;\n let /** @type {?} */ currentParent = null;\n let /** @type {?} */ currentRenderParent = null;\n let /** @type {?} */ currentElementHasPublicProviders = false;\n let /** @type {?} */ currentElementHasPrivateProviders = false;\n let /** @type {?} */ lastRenderRootNode = null;\n for (let /** @type {?} */ i = 0; i < nodes.length; i++) {\n const /** @type {?} */ node = nodes[i];\n node.nodeIndex = i;\n node.parent = currentParent;\n node.bindingIndex = viewBindingCount;\n node.outputIndex = viewDisposableCount;\n node.renderParent = currentRenderParent;\n viewNodeFlags |= node.flags;\n viewMatchedQueries |= node.matchedQueryIds;\n if (node.element) {\n const /** @type {?} */ elDef = node.element;\n elDef.publicProviders =\n currentParent ? /** @type {?} */ ((currentParent.element)).publicProviders : Object.create(null);\n elDef.allProviders = elDef.publicProviders;\n // Note: We assume that all providers of an element are before any child element!\n currentElementHasPublicProviders = false;\n currentElementHasPrivateProviders = false;\n if (node.element.template) {\n viewMatchedQueries |= node.element.template.nodeMatchedQueries;\n }\n }\n validateNode(currentParent, node, nodes.length);\n viewBindingCount += node.bindings.length;\n viewDisposableCount += node.outputs.length;\n if (!currentRenderParent && (node.flags & 3 /* CatRenderNode */)) {\n lastRenderRootNode = node;\n }\n if (node.flags & 20224 /* CatProvider */) {\n if (!currentElementHasPublicProviders) {\n currentElementHasPublicProviders = true; /** @type {?} */\n ((/** @type {?} */ ((currentParent)).element)).publicProviders = Object.create(/** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).publicProviders); /** @type {?} */\n ((/** @type {?} */ ((currentParent)).element)).allProviders = /** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).publicProviders;\n }\n const /** @type {?} */ isPrivateService = (node.flags & 8192 /* PrivateProvider */) !== 0;\n const /** @type {?} */ isComponent = (node.flags & 32768 /* Component */) !== 0;\n if (!isPrivateService || isComponent) {\n /** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).publicProviders))[tokenKey(/** @type {?} */ ((node.provider)).token)] = node;\n }\n else {\n if (!currentElementHasPrivateProviders) {\n currentElementHasPrivateProviders = true; /** @type {?} */\n ((/** @type {?} */ ((currentParent)).element)).allProviders = Object.create(/** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).publicProviders);\n } /** @type {?} */\n ((/** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).allProviders))[tokenKey(/** @type {?} */ ((node.provider)).token)] = node;\n }\n if (isComponent) {\n /** @type {?} */ ((/** @type {?} */ ((currentParent)).element)).componentProvider = node;\n }\n }\n if (currentParent) {\n currentParent.childFlags |= node.flags;\n currentParent.directChildFlags |= node.flags;\n currentParent.childMatchedQueries |= node.matchedQueryIds;\n if (node.element && node.element.template) {\n currentParent.childMatchedQueries |= node.element.template.nodeMatchedQueries;\n }\n }\n else {\n viewRootNodeFlags |= node.flags;\n }\n if (node.childCount > 0) {\n currentParent = node;\n if (!isNgContainer(node)) {\n currentRenderParent = node;\n }\n }\n else {\n // When the current node has no children, check if it is the last children of its parent.\n // When it is, propagate the flags up.\n // The loop is required because an element could be the last transitive children of several\n // elements. We loop to either the root or the highest opened element (= with remaining\n // children)\n while (currentParent && i === currentParent.nodeIndex + currentParent.childCount) {\n const /** @type {?} */ newParent = currentParent.parent;\n if (newParent) {\n newParent.childFlags |= currentParent.childFlags;\n newParent.childMatchedQueries |= currentParent.childMatchedQueries;\n }\n currentParent = newParent;\n // We also need to update the render parent & account for ng-container\n if (currentParent && isNgContainer(currentParent)) {\n currentRenderParent = currentParent.renderParent;\n }\n else {\n currentRenderParent = currentParent;\n }\n }\n }\n }\n const /** @type {?} */ handleEvent = (view, nodeIndex, eventName, event) => /** @type {?} */ ((/** @type {?} */ ((nodes[nodeIndex].element)).handleEvent))(view, eventName, event);\n return {\n // Will be filled later...\n factory: null,\n nodeFlags: viewNodeFlags,\n rootNodeFlags: viewRootNodeFlags,\n nodeMatchedQueries: viewMatchedQueries, flags,\n nodes: nodes,\n updateDirectives: updateDirectives || NOOP,\n updateRenderer: updateRenderer || NOOP, handleEvent,\n bindingCount: viewBindingCount,\n outputCount: viewDisposableCount, lastRenderRootNode\n };\n}\n/**\n * @param {?} node\n * @return {?}\n */\nfunction isNgContainer(node) {\n return (node.flags & 1 /* TypeElement */) !== 0 && /** @type {?} */ ((node.element)).name === null;\n}\n/**\n * @param {?} parent\n * @param {?} node\n * @param {?} nodeCount\n * @return {?}\n */\nfunction validateNode(parent, node, nodeCount) {\n const /** @type {?} */ template = node.element && node.element.template;\n if (template) {\n if (!template.lastRenderRootNode) {\n throw new Error(`Illegal State: Embedded templates without nodes are not allowed!`);\n }\n if (template.lastRenderRootNode &&\n template.lastRenderRootNode.flags & 16777216 /* EmbeddedViews */) {\n throw new Error(`Illegal State: Last root node of a template can't have embedded views, at index ${node.nodeIndex}!`);\n }\n }\n if (node.flags & 20224 /* CatProvider */) {\n const /** @type {?} */ parentFlags = parent ? parent.flags : 0;\n if ((parentFlags & 1 /* TypeElement */) === 0) {\n throw new Error(`Illegal State: StaticProvider/Directive nodes need to be children of elements or anchors, at index ${node.nodeIndex}!`);\n }\n }\n if (node.query) {\n if (node.flags & 67108864 /* TypeContentQuery */ &&\n (!parent || (parent.flags & 16384 /* TypeDirective */) === 0)) {\n throw new Error(`Illegal State: Content Query nodes need to be children of directives, at index ${node.nodeIndex}!`);\n }\n if (node.flags & 134217728 /* TypeViewQuery */ && parent) {\n throw new Error(`Illegal State: View Query nodes have to be top level nodes, at index ${node.nodeIndex}!`);\n }\n }\n if (node.childCount) {\n const /** @type {?} */ parentEnd = parent ? parent.nodeIndex + parent.childCount : nodeCount - 1;\n if (node.nodeIndex <= parentEnd && node.nodeIndex + node.childCount > parentEnd) {\n throw new Error(`Illegal State: childCount of node leads outside of parent, at index ${node.nodeIndex}!`);\n }\n }\n}\n/**\n * @param {?} parent\n * @param {?} anchorDef\n * @param {?} viewDef\n * @param {?=} context\n * @return {?}\n */\nfunction createEmbeddedView(parent, anchorDef$$1, viewDef, context) {\n // embedded views are seen as siblings to the anchor, so we need\n // to get the parent of the anchor and use it as parentIndex.\n const /** @type {?} */ view = createView(parent.root, parent.renderer, parent, anchorDef$$1, viewDef);\n initView(view, parent.component, context);\n createViewNodes(view);\n return view;\n}\n/**\n * @param {?} root\n * @param {?} def\n * @param {?=} context\n * @return {?}\n */\nfunction createRootView(root, def, context) {\n const /** @type {?} */ view = createView(root, root.renderer, null, null, def);\n initView(view, context, context);\n createViewNodes(view);\n return view;\n}\n/**\n * @param {?} parentView\n * @param {?} nodeDef\n * @param {?} viewDef\n * @param {?} hostElement\n * @return {?}\n */\nfunction createComponentView(parentView, nodeDef, viewDef, hostElement) {\n const /** @type {?} */ rendererType = /** @type {?} */ ((nodeDef.element)).componentRendererType;\n let /** @type {?} */ compRenderer;\n if (!rendererType) {\n compRenderer = parentView.root.renderer;\n }\n else {\n compRenderer = parentView.root.rendererFactory.createRenderer(hostElement, rendererType);\n }\n return createView(parentView.root, compRenderer, parentView, /** @type {?} */ ((nodeDef.element)).componentProvider, viewDef);\n}\n/**\n * @param {?} root\n * @param {?} renderer\n * @param {?} parent\n * @param {?} parentNodeDef\n * @param {?} def\n * @return {?}\n */\nfunction createView(root, renderer, parent, parentNodeDef, def) {\n const /** @type {?} */ nodes = new Array(def.nodes.length);\n const /** @type {?} */ disposables = def.outputCount ? new Array(def.outputCount) : null;\n const /** @type {?} */ view = {\n def,\n parent,\n viewContainerParent: null, parentNodeDef,\n context: null,\n component: null, nodes,\n state: 13 /* CatInit */, root, renderer,\n oldValues: new Array(def.bindingCount), disposables,\n initIndex: -1\n };\n return view;\n}\n/**\n * @param {?} view\n * @param {?} component\n * @param {?} context\n * @return {?}\n */\nfunction initView(view, component, context) {\n view.component = component;\n view.context = context;\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction createViewNodes(view) {\n let /** @type {?} */ renderHost;\n if (isComponentView(view)) {\n const /** @type {?} */ hostDef = view.parentNodeDef;\n renderHost = asElementData(/** @type {?} */ ((view.parent)), /** @type {?} */ ((/** @type {?} */ ((hostDef)).parent)).nodeIndex).renderElement;\n }\n const /** @type {?} */ def = view.def;\n const /** @type {?} */ nodes = view.nodes;\n for (let /** @type {?} */ i = 0; i < def.nodes.length; i++) {\n const /** @type {?} */ nodeDef = def.nodes[i];\n Services.setCurrentNode(view, i);\n let /** @type {?} */ nodeData;\n switch (nodeDef.flags & 201347067 /* Types */) {\n case 1 /* TypeElement */:\n const /** @type {?} */ el = /** @type {?} */ (createElement(view, renderHost, nodeDef));\n let /** @type {?} */ componentView = /** @type {?} */ ((undefined));\n if (nodeDef.flags & 33554432 /* ComponentView */) {\n const /** @type {?} */ compViewDef = resolveDefinition(/** @type {?} */ ((/** @type {?} */ ((nodeDef.element)).componentView)));\n componentView = Services.createComponentView(view, nodeDef, compViewDef, el);\n }\n listenToElementOutputs(view, componentView, nodeDef, el);\n nodeData = /** @type {?} */ ({\n renderElement: el,\n componentView,\n viewContainer: null,\n template: /** @type {?} */ ((nodeDef.element)).template ? createTemplateData(view, nodeDef) : undefined\n });\n if (nodeDef.flags & 16777216 /* EmbeddedViews */) {\n nodeData.viewContainer = createViewContainerData(view, nodeDef, nodeData);\n }\n break;\n case 2 /* TypeText */:\n nodeData = /** @type {?} */ (createText(view, renderHost, nodeDef));\n break;\n case 512 /* TypeClassProvider */:\n case 1024 /* TypeFactoryProvider */:\n case 2048 /* TypeUseExistingProvider */:\n case 256 /* TypeValueProvider */: {\n nodeData = nodes[i];\n if (!nodeData && !(nodeDef.flags & 4096 /* LazyProvider */)) {\n const /** @type {?} */ instance = createProviderInstance(view, nodeDef);\n nodeData = /** @type {?} */ ({ instance });\n }\n break;\n }\n case 16 /* TypePipe */: {\n const /** @type {?} */ instance = createPipeInstance(view, nodeDef);\n nodeData = /** @type {?} */ ({ instance });\n break;\n }\n case 16384 /* TypeDirective */: {\n nodeData = nodes[i];\n if (!nodeData) {\n const /** @type {?} */ instance = createDirectiveInstance(view, nodeDef);\n nodeData = /** @type {?} */ ({ instance });\n }\n if (nodeDef.flags & 32768 /* Component */) {\n const /** @type {?} */ compView = asElementData(view, /** @type {?} */ ((nodeDef.parent)).nodeIndex).componentView;\n initView(compView, nodeData.instance, nodeData.instance);\n }\n break;\n }\n case 32 /* TypePureArray */:\n case 64 /* TypePureObject */:\n case 128 /* TypePurePipe */:\n nodeData = /** @type {?} */ (createPureExpression(view, nodeDef));\n break;\n case 67108864 /* TypeContentQuery */:\n case 134217728 /* TypeViewQuery */:\n nodeData = /** @type {?} */ (createQuery());\n break;\n case 8 /* TypeNgContent */:\n appendNgContent(view, renderHost, nodeDef);\n // no runtime data needed for NgContent...\n nodeData = undefined;\n break;\n }\n nodes[i] = nodeData;\n }\n // Create the ViewData.nodes of component views after we created everything else,\n // so that e.g. ng-content works\n execComponentViewsAction(view, ViewAction.CreateViewNodes);\n // fill static content and view queries\n execQueriesAction(view, 67108864 /* TypeContentQuery */ | 134217728 /* TypeViewQuery */, 268435456 /* StaticQuery */, 0 /* CheckAndUpdate */);\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction checkNoChangesView(view) {\n markProjectedViewsForCheck(view);\n Services.updateDirectives(view, 1 /* CheckNoChanges */);\n execEmbeddedViewsAction(view, ViewAction.CheckNoChanges);\n Services.updateRenderer(view, 1 /* CheckNoChanges */);\n execComponentViewsAction(view, ViewAction.CheckNoChanges);\n // Note: We don't check queries for changes as we didn't do this in v2.x.\n // TODO(tbosch): investigate if we can enable the check again in v5.x with a nicer error message.\n view.state &= ~(64 /* CheckProjectedViews */ | 32 /* CheckProjectedView */);\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction checkAndUpdateView(view) {\n if (view.state & 1 /* BeforeFirstCheck */) {\n view.state &= ~1 /* BeforeFirstCheck */;\n view.state |= 2 /* FirstCheck */;\n }\n else {\n view.state &= ~2 /* FirstCheck */;\n }\n shiftInitState(view, 0 /* InitState_BeforeInit */, 256 /* InitState_CallingOnInit */);\n markProjectedViewsForCheck(view);\n Services.updateDirectives(view, 0 /* CheckAndUpdate */);\n execEmbeddedViewsAction(view, ViewAction.CheckAndUpdate);\n execQueriesAction(view, 67108864 /* TypeContentQuery */, 536870912 /* DynamicQuery */, 0 /* CheckAndUpdate */);\n let /** @type {?} */ callInit = shiftInitState(view, 256 /* InitState_CallingOnInit */, 512 /* InitState_CallingAfterContentInit */);\n callLifecycleHooksChildrenFirst(view, 2097152 /* AfterContentChecked */ | (callInit ? 1048576 /* AfterContentInit */ : 0));\n Services.updateRenderer(view, 0 /* CheckAndUpdate */);\n execComponentViewsAction(view, ViewAction.CheckAndUpdate);\n execQueriesAction(view, 134217728 /* TypeViewQuery */, 536870912 /* DynamicQuery */, 0 /* CheckAndUpdate */);\n callInit = shiftInitState(view, 512 /* InitState_CallingAfterContentInit */, 768 /* InitState_CallingAfterViewInit */);\n callLifecycleHooksChildrenFirst(view, 8388608 /* AfterViewChecked */ | (callInit ? 4194304 /* AfterViewInit */ : 0));\n if (view.def.flags & 2 /* OnPush */) {\n view.state &= ~8 /* ChecksEnabled */;\n }\n view.state &= ~(64 /* CheckProjectedViews */ | 32 /* CheckProjectedView */);\n shiftInitState(view, 768 /* InitState_CallingAfterViewInit */, 1024 /* InitState_AfterInit */);\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?} argStyle\n * @param {?=} v0\n * @param {?=} v1\n * @param {?=} v2\n * @param {?=} v3\n * @param {?=} v4\n * @param {?=} v5\n * @param {?=} v6\n * @param {?=} v7\n * @param {?=} v8\n * @param {?=} v9\n * @return {?}\n */\nfunction checkAndUpdateNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {\n if (argStyle === 0 /* Inline */) {\n return checkAndUpdateNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);\n }\n else {\n return checkAndUpdateNodeDynamic(view, nodeDef, v0);\n }\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction markProjectedViewsForCheck(view) {\n const /** @type {?} */ def = view.def;\n if (!(def.nodeFlags & 4 /* ProjectedTemplate */)) {\n return;\n }\n for (let /** @type {?} */ i = 0; i < def.nodes.length; i++) {\n const /** @type {?} */ nodeDef = def.nodes[i];\n if (nodeDef.flags & 4 /* ProjectedTemplate */) {\n const /** @type {?} */ projectedViews = asElementData(view, i).template._projectedViews;\n if (projectedViews) {\n for (let /** @type {?} */ i = 0; i < projectedViews.length; i++) {\n const /** @type {?} */ projectedView = projectedViews[i];\n projectedView.state |= 32 /* CheckProjectedView */;\n markParentViewsForCheckProjectedViews(projectedView, view);\n }\n }\n }\n else if ((nodeDef.childFlags & 4 /* ProjectedTemplate */) === 0) {\n // a parent with leafs\n // no child is a component,\n // then skip the children\n i += nodeDef.childCount;\n }\n }\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?=} v0\n * @param {?=} v1\n * @param {?=} v2\n * @param {?=} v3\n * @param {?=} v4\n * @param {?=} v5\n * @param {?=} v6\n * @param {?=} v7\n * @param {?=} v8\n * @param {?=} v9\n * @return {?}\n */\nfunction checkAndUpdateNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {\n switch (nodeDef.flags & 201347067 /* Types */) {\n case 1 /* TypeElement */:\n return checkAndUpdateElementInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);\n case 2 /* TypeText */:\n return checkAndUpdateTextInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);\n case 16384 /* TypeDirective */:\n return checkAndUpdateDirectiveInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);\n case 32 /* TypePureArray */:\n case 64 /* TypePureObject */:\n case 128 /* TypePurePipe */:\n return checkAndUpdatePureExpressionInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);\n default:\n throw 'unreachable';\n }\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?} values\n * @return {?}\n */\nfunction checkAndUpdateNodeDynamic(view, nodeDef, values) {\n switch (nodeDef.flags & 201347067 /* Types */) {\n case 1 /* TypeElement */:\n return checkAndUpdateElementDynamic(view, nodeDef, values);\n case 2 /* TypeText */:\n return checkAndUpdateTextDynamic(view, nodeDef, values);\n case 16384 /* TypeDirective */:\n return checkAndUpdateDirectiveDynamic(view, nodeDef, values);\n case 32 /* TypePureArray */:\n case 64 /* TypePureObject */:\n case 128 /* TypePurePipe */:\n return checkAndUpdatePureExpressionDynamic(view, nodeDef, values);\n default:\n throw 'unreachable';\n }\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?} argStyle\n * @param {?=} v0\n * @param {?=} v1\n * @param {?=} v2\n * @param {?=} v3\n * @param {?=} v4\n * @param {?=} v5\n * @param {?=} v6\n * @param {?=} v7\n * @param {?=} v8\n * @param {?=} v9\n * @return {?}\n */\nfunction checkNoChangesNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {\n if (argStyle === 0 /* Inline */) {\n checkNoChangesNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);\n }\n else {\n checkNoChangesNodeDynamic(view, nodeDef, v0);\n }\n // Returning false is ok here as we would have thrown in case of a change.\n return false;\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?} v0\n * @param {?} v1\n * @param {?} v2\n * @param {?} v3\n * @param {?} v4\n * @param {?} v5\n * @param {?} v6\n * @param {?} v7\n * @param {?} v8\n * @param {?} v9\n * @return {?}\n */\nfunction checkNoChangesNodeInline(view, nodeDef, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {\n const /** @type {?} */ bindLen = nodeDef.bindings.length;\n if (bindLen > 0)\n checkBindingNoChanges(view, nodeDef, 0, v0);\n if (bindLen > 1)\n checkBindingNoChanges(view, nodeDef, 1, v1);\n if (bindLen > 2)\n checkBindingNoChanges(view, nodeDef, 2, v2);\n if (bindLen > 3)\n checkBindingNoChanges(view, nodeDef, 3, v3);\n if (bindLen > 4)\n checkBindingNoChanges(view, nodeDef, 4, v4);\n if (bindLen > 5)\n checkBindingNoChanges(view, nodeDef, 5, v5);\n if (bindLen > 6)\n checkBindingNoChanges(view, nodeDef, 6, v6);\n if (bindLen > 7)\n checkBindingNoChanges(view, nodeDef, 7, v7);\n if (bindLen > 8)\n checkBindingNoChanges(view, nodeDef, 8, v8);\n if (bindLen > 9)\n checkBindingNoChanges(view, nodeDef, 9, v9);\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?} values\n * @return {?}\n */\nfunction checkNoChangesNodeDynamic(view, nodeDef, values) {\n for (let /** @type {?} */ i = 0; i < values.length; i++) {\n checkBindingNoChanges(view, nodeDef, i, values[i]);\n }\n}\n/**\n * Workaround https://github.com/angular/tsickle/issues/497\n * @suppress {misplacedTypeAnnotation}\n * @param {?} view\n * @param {?} nodeDef\n * @return {?}\n */\nfunction checkNoChangesQuery(view, nodeDef) {\n const /** @type {?} */ queryList = asQueryList(view, nodeDef.nodeIndex);\n if (queryList.dirty) {\n throw expressionChangedAfterItHasBeenCheckedError(Services.createDebugContext(view, nodeDef.nodeIndex), `Query ${(/** @type {?} */ ((nodeDef.query))).id} not dirty`, `Query ${(/** @type {?} */ ((nodeDef.query))).id} dirty`, (view.state & 1 /* BeforeFirstCheck */) !== 0);\n }\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction destroyView(view) {\n if (view.state & 128 /* Destroyed */) {\n return;\n }\n execEmbeddedViewsAction(view, ViewAction.Destroy);\n execComponentViewsAction(view, ViewAction.Destroy);\n callLifecycleHooksChildrenFirst(view, 131072 /* OnDestroy */);\n if (view.disposables) {\n for (let /** @type {?} */ i = 0; i < view.disposables.length; i++) {\n view.disposables[i]();\n }\n }\n detachProjectedView(view);\n if (view.renderer.destroyNode) {\n destroyViewNodes(view);\n }\n if (isComponentView(view)) {\n view.renderer.destroy();\n }\n view.state |= 128 /* Destroyed */;\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction destroyViewNodes(view) {\n const /** @type {?} */ len = view.def.nodes.length;\n for (let /** @type {?} */ i = 0; i < len; i++) {\n const /** @type {?} */ def = view.def.nodes[i];\n if (def.flags & 1 /* TypeElement */) {\n /** @type {?} */ ((view.renderer.destroyNode))(asElementData(view, i).renderElement);\n }\n else if (def.flags & 2 /* TypeText */) {\n /** @type {?} */ ((view.renderer.destroyNode))(asTextData(view, i).renderText);\n }\n else if (def.flags & 67108864 /* TypeContentQuery */ || def.flags & 134217728 /* TypeViewQuery */) {\n asQueryList(view, i).destroy();\n }\n }\n}\n/** @enum {number} */\nconst ViewAction = {\n CreateViewNodes: 0,\n CheckNoChanges: 1,\n CheckNoChangesProjectedViews: 2,\n CheckAndUpdate: 3,\n CheckAndUpdateProjectedViews: 4,\n Destroy: 5,\n};\nViewAction[ViewAction.CreateViewNodes] = \"CreateViewNodes\";\nViewAction[ViewAction.CheckNoChanges] = \"CheckNoChanges\";\nViewAction[ViewAction.CheckNoChangesProjectedViews] = \"CheckNoChangesProjectedViews\";\nViewAction[ViewAction.CheckAndUpdate] = \"CheckAndUpdate\";\nViewAction[ViewAction.CheckAndUpdateProjectedViews] = \"CheckAndUpdateProjectedViews\";\nViewAction[ViewAction.Destroy] = \"Destroy\";\n/**\n * @param {?} view\n * @param {?} action\n * @return {?}\n */\nfunction execComponentViewsAction(view, action) {\n const /** @type {?} */ def = view.def;\n if (!(def.nodeFlags & 33554432 /* ComponentView */)) {\n return;\n }\n for (let /** @type {?} */ i = 0; i < def.nodes.length; i++) {\n const /** @type {?} */ nodeDef = def.nodes[i];\n if (nodeDef.flags & 33554432 /* ComponentView */) {\n // a leaf\n callViewAction(asElementData(view, i).componentView, action);\n }\n else if ((nodeDef.childFlags & 33554432 /* ComponentView */) === 0) {\n // a parent with leafs\n // no child is a component,\n // then skip the children\n i += nodeDef.childCount;\n }\n }\n}\n/**\n * @param {?} view\n * @param {?} action\n * @return {?}\n */\nfunction execEmbeddedViewsAction(view, action) {\n const /** @type {?} */ def = view.def;\n if (!(def.nodeFlags & 16777216 /* EmbeddedViews */)) {\n return;\n }\n for (let /** @type {?} */ i = 0; i < def.nodes.length; i++) {\n const /** @type {?} */ nodeDef = def.nodes[i];\n if (nodeDef.flags & 16777216 /* EmbeddedViews */) {\n // a leaf\n const /** @type {?} */ embeddedViews = /** @type {?} */ ((asElementData(view, i).viewContainer))._embeddedViews;\n for (let /** @type {?} */ k = 0; k < embeddedViews.length; k++) {\n callViewAction(embeddedViews[k], action);\n }\n }\n else if ((nodeDef.childFlags & 16777216 /* EmbeddedViews */) === 0) {\n // a parent with leafs\n // no child is a component,\n // then skip the children\n i += nodeDef.childCount;\n }\n }\n}\n/**\n * @param {?} view\n * @param {?} action\n * @return {?}\n */\nfunction callViewAction(view, action) {\n const /** @type {?} */ viewState = view.state;\n switch (action) {\n case ViewAction.CheckNoChanges:\n if ((viewState & 128 /* Destroyed */) === 0) {\n if ((viewState & 12 /* CatDetectChanges */) === 12 /* CatDetectChanges */) {\n checkNoChangesView(view);\n }\n else if (viewState & 64 /* CheckProjectedViews */) {\n execProjectedViewsAction(view, ViewAction.CheckNoChangesProjectedViews);\n }\n }\n break;\n case ViewAction.CheckNoChangesProjectedViews:\n if ((viewState & 128 /* Destroyed */) === 0) {\n if (viewState & 32 /* CheckProjectedView */) {\n checkNoChangesView(view);\n }\n else if (viewState & 64 /* CheckProjectedViews */) {\n execProjectedViewsAction(view, action);\n }\n }\n break;\n case ViewAction.CheckAndUpdate:\n if ((viewState & 128 /* Destroyed */) === 0) {\n if ((viewState & 12 /* CatDetectChanges */) === 12 /* CatDetectChanges */) {\n checkAndUpdateView(view);\n }\n else if (viewState & 64 /* CheckProjectedViews */) {\n execProjectedViewsAction(view, ViewAction.CheckAndUpdateProjectedViews);\n }\n }\n break;\n case ViewAction.CheckAndUpdateProjectedViews:\n if ((viewState & 128 /* Destroyed */) === 0) {\n if (viewState & 32 /* CheckProjectedView */) {\n checkAndUpdateView(view);\n }\n else if (viewState & 64 /* CheckProjectedViews */) {\n execProjectedViewsAction(view, action);\n }\n }\n break;\n case ViewAction.Destroy:\n // Note: destroyView recurses over all views,\n // so we don't need to special case projected views here.\n destroyView(view);\n break;\n case ViewAction.CreateViewNodes:\n createViewNodes(view);\n break;\n }\n}\n/**\n * @param {?} view\n * @param {?} action\n * @return {?}\n */\nfunction execProjectedViewsAction(view, action) {\n execEmbeddedViewsAction(view, action);\n execComponentViewsAction(view, action);\n}\n/**\n * @param {?} view\n * @param {?} queryFlags\n * @param {?} staticDynamicQueryFlag\n * @param {?} checkType\n * @return {?}\n */\nfunction execQueriesAction(view, queryFlags, staticDynamicQueryFlag, checkType) {\n if (!(view.def.nodeFlags & queryFlags) || !(view.def.nodeFlags & staticDynamicQueryFlag)) {\n return;\n }\n const /** @type {?} */ nodeCount = view.def.nodes.length;\n for (let /** @type {?} */ i = 0; i < nodeCount; i++) {\n const /** @type {?} */ nodeDef = view.def.nodes[i];\n if ((nodeDef.flags & queryFlags) && (nodeDef.flags & staticDynamicQueryFlag)) {\n Services.setCurrentNode(view, nodeDef.nodeIndex);\n switch (checkType) {\n case 0 /* CheckAndUpdate */:\n checkAndUpdateQuery(view, nodeDef);\n break;\n case 1 /* CheckNoChanges */:\n checkNoChangesQuery(view, nodeDef);\n break;\n }\n }\n if (!(nodeDef.childFlags & queryFlags) || !(nodeDef.childFlags & staticDynamicQueryFlag)) {\n // no child has a matching query\n // then skip the children\n i += nodeDef.childCount;\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nlet initialized = false;\n/**\n * @return {?}\n */\nfunction initServicesIfNeeded() {\n if (initialized) {\n return;\n }\n initialized = true;\n const /** @type {?} */ services = isDevMode() ? createDebugServices() : createProdServices();\n Services.setCurrentNode = services.setCurrentNode;\n Services.createRootView = services.createRootView;\n Services.createEmbeddedView = services.createEmbeddedView;\n Services.createComponentView = services.createComponentView;\n Services.createNgModuleRef = services.createNgModuleRef;\n Services.overrideProvider = services.overrideProvider;\n Services.overrideComponentView = services.overrideComponentView;\n Services.clearOverrides = services.clearOverrides;\n Services.checkAndUpdateView = services.checkAndUpdateView;\n Services.checkNoChangesView = services.checkNoChangesView;\n Services.destroyView = services.destroyView;\n Services.resolveDep = resolveDep;\n Services.createDebugContext = services.createDebugContext;\n Services.handleEvent = services.handleEvent;\n Services.updateDirectives = services.updateDirectives;\n Services.updateRenderer = services.updateRenderer;\n Services.dirtyParentQueries = dirtyParentQueries;\n}\n/**\n * @return {?}\n */\nfunction createProdServices() {\n return {\n setCurrentNode: () => { },\n createRootView: createProdRootView,\n createEmbeddedView: createEmbeddedView,\n createComponentView: createComponentView,\n createNgModuleRef: createNgModuleRef,\n overrideProvider: NOOP,\n overrideComponentView: NOOP,\n clearOverrides: NOOP,\n checkAndUpdateView: checkAndUpdateView,\n checkNoChangesView: checkNoChangesView,\n destroyView: destroyView,\n createDebugContext: (view, nodeIndex) => new DebugContext_(view, nodeIndex),\n handleEvent: (view, nodeIndex, eventName, event) => view.def.handleEvent(view, nodeIndex, eventName, event),\n updateDirectives: (view, checkType) => view.def.updateDirectives(checkType === 0 /* CheckAndUpdate */ ? prodCheckAndUpdateNode :\n prodCheckNoChangesNode, view),\n updateRenderer: (view, checkType) => view.def.updateRenderer(checkType === 0 /* CheckAndUpdate */ ? prodCheckAndUpdateNode :\n prodCheckNoChangesNode, view),\n };\n}\n/**\n * @return {?}\n */\nfunction createDebugServices() {\n return {\n setCurrentNode: debugSetCurrentNode,\n createRootView: debugCreateRootView,\n createEmbeddedView: debugCreateEmbeddedView,\n createComponentView: debugCreateComponentView,\n createNgModuleRef: debugCreateNgModuleRef,\n overrideProvider: debugOverrideProvider,\n overrideComponentView: debugOverrideComponentView,\n clearOverrides: debugClearOverrides,\n checkAndUpdateView: debugCheckAndUpdateView,\n checkNoChangesView: debugCheckNoChangesView,\n destroyView: debugDestroyView,\n createDebugContext: (view, nodeIndex) => new DebugContext_(view, nodeIndex),\n handleEvent: debugHandleEvent,\n updateDirectives: debugUpdateDirectives,\n updateRenderer: debugUpdateRenderer,\n };\n}\n/**\n * @param {?} elInjector\n * @param {?} projectableNodes\n * @param {?} rootSelectorOrNode\n * @param {?} def\n * @param {?} ngModule\n * @param {?=} context\n * @return {?}\n */\nfunction createProdRootView(elInjector, projectableNodes, rootSelectorOrNode, def, ngModule, context) {\n const /** @type {?} */ rendererFactory = ngModule.injector.get(RendererFactory2);\n return createRootView(createRootData(elInjector, ngModule, rendererFactory, projectableNodes, rootSelectorOrNode), def, context);\n}\n/**\n * @param {?} elInjector\n * @param {?} projectableNodes\n * @param {?} rootSelectorOrNode\n * @param {?} def\n * @param {?} ngModule\n * @param {?=} context\n * @return {?}\n */\nfunction debugCreateRootView(elInjector, projectableNodes, rootSelectorOrNode, def, ngModule, context) {\n const /** @type {?} */ rendererFactory = ngModule.injector.get(RendererFactory2);\n const /** @type {?} */ root = createRootData(elInjector, ngModule, new DebugRendererFactory2(rendererFactory), projectableNodes, rootSelectorOrNode);\n const /** @type {?} */ defWithOverride = applyProviderOverridesToView(def);\n return callWithDebugContext(DebugAction.create, createRootView, null, [root, defWithOverride, context]);\n}\n/**\n * @param {?} elInjector\n * @param {?} ngModule\n * @param {?} rendererFactory\n * @param {?} projectableNodes\n * @param {?} rootSelectorOrNode\n * @return {?}\n */\nfunction createRootData(elInjector, ngModule, rendererFactory, projectableNodes, rootSelectorOrNode) {\n const /** @type {?} */ sanitizer = ngModule.injector.get(Sanitizer);\n const /** @type {?} */ errorHandler = ngModule.injector.get(ErrorHandler);\n const /** @type {?} */ renderer = rendererFactory.createRenderer(null, null);\n return {\n ngModule,\n injector: elInjector, projectableNodes,\n selectorOrNode: rootSelectorOrNode, sanitizer, rendererFactory, renderer, errorHandler\n };\n}\n/**\n * @param {?} parentView\n * @param {?} anchorDef\n * @param {?} viewDef\n * @param {?=} context\n * @return {?}\n */\nfunction debugCreateEmbeddedView(parentView, anchorDef, viewDef$$1, context) {\n const /** @type {?} */ defWithOverride = applyProviderOverridesToView(viewDef$$1);\n return callWithDebugContext(DebugAction.create, createEmbeddedView, null, [parentView, anchorDef, defWithOverride, context]);\n}\n/**\n * @param {?} parentView\n * @param {?} nodeDef\n * @param {?} viewDef\n * @param {?} hostElement\n * @return {?}\n */\nfunction debugCreateComponentView(parentView, nodeDef, viewDef$$1, hostElement) {\n const /** @type {?} */ overrideComponentView = viewDefOverrides.get(/** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ ((nodeDef.element)).componentProvider)).provider)).token);\n if (overrideComponentView) {\n viewDef$$1 = overrideComponentView;\n }\n else {\n viewDef$$1 = applyProviderOverridesToView(viewDef$$1);\n }\n return callWithDebugContext(DebugAction.create, createComponentView, null, [parentView, nodeDef, viewDef$$1, hostElement]);\n}\n/**\n * @param {?} moduleType\n * @param {?} parentInjector\n * @param {?} bootstrapComponents\n * @param {?} def\n * @return {?}\n */\nfunction debugCreateNgModuleRef(moduleType, parentInjector, bootstrapComponents, def) {\n const /** @type {?} */ defWithOverride = applyProviderOverridesToNgModule(def);\n return createNgModuleRef(moduleType, parentInjector, bootstrapComponents, defWithOverride);\n}\nconst providerOverrides = new Map();\nconst viewDefOverrides = new Map();\n/**\n * @param {?} override\n * @return {?}\n */\nfunction debugOverrideProvider(override) {\n providerOverrides.set(override.token, override);\n}\n/**\n * @param {?} comp\n * @param {?} compFactory\n * @return {?}\n */\nfunction debugOverrideComponentView(comp, compFactory) {\n const /** @type {?} */ hostViewDef = resolveDefinition(getComponentViewDefinitionFactory(compFactory));\n const /** @type {?} */ compViewDef = resolveDefinition(/** @type {?} */ ((/** @type {?} */ ((hostViewDef.nodes[0].element)).componentView)));\n viewDefOverrides.set(comp, compViewDef);\n}\n/**\n * @return {?}\n */\nfunction debugClearOverrides() {\n providerOverrides.clear();\n viewDefOverrides.clear();\n}\n/**\n * @param {?} def\n * @return {?}\n */\nfunction applyProviderOverridesToView(def) {\n if (providerOverrides.size === 0) {\n return def;\n }\n const /** @type {?} */ elementIndicesWithOverwrittenProviders = findElementIndicesWithOverwrittenProviders(def);\n if (elementIndicesWithOverwrittenProviders.length === 0) {\n return def;\n }\n // clone the whole view definition,\n // as it maintains references between the nodes that are hard to update.\n def = /** @type {?} */ ((def.factory))(() => NOOP);\n for (let /** @type {?} */ i = 0; i < elementIndicesWithOverwrittenProviders.length; i++) {\n applyProviderOverridesToElement(def, elementIndicesWithOverwrittenProviders[i]);\n }\n return def;\n /**\n * @param {?} def\n * @return {?}\n */\n function findElementIndicesWithOverwrittenProviders(def) {\n const /** @type {?} */ elIndicesWithOverwrittenProviders = [];\n let /** @type {?} */ lastElementDef = null;\n for (let /** @type {?} */ i = 0; i < def.nodes.length; i++) {\n const /** @type {?} */ nodeDef = def.nodes[i];\n if (nodeDef.flags & 1 /* TypeElement */) {\n lastElementDef = nodeDef;\n }\n if (lastElementDef && nodeDef.flags & 3840 /* CatProviderNoDirective */ &&\n providerOverrides.has(/** @type {?} */ ((nodeDef.provider)).token)) {\n elIndicesWithOverwrittenProviders.push(/** @type {?} */ ((lastElementDef)).nodeIndex);\n lastElementDef = null;\n }\n }\n return elIndicesWithOverwrittenProviders;\n }\n /**\n * @param {?} viewDef\n * @param {?} elIndex\n * @return {?}\n */\n function applyProviderOverridesToElement(viewDef$$1, elIndex) {\n for (let /** @type {?} */ i = elIndex + 1; i < viewDef$$1.nodes.length; i++) {\n const /** @type {?} */ nodeDef = viewDef$$1.nodes[i];\n if (nodeDef.flags & 1 /* TypeElement */) {\n // stop at the next element\n return;\n }\n if (nodeDef.flags & 3840 /* CatProviderNoDirective */) {\n const /** @type {?} */ provider = /** @type {?} */ ((nodeDef.provider));\n const /** @type {?} */ override = providerOverrides.get(provider.token);\n if (override) {\n nodeDef.flags = (nodeDef.flags & ~3840 /* CatProviderNoDirective */) | override.flags;\n provider.deps = splitDepsDsl(override.deps);\n provider.value = override.value;\n }\n }\n }\n }\n}\n/**\n * @param {?} def\n * @return {?}\n */\nfunction applyProviderOverridesToNgModule(def) {\n const { hasOverrides, hasDeprecatedOverrides } = calcHasOverrides(def);\n if (!hasOverrides) {\n return def;\n }\n // clone the whole view definition,\n // as it maintains references between the nodes that are hard to update.\n def = /** @type {?} */ ((def.factory))(() => NOOP);\n applyProviderOverrides(def);\n return def;\n /**\n * @param {?} def\n * @return {?}\n */\n function calcHasOverrides(def) {\n let /** @type {?} */ hasOverrides = false;\n let /** @type {?} */ hasDeprecatedOverrides = false;\n if (providerOverrides.size === 0) {\n return { hasOverrides, hasDeprecatedOverrides };\n }\n def.providers.forEach(node => {\n const /** @type {?} */ override = providerOverrides.get(node.token);\n if ((node.flags & 3840 /* CatProviderNoDirective */) && override) {\n hasOverrides = true;\n hasDeprecatedOverrides = hasDeprecatedOverrides || override.deprecatedBehavior;\n }\n });\n return { hasOverrides, hasDeprecatedOverrides };\n }\n /**\n * @param {?} def\n * @return {?}\n */\n function applyProviderOverrides(def) {\n for (let /** @type {?} */ i = 0; i < def.providers.length; i++) {\n const /** @type {?} */ provider = def.providers[i];\n if (hasDeprecatedOverrides) {\n // We had a bug where me made\n // all providers lazy. Keep this logic behind a flag\n // for migrating existing users.\n provider.flags |= 4096 /* LazyProvider */;\n }\n const /** @type {?} */ override = providerOverrides.get(provider.token);\n if (override) {\n provider.flags = (provider.flags & ~3840 /* CatProviderNoDirective */) | override.flags;\n provider.deps = splitDepsDsl(override.deps);\n provider.value = override.value;\n }\n }\n }\n}\n/**\n * @param {?} view\n * @param {?} checkIndex\n * @param {?} argStyle\n * @param {?=} v0\n * @param {?=} v1\n * @param {?=} v2\n * @param {?=} v3\n * @param {?=} v4\n * @param {?=} v5\n * @param {?=} v6\n * @param {?=} v7\n * @param {?=} v8\n * @param {?=} v9\n * @return {?}\n */\nfunction prodCheckAndUpdateNode(view, checkIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {\n const /** @type {?} */ nodeDef = view.def.nodes[checkIndex];\n checkAndUpdateNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);\n return (nodeDef.flags & 224 /* CatPureExpression */) ?\n asPureExpressionData(view, checkIndex).value :\n undefined;\n}\n/**\n * @param {?} view\n * @param {?} checkIndex\n * @param {?} argStyle\n * @param {?=} v0\n * @param {?=} v1\n * @param {?=} v2\n * @param {?=} v3\n * @param {?=} v4\n * @param {?=} v5\n * @param {?=} v6\n * @param {?=} v7\n * @param {?=} v8\n * @param {?=} v9\n * @return {?}\n */\nfunction prodCheckNoChangesNode(view, checkIndex, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9) {\n const /** @type {?} */ nodeDef = view.def.nodes[checkIndex];\n checkNoChangesNode(view, nodeDef, argStyle, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);\n return (nodeDef.flags & 224 /* CatPureExpression */) ?\n asPureExpressionData(view, checkIndex).value :\n undefined;\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction debugCheckAndUpdateView(view) {\n return callWithDebugContext(DebugAction.detectChanges, checkAndUpdateView, null, [view]);\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction debugCheckNoChangesView(view) {\n return callWithDebugContext(DebugAction.checkNoChanges, checkNoChangesView, null, [view]);\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction debugDestroyView(view) {\n return callWithDebugContext(DebugAction.destroy, destroyView, null, [view]);\n}\n/** @enum {number} */\nconst DebugAction = {\n create: 0,\n detectChanges: 1,\n checkNoChanges: 2,\n destroy: 3,\n handleEvent: 4,\n};\nDebugAction[DebugAction.create] = \"create\";\nDebugAction[DebugAction.detectChanges] = \"detectChanges\";\nDebugAction[DebugAction.checkNoChanges] = \"checkNoChanges\";\nDebugAction[DebugAction.destroy] = \"destroy\";\nDebugAction[DebugAction.handleEvent] = \"handleEvent\";\nlet _currentAction;\nlet _currentView;\nlet _currentNodeIndex;\n/**\n * @param {?} view\n * @param {?} nodeIndex\n * @return {?}\n */\nfunction debugSetCurrentNode(view, nodeIndex) {\n _currentView = view;\n _currentNodeIndex = nodeIndex;\n}\n/**\n * @param {?} view\n * @param {?} nodeIndex\n * @param {?} eventName\n * @param {?} event\n * @return {?}\n */\nfunction debugHandleEvent(view, nodeIndex, eventName, event) {\n debugSetCurrentNode(view, nodeIndex);\n return callWithDebugContext(DebugAction.handleEvent, view.def.handleEvent, null, [view, nodeIndex, eventName, event]);\n}\n/**\n * @param {?} view\n * @param {?} checkType\n * @return {?}\n */\nfunction debugUpdateDirectives(view, checkType) {\n if (view.state & 128 /* Destroyed */) {\n throw viewDestroyedError(DebugAction[_currentAction]);\n }\n debugSetCurrentNode(view, nextDirectiveWithBinding(view, 0));\n return view.def.updateDirectives(debugCheckDirectivesFn, view);\n /**\n * @param {?} view\n * @param {?} nodeIndex\n * @param {?} argStyle\n * @param {...?} values\n * @return {?}\n */\n function debugCheckDirectivesFn(view, nodeIndex, argStyle, ...values) {\n const /** @type {?} */ nodeDef = view.def.nodes[nodeIndex];\n if (checkType === 0 /* CheckAndUpdate */) {\n debugCheckAndUpdateNode(view, nodeDef, argStyle, values);\n }\n else {\n debugCheckNoChangesNode(view, nodeDef, argStyle, values);\n }\n if (nodeDef.flags & 16384 /* TypeDirective */) {\n debugSetCurrentNode(view, nextDirectiveWithBinding(view, nodeIndex));\n }\n return (nodeDef.flags & 224 /* CatPureExpression */) ?\n asPureExpressionData(view, nodeDef.nodeIndex).value :\n undefined;\n }\n}\n/**\n * @param {?} view\n * @param {?} checkType\n * @return {?}\n */\nfunction debugUpdateRenderer(view, checkType) {\n if (view.state & 128 /* Destroyed */) {\n throw viewDestroyedError(DebugAction[_currentAction]);\n }\n debugSetCurrentNode(view, nextRenderNodeWithBinding(view, 0));\n return view.def.updateRenderer(debugCheckRenderNodeFn, view);\n /**\n * @param {?} view\n * @param {?} nodeIndex\n * @param {?} argStyle\n * @param {...?} values\n * @return {?}\n */\n function debugCheckRenderNodeFn(view, nodeIndex, argStyle, ...values) {\n const /** @type {?} */ nodeDef = view.def.nodes[nodeIndex];\n if (checkType === 0 /* CheckAndUpdate */) {\n debugCheckAndUpdateNode(view, nodeDef, argStyle, values);\n }\n else {\n debugCheckNoChangesNode(view, nodeDef, argStyle, values);\n }\n if (nodeDef.flags & 3 /* CatRenderNode */) {\n debugSetCurrentNode(view, nextRenderNodeWithBinding(view, nodeIndex));\n }\n return (nodeDef.flags & 224 /* CatPureExpression */) ?\n asPureExpressionData(view, nodeDef.nodeIndex).value :\n undefined;\n }\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?} argStyle\n * @param {?} givenValues\n * @return {?}\n */\nfunction debugCheckAndUpdateNode(view, nodeDef, argStyle, givenValues) {\n const /** @type {?} */ changed = (/** @type {?} */ (checkAndUpdateNode))(view, nodeDef, argStyle, ...givenValues);\n if (changed) {\n const /** @type {?} */ values = argStyle === 1 /* Dynamic */ ? givenValues[0] : givenValues;\n if (nodeDef.flags & 16384 /* TypeDirective */) {\n const /** @type {?} */ bindingValues = {};\n for (let /** @type {?} */ i = 0; i < nodeDef.bindings.length; i++) {\n const /** @type {?} */ binding = nodeDef.bindings[i];\n const /** @type {?} */ value = values[i];\n if (binding.flags & 8 /* TypeProperty */) {\n bindingValues[normalizeDebugBindingName(/** @type {?} */ ((binding.nonMinifiedName)))] =\n normalizeDebugBindingValue(value);\n }\n }\n const /** @type {?} */ elDef = /** @type {?} */ ((nodeDef.parent));\n const /** @type {?} */ el = asElementData(view, elDef.nodeIndex).renderElement;\n if (!/** @type {?} */ ((elDef.element)).name) {\n // a comment.\n view.renderer.setValue(el, `bindings=${JSON.stringify(bindingValues, null, 2)}`);\n }\n else {\n // a regular element.\n for (let /** @type {?} */ attr in bindingValues) {\n const /** @type {?} */ value = bindingValues[attr];\n if (value != null) {\n view.renderer.setAttribute(el, attr, value);\n }\n else {\n view.renderer.removeAttribute(el, attr);\n }\n }\n }\n }\n }\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?} argStyle\n * @param {?} values\n * @return {?}\n */\nfunction debugCheckNoChangesNode(view, nodeDef, argStyle, values) {\n (/** @type {?} */ (checkNoChangesNode))(view, nodeDef, argStyle, ...values);\n}\n/**\n * @param {?} name\n * @return {?}\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;\n/**\n * @param {?} input\n * @return {?}\n */\nfunction camelCaseToDashCase(input) {\n return input.replace(CAMEL_CASE_REGEXP, (...m) => '-' + m[1].toLowerCase());\n}\n/**\n * @param {?} value\n * @return {?}\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 }\n catch (/** @type {?} */ e) {\n return '[ERROR] Exception while trying to serialize the value';\n }\n}\n/**\n * @param {?} view\n * @param {?} nodeIndex\n * @return {?}\n */\nfunction nextDirectiveWithBinding(view, nodeIndex) {\n for (let /** @type {?} */ i = nodeIndex; i < view.def.nodes.length; i++) {\n const /** @type {?} */ nodeDef = view.def.nodes[i];\n if (nodeDef.flags & 16384 /* TypeDirective */ && nodeDef.bindings && nodeDef.bindings.length) {\n return i;\n }\n }\n return null;\n}\n/**\n * @param {?} view\n * @param {?} nodeIndex\n * @return {?}\n */\nfunction nextRenderNodeWithBinding(view, nodeIndex) {\n for (let /** @type {?} */ i = nodeIndex; i < view.def.nodes.length; i++) {\n const /** @type {?} */ nodeDef = view.def.nodes[i];\n if ((nodeDef.flags & 3 /* CatRenderNode */) && nodeDef.bindings && nodeDef.bindings.length) {\n return i;\n }\n }\n return null;\n}\nclass DebugContext_ {\n /**\n * @param {?} view\n * @param {?} nodeIndex\n */\n constructor(view, nodeIndex) {\n this.view = view;\n this.nodeIndex = nodeIndex;\n if (nodeIndex == null) {\n this.nodeIndex = nodeIndex = 0;\n }\n this.nodeDef = view.def.nodes[nodeIndex];\n let /** @type {?} */ elDef = this.nodeDef;\n let /** @type {?} */ elView = view;\n while (elDef && (elDef.flags & 1 /* TypeElement */) === 0) {\n elDef = /** @type {?} */ ((elDef.parent));\n }\n if (!elDef) {\n while (!elDef && elView) {\n elDef = /** @type {?} */ ((viewParentEl(elView)));\n elView = /** @type {?} */ ((elView.parent));\n }\n }\n this.elDef = elDef;\n this.elView = elView;\n }\n /**\n * @return {?}\n */\n get elOrCompView() {\n // Has to be done lazily as we use the DebugContext also during creation of elements...\n return asElementData(this.elView, this.elDef.nodeIndex).componentView || this.view;\n }\n /**\n * @return {?}\n */\n get injector() { return createInjector(this.elView, this.elDef); }\n /**\n * @return {?}\n */\n get component() { return this.elOrCompView.component; }\n /**\n * @return {?}\n */\n get context() { return this.elOrCompView.context; }\n /**\n * @return {?}\n */\n get providerTokens() {\n const /** @type {?} */ tokens = [];\n if (this.elDef) {\n for (let /** @type {?} */ i = this.elDef.nodeIndex + 1; i <= this.elDef.nodeIndex + this.elDef.childCount; i++) {\n const /** @type {?} */ childDef = this.elView.def.nodes[i];\n if (childDef.flags & 20224 /* CatProvider */) {\n tokens.push(/** @type {?} */ ((childDef.provider)).token);\n }\n i += childDef.childCount;\n }\n }\n return tokens;\n }\n /**\n * @return {?}\n */\n get references() {\n const /** @type {?} */ references = {};\n if (this.elDef) {\n collectReferences(this.elView, this.elDef, references);\n for (let /** @type {?} */ i = this.elDef.nodeIndex + 1; i <= this.elDef.nodeIndex + this.elDef.childCount; i++) {\n const /** @type {?} */ childDef = this.elView.def.nodes[i];\n if (childDef.flags & 20224 /* CatProvider */) {\n collectReferences(this.elView, childDef, references);\n }\n i += childDef.childCount;\n }\n }\n return references;\n }\n /**\n * @return {?}\n */\n get componentRenderElement() {\n const /** @type {?} */ elData = findHostElement(this.elOrCompView);\n return elData ? elData.renderElement : undefined;\n }\n /**\n * @return {?}\n */\n get renderNode() {\n return this.nodeDef.flags & 2 /* TypeText */ ? renderNode(this.view, this.nodeDef) :\n renderNode(this.elView, this.elDef);\n }\n /**\n * @param {?} console\n * @param {...?} values\n * @return {?}\n */\n logError(console, ...values) {\n let /** @type {?} */ logViewDef;\n let /** @type {?} */ logNodeIndex;\n if (this.nodeDef.flags & 2 /* TypeText */) {\n logViewDef = this.view.def;\n logNodeIndex = this.nodeDef.nodeIndex;\n }\n else {\n logViewDef = this.elView.def;\n logNodeIndex = this.elDef.nodeIndex;\n }\n // Note: we only generate a log function for text and element nodes\n // to make the generated code as small as possible.\n const /** @type {?} */ renderNodeIndex = getRenderNodeIndex(logViewDef, logNodeIndex);\n let /** @type {?} */ currRenderNodeIndex = -1;\n let /** @type {?} */ nodeLogger = () => {\n currRenderNodeIndex++;\n if (currRenderNodeIndex === renderNodeIndex) {\n return console.error.bind(console, ...values);\n }\n else {\n return NOOP;\n }\n }; /** @type {?} */\n ((logViewDef.factory))(nodeLogger);\n if (currRenderNodeIndex < renderNodeIndex) {\n console.error('Illegal state: the ViewDefinitionFactory did not call the logger!');\n (/** @type {?} */ (console.error))(...values);\n }\n }\n}\n/**\n * @param {?} viewDef\n * @param {?} nodeIndex\n * @return {?}\n */\nfunction getRenderNodeIndex(viewDef$$1, nodeIndex) {\n let /** @type {?} */ renderNodeIndex = -1;\n for (let /** @type {?} */ i = 0; i <= nodeIndex; i++) {\n const /** @type {?} */ nodeDef = viewDef$$1.nodes[i];\n if (nodeDef.flags & 3 /* CatRenderNode */) {\n renderNodeIndex++;\n }\n }\n return renderNodeIndex;\n}\n/**\n * @param {?} view\n * @return {?}\n */\nfunction findHostElement(view) {\n while (view && !isComponentView(view)) {\n view = /** @type {?} */ ((view.parent));\n }\n if (view.parent) {\n return asElementData(view.parent, /** @type {?} */ ((viewParentEl(view))).nodeIndex);\n }\n return null;\n}\n/**\n * @param {?} view\n * @param {?} nodeDef\n * @param {?} references\n * @return {?}\n */\nfunction collectReferences(view, nodeDef, references) {\n for (let /** @type {?} */ refName in nodeDef.references) {\n references[refName] = getQueryValue(view, nodeDef, nodeDef.references[refName]);\n }\n}\n/**\n * @param {?} action\n * @param {?} fn\n * @param {?} self\n * @param {?} args\n * @return {?}\n */\nfunction callWithDebugContext(action, fn, self, args) {\n const /** @type {?} */ oldAction = _currentAction;\n const /** @type {?} */ oldView = _currentView;\n const /** @type {?} */ oldNodeIndex = _currentNodeIndex;\n try {\n _currentAction = action;\n const /** @type {?} */ result = fn.apply(self, args);\n _currentView = oldView;\n _currentNodeIndex = oldNodeIndex;\n _currentAction = oldAction;\n return result;\n }\n catch (/** @type {?} */ e) {\n if (isViewDebugError(e) || !_currentView) {\n throw e;\n }\n throw viewWrappedDebugError(e, /** @type {?} */ ((getCurrentDebugContext())));\n }\n}\n/**\n * @return {?}\n */\nfunction getCurrentDebugContext() {\n return _currentView ? new DebugContext_(_currentView, _currentNodeIndex) : null;\n}\nclass DebugRendererFactory2 {\n /**\n * @param {?} delegate\n */\n constructor(delegate) {\n this.delegate = delegate;\n }\n /**\n * @param {?} element\n * @param {?} renderData\n * @return {?}\n */\n createRenderer(element, renderData) {\n return new DebugRenderer2(this.delegate.createRenderer(element, renderData));\n }\n /**\n * @return {?}\n */\n begin() {\n if (this.delegate.begin) {\n this.delegate.begin();\n }\n }\n /**\n * @return {?}\n */\n end() {\n if (this.delegate.end) {\n this.delegate.end();\n }\n }\n /**\n * @return {?}\n */\n whenRenderingDone() {\n if (this.delegate.whenRenderingDone) {\n return this.delegate.whenRenderingDone();\n }\n return Promise.resolve(null);\n }\n}\nclass DebugRenderer2 {\n /**\n * @param {?} delegate\n */\n constructor(delegate) {\n this.delegate = delegate;\n this.data = this.delegate.data;\n }\n /**\n * @param {?} node\n * @return {?}\n */\n destroyNode(node) {\n removeDebugNodeFromIndex(/** @type {?} */ ((getDebugNode(node))));\n if (this.delegate.destroyNode) {\n this.delegate.destroyNode(node);\n }\n }\n /**\n * @return {?}\n */\n destroy() { this.delegate.destroy(); }\n /**\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n createElement(name, namespace) {\n const /** @type {?} */ el = this.delegate.createElement(name, namespace);\n const /** @type {?} */ debugCtx = getCurrentDebugContext();\n if (debugCtx) {\n const /** @type {?} */ debugEl = new DebugElement(el, null, debugCtx);\n debugEl.name = name;\n indexDebugNode(debugEl);\n }\n return el;\n }\n /**\n * @param {?} value\n * @return {?}\n */\n createComment(value) {\n const /** @type {?} */ comment = this.delegate.createComment(value);\n const /** @type {?} */ debugCtx = getCurrentDebugContext();\n if (debugCtx) {\n indexDebugNode(new DebugNode(comment, null, debugCtx));\n }\n return comment;\n }\n /**\n * @param {?} value\n * @return {?}\n */\n createText(value) {\n const /** @type {?} */ text = this.delegate.createText(value);\n const /** @type {?} */ debugCtx = getCurrentDebugContext();\n if (debugCtx) {\n indexDebugNode(new DebugNode(text, null, debugCtx));\n }\n return text;\n }\n /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n appendChild(parent, newChild) {\n const /** @type {?} */ debugEl = getDebugNode(parent);\n const /** @type {?} */ debugChildEl = getDebugNode(newChild);\n if (debugEl && debugChildEl && debugEl instanceof DebugElement) {\n debugEl.addChild(debugChildEl);\n }\n this.delegate.appendChild(parent, newChild);\n }\n /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n insertBefore(parent, newChild, refChild) {\n const /** @type {?} */ debugEl = getDebugNode(parent);\n const /** @type {?} */ debugChildEl = getDebugNode(newChild);\n const /** @type {?} */ debugRefEl = /** @type {?} */ ((getDebugNode(refChild)));\n if (debugEl && debugChildEl && debugEl instanceof DebugElement) {\n debugEl.insertBefore(debugRefEl, debugChildEl);\n }\n this.delegate.insertBefore(parent, newChild, refChild);\n }\n /**\n * @param {?} parent\n * @param {?} oldChild\n * @return {?}\n */\n removeChild(parent, oldChild) {\n const /** @type {?} */ debugEl = getDebugNode(parent);\n const /** @type {?} */ debugChildEl = getDebugNode(oldChild);\n if (debugEl && debugChildEl && debugEl instanceof DebugElement) {\n debugEl.removeChild(debugChildEl);\n }\n this.delegate.removeChild(parent, oldChild);\n }\n /**\n * @param {?} selectorOrNode\n * @return {?}\n */\n selectRootElement(selectorOrNode) {\n const /** @type {?} */ el = this.delegate.selectRootElement(selectorOrNode);\n const /** @type {?} */ debugCtx = getCurrentDebugContext();\n if (debugCtx) {\n indexDebugNode(new DebugElement(el, null, debugCtx));\n }\n return el;\n }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @param {?=} namespace\n * @return {?}\n */\n setAttribute(el, name, value, namespace) {\n const /** @type {?} */ debugEl = getDebugNode(el);\n if (debugEl && debugEl instanceof DebugElement) {\n const /** @type {?} */ fullName = namespace ? namespace + ':' + name : name;\n debugEl.attributes[fullName] = value;\n }\n this.delegate.setAttribute(el, name, value, namespace);\n }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n removeAttribute(el, name, namespace) {\n const /** @type {?} */ debugEl = getDebugNode(el);\n if (debugEl && debugEl instanceof DebugElement) {\n const /** @type {?} */ fullName = namespace ? namespace + ':' + name : name;\n debugEl.attributes[fullName] = null;\n }\n this.delegate.removeAttribute(el, name, namespace);\n }\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n addClass(el, name) {\n const /** @type {?} */ debugEl = getDebugNode(el);\n if (debugEl && debugEl instanceof DebugElement) {\n debugEl.classes[name] = true;\n }\n this.delegate.addClass(el, name);\n }\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n removeClass(el, name) {\n const /** @type {?} */ debugEl = getDebugNode(el);\n if (debugEl && debugEl instanceof DebugElement) {\n debugEl.classes[name] = false;\n }\n this.delegate.removeClass(el, name);\n }\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} value\n * @param {?} flags\n * @return {?}\n */\n setStyle(el, style, value, flags) {\n const /** @type {?} */ debugEl = getDebugNode(el);\n if (debugEl && debugEl instanceof DebugElement) {\n debugEl.styles[style] = value;\n }\n this.delegate.setStyle(el, style, value, flags);\n }\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} flags\n * @return {?}\n */\n removeStyle(el, style, flags) {\n const /** @type {?} */ debugEl = getDebugNode(el);\n if (debugEl && debugEl instanceof DebugElement) {\n debugEl.styles[style] = null;\n }\n this.delegate.removeStyle(el, style, flags);\n }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n setProperty(el, name, value) {\n const /** @type {?} */ debugEl = getDebugNode(el);\n if (debugEl && debugEl instanceof DebugElement) {\n debugEl.properties[name] = value;\n }\n this.delegate.setProperty(el, name, value);\n }\n /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n listen(target, eventName, callback) {\n if (typeof target !== 'string') {\n const /** @type {?} */ debugEl = getDebugNode(target);\n if (debugEl) {\n debugEl.listeners.push(new EventListener(eventName, callback));\n }\n }\n return this.delegate.listen(target, eventName, callback);\n }\n /**\n * @param {?} node\n * @return {?}\n */\n parentNode(node) { return this.delegate.parentNode(node); }\n /**\n * @param {?} node\n * @return {?}\n */\n nextSibling(node) { return this.delegate.nextSibling(node); }\n /**\n * @param {?} node\n * @param {?} value\n * @return {?}\n */\n setValue(node, value) { return this.delegate.setValue(node, value); }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} override\n * @return {?}\n */\nfunction overrideProvider(override) {\n initServicesIfNeeded();\n return Services.overrideProvider(override);\n}\n/**\n * @param {?} comp\n * @param {?} componentFactory\n * @return {?}\n */\nfunction overrideComponentView(comp, componentFactory) {\n initServicesIfNeeded();\n return Services.overrideComponentView(comp, componentFactory);\n}\n/**\n * @return {?}\n */\nfunction clearOverrides() {\n initServicesIfNeeded();\n return Services.clearOverrides();\n}\n/**\n * @param {?} ngModuleType\n * @param {?} bootstrapComponents\n * @param {?} defFactory\n * @return {?}\n */\nfunction createNgModuleFactory(ngModuleType, bootstrapComponents, defFactory) {\n return new NgModuleFactory_(ngModuleType, bootstrapComponents, defFactory);\n}\nclass NgModuleFactory_ extends NgModuleFactory {\n /**\n * @param {?} moduleType\n * @param {?} _bootstrapComponents\n * @param {?} _ngModuleDefFactory\n */\n constructor(moduleType, _bootstrapComponents, _ngModuleDefFactory) {\n // Attention: this ctor is called as top level function.\n // Putting any logic in here will destroy closure tree shaking!\n super();\n this.moduleType = moduleType;\n this._bootstrapComponents = _bootstrapComponents;\n this._ngModuleDefFactory = _ngModuleDefFactory;\n }\n /**\n * @param {?} parentInjector\n * @return {?}\n */\n create(parentInjector) {\n initServicesIfNeeded();\n const /** @type {?} */ def = resolveDefinition(this._ngModuleDefFactory);\n return Services.createNgModuleRef(this.moduleType, parentInjector || Injector.NULL, this._bootstrapComponents, def);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n// The functions in this file verify that the assumptions we are making\n// about state in an instruction are correct before implementing any logic.\n// They are meant only to be called in dev mode as sanity checks.\n/**\n * Stringifies values such that strings are wrapped in explicit quotation marks and\n * other types are stringified normally. Used in error messages (e.g. assertThrow)\n * to make it clear that certain values are of the string type when comparing.\n *\n * e.g. `expected \"3\" to be 3` is easier to understand than `expected 3 to be 3`.\n *\n * @param {?} value The value to be stringified\n * @return {?} The stringified value\n */\nfunction stringifyValueForError(value) {\n return typeof value === 'string' ? `\"${value}\"` : '' + value;\n}\n/**\n * @param {?} actual\n * @param {?} name\n * @return {?}\n */\n\n/**\n * @template T\n * @param {?} actual\n * @param {?} expected\n * @param {?} name\n * @param {?=} serializer\n * @return {?}\n */\nfunction assertEqual(actual, expected, name, serializer) {\n (actual != expected) && assertThrow(actual, expected, name, '==', serializer);\n}\n/**\n * @template T\n * @param {?} actual\n * @param {?} expected\n * @param {?} name\n * @return {?}\n */\nfunction assertLessThan(actual, expected, name) {\n (actual < expected) && assertThrow(actual, expected, name, '>');\n}\n/**\n * @template T\n * @param {?} actual\n * @param {?} name\n * @return {?}\n */\nfunction assertNotNull(actual, name) {\n assertNotEqual(actual, null, name);\n}\n/**\n * @template T\n * @param {?} actual\n * @param {?} expected\n * @param {?} name\n * @return {?}\n */\nfunction assertNotEqual(actual, expected, name) {\n (actual == expected) && assertThrow(actual, expected, name, '!=');\n}\n/**\n * Throws an error with a message constructed from the arguments.\n *\n * @template T\n * @param {?} actual The actual value (e.g. 3)\n * @param {?} expected The expected value (e.g. 5)\n * @param {?} name The name of the value being checked (e.g. attrs.length)\n * @param {?} operator The comparison operator (e.g. <, >, ==)\n * @param {?=} serializer Function that maps a value to its display value\n * @return {?}\n */\nfunction assertThrow(actual, expected, name, operator, serializer = stringifyValueForError) {\n throw new Error(`ASSERT: expected ${name} ${operator} ${serializer(expected)} but was ${serializer(actual)}!`);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nif (typeof ngDevMode == 'undefined') {\n if (typeof window != 'undefined')\n (/** @type {?} */ (window)).ngDevMode = true;\n if (typeof self != 'undefined')\n (/** @type {?} */ (self)).ngDevMode = true;\n if (typeof global != 'undefined')\n (/** @type {?} */ (global)).ngDevMode = true;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} node\n * @param {?} type\n * @return {?}\n */\nfunction assertNodeType(node, type) {\n assertNotEqual(node, null, 'node');\n assertEqual(node.flags & 3 /* TYPE_MASK */, type, 'Node.type', typeSerializer);\n}\n/**\n * @param {?} node\n * @param {...?} types\n * @return {?}\n */\n\n/**\n * @param {?} type\n * @return {?}\n */\nfunction typeSerializer(type) {\n if (type == 1 /* Projection */)\n return 'Projection';\n if (type == 0 /* Container */)\n return 'Container';\n if (type == 2 /* View */)\n return 'View';\n if (type == 3 /* Element */)\n return 'Element';\n return '??? ' + type + ' ???';\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Finds the closest DOM node above a given container in the hierarchy.\n *\n * This is necessary to add or remove elements from the DOM when a view\n * is added or removed from the container. e.g. parent.removeChild(...)\n *\n * @param {?} containerNode The container node whose parent must be found\n * @return {?} Closest DOM node above the container\n */\nfunction findNativeParent(containerNode) {\n let /** @type {?} */ container = containerNode;\n while (container) {\n ngDevMode && assertNodeType(container, 0 /* Container */);\n const /** @type {?} */ renderParent = container.data.renderParent;\n if (renderParent !== null) {\n return renderParent.native;\n }\n const /** @type {?} */ viewOrElement = /** @type {?} */ ((container.parent));\n ngDevMode && assertNotNull(viewOrElement, 'container.parent');\n if ((viewOrElement.flags & 3 /* TYPE_MASK */) === 3 /* Element */) {\n // we are an LElement, which means we are past the last LContainer.\n // This means than we have not been projected so just ignore.\n return null;\n }\n ngDevMode && assertNodeType(viewOrElement, 2 /* View */);\n container = (/** @type {?} */ (viewOrElement)).parent;\n }\n return null;\n}\n/**\n * Finds the DOM element before which a certain view should be inserting its\n * child elements.\n *\n * If the view has a next (e.g. for loop), elements should be inserted before\n * the next view's first child element. Otherwise, the container's comment\n * anchor is the marker.\n *\n * @param {?} index The index of the view to check\n * @param {?} state ContainerState of the parent container\n * @param {?} native Comment anchor for container\n * @return {?} The DOM element for which the view should insert elements\n */\nfunction findBeforeNode(index, state, native) {\n const /** @type {?} */ views = state.views;\n // Find the node to insert in front of\n return index + 1 < views.length ?\n (/** @type {?} */ (views[index + 1].child)).native :\n native;\n}\n/**\n * @param {?} container\n * @param {?} rootNode\n * @param {?} insertMode\n * @param {?=} beforeNode\n * @return {?}\n */\nfunction addRemoveViewFromContainer(container, rootNode, insertMode, beforeNode) {\n ngDevMode && assertNodeType(container, 0 /* Container */);\n ngDevMode && assertNodeType(rootNode, 2 /* View */);\n const /** @type {?} */ parent = findNativeParent(container);\n let /** @type {?} */ node = rootNode.child;\n if (parent) {\n while (node) {\n const /** @type {?} */ type = node.flags & 3;\n let /** @type {?} */ nextNode = null;\n const /** @type {?} */ renderer = container.view.renderer;\n const /** @type {?} */ isFnRenderer = (/** @type {?} */ (renderer)).listen;\n if (type === 3 /* Element */) {\n insertMode ? (isFnRenderer ? /** @type {?} */ (((/** @type {?} */ (renderer))\n .insertBefore))(parent, /** @type {?} */ ((node.native)), /** @type {?} */ (beforeNode)) :\n parent.insertBefore(/** @type {?} */ ((node.native)), /** @type {?} */ (beforeNode), true)) :\n (isFnRenderer ? /** @type {?} */ (((/** @type {?} */ (renderer))\n .removeChild))(/** @type {?} */ (parent), /** @type {?} */ ((node.native))) :\n parent.removeChild(/** @type {?} */ ((node.native))));\n nextNode = node.next;\n }\n else if (type === 0 /* Container */) {\n // if we get to a container, it must be a root node of a view because we are only\n // propagating down into child views / containers and not child elements\n const /** @type {?} */ childContainerData = (/** @type {?} */ (node)).data;\n insertMode ? (isFnRenderer ? /** @type {?} */ (((/** @type {?} */ (renderer))\n .appendChild))(/** @type {?} */ (parent), /** @type {?} */ ((node.native))) :\n parent.appendChild(/** @type {?} */ ((node.native)))) :\n (isFnRenderer ? /** @type {?} */ (((/** @type {?} */ (renderer))\n .removeChild))(/** @type {?} */ (parent), /** @type {?} */ ((node.native))) :\n parent.removeChild(/** @type {?} */ ((node.native))));\n nextNode = childContainerData.views.length ? childContainerData.views[0].child : null;\n }\n else if (type === 1 /* Projection */) {\n nextNode = (/** @type {?} */ (node)).data[0];\n }\n else {\n nextNode = (/** @type {?} */ (node)).child;\n }\n if (nextNode === null) {\n while (node && !node.next) {\n node = node.parent;\n if (node === rootNode)\n node = null;\n }\n node = node && node.next;\n }\n else {\n node = nextNode;\n }\n }\n }\n}\n/**\n * Traverses the tree of component 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 * @param {?} rootView\n * @return {?}\n */\nfunction destroyViewTree(rootView) {\n let /** @type {?} */ viewOrContainerState = rootView;\n while (viewOrContainerState) {\n let /** @type {?} */ next = null;\n if (viewOrContainerState.views && viewOrContainerState.views.length) {\n next = viewOrContainerState.views[0].data;\n }\n else if (viewOrContainerState.child) {\n next = viewOrContainerState.child;\n }\n else if (viewOrContainerState.next) {\n cleanUpView(/** @type {?} */ (viewOrContainerState));\n next = viewOrContainerState.next;\n }\n if (next == null) {\n while (viewOrContainerState && !/** @type {?} */ ((viewOrContainerState)).next) {\n cleanUpView(/** @type {?} */ (viewOrContainerState));\n viewOrContainerState = getParentState(viewOrContainerState, rootView);\n }\n cleanUpView(/** @type {?} */ (viewOrContainerState) || rootView);\n next = viewOrContainerState && viewOrContainerState.next;\n }\n viewOrContainerState = 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 {?} container The container into which the view should be inserted\n * @param {?} newView The view to insert\n * @param {?} index The index at which to insert the view\n * @return {?} The inserted view\n */\nfunction insertView(container, newView, index) {\n const /** @type {?} */ state = container.data;\n const /** @type {?} */ views = state.views;\n if (index > 0) {\n // This is a new view, we need to add it to the children.\n setViewNext(views[index - 1], newView);\n }\n if (index < views.length && views[index].data.id !== newView.data.id) {\n // View ID change replace the view.\n setViewNext(newView, views[index]);\n views.splice(index, 0, newView);\n }\n else if (index >= views.length) {\n views.push(newView);\n }\n if (state.nextIndex <= index) {\n state.nextIndex++;\n }\n // If the container's renderParent is null, we know that it is a root node of its own parent view\n // and we should wait until that parent processes its nodes (otherwise, we will insert this view's\n // nodes twice - once now and once when its parent inserts its views).\n if (container.data.renderParent !== null) {\n addRemoveViewFromContainer(container, newView, true, findBeforeNode(index, state, container.native));\n }\n // Notify query that view has been inserted\n container.query && container.query.insertView(container, newView, index);\n return newView;\n}\n/**\n * Removes a view from a container.\n *\n * This method splices the view from the container's array of active views. It also\n * removes the view's elements from the DOM and conducts cleanup (e.g. removing\n * listeners, calling onDestroys).\n *\n * @param {?} container The container from which to remove a view\n * @param {?} removeIndex The index of the view to remove\n * @return {?} The removed view\n */\nfunction removeView(container, removeIndex) {\n const /** @type {?} */ views = container.data.views;\n const /** @type {?} */ viewNode = views[removeIndex];\n if (removeIndex > 0) {\n setViewNext(views[removeIndex - 1], viewNode.next);\n }\n views.splice(removeIndex, 1);\n destroyViewTree(viewNode.data);\n addRemoveViewFromContainer(container, viewNode, false);\n // Notify query that view has been removed\n container.query && container.query.removeView(container, viewNode, removeIndex);\n return viewNode;\n}\n/**\n * Sets a next on the view node, so views in for loops can easily jump from\n * one view to the next to add/remove elements. Also adds the ViewState (view.data)\n * to the view tree for easy traversal when cleaning up the view.\n *\n * @param {?} view The view to set up\n * @param {?} next The view's new next\n * @return {?}\n */\nfunction setViewNext(view, next) {\n view.next = next;\n view.data.next = next ? next.data : null;\n}\n/**\n * Determines which ViewOrContainerState to jump to when traversing back up the\n * tree in destroyViewTree.\n *\n * Normally, the view's parent ViewState should be checked, but in the case of\n * embedded views, the container (which is the view node's parent, but not the\n * ViewState's parent) needs to be checked for a possible next property.\n *\n * @param {?} state The ViewOrContainerState for which we need a parent state\n * @param {?} rootView The rootView, so we don't propagate too far up the view tree\n * @return {?} The correct parent ViewOrContainerState\n */\nfunction getParentState(state, rootView) {\n let /** @type {?} */ node;\n if ((node = /** @type {?} */ (((/** @type {?} */ (state)))).node) &&\n (node.flags & 3 /* TYPE_MASK */) === 2 /* View */) {\n // if it's an embedded view, the state needs to go up to the container, in case the\n // container has a next\n return /** @type {?} */ (((node.parent)).data);\n }\n else {\n // otherwise, use parent view for containers or component views\n return state.parent === rootView ? null : state.parent;\n }\n}\n/**\n * Removes all listeners and call all onDestroys in a given view.\n *\n * @param {?} viewState The ViewState of the view to clean up\n * @return {?}\n */\nfunction cleanUpView(viewState) {\n if (!viewState.cleanup)\n return;\n const /** @type {?} */ cleanup = /** @type {?} */ ((viewState.cleanup));\n for (let /** @type {?} */ i = 0; i < cleanup.length - 1; i += 2) {\n if (typeof cleanup[i] === 'string') {\n /** @type {?} */ ((cleanup))[i + 1].removeEventListener(cleanup[i], cleanup[i + 2], cleanup[i + 3]);\n i += 2;\n }\n else {\n cleanup[i].call(cleanup[i + 1]);\n }\n }\n viewState.cleanup = null;\n}\n/**\n * Appends the provided child element to the provided parent, if appropriate.\n *\n * If the parent is a view, the element will be appended as part of viewEnd(), so\n * the element should not be appended now. Similarly, if the child is a content child\n * of a parent component, the child will be appended to the right position later by\n * the content projection system. Otherwise, append normally.\n *\n * @param {?} parent The parent to which to append the child\n * @param {?} child The child that should be appended\n * @param {?} currentView The current view's ViewState\n * @return {?} Whether or not the child was appended\n */\nfunction appendChild(parent, child, currentView) {\n // Only add native child element to parent element if the parent element is regular Element.\n // If parent is:\n // - Regular element => add child\n // - Component host element =>\n // - Current View, and parent view same => content => don't add -> parent component will\n // re-project if needed.\n // - Current View, and parent view different => view => add Child\n // - View element => View's get added separately.\n if (child !== null && (parent.flags & 3 /* TYPE_MASK */) === 3 /* Element */ &&\n (parent.view !==\n currentView /* Crossing View Boundaries, it is Component, but add Element of View */\n || parent.data === null /* Regular Element. */)) {\n // We only add element if not in View or not projected.\n const /** @type {?} */ renderer = currentView.renderer;\n (/** @type {?} */ (renderer)).listen ? /** @type {?} */ (((/** @type {?} */ (renderer)).appendChild))(/** @type {?} */ (((parent.native))), child) : /** @type {?} */ ((parent.native)).appendChild(child);\n return true;\n }\n return false;\n}\n/**\n * Inserts the provided node before the correct element in the DOM, if appropriate.\n *\n * If the parent is a view, the element will be inserted as part of viewEnd(), so\n * the element should not be inserted now. Similarly, if the child is a content child\n * of a parent component, the child will be inserted to the right position later by\n * the content projection system. Otherwise, insertBefore normally.\n *\n * @param {?} node Node to insert\n * @param {?} currentView The current view's ViewState\n * @return {?}\n */\nfunction insertChild(node, currentView) {\n const /** @type {?} */ parent = /** @type {?} */ ((node.parent));\n // Only add child element to parent element if the parent element is regular Element.\n // If parent is:\n // - Normal element => add child\n // - Component element =>\n // - Current View, and parent view same => content don't add -> parent component will\n // re-project if needed.\n // - Current View, and parent view different => view => add Child\n // - View element => View's get added separately.\n if ((parent.flags & 3 /* TYPE_MASK */) === 3 /* Element */ &&\n (parent.view !==\n currentView /* Crossing View Boundaries, its Component, but add Element of View */\n || parent.data === null /* Regular Element. */)) {\n // We only add element if not in View or not projected.\n let /** @type {?} */ sibling = node.next;\n let /** @type {?} */ nativeSibling = null;\n while (sibling && (nativeSibling = sibling.native) === null) {\n sibling = sibling.next;\n }\n const /** @type {?} */ renderer = currentView.renderer;\n (/** @type {?} */ (renderer)).listen ? /** @type {?} */ (((/** @type {?} */ (renderer))\n .insertBefore))(/** @type {?} */ ((parent.native)), /** @type {?} */ ((node.native)), nativeSibling) : /** @type {?} */ ((parent.native)).insertBefore(/** @type {?} */ ((node.native)), nativeSibling, false);\n }\n}\n/**\n * Appends a projected node to the DOM, or in the case of a projected container,\n * appends the nodes from all of the container's active views to the DOM. Also stores the\n * node in the given projectedNodes array.\n *\n * @param {?} projectedNodes Array to store the projected node\n * @param {?} node The node to process\n * @param {?} currentParent The last parent element to be processed\n * @param {?} currentView The current view's ViewState\n * @return {?}\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A utility function to match an Ivy node static data against a simple CSS selector\n *\n * @param {?} lNodeStaticData\n * @param {?} selector\n * @return {?} true if node matches the selector.\n */\n\n/**\n * @param {?} lNodeStaticData\n * @param {?} selector\n * @return {?}\n */\n\n/**\n * @param {?} lNodeStaticData\n * @param {?} selector\n * @return {?}\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Must use this method for CD (instead of === ) since NaN !== NaN\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction isDifferent(a, b) {\n // NaN is the only value that is not equal to itself so the first\n // test checks if both a and b are not NaN\n return !(a !== a && b !== b) && a !== b;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nfunction stringify$1(value) {\n if (typeof value == 'function')\n return value.name || value;\n if (typeof value == 'string')\n return value;\n if (value == null)\n return '';\n return '' + value;\n}\n/**\n * Function that throws a \"not implemented\" error so it's clear certain\n * behaviors/methods aren't yet ready.\n *\n * @return {?} Not implemented error\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * If a directive is diPublic, bloomAdd sets a property on the instance 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 */\nconst NG_ELEMENT_ID = '__NG_ELEMENT_ID__';\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 = 128;\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 {?} injector The node injector in which the directive should be registered\n * @param {?} type The directive to register\n * @return {?}\n */\n\n/**\n * Creates (or gets an existing) injector for a given element or container.\n *\n * @param {?} node for which an injector should be retrieved / created.\n * @return {?} Node injector\n */\n\n/**\n * Constructs an injection error with the given text and token.\n *\n * @param {?} text The text of the error\n * @param {?} token The token associated with the error\n * @return {?} The error that was created\n */\nfunction createInjectionError(text, token) {\n return new Error(`ElementInjector: ${text} [${stringify$1(token)}]`);\n}\n/**\n * Makes a directive public to the DI system by adding it to an injector's bloom filter.\n *\n * @param {?} di The node injector in which a directive will be added\n * @param {?} def The definition of the directive to be made public\n * @return {?}\n */\n\n/**\n * Searches for an instance of the given directive type up the injector tree and returns\n * that instance if found.\n *\n * Specifically, it gets the bloom filter bit associated with the directive (see bloomHashBit),\n * checks that bit against the bloom filter structure to identify an injector that might have\n * the directive (see bloomFindPossibleInjector), then searches the directives on that injector\n * for a match.\n *\n * If not found, it will propagate up to the next parent injector until the token\n * is found or the top is reached.\n *\n * @template T\n * @param {?} di Node injector where the search should start\n * @param {?} token The directive type to search for\n * @param {?=} flags Injection flags (e.g. CheckParent)\n * @return {?} The instance found\n */\n\n/**\n * Given a directive type, this function returns the bit in an injector's bloom filter\n * that should be used to determine whether or not the directive is present.\n *\n * When the directive was added to the bloom filter, it was given a unique ID that can be\n * retrieved on the class. Since there are only BLOOM_SIZE slots per bloom filter, the directive's\n * ID must be modulo-ed by BLOOM_SIZE to get the correct bloom bit (directives share slots after\n * BLOOM_SIZE is reached).\n *\n * @param {?} type The directive type\n * @return {?} The bloom bit to check for the directive\n */\nfunction bloomHashBit(type) {\n let /** @type {?} */ id = (/** @type {?} */ (type))[NG_ELEMENT_ID];\n return typeof id === 'number' ? id % BLOOM_SIZE : null;\n}\n/**\n * Finds the closest injector that might have a certain directive.\n *\n * Each directive corresponds to a bit in an injector's bloom filter. Given the bloom bit to\n * check and a starting injector, this function traverses up injectors until it finds an\n * injector that contains a 1 for that bit in its bloom filter. A 1 indicates that the\n * injector may have that directive. It only *may* have the directive because directives begin\n * to share bloom filter bits after the BLOOM_SIZE is reached, and it could correspond to a\n * different directive sharing the bit.\n *\n * Note: We can skip checking further injectors up the tree if an injector's cbf structure\n * has a 0 for that bloom bit. Since cbf contains the merged value of all the parent\n * injectors, a 0 in the bloom bit indicates that the parents definitely do not contain\n * the directive and do not need to be checked.\n *\n * @param {?} startInjector\n * @param {?} bloomBit The bit to check in each injector's bloom filter\n * @return {?} An injector that might have the directive\n */\nfunction bloomFindPossibleInjector(startInjector, bloomBit) {\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 /** @type {?} */ mask = 1 << bloomBit;\n // Traverse up the injector tree until we find a potential match or until we know there *isn't* a\n // match.\n let /** @type {?} */ injector = startInjector;\n while (injector) {\n // Our bloom filter size is 128 bits, which is four 32-bit bloom filter buckets:\n // bf0 = [0 - 31], bf1 = [32 - 63], bf2 = [64 - 95], bf3 = [96 - 127]\n // Get the bloom filter value from the appropriate bucket based on the directive's bloomBit.\n let /** @type {?} */ value = bloomBit < 64 ? (bloomBit < 32 ? injector.bf0 : injector.bf1) :\n (bloomBit < 96 ? injector.bf2 : injector.bf3);\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 if ((value & mask) === mask) {\n return injector;\n }\n // If the current injector does not have the directive, check the bloom filters for the ancestor\n // injectors (cbf0 - cbf3). These filters capture *all* ancestor injectors.\n value = bloomBit < 64 ? (bloomBit < 32 ? injector.cbf0 : injector.cbf1) :\n (bloomBit < 96 ? injector.cbf2 : injector.cbf3);\n // If the ancestor bloom filter value has the bit corresponding to the directive, traverse up to\n // find the specific injector. If the ancestor bloom filter does not have the bit, we can abort.\n injector = (value & mask) ? injector.parent : null;\n }\n return null;\n}\n/**\n * Creates an ElementRef for a given node injector and stores it on the injector.\n * Or, if the ElementRef already exists, retrieves the existing ElementRef.\n *\n * @param {?} di The node injector where we should store a created ElementRef\n * @return {?} The ElementRef instance to use\n */\n\n/**\n * Creates a TemplateRef and stores it on the injector. Or, if the TemplateRef already\n * exists, retrieves the existing TemplateRef.\n *\n * @template T\n * @param {?} di The node injector where we should store a created TemplateRef\n * @return {?} The TemplateRef instance to use\n */\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 * @param {?} di\n * @return {?} The ViewContainerRef instance to use\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * A predicate which determines if a given element/directive should be included in the query\n * @record\n * @template T\n */\n\n\n\n/**\n * @param {?} query\n * @return {?}\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/** @enum {number} */\nconst RendererStyleFlags3 = {\n Important: 1,\n DashCase: 2,\n};\nRendererStyleFlags3[RendererStyleFlags3.Important] = \"Important\";\nRendererStyleFlags3[RendererStyleFlags3.DashCase] = \"DashCase\";\n/**\n * Object Oriented style of API needed to create elements and text nodes.\n *\n * This is the native browser API style, e.g. operations are methods on individual objects\n * like HTMLElement. With this style, no additional code is needed as a facade\n * (reducing payload size).\n *\n * @record\n */\n\n/**\n * Procedural style of API needed to create elements and text nodes.\n *\n * In non-native browser environments (e.g. platforms such as web-workers), this is the\n * facade that enables element manipulation. This also facilitates backwards compatibility\n * with Renderer2.\n * @record\n */\n\n/**\n * @record\n */\n\nconst domRendererFactory3 = {\n createRenderer: (hostElement, rendererType) => { return document; }\n};\n/**\n * Subset of API needed for appending elements and text nodes.\n * @record\n */\n\n/**\n * Subset of API needed for writing attributes, properties, and setting up\n * listeners on Element.\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @record\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Directive (D) sets a property on all component instances using this constant as a key and the\n * component's host node (LElement) as the value. This is used in methods like detectChanges to\n * facilitate jumping from an instance to the host node.\n */\nconst NG_HOST_SYMBOL = '__ngHostLNode__';\n/**\n * This property gets set before entering a template.\n *\n * This renderer can be one of two varieties of Renderer3:\n *\n * - ObjectedOrientedRenderer3\n *\n * This is the native browser API style, e.g. operations are methods on individual objects\n * like HTMLElement. With this style, no additional code is needed as a facade (reducing payload\n * size).\n *\n * - ProceduralRenderer3\n *\n * In non-native browser environments (e.g. platforms such as web-workers), this is the facade\n * that enables element manipulation. This also facilitates backwards compatibility with\n * Renderer2.\n */\nlet renderer;\nlet rendererFactory;\n/**\n * Used to set the parent property when nodes are created.\n */\nlet previousOrParentNode;\n/**\n * If `isParent` is:\n * - `true`: then `previousOrParentNode` points to a parent node.\n * - `false`: then `previousOrParentNode` points to previous node (sibling).\n */\nlet isParent;\n/**\n * The current template's static data (shared between all templates of a\n * given type).\n *\n * Each node's static data is stored at the same index that it's stored\n * in the data array. Any nodes that do not have static data store a null\n * value to avoid a sparse array.\n */\nlet ngStaticData;\n/**\n * State of the current view being processed.\n */\nlet currentView;\n// The initialization has to be after the `let`, otherwise `createViewState` can't see `let`.\ncurrentView = createViewState(/** @type {?} */ ((null)), /** @type {?} */ ((null)), []);\nlet currentQuery;\n/**\n * This property gets set before entering a template.\n */\nlet creationMode;\n/**\n * An array of nodes (text, element, container, etc), their bindings, and\n * any local variables that need to be stored between invocations.\n */\nlet data;\n/**\n * Points to the next binding index to read or write to.\n */\nlet bindingIndex;\n/**\n * When a view is destroyed, listeners need to be released\n * and onDestroy callbacks need to be called. This cleanup array\n * stores both listener data (in chunks of 4) and onDestroy data\n * (in chunks of 2), as they'll be processed at the same time.\n *\n * If it's a listener being stored:\n * 1st index is: event name to remove\n * 2nd index is: native element\n * 3rd index is: listener function\n * 4th index is: useCapture boolean\n *\n * If it's an onDestroy function:\n * 1st index is: onDestroy function\n * 2nd index is: context for function\n */\nlet cleanup;\n/**\n * Index in the data array at which view hooks begin to be stored.\n */\nlet viewHookStartIndex;\n/**\n * Swap the current state with a new state.\n *\n * For performance reasons we store the state 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 state for later, and when the view is\n * exited the state has to be restored\n *\n * @param {?} newViewState New state to become active\n * @param {?} host Element to which the View is a child of\n * @return {?} the previous state;\n */\nfunction enterView(newViewState, host) {\n const /** @type {?} */ oldViewState = currentView;\n data = newViewState.data;\n bindingIndex = newViewState.bindingStartIndex || 0;\n ngStaticData = newViewState.ngStaticData;\n creationMode = newViewState.creationMode;\n viewHookStartIndex = newViewState.viewHookStartIndex;\n cleanup = newViewState.cleanup;\n renderer = newViewState.renderer;\n if (host != null) {\n previousOrParentNode = host;\n isParent = true;\n }\n currentView = newViewState;\n return /** @type {?} */ ((oldViewState));\n}\n/**\n * Used in lieu of enterView to make it clear when we are exiting a child view. This makes\n * the direction of traversal (up or down the view tree) a bit clearer.\n * @param {?} newViewState\n * @return {?}\n */\nfunction leaveView(newViewState) {\n executeViewHooks();\n enterView(newViewState, null);\n}\n/**\n * @param {?} viewId\n * @param {?} renderer\n * @param {?} ngStaticData\n * @return {?}\n */\nfunction createViewState(viewId, renderer, ngStaticData) {\n const /** @type {?} */ newView = {\n parent: currentView,\n id: viewId,\n // -1 for component views\n node: /** @type {?} */ ((null)),\n // until we initialize it in createNode.\n data: [],\n ngStaticData: ngStaticData,\n cleanup: null,\n renderer: renderer,\n child: null,\n tail: null,\n next: null,\n bindingStartIndex: null,\n creationMode: true,\n viewHookStartIndex: null\n };\n return newView;\n}\n/**\n * @param {?} index\n * @param {?} type\n * @param {?} native\n * @param {?=} state\n * @return {?}\n */\nfunction createLNode(index, type, native, state) {\n const /** @type {?} */ parent = isParent ? previousOrParentNode :\n previousOrParentNode && /** @type {?} */ (previousOrParentNode.parent);\n let /** @type {?} */ query = (isParent ? currentQuery : previousOrParentNode && previousOrParentNode.query) ||\n parent && parent.query && parent.query.child();\n const /** @type {?} */ isState = state != null;\n const /** @type {?} */ node = {\n flags: type,\n native: /** @type {?} */ (native),\n view: currentView,\n parent: /** @type {?} */ (parent),\n child: null,\n next: null,\n nodeInjector: parent ? parent.nodeInjector : null,\n data: isState ? /** @type {?} */ (state) : null,\n query: query,\n staticData: null\n };\n if ((type & 2 /* ViewOrElement */) === 2 /* ViewOrElement */ && isState) {\n // Bit of a hack to bust through the readonly because there is a circular dep between\n // ViewState and LNode.\n ngDevMode && assertEqual((/** @type {?} */ (state)).node, null, 'viewState.node');\n (/** @type {?} */ ((state))).node = node;\n }\n if (index != null) {\n // We are Element or Container\n ngDevMode && assertEqual(data.length, index, 'data.length not in sequence');\n data[index] = node;\n // Every node adds a value to the static data array to avoid a sparse array\n if (index >= ngStaticData.length) {\n ngStaticData[index] = null;\n }\n else {\n node.staticData = /** @type {?} */ (ngStaticData[index]);\n }\n // Now link ourselves into the tree.\n if (isParent) {\n currentQuery = null;\n if (previousOrParentNode.view === currentView ||\n (previousOrParentNode.flags & 3 /* TYPE_MASK */) === 2 /* View */) {\n // We are in the same view, which means we are adding content node to the parent View.\n ngDevMode && assertEqual(previousOrParentNode.child, null, 'previousNode.child');\n previousOrParentNode.child = node;\n }\n else {\n // We are adding component view, so we don't link parent node child to this node.\n }\n }\n else if (previousOrParentNode) {\n ngDevMode && assertEqual(previousOrParentNode.next, null, 'previousNode.next');\n previousOrParentNode.next = node;\n }\n }\n previousOrParentNode = node;\n isParent = true;\n return node;\n}\n/**\n * Resets the application state.\n * @return {?}\n */\nfunction resetApplicationState() {\n isParent = false;\n previousOrParentNode = /** @type {?} */ ((null));\n}\n/**\n *\n * @template T\n * @param {?} hostNode\n * @param {?} template Template function with the instructions.\n * @param {?} context to pass into the template.\n * @param {?} providedRendererFactory\n * @param {?} host Existing node to render into.\n * @return {?}\n */\n\n/**\n * @template T\n * @param {?} node\n * @param {?} viewState\n * @param {?} componentOrContext\n * @param {?=} template\n * @return {?}\n */\nfunction renderComponentOrTemplate(node, viewState, componentOrContext, template) {\n const /** @type {?} */ oldView = enterView(viewState, node);\n try {\n if (rendererFactory.begin) {\n rendererFactory.begin();\n }\n if (template) {\n ngStaticData = template.ngStaticData || (template.ngStaticData = /** @type {?} */ ([]));\n template(/** @type {?} */ ((componentOrContext)), creationMode);\n }\n else {\n // Element was stored at 0 and directive was stored at 1 in renderComponent\n // so to refresh the component, r() needs to be called with (1, 0)\n (/** @type {?} */ (componentOrContext.constructor)).ngComponentDef.r(1, 0);\n }\n }\n finally {\n if (rendererFactory.end) {\n rendererFactory.end();\n }\n viewState.creationMode = false;\n leaveView(oldView);\n }\n}\n/**\n * @return {?}\n */\n\n/**\n * Makes a directive public to the DI system by adding it to an injector's bloom filter.\n *\n * @param {?} def The definition of the directive to be made public\n * @return {?}\n */\n\n/**\n * Searches for an instance of the given directive type up the injector tree and returns\n * that instance if found.\n *\n * If not found, it will propagate up to the next parent injector until the token\n * is found or the top is reached.\n *\n * Usage example (in factory function):\n *\n * class SomeDirective {\n * constructor(directive: DirectiveA) {}\n *\n * static ngDirectiveDef = defineDirective({\n * type: SomeDirective,\n * factory: () => new SomeDirective(inject(DirectiveA))\n * });\n * }\n *\n * @template T\n * @param {?} token The directive type to search for\n * @param {?=} flags Injection flags (e.g. CheckParent)\n * @return {?} The instance found\n */\n\n/**\n * Creates an ElementRef and stores it on the injector.\n * Or, if the ElementRef already exists, retrieves the existing ElementRef.\n *\n * @return {?} The ElementRef instance to use\n */\n\n/**\n * Creates a TemplateRef and stores it on the injector. Or, if the TemplateRef already\n * exists, retrieves the existing TemplateRef.\n *\n * @template T\n * @return {?} The TemplateRef instance to use\n */\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 * @return {?} The ViewContainerRef instance to use\n */\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 data array\n * @param {?=} nameOrComponentDef Name of the DOM Node or `ComponentDef`.\n * @param {?=} attrs Statically bound set of attributes to be written into the DOM element on creation.\n * @param {?=} localName A name under which a given element is exported.\n *\n * Attributes are passed as an array of strings where elements with an even index hold an attribute\n * name and elements with an odd index hold an attribute value, ex.:\n * ['id', 'warning5', 'class', 'alert']\n * @return {?}\n */\nfunction elementStart(index, nameOrComponentDef, attrs, localName) {\n let /** @type {?} */ node;\n let /** @type {?} */ native;\n if (nameOrComponentDef == null) {\n // native node retrieval - used for exporting elements as tpl local variables (<div #foo>)\n const /** @type {?} */ node = /** @type {?} */ ((data[index]));\n native = node && (/** @type {?} */ (node)).native;\n }\n else {\n ngDevMode && assertEqual(currentView.bindingStartIndex, null, 'bindingStartIndex');\n const /** @type {?} */ isHostElement = typeof nameOrComponentDef !== 'string';\n const /** @type {?} */ name = isHostElement ? (/** @type {?} */ (nameOrComponentDef)).tag : /** @type {?} */ (nameOrComponentDef);\n if (name === null) {\n // TODO: future support for nameless components.\n throw 'for now name is required';\n }\n else {\n native = renderer.createElement(name);\n let /** @type {?} */ componentView = null;\n if (isHostElement) {\n const /** @type {?} */ ngStaticData = getTemplateStatic((/** @type {?} */ (nameOrComponentDef)).template);\n componentView = addToViewTree(createViewState(-1, rendererFactory.createRenderer(native, (/** @type {?} */ (nameOrComponentDef)).rendererType), ngStaticData));\n }\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 node = createLNode(index, 3 /* Element */, native, componentView);\n if (node.staticData == null) {\n ngDevMode && assertDataInRange(index - 1);\n node.staticData = ngStaticData[index] =\n createNodeStatic(name, attrs || null, null, localName || null);\n }\n if (attrs)\n setUpAttributes(native, attrs);\n appendChild(/** @type {?} */ ((node.parent)), native, currentView);\n }\n }\n return native;\n}\n/**\n * Gets static data from a template function or creates a new static\n * data array if it doesn't already exist.\n *\n * @param {?} template The template from which to get static data\n * @return {?} NgStaticData\n */\nfunction getTemplateStatic(template) {\n return template.ngStaticData || (template.ngStaticData = /** @type {?} */ ([]));\n}\n/**\n * @param {?} native\n * @param {?} attrs\n * @return {?}\n */\nfunction setUpAttributes(native, attrs) {\n ngDevMode && assertEqual(attrs.length % 2, 0, 'attrs.length % 2');\n const /** @type {?} */ isProceduralRenderer = (/** @type {?} */ (renderer)).setAttribute;\n for (let /** @type {?} */ i = 0; i < attrs.length; i += 2) {\n isProceduralRenderer ? /** @type {?} */ (((/** @type {?} */ (renderer)).setAttribute))(native, attrs[i], attrs[i | 1]) :\n native.setAttribute(attrs[i], attrs[i | 1]);\n }\n}\n/**\n * @param {?} text\n * @param {?} token\n * @return {?}\n */\nfunction createError(text, token) {\n return new Error(`Renderer: ${text} [${stringify$1(token)}]`);\n}\n/**\n * Locates the host native element, used for bootstrapping existing nodes into rendering pipeline.\n *\n * @param {?} factory\n * @param {?} elementOrSelector Render element or CSS selector to locate the element.\n * @return {?}\n */\nfunction locateHostElement(factory, elementOrSelector) {\n ngDevMode && assertDataInRange(-1);\n rendererFactory = factory;\n const /** @type {?} */ defaultRenderer = factory.createRenderer(null, null);\n const /** @type {?} */ rNode = typeof elementOrSelector === 'string' ?\n ((/** @type {?} */ (defaultRenderer)).selectRootElement ?\n (/** @type {?} */ (defaultRenderer)).selectRootElement(elementOrSelector) : /** @type {?} */ (((/** @type {?} */ (defaultRenderer)).querySelector))(elementOrSelector)) :\n elementOrSelector;\n if (ngDevMode && !rNode) {\n if (typeof elementOrSelector === 'string') {\n throw createError('Host node with selector not found:', elementOrSelector);\n }\n else {\n throw createError('Host node is required:', elementOrSelector);\n }\n }\n return rNode;\n}\n/**\n * Creates the host LNode..\n *\n * @param {?} rNode Render host element.\n * @param {?} def\n * @return {?}\n */\nfunction hostElement(rNode, def) {\n resetApplicationState();\n createLNode(0, 3 /* Element */, rNode, createViewState(-1, renderer, getTemplateStatic(def.template)));\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 {?} listener The function to be called when event emits\n * @param {?=} useCapture Whether or not to use capture in event listener.\n * @return {?}\n */\n\n/**\n * Mark the end of the element.\n * @return {?}\n */\nfunction elementEnd() {\n if (isParent) {\n isParent = false;\n }\n else {\n ngDevMode && assertHasParent();\n previousOrParentNode = /** @type {?} */ ((previousOrParentNode.parent));\n }\n ngDevMode && assertNodeType(previousOrParentNode, 3 /* Element */);\n const /** @type {?} */ query = previousOrParentNode.query;\n query && query.addNode(previousOrParentNode);\n}\n/**\n * Update an attribute on an Element. This is used with a `bind` instruction.\n *\n * @param {?} index The index of the element to update in the data array\n * @param {?} attrName Name of attribute. Because it is going to DOM, this is not subject to\n * renaming as port of minification.\n * @param {?} value Value to write. This value will go through stringification.\n * @return {?}\n */\n\n/**\n * Update a property on an Element.\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 * @template T\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 * @return {?}\n */\nfunction elementProperty(index, propName, value) {\n if (value === NO_CHANGE)\n return;\n const /** @type {?} */ node = /** @type {?} */ (data[index]);\n let /** @type {?} */ staticData = /** @type {?} */ ((node.staticData));\n // if staticData.inputs is undefined, a listener has created output staticData, but inputs haven't\n // yet been checked\n if (staticData.inputs === undefined) {\n // mark inputs as checked\n staticData.inputs = null;\n staticData = generatePropertyAliases(node.flags, staticData, true);\n }\n const /** @type {?} */ inputData = staticData.inputs;\n let /** @type {?} */ dataValue;\n if (inputData && (dataValue = inputData[propName])) {\n setInputsForProperty(dataValue, value);\n }\n else {\n const /** @type {?} */ native = node.native;\n (/** @type {?} */ (renderer)).setProperty ?\n (/** @type {?} */ (renderer)).setProperty(native, propName, value) :\n native.setProperty ? native.setProperty(propName, value) :\n (/** @type {?} */ (native))[propName] = value;\n }\n}\n/**\n * Constructs a LNodeStatic object from the arguments.\n *\n * @param {?} tagName\n * @param {?} attrs\n * @param {?} containerStatic\n * @param {?} localName\n * @return {?} the LNodeStatic object\n */\nfunction createNodeStatic(tagName, attrs, containerStatic, localName) {\n return {\n tagName: tagName,\n attrs: attrs,\n localNames: localName ? [localName, -1] : null,\n initialInputs: undefined,\n inputs: undefined,\n outputs: undefined,\n containerStatic: containerStatic\n };\n}\n/**\n * Given a list of directive indices and minified input names, sets the\n * input properties on the corresponding directives.\n * @param {?} inputs\n * @param {?} value\n * @return {?}\n */\nfunction setInputsForProperty(inputs, value) {\n for (let /** @type {?} */ i = 0; i < inputs.length; i += 2) {\n ngDevMode && assertDataInRange(/** @type {?} */ (inputs[i]));\n data[/** @type {?} */ (inputs[i])][inputs[i | 1]] = value;\n }\n}\n/**\n * This function consolidates all the inputs or outputs defined by directives\n * on this node into one object and stores it in ngStaticData so it can\n * be shared between all templates of this type.\n *\n * @param {?} flags\n * @param {?} data\n * @param {?=} isInputData\n * @return {?}\n */\nfunction generatePropertyAliases(flags, data, isInputData = false) {\n const /** @type {?} */ start = flags >> 12;\n const /** @type {?} */ size = (flags & 4092 /* SIZE_MASK */) >> 2;\n for (let /** @type {?} */ i = start, /** @type {?} */ ii = start + size; i < ii; i++) {\n const /** @type {?} */ directiveDef = /** @type {?} */ (((ngStaticData))[i]);\n const /** @type {?} */ propertyAliasMap = isInputData ? directiveDef.inputs : directiveDef.outputs;\n for (let /** @type {?} */ publicName in propertyAliasMap) {\n if (propertyAliasMap.hasOwnProperty(publicName)) {\n const /** @type {?} */ internalName = propertyAliasMap[publicName];\n const /** @type {?} */ staticDirData = isInputData ? (data.inputs || (data.inputs = {})) :\n (data.outputs || (data.outputs = {}));\n const /** @type {?} */ hasProperty = staticDirData.hasOwnProperty(publicName);\n hasProperty ? staticDirData[publicName].push(i, internalName) :\n (staticDirData[publicName] = [i, internalName]);\n }\n }\n }\n return data;\n}\n/**\n * Add or remove a class in a classList.\n *\n * This instruction is meant to handle the [class.foo]=\"exp\" case\n *\n * @template T\n * @param {?} index The index of the element to update in the data array\n * @param {?} className Name of class to toggle. Because it is going to DOM, this is not subject to\n * renaming as part of minification.\n * @param {?} value A value indicating if a given class should be added or removed.\n * @return {?}\n */\n\n/**\n * Update a given style on an Element.\n *\n * @template T\n * @param {?} index Index of the element to change in the data array\n * @param {?} styleName 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 (null to remove).\n * @param {?=} suffix Suffix to add to style's value (optional).\n * @return {?}\n */\nfunction elementStyle(index, styleName, value, suffix) {\n if (value !== NO_CHANGE) {\n const /** @type {?} */ lElement = /** @type {?} */ (data[index]);\n if (value == null) {\n (/** @type {?} */ (renderer)).removeStyle ?\n (/** @type {?} */ (renderer))\n .removeStyle(lElement.native, styleName, RendererStyleFlags3.DashCase) :\n lElement.native.style.removeProperty(styleName);\n }\n else {\n (/** @type {?} */ (renderer)).setStyle ?\n (/** @type {?} */ (renderer))\n .setStyle(lElement.native, styleName, suffix ? stringify$1(value) + suffix : stringify$1(value), RendererStyleFlags3.DashCase) :\n lElement.native.style.setProperty(styleName, suffix ? stringify$1(value) + suffix : stringify$1(value));\n }\n }\n}\n/**\n * Create static text node\n *\n * @param {?} index Index of the node in the data array.\n * @param {?=} value Value to write. This value will be stringified.\n * If value is not provided than the actual creation of the text node is delayed.\n * @return {?}\n */\nfunction text(index, value) {\n ngDevMode && assertEqual(currentView.bindingStartIndex, null, 'bindingStartIndex');\n const /** @type {?} */ textNode = value != null ?\n ((/** @type {?} */ (renderer)).createText ?\n (/** @type {?} */ (renderer)).createText(stringify$1(value)) : /** @type {?} */ (((/** @type {?} */ (renderer)).createTextNode))(stringify$1(value))) :\n null;\n const /** @type {?} */ node = createLNode(index, 3 /* Element */, textNode);\n // Text nodes are self closing.\n isParent = false;\n appendChild(/** @type {?} */ ((node.parent)), textNode, currentView);\n}\n/**\n * Create text node with binding\n * Bindings should be handled externally with the proper bind(1-8) method\n *\n * @template T\n * @param {?} index Index of the node in the data array.\n * @param {?} value Stringified value to write.\n * @return {?}\n */\nfunction textBinding(index, value) {\n // TODO(misko): I don't think index < nodes.length check is needed here.\n let /** @type {?} */ existingNode = index < data.length && /** @type {?} */ (data[index]);\n if (existingNode && existingNode.native) {\n // If DOM node exists and value changed, update textContent\n value !== NO_CHANGE &&\n ((/** @type {?} */ (renderer)).setValue ?\n (/** @type {?} */ (renderer)).setValue(existingNode.native, stringify$1(value)) :\n existingNode.native.textContent = stringify$1(value));\n }\n else if (existingNode) {\n // Node was created but DOM node creation was delayed. Create and append now.\n existingNode.native =\n ((/** @type {?} */ (renderer)).createText ?\n (/** @type {?} */ (renderer)).createText(stringify$1(value)) : /** @type {?} */ (((/** @type {?} */ (renderer)).createTextNode))(stringify$1(value)));\n insertChild(existingNode, currentView);\n }\n else {\n text(index, value);\n }\n}\n/**\n * @template T\n * @param {?} index\n * @param {?=} directive\n * @param {?=} directiveDef\n * @param {?=} localName\n * @return {?}\n */\nfunction directive(index, directive, directiveDef, localName) {\n let /** @type {?} */ instance;\n if (directive == null) {\n // return existing\n ngDevMode && assertDataInRange(index);\n instance = data[index];\n }\n else {\n ngDevMode && assertEqual(currentView.bindingStartIndex, null, 'bindingStartIndex');\n ngDevMode && assertPreviousIsParent();\n let /** @type {?} */ flags = /** @type {?} */ ((previousOrParentNode)).flags;\n let /** @type {?} */ size = flags & 4092;\n if (size === 0) {\n flags =\n (index << 12 /* INDX_SHIFT */) | 4 /* SIZE_SKIP */ | flags & 3 /* TYPE_MASK */;\n }\n else {\n flags += 4 /* SIZE_SKIP */;\n } /** @type {?} */\n ((previousOrParentNode)).flags = flags;\n ngDevMode && assertDataInRange(index - 1);\n Object.defineProperty(directive, NG_HOST_SYMBOL, { enumerable: false, value: previousOrParentNode });\n data[index] = instance = directive;\n if (index >= ngStaticData.length) {\n ngStaticData[index] = /** @type {?} */ ((directiveDef));\n if (localName) {\n ngDevMode &&\n assertNotNull(previousOrParentNode.staticData, 'previousOrParentNode.staticData');\n const /** @type {?} */ nodeStaticData = /** @type {?} */ ((/** @type {?} */ ((previousOrParentNode)).staticData));\n (nodeStaticData.localNames || (nodeStaticData.localNames = [])).push(localName, index);\n }\n }\n const /** @type {?} */ diPublic = /** @type {?} */ ((directiveDef)).diPublic;\n if (diPublic) {\n diPublic(/** @type {?} */ ((directiveDef)));\n }\n const /** @type {?} */ staticData = /** @type {?} */ ((previousOrParentNode.staticData));\n if (staticData && staticData.attrs) {\n setInputsFromAttrs(instance, /** @type {?} */ ((directiveDef)).inputs, staticData);\n }\n }\n return instance;\n}\n/**\n * Sets initial input properties on directive instances from attribute data\n *\n * @template T\n * @param {?} instance Instance of the directive on which to set the initial inputs\n * @param {?} inputs The list of inputs from the directive def\n * @param {?} staticData The static data for this node\n * @return {?}\n */\nfunction setInputsFromAttrs(instance, inputs, staticData) {\n const /** @type {?} */ directiveIndex = ((previousOrParentNode.flags & 4092 /* SIZE_MASK */) >> 2 /* SIZE_SHIFT */) - 1;\n let /** @type {?} */ initialInputData = /** @type {?} */ (staticData.initialInputs);\n if (initialInputData === undefined || directiveIndex >= initialInputData.length) {\n initialInputData = generateInitialInputs(directiveIndex, inputs, staticData);\n }\n const /** @type {?} */ initialInputs = initialInputData[directiveIndex];\n if (initialInputs) {\n for (let /** @type {?} */ i = 0; i < initialInputs.length; i += 2) {\n (/** @type {?} */ (instance))[initialInputs[i]] = initialInputs[i | 1];\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 {?} directiveIndex Index to store the initial input data\n * @param {?} inputs The list of inputs from the directive def\n * @param {?} staticData The static data on this node\n * @return {?}\n */\nfunction generateInitialInputs(directiveIndex, inputs, staticData) {\n const /** @type {?} */ initialInputData = staticData.initialInputs || (staticData.initialInputs = []);\n initialInputData[directiveIndex] = null;\n const /** @type {?} */ attrs = /** @type {?} */ ((staticData.attrs));\n for (let /** @type {?} */ i = 0; i < attrs.length; i += 2) {\n const /** @type {?} */ attrName = attrs[i];\n const /** @type {?} */ minifiedInputName = inputs[attrName];\n if (minifiedInputName !== undefined) {\n const /** @type {?} */ inputsToStore = initialInputData[directiveIndex] || (initialInputData[directiveIndex] = []);\n inputsToStore.push(minifiedInputName, attrs[i | 1]);\n }\n }\n return initialInputData;\n}\n/**\n * @param {?} lifecycle\n * @param {?=} self\n * @param {?=} method\n * @return {?}\n */\n\n/**\n * Iterates over view hook functions and calls them.\n * @return {?}\n */\nfunction executeViewHooks() {\n if (viewHookStartIndex == null)\n return;\n // Instead of using splice to remove init hooks after their first run (expensive), we\n // shift over the AFTER_CHECKED hooks as we call them and truncate once at the end.\n let /** @type {?} */ checkIndex = /** @type {?} */ (viewHookStartIndex);\n let /** @type {?} */ writeIndex = checkIndex;\n while (checkIndex < data.length) {\n // Call lifecycle hook with its context\n data[checkIndex + 1].call(data[checkIndex + 2]);\n if (data[checkIndex] === 16 /* AFTER_VIEW_CHECKED */) {\n // We know if the writeIndex falls behind that there is an init that needs to\n // be overwritten.\n if (writeIndex < checkIndex) {\n data[writeIndex] = data[checkIndex];\n data[writeIndex + 1] = data[checkIndex + 1];\n data[writeIndex + 2] = data[checkIndex + 2];\n }\n writeIndex += 3;\n }\n checkIndex += 3;\n }\n // Truncate once at the writeIndex\n data.length = writeIndex;\n}\n/**\n * Creates an LContainer.\n *\n * Only `LView`s can go into `LContainer`.\n *\n * @param {?} index The index of the container in the data array\n * @param {?=} template Optional inline template\n * @param {?=} tagName The name of the container element, if applicable\n * @param {?=} attrs The attrs attached to the container, if applicable\n * @param {?=} localName\n * @return {?}\n */\nfunction containerStart(index, template, tagName, attrs, localName) {\n ngDevMode && assertEqual(currentView.bindingStartIndex, null, 'bindingStartIndex');\n // If the direct parent of the container is a view, its views (including its comment)\n // will need to be added through insertView() when its parent view is being inserted.\n // For now, it is marked \"headless\" so we know to append its views later.\n let /** @type {?} */ comment = renderer.createComment(ngDevMode ? 'container' : '');\n let /** @type {?} */ renderParent = null;\n const /** @type {?} */ currentParent = isParent ? previousOrParentNode : /** @type {?} */ ((previousOrParentNode.parent));\n ngDevMode && assertNotEqual(currentParent, null, 'currentParent');\n if (appendChild(currentParent, comment, currentView)) {\n // we are adding to an Element which is either:\n // - Not a component (will not be re-projected, just added)\n // - View of the Component\n renderParent = /** @type {?} */ (currentParent);\n }\n const /** @type {?} */ node = createLNode(index, 0 /* Container */, comment, /** @type {?} */ ({\n views: [],\n nextIndex: 0, renderParent,\n template: template == null ? null : template,\n next: null,\n parent: currentView\n }));\n if (node.staticData == null) {\n node.staticData = ngStaticData[index] =\n createNodeStatic(tagName || null, attrs || null, [], localName || null);\n }\n // Containers are added to the current view tree instead of their embedded views\n // because views can be removed and re-inserted.\n addToViewTree(node.data);\n}\n/**\n * @return {?}\n */\nfunction containerEnd() {\n if (isParent) {\n isParent = false;\n }\n else {\n ngDevMode && assertHasParent();\n previousOrParentNode = /** @type {?} */ ((previousOrParentNode.parent));\n }\n ngDevMode && assertNodeType(previousOrParentNode, 0 /* Container */);\n const /** @type {?} */ query = previousOrParentNode.query;\n query && query.addNode(previousOrParentNode);\n}\n/**\n * Sets a container up to receive views.\n *\n * @param {?} index The index of the container in the data array\n * @return {?}\n */\nfunction containerRefreshStart(index) {\n ngDevMode && assertDataInRange(index);\n previousOrParentNode = /** @type {?} */ (data[index]);\n ngDevMode && assertNodeType(previousOrParentNode, 0 /* Container */);\n isParent = true;\n (/** @type {?} */ (previousOrParentNode)).data.nextIndex = 0;\n}\n/**\n * Marks the end of the LContainer.\n *\n * Marking the end of ViewContainer is the time when to child Views get inserted or removed.\n * @return {?}\n */\nfunction containerRefreshEnd() {\n if (isParent) {\n isParent = false;\n }\n else {\n ngDevMode && assertNodeType(previousOrParentNode, 2 /* View */);\n ngDevMode && assertHasParent();\n previousOrParentNode = /** @type {?} */ ((previousOrParentNode.parent));\n }\n ngDevMode && assertNodeType(previousOrParentNode, 0 /* Container */);\n const /** @type {?} */ container = /** @type {?} */ (previousOrParentNode);\n ngDevMode && assertNodeType(container, 0 /* Container */);\n const /** @type {?} */ nextIndex = container.data.nextIndex;\n while (nextIndex < container.data.views.length) {\n // remove extra view.\n removeView(container, nextIndex);\n }\n}\n/**\n * Creates an LView.\n *\n * @param {?} viewBlockId The ID of this view\n * @return {?} Whether or not this view is in creation mode\n */\nfunction viewStart(viewBlockId) {\n const /** @type {?} */ container = /** @type {?} */ ((isParent ? previousOrParentNode : /** @type {?} */ ((previousOrParentNode.parent))));\n ngDevMode && assertNodeType(container, 0 /* Container */);\n const /** @type {?} */ containerState = container.data;\n const /** @type {?} */ views = containerState.views;\n const /** @type {?} */ existingView = !creationMode && containerState.nextIndex < views.length && views[containerState.nextIndex];\n let /** @type {?} */ viewUpdateMode = existingView && viewBlockId === (/** @type {?} */ (existingView)).data.id;\n if (viewUpdateMode) {\n previousOrParentNode = views[containerState.nextIndex++];\n ngDevMode && assertNodeType(previousOrParentNode, 2 /* View */);\n isParent = true;\n enterView((/** @type {?} */ (existingView)).data, /** @type {?} */ (previousOrParentNode));\n }\n else {\n // When we create a new View, we always reset the state of the instructions.\n const /** @type {?} */ newViewState = createViewState(viewBlockId, renderer, initViewStaticData(viewBlockId, container));\n enterView(newViewState, createLNode(null, 2 /* View */, null, newViewState));\n containerState.nextIndex++;\n }\n return !viewUpdateMode;\n}\n/**\n * Initialize the static data for the active view.\n *\n * Each embedded view needs to set the global ngStaticData variable to the static data for\n * that view. Otherwise, the view's static data for a particular node would overwrite\n * the staticdata for a node in the view above it with the same index (since it's in the\n * same template).\n *\n * @param {?} viewIndex The index of the view's static data in containerStatic\n * @param {?} parent The parent container in which to look for the view's static data\n * @return {?} NgStaticData\n */\nfunction initViewStaticData(viewIndex, parent) {\n ngDevMode && assertNodeType(parent, 0 /* Container */);\n const /** @type {?} */ containerStatic = (/** @type {?} */ (((parent)).staticData)).containerStatic;\n if (viewIndex >= containerStatic.length || containerStatic[viewIndex] == null) {\n containerStatic[viewIndex] = [];\n }\n return containerStatic[viewIndex];\n}\n/**\n * Marks the end of the LView.\n * @return {?}\n */\nfunction viewEnd() {\n isParent = false;\n const /** @type {?} */ viewNode = previousOrParentNode = /** @type {?} */ (currentView.node);\n const /** @type {?} */ container = /** @type {?} */ (previousOrParentNode.parent);\n ngDevMode && assertNodeType(viewNode, 2 /* View */);\n ngDevMode && assertNodeType(container, 0 /* Container */);\n const /** @type {?} */ containerState = container.data;\n const /** @type {?} */ previousView = containerState.nextIndex <= containerState.views.length ? /** @type {?} */ (containerState.views[containerState.nextIndex - 1]) :\n null;\n const /** @type {?} */ viewIdChanged = previousView == null ? true : previousView.data.id !== viewNode.data.id;\n if (viewIdChanged) {\n insertView(container, viewNode, containerState.nextIndex - 1);\n currentView.creationMode = false;\n }\n leaveView(/** @type {?} */ ((/** @type {?} */ ((currentView)).parent)));\n ngDevMode && assertEqual(isParent, false, 'isParent');\n ngDevMode && assertNodeType(previousOrParentNode, 2 /* View */);\n}\n/**\n * Refreshes the component view.\n *\n * In other words, enters the component's view and processes it to update bindings, queries, etc.\n *\n * @param directiveIndex\n * @param elementIndex\n * @param template\n */\nconst componentRefresh = function (directiveIndex, elementIndex, template) {\n ngDevMode && assertDataInRange(elementIndex);\n const /** @type {?} */ element = /** @type {?} */ (((data))[elementIndex]);\n ngDevMode && assertNodeType(element, 3 /* Element */);\n ngDevMode && assertNotEqual(element.data, null, 'isComponent');\n ngDevMode && assertDataInRange(directiveIndex);\n const /** @type {?} */ hostView = /** @type {?} */ ((element.data));\n ngDevMode && assertNotEqual(hostView, null, 'hostView');\n const /** @type {?} */ directive = data[directiveIndex];\n const /** @type {?} */ oldView = enterView(hostView, element);\n try {\n template(directive, creationMode);\n }\n finally {\n hostView.creationMode = false;\n leaveView(oldView);\n }\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 * @param {?=} selectors\n * @return {?}\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\n * @param {?} localIndex - index under which distribution of projected nodes was memorized\n * @param {?=} selectorIndex - 0 means <ng-content> without any selector\n * @return {?}\n */\n\n/**\n * Adds a ViewState or a ContainerState 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 * @template T\n * @param {?} state The ViewState or ContainerState to add to the view tree\n * @return {?} The state passed in\n */\nfunction addToViewTree(state) {\n currentView.tail ? (currentView.tail.next = state) : (currentView.child = state);\n currentView.tail = state;\n return state;\n}\n/**\n * A special value which designates that a value has not changed.\n */\nconst NO_CHANGE = /** @type {?} */ ({});\n/**\n * Create interpolation bindings with variable number of arguments.\n *\n * If any of the arguments change, then the interpolation is concatenated\n * and causes an update.\n *\n * @param {?} values an array of values to diff.\n * @return {?}\n */\n\n/**\n * Create a single value binding without interpolation.\n *\n * @template T\n * @param {?} value Value to diff\n * @return {?}\n */\nfunction bind(value) {\n let /** @type {?} */ different;\n if (different = creationMode) {\n if (typeof currentView.bindingStartIndex !== 'number') {\n bindingIndex = currentView.bindingStartIndex = data.length;\n }\n data[bindingIndex++] = value;\n }\n else {\n if (different = value !== NO_CHANGE && isDifferent(data[bindingIndex], value)) {\n data[bindingIndex] = value;\n }\n bindingIndex++;\n }\n return different ? value : NO_CHANGE;\n}\n/**\n * Create an interpolation bindings with 1 arguments.\n *\n * @param {?} prefix static value used for concatenation only.\n * @param {?} value value checked for change.\n * @param {?} suffix static value used for concatenation only.\n * @return {?}\n */\nfunction bind1(prefix, value, suffix) {\n return bind(value) === NO_CHANGE ? NO_CHANGE : prefix + stringify$1(value) + suffix;\n}\n/**\n * Create an interpolation bindings with 2 arguments.\n *\n * @param {?} prefix\n * @param {?} v0 value checked for change\n * @param {?} i0\n * @param {?} v1 value checked for change\n * @param {?} suffix\n * @return {?}\n */\n\n/**\n * Create an interpolation bindings with 3 arguments.\n *\n * @param {?} prefix\n * @param {?} v0\n * @param {?} i0\n * @param {?} v1\n * @param {?} i1\n * @param {?} v2\n * @param {?} suffix\n * @return {?}\n */\n\n/**\n * Create an interpolation binding with 4 arguments.\n *\n * @param {?} prefix\n * @param {?} v0\n * @param {?} i0\n * @param {?} v1\n * @param {?} i1\n * @param {?} v2\n * @param {?} i2\n * @param {?} v3\n * @param {?} suffix\n * @return {?}\n */\n\n/**\n * Create an interpolation binding with 5 arguments.\n *\n * @param {?} prefix\n * @param {?} v0\n * @param {?} i0\n * @param {?} v1\n * @param {?} i1\n * @param {?} v2\n * @param {?} i2\n * @param {?} v3\n * @param {?} i3\n * @param {?} v4\n * @param {?} suffix\n * @return {?}\n */\n\n/**\n * Create an interpolation binding with 6 arguments.\n *\n * @param {?} prefix\n * @param {?} v0\n * @param {?} i0\n * @param {?} v1\n * @param {?} i1\n * @param {?} v2\n * @param {?} i2\n * @param {?} v3\n * @param {?} i3\n * @param {?} v4\n * @param {?} i4\n * @param {?} v5\n * @param {?} suffix\n * @return {?}\n */\n\n/**\n * Create an interpolation binding with 7 arguments.\n *\n * @param {?} prefix\n * @param {?} v0\n * @param {?} i0\n * @param {?} v1\n * @param {?} i1\n * @param {?} v2\n * @param {?} i2\n * @param {?} v3\n * @param {?} i3\n * @param {?} v4\n * @param {?} i4\n * @param {?} v5\n * @param {?} i5\n * @param {?} v6\n * @param {?} suffix\n * @return {?}\n */\n\n/**\n * Create an interpolation binding with 8 arguments.\n *\n * @param {?} prefix\n * @param {?} v0\n * @param {?} i0\n * @param {?} v1\n * @param {?} i1\n * @param {?} v2\n * @param {?} i2\n * @param {?} v3\n * @param {?} i3\n * @param {?} v4\n * @param {?} i4\n * @param {?} v5\n * @param {?} i5\n * @param {?} v6\n * @param {?} i6\n * @param {?} v7\n * @param {?} suffix\n * @return {?}\n */\n\n/**\n * @template T\n * @param {?} index\n * @param {?=} value\n * @return {?}\n */\n\n/**\n * @template T\n * @param {?} predicate\n * @param {?=} descend\n * @param {?=} read\n * @return {?}\n */\n\n/**\n * @return {?}\n */\nfunction assertPreviousIsParent() {\n assertEqual(isParent, true, 'isParent');\n}\n/**\n * @return {?}\n */\nfunction assertHasParent() {\n assertNotEqual(previousOrParentNode.parent, null, 'isParent');\n}\n/**\n * @param {?} index\n * @param {?=} arr\n * @return {?}\n */\nfunction assertDataInRange(index, arr) {\n if (arr == null)\n arr = data;\n assertLessThan(arr ? arr.length : 0, index, 'data.length');\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Options that control how the component should be bootstrapped.\n * @record\n */\n\n/**\n * Bootstraps a component, then creates and returns a `ComponentRef` for that component.\n *\n * @template T\n * @param {?} componentType Component to bootstrap\n * @param {?} opts\n * @return {?}\n */\n\n// TODO: A hack to not pull in the NullInjector from @angular/core.\n\n/**\n * Bootstraps a Component into an existing host element and returns an instance\n * of the component.\n *\n * @template T\n * @param {?} componentType Component to bootstrap\n * @param {?=} opts\n * @return {?}\n */\nfunction renderComponent(componentType, opts = {}) {\n const /** @type {?} */ rendererFactory = opts.rendererFactory || domRendererFactory3;\n const /** @type {?} */ componentDef = componentType.ngComponentDef;\n let /** @type {?} */ component;\n const /** @type {?} */ hostNode = locateHostElement(rendererFactory, opts.host || componentDef.tag);\n const /** @type {?} */ oldView = enterView(createViewState(-1, rendererFactory.createRenderer(hostNode, componentDef.rendererType), []), /** @type {?} */ ((null)));\n try {\n // Create element node at index 0 in data array\n hostElement(hostNode, componentDef);\n // Create directive instance with n() and store at index 1 in data array (el is 0)\n component = directive(1, componentDef.n(), componentDef);\n }\n finally {\n leaveView(oldView);\n }\n opts.features && opts.features.forEach((feature) => feature(component, componentDef));\n detectChanges(component);\n return component;\n}\n/**\n * @template T\n * @param {?} component\n * @return {?}\n */\nfunction detectChanges(component) {\n ngDevMode && assertNotNull(component, 'component');\n const /** @type {?} */ hostNode = /** @type {?} */ ((/** @type {?} */ (component))[NG_HOST_SYMBOL]);\n if (ngDevMode && !hostNode) {\n createError('Not a directive instance', component);\n }\n ngDevMode && assertNotNull(hostNode.data, 'hostNode.data');\n renderComponentOrTemplate(hostNode, hostNode.view, component);\n isDirty = false;\n}\nlet isDirty = false;\n/**\n * @template T\n * @param {?} component\n * @param {?=} scheduler\n * @return {?}\n */\n\n/**\n * @template T\n * @param {?} component\n * @return {?}\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Create a component definition object.\n *\n *\n * # Example\n * ```\n * class MyDirective {\n * // Generated by Angular Template Compiler\n * // [Symbol] syntax will not be supported by TypeScript until v2.7\n * static [COMPONENT_DEF_SYMBOL] = defineComponent({\n * ...\n * });\n * }\n * ```\n * @template T\n * @param {?} componentDefinition\n * @return {?}\n */\nfunction defineComponent(componentDefinition) {\n const /** @type {?} */ def = /** @type {?} */ ({\n type: componentDefinition.type,\n diPublic: null,\n n: componentDefinition.factory,\n tag: (/** @type {?} */ (componentDefinition)).tag || /** @type {?} */ ((null)),\n template: (/** @type {?} */ (componentDefinition)).template || /** @type {?} */ ((null)),\n r: componentDefinition.refresh ||\n function (d, e) { componentRefresh(d, e, componentDefinition.template); },\n h: componentDefinition.hostBindings || noop$1,\n inputs: invertObject(componentDefinition.inputs),\n outputs: invertObject(componentDefinition.outputs),\n methods: invertObject(componentDefinition.methods),\n rendererType: resolveRendererType2(componentDefinition.rendererType) || null,\n });\n const /** @type {?} */ feature = componentDefinition.features;\n feature && feature.forEach((fn) => fn(def));\n return def;\n}\n/**\n * @template T\n * @param {?} definition\n * @return {?}\n */\n\n/**\n * @template T\n * @param {?} definition\n * @return {?}\n */\n\nconst EMPTY$1 = {};\n/**\n * @return {?}\n */\nfunction noop$1() { }\n/**\n * Swaps the keys and values of an object.\n * @param {?} obj\n * @return {?}\n */\nfunction invertObject(obj) {\n if (obj == null)\n return EMPTY$1;\n const /** @type {?} */ newObj = {};\n for (let /** @type {?} */ minifiedKey in obj) {\n newObj[obj[minifiedKey]] = minifiedKey;\n }\n return newObj;\n}\n/**\n * Create a directive definition object.\n *\n * # Example\n * ```\n * class MyDirective {\n * // Generated by Angular Template Compiler\n * // [Symbol] syntax will not be supported by TypeScript until v2.7\n * static [DIRECTIVE_DEF_SYMBOL] = defineDirective({\n * ...\n * });\n * }\n * ```\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n// clang-format on\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n * @record\n */\n\n/**\n * \\@experimental Animation support is experimental.\n */\n\n/**\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link trigger trigger animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link state state animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link transition transition animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link keyframes keyframes animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link style style animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link animate animate animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link animateChild animateChild animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link useAnimation useAnimation animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link sequence sequence animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link group group animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * Metadata representing the entry of animations. Instances of this interface are provided via the\n * animation DSL when the {\\@link stagger stagger animation function} is called.\n *\n * \\@experimental Animation support is experimental.\n * @record\n */\n\n/**\n * `trigger` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the\n * {\\@link Component#animations component animations metadata page} to gain a better\n * understanding of how animations in Angular are used.\n *\n * `trigger` Creates an animation trigger which will a list of {\\@link state state} and\n * {\\@link transition transition} entries that will be evaluated when the expression\n * bound to the trigger changes.\n *\n * Triggers are registered within the component annotation data under the\n * {\\@link Component#animations animations section}. An animation trigger can be placed on an element\n * within a template by referencing the name of the trigger followed by the expression value that\n * the\n * trigger is bound to (in the form of `[\\@triggerName]=\"expression\"`.\n *\n * Animation trigger bindings strigify values and then match the previous and current values against\n * any linked transitions. If a boolean value is provided into the trigger binding then it will both\n * be represented as `1` or `true` and `0` or `false` for a true and false boolean values\n * respectively.\n *\n * ### Usage\n *\n * `trigger` will create an animation trigger reference based on the provided `name` value. The\n * provided `animation` value is expected to be an array consisting of {\\@link state state} and\n * {\\@link transition transition} declarations.\n *\n * ```typescript\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 will make use of the `myAnimationTrigger` animation\n * trigger 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 * ## Disable Animations\n * A special animation control binding called `\\@.disabled` can be placed on an element which will\n * then disable animations for any inner animation triggers situated within the element as well as\n * any animations on the element itself.\n *\n * When true, the `\\@.disabled` binding will prevent all animations from rendering. The example\n * below shows how to use this feature:\n *\n * ```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 * The `\\@childAnimation` trigger will not animate because `\\@.disabled` prevents it from happening\n * (when true).\n *\n * Note that `\\@.disabled` will only disable all animations (this means any animations running on\n * the same element will also be disabled).\n *\n * ### Disabling Animations Application-wide\n * When an area of the template is set to have animations disabled, **all** inner components will\n * also have their animations disabled as well. This means that all animations for an angular\n * application can be disabled by placing a host binding set on `\\@.disabled` on the topmost Angular\n * 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 * ### What about animations that us `query()` and `animateChild()`?\n * Despite inner animations being disabled, a parent animation can {\\@link query query} for inner\n * elements located in disabled areas of the template and still animate them as it sees fit. This is\n * also the case for when a sub animation is queried by a parent and then later animated using {\\@link\n * animateChild animateChild}.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} name\n * @param {?} definitions\n * @return {?}\n */\nfunction trigger$1(name, definitions) {\n return { type: 7 /* Trigger */, name, definitions, options: {} };\n}\n/**\n * `animate` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `animate` specifies an animation step that will apply the provided `styles` data for a given\n * amount of time based on the provided `timing` expression value. Calls to `animate` are expected\n * to be used within {\\@link sequence an animation sequence}, {\\@link group group}, or {\\@link\n * transition transition}.\n *\n * ### Usage\n *\n * The `animate` function accepts two input parameters: `timing` and `styles`:\n *\n * - `timing` is a string based value that can be a combination of a duration with optional delay\n * and easing values. The format for the expression breaks down to `duration delay easing`\n * (therefore a value such as `1s 100ms ease-out` will be parse itself into `duration=1000,\n * delay=100, easing=ease-out`. If a numeric value is provided then that will be used as the\n * `duration` value in millisecond form.\n * - `styles` is the style input data which can either be a call to {\\@link style style} or {\\@link\n * keyframes keyframes}. If left empty then the styles from the destination state will be collected\n * and used (this is useful when describing an animation step that will complete an animation by\n * {\\@link transition#the-final-animate-call animating to the final state}).\n *\n * ```typescript\n * // various functions for specifying timing data\n * animate(500, style(...))\n * animate(\"1s\", style(...))\n * animate(\"100ms 0.5s\", style(...))\n * animate(\"5s ease\", style(...))\n * animate(\"5s 10ms cubic-bezier(.17,.67,.88,.1)\", style(...))\n *\n * // either style() of keyframes() can be used\n * animate(500, style({ background: \"red\" }))\n * animate(500, keyframes([\n * style({ background: \"blue\" })),\n * style({ background: \"red\" }))\n * ])\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} timings\n * @param {?=} styles\n * @return {?}\n */\nfunction animate$1(timings, styles = null) {\n return { type: 4 /* Animate */, styles, timings };\n}\n/**\n * `group` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `group` specifies a list of animation steps that are all run in parallel. Grouped animations are\n * useful when a series of styles must be animated/closed off at different starting/ending times.\n *\n * The `group` function can either be used within a {\\@link sequence sequence} or a {\\@link transition\n * transition} and it will only continue to the next instruction once all of the inner animation\n * steps have completed.\n *\n * ### Usage\n *\n * The `steps` data that is passed into the `group` animation function can either consist of {\\@link\n * style style} or {\\@link animate animate} function calls. Each call to `style()` or `animate()`\n * within a group will be executed instantly (use {\\@link keyframes keyframes} or a {\\@link\n * animate#usage animate() with a delay value} to offset styles to be applied at a later time).\n *\n * ```typescript\n * group([\n * animate(\"1s\", { background: \"black\" }))\n * animate(\"2s\", { color: \"white\" }))\n * ])\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction group$1(steps, options = null) {\n return { type: 3 /* Group */, steps, options };\n}\n/**\n * `sequence` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `sequence` Specifies a list of animation steps that are run one by one. (`sequence` is used by\n * default when an array is passed as animation data into {\\@link transition transition}.)\n *\n * The `sequence` function can either be used within a {\\@link group group} or a {\\@link transition\n * transition} and it will only continue to the next instruction once each of the inner animation\n * steps have completed.\n *\n * To perform animation styling in parallel with other animation steps then have a look at the\n * {\\@link group group} animation function.\n *\n * ### Usage\n *\n * The `steps` data that is passed into the `sequence` animation function can either consist of\n * {\\@link style style} or {\\@link animate animate} function calls. A call to `style()` will apply the\n * provided styling data immediately while a call to `animate()` will apply its styling data over a\n * given time depending on its timing data.\n *\n * ```typescript\n * sequence([\n * style({ opacity: 0 })),\n * animate(\"1s\", { opacity: 1 }))\n * ])\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction sequence$1(steps, options = null) {\n return { type: 2 /* Sequence */, steps, options };\n}\n/**\n * `style` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `style` declares a key/value object containing CSS properties/styles that can then be used for\n * {\\@link state animation states}, within an {\\@link sequence animation sequence}, or as styling data\n * for both {\\@link animate animate} and {\\@link keyframes keyframes}.\n *\n * ### Usage\n *\n * `style` takes in a key/value string map as data and expects one or more CSS property/value pairs\n * to be defined.\n *\n * ```typescript\n * // string values are used for css properties\n * style({ background: \"red\", color: \"blue\" })\n *\n * // numerical (pixel) values are also supported\n * style({ width: 100, height: 0 })\n * ```\n *\n * #### Auto-styles (using `*`)\n *\n * When an asterix (`*`) character is used as a value then it will be detected from the element\n * being animated and applied as animation data when the animation starts.\n *\n * This feature proves useful for a state depending on layout and/or environment factors; in such\n * cases the styles are calculated just before the animation starts.\n *\n * ```typescript\n * // the steps below will animate from 0 to the\n * // actual height of the element\n * style({ height: 0 }),\n * animate(\"1s\", style({ height: \"*\" }))\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} tokens\n * @return {?}\n */\nfunction style$1(tokens) {\n return { type: 6 /* Style */, styles: tokens, offset: null };\n}\n/**\n * `state` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `state` declares an animation state within the given trigger. When a state is active within a\n * component then its associated styles will persist on the element that the trigger is attached to\n * (even when the animation ends).\n *\n * To animate between states, have a look at the animation {\\@link transition transition} DSL\n * function. To register states to an animation trigger please have a look at the {\\@link trigger\n * trigger} function.\n *\n * #### The `void` state\n *\n * The `void` state value is a reserved word that angular uses to determine when the element is not\n * apart of the application anymore (e.g. when an `ngIf` evaluates to false then the state of the\n * associated element is void).\n *\n * #### The `*` (default) state\n *\n * The `*` state (when styled) is a fallback state that will be used if the state that is being\n * animated is not declared within the trigger.\n *\n * ### Usage\n *\n * `state` will declare an animation state with its associated styles\n * within the given trigger.\n *\n * - `stateNameExpr` can be one or more state names separated by commas.\n * - `styles` refers to the {\\@link style styling data} that will be persisted on the element once\n * the state has been reached.\n *\n * ```typescript\n * // \"void\" is a reserved name for a state and is used to represent\n * // the state in which an element is detached from from the application.\n * state(\"void\", style({ height: 0 }))\n *\n * // user-defined states\n * state(\"closed\", style({ height: 0 }))\n * state(\"open, visible\", style({ height: \"*\" }))\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} name\n * @param {?} styles\n * @param {?=} options\n * @return {?}\n */\nfunction state$1(name, styles, options) {\n return { type: 0 /* State */, name, styles, options };\n}\n/**\n * `keyframes` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `keyframes` specifies a collection of {\\@link style style} entries each optionally characterized\n * by an `offset` value.\n *\n * ### Usage\n *\n * The `keyframes` animation function is designed to be used alongside the {\\@link animate animate}\n * animation function. Instead of applying animations from where they are currently to their\n * destination, keyframes can describe how each style entry is applied and at what point within the\n * animation arc (much like CSS Keyframe Animations do).\n *\n * For each `style()` entry an `offset` value can be set. Doing so allows to specifiy at what\n * percentage of the animate time the styles will be applied.\n *\n * ```typescript\n * // the provided offset values describe when each backgroundColor value is applied.\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 * Alternatively, if there are no `offset` values used within the style entries then the offsets\n * will be calculated automatically.\n *\n * ```typescript\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 * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @return {?}\n */\nfunction keyframes$1(steps) {\n return { type: 5 /* Keyframes */, steps };\n}\n/**\n * `transition` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `transition` declares the {\\@link sequence sequence of animation steps} that will be run when the\n * provided `stateChangeExpr` value is satisfied. The `stateChangeExpr` consists of a `state1 =>\n * state2` which consists of two known states (use an asterix (`*`) to refer to a dynamic starting\n * and/or ending state).\n *\n * A function can also be provided as the `stateChangeExpr` argument for a transition and this\n * function will be executed each time a state change occurs. If the value returned within the\n * function is true then the associated animation will be run.\n *\n * Animation transitions are placed within an {\\@link trigger animation trigger}. For an transition\n * to animate to a state value and persist its styles then one or more {\\@link state animation\n * states} is expected to be defined.\n *\n * ### Usage\n *\n * An animation transition is kicked off the `stateChangeExpr` predicate evaluates to true based on\n * what the previous state is and what the current state has become. In other words, if a transition\n * is defined that matches the old/current state criteria then the associated animation will be\n * triggered.\n *\n * ```typescript\n * // all transition/state changes are defined within an animation trigger\n * trigger(\"myAnimationTrigger\", [\n * // if a state is defined then its styles will be persisted when the\n * // animation has fully completed itself\n * state(\"on\", style({ background: \"green\" })),\n * state(\"off\", style({ background: \"grey\" })),\n *\n * // a transition animation that will be kicked off when the state value\n * // bound to \"myAnimationTrigger\" changes from \"on\" to \"off\"\n * transition(\"on => off\", animate(500)),\n *\n * // it is also possible to do run the same animation for both directions\n * transition(\"on <=> off\", animate(500)),\n *\n * // or to define multiple states pairs separated by commas\n * transition(\"on => off, off => void\", animate(500)),\n *\n * // this is a catch-all state change for when an element is inserted into\n * // the page and the destination state is unknown\n * transition(\"void => *\", [\n * style({ opacity: 0 }),\n * animate(500)\n * ]),\n *\n * // this will capture a state change between any states\n * transition(\"* => *\", animate(\"1s 0s\")),\n *\n * // you can also go full out and include a function\n * transition((fromState, toState) => {\n * // when `true` then it will allow the animation below to be invoked\n * return fromState == \"off\" && toState == \"on\";\n * }, animate(\"1s 0s\"))\n * ])\n * ```\n *\n * The template associated with this component will make use of the `myAnimationTrigger` animation\n * trigger 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 * #### The final `animate` call\n *\n * If the final step within the transition steps is a call to `animate()` that **only** uses a\n * timing value with **no style data** then it will be automatically used as the final animation arc\n * for the element to animate itself to the final state. This involves an automatic mix of\n * adding/removing CSS styles so that the element will be in the exact state it should be for the\n * applied state to be presented correctly.\n *\n * ```\n * // start off by hiding the element, but make sure that it animates properly to whatever state\n * // is currently active for \"myAnimationTrigger\"\n * transition(\"void => *\", [\n * style({ opacity: 0 }),\n * animate(500)\n * ])\n * ```\n *\n * ### Using :enter and :leave\n *\n * Given that enter (insertion) and leave (removal) animations are so common, the `transition`\n * function accepts both `:enter` and `:leave` values which are aliases for the `void => *` and `*\n * => void` state changes.\n *\n * ```\n * transition(\":enter\", [\n * style({ opacity: 0 }),\n * animate(500, style({ opacity: 1 }))\n * ]),\n * transition(\":leave\", [\n * animate(500, style({ opacity: 0 }))\n * ])\n * ```\n *\n * ### Boolean values\n * if a trigger binding value is a boolean value then it can be matched using a transition\n * expression that compares `true` and `false` or `1` and `0`.\n *\n * ```\n * // in the template\n * <div [\\@openClose]=\"open ? true : false\">...</div>\n *\n * // in the component metadata\n * trigger('openClose', [\n * state('true', style({ height: '*' })),\n * state('false', style({ height: '0px' })),\n * transition('false <=> true', animate(500))\n * ])\n * ```\n *\n * ### Using :increment and :decrement\n * In addition to the :enter and :leave transition aliases, the :increment and :decrement aliases\n * can be used to kick off a transition when a numeric value has increased or decreased in value.\n *\n * ```\n * import {group, animate, query, transition, style, trigger} from '\\@angular/animations';\n * import {Component} from '\\@angular/core';\n *\n * \\@Component({\n * selector: 'banner-carousel-component',\n * styles: [`\n * .banner-container {\n * position:relative;\n * height:500px;\n * overflow:hidden;\n * }\n * .banner-container > .banner {\n * position:absolute;\n * left:0;\n * top:0;\n * font-size:200px;\n * line-height:500px;\n * font-weight:bold;\n * text-align:center;\n * width:100%;\n * }\n * `],\n * template: `\n * <button (click)=\"previous()\">Previous</button>\n * <button (click)=\"next()\">Next</button>\n * <hr>\n * <div [\\@bannerAnimation]=\"selectedIndex\" class=\"banner-container\">\n * <div class=\"banner\" *ngFor=\"let banner of banners\"> {{ banner }} </div>\n * </div>\n * `,\n * animations: [\n * trigger('bannerAnimation', [\n * transition(\":increment\", group([\n * query(':enter', [\n * style({ left: '100%' }),\n * animate('0.5s ease-out', style('*'))\n * ]),\n * query(':leave', [\n * animate('0.5s ease-out', style({ left: '-100%' }))\n * ])\n * ])),\n * transition(\":decrement\", group([\n * query(':enter', [\n * style({ left: '-100%' }),\n * animate('0.5s ease-out', style('*'))\n * ]),\n * query(':leave', [\n * animate('0.5s ease-out', style({ left: '100%' }))\n * ])\n * ]))\n * ])\n * ]\n * })\n * class BannerCarouselComponent {\n * allBanners: string[] = ['1', '2', '3', '4'];\n * selectedIndex: number = 0;\n *\n * get banners() {\n * return [this.allBanners[this.selectedIndex]];\n * }\n *\n * previous() {\n * this.selectedIndex = Math.max(this.selectedIndex - 1, 0);\n * }\n *\n * next() {\n * this.selectedIndex = Math.min(this.selectedIndex + 1, this.allBanners.length - 1);\n * }\n * }\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} stateChangeExpr\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction transition$1(stateChangeExpr, steps, options = null) {\n return { type: 1 /* Transition */, expr: stateChangeExpr, animation: steps, options };\n}\n/**\n * `animation` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language.\n *\n * `var myAnimation = animation(...)` is designed to produce a reusable animation that can be later\n * invoked in another animation or sequence. Reusable animations are designed to make use of\n * animation parameters and the produced animation can be used via the `useAnimation` method.\n *\n * ```\n * var fadeAnimation = animation([\n * style({ opacity: '{{ start }}' }),\n * animate('{{ time }}',\n * style({ opacity: '{{ end }}'}))\n * ], { params: { time: '1000ms', start: 0, end: 1 }});\n * ```\n *\n * If parameters are attached to an animation then they act as **default parameter values**. When an\n * animation is invoked via `useAnimation` then parameter values are allowed to be passed in\n * directly. If any of the passed in parameter values are missing then the default values will be\n * used.\n *\n * ```\n * useAnimation(fadeAnimation, {\n * params: {\n * time: '2s',\n * start: 1,\n * end: 0\n * }\n * })\n * ```\n *\n * If one or more parameter values are missing before animated then an error will be thrown.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\n\n/**\n * `animateChild` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. It works by allowing a queried element to execute its own\n * animation within the animation sequence.\n *\n * Each time an animation is triggered in angular, the parent animation\n * will always get priority and any child animations will be blocked. In order\n * for a child animation to run, the parent animation must query each of the elements\n * containing child animations and then allow the animations to run using `animateChild`.\n *\n * The example HTML code below shows both parent and child elements that have animation\n * triggers that will execute at the same time.\n *\n * ```html\n * <!-- parent-child.component.html -->\n * <button (click)=\"exp =! exp\">Toggle</button>\n * <hr>\n *\n * <div [\\@parentAnimation]=\"exp\">\n * <header>Hello</header>\n * <div [\\@childAnimation]=\"exp\">\n * one\n * </div>\n * <div [\\@childAnimation]=\"exp\">\n * two\n * </div>\n * <div [\\@childAnimation]=\"exp\">\n * three\n * </div>\n * </div>\n * ```\n *\n * Now when the `exp` value changes to true, only the `parentAnimation` animation will animate\n * because it has priority. However, using `query` and `animateChild` each of the inner animations\n * can also fire:\n *\n * ```ts\n * // parent-child.component.ts\n * import {trigger, transition, animate, style, query, animateChild} from '\\@angular/animations';\n * \\@Component({\n * selector: 'parent-child-component',\n * animations: [\n * trigger('parentAnimation', [\n * transition('false => true', [\n * query('header', [\n * style({ opacity: 0 }),\n * animate(500, style({ opacity: 1 }))\n * ]),\n * query('\\@childAnimation', [\n * animateChild()\n * ])\n * ])\n * ]),\n * trigger('childAnimation', [\n * transition('false => true', [\n * style({ opacity: 0 }),\n * animate(500, style({ opacity: 1 }))\n * ])\n * ])\n * ]\n * })\n * class ParentChildCmp {\n * exp: boolean = false;\n * }\n * ```\n *\n * In the animation code above, when the `parentAnimation` transition kicks off it first queries to\n * find the header element and fades it in. It then finds each of the sub elements that contain the\n * `\\@childAnimation` trigger and then allows for their animations to fire.\n *\n * This example can be further extended by using stagger:\n *\n * ```ts\n * query('\\@childAnimation', stagger(100, [\n * animateChild()\n * ]))\n * ```\n *\n * Now each of the sub animations start off with respect to the `100ms` staggering step.\n *\n * ## The first frame of child animations\n * When sub animations are executed using `animateChild` the animation engine will always apply the\n * first frame of every sub animation immediately at the start of the animation sequence. This way\n * the parent animation does not need to set any initial styling data on the sub elements before the\n * sub animations kick off.\n *\n * In the example above the first frame of the `childAnimation`'s `false => true` transition\n * consists of a style of `opacity: 0`. This is applied immediately when the `parentAnimation`\n * animation transition sequence starts. Only then when the `\\@childAnimation` is queried and called\n * with `animateChild` will it then animate to its destination of `opacity: 1`.\n *\n * Note that this feature designed to be used alongside {\\@link query query()} and it will only work\n * with animations that are assigned using the Angular animation DSL (this means that CSS keyframes\n * and transitions are not handled by this API).\n *\n * \\@experimental Animation support is experimental.\n * @param {?=} options\n * @return {?}\n */\n\n/**\n * `useAnimation` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. It is used to kick off a reusable animation that is created using {\\@link\n * animation animation()}.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} animation\n * @param {?=} options\n * @return {?}\n */\n\n/**\n * `query` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language.\n *\n * query() is used to find one or more inner elements within the current element that is\n * being animated within the sequence. The provided animation steps are applied\n * to the queried element (by default, an array is provided, then this will be\n * treated as an animation sequence).\n *\n * ### Usage\n *\n * query() is designed to collect mutiple elements and works internally by using\n * `element.querySelectorAll`. An additional options object can be provided which\n * can be used to limit the total amount of items to be collected.\n *\n * ```js\n * query('div', [\n * animate(...),\n * animate(...)\n * ], { limit: 1 })\n * ```\n *\n * query(), by default, will throw an error when zero items are found. If a query\n * has the `optional` flag set to true then this error will be ignored.\n *\n * ```js\n * query('.some-element-that-may-not-be-there', [\n * animate(...),\n * animate(...)\n * ], { optional: true })\n * ```\n *\n * ### Special Selector Values\n *\n * The selector value within a query can collect elements that contain angular-specific\n * characteristics\n * using special pseudo-selectors tokens.\n *\n * These include:\n *\n * - Querying for newly inserted/removed elements using `query(\":enter\")`/`query(\":leave\")`\n * - Querying all currently animating elements using `query(\":animating\")`\n * - Querying elements that contain an animation trigger using `query(\"\\@triggerName\")`\n * - Querying all elements that contain an animation triggers using `query(\"\\@*\")`\n * - Including the current element into the animation sequence using `query(\":self\")`\n *\n *\n * Each of these pseudo-selector tokens can be merged together into a combined query selector\n * string:\n *\n * ```\n * query(':self, .record:enter, .record:leave, \\@subTrigger', [...])\n * ```\n *\n * ### Demo\n *\n * ```\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 * \\@experimental Animation support is experimental.\n * @param {?} selector\n * @param {?} animation\n * @param {?=} options\n * @return {?}\n */\n\n/**\n * `stagger` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. It is designed to be used inside of an animation {\\@link query query()}\n * and works by issuing a timing gap between after each queried item is animated.\n *\n * ### Usage\n *\n * In the example below there is a container element that 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 * ```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 * The component code for this looks as such:\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 * And now for 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 * Now each time the items are added/removed then either the opacity\n * fade-in animation will run or each removed item will be faded out.\n * When either of these animations occur then a stagger effect will be\n * applied after each item's animation is started.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} timings\n * @param {?} animation\n * @return {?}\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n */\nconst AUTO_STYLE = '*';\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @record\n */\n\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @record\n */\n\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @record\n */\n\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @record\n */\n\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @record\n */\n\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @record\n */\n\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @record\n */\n\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @record\n */\n\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @record\n */\n\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @param {?} name\n * @param {?} definitions\n * @return {?}\n */\nfunction trigger$$1(name, definitions) {\n return trigger$1(name, definitions);\n}\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @param {?} timings\n * @param {?=} styles\n * @return {?}\n */\nfunction animate$$1(timings, styles) {\n return animate$1(timings, styles);\n}\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @param {?} steps\n * @return {?}\n */\nfunction group$$1(steps) {\n return group$1(steps);\n}\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @param {?} steps\n * @return {?}\n */\nfunction sequence$$1(steps) {\n return sequence$1(steps);\n}\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @param {?} tokens\n * @return {?}\n */\nfunction style$$1(tokens) {\n return style$1(tokens);\n}\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @param {?} name\n * @param {?} styles\n * @return {?}\n */\nfunction state$$1(name, styles) {\n return state$1(name, styles);\n}\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @param {?} steps\n * @return {?}\n */\nfunction keyframes$$1(steps) {\n return keyframes$1(steps);\n}\n/**\n * @deprecated This symbol has moved. Please Import from \\@angular/animations instead!\n * @param {?} stateChangeExpr\n * @param {?} steps\n * @return {?}\n */\nfunction transition$$1(stateChangeExpr, steps) {\n return transition$1(stateChangeExpr, steps);\n}\n/**\n * @deprecated This has been renamed to `AnimationEvent`. Please import it from \\@angular/animations.\n * @record\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @module\n * @description\n * Entry point from which you should import all public core APIs.\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { createPlatform, assertPlatform, destroyPlatform, getPlatform, PlatformRef, ApplicationRef, enableProdMode, isDevMode, createPlatformFactory, NgProbeToken, APP_ID, PACKAGE_ROOT_URL, PLATFORM_INITIALIZER, PLATFORM_ID, APP_BOOTSTRAP_LISTENER, APP_INITIALIZER, ApplicationInitStatus, DebugElement, DebugNode, asNativeElements, getDebugNode, Testability, TestabilityRegistry, setTestabilityGetter, TRANSLATIONS, TRANSLATIONS_FORMAT, LOCALE_ID, MissingTranslationStrategy, ApplicationModule, wtfCreateScope, wtfLeave, wtfStartTimeRange, wtfEndTimeRange, Type, EventEmitter, ErrorHandler, Sanitizer, SecurityContext, ANALYZE_FOR_ENTRY_COMPONENTS, Attribute, ContentChild, ContentChildren, Query, ViewChild, ViewChildren, Component, Directive, HostBinding, HostListener, Input, Output, Pipe, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, NgModule, ViewEncapsulation, Version, VERSION, forwardRef, resolveForwardRef, Injector, ReflectiveInjector, ResolvedReflectiveFactory, ReflectiveKey, InjectionToken, Inject, Optional, Injectable, Self, SkipSelf, Host, NgZone, RenderComponentType, Renderer, Renderer2, RendererFactory2, RendererStyleFlags2, RootRenderer, COMPILER_OPTIONS, Compiler, CompilerFactory, ModuleWithComponentFactories, ComponentFactory, ComponentRef, ComponentFactoryResolver, ElementRef, NgModuleFactory, NgModuleRef, NgModuleFactoryLoader, getModuleFactory, QueryList, SystemJsNgModuleLoader, SystemJsNgModuleLoaderConfig, TemplateRef, ViewContainerRef, EmbeddedViewRef, ViewRef, ChangeDetectionStrategy, ChangeDetectorRef, DefaultIterableDiffer, IterableDiffers, KeyValueDiffers, SimpleChange, WrappedValue, platformCore, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, APP_ID_RANDOM_PROVIDER as ɵAPP_ID_RANDOM_PROVIDER, devModeEqual as ɵdevModeEqual, isListLikeIterable as ɵisListLikeIterable, ChangeDetectorStatus as ɵChangeDetectorStatus, isDefaultChangeDetectionStrategy as ɵisDefaultChangeDetectionStrategy, Console as ɵConsole, ComponentFactory as ɵComponentFactory, CodegenComponentFactoryResolver as ɵCodegenComponentFactoryResolver, ReflectionCapabilities as ɵReflectionCapabilities, RenderDebugInfo as ɵRenderDebugInfo, _global as ɵglobal, looseIdentical as ɵlooseIdentical, stringify as ɵstringify, makeDecorator as ɵmakeDecorator, isObservable as ɵisObservable, isPromise as ɵisPromise, clearOverrides as ɵclearOverrides, overrideComponentView as ɵoverrideComponentView, overrideProvider as ɵoverrideProvider, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, defineComponent as ɵdefineComponent, detectChanges as ɵdetectChanges, renderComponent as ɵrenderComponent, containerStart as ɵC, directive as ɵD, elementStart as ɵE, text as ɵT, viewStart as ɵV, bind as ɵb, bind1 as ɵb1, containerEnd as ɵc, containerRefreshStart as ɵcR, containerRefreshEnd as ɵcr, elementEnd as ɵe, elementProperty as ɵp, elementStyle as ɵs, textBinding as ɵt, viewEnd as ɵv, registerModuleFactory as ɵregisterModuleFactory, EMPTY_ARRAY as ɵEMPTY_ARRAY, EMPTY_MAP as ɵEMPTY_MAP, anchorDef as ɵand, createComponentFactory as ɵccf, createNgModuleFactory as ɵcmf, createRendererType2 as ɵcrt, directiveDef as ɵdid, elementDef as ɵeld, elementEventFullName as ɵelementEventFullName, getComponentViewDefinitionFactory as ɵgetComponentViewDefinitionFactory, inlineInterpolate as ɵinlineInterpolate, interpolate as ɵinterpolate, moduleDef as ɵmod, moduleProvideDef as ɵmpd, ngContentDef as ɵncd, nodeValue as ɵnov, pipeDef as ɵpid, providerDef as ɵprd, pureArrayDef as ɵpad, pureObjectDef as ɵpod, purePipeDef as ɵppd, queryDef as ɵqud, textDef as ɵted, unwrapValue as ɵunv, viewDef as ɵvid, AUTO_STYLE, trigger$$1 as trigger, animate$$1 as animate, group$$1 as group, sequence$$1 as sequence, style$$1 as style, state$$1 as state, keyframes$$1 as keyframes, transition$$1 as transition, animate$1 as ɵbf, group$1 as ɵbg, keyframes$1 as ɵbk, sequence$1 as ɵbh, state$1 as ɵbj, style$1 as ɵbi, transition$1 as ɵbl, trigger$1 as ɵbe, _iterableDiffersFactory as ɵn, _keyValueDiffersFactory as ɵo, _localeFactory as ɵq, _appIdRandomProviderFactory as ɵi, defaultIterableDiffers as ɵj, defaultKeyValueDiffers as ɵk, DefaultIterableDifferFactory as ɵl, DefaultKeyValueDifferFactory as ɵm, ReflectiveInjector_ as ɵf, ReflectiveDependency as ɵg, resolveReflectiveProviders as ɵh, wtfEnabled as ɵr, createScope$1 as ɵw, detectWTF as ɵu, endTimeRange as ɵz, leave as ɵx, startTimeRange as ɵy, stringify$1 as ɵbc, makeParamDecorator as ɵa, makePropDecorator as ɵd, _def as ɵba, DebugContext as ɵbb };\n//# sourceMappingURL=core.js.map\n","import { Observable } from '../Observable';\nimport { ArrayObservable } from './ArrayObservable';\nimport { isScheduler } from '../util/isScheduler';\nimport { mergeAll } from '../operators/mergeAll';\n/* tslint:enable:max-line-length */\n/**\n * Creates an output Observable which concurrently emits all values from every\n * given input Observable.\n *\n * <span class=\"informal\">Flattens multiple Observables together by blending\n * their values into one Observable.</span>\n *\n * <img src=\"./img/merge.png\" width=\"100%\">\n *\n * `merge` subscribes to each given input Observable (as arguments), and simply\n * forwards (without doing any transformation) all the values from all the input\n * Observables to the output Observable. The output Observable only completes\n * once all input Observables have completed. Any error delivered by an input\n * Observable will be immediately emitted on the output Observable.\n *\n * @example <caption>Merge together two Observables: 1s interval and clicks</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var timer = Rx.Observable.interval(1000);\n * var clicksOrTimer = Rx.Observable.merge(clicks, timer);\n * clicksOrTimer.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // timer will emit ascending values, one every second(1000ms) to console\n * // clicks logs MouseEvents to console everytime the \"document\" is clicked\n * // Since the two streams are merged you see these happening\n * // as they occur.\n *\n * @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>\n * var timer1 = Rx.Observable.interval(1000).take(10);\n * var timer2 = Rx.Observable.interval(2000).take(6);\n * var timer3 = Rx.Observable.interval(500).take(10);\n * var concurrent = 2; // the argument\n * var merged = Rx.Observable.merge(timer1, timer2, timer3, concurrent);\n * merged.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // - First timer1 and timer2 will run concurrently\n * // - timer1 will emit a value every 1000ms for 10 iterations\n * // - timer2 will emit a value every 2000ms for 6 iterations\n * // - after timer1 hits it's max iteration, timer2 will\n * // continue, and timer3 will start to run concurrently with timer2\n * // - when timer2 hits it's max iteration it terminates, and\n * // timer3 will continue to emit a value every 500ms until it is complete\n *\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n *\n * @param {...ObservableInput} observables Input Observables to merge together.\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {Scheduler} [scheduler=null] The IScheduler to use for managing\n * concurrency of input Observables.\n * @return {Observable} an Observable that emits items that are the result of\n * every input Observable.\n * @static true\n * @name merge\n * @owner Observable\n */\nexport function merge(...observables) {\n let concurrent = Number.POSITIVE_INFINITY;\n let scheduler = null;\n let last = observables[observables.length - 1];\n if (isScheduler(last)) {\n scheduler = observables.pop();\n if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {\n concurrent = observables.pop();\n }\n }\n else if (typeof last === 'number') {\n concurrent = observables.pop();\n }\n if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable) {\n return observables[0];\n }\n return mergeAll(concurrent)(new ArrayObservable(observables, scheduler));\n}\n//# sourceMappingURL=merge.js.map","import { share as higherOrder } from '../operators/share';\n/**\n * Returns a new Observable that multicasts (shares) the original Observable. As long as there is at least one\n * Subscriber this Observable will be subscribed and emitting data. When all subscribers have unsubscribed it will\n * unsubscribe from the source Observable. Because the Observable is multicasting it makes the stream `hot`.\n *\n * This behaves similarly to .publish().refCount(), with a behavior difference when the source observable emits complete.\n * .publish().refCount() will not resubscribe to the original source, however .share() will resubscribe to the original source.\n * Observable.of(\"test\").publish().refCount() will not re-emit \"test\" on new subscriptions, Observable.of(\"test\").share() will\n * re-emit \"test\" to new subscriptions.\n *\n * <img src=\"./img/share.png\" width=\"100%\">\n *\n * @return {Observable<T>} An Observable that upon connection causes the source Observable to emit items to its Observers.\n * @method share\n * @owner Observable\n */\nexport function share() {\n return higherOrder()(this);\n}\n;\n//# sourceMappingURL=share.js.map","export const isArrayLike = ((x) => x && typeof x.length === 'number');\n//# sourceMappingURL=isArrayLike.js.map","// CommonJS / Node have global context exposed as \"global\" variable.\n// We don't want to include the whole node.d.ts this this compilation unit so we'll just fake\n// the global \"global\" var for now.\nconst __window = typeof window !== 'undefined' && window;\nconst __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&\n self instanceof WorkerGlobalScope && self;\nconst __global = typeof global !== 'undefined' && global;\nconst _root = __window || __global || __self;\n// Workaround Closure Compiler restriction: The body of a goog.module cannot use throw.\n// This is needed when used with angular/tsickle which inserts a goog.module statement.\n// Wrap in IIFE\n(function () {\n if (!_root) {\n throw new Error('RxJS could not find any global context (window, self, global)');\n }\n})();\nexport { _root as root };\n//# sourceMappingURL=root.js.map","import { Subject } from './Subject';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\n/**\n * @class BehaviorSubject<T>\n */\nexport class BehaviorSubject extends Subject {\n constructor(_value) {\n super();\n this._value = _value;\n }\n get value() {\n return this.getValue();\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n const subscription = super._subscribe(subscriber);\n if (subscription && !subscription.closed) {\n subscriber.next(this._value);\n }\n return subscription;\n }\n getValue() {\n if (this.hasError) {\n throw this.thrownError;\n }\n else if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else {\n return this._value;\n }\n }\n next(value) {\n super.next(this._value = value);\n }\n}\n//# sourceMappingURL=BehaviorSubject.js.map","import { ArrayObservable } from './ArrayObservable';\nexport const of = ArrayObservable.of;\n//# sourceMappingURL=of.js.map","import { concatMap as higherOrderConcatMap } from '../operators/concatMap';\n/* tslint:enable:max-line-length */\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, in a serialized fashion waiting for each one to complete before\n * merging the next.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link concatAll}.</span>\n *\n * <img src=\"./img/concatMap.png\" width=\"100%\">\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each new inner Observable is\n * concatenated with the previous inner Observable.\n *\n * __Warning:__ if source values arrive endlessly and faster than their\n * corresponding inner Observables can complete, it will result in memory issues\n * as inner Observables amass in an unbounded buffer waiting for their turn to\n * be subscribed to.\n *\n * Note: `concatMap` is equivalent to `mergeMap` with concurrency parameter set\n * to `1`.\n *\n * @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.concatMap(ev => Rx.Observable.interval(1000).take(4));\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n *\n * @see {@link concat}\n * @see {@link concatAll}\n * @see {@link concatMapTo}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]\n * A function to produce the value on the output Observable based on the values\n * and the indices of the source (outer) emission and the inner Observable\n * emission. The arguments passed to this function are:\n * - `outerValue`: the value that came from the source\n * - `innerValue`: the value that came from the projected Observable\n * - `outerIndex`: the \"index\" of the value that came from the source\n * - `innerIndex`: the \"index\" of the value from the projected Observable\n * @return {Observable} An Observable that emits the result of applying the\n * projection function (and the optional `resultSelector`) to each item emitted\n * by the source Observable and taking values from each projected inner\n * Observable sequentially.\n * @method concatMap\n * @owner Observable\n */\nexport function concatMap(project, resultSelector) {\n return higherOrderConcatMap(project, resultSelector)(this);\n}\n//# sourceMappingURL=concatMap.js.map","import { mergeMap } from './mergeMap';\n/* tslint:enable:max-line-length */\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, in a serialized fashion waiting for each one to complete before\n * merging the next.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link concatAll}.</span>\n *\n * <img src=\"./img/concatMap.png\" width=\"100%\">\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each new inner Observable is\n * concatenated with the previous inner Observable.\n *\n * __Warning:__ if source values arrive endlessly and faster than their\n * corresponding inner Observables can complete, it will result in memory issues\n * as inner Observables amass in an unbounded buffer waiting for their turn to\n * be subscribed to.\n *\n * Note: `concatMap` is equivalent to `mergeMap` with concurrency parameter set\n * to `1`.\n *\n * @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.concatMap(ev => Rx.Observable.interval(1000).take(4));\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n *\n * @see {@link concat}\n * @see {@link concatAll}\n * @see {@link concatMapTo}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]\n * A function to produce the value on the output Observable based on the values\n * and the indices of the source (outer) emission and the inner Observable\n * emission. The arguments passed to this function are:\n * - `outerValue`: the value that came from the source\n * - `innerValue`: the value that came from the projected Observable\n * - `outerIndex`: the \"index\" of the value that came from the source\n * - `innerIndex`: the \"index\" of the value from the projected Observable\n * @return {Observable} An Observable that emits the result of applying the\n * projection function (and the optional `resultSelector`) to each item emitted\n * by the source Observable and taking values from each projected inner\n * Observable sequentially.\n * @method concatMap\n * @owner Observable\n */\nexport function concatMap(project, resultSelector) {\n return mergeMap(project, resultSelector, 1);\n}\n//# sourceMappingURL=concatMap.js.map","import { mergeMap as higherOrderMergeMap } from '../operators/mergeMap';\n/* tslint:enable:max-line-length */\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link mergeAll}.</span>\n *\n * <img src=\"./img/mergeMap.png\" width=\"100%\">\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger.\n *\n * @example <caption>Map and flatten each letter to an Observable ticking every 1 second</caption>\n * var letters = Rx.Observable.of('a', 'b', 'c');\n * var result = letters.mergeMap(x =>\n * Rx.Observable.interval(1000).map(i => x+i)\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // a0\n * // b0\n * // c0\n * // a1\n * // b1\n * // c1\n * // continues to list a,b,c with respective ascending integers\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]\n * A function to produce the value on the output Observable based on the values\n * and the indices of the source (outer) emission and the inner Observable\n * emission. The arguments passed to this function are:\n * - `outerValue`: the value that came from the source\n * - `innerValue`: the value that came from the projected Observable\n * - `outerIndex`: the \"index\" of the value that came from the source\n * - `innerIndex`: the \"index\" of the value from the projected Observable\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return {Observable} An Observable that emits the result of applying the\n * projection function (and the optional `resultSelector`) to each item emitted\n * by the source Observable and merging the results of the Observables obtained\n * from this transformation.\n * @method mergeMap\n * @owner Observable\n */\nexport function mergeMap(project, resultSelector, concurrent = Number.POSITIVE_INFINITY) {\n return higherOrderMergeMap(project, resultSelector, concurrent)(this);\n}\n//# sourceMappingURL=mergeMap.js.map","import { root } from '../util/root';\nimport { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nexport class IteratorObservable extends Observable {\n constructor(iterator, scheduler) {\n super();\n this.scheduler = scheduler;\n if (iterator == null) {\n throw new Error('iterator cannot be null.');\n }\n this.iterator = getIterator(iterator);\n }\n static create(iterator, scheduler) {\n return new IteratorObservable(iterator, scheduler);\n }\n static dispatch(state) {\n const { index, hasError, iterator, subscriber } = state;\n if (hasError) {\n subscriber.error(state.error);\n return;\n }\n let result = iterator.next();\n if (result.done) {\n subscriber.complete();\n return;\n }\n subscriber.next(result.value);\n state.index = index + 1;\n if (subscriber.closed) {\n if (typeof iterator.return === 'function') {\n iterator.return();\n }\n return;\n }\n this.schedule(state);\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n let index = 0;\n const { iterator, scheduler } = this;\n if (scheduler) {\n return scheduler.schedule(IteratorObservable.dispatch, 0, {\n index, iterator, subscriber\n });\n }\n else {\n do {\n let result = iterator.next();\n if (result.done) {\n subscriber.complete();\n break;\n }\n else {\n subscriber.next(result.value);\n }\n if (subscriber.closed) {\n if (typeof iterator.return === 'function') {\n iterator.return();\n }\n break;\n }\n } while (true);\n }\n }\n}\nclass StringIterator {\n constructor(str, idx = 0, len = str.length) {\n this.str = str;\n this.idx = idx;\n this.len = len;\n }\n [Symbol_iterator]() { return (this); }\n next() {\n return this.idx < this.len ? {\n done: false,\n value: this.str.charAt(this.idx++)\n } : {\n done: true,\n value: undefined\n };\n }\n}\nclass ArrayIterator {\n constructor(arr, idx = 0, len = toLength(arr)) {\n this.arr = arr;\n this.idx = idx;\n this.len = len;\n }\n [Symbol_iterator]() { return this; }\n next() {\n return this.idx < this.len ? {\n done: false,\n value: this.arr[this.idx++]\n } : {\n done: true,\n value: undefined\n };\n }\n}\nfunction getIterator(obj) {\n const i = obj[Symbol_iterator];\n if (!i && typeof obj === 'string') {\n return new StringIterator(obj);\n }\n if (!i && obj.length !== undefined) {\n return new ArrayIterator(obj);\n }\n if (!i) {\n throw new TypeError('object is not iterable');\n }\n return obj[Symbol_iterator]();\n}\nconst maxSafeInteger = Math.pow(2, 53) - 1;\nfunction toLength(o) {\n let len = +o.length;\n if (isNaN(len)) {\n return 0;\n }\n if (len === 0 || !numberIsFinite(len)) {\n return len;\n }\n len = sign(len) * Math.floor(Math.abs(len));\n if (len <= 0) {\n return 0;\n }\n if (len > maxSafeInteger) {\n return maxSafeInteger;\n }\n return len;\n}\nfunction numberIsFinite(value) {\n return typeof value === 'number' && root.isFinite(value);\n}\nfunction sign(value) {\n let valueAsNumber = +value;\n if (valueAsNumber === 0) {\n return valueAsNumber;\n }\n if (isNaN(valueAsNumber)) {\n return valueAsNumber;\n }\n return valueAsNumber < 0 ? -1 : 1;\n}\n//# sourceMappingURL=IteratorObservable.js.map","import { Observable } from '../Observable';\nimport { ScalarObservable } from './ScalarObservable';\nimport { EmptyObservable } from './EmptyObservable';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nexport class ArrayLikeObservable extends Observable {\n constructor(arrayLike, scheduler) {\n super();\n this.arrayLike = arrayLike;\n this.scheduler = scheduler;\n if (!scheduler && arrayLike.length === 1) {\n this._isScalar = true;\n this.value = arrayLike[0];\n }\n }\n static create(arrayLike, scheduler) {\n const length = arrayLike.length;\n if (length === 0) {\n return new EmptyObservable();\n }\n else if (length === 1) {\n return new ScalarObservable(arrayLike[0], scheduler);\n }\n else {\n return new ArrayLikeObservable(arrayLike, scheduler);\n }\n }\n static dispatch(state) {\n const { arrayLike, index, length, subscriber } = state;\n if (subscriber.closed) {\n return;\n }\n if (index >= length) {\n subscriber.complete();\n return;\n }\n subscriber.next(arrayLike[index]);\n state.index = index + 1;\n this.schedule(state);\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n let index = 0;\n const { arrayLike, scheduler } = this;\n const length = arrayLike.length;\n if (scheduler) {\n return scheduler.schedule(ArrayLikeObservable.dispatch, 0, {\n arrayLike, index, length, subscriber\n });\n }\n else {\n for (let i = 0; i < length && !subscriber.closed; i++) {\n subscriber.next(arrayLike[i]);\n }\n subscriber.complete();\n }\n }\n}\n//# sourceMappingURL=ArrayLikeObservable.js.map","import { Observable } from './Observable';\n/**\n * Represents a push-based event or value that an {@link Observable} can emit.\n * This class is particularly useful for operators that manage notifications,\n * like {@link materialize}, {@link dematerialize}, {@link observeOn}, and\n * others. Besides wrapping the actual delivered value, it also annotates it\n * with metadata of, for instance, what type of push message it is (`next`,\n * `error`, or `complete`).\n *\n * @see {@link materialize}\n * @see {@link dematerialize}\n * @see {@link observeOn}\n *\n * @class Notification<T>\n */\nexport class Notification {\n constructor(kind, value, error) {\n this.kind = kind;\n this.value = value;\n this.error = error;\n this.hasValue = kind === 'N';\n }\n /**\n * Delivers to the given `observer` the value wrapped by this Notification.\n * @param {Observer} observer\n * @return\n */\n observe(observer) {\n switch (this.kind) {\n case 'N':\n return observer.next && observer.next(this.value);\n case 'E':\n return observer.error && observer.error(this.error);\n case 'C':\n return observer.complete && observer.complete();\n }\n }\n /**\n * Given some {@link Observer} callbacks, deliver the value represented by the\n * current Notification to the correctly corresponding callback.\n * @param {function(value: T): void} next An Observer `next` callback.\n * @param {function(err: any): void} [error] An Observer `error` callback.\n * @param {function(): void} [complete] An Observer `complete` callback.\n * @return {any}\n */\n do(next, error, complete) {\n const kind = this.kind;\n switch (kind) {\n case 'N':\n return next && next(this.value);\n case 'E':\n return error && error(this.error);\n case 'C':\n return complete && complete();\n }\n }\n /**\n * Takes an Observer or its individual callback functions, and calls `observe`\n * or `do` methods accordingly.\n * @param {Observer|function(value: T): void} nextOrObserver An Observer or\n * the `next` callback.\n * @param {function(err: any): void} [error] An Observer `error` callback.\n * @param {function(): void} [complete] An Observer `complete` callback.\n * @return {any}\n */\n accept(nextOrObserver, error, complete) {\n if (nextOrObserver && typeof nextOrObserver.next === 'function') {\n return this.observe(nextOrObserver);\n }\n else {\n return this.do(nextOrObserver, error, complete);\n }\n }\n /**\n * Returns a simple Observable that just delivers the notification represented\n * by this Notification instance.\n * @return {any}\n */\n toObservable() {\n const kind = this.kind;\n switch (kind) {\n case 'N':\n return Observable.of(this.value);\n case 'E':\n return Observable.throw(this.error);\n case 'C':\n return Observable.empty();\n }\n throw new Error('unexpected notification kind value');\n }\n /**\n * A shortcut to create a Notification instance of the type `next` from a\n * given value.\n * @param {T} value The `next` value.\n * @return {Notification<T>} The \"next\" Notification representing the\n * argument.\n */\n static createNext(value) {\n if (typeof value !== 'undefined') {\n return new Notification('N', value);\n }\n return Notification.undefinedValueNotification;\n }\n /**\n * A shortcut to create a Notification instance of the type `error` from a\n * given error.\n * @param {any} [err] The `error` error.\n * @return {Notification<T>} The \"error\" Notification representing the\n * argument.\n */\n static createError(err) {\n return new Notification('E', undefined, err);\n }\n /**\n * A shortcut to create a Notification instance of the type `complete`.\n * @return {Notification<any>} The valueless \"complete\" Notification.\n */\n static createComplete() {\n return Notification.completeNotification;\n }\n}\nNotification.completeNotification = new Notification('C');\nNotification.undefinedValueNotification = new Notification('N', undefined);\n//# sourceMappingURL=Notification.js.map","import { Subscriber } from '../Subscriber';\nimport { Notification } from '../Notification';\n/**\n *\n * Re-emits all notifications from source Observable with specified scheduler.\n *\n * <span class=\"informal\">Ensure a specific scheduler is used, from outside of an Observable.</span>\n *\n * `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule\n * notifications emitted by the source Observable. It might be useful, if you do not have control over\n * internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.\n *\n * Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,\n * but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal\n * scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits\n * notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.\n * An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split\n * that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source\n * Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a\n * little bit more, to ensure that they are emitted at expected moments.\n *\n * As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications\n * will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`\n * will delay all notifications - including error notifications - while `delay` will pass through error\n * from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator\n * for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used\n * for notification emissions in general.\n *\n * @example <caption>Ensure values in subscribe are called just before browser repaint.</caption>\n * const intervals = Rx.Observable.interval(10); // Intervals are scheduled\n * // with async scheduler by default...\n *\n * intervals\n * .observeOn(Rx.Scheduler.animationFrame) // ...but we will observe on animationFrame\n * .subscribe(val => { // scheduler to ensure smooth animation.\n * someDiv.style.height = val + 'px';\n * });\n *\n * @see {@link delay}\n *\n * @param {IScheduler} scheduler Scheduler that will be used to reschedule notifications from source Observable.\n * @param {number} [delay] Number of milliseconds that states with what delay every notification should be rescheduled.\n * @return {Observable<T>} Observable that emits the same notifications as the source Observable,\n * but with provided scheduler.\n *\n * @method observeOn\n * @owner Observable\n */\nexport function observeOn(scheduler, delay = 0) {\n return function observeOnOperatorFunction(source) {\n return source.lift(new ObserveOnOperator(scheduler, delay));\n };\n}\nexport class ObserveOnOperator {\n constructor(scheduler, delay = 0) {\n this.scheduler = scheduler;\n this.delay = delay;\n }\n call(subscriber, source) {\n return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nexport class ObserveOnSubscriber extends Subscriber {\n constructor(destination, scheduler, delay = 0) {\n super(destination);\n this.scheduler = scheduler;\n this.delay = delay;\n }\n static dispatch(arg) {\n const { notification, destination } = arg;\n notification.observe(destination);\n this.unsubscribe();\n }\n scheduleMessage(notification) {\n this.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));\n }\n _next(value) {\n this.scheduleMessage(Notification.createNext(value));\n }\n _error(err) {\n this.scheduleMessage(Notification.createError(err));\n }\n _complete() {\n this.scheduleMessage(Notification.createComplete());\n }\n}\nexport class ObserveOnMessage {\n constructor(notification, destination) {\n this.notification = notification;\n this.destination = destination;\n }\n}\n//# sourceMappingURL=observeOn.js.map","import { isArray } from '../util/isArray';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { PromiseObservable } from './PromiseObservable';\nimport { IteratorObservable } from './IteratorObservable';\nimport { ArrayObservable } from './ArrayObservable';\nimport { ArrayLikeObservable } from './ArrayLikeObservable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { Observable } from '../Observable';\nimport { ObserveOnSubscriber } from '../operators/observeOn';\nimport { observable as Symbol_observable } from '../symbol/observable';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nexport class FromObservable extends Observable {\n constructor(ish, scheduler) {\n super(null);\n this.ish = ish;\n this.scheduler = scheduler;\n }\n /**\n * Creates an Observable from an Array, an array-like object, a Promise, an\n * iterable object, or an Observable-like object.\n *\n * <span class=\"informal\">Converts almost anything to an Observable.</span>\n *\n * <img src=\"./img/from.png\" width=\"100%\">\n *\n * Convert various other objects and data types into Observables. `from`\n * converts a Promise or an array-like or an\n * [iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable)\n * object into an Observable that emits the items in that promise or array or\n * iterable. A String, in this context, is treated as an array of characters.\n * Observable-like objects (contains a function named with the ES2015 Symbol\n * for Observable) can also be converted through this operator.\n *\n * @example <caption>Converts an array to an Observable</caption>\n * var array = [10, 20, 30];\n * var result = Rx.Observable.from(array);\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // 10 20 30\n *\n * @example <caption>Convert an infinite iterable (from a generator) to an Observable</caption>\n * function* generateDoubles(seed) {\n * var i = seed;\n * while (true) {\n * yield i;\n * i = 2 * i; // double it\n * }\n * }\n *\n * var iterator = generateDoubles(3);\n * var result = Rx.Observable.from(iterator).take(10);\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // 3 6 12 24 48 96 192 384 768 1536\n *\n * @see {@link create}\n * @see {@link fromEvent}\n * @see {@link fromEventPattern}\n * @see {@link fromPromise}\n *\n * @param {ObservableInput<T>} ish A subscribable object, a Promise, an\n * Observable-like, an Array, an iterable or an array-like object to be\n * converted.\n * @param {Scheduler} [scheduler] The scheduler on which to schedule the\n * emissions of values.\n * @return {Observable<T>} The Observable whose values are originally from the\n * input object that was converted.\n * @static true\n * @name from\n * @owner Observable\n */\n static create(ish, scheduler) {\n if (ish != null) {\n if (typeof ish[Symbol_observable] === 'function') {\n if (ish instanceof Observable && !scheduler) {\n return ish;\n }\n return new FromObservable(ish, scheduler);\n }\n else if (isArray(ish)) {\n return new ArrayObservable(ish, scheduler);\n }\n else if (isPromise(ish)) {\n return new PromiseObservable(ish, scheduler);\n }\n else if (typeof ish[Symbol_iterator] === 'function' || typeof ish === 'string') {\n return new IteratorObservable(ish, scheduler);\n }\n else if (isArrayLike(ish)) {\n return new ArrayLikeObservable(ish, scheduler);\n }\n }\n throw new TypeError((ish !== null && typeof ish || ish) + ' is not observable');\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n const ish = this.ish;\n const scheduler = this.scheduler;\n if (scheduler == null) {\n return ish[Symbol_observable]().subscribe(subscriber);\n }\n else {\n return ish[Symbol_observable]().subscribe(new ObserveOnSubscriber(subscriber, scheduler, 0));\n }\n }\n}\n//# sourceMappingURL=FromObservable.js.map","import { FromObservable } from './FromObservable';\nexport const from = FromObservable.create;\n//# sourceMappingURL=from.js.map","import { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\n/**\n * Catches errors on the observable to be handled by returning a new observable or throwing an error.\n *\n * <img src=\"./img/catch.png\" width=\"100%\">\n *\n * @example <caption>Continues with a different Observable when there's an error</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n * .map(n => {\n * \t if (n == 4) {\n * \t throw 'four!';\n * }\n *\t return n;\n * })\n * .catch(err => Observable.of('I', 'II', 'III', 'IV', 'V'))\n * .subscribe(x => console.log(x));\n * // 1, 2, 3, I, II, III, IV, V\n *\n * @example <caption>Retries the caught source Observable again in case of error, similar to retry() operator</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n * .map(n => {\n * \t if (n === 4) {\n * \t throw 'four!';\n * }\n * \t return n;\n * })\n * .catch((err, caught) => caught)\n * .take(30)\n * .subscribe(x => console.log(x));\n * // 1, 2, 3, 1, 2, 3, ...\n *\n * @example <caption>Throws a new error when the source Observable throws an error</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n * .map(n => {\n * if (n == 4) {\n * throw 'four!';\n * }\n * return n;\n * })\n * .catch(err => {\n * throw 'error in source. Details: ' + err;\n * })\n * .subscribe(\n * x => console.log(x),\n * err => console.log(err)\n * );\n * // 1, 2, 3, error in source. Details: four!\n *\n * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which\n * is the source observable, in case you'd like to \"retry\" that observable by returning it again. Whatever observable\n * is returned by the `selector` will be used to continue the observable chain.\n * @return {Observable} An observable that originates from either the source or the observable returned by the\n * catch `selector` function.\n * @name catchError\n */\nexport function catchError(selector) {\n return function catchErrorOperatorFunction(source) {\n const operator = new CatchOperator(selector);\n const caught = source.lift(operator);\n return (operator.caught = caught);\n };\n}\nclass CatchOperator {\n constructor(selector) {\n this.selector = selector;\n }\n call(subscriber, source) {\n return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass CatchSubscriber extends OuterSubscriber {\n constructor(destination, selector, caught) {\n super(destination);\n this.selector = selector;\n this.caught = caught;\n }\n // NOTE: overriding `error` instead of `_error` because we don't want\n // to have this flag this subscriber as `isStopped`. We can mimic the\n // behavior of the RetrySubscriber (from the `retry` operator), where\n // we unsubscribe from our source chain, reset our Subscriber flags,\n // then subscribe to the selector result.\n error(err) {\n if (!this.isStopped) {\n let result;\n try {\n result = this.selector(err, this.caught);\n }\n catch (err2) {\n super.error(err2);\n return;\n }\n this._unsubscribeAndRecycle();\n this.add(subscribeToResult(this, result));\n }\n }\n}\n//# sourceMappingURL=catchError.js.map","import { catchError as higherOrder } from '../operators/catchError';\n/**\n * Catches errors on the observable to be handled by returning a new observable or throwing an error.\n *\n * <img src=\"./img/catch.png\" width=\"100%\">\n *\n * @example <caption>Continues with a different Observable when there's an error</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n * .map(n => {\n * \t if (n == 4) {\n * \t throw 'four!';\n * }\n *\t return n;\n * })\n * .catch(err => Observable.of('I', 'II', 'III', 'IV', 'V'))\n * .subscribe(x => console.log(x));\n * // 1, 2, 3, I, II, III, IV, V\n *\n * @example <caption>Retries the caught source Observable again in case of error, similar to retry() operator</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n * .map(n => {\n * \t if (n === 4) {\n * \t throw 'four!';\n * }\n * \t return n;\n * })\n * .catch((err, caught) => caught)\n * .take(30)\n * .subscribe(x => console.log(x));\n * // 1, 2, 3, 1, 2, 3, ...\n *\n * @example <caption>Throws a new error when the source Observable throws an error</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n * .map(n => {\n * if (n == 4) {\n * throw 'four!';\n * }\n * return n;\n * })\n * .catch(err => {\n * throw 'error in source. Details: ' + err;\n * })\n * .subscribe(\n * x => console.log(x),\n * err => console.log(err)\n * );\n * // 1, 2, 3, error in source. Details: four!\n *\n * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which\n * is the source observable, in case you'd like to \"retry\" that observable by returning it again. Whatever observable\n * is returned by the `selector` will be used to continue the observable chain.\n * @return {Observable} An observable that originates from either the source or the observable returned by the\n * catch `selector` function.\n * @method catch\n * @name catch\n * @owner Observable\n */\nexport function _catch(selector) {\n return higherOrder(selector)(this);\n}\n//# sourceMappingURL=catch.js.map","import { concatAll as higherOrder } from '../operators/concatAll';\n/* tslint:enable:max-line-length */\n/**\n * Converts a higher-order Observable into a first-order Observable by\n * concatenating the inner Observables in order.\n *\n * <span class=\"informal\">Flattens an Observable-of-Observables by putting one\n * inner Observable after the other.</span>\n *\n * <img src=\"./img/concatAll.png\" width=\"100%\">\n *\n * Joins every Observable emitted by the source (a higher-order Observable), in\n * a serial fashion. It subscribes to each inner Observable only after the\n * previous inner Observable has completed, and merges all of their values into\n * the returned observable.\n *\n * __Warning:__ If the source Observable emits Observables quickly and\n * endlessly, and the inner Observables it emits generally complete slower than\n * the source emits, you can run into memory issues as the incoming Observables\n * collect in an unbounded buffer.\n *\n * Note: `concatAll` is equivalent to `mergeAll` with concurrency parameter set\n * to `1`.\n *\n * @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var higherOrder = clicks.map(ev => Rx.Observable.interval(1000).take(4));\n * var firstOrder = higherOrder.concatAll();\n * firstOrder.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n *\n * @see {@link combineAll}\n * @see {@link concat}\n * @see {@link concatMap}\n * @see {@link concatMapTo}\n * @see {@link exhaust}\n * @see {@link mergeAll}\n * @see {@link switch}\n * @see {@link zipAll}\n *\n * @return {Observable} An Observable emitting values from all the inner\n * Observables concatenated.\n * @method concatAll\n * @owner Observable\n */\nexport function concatAll() {\n return higherOrder()(this);\n}\n//# sourceMappingURL=concatAll.js.map","import { mergeAll } from './mergeAll';\n/**\n * Converts a higher-order Observable into a first-order Observable by\n * concatenating the inner Observables in order.\n *\n * <span class=\"informal\">Flattens an Observable-of-Observables by putting one\n * inner Observable after the other.</span>\n *\n * <img src=\"./img/concatAll.png\" width=\"100%\">\n *\n * Joins every Observable emitted by the source (a higher-order Observable), in\n * a serial fashion. It subscribes to each inner Observable only after the\n * previous inner Observable has completed, and merges all of their values into\n * the returned observable.\n *\n * __Warning:__ If the source Observable emits Observables quickly and\n * endlessly, and the inner Observables it emits generally complete slower than\n * the source emits, you can run into memory issues as the incoming Observables\n * collect in an unbounded buffer.\n *\n * Note: `concatAll` is equivalent to `mergeAll` with concurrency parameter set\n * to `1`.\n *\n * @example <caption>For each click event, tick every second from 0 to 3, with no concurrency</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var higherOrder = clicks.map(ev => Rx.Observable.interval(1000).take(4));\n * var firstOrder = higherOrder.concatAll();\n * firstOrder.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n *\n * @see {@link combineAll}\n * @see {@link concat}\n * @see {@link concatMap}\n * @see {@link concatMapTo}\n * @see {@link exhaust}\n * @see {@link mergeAll}\n * @see {@link switch}\n * @see {@link zipAll}\n *\n * @return {Observable} An Observable emitting values from all the inner\n * Observables concatenated.\n * @method concatAll\n * @owner Observable\n */\nexport function concatAll() {\n return mergeAll(1);\n}\n//# sourceMappingURL=concatAll.js.map","/**\n * An error thrown when an Observable or a sequence was queried but has no\n * elements.\n *\n * @see {@link first}\n * @see {@link last}\n * @see {@link single}\n *\n * @class EmptyError\n */\nexport class EmptyError extends Error {\n constructor() {\n const err = super('no elements in sequence');\n this.name = err.name = 'EmptyError';\n this.stack = err.stack;\n this.message = err.message;\n }\n}\n//# sourceMappingURL=EmptyError.js.map","import { Subscriber } from '../Subscriber';\nimport { EmptyError } from '../util/EmptyError';\n/**\n * Emits only the first value (or the first value that meets some condition)\n * emitted by the source Observable.\n *\n * <span class=\"informal\">Emits only the first value. Or emits only the first\n * value that passes some test.</span>\n *\n * <img src=\"./img/first.png\" width=\"100%\">\n *\n * If called with no arguments, `first` emits the first value of the source\n * Observable, then completes. If called with a `predicate` function, `first`\n * emits the first value of the source that matches the specified condition. It\n * may also take a `resultSelector` function to produce the output value from\n * the input value, and a `defaultValue` to emit in case the source completes\n * before it is able to emit a valid value. Throws an error if `defaultValue`\n * was not provided and a matching element is not found.\n *\n * @example <caption>Emit only the first click that happens on the DOM</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.first();\n * result.subscribe(x => console.log(x));\n *\n * @example <caption>Emits the first click that happens on a DIV</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.first(ev => ev.target.tagName === 'DIV');\n * result.subscribe(x => console.log(x));\n *\n * @see {@link filter}\n * @see {@link find}\n * @see {@link take}\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n *\n * @param {function(value: T, index: number, source: Observable<T>): boolean} [predicate]\n * An optional function called with each item to test for condition matching.\n * @param {function(value: T, index: number): R} [resultSelector] A function to\n * produce the value on the output Observable based on the values\n * and the indices of the source Observable. The arguments passed to this\n * function are:\n * - `value`: the value that was emitted on the source.\n * - `index`: the \"index\" of the value from the source.\n * @param {R} [defaultValue] The default value emitted in case no valid value\n * was found on the source.\n * @return {Observable<T|R>} An Observable of the first item that matches the\n * condition.\n * @method first\n * @owner Observable\n */\nexport function first(predicate, resultSelector, defaultValue) {\n return (source) => source.lift(new FirstOperator(predicate, resultSelector, defaultValue, source));\n}\nclass FirstOperator {\n constructor(predicate, resultSelector, defaultValue, source) {\n this.predicate = predicate;\n this.resultSelector = resultSelector;\n this.defaultValue = defaultValue;\n this.source = source;\n }\n call(observer, source) {\n return source.subscribe(new FirstSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass FirstSubscriber extends Subscriber {\n constructor(destination, predicate, resultSelector, defaultValue, source) {\n super(destination);\n this.predicate = predicate;\n this.resultSelector = resultSelector;\n this.defaultValue = defaultValue;\n this.source = source;\n this.index = 0;\n this.hasCompleted = false;\n this._emitted = false;\n }\n _next(value) {\n const index = this.index++;\n if (this.predicate) {\n this._tryPredicate(value, index);\n }\n else {\n this._emit(value, index);\n }\n }\n _tryPredicate(value, index) {\n let result;\n try {\n result = this.predicate(value, index, this.source);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n if (result) {\n this._emit(value, index);\n }\n }\n _emit(value, index) {\n if (this.resultSelector) {\n this._tryResultSelector(value, index);\n return;\n }\n this._emitFinal(value);\n }\n _tryResultSelector(value, index) {\n let result;\n try {\n result = this.resultSelector(value, index);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this._emitFinal(result);\n }\n _emitFinal(value) {\n const destination = this.destination;\n if (!this._emitted) {\n this._emitted = true;\n destination.next(value);\n destination.complete();\n this.hasCompleted = true;\n }\n }\n _complete() {\n const destination = this.destination;\n if (!this.hasCompleted && typeof this.defaultValue !== 'undefined') {\n destination.next(this.defaultValue);\n destination.complete();\n }\n else if (!this.hasCompleted) {\n destination.error(new EmptyError);\n }\n }\n}\n//# sourceMappingURL=first.js.map","import { first as higherOrder } from '../operators/first';\n/**\n * Emits only the first value (or the first value that meets some condition)\n * emitted by the source Observable.\n *\n * <span class=\"informal\">Emits only the first value. Or emits only the first\n * value that passes some test.</span>\n *\n * <img src=\"./img/first.png\" width=\"100%\">\n *\n * If called with no arguments, `first` emits the first value of the source\n * Observable, then completes. If called with a `predicate` function, `first`\n * emits the first value of the source that matches the specified condition. It\n * may also take a `resultSelector` function to produce the output value from\n * the input value, and a `defaultValue` to emit in case the source completes\n * before it is able to emit a valid value. Throws an error if `defaultValue`\n * was not provided and a matching element is not found.\n *\n * @example <caption>Emit only the first click that happens on the DOM</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.first();\n * result.subscribe(x => console.log(x));\n *\n * @example <caption>Emits the first click that happens on a DIV</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.first(ev => ev.target.tagName === 'DIV');\n * result.subscribe(x => console.log(x));\n *\n * @see {@link filter}\n * @see {@link find}\n * @see {@link take}\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n *\n * @param {function(value: T, index: number, source: Observable<T>): boolean} [predicate]\n * An optional function called with each item to test for condition matching.\n * @param {function(value: T, index: number): R} [resultSelector] A function to\n * produce the value on the output Observable based on the values\n * and the indices of the source Observable. The arguments passed to this\n * function are:\n * - `value`: the value that was emitted on the source.\n * - `index`: the \"index\" of the value from the source.\n * @param {R} [defaultValue] The default value emitted in case no valid value\n * was found on the source.\n * @return {Observable<T|R>} An Observable of the first item that matches the\n * condition.\n * @method first\n * @owner Observable\n */\nexport function first(predicate, resultSelector, defaultValue) {\n return higherOrder(predicate, resultSelector, defaultValue)(this);\n}\n//# sourceMappingURL=first.js.map","import { Subscriber } from '../Subscriber';\n/**\n * Returns an Observable that emits whether or not every item of the source satisfies the condition specified.\n *\n * @example <caption>A simple example emitting true if all elements are less than 5, false otherwise</caption>\n * Observable.of(1, 2, 3, 4, 5, 6)\n * .every(x => x < 5)\n * .subscribe(x => console.log(x)); // -> false\n *\n * @param {function} predicate A function for determining if an item meets a specified condition.\n * @param {any} [thisArg] Optional object to use for `this` in the callback.\n * @return {Observable} An Observable of booleans that determines if all items of the source Observable meet the condition specified.\n * @method every\n * @owner Observable\n */\nexport function every(predicate, thisArg) {\n return (source) => source.lift(new EveryOperator(predicate, thisArg, source));\n}\nclass EveryOperator {\n constructor(predicate, thisArg, source) {\n this.predicate = predicate;\n this.thisArg = thisArg;\n this.source = source;\n }\n call(observer, source) {\n return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass EverySubscriber extends Subscriber {\n constructor(destination, predicate, thisArg, source) {\n super(destination);\n this.predicate = predicate;\n this.thisArg = thisArg;\n this.source = source;\n this.index = 0;\n this.thisArg = thisArg || this;\n }\n notifyComplete(everyValueMatch) {\n this.destination.next(everyValueMatch);\n this.destination.complete();\n }\n _next(value) {\n let result = false;\n try {\n result = this.predicate.call(this.thisArg, value, this.index++, this.source);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n if (!result) {\n this.notifyComplete(false);\n }\n }\n _complete() {\n this.notifyComplete(true);\n }\n}\n//# sourceMappingURL=every.js.map","import { every as higherOrder } from '../operators/every';\n/**\n * Returns an Observable that emits whether or not every item of the source satisfies the condition specified.\n *\n * @example <caption>A simple example emitting true if all elements are less than 5, false otherwise</caption>\n * Observable.of(1, 2, 3, 4, 5, 6)\n * .every(x => x < 5)\n * .subscribe(x => console.log(x)); // -> false\n *\n * @param {function} predicate A function for determining if an item meets a specified condition.\n * @param {any} [thisArg] Optional object to use for `this` in the callback.\n * @return {Observable} An Observable of booleans that determines if all items of the source Observable meet the condition specified.\n * @method every\n * @owner Observable\n */\nexport function every(predicate, thisArg) {\n return higherOrder(predicate, thisArg)(this);\n}\n//# sourceMappingURL=every.js.map","import { Subscriber } from '../Subscriber';\nimport { EmptyError } from '../util/EmptyError';\n/* tslint:enable:max-line-length */\n/**\n * Returns an Observable that emits only the last item emitted by the source Observable.\n * It optionally takes a predicate function as a parameter, in which case, rather than emitting\n * the last item from the source Observable, the resulting Observable will emit the last item\n * from the source Observable that satisfies the predicate.\n *\n * <img src=\"./img/last.png\" width=\"100%\">\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n * @param {function} predicate - The condition any source emitted item has to satisfy.\n * @return {Observable} An Observable that emits only the last item satisfying the given condition\n * from the source, or an NoSuchElementException if no such items are emitted.\n * @throws - Throws if no items that match the predicate are emitted by the source Observable.\n * @method last\n * @owner Observable\n */\nexport function last(predicate, resultSelector, defaultValue) {\n return (source) => source.lift(new LastOperator(predicate, resultSelector, defaultValue, source));\n}\nclass LastOperator {\n constructor(predicate, resultSelector, defaultValue, source) {\n this.predicate = predicate;\n this.resultSelector = resultSelector;\n this.defaultValue = defaultValue;\n this.source = source;\n }\n call(observer, source) {\n return source.subscribe(new LastSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass LastSubscriber extends Subscriber {\n constructor(destination, predicate, resultSelector, defaultValue, source) {\n super(destination);\n this.predicate = predicate;\n this.resultSelector = resultSelector;\n this.defaultValue = defaultValue;\n this.source = source;\n this.hasValue = false;\n this.index = 0;\n if (typeof defaultValue !== 'undefined') {\n this.lastValue = defaultValue;\n this.hasValue = true;\n }\n }\n _next(value) {\n const index = this.index++;\n if (this.predicate) {\n this._tryPredicate(value, index);\n }\n else {\n if (this.resultSelector) {\n this._tryResultSelector(value, index);\n return;\n }\n this.lastValue = value;\n this.hasValue = true;\n }\n }\n _tryPredicate(value, index) {\n let result;\n try {\n result = this.predicate(value, index, this.source);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n if (result) {\n if (this.resultSelector) {\n this._tryResultSelector(value, index);\n return;\n }\n this.lastValue = value;\n this.hasValue = true;\n }\n }\n _tryResultSelector(value, index) {\n let result;\n try {\n result = this.resultSelector(value, index);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.lastValue = result;\n this.hasValue = true;\n }\n _complete() {\n const destination = this.destination;\n if (this.hasValue) {\n destination.next(this.lastValue);\n destination.complete();\n }\n else {\n destination.error(new EmptyError);\n }\n }\n}\n//# sourceMappingURL=last.js.map","import { last as higherOrder } from '../operators/last';\n/* tslint:enable:max-line-length */\n/**\n * Returns an Observable that emits only the last item emitted by the source Observable.\n * It optionally takes a predicate function as a parameter, in which case, rather than emitting\n * the last item from the source Observable, the resulting Observable will emit the last item\n * from the source Observable that satisfies the predicate.\n *\n * <img src=\"./img/last.png\" width=\"100%\">\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n * @param {function} predicate - The condition any source emitted item has to satisfy.\n * @return {Observable} An Observable that emits only the last item satisfying the given condition\n * from the source, or an NoSuchElementException if no such items are emitted.\n * @throws - Throws if no items that match the predicate are emitted by the source Observable.\n * @method last\n * @owner Observable\n */\nexport function last(predicate, resultSelector, defaultValue) {\n return higherOrder(predicate, resultSelector, defaultValue)(this);\n}\n//# sourceMappingURL=last.js.map","import { mergeAll as higherOrder } from '../operators/mergeAll';\n/**\n * Converts a higher-order Observable into a first-order Observable which\n * concurrently delivers all values that are emitted on the inner Observables.\n *\n * <span class=\"informal\">Flattens an Observable-of-Observables.</span>\n *\n * <img src=\"./img/mergeAll.png\" width=\"100%\">\n *\n * `mergeAll` subscribes to an Observable that emits Observables, also known as\n * a higher-order Observable. Each time it observes one of these emitted inner\n * Observables, it subscribes to that and delivers all the values from the\n * inner Observable on the output Observable. The output Observable only\n * completes once all inner Observables have completed. Any error delivered by\n * a inner Observable will be immediately emitted on the output Observable.\n *\n * @example <caption>Spawn a new interval Observable for each click event, and blend their outputs as one Observable</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000));\n * var firstOrder = higherOrder.mergeAll();\n * firstOrder.subscribe(x => console.log(x));\n *\n * @example <caption>Count from 0 to 9 every second for each click, but only allow 2 concurrent timers</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000).take(10));\n * var firstOrder = higherOrder.mergeAll(2);\n * firstOrder.subscribe(x => console.log(x));\n *\n * @see {@link combineAll}\n * @see {@link concatAll}\n * @see {@link exhaust}\n * @see {@link merge}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switch}\n * @see {@link zipAll}\n *\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of inner\n * Observables being subscribed to concurrently.\n * @return {Observable} An Observable that emits values coming from all the\n * inner Observables emitted by the source Observable.\n * @method mergeAll\n * @owner Observable\n */\nexport function mergeAll(concurrent = Number.POSITIVE_INFINITY) {\n return higherOrder(concurrent)(this);\n}\n//# sourceMappingURL=mergeAll.js.map","import { Subscriber } from '../Subscriber';\n/* tslint:enable:max-line-length */\n/**\n * Applies an accumulator function over the source Observable, and returns each\n * intermediate result, with an optional seed value.\n *\n * <span class=\"informal\">It's like {@link reduce}, but emits the current\n * accumulation whenever the source emits a value.</span>\n *\n * <img src=\"./img/scan.png\" width=\"100%\">\n *\n * Combines together all values emitted on the source, using an accumulator\n * function that knows how to join a new source value into the accumulation from\n * the past. Is similar to {@link reduce}, but emits the intermediate\n * accumulations.\n *\n * Returns an Observable that applies a specified `accumulator` function to each\n * item emitted by the source Observable. If a `seed` value is specified, then\n * that value will be used as the initial value for the accumulator. If no seed\n * value is specified, the first item of the source is used as the seed.\n *\n * @example <caption>Count the number of click events</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var ones = clicks.mapTo(1);\n * var seed = 0;\n * var count = ones.scan((acc, one) => acc + one, seed);\n * count.subscribe(x => console.log(x));\n *\n * @see {@link expand}\n * @see {@link mergeScan}\n * @see {@link reduce}\n *\n * @param {function(acc: R, value: T, index: number): R} accumulator\n * The accumulator function called on each source value.\n * @param {T|R} [seed] The initial accumulation value.\n * @return {Observable<R>} An observable of the accumulated values.\n * @method scan\n * @owner Observable\n */\nexport function scan(accumulator, seed) {\n let hasSeed = false;\n // providing a seed of `undefined` *should* be valid and trigger\n // hasSeed! so don't use `seed !== undefined` checks!\n // For this reason, we have to check it here at the original call site\n // otherwise inside Operator/Subscriber we won't know if `undefined`\n // means they didn't provide anything or if they literally provided `undefined`\n if (arguments.length >= 2) {\n hasSeed = true;\n }\n return function scanOperatorFunction(source) {\n return source.lift(new ScanOperator(accumulator, seed, hasSeed));\n };\n}\nclass ScanOperator {\n constructor(accumulator, seed, hasSeed = false) {\n this.accumulator = accumulator;\n this.seed = seed;\n this.hasSeed = hasSeed;\n }\n call(subscriber, source) {\n return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass ScanSubscriber extends Subscriber {\n constructor(destination, accumulator, _seed, hasSeed) {\n super(destination);\n this.accumulator = accumulator;\n this._seed = _seed;\n this.hasSeed = hasSeed;\n this.index = 0;\n }\n get seed() {\n return this._seed;\n }\n set seed(value) {\n this.hasSeed = true;\n this._seed = value;\n }\n _next(value) {\n if (!this.hasSeed) {\n this.seed = value;\n this.destination.next(value);\n }\n else {\n return this._tryNext(value);\n }\n }\n _tryNext(value) {\n const index = this.index++;\n let result;\n try {\n result = this.accumulator(this.seed, value, index);\n }\n catch (err) {\n this.destination.error(err);\n }\n this.seed = result;\n this.destination.next(result);\n }\n}\n//# sourceMappingURL=scan.js.map","/**\n * An error thrown when an element was queried at a certain index of an\n * Observable, but no such index or position exists in that sequence.\n *\n * @see {@link elementAt}\n * @see {@link take}\n * @see {@link takeLast}\n *\n * @class ArgumentOutOfRangeError\n */\nexport class ArgumentOutOfRangeError extends Error {\n constructor() {\n const err = super('argument out of range');\n this.name = err.name = 'ArgumentOutOfRangeError';\n this.stack = err.stack;\n this.message = err.message;\n }\n}\n//# sourceMappingURL=ArgumentOutOfRangeError.js.map","import { Subscriber } from '../Subscriber';\nimport { ArgumentOutOfRangeError } from '../util/ArgumentOutOfRangeError';\nimport { EmptyObservable } from '../observable/EmptyObservable';\n/**\n * Emits only the last `count` values emitted by the source Observable.\n *\n * <span class=\"informal\">Remembers the latest `count` values, then emits those\n * only when the source completes.</span>\n *\n * <img src=\"./img/takeLast.png\" width=\"100%\">\n *\n * `takeLast` returns an Observable that emits at most the last `count` values\n * emitted by the source Observable. If the source emits fewer than `count`\n * values then all of its values are emitted. This operator must wait until the\n * `complete` notification emission from the source in order to emit the `next`\n * values on the output Observable, because otherwise it is impossible to know\n * whether or not more values will be emitted on the source. For this reason,\n * all values are emitted synchronously, followed by the complete notification.\n *\n * @example <caption>Take the last 3 values of an Observable with many values</caption>\n * var many = Rx.Observable.range(1, 100);\n * var lastThree = many.takeLast(3);\n * lastThree.subscribe(x => console.log(x));\n *\n * @see {@link take}\n * @see {@link takeUntil}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @throws {ArgumentOutOfRangeError} When using `takeLast(i)`, it delivers an\n * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.\n *\n * @param {number} count The maximum number of values to emit from the end of\n * the sequence of values emitted by the source Observable.\n * @return {Observable<T>} An Observable that emits at most the last count\n * values emitted by the source Observable.\n * @method takeLast\n * @owner Observable\n */\nexport function takeLast(count) {\n return function takeLastOperatorFunction(source) {\n if (count === 0) {\n return new EmptyObservable();\n }\n else {\n return source.lift(new TakeLastOperator(count));\n }\n };\n}\nclass TakeLastOperator {\n constructor(total) {\n this.total = total;\n if (this.total < 0) {\n throw new ArgumentOutOfRangeError;\n }\n }\n call(subscriber, source) {\n return source.subscribe(new TakeLastSubscriber(subscriber, this.total));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass TakeLastSubscriber extends Subscriber {\n constructor(destination, total) {\n super(destination);\n this.total = total;\n this.ring = new Array();\n this.count = 0;\n }\n _next(value) {\n const ring = this.ring;\n const total = this.total;\n const count = this.count++;\n if (ring.length < total) {\n ring.push(value);\n }\n else {\n const index = count % total;\n ring[index] = value;\n }\n }\n _complete() {\n const destination = this.destination;\n let count = this.count;\n if (count > 0) {\n const total = this.count >= this.total ? this.total : this.count;\n const ring = this.ring;\n for (let i = 0; i < total; i++) {\n const idx = (count++) % total;\n destination.next(ring[idx]);\n }\n }\n destination.complete();\n }\n}\n//# sourceMappingURL=takeLast.js.map","import { Subscriber } from '../Subscriber';\n/* tslint:enable:max-line-length */\n/**\n * Emits a given value if the source Observable completes without emitting any\n * `next` value, otherwise mirrors the source Observable.\n *\n * <span class=\"informal\">If the source Observable turns out to be empty, then\n * this operator will emit a default value.</span>\n *\n * <img src=\"./img/defaultIfEmpty.png\" width=\"100%\">\n *\n * `defaultIfEmpty` emits the values emitted by the source Observable or a\n * specified default value if the source Observable is empty (completes without\n * having emitted any `next` value).\n *\n * @example <caption>If no clicks happen in 5 seconds, then emit \"no clicks\"</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var clicksBeforeFive = clicks.takeUntil(Rx.Observable.interval(5000));\n * var result = clicksBeforeFive.defaultIfEmpty('no clicks');\n * result.subscribe(x => console.log(x));\n *\n * @see {@link empty}\n * @see {@link last}\n *\n * @param {any} [defaultValue=null] The default value used if the source\n * Observable is empty.\n * @return {Observable} An Observable that emits either the specified\n * `defaultValue` if the source Observable emits no items, or the values emitted\n * by the source Observable.\n * @method defaultIfEmpty\n * @owner Observable\n */\nexport function defaultIfEmpty(defaultValue = null) {\n return (source) => source.lift(new DefaultIfEmptyOperator(defaultValue));\n}\nclass DefaultIfEmptyOperator {\n constructor(defaultValue) {\n this.defaultValue = defaultValue;\n }\n call(subscriber, source) {\n return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass DefaultIfEmptySubscriber extends Subscriber {\n constructor(destination, defaultValue) {\n super(destination);\n this.defaultValue = defaultValue;\n this.isEmpty = true;\n }\n _next(value) {\n this.isEmpty = false;\n this.destination.next(value);\n }\n _complete() {\n if (this.isEmpty) {\n this.destination.next(this.defaultValue);\n }\n this.destination.complete();\n }\n}\n//# sourceMappingURL=defaultIfEmpty.js.map","import { scan } from './scan';\nimport { takeLast } from './takeLast';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { pipe } from '../util/pipe';\n/* tslint:enable:max-line-length */\n/**\n * Applies an accumulator function over the source Observable, and returns the\n * accumulated result when the source completes, given an optional seed value.\n *\n * <span class=\"informal\">Combines together all values emitted on the source,\n * using an accumulator function that knows how to join a new source value into\n * the accumulation from the past.</span>\n *\n * <img src=\"./img/reduce.png\" width=\"100%\">\n *\n * Like\n * [Array.prototype.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce),\n * `reduce` applies an `accumulator` function against an accumulation and each\n * value of the source Observable (from the past) to reduce it to a single\n * value, emitted on the output Observable. Note that `reduce` will only emit\n * one value, only when the source Observable completes. It is equivalent to\n * applying operator {@link scan} followed by operator {@link last}.\n *\n * Returns an Observable that applies a specified `accumulator` function to each\n * item emitted by the source Observable. If a `seed` value is specified, then\n * that value will be used as the initial value for the accumulator. If no seed\n * value is specified, the first item of the source is used as the seed.\n *\n * @example <caption>Count the number of click events that happened in 5 seconds</caption>\n * var clicksInFiveSeconds = Rx.Observable.fromEvent(document, 'click')\n * .takeUntil(Rx.Observable.interval(5000));\n * var ones = clicksInFiveSeconds.mapTo(1);\n * var seed = 0;\n * var count = ones.reduce((acc, one) => acc + one, seed);\n * count.subscribe(x => console.log(x));\n *\n * @see {@link count}\n * @see {@link expand}\n * @see {@link mergeScan}\n * @see {@link scan}\n *\n * @param {function(acc: R, value: T, index: number): R} accumulator The accumulator function\n * called on each source value.\n * @param {R} [seed] The initial accumulation value.\n * @return {Observable<R>} An Observable that emits a single value that is the\n * result of accumulating the values emitted by the source Observable.\n * @method reduce\n * @owner Observable\n */\nexport function reduce(accumulator, seed) {\n // providing a seed of `undefined` *should* be valid and trigger\n // hasSeed! so don't use `seed !== undefined` checks!\n // For this reason, we have to check it here at the original call site\n // otherwise inside Operator/Subscriber we won't know if `undefined`\n // means they didn't provide anything or if they literally provided `undefined`\n if (arguments.length >= 2) {\n return function reduceOperatorFunctionWithSeed(source) {\n return pipe(scan(accumulator, seed), takeLast(1), defaultIfEmpty(seed))(source);\n };\n }\n return function reduceOperatorFunction(source) {\n return pipe(scan((acc, value, index) => {\n return accumulator(acc, value, index + 1);\n }), takeLast(1))(source);\n };\n}\n//# sourceMappingURL=reduce.js.map","import { Subscriber } from '../Subscriber';\n/* tslint:enable:max-line-length */\n/**\n * Filter items emitted by the source Observable by only emitting those that\n * satisfy a specified predicate.\n *\n * <span class=\"informal\">Like\n * [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),\n * it only emits a value from the source if it passes a criterion function.</span>\n *\n * <img src=\"./img/filter.png\" width=\"100%\">\n *\n * Similar to the well-known `Array.prototype.filter` method, this operator\n * takes values from the source Observable, passes them through a `predicate`\n * function and only emits those values that yielded `true`.\n *\n * @example <caption>Emit only click events whose target was a DIV element</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var clicksOnDivs = clicks.filter(ev => ev.target.tagName === 'DIV');\n * clicksOnDivs.subscribe(x => console.log(x));\n *\n * @see {@link distinct}\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n * @see {@link ignoreElements}\n * @see {@link partition}\n * @see {@link skip}\n *\n * @param {function(value: T, index: number): boolean} predicate A function that\n * evaluates each value emitted by the source Observable. If it returns `true`,\n * the value is emitted, if `false` the value is not passed to the output\n * Observable. The `index` parameter is the number `i` for the i-th source\n * emission that has happened since the subscription, starting from the number\n * `0`.\n * @param {any} [thisArg] An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return {Observable} An Observable of values from the source that were\n * allowed by the `predicate` function.\n * @method filter\n * @owner Observable\n */\nexport function filter(predicate, thisArg) {\n return function filterOperatorFunction(source) {\n return source.lift(new FilterOperator(predicate, thisArg));\n };\n}\nclass FilterOperator {\n constructor(predicate, thisArg) {\n this.predicate = predicate;\n this.thisArg = thisArg;\n }\n call(subscriber, source) {\n return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass FilterSubscriber extends Subscriber {\n constructor(destination, predicate, thisArg) {\n super(destination);\n this.predicate = predicate;\n this.thisArg = thisArg;\n this.count = 0;\n }\n // the try catch block below is left specifically for\n // optimization and perf reasons. a tryCatcher is not necessary here.\n _next(value) {\n let result;\n try {\n result = this.predicate.call(this.thisArg, value, this.count++);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n if (result) {\n this.destination.next(value);\n }\n }\n}\n//# sourceMappingURL=filter.js.map","import { filter as higherOrderFilter } from '../operators/filter';\n/* tslint:enable:max-line-length */\n/**\n * Filter items emitted by the source Observable by only emitting those that\n * satisfy a specified predicate.\n *\n * <span class=\"informal\">Like\n * [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),\n * it only emits a value from the source if it passes a criterion function.</span>\n *\n * <img src=\"./img/filter.png\" width=\"100%\">\n *\n * Similar to the well-known `Array.prototype.filter` method, this operator\n * takes values from the source Observable, passes them through a `predicate`\n * function and only emits those values that yielded `true`.\n *\n * @example <caption>Emit only click events whose target was a DIV element</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var clicksOnDivs = clicks.filter(ev => ev.target.tagName === 'DIV');\n * clicksOnDivs.subscribe(x => console.log(x));\n *\n * @see {@link distinct}\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n * @see {@link ignoreElements}\n * @see {@link partition}\n * @see {@link skip}\n *\n * @param {function(value: T, index: number): boolean} predicate A function that\n * evaluates each value emitted by the source Observable. If it returns `true`,\n * the value is emitted, if `false` the value is not passed to the output\n * Observable. The `index` parameter is the number `i` for the i-th source\n * emission that has happened since the subscription, starting from the number\n * `0`.\n * @param {any} [thisArg] An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return {Observable} An Observable of values from the source that were\n * allowed by the `predicate` function.\n * @method filter\n * @owner Observable\n */\nexport function filter(predicate, thisArg) {\n return higherOrderFilter(predicate, thisArg)(this);\n}\n//# sourceMappingURL=filter.js.map","/**\n * @license Angular v5.2.10\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { APP_BASE_HREF, HashLocationStrategy, LOCATION_INITIALIZED, Location, LocationStrategy, PathLocationStrategy, PlatformLocation } from '@angular/common';\nimport { ANALYZE_FOR_ENTRY_COMPONENTS, APP_BOOTSTRAP_LISTENER, APP_INITIALIZER, ApplicationRef, Attribute, ChangeDetectorRef, Compiler, ComponentFactoryResolver, ContentChildren, Directive, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Injectable, InjectionToken, Injector, Input, NgModule, NgModuleFactory, NgModuleFactoryLoader, NgModuleRef, NgProbeToken, Optional, Output, Renderer2, SkipSelf, SystemJsNgModuleLoader, Version, ViewContainerRef, isDevMode, ɵisObservable, ɵisPromise } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs/BehaviorSubject';\nimport { Subject } from 'rxjs/Subject';\nimport { of } from 'rxjs/observable/of';\nimport { concatMap } from 'rxjs/operator/concatMap';\nimport { map } from 'rxjs/operator/map';\nimport { mergeMap } from 'rxjs/operator/mergeMap';\nimport { Observable } from 'rxjs/Observable';\nimport { from } from 'rxjs/observable/from';\nimport { _catch } from 'rxjs/operator/catch';\nimport { concatAll } from 'rxjs/operator/concatAll';\nimport { first } from 'rxjs/operator/first';\nimport { EmptyError } from 'rxjs/util/EmptyError';\nimport { fromPromise } from 'rxjs/observable/fromPromise';\nimport { every } from 'rxjs/operator/every';\nimport { last } from 'rxjs/operator/last';\nimport { mergeAll } from 'rxjs/operator/mergeAll';\nimport { reduce } from 'rxjs/operator/reduce';\nimport { ɵgetDOM } from '@angular/platform-browser';\nimport { filter } from 'rxjs/operator/filter';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Base for events the Router goes through, as opposed to events tied to a specific\n * Route. `RouterEvent`s will only be fired one time for any given navigation.\n *\n * Example:\n *\n * ```\n * class MyService {\n * constructor(public router: Router, logger: Logger) {\n * router.events.filter(e => e instanceof RouterEvent).subscribe(e => {\n * logger.log(e.id, e.url);\n * });\n * }\n * }\n * ```\n *\n * \\@experimental\n */\nclass RouterEvent {\n /**\n * @param {?} id\n * @param {?} url\n */\n constructor(id, url) {\n this.id = id;\n this.url = url;\n }\n}\n/**\n * \\@whatItDoes Represents an event triggered when a navigation starts.\n *\n * \\@stable\n */\nclass NavigationStart extends RouterEvent {\n /**\n * \\@docsNotRequired\n * @return {?}\n */\n toString() { return `NavigationStart(id: ${this.id}, url: '${this.url}')`; }\n}\n/**\n * \\@whatItDoes Represents an event triggered when a navigation ends successfully.\n *\n * \\@stable\n */\nclass NavigationEnd extends RouterEvent {\n /**\n * @param {?} id\n * @param {?} url\n * @param {?} urlAfterRedirects\n */\n constructor(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, urlAfterRedirects) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n }\n /**\n * \\@docsNotRequired\n * @return {?}\n */\n toString() {\n return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;\n }\n}\n/**\n * \\@whatItDoes Represents an event triggered when a navigation is canceled.\n *\n * \\@stable\n */\nclass NavigationCancel extends RouterEvent {\n /**\n * @param {?} id\n * @param {?} url\n * @param {?} reason\n */\n constructor(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, reason) {\n super(id, url);\n this.reason = reason;\n }\n /**\n * \\@docsNotRequired\n * @return {?}\n */\n toString() { return `NavigationCancel(id: ${this.id}, url: '${this.url}')`; }\n}\n/**\n * \\@whatItDoes Represents an event triggered when a navigation fails due to an unexpected error.\n *\n * \\@stable\n */\nclass NavigationError extends RouterEvent {\n /**\n * @param {?} id\n * @param {?} url\n * @param {?} error\n */\n constructor(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, error) {\n super(id, url);\n this.error = error;\n }\n /**\n * \\@docsNotRequired\n * @return {?}\n */\n toString() {\n return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;\n }\n}\n/**\n * \\@whatItDoes Represents an event triggered when routes are recognized.\n *\n * \\@stable\n */\nclass RoutesRecognized extends RouterEvent {\n /**\n * @param {?} id\n * @param {?} url\n * @param {?} urlAfterRedirects\n * @param {?} state\n */\n constructor(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n /**\n * \\@docsNotRequired\n * @return {?}\n */\n toString() {\n return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\n/**\n * \\@whatItDoes Represents the start of the Guard phase of routing.\n *\n * \\@experimental\n */\nclass GuardsCheckStart extends RouterEvent {\n /**\n * @param {?} id\n * @param {?} url\n * @param {?} urlAfterRedirects\n * @param {?} state\n */\n constructor(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n /**\n * @return {?}\n */\n toString() {\n return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\n/**\n * \\@whatItDoes Represents the end of the Guard phase of routing.\n *\n * \\@experimental\n */\nclass GuardsCheckEnd extends RouterEvent {\n /**\n * @param {?} id\n * @param {?} url\n * @param {?} urlAfterRedirects\n * @param {?} state\n * @param {?} shouldActivate\n */\n constructor(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, urlAfterRedirects, state, shouldActivate) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n this.shouldActivate = shouldActivate;\n }\n /**\n * @return {?}\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 * \\@whatItDoes Represents the start of the Resolve phase of routing. The timing of this\n * event may change, thus it's experimental. In the current iteration it will run\n * in the \"resolve\" phase whether there's things to resolve or not. In the future this\n * behavior may change to only run when there are things to be resolved.\n *\n * \\@experimental\n */\nclass ResolveStart extends RouterEvent {\n /**\n * @param {?} id\n * @param {?} url\n * @param {?} urlAfterRedirects\n * @param {?} state\n */\n constructor(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n /**\n * @return {?}\n */\n toString() {\n return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\n/**\n * \\@whatItDoes Represents the end of the Resolve phase of routing. See note on\n * {\\@link ResolveStart} for use of this experimental API.\n *\n * \\@experimental\n */\nclass ResolveEnd extends RouterEvent {\n /**\n * @param {?} id\n * @param {?} url\n * @param {?} urlAfterRedirects\n * @param {?} state\n */\n constructor(/** @docsNotRequired */\n /** @docsNotRequired */\n id, /** @docsNotRequired */\n /** @docsNotRequired */\n url, urlAfterRedirects, state) {\n super(id, url);\n this.urlAfterRedirects = urlAfterRedirects;\n this.state = state;\n }\n /**\n * @return {?}\n */\n toString() {\n return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\n/**\n * \\@whatItDoes Represents an event triggered before lazy loading a route config.\n *\n * \\@experimental\n */\nclass RouteConfigLoadStart {\n /**\n * @param {?} route\n */\n constructor(route) {\n this.route = route;\n }\n /**\n * @return {?}\n */\n toString() { return `RouteConfigLoadStart(path: ${this.route.path})`; }\n}\n/**\n * \\@whatItDoes Represents an event triggered when a route has been lazy loaded.\n *\n * \\@experimental\n */\nclass RouteConfigLoadEnd {\n /**\n * @param {?} route\n */\n constructor(route) {\n this.route = route;\n }\n /**\n * @return {?}\n */\n toString() { return `RouteConfigLoadEnd(path: ${this.route.path})`; }\n}\n/**\n * \\@whatItDoes Represents the start of end of the Resolve phase of routing. See note on\n * {\\@link ChildActivationEnd} for use of this experimental API.\n *\n * \\@experimental\n */\nclass ChildActivationStart {\n /**\n * @param {?} snapshot\n */\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n /**\n * @return {?}\n */\n toString() {\n const /** @type {?} */ path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ChildActivationStart(path: '${path}')`;\n }\n}\n/**\n * \\@whatItDoes Represents the start of end of the Resolve phase of routing. See note on\n * {\\@link ChildActivationStart} for use of this experimental API.\n *\n * \\@experimental\n */\nclass ChildActivationEnd {\n /**\n * @param {?} snapshot\n */\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n /**\n * @return {?}\n */\n toString() {\n const /** @type {?} */ path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ChildActivationEnd(path: '${path}')`;\n }\n}\n/**\n * \\@whatItDoes Represents the start of end of the Resolve phase of routing. See note on\n * {\\@link ActivationEnd} for use of this experimental API.\n *\n * \\@experimental\n */\nclass ActivationStart {\n /**\n * @param {?} snapshot\n */\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n /**\n * @return {?}\n */\n toString() {\n const /** @type {?} */ path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ActivationStart(path: '${path}')`;\n }\n}\n/**\n * \\@whatItDoes Represents the start of end of the Resolve phase of routing. See note on\n * {\\@link ActivationStart} for use of this experimental API.\n *\n * \\@experimental\n */\nclass ActivationEnd {\n /**\n * @param {?} snapshot\n */\n constructor(snapshot) {\n this.snapshot = snapshot;\n }\n /**\n * @return {?}\n */\n toString() {\n const /** @type {?} */ path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n return `ActivationEnd(path: '${path}')`;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Name of the primary outlet.\n *\n * \\@stable\n */\nconst PRIMARY_OUTLET = 'primary';\n/**\n * Matrix and Query parameters.\n *\n * `ParamMap` makes it easier to work with parameters as they could have either a single value or\n * multiple value. Because this should be known by the user, calling `get` or `getAll` returns the\n * correct type (either `string` or `string[]`).\n *\n * The API is inspired by the URLSearchParams interface.\n * see https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams\n *\n * \\@stable\n * @record\n */\n\nclass ParamsAsMap {\n /**\n * @param {?} params\n */\n constructor(params) { this.params = params || {}; }\n /**\n * @param {?} name\n * @return {?}\n */\n has(name) { return this.params.hasOwnProperty(name); }\n /**\n * @param {?} name\n * @return {?}\n */\n get(name) {\n if (this.has(name)) {\n const /** @type {?} */ v = this.params[name];\n return Array.isArray(v) ? v[0] : v;\n }\n return null;\n }\n /**\n * @param {?} name\n * @return {?}\n */\n getAll(name) {\n if (this.has(name)) {\n const /** @type {?} */ v = this.params[name];\n return Array.isArray(v) ? v : [v];\n }\n return [];\n }\n /**\n * @return {?}\n */\n get keys() { return Object.keys(this.params); }\n}\n/**\n * Convert a {\\@link Params} instance to a {\\@link ParamMap}.\n *\n * \\@stable\n * @param {?} params\n * @return {?}\n */\nfunction convertToParamMap(params) {\n return new ParamsAsMap(params);\n}\nconst NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\n/**\n * @param {?} message\n * @return {?}\n */\nfunction navigationCancelingError(message) {\n const /** @type {?} */ error = Error('NavigationCancelingError: ' + message);\n (/** @type {?} */ (error))[NAVIGATION_CANCELING_ERROR] = true;\n return error;\n}\n/**\n * @param {?} error\n * @return {?}\n */\nfunction isNavigationCancelingError(error) {\n return error && (/** @type {?} */ (error))[NAVIGATION_CANCELING_ERROR];\n}\n/**\n * @param {?} segments\n * @param {?} segmentGroup\n * @param {?} route\n * @return {?}\n */\nfunction defaultUrlMatcher(segments, segmentGroup, route) {\n const /** @type {?} */ parts = /** @type {?} */ ((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' &&\n (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 /** @type {?} */ posParams = {};\n // Check each config part against the actual URL\n for (let /** @type {?} */ index = 0; index < parts.length; index++) {\n const /** @type {?} */ part = parts[index];\n const /** @type {?} */ segment = segments[index];\n const /** @type {?} */ isParameter = part.startsWith(':');\n if (isParameter) {\n posParams[part.substring(1)] = segment;\n }\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 { consumed: segments.slice(0, parts.length), posParams };\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * See {\\@link Routes} for more details.\n * \\@stable\n * @record\n */\n\nclass LoadedRouterConfig {\n /**\n * @param {?} routes\n * @param {?} module\n */\n constructor(routes, module) {\n this.routes = routes;\n this.module = module;\n }\n}\n/**\n * @param {?} config\n * @param {?=} parentPath\n * @return {?}\n */\nfunction validateConfig(config, parentPath = '') {\n // forEach doesn't iterate undefined values\n for (let /** @type {?} */ i = 0; i < config.length; i++) {\n const /** @type {?} */ route = config[i];\n const /** @type {?} */ fullPath = getFullPath(parentPath, route);\n validateNode(route, fullPath);\n }\n}\n/**\n * @param {?} route\n * @param {?} fullPath\n * @return {?}\n */\nfunction validateNode(route, fullPath) {\n if (!route) {\n throw new Error(`\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 Error(`Invalid configuration of route '${fullPath}': Array cannot be specified`);\n }\n if (!route.component && (route.outlet && route.outlet !== PRIMARY_OUTLET)) {\n throw new Error(`Invalid configuration of route '${fullPath}': a componentless route cannot have a named outlet set`);\n }\n if (route.redirectTo && route.children) {\n throw new Error(`Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);\n }\n if (route.redirectTo && route.loadChildren) {\n throw new Error(`Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);\n }\n if (route.children && route.loadChildren) {\n throw new Error(`Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);\n }\n if (route.redirectTo && route.component) {\n throw new Error(`Invalid configuration of route '${fullPath}': redirectTo and component cannot be used together`);\n }\n if (route.path && route.matcher) {\n throw new Error(`Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);\n }\n if (route.redirectTo === void 0 && !route.component && !route.children && !route.loadChildren) {\n throw new Error(`Invalid configuration of route '${fullPath}'. One of the following must be provided: component, redirectTo, children or loadChildren`);\n }\n if (route.path === void 0 && route.matcher === void 0) {\n throw new Error(`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 Error(`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 /** @type {?} */ exp = `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;\n throw new Error(`Invalid configuration of route '{path: \"${fullPath}\", redirectTo: \"${route.redirectTo}\"}': please provide 'pathMatch'. ${exp}`);\n }\n if (route.pathMatch !== void 0 && route.pathMatch !== 'full' && route.pathMatch !== 'prefix') {\n throw new Error(`Invalid configuration of route '${fullPath}': pathMatch can only be set to 'prefix' or 'full'`);\n }\n if (route.children) {\n validateConfig(route.children, fullPath);\n }\n}\n/**\n * @param {?} parentPath\n * @param {?} currentRoute\n * @return {?}\n */\nfunction getFullPath(parentPath, currentRoute) {\n if (!currentRoute) {\n return parentPath;\n }\n if (!parentPath && !currentRoute.path) {\n return '';\n }\n else if (parentPath && !currentRoute.path) {\n return `${parentPath}/`;\n }\n else if (!parentPath && currentRoute.path) {\n return currentRoute.path;\n }\n else {\n return `${parentPath}/${currentRoute.path}`;\n }\n}\n/**\n * @param {?} r\n * @return {?}\n */\nfunction copyConfig(r) {\n const /** @type {?} */ children = r.children && r.children.map(copyConfig);\n return children ? Object.assign({}, r, { children }) : Object.assign({}, r);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction shallowEqualArrays(a, b) {\n if (a.length !== b.length)\n return false;\n for (let /** @type {?} */ i = 0; i < a.length; ++i) {\n if (!shallowEqual(a[i], b[i]))\n return false;\n }\n return true;\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction shallowEqual(a, b) {\n const /** @type {?} */ k1 = Object.keys(a);\n const /** @type {?} */ k2 = Object.keys(b);\n if (k1.length != k2.length) {\n return false;\n }\n let /** @type {?} */ key;\n for (let /** @type {?} */ i = 0; i < k1.length; i++) {\n key = k1[i];\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Flattens single-level nested arrays.\n * @template T\n * @param {?} arr\n * @return {?}\n */\nfunction flatten(arr) {\n return Array.prototype.concat.apply([], arr);\n}\n/**\n * Return the last element of an array.\n * @template T\n * @param {?} a\n * @return {?}\n */\nfunction last$1(a) {\n return a.length > 0 ? a[a.length - 1] : null;\n}\n/**\n * Verifys all booleans in an array are `true`.\n * @param {?} bools\n * @return {?}\n */\n\n/**\n * @template K, V\n * @param {?} map\n * @param {?} callback\n * @return {?}\n */\nfunction forEach(map$$1, callback) {\n for (const /** @type {?} */ prop in map$$1) {\n if (map$$1.hasOwnProperty(prop)) {\n callback(map$$1[prop], prop);\n }\n }\n}\n/**\n * @template A, B\n * @param {?} obj\n * @param {?} fn\n * @return {?}\n */\nfunction waitForMap(obj, fn) {\n if (Object.keys(obj).length === 0) {\n return of({});\n }\n const /** @type {?} */ waitHead = [];\n const /** @type {?} */ waitTail = [];\n const /** @type {?} */ res = {};\n forEach(obj, (a, k) => {\n const /** @type {?} */ mapped = map.call(fn(k, a), (r) => res[k] = r);\n if (k === PRIMARY_OUTLET) {\n waitHead.push(mapped);\n }\n else {\n waitTail.push(mapped);\n }\n });\n const /** @type {?} */ concat$ = concatAll.call(of(...waitHead, ...waitTail));\n const /** @type {?} */ last$ = last.call(concat$);\n return map.call(last$, () => res);\n}\n/**\n * ANDs Observables by merging all input observables, reducing to an Observable verifying all\n * input Observables return `true`.\n * @param {?} observables\n * @return {?}\n */\nfunction andObservables(observables) {\n const /** @type {?} */ merged$ = mergeAll.call(observables);\n return every.call(merged$, (result) => result === true);\n}\n/**\n * @template T\n * @param {?} value\n * @return {?}\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 fromPromise(Promise.resolve(value));\n }\n return of(/** @type {?} */ (value));\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @return {?}\n */\nfunction createEmptyUrlTree() {\n return new UrlTree(new UrlSegmentGroup([], {}), {}, null);\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @param {?} exact\n * @return {?}\n */\nfunction containsTree(container, containee, exact) {\n if (exact) {\n return equalQueryParams(container.queryParams, containee.queryParams) &&\n equalSegmentGroups(container.root, containee.root);\n }\n return containsQueryParams(container.queryParams, containee.queryParams) &&\n containsSegmentGroup(container.root, containee.root);\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @return {?}\n */\nfunction equalQueryParams(container, containee) {\n return shallowEqual(container, containee);\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @return {?}\n */\nfunction equalSegmentGroups(container, containee) {\n if (!equalPath(container.segments, containee.segments))\n return false;\n if (container.numberOfChildren !== containee.numberOfChildren)\n return false;\n for (const /** @type {?} */ c in containee.children) {\n if (!container.children[c])\n return false;\n if (!equalSegmentGroups(container.children[c], containee.children[c]))\n return false;\n }\n return true;\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @return {?}\n */\nfunction containsQueryParams(container, containee) {\n return Object.keys(containee).length <= Object.keys(container).length &&\n Object.keys(containee).every(key => containee[key] === container[key]);\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @return {?}\n */\nfunction containsSegmentGroup(container, containee) {\n return containsSegmentGroupHelper(container, containee, containee.segments);\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @param {?} containeePaths\n * @return {?}\n */\nfunction containsSegmentGroupHelper(container, containee, containeePaths) {\n if (container.segments.length > containeePaths.length) {\n const /** @type {?} */ current = container.segments.slice(0, containeePaths.length);\n if (!equalPath(current, containeePaths))\n return false;\n if (containee.hasChildren())\n return false;\n return true;\n }\n else if (container.segments.length === containeePaths.length) {\n if (!equalPath(container.segments, containeePaths))\n return false;\n for (const /** @type {?} */ c in containee.children) {\n if (!container.children[c])\n return false;\n if (!containsSegmentGroup(container.children[c], containee.children[c]))\n return false;\n }\n return true;\n }\n else {\n const /** @type {?} */ current = containeePaths.slice(0, container.segments.length);\n const /** @type {?} */ next = containeePaths.slice(container.segments.length);\n if (!equalPath(container.segments, current))\n return false;\n if (!container.children[PRIMARY_OUTLET])\n return false;\n return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next);\n }\n}\n/**\n * \\@whatItDoes Represents the parsed URL.\n *\n * \\@howToUse\n *\n * ```\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 * \\@description\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 * \\@stable\n */\nclass UrlTree {\n /**\n * \\@internal\n * @param {?} root\n * @param {?} queryParams\n * @param {?} fragment\n */\n constructor(root, queryParams, fragment) {\n this.root = root;\n this.queryParams = queryParams;\n this.fragment = fragment;\n }\n /**\n * @return {?}\n */\n get queryParamMap() {\n if (!this._queryParamMap) {\n this._queryParamMap = convertToParamMap(this.queryParams);\n }\n return this._queryParamMap;\n }\n /**\n * \\@docsNotRequired\n * @return {?}\n */\n toString() { return DEFAULT_SERIALIZER.serialize(this); }\n}\n/**\n * \\@whatItDoes Represents the parsed URL segment group.\n *\n * See {\\@link UrlTree} for more information.\n *\n * \\@stable\n */\nclass UrlSegmentGroup {\n /**\n * @param {?} segments\n * @param {?} children\n */\n constructor(segments, children) {\n this.segments = segments;\n this.children = children;\n /**\n * The parent node in the url tree\n */\n this.parent = null;\n forEach(children, (v, k) => v.parent = this);\n }\n /**\n * Whether the segment has child segments\n * @return {?}\n */\n hasChildren() { return this.numberOfChildren > 0; }\n /**\n * Number of child segments\n * @return {?}\n */\n get numberOfChildren() { return Object.keys(this.children).length; }\n /**\n * \\@docsNotRequired\n * @return {?}\n */\n toString() { return serializePaths(this); }\n}\n/**\n * \\@whatItDoes Represents a single URL segment.\n *\n * \\@howToUse\n *\n * ```\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 * \\@description\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 * \\@stable\n */\nclass UrlSegment {\n /**\n * @param {?} path\n * @param {?} parameters\n */\n constructor(path, parameters) {\n this.path = path;\n this.parameters = parameters;\n }\n /**\n * @return {?}\n */\n get parameterMap() {\n if (!this._parameterMap) {\n this._parameterMap = convertToParamMap(this.parameters);\n }\n return this._parameterMap;\n }\n /**\n * \\@docsNotRequired\n * @return {?}\n */\n toString() { return serializePath(this); }\n}\n/**\n * @param {?} as\n * @param {?} bs\n * @return {?}\n */\nfunction equalSegments(as, bs) {\n return equalPath(as, bs) && as.every((a, i) => shallowEqual(a.parameters, bs[i].parameters));\n}\n/**\n * @param {?} as\n * @param {?} bs\n * @return {?}\n */\nfunction equalPath(as, bs) {\n if (as.length !== bs.length)\n return false;\n return as.every((a, i) => a.path === bs[i].path);\n}\n/**\n * @template T\n * @param {?} segment\n * @param {?} fn\n * @return {?}\n */\nfunction mapChildrenIntoArray(segment, fn) {\n let /** @type {?} */ res = [];\n forEach(segment.children, (child, childOutlet) => {\n if (childOutlet === PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n forEach(segment.children, (child, childOutlet) => {\n if (childOutlet !== PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n return res;\n}\n/**\n * \\@whatItDoes Serializes and deserializes a URL string into a URL tree.\n *\n * \\@description The url serialization strategy is customizable. You can\n * make all URLs case insensitive by providing a custom UrlSerializer.\n *\n * See {\\@link DefaultUrlSerializer} for an example of a URL serializer.\n *\n * \\@stable\n * @abstract\n */\nclass UrlSerializer {\n}\n/**\n * \\@whatItDoes A default implementation of the {\\@link UrlSerializer}.\n *\n * \\@description\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 * \\@stable\n */\nclass DefaultUrlSerializer {\n /**\n * Parses a url into a {\\@link UrlTree}\n * @param {?} url\n * @return {?}\n */\n parse(url) {\n const /** @type {?} */ p = new UrlParser(url);\n return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());\n }\n /**\n * Converts a {\\@link UrlTree} into a url\n * @param {?} tree\n * @return {?}\n */\n serialize(tree) {\n const /** @type {?} */ segment = `/${serializeSegment(tree.root, true)}`;\n const /** @type {?} */ query = serializeQueryParams(tree.queryParams);\n const /** @type {?} */ fragment = typeof tree.fragment === `string` ? `#${encodeUriFragment((/** @type {?} */ ((tree.fragment))))}` : '';\n return `${segment}${query}${fragment}`;\n }\n}\nconst DEFAULT_SERIALIZER = new DefaultUrlSerializer();\n/**\n * @param {?} segment\n * @return {?}\n */\nfunction serializePaths(segment) {\n return segment.segments.map(p => serializePath(p)).join('/');\n}\n/**\n * @param {?} segment\n * @param {?} root\n * @return {?}\n */\nfunction serializeSegment(segment, root) {\n if (!segment.hasChildren()) {\n return serializePaths(segment);\n }\n if (root) {\n const /** @type {?} */ primary = segment.children[PRIMARY_OUTLET] ?\n serializeSegment(segment.children[PRIMARY_OUTLET], false) :\n '';\n const /** @type {?} */ children = [];\n forEach(segment.children, (v, k) => {\n if (k !== PRIMARY_OUTLET) {\n children.push(`${k}:${serializeSegment(v, false)}`);\n }\n });\n return children.length > 0 ? `${primary}(${children.join('//')})` : primary;\n }\n else {\n const /** @type {?} */ 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 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 * @param {?} s\n * @return {?}\n */\nfunction encodeUriString(s) {\n return encodeURIComponent(s)\n .replace(/%40/g, '@')\n .replace(/%3A/gi, ':')\n .replace(/%24/g, '$')\n .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 * @param {?} s\n * @return {?}\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 * @param {?} s\n * @return {?}\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 * @param {?} s\n * @return {?}\n */\nfunction encodeUriSegment(s) {\n return encodeUriString(s).replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/%26/gi, '&');\n}\n/**\n * @param {?} s\n * @return {?}\n */\nfunction decode(s) {\n return decodeURIComponent(s);\n}\n/**\n * @param {?} s\n * @return {?}\n */\nfunction decodeQuery(s) {\n return decode(s.replace(/\\+/g, '%20'));\n}\n/**\n * @param {?} path\n * @return {?}\n */\nfunction serializePath(path) {\n return `${encodeUriSegment(path.path)}${serializeMatrixParams(path.parameters)}`;\n}\n/**\n * @param {?} params\n * @return {?}\n */\nfunction serializeMatrixParams(params) {\n return Object.keys(params)\n .map(key => `;${encodeUriSegment(key)}=${encodeUriSegment(params[key])}`)\n .join('');\n}\n/**\n * @param {?} params\n * @return {?}\n */\nfunction serializeQueryParams(params) {\n const /** @type {?} */ strParams = Object.keys(params).map((name) => {\n const /** @type {?} */ value = params[name];\n return Array.isArray(value) ?\n value.map(v => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`).join('&') :\n `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;\n });\n return strParams.length ? `?${strParams.join(\"&\")}` : '';\n}\nconst SEGMENT_RE = /^[^\\/()?;=&#]+/;\n/**\n * @param {?} str\n * @return {?}\n */\nfunction matchSegments(str) {\n const /** @type {?} */ match = str.match(SEGMENT_RE);\n return match ? match[0] : '';\n}\nconst QUERY_PARAM_RE = /^[^=?&#]+/;\n/**\n * @param {?} str\n * @return {?}\n */\nfunction matchQueryParams(str) {\n const /** @type {?} */ match = str.match(QUERY_PARAM_RE);\n return match ? match[0] : '';\n}\nconst QUERY_PARAM_VALUE_RE = /^[^?&#]+/;\n/**\n * @param {?} str\n * @return {?}\n */\nfunction matchUrlQueryParamValue(str) {\n const /** @type {?} */ match = str.match(QUERY_PARAM_VALUE_RE);\n return match ? match[0] : '';\n}\nclass UrlParser {\n /**\n * @param {?} url\n */\n constructor(url) {\n this.url = url;\n this.remaining = url;\n }\n /**\n * @return {?}\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 /**\n * @return {?}\n */\n parseQueryParams() {\n const /** @type {?} */ params = {};\n if (this.consumeOptional('?')) {\n do {\n this.parseQueryParam(params);\n } while (this.consumeOptional('&'));\n }\n return params;\n }\n /**\n * @return {?}\n */\n parseFragment() {\n return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;\n }\n /**\n * @return {?}\n */\n parseChildren() {\n if (this.remaining === '') {\n return {};\n }\n this.consumeOptional('/');\n const /** @type {?} */ 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 /** @type {?} */ children = {};\n if (this.peekStartsWith('/(')) {\n this.capture('/');\n children = this.parseParens(true);\n }\n let /** @type {?} */ 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 /**\n * @return {?}\n */\n parseSegment() {\n const /** @type {?} */ path = matchSegments(this.remaining);\n if (path === '' && this.peekStartsWith(';')) {\n throw new Error(`Empty path url segment cannot have parameters: '${this.remaining}'.`);\n }\n this.capture(path);\n return new UrlSegment(decode(path), this.parseMatrixParams());\n }\n /**\n * @return {?}\n */\n parseMatrixParams() {\n const /** @type {?} */ params = {};\n while (this.consumeOptional(';')) {\n this.parseParam(params);\n }\n return params;\n }\n /**\n * @param {?} params\n * @return {?}\n */\n parseParam(params) {\n const /** @type {?} */ key = matchSegments(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n let /** @type {?} */ value = '';\n if (this.consumeOptional('=')) {\n const /** @type {?} */ valueMatch = matchSegments(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n params[decode(key)] = decode(value);\n }\n /**\n * @param {?} params\n * @return {?}\n */\n parseQueryParam(params) {\n const /** @type {?} */ key = matchQueryParams(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n let /** @type {?} */ value = '';\n if (this.consumeOptional('=')) {\n const /** @type {?} */ valueMatch = matchUrlQueryParamValue(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n const /** @type {?} */ decodedKey = decodeQuery(key);\n const /** @type {?} */ decodedVal = decodeQuery(value);\n if (params.hasOwnProperty(decodedKey)) {\n // Append to existing values\n let /** @type {?} */ currentVal = params[decodedKey];\n if (!Array.isArray(currentVal)) {\n currentVal = [currentVal];\n params[decodedKey] = currentVal;\n }\n currentVal.push(decodedVal);\n }\n else {\n // Create a new value\n params[decodedKey] = decodedVal;\n }\n }\n /**\n * @param {?} allowPrimary\n * @return {?}\n */\n parseParens(allowPrimary) {\n const /** @type {?} */ segments = {};\n this.capture('(');\n while (!this.consumeOptional(')') && this.remaining.length > 0) {\n const /** @type {?} */ path = matchSegments(this.remaining);\n const /** @type {?} */ 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 Error(`Cannot parse url '${this.url}'`);\n }\n let /** @type {?} */ outletName = /** @type {?} */ ((undefined));\n if (path.indexOf(':') > -1) {\n outletName = path.substr(0, path.indexOf(':'));\n this.capture(outletName);\n this.capture(':');\n }\n else if (allowPrimary) {\n outletName = PRIMARY_OUTLET;\n }\n const /** @type {?} */ children = this.parseChildren();\n segments[outletName] = Object.keys(children).length === 1 ? children[PRIMARY_OUTLET] :\n new UrlSegmentGroup([], children);\n this.consumeOptional('//');\n }\n return segments;\n }\n /**\n * @param {?} str\n * @return {?}\n */\n peekStartsWith(str) { return this.remaining.startsWith(str); }\n /**\n * @param {?} str\n * @return {?}\n */\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 /**\n * @param {?} str\n * @return {?}\n */\n capture(str) {\n if (!this.consumeOptional(str)) {\n throw new Error(`Expected \"${str}\".`);\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass NoMatch {\n /**\n * @param {?=} segmentGroup\n */\n constructor(segmentGroup) { this.segmentGroup = segmentGroup || null; }\n}\nclass AbsoluteRedirect {\n /**\n * @param {?} urlTree\n */\n constructor(urlTree) {\n this.urlTree = urlTree;\n }\n}\n/**\n * @param {?} segmentGroup\n * @return {?}\n */\nfunction noMatch(segmentGroup) {\n return new Observable((obs) => obs.error(new NoMatch(segmentGroup)));\n}\n/**\n * @param {?} newTree\n * @return {?}\n */\nfunction absoluteRedirect(newTree) {\n return new Observable((obs) => obs.error(new AbsoluteRedirect(newTree)));\n}\n/**\n * @param {?} redirectTo\n * @return {?}\n */\nfunction namedOutletsRedirect(redirectTo) {\n return new Observable((obs) => obs.error(new Error(`Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`)));\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction canLoadFails(route) {\n return new Observable((obs) => obs.error(navigationCancelingError(`Cannot load children because the guard of the route \"path: '${route.path}'\" returned false`)));\n}\n/**\n * Returns the `UrlTree` with the redirection applied.\n *\n * Lazy modules are loaded along the way.\n * @param {?} moduleInjector\n * @param {?} configLoader\n * @param {?} urlSerializer\n * @param {?} urlTree\n * @param {?} config\n * @return {?}\n */\nfunction applyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config) {\n return new ApplyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config).apply();\n}\nclass ApplyRedirects {\n /**\n * @param {?} moduleInjector\n * @param {?} configLoader\n * @param {?} urlSerializer\n * @param {?} urlTree\n * @param {?} config\n */\n constructor(moduleInjector, configLoader, urlSerializer, urlTree, config) {\n this.configLoader = configLoader;\n this.urlSerializer = urlSerializer;\n this.urlTree = urlTree;\n this.config = config;\n this.allowRedirects = true;\n this.ngModule = moduleInjector.get(NgModuleRef);\n }\n /**\n * @return {?}\n */\n apply() {\n const /** @type {?} */ expanded$ = this.expandSegmentGroup(this.ngModule, this.config, this.urlTree.root, PRIMARY_OUTLET);\n const /** @type {?} */ urlTrees$ = map.call(expanded$, (rootSegmentGroup) => this.createUrlTree(rootSegmentGroup, this.urlTree.queryParams, /** @type {?} */ ((this.urlTree.fragment))));\n return _catch.call(urlTrees$, (e) => {\n if (e instanceof AbsoluteRedirect) {\n // after an absolute redirect we do not apply any more redirects!\n this.allowRedirects = false;\n // we need to run matching, so we can fetch all lazy-loaded modules\n return this.match(e.urlTree);\n }\n if (e instanceof NoMatch) {\n throw this.noMatchError(e);\n }\n throw e;\n });\n }\n /**\n * @param {?} tree\n * @return {?}\n */\n match(tree) {\n const /** @type {?} */ expanded$ = this.expandSegmentGroup(this.ngModule, this.config, tree.root, PRIMARY_OUTLET);\n const /** @type {?} */ mapped$ = map.call(expanded$, (rootSegmentGroup) => this.createUrlTree(rootSegmentGroup, tree.queryParams, /** @type {?} */ ((tree.fragment))));\n return _catch.call(mapped$, (e) => {\n if (e instanceof NoMatch) {\n throw this.noMatchError(e);\n }\n throw e;\n });\n }\n /**\n * @param {?} e\n * @return {?}\n */\n noMatchError(e) {\n return new Error(`Cannot match any routes. URL Segment: '${e.segmentGroup}'`);\n }\n /**\n * @param {?} rootCandidate\n * @param {?} queryParams\n * @param {?} fragment\n * @return {?}\n */\n createUrlTree(rootCandidate, queryParams, fragment) {\n const /** @type {?} */ root = rootCandidate.segments.length > 0 ?\n new UrlSegmentGroup([], { [PRIMARY_OUTLET]: rootCandidate }) :\n rootCandidate;\n return new UrlTree(root, queryParams, fragment);\n }\n /**\n * @param {?} ngModule\n * @param {?} routes\n * @param {?} segmentGroup\n * @param {?} outlet\n * @return {?}\n */\n expandSegmentGroup(ngModule, routes, segmentGroup, outlet) {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return map.call(this.expandChildren(ngModule, routes, segmentGroup), (children) => new UrlSegmentGroup([], children));\n }\n return this.expandSegment(ngModule, segmentGroup, routes, segmentGroup.segments, outlet, true);\n }\n /**\n * @param {?} ngModule\n * @param {?} routes\n * @param {?} segmentGroup\n * @return {?}\n */\n expandChildren(ngModule, routes, segmentGroup) {\n return waitForMap(segmentGroup.children, (childOutlet, child) => this.expandSegmentGroup(ngModule, routes, child, childOutlet));\n }\n /**\n * @param {?} ngModule\n * @param {?} segmentGroup\n * @param {?} routes\n * @param {?} segments\n * @param {?} outlet\n * @param {?} allowRedirects\n * @return {?}\n */\n expandSegment(ngModule, segmentGroup, routes, segments, outlet, allowRedirects) {\n const /** @type {?} */ routes$ = of(...routes);\n const /** @type {?} */ processedRoutes$ = map.call(routes$, (r) => {\n const /** @type {?} */ expanded$ = this.expandSegmentAgainstRoute(ngModule, segmentGroup, routes, r, segments, outlet, allowRedirects);\n return _catch.call(expanded$, (e) => {\n if (e instanceof NoMatch) {\n return of(null);\n }\n throw e;\n });\n });\n const /** @type {?} */ concattedProcessedRoutes$ = concatAll.call(processedRoutes$);\n const /** @type {?} */ first$ = first.call(concattedProcessedRoutes$, (s) => !!s);\n return _catch.call(first$, (e, _) => {\n if (e instanceof EmptyError || e.name === 'EmptyError') {\n if (this.noLeftoversInUrl(segmentGroup, segments, outlet)) {\n return of(new UrlSegmentGroup([], {}));\n }\n throw new NoMatch(segmentGroup);\n }\n throw e;\n });\n }\n /**\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\n noLeftoversInUrl(segmentGroup, segments, outlet) {\n return segments.length === 0 && !segmentGroup.children[outlet];\n }\n /**\n * @param {?} ngModule\n * @param {?} segmentGroup\n * @param {?} routes\n * @param {?} route\n * @param {?} paths\n * @param {?} outlet\n * @param {?} allowRedirects\n * @return {?}\n */\n expandSegmentAgainstRoute(ngModule, segmentGroup, routes, route, paths, outlet, allowRedirects) {\n if (getOutlet(route) !== outlet) {\n return noMatch(segmentGroup);\n }\n if (route.redirectTo === undefined) {\n return this.matchSegmentAgainstRoute(ngModule, segmentGroup, route, paths);\n }\n if (allowRedirects && this.allowRedirects) {\n return this.expandSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, paths, outlet);\n }\n return noMatch(segmentGroup);\n }\n /**\n * @param {?} ngModule\n * @param {?} segmentGroup\n * @param {?} routes\n * @param {?} route\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\n expandSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet) {\n if (route.path === '**') {\n return this.expandWildCardWithParamsAgainstRouteUsingRedirect(ngModule, routes, route, outlet);\n }\n return this.expandRegularSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet);\n }\n /**\n * @param {?} ngModule\n * @param {?} routes\n * @param {?} route\n * @param {?} outlet\n * @return {?}\n */\n expandWildCardWithParamsAgainstRouteUsingRedirect(ngModule, routes, route, outlet) {\n const /** @type {?} */ newTree = this.applyRedirectCommands([], /** @type {?} */ ((route.redirectTo)), {});\n if (/** @type {?} */ ((route.redirectTo)).startsWith('/')) {\n return absoluteRedirect(newTree);\n }\n return mergeMap.call(this.lineralizeSegments(route, newTree), (newSegments) => {\n const /** @type {?} */ group = new UrlSegmentGroup(newSegments, {});\n return this.expandSegment(ngModule, group, routes, newSegments, outlet, false);\n });\n }\n /**\n * @param {?} ngModule\n * @param {?} segmentGroup\n * @param {?} routes\n * @param {?} route\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\n expandRegularSegmentAgainstRouteUsingRedirect(ngModule, segmentGroup, routes, route, segments, outlet) {\n const { matched, consumedSegments, lastChild, positionalParamSegments } = match(segmentGroup, route, segments);\n if (!matched)\n return noMatch(segmentGroup);\n const /** @type {?} */ newTree = this.applyRedirectCommands(consumedSegments, /** @type {?} */ ((route.redirectTo)), /** @type {?} */ (positionalParamSegments));\n if (/** @type {?} */ ((route.redirectTo)).startsWith('/')) {\n return absoluteRedirect(newTree);\n }\n return mergeMap.call(this.lineralizeSegments(route, newTree), (newSegments) => {\n return this.expandSegment(ngModule, segmentGroup, routes, newSegments.concat(segments.slice(lastChild)), outlet, false);\n });\n }\n /**\n * @param {?} ngModule\n * @param {?} rawSegmentGroup\n * @param {?} route\n * @param {?} segments\n * @return {?}\n */\n matchSegmentAgainstRoute(ngModule, rawSegmentGroup, route, segments) {\n if (route.path === '**') {\n if (route.loadChildren) {\n return map.call(this.configLoader.load(ngModule.injector, route), (cfg) => {\n route._loadedConfig = cfg;\n return new UrlSegmentGroup(segments, {});\n });\n }\n return of(new UrlSegmentGroup(segments, {}));\n }\n const { matched, consumedSegments, lastChild } = match(rawSegmentGroup, route, segments);\n if (!matched)\n return noMatch(rawSegmentGroup);\n const /** @type {?} */ rawSlicedSegments = segments.slice(lastChild);\n const /** @type {?} */ childConfig$ = this.getChildConfig(ngModule, route);\n return mergeMap.call(childConfig$, (routerConfig) => {\n const /** @type {?} */ childModule = routerConfig.module;\n const /** @type {?} */ childConfig = routerConfig.routes;\n const { segmentGroup, slicedSegments } = split(rawSegmentGroup, consumedSegments, rawSlicedSegments, childConfig);\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n const /** @type {?} */ expanded$ = this.expandChildren(childModule, childConfig, segmentGroup);\n return map.call(expanded$, (children) => new UrlSegmentGroup(consumedSegments, children));\n }\n if (childConfig.length === 0 && slicedSegments.length === 0) {\n return of(new UrlSegmentGroup(consumedSegments, {}));\n }\n const /** @type {?} */ expanded$ = this.expandSegment(childModule, segmentGroup, childConfig, slicedSegments, PRIMARY_OUTLET, true);\n return map.call(expanded$, (cs) => new UrlSegmentGroup(consumedSegments.concat(cs.segments), cs.children));\n });\n }\n /**\n * @param {?} ngModule\n * @param {?} route\n * @return {?}\n */\n getChildConfig(ngModule, route) {\n if (route.children) {\n // The children belong to the same module\n return of(new LoadedRouterConfig(route.children, ngModule));\n }\n if (route.loadChildren) {\n // lazy children belong to the loaded module\n if (route._loadedConfig !== undefined) {\n return of(route._loadedConfig);\n }\n return mergeMap.call(runCanLoadGuard(ngModule.injector, route), (shouldLoad) => {\n if (shouldLoad) {\n return map.call(this.configLoader.load(ngModule.injector, route), (cfg) => {\n route._loadedConfig = cfg;\n return cfg;\n });\n }\n return canLoadFails(route);\n });\n }\n return of(new LoadedRouterConfig([], ngModule));\n }\n /**\n * @param {?} route\n * @param {?} urlTree\n * @return {?}\n */\n lineralizeSegments(route, urlTree) {\n let /** @type {?} */ res = [];\n let /** @type {?} */ 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(/** @type {?} */ ((route.redirectTo)));\n }\n c = c.children[PRIMARY_OUTLET];\n }\n }\n /**\n * @param {?} segments\n * @param {?} redirectTo\n * @param {?} posParams\n * @return {?}\n */\n applyRedirectCommands(segments, redirectTo, posParams) {\n return this.applyRedirectCreatreUrlTree(redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);\n }\n /**\n * @param {?} redirectTo\n * @param {?} urlTree\n * @param {?} segments\n * @param {?} posParams\n * @return {?}\n */\n applyRedirectCreatreUrlTree(redirectTo, urlTree, segments, posParams) {\n const /** @type {?} */ newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);\n return new UrlTree(newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams), urlTree.fragment);\n }\n /**\n * @param {?} redirectToParams\n * @param {?} actualParams\n * @return {?}\n */\n createQueryParams(redirectToParams, actualParams) {\n const /** @type {?} */ res = {};\n forEach(redirectToParams, (v, k) => {\n const /** @type {?} */ copySourceValue = typeof v === 'string' && v.startsWith(':');\n if (copySourceValue) {\n const /** @type {?} */ sourceName = v.substring(1);\n res[k] = actualParams[sourceName];\n }\n else {\n res[k] = v;\n }\n });\n return res;\n }\n /**\n * @param {?} redirectTo\n * @param {?} group\n * @param {?} segments\n * @param {?} posParams\n * @return {?}\n */\n createSegmentGroup(redirectTo, group, segments, posParams) {\n const /** @type {?} */ updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);\n let /** @type {?} */ children = {};\n forEach(group.children, (child, name) => {\n children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);\n });\n return new UrlSegmentGroup(updatedSegments, children);\n }\n /**\n * @param {?} redirectTo\n * @param {?} redirectToSegments\n * @param {?} actualSegments\n * @param {?} posParams\n * @return {?}\n */\n createSegments(redirectTo, redirectToSegments, actualSegments, posParams) {\n return redirectToSegments.map(s => s.path.startsWith(':') ? this.findPosParam(redirectTo, s, posParams) :\n this.findOrReturn(s, actualSegments));\n }\n /**\n * @param {?} redirectTo\n * @param {?} redirectToUrlSegment\n * @param {?} posParams\n * @return {?}\n */\n findPosParam(redirectTo, redirectToUrlSegment, posParams) {\n const /** @type {?} */ pos = posParams[redirectToUrlSegment.path.substring(1)];\n if (!pos)\n throw new Error(`Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);\n return pos;\n }\n /**\n * @param {?} redirectToUrlSegment\n * @param {?} actualSegments\n * @return {?}\n */\n findOrReturn(redirectToUrlSegment, actualSegments) {\n let /** @type {?} */ idx = 0;\n for (const /** @type {?} */ 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}\n/**\n * @param {?} moduleInjector\n * @param {?} route\n * @return {?}\n */\nfunction runCanLoadGuard(moduleInjector, route) {\n const /** @type {?} */ canLoad = route.canLoad;\n if (!canLoad || canLoad.length === 0)\n return of(true);\n const /** @type {?} */ obs = map.call(from(canLoad), (injectionToken) => {\n const /** @type {?} */ guard = moduleInjector.get(injectionToken);\n return wrapIntoObservable(guard.canLoad ? guard.canLoad(route) : guard(route));\n });\n return andObservables(obs);\n}\n/**\n * @param {?} segmentGroup\n * @param {?} route\n * @param {?} segments\n * @return {?}\n */\nfunction match(segmentGroup, route, segments) {\n if (route.path === '') {\n if ((route.pathMatch === 'full') && (segmentGroup.hasChildren() || segments.length > 0)) {\n return { matched: false, consumedSegments: [], lastChild: 0, positionalParamSegments: {} };\n }\n return { matched: true, consumedSegments: [], lastChild: 0, positionalParamSegments: {} };\n }\n const /** @type {?} */ matcher = route.matcher || defaultUrlMatcher;\n const /** @type {?} */ res = matcher(segments, segmentGroup, route);\n if (!res) {\n return {\n matched: false,\n consumedSegments: /** @type {?} */ ([]),\n lastChild: 0,\n positionalParamSegments: {},\n };\n }\n return {\n matched: true,\n consumedSegments: /** @type {?} */ ((res.consumed)),\n lastChild: /** @type {?} */ ((res.consumed.length)),\n positionalParamSegments: /** @type {?} */ ((res.posParams)),\n };\n}\n/**\n * @param {?} segmentGroup\n * @param {?} consumedSegments\n * @param {?} slicedSegments\n * @param {?} config\n * @return {?}\n */\nfunction split(segmentGroup, consumedSegments, slicedSegments, config) {\n if (slicedSegments.length > 0 &&\n containsEmptyPathRedirectsWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n const /** @type {?} */ s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptySegments(config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n return { segmentGroup: mergeTrivialChildren(s), slicedSegments: [] };\n }\n if (slicedSegments.length === 0 &&\n containsEmptyPathRedirects(segmentGroup, slicedSegments, config)) {\n const /** @type {?} */ s = new UrlSegmentGroup(segmentGroup.segments, addEmptySegmentsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));\n return { segmentGroup: mergeTrivialChildren(s), slicedSegments };\n }\n return { segmentGroup, slicedSegments };\n}\n/**\n * @param {?} s\n * @return {?}\n */\nfunction mergeTrivialChildren(s) {\n if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {\n const /** @type {?} */ c = s.children[PRIMARY_OUTLET];\n return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);\n }\n return s;\n}\n/**\n * @param {?} segmentGroup\n * @param {?} slicedSegments\n * @param {?} routes\n * @param {?} children\n * @return {?}\n */\nfunction addEmptySegmentsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {\n const /** @type {?} */ res = {};\n for (const /** @type {?} */ r of routes) {\n if (isEmptyPathRedirect(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n res[getOutlet(r)] = new UrlSegmentGroup([], {});\n }\n }\n return Object.assign({}, children, res);\n}\n/**\n * @param {?} routes\n * @param {?} primarySegmentGroup\n * @return {?}\n */\nfunction createChildrenForEmptySegments(routes, primarySegmentGroup) {\n const /** @type {?} */ res = {};\n res[PRIMARY_OUTLET] = primarySegmentGroup;\n for (const /** @type {?} */ r of routes) {\n if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n res[getOutlet(r)] = new UrlSegmentGroup([], {});\n }\n }\n return res;\n}\n/**\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} routes\n * @return {?}\n */\nfunction containsEmptyPathRedirectsWithNamedOutlets(segmentGroup, segments, routes) {\n return routes.some(r => isEmptyPathRedirect(segmentGroup, segments, r) && getOutlet(r) !== PRIMARY_OUTLET);\n}\n/**\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} routes\n * @return {?}\n */\nfunction containsEmptyPathRedirects(segmentGroup, segments, routes) {\n return routes.some(r => isEmptyPathRedirect(segmentGroup, segments, r));\n}\n/**\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} r\n * @return {?}\n */\nfunction isEmptyPathRedirect(segmentGroup, segments, r) {\n if ((segmentGroup.hasChildren() || segments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n return r.path === '' && r.redirectTo !== undefined;\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction getOutlet(route) {\n return route.outlet || PRIMARY_OUTLET;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @template T\n */\nclass Tree {\n /**\n * @param {?} root\n */\n constructor(root) { this._root = root; }\n /**\n * @return {?}\n */\n get root() { return this._root.value; }\n /**\n * \\@internal\n * @param {?} t\n * @return {?}\n */\n parent(t) {\n const /** @type {?} */ p = this.pathFromRoot(t);\n return p.length > 1 ? p[p.length - 2] : null;\n }\n /**\n * \\@internal\n * @param {?} t\n * @return {?}\n */\n children(t) {\n const /** @type {?} */ n = findNode(t, this._root);\n return n ? n.children.map(t => t.value) : [];\n }\n /**\n * \\@internal\n * @param {?} t\n * @return {?}\n */\n firstChild(t) {\n const /** @type {?} */ n = findNode(t, this._root);\n return n && n.children.length > 0 ? n.children[0].value : null;\n }\n /**\n * \\@internal\n * @param {?} t\n * @return {?}\n */\n siblings(t) {\n const /** @type {?} */ p = findPath(t, this._root);\n if (p.length < 2)\n return [];\n const /** @type {?} */ c = p[p.length - 2].children.map(c => c.value);\n return c.filter(cc => cc !== t);\n }\n /**\n * \\@internal\n * @param {?} t\n * @return {?}\n */\n pathFromRoot(t) { return findPath(t, this._root).map(s => s.value); }\n}\n/**\n * @template T\n * @param {?} value\n * @param {?} node\n * @return {?}\n */\nfunction findNode(value, node) {\n if (value === node.value)\n return node;\n for (const /** @type {?} */ child of node.children) {\n const /** @type {?} */ node = findNode(value, child);\n if (node)\n return node;\n }\n return null;\n}\n/**\n * @template T\n * @param {?} value\n * @param {?} node\n * @return {?}\n */\nfunction findPath(value, node) {\n if (value === node.value)\n return [node];\n for (const /** @type {?} */ child of node.children) {\n const /** @type {?} */ path = findPath(value, child);\n if (path.length) {\n path.unshift(node);\n return path;\n }\n }\n return [];\n}\n/**\n * @template T\n */\nclass TreeNode {\n /**\n * @param {?} value\n * @param {?} children\n */\n constructor(value, children) {\n this.value = value;\n this.children = children;\n }\n /**\n * @return {?}\n */\n toString() { return `TreeNode(${this.value})`; }\n}\n/**\n * @template T\n * @param {?} node\n * @return {?}\n */\nfunction nodeChildrenAsMap(node) {\n const /** @type {?} */ map$$1 = {};\n if (node) {\n node.children.forEach(child => map$$1[child.value.outlet] = child);\n }\n return map$$1;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Represents the state of the router.\n *\n * \\@howToUse\n *\n * ```\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 * \\@description\n * RouterState is a tree of activated routes. Every node in this tree knows about the \"consumed\" URL\n * segments, the extracted parameters, and the resolved data.\n *\n * See {\\@link ActivatedRoute} for more information.\n *\n * \\@stable\n */\nclass RouterState extends Tree {\n /**\n * \\@internal\n * @param {?} root\n * @param {?} snapshot\n */\n constructor(root, snapshot) {\n super(root);\n this.snapshot = snapshot;\n setRouterState(/** @type {?} */ (this), root);\n }\n /**\n * @return {?}\n */\n toString() { return this.snapshot.toString(); }\n}\n/**\n * @param {?} urlTree\n * @param {?} rootComponent\n * @return {?}\n */\nfunction createEmptyState(urlTree, rootComponent) {\n const /** @type {?} */ snapshot = createEmptyStateSnapshot(urlTree, rootComponent);\n const /** @type {?} */ emptyUrl = new BehaviorSubject([new UrlSegment('', {})]);\n const /** @type {?} */ emptyParams = new BehaviorSubject({});\n const /** @type {?} */ emptyData = new BehaviorSubject({});\n const /** @type {?} */ emptyQueryParams = new BehaviorSubject({});\n const /** @type {?} */ fragment = new BehaviorSubject('');\n const /** @type {?} */ 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}\n/**\n * @param {?} urlTree\n * @param {?} rootComponent\n * @return {?}\n */\nfunction createEmptyStateSnapshot(urlTree, rootComponent) {\n const /** @type {?} */ emptyParams = {};\n const /** @type {?} */ emptyData = {};\n const /** @type {?} */ emptyQueryParams = {};\n const /** @type {?} */ fragment = '';\n const /** @type {?} */ activated = new ActivatedRouteSnapshot([], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null, urlTree.root, -1, {});\n return new RouterStateSnapshot('', new TreeNode(activated, []));\n}\n/**\n * \\@whatItDoes Contains the information about a route associated with a component loaded in an\n * outlet.\n * An `ActivatedRoute` can also be used to traverse the router state tree.\n *\n * \\@howToUse\n *\n * ```\n * \\@Component({...})\n * class MyComponent {\n * constructor(route: ActivatedRoute) {\n * const id: Observable<string> = route.params.map(p => p.id);\n * const url: Observable<string> = route.url.map(segments => segments.join(''));\n * // route.data includes both `data` and `resolve`\n * const user = route.data.map(d => d.user);\n * }\n * }\n * ```\n *\n * \\@stable\n */\nclass ActivatedRoute {\n /**\n * \\@internal\n * @param {?} url\n * @param {?} params\n * @param {?} queryParams\n * @param {?} fragment\n * @param {?} data\n * @param {?} outlet\n * @param {?} component\n * @param {?} futureSnapshot\n */\n constructor(url, params, queryParams, fragment, data, outlet, component, futureSnapshot) {\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._futureSnapshot = futureSnapshot;\n }\n /**\n * The configuration used to match this route\n * @return {?}\n */\n get routeConfig() { return this._futureSnapshot.routeConfig; }\n /**\n * The root of the router state\n * @return {?}\n */\n get root() { return this._routerState.root; }\n /**\n * The parent of this route in the router state tree\n * @return {?}\n */\n get parent() { return this._routerState.parent(this); }\n /**\n * The first child of this route in the router state tree\n * @return {?}\n */\n get firstChild() { return this._routerState.firstChild(this); }\n /**\n * The children of this route in the router state tree\n * @return {?}\n */\n get children() { return this._routerState.children(this); }\n /**\n * The path from the root of the router state tree to this route\n * @return {?}\n */\n get pathFromRoot() { return this._routerState.pathFromRoot(this); }\n /**\n * @return {?}\n */\n get paramMap() {\n if (!this._paramMap) {\n this._paramMap = map.call(this.params, (p) => convertToParamMap(p));\n }\n return this._paramMap;\n }\n /**\n * @return {?}\n */\n get queryParamMap() {\n if (!this._queryParamMap) {\n this._queryParamMap =\n map.call(this.queryParams, (p) => convertToParamMap(p));\n }\n return this._queryParamMap;\n }\n /**\n * @return {?}\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 * By default, this only inherits values up to the nearest path-less or component-less route.\n * \\@internal\n * @param {?} route\n * @param {?=} paramsInheritanceStrategy\n * @return {?}\n */\nfunction inheritedParamsDataResolve(route, paramsInheritanceStrategy = 'emptyOnly') {\n const /** @type {?} */ pathFromRoot = route.pathFromRoot;\n let /** @type {?} */ inheritingStartingFrom = 0;\n if (paramsInheritanceStrategy !== 'always') {\n inheritingStartingFrom = pathFromRoot.length - 1;\n while (inheritingStartingFrom >= 1) {\n const /** @type {?} */ current = pathFromRoot[inheritingStartingFrom];\n const /** @type {?} */ parent = pathFromRoot[inheritingStartingFrom - 1];\n // current route is an empty path => inherits its parent's params and data\n if (current.routeConfig && current.routeConfig.path === '') {\n inheritingStartingFrom--;\n // parent is componentless => current route should inherit its params and data\n }\n else if (!parent.component) {\n inheritingStartingFrom--;\n }\n else {\n break;\n }\n }\n }\n return flattenInherited(pathFromRoot.slice(inheritingStartingFrom));\n}\n/**\n * \\@internal\n * @param {?} pathFromRoot\n * @return {?}\n */\nfunction flattenInherited(pathFromRoot) {\n return pathFromRoot.reduce((res, curr) => {\n const /** @type {?} */ params = Object.assign({}, res.params, curr.params);\n const /** @type {?} */ data = Object.assign({}, res.data, curr.data);\n const /** @type {?} */ resolve = Object.assign({}, res.resolve, curr._resolvedData);\n return { params, data, resolve };\n }, /** @type {?} */ ({ params: {}, data: {}, resolve: {} }));\n}\n/**\n * \\@whatItDoes Contains the information about a route associated with a component loaded in an\n * outlet\n * at a particular moment in time. ActivatedRouteSnapshot can also be used to traverse the router\n * state tree.\n *\n * \\@howToUse\n *\n * ```\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 * \\@stable\n */\nclass ActivatedRouteSnapshot {\n /**\n * \\@internal\n * @param {?} url\n * @param {?} params\n * @param {?} queryParams\n * @param {?} fragment\n * @param {?} data\n * @param {?} outlet\n * @param {?} component\n * @param {?} routeConfig\n * @param {?} urlSegment\n * @param {?} lastPathIndex\n * @param {?} resolve\n */\n constructor(url, params, queryParams, fragment, data, outlet, component, routeConfig, urlSegment, lastPathIndex, 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._urlSegment = urlSegment;\n this._lastPathIndex = lastPathIndex;\n this._resolve = resolve;\n }\n /**\n * The root of the router state\n * @return {?}\n */\n get root() { return this._routerState.root; }\n /**\n * The parent of this route in the router state tree\n * @return {?}\n */\n get parent() { return this._routerState.parent(this); }\n /**\n * The first child of this route in the router state tree\n * @return {?}\n */\n get firstChild() { return this._routerState.firstChild(this); }\n /**\n * The children of this route in the router state tree\n * @return {?}\n */\n get children() { return this._routerState.children(this); }\n /**\n * The path from the root of the router state tree to this route\n * @return {?}\n */\n get pathFromRoot() { return this._routerState.pathFromRoot(this); }\n /**\n * @return {?}\n */\n get paramMap() {\n if (!this._paramMap) {\n this._paramMap = convertToParamMap(this.params);\n }\n return this._paramMap;\n }\n /**\n * @return {?}\n */\n get queryParamMap() {\n if (!this._queryParamMap) {\n this._queryParamMap = convertToParamMap(this.queryParams);\n }\n return this._queryParamMap;\n }\n /**\n * @return {?}\n */\n toString() {\n const /** @type {?} */ url = this.url.map(segment => segment.toString()).join('/');\n const /** @type {?} */ matched = this.routeConfig ? this.routeConfig.path : '';\n return `Route(url:'${url}', path:'${matched}')`;\n }\n}\n/**\n * \\@whatItDoes Represents the state of the router at a moment in time.\n *\n * \\@howToUse\n *\n * ```\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 * \\@description\n * RouterStateSnapshot 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 * \\@stable\n */\nclass RouterStateSnapshot extends Tree {\n /**\n * \\@internal\n * @param {?} url\n * @param {?} root\n */\n constructor(url, root) {\n super(root);\n this.url = url;\n setRouterState(/** @type {?} */ (this), root);\n }\n /**\n * @return {?}\n */\n toString() { return serializeNode(this._root); }\n}\n/**\n * @template U, T\n * @param {?} state\n * @param {?} node\n * @return {?}\n */\nfunction setRouterState(state, node) {\n node.value._routerState = state;\n node.children.forEach(c => setRouterState(state, c));\n}\n/**\n * @param {?} node\n * @return {?}\n */\nfunction serializeNode(node) {\n const /** @type {?} */ 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 * @param {?} route\n * @return {?}\n */\nfunction advanceActivatedRoute(route) {\n if (route.snapshot) {\n const /** @type {?} */ currentSnapshot = route.snapshot;\n const /** @type {?} */ nextSnapshot = route._futureSnapshot;\n route.snapshot = nextSnapshot;\n if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {\n (/** @type {?} */ (route.queryParams)).next(nextSnapshot.queryParams);\n }\n if (currentSnapshot.fragment !== nextSnapshot.fragment) {\n (/** @type {?} */ (route.fragment)).next(nextSnapshot.fragment);\n }\n if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {\n (/** @type {?} */ (route.params)).next(nextSnapshot.params);\n }\n if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {\n (/** @type {?} */ (route.url)).next(nextSnapshot.url);\n }\n if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {\n (/** @type {?} */ (route.data)).next(nextSnapshot.data);\n }\n }\n else {\n route.snapshot = route._futureSnapshot;\n // this is for resolved data\n (/** @type {?} */ (route.data)).next(route._futureSnapshot.data);\n }\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction equalParamsAndUrlSegments(a, b) {\n const /** @type {?} */ equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n const /** @type {?} */ parentsMismatch = !a.parent !== !b.parent;\n return equalUrlParams && !parentsMismatch &&\n (!a.parent || equalParamsAndUrlSegments(a.parent, /** @type {?} */ ((b.parent))));\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} routeReuseStrategy\n * @param {?} curr\n * @param {?} prevState\n * @return {?}\n */\nfunction createRouterState(routeReuseStrategy, curr, prevState) {\n const /** @type {?} */ root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);\n return new RouterState(root, curr);\n}\n/**\n * @param {?} routeReuseStrategy\n * @param {?} curr\n * @param {?=} prevState\n * @return {?}\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 /** @type {?} */ value = prevState.value;\n value._futureSnapshot = curr.value;\n const /** @type {?} */ children = createOrReuseChildren(routeReuseStrategy, curr, prevState);\n return new TreeNode(value, children);\n // retrieve an activated route that is used to be displayed, but is not currently displayed\n }\n else if (routeReuseStrategy.retrieve(curr.value)) {\n const /** @type {?} */ tree = (/** @type {?} */ (routeReuseStrategy.retrieve(curr.value))).route;\n setFutureSnapshotsOfActivatedRoutes(curr, tree);\n return tree;\n }\n else {\n const /** @type {?} */ value = createActivatedRoute(curr.value);\n const /** @type {?} */ children = curr.children.map(c => createNode(routeReuseStrategy, c));\n return new TreeNode(value, children);\n }\n}\n/**\n * @param {?} curr\n * @param {?} result\n * @return {?}\n */\nfunction setFutureSnapshotsOfActivatedRoutes(curr, result) {\n if (curr.value.routeConfig !== result.value.routeConfig) {\n throw new Error('Cannot reattach ActivatedRouteSnapshot created from a different route');\n }\n if (curr.children.length !== result.children.length) {\n throw new Error('Cannot reattach ActivatedRouteSnapshot with a different number of children');\n }\n result.value._futureSnapshot = curr.value;\n for (let /** @type {?} */ i = 0; i < curr.children.length; ++i) {\n setFutureSnapshotsOfActivatedRoutes(curr.children[i], result.children[i]);\n }\n}\n/**\n * @param {?} routeReuseStrategy\n * @param {?} curr\n * @param {?} prevState\n * @return {?}\n */\nfunction createOrReuseChildren(routeReuseStrategy, curr, prevState) {\n return curr.children.map(child => {\n for (const /** @type {?} */ p of prevState.children) {\n if (routeReuseStrategy.shouldReuseRoute(p.value.snapshot, child.value)) {\n return createNode(routeReuseStrategy, child, p);\n }\n }\n return createNode(routeReuseStrategy, child);\n });\n}\n/**\n * @param {?} c\n * @return {?}\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 * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @param {?} route\n * @param {?} urlTree\n * @param {?} commands\n * @param {?} queryParams\n * @param {?} fragment\n * @return {?}\n */\nfunction createUrlTree(route, urlTree, commands, queryParams, fragment) {\n if (commands.length === 0) {\n return tree(urlTree.root, urlTree.root, urlTree, queryParams, fragment);\n }\n const /** @type {?} */ nav = computeNavigation(commands);\n if (nav.toRoot()) {\n return tree(urlTree.root, new UrlSegmentGroup([], {}), urlTree, queryParams, fragment);\n }\n const /** @type {?} */ startingPosition = findStartingPosition(nav, urlTree, route);\n const /** @type {?} */ segmentGroup = startingPosition.processChildren ?\n updateSegmentGroupChildren(startingPosition.segmentGroup, startingPosition.index, nav.commands) :\n updateSegmentGroup(startingPosition.segmentGroup, startingPosition.index, nav.commands);\n return tree(startingPosition.segmentGroup, segmentGroup, urlTree, queryParams, fragment);\n}\n/**\n * @param {?} command\n * @return {?}\n */\nfunction isMatrixParams(command) {\n return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;\n}\n/**\n * @param {?} oldSegmentGroup\n * @param {?} newSegmentGroup\n * @param {?} urlTree\n * @param {?} queryParams\n * @param {?} fragment\n * @return {?}\n */\nfunction tree(oldSegmentGroup, newSegmentGroup, urlTree, queryParams, fragment) {\n let /** @type {?} */ qp = {};\n if (queryParams) {\n forEach(queryParams, (value, name) => {\n qp[name] = Array.isArray(value) ? value.map((v) => `${v}`) : `${value}`;\n });\n }\n if (urlTree.root === oldSegmentGroup) {\n return new UrlTree(newSegmentGroup, qp, fragment);\n }\n return new UrlTree(replaceSegment(urlTree.root, oldSegmentGroup, newSegmentGroup), qp, fragment);\n}\n/**\n * @param {?} current\n * @param {?} oldSegment\n * @param {?} newSegment\n * @return {?}\n */\nfunction replaceSegment(current, oldSegment, newSegment) {\n const /** @type {?} */ children = {};\n forEach(current.children, (c, outletName) => {\n if (c === oldSegment) {\n children[outletName] = newSegment;\n }\n else {\n children[outletName] = replaceSegment(c, oldSegment, newSegment);\n }\n });\n return new UrlSegmentGroup(current.segments, children);\n}\nclass Navigation {\n /**\n * @param {?} isAbsolute\n * @param {?} numberOfDoubleDots\n * @param {?} commands\n */\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 Error('Root segment cannot have matrix parameters');\n }\n const /** @type {?} */ cmdWithOutlet = commands.find(c => typeof c === 'object' && c != null && c.outlets);\n if (cmdWithOutlet && cmdWithOutlet !== last$1(commands)) {\n throw new Error('{outlets:{}} has to be the last command');\n }\n }\n /**\n * @return {?}\n */\n toRoot() {\n return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';\n }\n}\n/**\n * Transforms commands to a normalized `Navigation`\n * @param {?} commands\n * @return {?}\n */\nfunction computeNavigation(commands) {\n if ((typeof commands[0] === 'string') && commands.length === 1 && commands[0] === '/') {\n return new Navigation(true, 0, commands);\n }\n let /** @type {?} */ numberOfDoubleDots = 0;\n let /** @type {?} */ isAbsolute = false;\n const /** @type {?} */ res = commands.reduce((res, cmd, cmdIdx) => {\n if (typeof cmd === 'object' && cmd != null) {\n if (cmd.outlets) {\n const /** @type {?} */ outlets = {};\n forEach(cmd.outlets, (commands, name) => {\n outlets[name] = typeof commands === 'string' ? commands.split('/') : commands;\n });\n return [...res, { outlets }];\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 }\n else if (partIndex == 0 && urlPart === '') {\n // '/a'\n isAbsolute = true;\n }\n else if (urlPart === '..') {\n // '../a'\n numberOfDoubleDots++;\n }\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 /**\n * @param {?} segmentGroup\n * @param {?} processChildren\n * @param {?} index\n */\n constructor(segmentGroup, processChildren, index) {\n this.segmentGroup = segmentGroup;\n this.processChildren = processChildren;\n this.index = index;\n }\n}\n/**\n * @param {?} nav\n * @param {?} tree\n * @param {?} route\n * @return {?}\n */\nfunction findStartingPosition(nav, tree, route) {\n if (nav.isAbsolute) {\n return new Position(tree.root, true, 0);\n }\n if (route.snapshot._lastPathIndex === -1) {\n return new Position(route.snapshot._urlSegment, true, 0);\n }\n const /** @type {?} */ modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;\n const /** @type {?} */ index = route.snapshot._lastPathIndex + modifier;\n return createPositionApplyingDoubleDots(route.snapshot._urlSegment, index, nav.numberOfDoubleDots);\n}\n/**\n * @param {?} group\n * @param {?} index\n * @param {?} numberOfDoubleDots\n * @return {?}\n */\nfunction createPositionApplyingDoubleDots(group, index, numberOfDoubleDots) {\n let /** @type {?} */ g = group;\n let /** @type {?} */ ci = index;\n let /** @type {?} */ dd = numberOfDoubleDots;\n while (dd > ci) {\n dd -= ci;\n g = /** @type {?} */ ((g.parent));\n if (!g) {\n throw new Error('Invalid number of \\'../\\'');\n }\n ci = g.segments.length;\n }\n return new Position(g, false, ci - dd);\n}\n/**\n * @param {?} command\n * @return {?}\n */\nfunction getPath(command) {\n if (typeof command === 'object' && command != null && command.outlets) {\n return command.outlets[PRIMARY_OUTLET];\n }\n return `${command}`;\n}\n/**\n * @param {?} commands\n * @return {?}\n */\nfunction getOutlets(commands) {\n if (!(typeof commands[0] === 'object'))\n return { [PRIMARY_OUTLET]: commands };\n if (commands[0].outlets === undefined)\n return { [PRIMARY_OUTLET]: commands };\n return commands[0].outlets;\n}\n/**\n * @param {?} segmentGroup\n * @param {?} startIndex\n * @param {?} commands\n * @return {?}\n */\nfunction updateSegmentGroup(segmentGroup, startIndex, commands) {\n if (!segmentGroup) {\n segmentGroup = new UrlSegmentGroup([], {});\n }\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return updateSegmentGroupChildren(segmentGroup, startIndex, commands);\n }\n const /** @type {?} */ m = prefixedWith(segmentGroup, startIndex, commands);\n const /** @type {?} */ slicedCommands = commands.slice(m.commandIndex);\n if (m.match && m.pathIndex < segmentGroup.segments.length) {\n const /** @type {?} */ g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});\n g.children[PRIMARY_OUTLET] =\n new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);\n return updateSegmentGroupChildren(g, 0, slicedCommands);\n }\n else if (m.match && slicedCommands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n }\n else if (m.match && !segmentGroup.hasChildren()) {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n }\n else if (m.match) {\n return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);\n }\n else {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n }\n}\n/**\n * @param {?} segmentGroup\n * @param {?} startIndex\n * @param {?} commands\n * @return {?}\n */\nfunction updateSegmentGroupChildren(segmentGroup, startIndex, commands) {\n if (commands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n }\n else {\n const /** @type {?} */ outlets = getOutlets(commands);\n const /** @type {?} */ children = {};\n forEach(outlets, (commands, outlet) => {\n if (commands !== null) {\n children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);\n }\n });\n forEach(segmentGroup.children, (child, childOutlet) => {\n if (outlets[childOutlet] === undefined) {\n children[childOutlet] = child;\n }\n });\n return new UrlSegmentGroup(segmentGroup.segments, children);\n }\n}\n/**\n * @param {?} segmentGroup\n * @param {?} startIndex\n * @param {?} commands\n * @return {?}\n */\nfunction prefixedWith(segmentGroup, startIndex, commands) {\n let /** @type {?} */ currentCommandIndex = 0;\n let /** @type {?} */ currentPathIndex = startIndex;\n const /** @type {?} */ noMatch = { match: false, pathIndex: 0, commandIndex: 0 };\n while (currentPathIndex < segmentGroup.segments.length) {\n if (currentCommandIndex >= commands.length)\n return noMatch;\n const /** @type {?} */ path = segmentGroup.segments[currentPathIndex];\n const /** @type {?} */ curr = getPath(commands[currentCommandIndex]);\n const /** @type {?} */ next = currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;\n if (currentPathIndex > 0 && curr === undefined)\n break;\n if (curr && next && (typeof next === 'object') && next.outlets === undefined) {\n if (!compare(curr, next, path))\n return noMatch;\n currentCommandIndex += 2;\n }\n else {\n if (!compare(curr, {}, path))\n return noMatch;\n currentCommandIndex++;\n }\n currentPathIndex++;\n }\n return { match: true, pathIndex: currentPathIndex, commandIndex: currentCommandIndex };\n}\n/**\n * @param {?} segmentGroup\n * @param {?} startIndex\n * @param {?} commands\n * @return {?}\n */\nfunction createNewSegmentGroup(segmentGroup, startIndex, commands) {\n const /** @type {?} */ paths = segmentGroup.segments.slice(0, startIndex);\n let /** @type {?} */ i = 0;\n while (i < commands.length) {\n if (typeof commands[i] === 'object' && commands[i].outlets !== undefined) {\n const /** @type {?} */ children = createNewSegmentChildren(commands[i].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 /** @type {?} */ p = segmentGroup.segments[startIndex];\n paths.push(new UrlSegment(p.path, commands[0]));\n i++;\n continue;\n }\n const /** @type {?} */ curr = getPath(commands[i]);\n const /** @type {?} */ 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 }\n else {\n paths.push(new UrlSegment(curr, {}));\n i++;\n }\n }\n return new UrlSegmentGroup(paths, {});\n}\n/**\n * @param {?} outlets\n * @return {?}\n */\nfunction createNewSegmentChildren(outlets) {\n const /** @type {?} */ children = {};\n forEach(outlets, (commands, outlet) => {\n if (commands !== null) {\n children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);\n }\n });\n return children;\n}\n/**\n * @param {?} params\n * @return {?}\n */\nfunction stringify(params) {\n const /** @type {?} */ res = {};\n forEach(params, (v, k) => res[k] = `${v}`);\n return res;\n}\n/**\n * @param {?} path\n * @param {?} params\n * @param {?} segment\n * @return {?}\n */\nfunction compare(path, params, segment) {\n return path == segment.path && shallowEqual(params, segment.parameters);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass CanActivate {\n /**\n * @param {?} path\n */\n constructor(path) {\n this.path = path;\n this.route = this.path[this.path.length - 1];\n }\n}\nclass CanDeactivate {\n /**\n * @param {?} component\n * @param {?} route\n */\n constructor(component, route) {\n this.component = component;\n this.route = route;\n }\n}\n/**\n * This class bundles the actions involved in preactivation of a route.\n */\nclass PreActivation {\n /**\n * @param {?} future\n * @param {?} curr\n * @param {?} moduleInjector\n * @param {?=} forwardEvent\n */\n constructor(future, curr, moduleInjector, forwardEvent) {\n this.future = future;\n this.curr = curr;\n this.moduleInjector = moduleInjector;\n this.forwardEvent = forwardEvent;\n this.canActivateChecks = [];\n this.canDeactivateChecks = [];\n }\n /**\n * @param {?} parentContexts\n * @return {?}\n */\n initialize(parentContexts) {\n const /** @type {?} */ futureRoot = this.future._root;\n const /** @type {?} */ currRoot = this.curr ? this.curr._root : null;\n this.setupChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);\n }\n /**\n * @return {?}\n */\n checkGuards() {\n if (!this.isDeactivating() && !this.isActivating()) {\n return of(true);\n }\n const /** @type {?} */ canDeactivate$ = this.runCanDeactivateChecks();\n return mergeMap.call(canDeactivate$, (canDeactivate) => canDeactivate ? this.runCanActivateChecks() : of(false));\n }\n /**\n * @param {?} paramsInheritanceStrategy\n * @return {?}\n */\n resolveData(paramsInheritanceStrategy) {\n if (!this.isActivating())\n return of(null);\n const /** @type {?} */ checks$ = from(this.canActivateChecks);\n const /** @type {?} */ runningChecks$ = concatMap.call(checks$, (check) => this.runResolve(check.route, paramsInheritanceStrategy));\n return reduce.call(runningChecks$, (_, __) => _);\n }\n /**\n * @return {?}\n */\n isDeactivating() { return this.canDeactivateChecks.length !== 0; }\n /**\n * @return {?}\n */\n isActivating() { return this.canActivateChecks.length !== 0; }\n /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} contexts\n * @param {?} futurePath\n * @return {?}\n */\n setupChildRouteGuards(futureNode, currNode, contexts, futurePath) {\n const /** @type {?} */ prevChildren = nodeChildrenAsMap(currNode);\n // Process the children of the future route\n futureNode.children.forEach(c => {\n this.setupRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]));\n delete prevChildren[c.value.outlet];\n });\n // Process any children left from the current route (not active for the future route)\n forEach(prevChildren, (v, k) => this.deactivateRouteAndItsChildren(v, /** @type {?} */ ((contexts)).getContext(k)));\n }\n /**\n * Iterates over child routes and calls recursive `setupRouteGuards` to get `this` instance in\n * proper state to run `checkGuards()` method.\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} parentContexts\n * @param {?} futurePath\n * @return {?}\n */\n setupRouteGuards(futureNode, currNode, parentContexts, futurePath) {\n const /** @type {?} */ future = futureNode.value;\n const /** @type {?} */ curr = currNode ? currNode.value : null;\n const /** @type {?} */ context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;\n // reusing the node\n if (curr && future.routeConfig === curr.routeConfig) {\n const /** @type {?} */ shouldRunGuardsAndResolvers = this.shouldRunGuardsAndResolvers(curr, future, /** @type {?} */ ((future.routeConfig)).runGuardsAndResolvers);\n if (shouldRunGuardsAndResolvers) {\n this.canActivateChecks.push(new CanActivate(futurePath));\n }\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 this.setupChildRouteGuards(futureNode, currNode, context ? context.children : null, futurePath);\n // if we have a componentless route, we recurse but keep the same outlet map.\n }\n else {\n this.setupChildRouteGuards(futureNode, currNode, parentContexts, futurePath);\n }\n if (shouldRunGuardsAndResolvers) {\n const /** @type {?} */ outlet = /** @type {?} */ ((/** @type {?} */ ((context)).outlet));\n this.canDeactivateChecks.push(new CanDeactivate(outlet.component, curr));\n }\n }\n else {\n if (curr) {\n this.deactivateRouteAndItsChildren(currNode, context);\n }\n this.canActivateChecks.push(new CanActivate(futurePath));\n // If we have a component, we need to go through an outlet.\n if (future.component) {\n this.setupChildRouteGuards(futureNode, null, context ? context.children : null, futurePath);\n // if we have a componentless route, we recurse but keep the same outlet map.\n }\n else {\n this.setupChildRouteGuards(futureNode, null, parentContexts, futurePath);\n }\n }\n }\n /**\n * @param {?} curr\n * @param {?} future\n * @param {?} mode\n * @return {?}\n */\n shouldRunGuardsAndResolvers(curr, future, mode) {\n switch (mode) {\n case 'always':\n return true;\n case 'paramsOrQueryParamsChange':\n return !equalParamsAndUrlSegments(curr, future) ||\n !shallowEqual(curr.queryParams, future.queryParams);\n case 'paramsChange':\n default:\n return !equalParamsAndUrlSegments(curr, future);\n }\n }\n /**\n * @param {?} route\n * @param {?} context\n * @return {?}\n */\n deactivateRouteAndItsChildren(route, context) {\n const /** @type {?} */ children = nodeChildrenAsMap(route);\n const /** @type {?} */ r = route.value;\n forEach(children, (node, childName) => {\n if (!r.component) {\n this.deactivateRouteAndItsChildren(node, context);\n }\n else if (context) {\n this.deactivateRouteAndItsChildren(node, context.children.getContext(childName));\n }\n else {\n this.deactivateRouteAndItsChildren(node, null);\n }\n });\n if (!r.component) {\n this.canDeactivateChecks.push(new CanDeactivate(null, r));\n }\n else if (context && context.outlet && context.outlet.isActivated) {\n this.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));\n }\n else {\n this.canDeactivateChecks.push(new CanDeactivate(null, r));\n }\n }\n /**\n * @return {?}\n */\n runCanDeactivateChecks() {\n const /** @type {?} */ checks$ = from(this.canDeactivateChecks);\n const /** @type {?} */ runningChecks$ = mergeMap.call(checks$, (check) => this.runCanDeactivate(check.component, check.route));\n return every.call(runningChecks$, (result) => result === true);\n }\n /**\n * @return {?}\n */\n runCanActivateChecks() {\n const /** @type {?} */ checks$ = from(this.canActivateChecks);\n const /** @type {?} */ runningChecks$ = concatMap.call(checks$, (check) => andObservables(from([\n this.fireChildActivationStart(check.route.parent), this.fireActivationStart(check.route),\n this.runCanActivateChild(check.path), this.runCanActivate(check.route)\n ])));\n return every.call(runningChecks$, (result) => result === true);\n // this.fireChildActivationStart(check.path),\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 * @param {?} snapshot\n * @return {?}\n */\n fireActivationStart(snapshot) {\n if (snapshot !== null && this.forwardEvent) {\n this.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 * @param {?} snapshot\n * @return {?}\n */\n fireChildActivationStart(snapshot) {\n if (snapshot !== null && this.forwardEvent) {\n this.forwardEvent(new ChildActivationStart(snapshot));\n }\n return of(true);\n }\n /**\n * @param {?} future\n * @return {?}\n */\n runCanActivate(future) {\n const /** @type {?} */ canActivate = future.routeConfig ? future.routeConfig.canActivate : null;\n if (!canActivate || canActivate.length === 0)\n return of(true);\n const /** @type {?} */ obs = map.call(from(canActivate), (c) => {\n const /** @type {?} */ guard = this.getToken(c, future);\n let /** @type {?} */ observable;\n if (guard.canActivate) {\n observable = wrapIntoObservable(guard.canActivate(future, this.future));\n }\n else {\n observable = wrapIntoObservable(guard(future, this.future));\n }\n return first.call(observable);\n });\n return andObservables(obs);\n }\n /**\n * @param {?} path\n * @return {?}\n */\n runCanActivateChild(path) {\n const /** @type {?} */ future = path[path.length - 1];\n const /** @type {?} */ canActivateChildGuards = path.slice(0, path.length - 1)\n .reverse()\n .map(p => this.extractCanActivateChild(p))\n .filter(_ => _ !== null);\n return andObservables(map.call(from(canActivateChildGuards), (d) => {\n const /** @type {?} */ obs = map.call(from(d.guards), (c) => {\n const /** @type {?} */ guard = this.getToken(c, d.node);\n let /** @type {?} */ observable;\n if (guard.canActivateChild) {\n observable = wrapIntoObservable(guard.canActivateChild(future, this.future));\n }\n else {\n observable = wrapIntoObservable(guard(future, this.future));\n }\n return first.call(observable);\n });\n return andObservables(obs);\n }));\n }\n /**\n * @param {?} p\n * @return {?}\n */\n extractCanActivateChild(p) {\n const /** @type {?} */ canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;\n if (!canActivateChild || canActivateChild.length === 0)\n return null;\n return { node: p, guards: canActivateChild };\n }\n /**\n * @param {?} component\n * @param {?} curr\n * @return {?}\n */\n runCanDeactivate(component, curr) {\n const /** @type {?} */ canDeactivate = curr && curr.routeConfig ? curr.routeConfig.canDeactivate : null;\n if (!canDeactivate || canDeactivate.length === 0)\n return of(true);\n const /** @type {?} */ canDeactivate$ = mergeMap.call(from(canDeactivate), (c) => {\n const /** @type {?} */ guard = this.getToken(c, curr);\n let /** @type {?} */ observable;\n if (guard.canDeactivate) {\n observable =\n wrapIntoObservable(guard.canDeactivate(component, curr, this.curr, this.future));\n }\n else {\n observable = wrapIntoObservable(guard(component, curr, this.curr, this.future));\n }\n return first.call(observable);\n });\n return every.call(canDeactivate$, (result) => result === true);\n }\n /**\n * @param {?} future\n * @param {?} paramsInheritanceStrategy\n * @return {?}\n */\n runResolve(future, paramsInheritanceStrategy) {\n const /** @type {?} */ resolve = future._resolve;\n return map.call(this.resolveNode(resolve, future), (resolvedData) => {\n future._resolvedData = resolvedData;\n future.data = Object.assign({}, future.data, inheritedParamsDataResolve(future, paramsInheritanceStrategy).resolve);\n return null;\n });\n }\n /**\n * @param {?} resolve\n * @param {?} future\n * @return {?}\n */\n resolveNode(resolve, future) {\n const /** @type {?} */ keys = Object.keys(resolve);\n if (keys.length === 0) {\n return of({});\n }\n if (keys.length === 1) {\n const /** @type {?} */ key = keys[0];\n return map.call(this.getResolver(resolve[key], future), (value) => { return { [key]: value }; });\n }\n const /** @type {?} */ data = {};\n const /** @type {?} */ runningResolvers$ = mergeMap.call(from(keys), (key) => {\n return map.call(this.getResolver(resolve[key], future), (value) => {\n data[key] = value;\n return value;\n });\n });\n return map.call(last.call(runningResolvers$), () => data);\n }\n /**\n * @param {?} injectionToken\n * @param {?} future\n * @return {?}\n */\n getResolver(injectionToken, future) {\n const /** @type {?} */ resolver = this.getToken(injectionToken, future);\n return resolver.resolve ? wrapIntoObservable(resolver.resolve(future, this.future)) :\n wrapIntoObservable(resolver(future, this.future));\n }\n /**\n * @param {?} token\n * @param {?} snapshot\n * @return {?}\n */\n getToken(token, snapshot) {\n const /** @type {?} */ config = closestLoadedConfig(snapshot);\n const /** @type {?} */ injector = config ? config.module.injector : this.moduleInjector;\n return injector.get(token);\n }\n}\n/**\n * @param {?} snapshot\n * @return {?}\n */\nfunction closestLoadedConfig(snapshot) {\n if (!snapshot)\n return null;\n for (let /** @type {?} */ s = snapshot.parent; s; s = s.parent) {\n const /** @type {?} */ route = s.routeConfig;\n if (route && route._loadedConfig)\n return route._loadedConfig;\n }\n return null;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\nclass NoMatch$1 {\n}\n/**\n * @param {?} rootComponentType\n * @param {?} config\n * @param {?} urlTree\n * @param {?} url\n * @param {?=} paramsInheritanceStrategy\n * @return {?}\n */\nfunction recognize(rootComponentType, config, urlTree, url, paramsInheritanceStrategy = 'emptyOnly') {\n return new Recognizer(rootComponentType, config, urlTree, url, paramsInheritanceStrategy)\n .recognize();\n}\nclass Recognizer {\n /**\n * @param {?} rootComponentType\n * @param {?} config\n * @param {?} urlTree\n * @param {?} url\n * @param {?} paramsInheritanceStrategy\n */\n constructor(rootComponentType, config, urlTree, url, paramsInheritanceStrategy) {\n this.rootComponentType = rootComponentType;\n this.config = config;\n this.urlTree = urlTree;\n this.url = url;\n this.paramsInheritanceStrategy = paramsInheritanceStrategy;\n }\n /**\n * @return {?}\n */\n recognize() {\n try {\n const /** @type {?} */ rootSegmentGroup = split$1(this.urlTree.root, [], [], this.config).segmentGroup;\n const /** @type {?} */ children = this.processSegmentGroup(this.config, rootSegmentGroup, PRIMARY_OUTLET);\n const /** @type {?} */ root = new ActivatedRouteSnapshot([], Object.freeze({}), Object.freeze(this.urlTree.queryParams), /** @type {?} */ ((this.urlTree.fragment)), {}, PRIMARY_OUTLET, this.rootComponentType, null, this.urlTree.root, -1, {});\n const /** @type {?} */ rootNode = new TreeNode(root, children);\n const /** @type {?} */ routeState = new RouterStateSnapshot(this.url, rootNode);\n this.inheritParamsAndData(routeState._root);\n return of(routeState);\n }\n catch (/** @type {?} */ e) {\n return new Observable((obs) => obs.error(e));\n }\n }\n /**\n * @param {?} routeNode\n * @return {?}\n */\n inheritParamsAndData(routeNode) {\n const /** @type {?} */ route = routeNode.value;\n const /** @type {?} */ i = inheritedParamsDataResolve(route, this.paramsInheritanceStrategy);\n route.params = Object.freeze(i.params);\n route.data = Object.freeze(i.data);\n routeNode.children.forEach(n => this.inheritParamsAndData(n));\n }\n /**\n * @param {?} config\n * @param {?} segmentGroup\n * @param {?} outlet\n * @return {?}\n */\n processSegmentGroup(config, segmentGroup, outlet) {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return this.processChildren(config, segmentGroup);\n }\n return this.processSegment(config, segmentGroup, segmentGroup.segments, outlet);\n }\n /**\n * @param {?} config\n * @param {?} segmentGroup\n * @return {?}\n */\n processChildren(config, segmentGroup) {\n const /** @type {?} */ children = mapChildrenIntoArray(segmentGroup, (child, childOutlet) => this.processSegmentGroup(config, child, childOutlet));\n checkOutletNameUniqueness(children);\n sortActivatedRouteSnapshots(children);\n return children;\n }\n /**\n * @param {?} config\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\n processSegment(config, segmentGroup, segments, outlet) {\n for (const /** @type {?} */ r of config) {\n try {\n return this.processSegmentAgainstRoute(r, segmentGroup, segments, outlet);\n }\n catch (/** @type {?} */ e) {\n if (!(e instanceof NoMatch$1))\n throw e;\n }\n }\n if (this.noLeftoversInUrl(segmentGroup, segments, outlet)) {\n return [];\n }\n throw new NoMatch$1();\n }\n /**\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\n noLeftoversInUrl(segmentGroup, segments, outlet) {\n return segments.length === 0 && !segmentGroup.children[outlet];\n }\n /**\n * @param {?} route\n * @param {?} rawSegment\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\n processSegmentAgainstRoute(route, rawSegment, segments, outlet) {\n if (route.redirectTo)\n throw new NoMatch$1();\n if ((route.outlet || PRIMARY_OUTLET) !== outlet)\n throw new NoMatch$1();\n let /** @type {?} */ snapshot;\n let /** @type {?} */ consumedSegments = [];\n let /** @type {?} */ rawSlicedSegments = [];\n if (route.path === '**') {\n const /** @type {?} */ params = segments.length > 0 ? /** @type {?} */ ((last$1(segments))).parameters : {};\n snapshot = new ActivatedRouteSnapshot(segments, params, Object.freeze(this.urlTree.queryParams), /** @type {?} */ ((this.urlTree.fragment)), getData(route), outlet, /** @type {?} */ ((route.component)), route, getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + segments.length, getResolve(route));\n }\n else {\n const /** @type {?} */ result = match$1(rawSegment, route, segments);\n consumedSegments = result.consumedSegments;\n rawSlicedSegments = segments.slice(result.lastChild);\n snapshot = new ActivatedRouteSnapshot(consumedSegments, result.parameters, Object.freeze(this.urlTree.queryParams), /** @type {?} */ ((this.urlTree.fragment)), getData(route), outlet, /** @type {?} */ ((route.component)), route, getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + consumedSegments.length, getResolve(route));\n }\n const /** @type {?} */ childConfig = getChildConfig(route);\n const { segmentGroup, slicedSegments } = split$1(rawSegment, consumedSegments, rawSlicedSegments, childConfig);\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n const /** @type {?} */ children = this.processChildren(childConfig, segmentGroup);\n return [new TreeNode(snapshot, children)];\n }\n if (childConfig.length === 0 && slicedSegments.length === 0) {\n return [new TreeNode(snapshot, [])];\n }\n const /** @type {?} */ children = this.processSegment(childConfig, segmentGroup, slicedSegments, PRIMARY_OUTLET);\n return [new TreeNode(snapshot, children)];\n }\n}\n/**\n * @param {?} nodes\n * @return {?}\n */\nfunction sortActivatedRouteSnapshots(nodes) {\n nodes.sort((a, b) => {\n if (a.value.outlet === PRIMARY_OUTLET)\n return -1;\n if (b.value.outlet === PRIMARY_OUTLET)\n return 1;\n return a.value.outlet.localeCompare(b.value.outlet);\n });\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction getChildConfig(route) {\n if (route.children) {\n return route.children;\n }\n if (route.loadChildren) {\n return /** @type {?} */ ((route._loadedConfig)).routes;\n }\n return [];\n}\n/**\n * @param {?} segmentGroup\n * @param {?} route\n * @param {?} segments\n * @return {?}\n */\nfunction match$1(segmentGroup, route, segments) {\n if (route.path === '') {\n if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {\n throw new NoMatch$1();\n }\n return { consumedSegments: [], lastChild: 0, parameters: {} };\n }\n const /** @type {?} */ matcher = route.matcher || defaultUrlMatcher;\n const /** @type {?} */ res = matcher(segments, segmentGroup, route);\n if (!res)\n throw new NoMatch$1();\n const /** @type {?} */ posParams = {};\n forEach(/** @type {?} */ ((res.posParams)), (v, k) => { posParams[k] = v.path; });\n const /** @type {?} */ parameters = res.consumed.length > 0 ? Object.assign({}, posParams, res.consumed[res.consumed.length - 1].parameters) :\n posParams;\n return { consumedSegments: res.consumed, lastChild: res.consumed.length, parameters };\n}\n/**\n * @param {?} nodes\n * @return {?}\n */\nfunction checkOutletNameUniqueness(nodes) {\n const /** @type {?} */ names = {};\n nodes.forEach(n => {\n const /** @type {?} */ routeWithSameOutletName = names[n.value.outlet];\n if (routeWithSameOutletName) {\n const /** @type {?} */ p = routeWithSameOutletName.url.map(s => s.toString()).join('/');\n const /** @type {?} */ c = n.value.url.map(s => s.toString()).join('/');\n throw new Error(`Two segments cannot have the same outlet name: '${p}' and '${c}'.`);\n }\n names[n.value.outlet] = n.value;\n });\n}\n/**\n * @param {?} segmentGroup\n * @return {?}\n */\nfunction getSourceSegmentGroup(segmentGroup) {\n let /** @type {?} */ s = segmentGroup;\n while (s._sourceSegment) {\n s = s._sourceSegment;\n }\n return s;\n}\n/**\n * @param {?} segmentGroup\n * @return {?}\n */\nfunction getPathIndexShift(segmentGroup) {\n let /** @type {?} */ s = segmentGroup;\n let /** @type {?} */ res = (s._segmentIndexShift ? s._segmentIndexShift : 0);\n while (s._sourceSegment) {\n s = s._sourceSegment;\n res += (s._segmentIndexShift ? s._segmentIndexShift : 0);\n }\n return res - 1;\n}\n/**\n * @param {?} segmentGroup\n * @param {?} consumedSegments\n * @param {?} slicedSegments\n * @param {?} config\n * @return {?}\n */\nfunction split$1(segmentGroup, consumedSegments, slicedSegments, config) {\n if (slicedSegments.length > 0 &&\n containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n const /** @type {?} */ s = new UrlSegmentGroup(consumedSegments, createChildrenForEmptyPaths(segmentGroup, consumedSegments, config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n return { segmentGroup: s, slicedSegments: [] };\n }\n if (slicedSegments.length === 0 &&\n containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {\n const /** @type {?} */ s = new UrlSegmentGroup(segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, config, segmentGroup.children));\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n return { segmentGroup: s, slicedSegments };\n }\n const /** @type {?} */ s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n return { segmentGroup: s, slicedSegments };\n}\n/**\n * @param {?} segmentGroup\n * @param {?} slicedSegments\n * @param {?} routes\n * @param {?} children\n * @return {?}\n */\nfunction addEmptyPathsToChildrenIfNeeded(segmentGroup, slicedSegments, routes, children) {\n const /** @type {?} */ res = {};\n for (const /** @type {?} */ r of routes) {\n if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet$1(r)]) {\n const /** @type {?} */ s = new UrlSegmentGroup([], {});\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = segmentGroup.segments.length;\n res[getOutlet$1(r)] = s;\n }\n }\n return Object.assign({}, children, res);\n}\n/**\n * @param {?} segmentGroup\n * @param {?} consumedSegments\n * @param {?} routes\n * @param {?} primarySegment\n * @return {?}\n */\nfunction createChildrenForEmptyPaths(segmentGroup, consumedSegments, routes, primarySegment) {\n const /** @type {?} */ res = {};\n res[PRIMARY_OUTLET] = primarySegment;\n primarySegment._sourceSegment = segmentGroup;\n primarySegment._segmentIndexShift = consumedSegments.length;\n for (const /** @type {?} */ r of routes) {\n if (r.path === '' && getOutlet$1(r) !== PRIMARY_OUTLET) {\n const /** @type {?} */ s = new UrlSegmentGroup([], {});\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n res[getOutlet$1(r)] = s;\n }\n }\n return res;\n}\n/**\n * @param {?} segmentGroup\n * @param {?} slicedSegments\n * @param {?} routes\n * @return {?}\n */\nfunction containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, routes) {\n return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet$1(r) !== PRIMARY_OUTLET);\n}\n/**\n * @param {?} segmentGroup\n * @param {?} slicedSegments\n * @param {?} routes\n * @return {?}\n */\nfunction containsEmptyPathMatches(segmentGroup, slicedSegments, routes) {\n return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r));\n}\n/**\n * @param {?} segmentGroup\n * @param {?} slicedSegments\n * @param {?} r\n * @return {?}\n */\nfunction emptyPathMatch(segmentGroup, slicedSegments, r) {\n if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n return r.path === '' && r.redirectTo === undefined;\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction getOutlet$1(route) {\n return route.outlet || PRIMARY_OUTLET;\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction getData(route) {\n return route.data || {};\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction getResolve(route) {\n return route.resolve || {};\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Provides a way to customize when activated routes get reused.\n *\n * \\@experimental\n * @abstract\n */\nclass RouteReuseStrategy {\n}\n/**\n * Does not detach any subtrees. Reuses routes as long as their route config is the same.\n */\nclass DefaultRouteReuseStrategy {\n /**\n * @param {?} route\n * @return {?}\n */\n shouldDetach(route) { return false; }\n /**\n * @param {?} route\n * @param {?} detachedTree\n * @return {?}\n */\n store(route, detachedTree) { }\n /**\n * @param {?} route\n * @return {?}\n */\n shouldAttach(route) { return false; }\n /**\n * @param {?} route\n * @return {?}\n */\n retrieve(route) { return null; }\n /**\n * @param {?} future\n * @param {?} curr\n * @return {?}\n */\n shouldReuseRoute(future, curr) {\n return future.routeConfig === curr.routeConfig;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@docsNotRequired\n * \\@experimental\n */\nconst ROUTES = new InjectionToken('ROUTES');\nclass RouterConfigLoader {\n /**\n * @param {?} loader\n * @param {?} compiler\n * @param {?=} onLoadStartListener\n * @param {?=} onLoadEndListener\n */\n constructor(loader, compiler, onLoadStartListener, onLoadEndListener) {\n this.loader = loader;\n this.compiler = compiler;\n this.onLoadStartListener = onLoadStartListener;\n this.onLoadEndListener = onLoadEndListener;\n }\n /**\n * @param {?} parentInjector\n * @param {?} route\n * @return {?}\n */\n load(parentInjector, route) {\n if (this.onLoadStartListener) {\n this.onLoadStartListener(route);\n }\n const /** @type {?} */ moduleFactory$ = this.loadModuleFactory(/** @type {?} */ ((route.loadChildren)));\n return map.call(moduleFactory$, (factory) => {\n if (this.onLoadEndListener) {\n this.onLoadEndListener(route);\n }\n const /** @type {?} */ module = factory.create(parentInjector);\n return new LoadedRouterConfig(flatten(module.injector.get(ROUTES)).map(copyConfig), module);\n });\n }\n /**\n * @param {?} loadChildren\n * @return {?}\n */\n loadModuleFactory(loadChildren) {\n if (typeof loadChildren === 'string') {\n return fromPromise(this.loader.load(loadChildren));\n }\n else {\n return mergeMap.call(wrapIntoObservable(loadChildren()), (t) => {\n if (t instanceof NgModuleFactory) {\n return of(t);\n }\n else {\n return fromPromise(this.compiler.compileModuleAsync(t));\n }\n });\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Provides a way to migrate AngularJS applications to Angular.\n *\n * \\@experimental\n * @abstract\n */\nclass UrlHandlingStrategy {\n}\n/**\n * \\@experimental\n */\nclass DefaultUrlHandlingStrategy {\n /**\n * @param {?} url\n * @return {?}\n */\n shouldProcessUrl(url) { return true; }\n /**\n * @param {?} url\n * @return {?}\n */\n extract(url) { return url; }\n /**\n * @param {?} newUrlPart\n * @param {?} wholeUrl\n * @return {?}\n */\n merge(newUrlPart, wholeUrl) { return newUrlPart; }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Represents the extra options used during navigation.\n *\n * \\@stable\n * @record\n */\n\n/**\n * @param {?} error\n * @return {?}\n */\nfunction defaultErrorHandler(error) {\n throw error;\n}\n/**\n * \\@internal\n * @param {?} snapshot\n * @return {?}\n */\nfunction defaultRouterHook(snapshot) {\n return /** @type {?} */ (of(null));\n}\n/**\n * \\@whatItDoes Provides the navigation and url manipulation capabilities.\n *\n * See {\\@link Routes} for more details and examples.\n *\n * \\@ngModule RouterModule\n *\n * \\@stable\n */\nclass Router {\n /**\n * Creates the router service.\n * @param {?} rootComponentType\n * @param {?} urlSerializer\n * @param {?} rootContexts\n * @param {?} location\n * @param {?} injector\n * @param {?} loader\n * @param {?} compiler\n * @param {?} config\n */\n constructor(rootComponentType, urlSerializer, rootContexts, location, injector, loader, compiler, config) {\n this.rootComponentType = rootComponentType;\n this.urlSerializer = urlSerializer;\n this.rootContexts = rootContexts;\n this.location = location;\n this.config = config;\n this.navigations = new BehaviorSubject(/** @type {?} */ ((null)));\n this.navigationId = 0;\n this.events = new Subject();\n /**\n * Error handler that is invoked when a navigation errors.\n *\n * See {\\@link ErrorHandler} for more information.\n */\n this.errorHandler = defaultErrorHandler;\n /**\n * Indicates if at least one navigation happened.\n */\n this.navigated = false;\n /**\n * Used by RouterModule. This allows us to\n * pause the navigation either before preactivation or after it.\n * \\@internal\n */\n this.hooks = {\n beforePreactivation: defaultRouterHook,\n afterPreactivation: defaultRouterHook\n };\n /**\n * Extracts and merges URLs. Used for AngularJS to Angular migrations.\n */\n this.urlHandlingStrategy = new DefaultUrlHandlingStrategy();\n this.routeReuseStrategy = new DefaultRouteReuseStrategy();\n /**\n * Define what the router should do if it receives a navigation request to the current URL.\n * By default, the router will ignore this navigation. However, this prevents features such\n * as a \"refresh\" button. Use this option to configure the behavior when navigating to the\n * current URL. Default is 'ignore'.\n */\n this.onSameUrlNavigation = 'ignore';\n /**\n * Defines how the router merges params, data and resolved data from parent to child\n * routes. Available options are:\n *\n * - `'emptyOnly'`, the default, only inherits parent params for path-less or component-less\n * routes.\n * - `'always'`, enables unconditional inheritance of parent params.\n */\n this.paramsInheritanceStrategy = 'emptyOnly';\n const /** @type {?} */ onLoadStart = (r) => this.triggerEvent(new RouteConfigLoadStart(r));\n const /** @type {?} */ onLoadEnd = (r) => this.triggerEvent(new RouteConfigLoadEnd(r));\n this.ngModule = injector.get(NgModuleRef);\n this.resetConfig(config);\n this.currentUrlTree = createEmptyUrlTree();\n this.rawUrlTree = this.currentUrlTree;\n this.configLoader = new RouterConfigLoader(loader, compiler, onLoadStart, onLoadEnd);\n this.routerState = createEmptyState(this.currentUrlTree, this.rootComponentType);\n this.processNavigations();\n }\n /**\n * \\@internal\n * TODO: this should be removed once the constructor of the router made internal\n * @param {?} rootComponentType\n * @return {?}\n */\n resetRootComponentType(rootComponentType) {\n this.rootComponentType = 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 = this.rootComponentType;\n }\n /**\n * Sets up the location change listener and performs the initial navigation.\n * @return {?}\n */\n initialNavigation() {\n this.setUpLocationChangeListener();\n if (this.navigationId === 0) {\n this.navigateByUrl(this.location.path(true), { replaceUrl: true });\n }\n }\n /**\n * Sets up the location change listener.\n * @return {?}\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 if (!this.locationSubscription) {\n this.locationSubscription = /** @type {?} */ (this.location.subscribe((change) => {\n const /** @type {?} */ rawUrlTree = this.urlSerializer.parse(change['url']);\n const /** @type {?} */ source = change['type'] === 'popstate' ? 'popstate' : 'hashchange';\n setTimeout(() => { this.scheduleNavigation(rawUrlTree, source, { replaceUrl: true }); }, 0);\n }));\n }\n }\n /**\n * The current url\n * @return {?}\n */\n get url() { return this.serializeUrl(this.currentUrlTree); }\n /**\n * \\@internal\n * @param {?} e\n * @return {?}\n */\n triggerEvent(e) { (/** @type {?} */ (this.events)).next(e); }\n /**\n * Resets the configuration used for navigation and generating links.\n *\n * ### Usage\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 * @param {?} config\n * @return {?}\n */\n resetConfig(config) {\n validateConfig(config);\n this.config = config.map(copyConfig);\n this.navigated = false;\n }\n /**\n * \\@docsNotRequired\n * @return {?}\n */\n ngOnDestroy() { this.dispose(); }\n /**\n * Disposes of the router\n * @return {?}\n */\n dispose() {\n if (this.locationSubscription) {\n this.locationSubscription.unsubscribe();\n this.locationSubscription = /** @type {?} */ ((null));\n }\n }\n /**\n * Applies an array of commands to the current url tree and creates a new url tree.\n *\n * When given an activate route, applies the given commands starting from the route.\n * When not given a route, applies the given command starting from the root.\n *\n * ### Usage\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, you\n * // can do the following:\n *\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 * @param {?} commands\n * @param {?=} navigationExtras\n * @return {?}\n */\n createUrlTree(commands, navigationExtras = {}) {\n const { relativeTo, queryParams, fragment, preserveQueryParams, queryParamsHandling, preserveFragment } = navigationExtras;\n if (isDevMode() && preserveQueryParams && /** @type {?} */ (console) && /** @type {?} */ (console.warn)) {\n console.warn('preserveQueryParams is deprecated, use queryParamsHandling instead.');\n }\n const /** @type {?} */ a = relativeTo || this.routerState.root;\n const /** @type {?} */ f = preserveFragment ? this.currentUrlTree.fragment : fragment;\n let /** @type {?} */ q = null;\n if (queryParamsHandling) {\n switch (queryParamsHandling) {\n case 'merge':\n q = Object.assign({}, this.currentUrlTree.queryParams, queryParams);\n break;\n case 'preserve':\n q = this.currentUrlTree.queryParams;\n break;\n default:\n q = queryParams || null;\n }\n }\n else {\n q = preserveQueryParams ? this.currentUrlTree.queryParams : queryParams || null;\n }\n if (q !== null) {\n q = this.removeEmptyProps(q);\n }\n return createUrlTree(a, this.currentUrlTree, commands, /** @type {?} */ ((q)), /** @type {?} */ ((f)));\n }\n /**\n * Navigate based on the provided url. This navigation is always absolute.\n *\n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\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 * In opposite to `navigate`, `navigateByUrl` takes a whole URL\n * and does not apply any delta to the current one.\n * @param {?} url\n * @param {?=} extras\n * @return {?}\n */\n navigateByUrl(url, extras = { skipLocationChange: false }) {\n const /** @type {?} */ urlTree = url instanceof UrlTree ? url : this.parseUrl(url);\n const /** @type {?} */ mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);\n return this.scheduleNavigation(mergedTree, 'imperative', 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 * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n *\n * ### Usage\n *\n * ```\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n *\n * // Navigate without updating the URL\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n * ```\n *\n * In opposite to `navigateByUrl`, `navigate` always takes a delta that is applied to the current\n * URL.\n * @param {?} commands\n * @param {?=} extras\n * @return {?}\n */\n navigate(commands, extras = { skipLocationChange: false }) {\n validateCommands(commands);\n return this.navigateByUrl(this.createUrlTree(commands, extras), extras);\n }\n /**\n * Serializes a {\\@link UrlTree} into a string\n * @param {?} url\n * @return {?}\n */\n serializeUrl(url) { return this.urlSerializer.serialize(url); }\n /**\n * Parses a string into a {\\@link UrlTree}\n * @param {?} url\n * @return {?}\n */\n parseUrl(url) { return this.urlSerializer.parse(url); }\n /**\n * Returns whether the url is activated\n * @param {?} url\n * @param {?} exact\n * @return {?}\n */\n isActive(url, exact) {\n if (url instanceof UrlTree) {\n return containsTree(this.currentUrlTree, url, exact);\n }\n const /** @type {?} */ urlTree = this.urlSerializer.parse(url);\n return containsTree(this.currentUrlTree, urlTree, exact);\n }\n /**\n * @param {?} params\n * @return {?}\n */\n removeEmptyProps(params) {\n return Object.keys(params).reduce((result, key) => {\n const /** @type {?} */ value = params[key];\n if (value !== null && value !== undefined) {\n result[key] = value;\n }\n return result;\n }, {});\n }\n /**\n * @return {?}\n */\n processNavigations() {\n concatMap\n .call(this.navigations, (nav) => {\n if (nav) {\n this.executeScheduledNavigation(nav);\n // a failed navigation should not stop the router from processing\n // further navigations => the catch\n return nav.promise.catch(() => { });\n }\n else {\n return /** @type {?} */ (of(null));\n }\n })\n .subscribe(() => { });\n }\n /**\n * @param {?} rawUrl\n * @param {?} source\n * @param {?} extras\n * @return {?}\n */\n scheduleNavigation(rawUrl, source, extras) {\n const /** @type {?} */ lastNavigation = this.navigations.value;\n // If the user triggers a navigation imperatively (e.g., by using navigateByUrl),\n // and that navigation results in 'replaceState' that leads to the same URL,\n // we should skip those.\n if (lastNavigation && source !== 'imperative' && lastNavigation.source === 'imperative' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return Promise.resolve(true); // return value is not used\n }\n // Because of a bug in IE and Edge, the location class fires two events (popstate and\n // hashchange) every single time. The second one should be ignored. Otherwise, the URL will\n // flicker. Handles the case when a popstate was emitted first.\n if (lastNavigation && source == 'hashchange' && lastNavigation.source === 'popstate' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return Promise.resolve(true); // return value is not used\n }\n // Because of a bug in IE and Edge, the location class fires two events (popstate and\n // hashchange) every single time. The second one should be ignored. Otherwise, the URL will\n // flicker. Handles the case when a hashchange was emitted first.\n if (lastNavigation && source == 'popstate' && lastNavigation.source === 'hashchange' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return Promise.resolve(true); // return value is not used\n }\n let /** @type {?} */ resolve = null;\n let /** @type {?} */ reject = null;\n const /** @type {?} */ promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n const /** @type {?} */ id = ++this.navigationId;\n this.navigations.next({ id, source, rawUrl, extras, resolve, reject, promise });\n // Make sure that the error is propagated even though `processNavigations` catch\n // handler does not rethrow\n return promise.catch((e) => Promise.reject(e));\n }\n /**\n * @param {?} __0\n * @return {?}\n */\n executeScheduledNavigation({ id, rawUrl, extras, resolve, reject }) {\n const /** @type {?} */ url = this.urlHandlingStrategy.extract(rawUrl);\n const /** @type {?} */ urlTransition = !this.navigated || url.toString() !== this.currentUrlTree.toString();\n if ((this.onSameUrlNavigation === 'reload' ? true : urlTransition) &&\n this.urlHandlingStrategy.shouldProcessUrl(rawUrl)) {\n (/** @type {?} */ (this.events)).next(new NavigationStart(id, this.serializeUrl(url)));\n Promise.resolve()\n .then((_) => this.runNavigate(url, rawUrl, !!extras.skipLocationChange, !!extras.replaceUrl, id, null))\n .then(resolve, reject);\n // we cannot process the current URL, but we could process the previous one =>\n // we need to do some cleanup\n }\n else if (urlTransition && this.rawUrlTree &&\n this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)) {\n (/** @type {?} */ (this.events)).next(new NavigationStart(id, this.serializeUrl(url)));\n Promise.resolve()\n .then((_) => this.runNavigate(url, rawUrl, false, false, id, createEmptyState(url, this.rootComponentType).snapshot))\n .then(resolve, reject);\n }\n else {\n this.rawUrlTree = rawUrl;\n resolve(null);\n }\n }\n /**\n * @param {?} url\n * @param {?} rawUrl\n * @param {?} skipLocationChange\n * @param {?} replaceUrl\n * @param {?} id\n * @param {?} precreatedState\n * @return {?}\n */\n runNavigate(url, rawUrl, skipLocationChange, replaceUrl, id, precreatedState) {\n if (id !== this.navigationId) {\n (/** @type {?} */ (this.events))\n .next(new NavigationCancel(id, this.serializeUrl(url), `Navigation ID ${id} is not equal to the current navigation id ${this.navigationId}`));\n return Promise.resolve(false);\n }\n return new Promise((resolvePromise, rejectPromise) => {\n // create an observable of the url and route state snapshot\n // this operation do not result in any side effects\n let /** @type {?} */ urlAndSnapshot$;\n if (!precreatedState) {\n const /** @type {?} */ moduleInjector = this.ngModule.injector;\n const /** @type {?} */ redirectsApplied$ = applyRedirects(moduleInjector, this.configLoader, this.urlSerializer, url, this.config);\n urlAndSnapshot$ = mergeMap.call(redirectsApplied$, (appliedUrl) => {\n return map.call(recognize(this.rootComponentType, this.config, appliedUrl, this.serializeUrl(appliedUrl), this.paramsInheritanceStrategy), (snapshot) => {\n (/** @type {?} */ (this.events))\n .next(new RoutesRecognized(id, this.serializeUrl(url), this.serializeUrl(appliedUrl), snapshot));\n return { appliedUrl, snapshot };\n });\n });\n }\n else {\n urlAndSnapshot$ = of({ appliedUrl: url, snapshot: precreatedState });\n }\n const /** @type {?} */ beforePreactivationDone$ = mergeMap.call(urlAndSnapshot$, (p) => {\n return map.call(this.hooks.beforePreactivation(p.snapshot), () => p);\n });\n // run preactivation: guards and data resolvers\n let /** @type {?} */ preActivation;\n const /** @type {?} */ preactivationSetup$ = map.call(beforePreactivationDone$, ({ appliedUrl, snapshot }) => {\n const /** @type {?} */ moduleInjector = this.ngModule.injector;\n preActivation = new PreActivation(snapshot, this.routerState.snapshot, moduleInjector, (evt) => this.triggerEvent(evt));\n preActivation.initialize(this.rootContexts);\n return { appliedUrl, snapshot };\n });\n const /** @type {?} */ preactivationCheckGuards$ = mergeMap.call(preactivationSetup$, ({ appliedUrl, snapshot }) => {\n if (this.navigationId !== id)\n return of(false);\n this.triggerEvent(new GuardsCheckStart(id, this.serializeUrl(url), appliedUrl, snapshot));\n return map.call(preActivation.checkGuards(), (shouldActivate) => {\n this.triggerEvent(new GuardsCheckEnd(id, this.serializeUrl(url), appliedUrl, snapshot, shouldActivate));\n return { appliedUrl: appliedUrl, snapshot: snapshot, shouldActivate: shouldActivate };\n });\n });\n const /** @type {?} */ preactivationResolveData$ = mergeMap.call(preactivationCheckGuards$, (p) => {\n if (this.navigationId !== id)\n return of(false);\n if (p.shouldActivate && preActivation.isActivating()) {\n this.triggerEvent(new ResolveStart(id, this.serializeUrl(url), p.appliedUrl, p.snapshot));\n return map.call(preActivation.resolveData(this.paramsInheritanceStrategy), () => {\n this.triggerEvent(new ResolveEnd(id, this.serializeUrl(url), p.appliedUrl, p.snapshot));\n return p;\n });\n }\n else {\n return of(p);\n }\n });\n const /** @type {?} */ preactivationDone$ = mergeMap.call(preactivationResolveData$, (p) => {\n return map.call(this.hooks.afterPreactivation(p.snapshot), () => p);\n });\n // create router state\n // this operation has side effects => route state is being affected\n const /** @type {?} */ routerState$ = map.call(preactivationDone$, ({ appliedUrl, snapshot, shouldActivate }) => {\n if (shouldActivate) {\n const /** @type {?} */ state = createRouterState(this.routeReuseStrategy, snapshot, this.routerState);\n return { appliedUrl, state, shouldActivate };\n }\n else {\n return { appliedUrl, state: null, shouldActivate };\n }\n });\n this.activateRoutes(routerState$, this.routerState, this.currentUrlTree, id, url, rawUrl, skipLocationChange, replaceUrl, resolvePromise, rejectPromise);\n });\n }\n /**\n * Performs the logic of activating routes. This is a synchronous process by default. While this\n * is a private method, it could be overridden to make activation asynchronous.\n * @param {?} state\n * @param {?} storedState\n * @param {?} storedUrl\n * @param {?} id\n * @param {?} url\n * @param {?} rawUrl\n * @param {?} skipLocationChange\n * @param {?} replaceUrl\n * @param {?} resolvePromise\n * @param {?} rejectPromise\n * @return {?}\n */\n activateRoutes(state, storedState, storedUrl, id, url, rawUrl, skipLocationChange, replaceUrl, resolvePromise, rejectPromise) {\n // applied the new router state\n // this operation has side effects\n let /** @type {?} */ navigationIsSuccessful;\n state\n .forEach(({ appliedUrl, state, shouldActivate }) => {\n if (!shouldActivate || id !== this.navigationId) {\n navigationIsSuccessful = false;\n return;\n }\n this.currentUrlTree = appliedUrl;\n this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, rawUrl);\n (/** @type {?} */ (this)).routerState = state;\n if (!skipLocationChange) {\n const /** @type {?} */ path = this.urlSerializer.serialize(this.rawUrlTree);\n if (this.location.isCurrentPathEqualTo(path) || replaceUrl) {\n this.location.replaceState(path);\n }\n else {\n this.location.go(path);\n }\n }\n new ActivateRoutes(this.routeReuseStrategy, state, storedState, (evt) => this.triggerEvent(evt))\n .activate(this.rootContexts);\n navigationIsSuccessful = true;\n })\n .then(() => {\n if (navigationIsSuccessful) {\n this.navigated = true;\n (/** @type {?} */ (this.events))\n .next(new NavigationEnd(id, this.serializeUrl(url), this.serializeUrl(this.currentUrlTree)));\n resolvePromise(true);\n }\n else {\n this.resetUrlToCurrentUrlTree();\n (/** @type {?} */ (this.events))\n .next(new NavigationCancel(id, this.serializeUrl(url), ''));\n resolvePromise(false);\n }\n }, (e) => {\n if (isNavigationCancelingError(e)) {\n this.navigated = true;\n this.resetStateAndUrl(storedState, storedUrl, rawUrl);\n (/** @type {?} */ (this.events))\n .next(new NavigationCancel(id, this.serializeUrl(url), e.message));\n resolvePromise(false);\n }\n else {\n this.resetStateAndUrl(storedState, storedUrl, rawUrl);\n (/** @type {?} */ (this.events))\n .next(new NavigationError(id, this.serializeUrl(url), e));\n try {\n resolvePromise(this.errorHandler(e));\n }\n catch (/** @type {?} */ ee) {\n rejectPromise(ee);\n }\n }\n });\n }\n /**\n * @param {?} storedState\n * @param {?} storedUrl\n * @param {?} rawUrl\n * @return {?}\n */\n resetStateAndUrl(storedState, storedUrl, rawUrl) {\n (/** @type {?} */ (this)).routerState = storedState;\n this.currentUrlTree = storedUrl;\n this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, rawUrl);\n this.resetUrlToCurrentUrlTree();\n }\n /**\n * @return {?}\n */\n resetUrlToCurrentUrlTree() {\n this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree));\n }\n}\nclass ActivateRoutes {\n /**\n * @param {?} routeReuseStrategy\n * @param {?} futureState\n * @param {?} currState\n * @param {?} forwardEvent\n */\n constructor(routeReuseStrategy, futureState, currState, forwardEvent) {\n this.routeReuseStrategy = routeReuseStrategy;\n this.futureState = futureState;\n this.currState = currState;\n this.forwardEvent = forwardEvent;\n }\n /**\n * @param {?} parentContexts\n * @return {?}\n */\n activate(parentContexts) {\n const /** @type {?} */ futureRoot = this.futureState._root;\n const /** @type {?} */ 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 /**\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} contexts\n * @return {?}\n */\n deactivateChildRoutes(futureNode, currNode, contexts) {\n const /** @type {?} */ 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 /** @type {?} */ 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 forEach(children, (v, childName) => {\n this.deactivateRouteAndItsChildren(v, contexts);\n });\n }\n /**\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} parentContext\n * @return {?}\n */\n deactivateRoutes(futureNode, currNode, parentContext) {\n const /** @type {?} */ future = futureNode.value;\n const /** @type {?} */ 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 /** @type {?} */ context = parentContext.getContext(future.outlet);\n if (context) {\n this.deactivateChildRoutes(futureNode, currNode, context.children);\n }\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 }\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 /**\n * @param {?} route\n * @param {?} parentContexts\n * @return {?}\n */\n deactivateRouteAndItsChildren(route, parentContexts) {\n if (this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {\n this.detachAndStoreRouteSubtree(route, parentContexts);\n }\n else {\n this.deactivateRouteAndOutlet(route, parentContexts);\n }\n }\n /**\n * @param {?} route\n * @param {?} parentContexts\n * @return {?}\n */\n detachAndStoreRouteSubtree(route, parentContexts) {\n const /** @type {?} */ context = parentContexts.getContext(route.value.outlet);\n if (context && context.outlet) {\n const /** @type {?} */ componentRef = context.outlet.detach();\n const /** @type {?} */ contexts = context.children.onOutletDeactivated();\n this.routeReuseStrategy.store(route.value.snapshot, { componentRef, route, contexts });\n }\n }\n /**\n * @param {?} route\n * @param {?} parentContexts\n * @return {?}\n */\n deactivateRouteAndOutlet(route, parentContexts) {\n const /** @type {?} */ context = parentContexts.getContext(route.value.outlet);\n if (context) {\n const /** @type {?} */ children = nodeChildrenAsMap(route);\n const /** @type {?} */ contexts = route.value.component ? context.children : parentContexts;\n forEach(children, (v, k) => this.deactivateRouteAndItsChildren(v, contexts));\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 }\n }\n /**\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} contexts\n * @return {?}\n */\n activateChildRoutes(futureNode, currNode, contexts) {\n const /** @type {?} */ 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 /**\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} parentContexts\n * @return {?}\n */\n activateRoutes(futureNode, currNode, parentContexts) {\n const /** @type {?} */ future = futureNode.value;\n const /** @type {?} */ 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 /** @type {?} */ context = parentContexts.getOrCreateContext(future.outlet);\n this.activateChildRoutes(futureNode, currNode, context.children);\n }\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 }\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 /** @type {?} */ context = parentContexts.getOrCreateContext(future.outlet);\n if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {\n const /** @type {?} */ stored = (/** @type {?} */ (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 advanceActivatedRouteNodeAndItsChildren(stored.route);\n }\n else {\n const /** @type {?} */ config = parentLoadedConfig(future.snapshot);\n const /** @type {?} */ cmpFactoryResolver = config ? config.module.componentFactoryResolver : null;\n context.route = future;\n context.resolver = cmpFactoryResolver;\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, cmpFactoryResolver);\n }\n this.activateChildRoutes(futureNode, null, context.children);\n }\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 }\n}\n/**\n * @param {?} node\n * @return {?}\n */\nfunction advanceActivatedRouteNodeAndItsChildren(node) {\n advanceActivatedRoute(node.value);\n node.children.forEach(advanceActivatedRouteNodeAndItsChildren);\n}\n/**\n * @param {?} snapshot\n * @return {?}\n */\nfunction parentLoadedConfig(snapshot) {\n for (let /** @type {?} */ s = snapshot.parent; s; s = s.parent) {\n const /** @type {?} */ route = s.routeConfig;\n if (route && route._loadedConfig)\n return route._loadedConfig;\n if (route && route.component)\n return null;\n }\n return null;\n}\n/**\n * @param {?} commands\n * @return {?}\n */\nfunction validateCommands(commands) {\n for (let /** @type {?} */ i = 0; i < commands.length; i++) {\n const /** @type {?} */ cmd = commands[i];\n if (cmd == null) {\n throw new Error(`The requested path contains ${cmd} segment at index ${i}`);\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Lets you link to specific parts of your app.\n *\n * \\@howToUse\n *\n * Consider the following route configuration:\n * `[{ path: 'user/:name', component: UserCmp }]`\n *\n * When linking to this `user/:name` route, you can write:\n * `<a routerLink='/user/bob'>link to user component</a>`\n *\n * \\@description\n *\n * The RouterLink directives let you link to specific parts of your app.\n *\n * When the link is static, you can use the directive as follows:\n * `<a routerLink=\"/user/bob\">link to user component</a>`\n *\n * If you use dynamic values to generate the link, you can pass an array of path\n * segments, followed by the params for each segment.\n *\n * For instance `['/team', teamId, 'user', userName, {details: true}]`\n * means that we want to generate a link to `/team/11/user/bob;details=true`.\n *\n * Multiple static segments can be merged into one\n * (e.g., `['/team/11/user', userName, {details: true}]`).\n *\n * The first segment name can be prepended with `/`, `./`, or `../`:\n * * If the first segment begins with `/`, the router will look 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 will\n * instead look in the children of the current activated route.\n * * And if the first segment begins with `../`, the router will go up one level.\n *\n * You can set query params and fragment as follows:\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" fragment=\"education\">\n * link to user component\n * </a>\n * ```\n * RouterLink will use these to generate this link: `/user/bob#education?debug=true`.\n *\n * (Deprecated in v4.0.0 use `queryParamsHandling` instead) You can also tell the\n * directive to preserve the current query params and fragment:\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" preserveQueryParams preserveFragment>\n * link to user component\n * </a>\n * ```\n *\n * You can tell the directive to how to handle queryParams, available options are:\n * - `'merge'`: merge the queryParams into the current queryParams\n * - `'preserve'`: preserve the current queryParams\n * - default/`''`: use the queryParams only\n *\n * Same options for {\\@link NavigationExtras#queryParamsHandling\n * NavigationExtras#queryParamsHandling}.\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" queryParamsHandling=\"merge\">\n * link to user component\n * </a>\n * ```\n *\n * The router link directive always treats the provided input as a delta to the current url.\n *\n * For instance, if the current url is `/user/(box//aux:team)`.\n *\n * Then the following link `<a [routerLink]=\"['/user/jim']\">Jim</a>` will generate the link\n * `/user/(jim//aux:team)`.\n *\n * See {\\@link Router#createUrlTree createUrlTree} for more information.\n *\n * \\@ngModule RouterModule\n *\n * \\@stable\n */\nclass RouterLink {\n /**\n * @param {?} router\n * @param {?} route\n * @param {?} tabIndex\n * @param {?} renderer\n * @param {?} el\n */\n constructor(router, route, tabIndex, renderer, el) {\n this.router = router;\n this.route = route;\n this.commands = [];\n if (tabIndex == null) {\n renderer.setAttribute(el.nativeElement, 'tabindex', '0');\n }\n }\n /**\n * @param {?} commands\n * @return {?}\n */\n set routerLink(commands) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n }\n else {\n this.commands = [];\n }\n }\n /**\n * @deprecated 4.0.0 use `queryParamsHandling` instead.\n * @param {?} value\n * @return {?}\n */\n set preserveQueryParams(value) {\n if (isDevMode() && /** @type {?} */ (console) && /** @type {?} */ (console.warn)) {\n console.warn('preserveQueryParams is deprecated!, use queryParamsHandling instead.');\n }\n this.preserve = value;\n }\n /**\n * @return {?}\n */\n onClick() {\n const /** @type {?} */ extras = {\n skipLocationChange: attrBoolValue(this.skipLocationChange),\n replaceUrl: attrBoolValue(this.replaceUrl),\n };\n this.router.navigateByUrl(this.urlTree, extras);\n return true;\n }\n /**\n * @return {?}\n */\n get urlTree() {\n return this.router.createUrlTree(this.commands, {\n relativeTo: this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n preserveQueryParams: attrBoolValue(this.preserve),\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: attrBoolValue(this.preserveFragment),\n });\n }\n}\nRouterLink.decorators = [\n { type: Directive, args: [{ selector: ':not(a)[routerLink]' },] },\n];\n/** @nocollapse */\nRouterLink.ctorParameters = () => [\n { type: Router, },\n { type: ActivatedRoute, },\n { type: undefined, decorators: [{ type: Attribute, args: ['tabindex',] },] },\n { type: Renderer2, },\n { type: ElementRef, },\n];\nRouterLink.propDecorators = {\n \"queryParams\": [{ type: Input },],\n \"fragment\": [{ type: Input },],\n \"queryParamsHandling\": [{ type: Input },],\n \"preserveFragment\": [{ type: Input },],\n \"skipLocationChange\": [{ type: Input },],\n \"replaceUrl\": [{ type: Input },],\n \"routerLink\": [{ type: Input },],\n \"preserveQueryParams\": [{ type: Input },],\n \"onClick\": [{ type: HostListener, args: ['click',] },],\n};\n/**\n * \\@whatItDoes Lets you link to specific parts of your app.\n *\n * See {\\@link RouterLink} for more information.\n *\n * \\@ngModule RouterModule\n *\n * \\@stable\n */\nclass RouterLinkWithHref {\n /**\n * @param {?} router\n * @param {?} route\n * @param {?} locationStrategy\n */\n constructor(router, route, locationStrategy) {\n this.router = router;\n this.route = route;\n this.locationStrategy = locationStrategy;\n this.commands = [];\n this.subscription = router.events.subscribe(s => {\n if (s instanceof NavigationEnd) {\n this.updateTargetUrlAndHref();\n }\n });\n }\n /**\n * @param {?} commands\n * @return {?}\n */\n set routerLink(commands) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n }\n else {\n this.commands = [];\n }\n }\n /**\n * @param {?} value\n * @return {?}\n */\n set preserveQueryParams(value) {\n if (isDevMode() && /** @type {?} */ (console) && /** @type {?} */ (console.warn)) {\n console.warn('preserveQueryParams is deprecated, use queryParamsHandling instead.');\n }\n this.preserve = value;\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) { this.updateTargetUrlAndHref(); }\n /**\n * @return {?}\n */\n ngOnDestroy() { this.subscription.unsubscribe(); }\n /**\n * @param {?} button\n * @param {?} ctrlKey\n * @param {?} metaKey\n * @param {?} shiftKey\n * @return {?}\n */\n onClick(button, ctrlKey, metaKey, shiftKey) {\n if (button !== 0 || ctrlKey || metaKey || shiftKey) {\n return true;\n }\n if (typeof this.target === 'string' && this.target != '_self') {\n return true;\n }\n const /** @type {?} */ extras = {\n skipLocationChange: attrBoolValue(this.skipLocationChange),\n replaceUrl: attrBoolValue(this.replaceUrl),\n };\n this.router.navigateByUrl(this.urlTree, extras);\n return false;\n }\n /**\n * @return {?}\n */\n updateTargetUrlAndHref() {\n this.href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree));\n }\n /**\n * @return {?}\n */\n get urlTree() {\n return this.router.createUrlTree(this.commands, {\n relativeTo: this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n preserveQueryParams: attrBoolValue(this.preserve),\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: attrBoolValue(this.preserveFragment),\n });\n }\n}\nRouterLinkWithHref.decorators = [\n { type: Directive, args: [{ selector: 'a[routerLink]' },] },\n];\n/** @nocollapse */\nRouterLinkWithHref.ctorParameters = () => [\n { type: Router, },\n { type: ActivatedRoute, },\n { type: LocationStrategy, },\n];\nRouterLinkWithHref.propDecorators = {\n \"target\": [{ type: HostBinding, args: ['attr.target',] }, { type: Input },],\n \"queryParams\": [{ type: Input },],\n \"fragment\": [{ type: Input },],\n \"queryParamsHandling\": [{ type: Input },],\n \"preserveFragment\": [{ type: Input },],\n \"skipLocationChange\": [{ type: Input },],\n \"replaceUrl\": [{ type: Input },],\n \"href\": [{ type: HostBinding },],\n \"routerLink\": [{ type: Input },],\n \"preserveQueryParams\": [{ type: Input },],\n \"onClick\": [{ type: HostListener, args: ['click', ['$event.button', '$event.ctrlKey', '$event.metaKey', '$event.shiftKey'],] },],\n};\n/**\n * @param {?} s\n * @return {?}\n */\nfunction attrBoolValue(s) {\n return s === '' || !!s;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Lets you add a CSS class to an element when the link's route becomes active.\n *\n * \\@howToUse\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\">Bob</a>\n * ```\n *\n * \\@description\n *\n * The RouterLinkActive directive lets you add a CSS class to an element when the link's route\n * becomes active.\n *\n * Consider the following example:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\">Bob</a>\n * ```\n *\n * When the url is either '/user' or '/user/bob', the active-link class will\n * be added to the `a` tag. If the url changes, the class will be removed.\n *\n * You can set more than one class, as follows:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"class1 class2\">Bob</a>\n * <a routerLink=\"/user/bob\" [routerLinkActive]=\"['class1', 'class2']\">Bob</a>\n * ```\n *\n * You can configure RouterLinkActive by passing `exact: true`. This will add the classes\n * only when the url matches the link exactly.\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact:\n * true}\">Bob</a>\n * ```\n *\n * You can assign the RouterLinkActive instance to a template variable and directly check\n * the `isActive` status.\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive #rla=\"routerLinkActive\">\n * Bob {{ rla.isActive ? '(already open)' : ''}}\n * </a>\n * ```\n *\n * Finally, you can apply the RouterLinkActive directive to an ancestor of a RouterLink.\n *\n * ```\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 * This will set the active-link class on the div tag if the url is either '/user/jim' or\n * '/user/bob'.\n *\n * \\@ngModule RouterModule\n *\n * \\@stable\n */\nclass RouterLinkActive {\n /**\n * @param {?} router\n * @param {?} element\n * @param {?} renderer\n * @param {?} cdr\n */\n constructor(router, element, renderer, cdr) {\n this.router = router;\n this.element = element;\n this.renderer = renderer;\n this.cdr = cdr;\n this.classes = [];\n this.isActive = false;\n this.routerLinkActiveOptions = { exact: false };\n this.subscription = router.events.subscribe(s => {\n if (s instanceof NavigationEnd) {\n this.update();\n }\n });\n }\n /**\n * @return {?}\n */\n ngAfterContentInit() {\n this.links.changes.subscribe(_ => this.update());\n this.linksWithHrefs.changes.subscribe(_ => this.update());\n this.update();\n }\n /**\n * @param {?} data\n * @return {?}\n */\n set routerLinkActive(data) {\n const /** @type {?} */ classes = Array.isArray(data) ? data : data.split(' ');\n this.classes = classes.filter(c => !!c);\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) { this.update(); }\n /**\n * @return {?}\n */\n ngOnDestroy() { this.subscription.unsubscribe(); }\n /**\n * @return {?}\n */\n update() {\n if (!this.links || !this.linksWithHrefs || !this.router.navigated)\n return;\n Promise.resolve().then(() => {\n const /** @type {?} */ hasActiveLinks = this.hasActiveLinks();\n if (this.isActive !== hasActiveLinks) {\n (/** @type {?} */ (this)).isActive = hasActiveLinks;\n this.classes.forEach((c) => {\n if (hasActiveLinks) {\n this.renderer.addClass(this.element.nativeElement, c);\n }\n else {\n this.renderer.removeClass(this.element.nativeElement, c);\n }\n });\n }\n });\n }\n /**\n * @param {?} router\n * @return {?}\n */\n isLinkActive(router) {\n return (link) => router.isActive(link.urlTree, this.routerLinkActiveOptions.exact);\n }\n /**\n * @return {?}\n */\n hasActiveLinks() {\n return this.links.some(this.isLinkActive(this.router)) ||\n this.linksWithHrefs.some(this.isLinkActive(this.router));\n }\n}\nRouterLinkActive.decorators = [\n { type: Directive, args: [{\n selector: '[routerLinkActive]',\n exportAs: 'routerLinkActive',\n },] },\n];\n/** @nocollapse */\nRouterLinkActive.ctorParameters = () => [\n { type: Router, },\n { type: ElementRef, },\n { type: Renderer2, },\n { type: ChangeDetectorRef, },\n];\nRouterLinkActive.propDecorators = {\n \"links\": [{ type: ContentChildren, args: [RouterLink, { descendants: true },] },],\n \"linksWithHrefs\": [{ type: ContentChildren, args: [RouterLinkWithHref, { descendants: true },] },],\n \"routerLinkActiveOptions\": [{ type: Input },],\n \"routerLinkActive\": [{ type: Input },],\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * Store contextual information about a {\\@link RouterOutlet}\n *\n * \\@stable\n */\nclass OutletContext {\n constructor() {\n this.outlet = null;\n this.route = null;\n this.resolver = null;\n this.children = new ChildrenOutletContexts();\n this.attachRef = null;\n }\n}\n/**\n * Store contextual information about the children (= nested) {\\@link RouterOutlet}\n *\n * \\@stable\n */\nclass ChildrenOutletContexts {\n constructor() {\n this.contexts = new Map();\n }\n /**\n * Called when a `RouterOutlet` directive is instantiated\n * @param {?} childName\n * @param {?} outlet\n * @return {?}\n */\n onChildOutletCreated(childName, outlet) {\n const /** @type {?} */ 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 * @param {?} childName\n * @return {?}\n */\n onChildOutletDestroyed(childName) {\n const /** @type {?} */ context = this.getContext(childName);\n if (context) {\n context.outlet = 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 * @return {?}\n */\n onOutletDeactivated() {\n const /** @type {?} */ contexts = this.contexts;\n this.contexts = new Map();\n return contexts;\n }\n /**\n * @param {?} contexts\n * @return {?}\n */\n onOutletReAttached(contexts) { this.contexts = contexts; }\n /**\n * @param {?} childName\n * @return {?}\n */\n getOrCreateContext(childName) {\n let /** @type {?} */ context = this.getContext(childName);\n if (!context) {\n context = new OutletContext();\n this.contexts.set(childName, context);\n }\n return context;\n }\n /**\n * @param {?} childName\n * @return {?}\n */\n getContext(childName) { return this.contexts.get(childName) || null; }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Acts as a placeholder that Angular dynamically fills based on the current router\n * state.\n *\n * \\@howToUse\n *\n * ```\n * <router-outlet></router-outlet>\n * <router-outlet name='left'></router-outlet>\n * <router-outlet name='right'></router-outlet>\n * ```\n *\n * A router outlet will emit an activate event any time a new component is being instantiated,\n * and a deactivate event when it is being destroyed.\n *\n * ```\n * <router-outlet\n * (activate)='onActivate($event)'\n * (deactivate)='onDeactivate($event)'></router-outlet>\n * ```\n * \\@ngModule RouterModule\n *\n * \\@stable\n */\nclass RouterOutlet {\n /**\n * @param {?} parentContexts\n * @param {?} location\n * @param {?} resolver\n * @param {?} name\n * @param {?} changeDetector\n */\n constructor(parentContexts, location, resolver, name, changeDetector) {\n this.parentContexts = parentContexts;\n this.location = location;\n this.resolver = resolver;\n this.changeDetector = changeDetector;\n this.activated = null;\n this._activatedRoute = null;\n this.activateEvents = new EventEmitter();\n this.deactivateEvents = new EventEmitter();\n this.name = name || PRIMARY_OUTLET;\n parentContexts.onChildOutletCreated(this.name, this);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() { this.parentContexts.onChildOutletDestroyed(this.name); }\n /**\n * @return {?}\n */\n ngOnInit() {\n if (!this.activated) {\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 /** @type {?} */ context = this.parentContexts.getContext(this.name);\n if (context && 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 }\n else {\n // otherwise the component defined in the configuration is created\n this.activateWith(context.route, context.resolver || null);\n }\n }\n }\n }\n /**\n * @return {?}\n */\n get isActivated() { return !!this.activated; }\n /**\n * @return {?}\n */\n get component() {\n if (!this.activated)\n throw new Error('Outlet is not activated');\n return this.activated.instance;\n }\n /**\n * @return {?}\n */\n get activatedRoute() {\n if (!this.activated)\n throw new Error('Outlet is not activated');\n return /** @type {?} */ (this._activatedRoute);\n }\n /**\n * @return {?}\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 * @return {?}\n */\n detach() {\n if (!this.activated)\n throw new Error('Outlet is not activated');\n this.location.detach();\n const /** @type {?} */ cmp = this.activated;\n this.activated = null;\n this._activatedRoute = null;\n return cmp;\n }\n /**\n * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n * @param {?} ref\n * @param {?} activatedRoute\n * @return {?}\n */\n attach(ref, activatedRoute) {\n this.activated = ref;\n this._activatedRoute = activatedRoute;\n this.location.insert(ref.hostView);\n }\n /**\n * @return {?}\n */\n deactivate() {\n if (this.activated) {\n const /** @type {?} */ c = this.component;\n this.activated.destroy();\n this.activated = null;\n this._activatedRoute = null;\n this.deactivateEvents.emit(c);\n }\n }\n /**\n * @param {?} activatedRoute\n * @param {?} resolver\n * @return {?}\n */\n activateWith(activatedRoute, resolver) {\n if (this.isActivated) {\n throw new Error('Cannot activate an already activated outlet');\n }\n this._activatedRoute = activatedRoute;\n const /** @type {?} */ snapshot = activatedRoute._futureSnapshot;\n const /** @type {?} */ component = /** @type {?} */ (/** @type {?} */ ((snapshot.routeConfig)).component);\n resolver = resolver || this.resolver;\n const /** @type {?} */ factory = resolver.resolveComponentFactory(component);\n const /** @type {?} */ childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n const /** @type {?} */ injector = new OutletInjector(activatedRoute, childContexts, this.location.injector);\n this.activated = this.location.createComponent(factory, this.location.length, injector);\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.activateEvents.emit(this.activated.instance);\n }\n}\nRouterOutlet.decorators = [\n { type: Directive, args: [{ selector: 'router-outlet', exportAs: 'outlet' },] },\n];\n/** @nocollapse */\nRouterOutlet.ctorParameters = () => [\n { type: ChildrenOutletContexts, },\n { type: ViewContainerRef, },\n { type: ComponentFactoryResolver, },\n { type: undefined, decorators: [{ type: Attribute, args: ['name',] },] },\n { type: ChangeDetectorRef, },\n];\nRouterOutlet.propDecorators = {\n \"activateEvents\": [{ type: Output, args: ['activate',] },],\n \"deactivateEvents\": [{ type: Output, args: ['deactivate',] },],\n};\nclass OutletInjector {\n /**\n * @param {?} route\n * @param {?} childContexts\n * @param {?} parent\n */\n constructor(route, childContexts, parent) {\n this.route = route;\n this.childContexts = childContexts;\n this.parent = parent;\n }\n /**\n * @param {?} token\n * @param {?=} notFoundValue\n * @return {?}\n */\n get(token, notFoundValue) {\n if (token === ActivatedRoute) {\n return this.route;\n }\n if (token === ChildrenOutletContexts) {\n return this.childContexts;\n }\n return this.parent.get(token, notFoundValue);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n*@license\n*Copyright Google Inc. 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.io/license\n*/\n/**\n * \\@whatItDoes Provides a preloading strategy.\n *\n * \\@experimental\n * @abstract\n */\nclass PreloadingStrategy {\n}\n/**\n * \\@whatItDoes Provides a preloading strategy that preloads all modules as quickly as possible.\n *\n * \\@howToUse\n *\n * ```\n * RouteModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})\n * ```\n *\n * \\@experimental\n */\nclass PreloadAllModules {\n /**\n * @param {?} route\n * @param {?} fn\n * @return {?}\n */\n preload(route, fn) {\n return _catch.call(fn(), () => of(null));\n }\n}\n/**\n * \\@whatItDoes Provides a preloading strategy that does not preload any modules.\n *\n * \\@description\n *\n * This strategy is enabled by default.\n *\n * \\@experimental\n */\nclass NoPreloading {\n /**\n * @param {?} route\n * @param {?} fn\n * @return {?}\n */\n preload(route, fn) { return of(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 * \\@stable\n */\nclass RouterPreloader {\n /**\n * @param {?} router\n * @param {?} moduleLoader\n * @param {?} compiler\n * @param {?} injector\n * @param {?} preloadingStrategy\n */\n constructor(router, moduleLoader, compiler, injector, preloadingStrategy) {\n this.router = router;\n this.injector = injector;\n this.preloadingStrategy = preloadingStrategy;\n const /** @type {?} */ onStartLoad = (r) => router.triggerEvent(new RouteConfigLoadStart(r));\n const /** @type {?} */ onEndLoad = (r) => router.triggerEvent(new RouteConfigLoadEnd(r));\n this.loader = new RouterConfigLoader(moduleLoader, compiler, onStartLoad, onEndLoad);\n }\n /**\n * @return {?}\n */\n setUpPreloading() {\n const /** @type {?} */ navigations$ = filter.call(this.router.events, (e) => e instanceof NavigationEnd);\n this.subscription = concatMap.call(navigations$, () => this.preload()).subscribe(() => { });\n }\n /**\n * @return {?}\n */\n preload() {\n const /** @type {?} */ ngModule = this.injector.get(NgModuleRef);\n return this.processRoutes(ngModule, this.router.config);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() { this.subscription.unsubscribe(); }\n /**\n * @param {?} ngModule\n * @param {?} routes\n * @return {?}\n */\n processRoutes(ngModule, routes) {\n const /** @type {?} */ res = [];\n for (const /** @type {?} */ route of routes) {\n // we already have the config loaded, just recurse\n if (route.loadChildren && !route.canLoad && route._loadedConfig) {\n const /** @type {?} */ childConfig = route._loadedConfig;\n res.push(this.processRoutes(childConfig.module, childConfig.routes));\n // no config loaded, fetch the config\n }\n else if (route.loadChildren && !route.canLoad) {\n res.push(this.preloadConfig(ngModule, route));\n // recurse into children\n }\n else if (route.children) {\n res.push(this.processRoutes(ngModule, route.children));\n }\n }\n return mergeAll.call(from(res));\n }\n /**\n * @param {?} ngModule\n * @param {?} route\n * @return {?}\n */\n preloadConfig(ngModule, route) {\n return this.preloadingStrategy.preload(route, () => {\n const /** @type {?} */ loaded$ = this.loader.load(ngModule.injector, route);\n return mergeMap.call(loaded$, (config) => {\n route._loadedConfig = config;\n return this.processRoutes(config.module, config.routes);\n });\n });\n }\n}\nRouterPreloader.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nRouterPreloader.ctorParameters = () => [\n { type: Router, },\n { type: NgModuleFactoryLoader, },\n { type: Compiler, },\n { type: Injector, },\n { type: PreloadingStrategy, },\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@whatItDoes Contains a list of directives\n * \\@stable\n */\nconst ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive];\n/**\n * \\@whatItDoes Is used in DI to configure the router.\n * \\@stable\n */\nconst ROUTER_CONFIGURATION = new InjectionToken('ROUTER_CONFIGURATION');\n/**\n * \\@docsNotRequired\n */\nconst ROUTER_FORROOT_GUARD = new InjectionToken('ROUTER_FORROOT_GUARD');\nconst ROUTER_PROVIDERS = [\n Location,\n { provide: UrlSerializer, useClass: DefaultUrlSerializer },\n {\n provide: Router,\n useFactory: setupRouter,\n deps: [\n ApplicationRef, UrlSerializer, ChildrenOutletContexts, Location, Injector,\n NgModuleFactoryLoader, Compiler, ROUTES, ROUTER_CONFIGURATION,\n [UrlHandlingStrategy, new Optional()], [RouteReuseStrategy, new Optional()]\n ]\n },\n ChildrenOutletContexts,\n { provide: ActivatedRoute, useFactory: rootRoute, deps: [Router] },\n { provide: NgModuleFactoryLoader, useClass: SystemJsNgModuleLoader },\n RouterPreloader,\n NoPreloading,\n PreloadAllModules,\n { provide: ROUTER_CONFIGURATION, useValue: { enableTracing: false } },\n];\n/**\n * @return {?}\n */\nfunction routerNgProbeToken() {\n return new NgProbeToken('Router', Router);\n}\n/**\n * \\@whatItDoes Adds router directives and providers.\n *\n * \\@howToUse\n *\n * RouterModule can be imported multiple times: once per lazily-loaded bundle.\n * Since the router deals with a global shared resource--location, we cannot have\n * more than one router service active.\n *\n * That is why there are two ways to create the module: `RouterModule.forRoot` and\n * `RouterModule.forChild`.\n *\n * * `forRoot` creates a module that contains all the directives, the given routes, and the router\n * service itself.\n * * `forChild` creates a module that contains all the directives and the given routes, but does not\n * include the router service.\n *\n * When registered at the root, the module should be used as follows\n *\n * ```\n * \\@NgModule({\n * imports: [RouterModule.forRoot(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * For submodules and lazy loaded submodules the module should be used as follows:\n *\n * ```\n * \\@NgModule({\n * imports: [RouterModule.forChild(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * \\@description\n *\n * Managing state transitions is one of the hardest parts of building applications. This is\n * especially true on the web, where you also need to ensure that the state is reflected in the URL.\n * In addition, we often want to split applications into multiple bundles and load them on demand.\n * Doing this transparently is not trivial.\n *\n * The Angular router solves these problems. Using the router, you can declaratively specify\n * application states, manage state transitions while taking care of the URL, and load bundles on\n * demand.\n *\n * [Read this developer guide](https://angular.io/docs/ts/latest/guide/router.html) to get an\n * overview of how the router should be used.\n *\n * \\@stable\n */\nclass RouterModule {\n /**\n * @param {?} guard\n * @param {?} router\n */\n constructor(guard, router) { }\n /**\n * Creates a module with all the router providers and directives. It also optionally sets up an\n * application listener to perform an initial navigation.\n *\n * Options (see {\\@link ExtraOptions}):\n * * `enableTracing` makes the router log all its internal events to the console.\n * * `useHash` enables the location strategy that uses the URL fragment instead of the history\n * API.\n * * `initialNavigation` disables the initial navigation.\n * * `errorHandler` provides a custom error handler.\n * * `preloadingStrategy` configures a preloading strategy (see {\\@link PreloadAllModules}).\n * * `onSameUrlNavigation` configures how the router handles navigation to the current URL. See\n * {\\@link ExtraOptions} for more details.\n * @param {?} routes\n * @param {?=} config\n * @return {?}\n */\n static forRoot(routes, config) {\n return {\n ngModule: RouterModule,\n providers: [\n ROUTER_PROVIDERS,\n provideRoutes(routes),\n {\n provide: ROUTER_FORROOT_GUARD,\n useFactory: provideForRootGuard,\n deps: [[Router, new Optional(), new SkipSelf()]]\n },\n { provide: ROUTER_CONFIGURATION, useValue: config ? config : {} },\n {\n provide: LocationStrategy,\n useFactory: provideLocationStrategy,\n deps: [\n PlatformLocation, [new Inject(APP_BASE_HREF), new Optional()], ROUTER_CONFIGURATION\n ]\n },\n {\n provide: PreloadingStrategy,\n useExisting: config && config.preloadingStrategy ? config.preloadingStrategy :\n NoPreloading\n },\n { provide: NgProbeToken, multi: true, useFactory: routerNgProbeToken },\n provideRouterInitializer(),\n ],\n };\n }\n /**\n * Creates a module with all the router directives and a provider registering routes.\n * @param {?} routes\n * @return {?}\n */\n static forChild(routes) {\n return { ngModule: RouterModule, providers: [provideRoutes(routes)] };\n }\n}\nRouterModule.decorators = [\n { type: NgModule, args: [{ declarations: ROUTER_DIRECTIVES, exports: ROUTER_DIRECTIVES },] },\n];\n/** @nocollapse */\nRouterModule.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [ROUTER_FORROOT_GUARD,] },] },\n { type: Router, decorators: [{ type: Optional },] },\n];\n/**\n * @param {?} platformLocationStrategy\n * @param {?} baseHref\n * @param {?=} options\n * @return {?}\n */\nfunction provideLocationStrategy(platformLocationStrategy, baseHref, options = {}) {\n return options.useHash ? new HashLocationStrategy(platformLocationStrategy, baseHref) :\n new PathLocationStrategy(platformLocationStrategy, baseHref);\n}\n/**\n * @param {?} router\n * @return {?}\n */\nfunction provideForRootGuard(router) {\n if (router) {\n throw new Error(`RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.`);\n }\n return 'guarded';\n}\n/**\n * \\@whatItDoes Registers routes.\n *\n * \\@howToUse\n *\n * ```\n * \\@NgModule({\n * imports: [RouterModule.forChild(ROUTES)],\n * providers: [provideRoutes(EXTRA_ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n *\n * \\@stable\n * @param {?} routes\n * @return {?}\n */\nfunction provideRoutes(routes) {\n return [\n { provide: ANALYZE_FOR_ENTRY_COMPONENTS, multi: true, useValue: routes },\n { provide: ROUTES, multi: true, useValue: routes },\n ];\n}\n/**\n * \\@whatItDoes Represents options to configure the router.\n *\n * \\@stable\n * @record\n */\n\n/**\n * @param {?} ref\n * @param {?} urlSerializer\n * @param {?} contexts\n * @param {?} location\n * @param {?} injector\n * @param {?} loader\n * @param {?} compiler\n * @param {?} config\n * @param {?=} opts\n * @param {?=} urlHandlingStrategy\n * @param {?=} routeReuseStrategy\n * @return {?}\n */\nfunction setupRouter(ref, urlSerializer, contexts, location, injector, loader, compiler, config, opts = {}, urlHandlingStrategy, routeReuseStrategy) {\n const /** @type {?} */ router = new Router(null, urlSerializer, contexts, location, injector, loader, compiler, flatten(config));\n if (urlHandlingStrategy) {\n router.urlHandlingStrategy = urlHandlingStrategy;\n }\n if (routeReuseStrategy) {\n router.routeReuseStrategy = routeReuseStrategy;\n }\n if (opts.errorHandler) {\n router.errorHandler = opts.errorHandler;\n }\n if (opts.enableTracing) {\n const /** @type {?} */ dom = ɵgetDOM();\n router.events.subscribe(e => {\n dom.logGroup(`Router Event: ${((/** @type {?} */ (e.constructor))).name}`);\n dom.log(e.toString());\n dom.log(e);\n dom.logGroupEnd();\n });\n }\n if (opts.onSameUrlNavigation) {\n router.onSameUrlNavigation = opts.onSameUrlNavigation;\n }\n if (opts.paramsInheritanceStrategy) {\n router.paramsInheritanceStrategy = opts.paramsInheritanceStrategy;\n }\n return router;\n}\n/**\n * @param {?} router\n * @return {?}\n */\nfunction rootRoute(router) {\n return router.routerState.root;\n}\n/**\n * To initialize the router properly we need to do in two steps:\n *\n * We need to start the navigation in a APP_INITIALIZER to block the bootstrap if\n * a resolver or a guards executes asynchronously. Second, we need to actually run\n * activation in a BOOTSTRAP_LISTENER. We utilize the afterPreactivation\n * hook provided by the router to do that.\n *\n * The router navigation starts, reaches the point when preactivation is done, and then\n * pauses. It waits for the hook to be resolved. We then resolve it only in a bootstrap listener.\n */\nclass RouterInitializer {\n /**\n * @param {?} injector\n */\n constructor(injector) {\n this.injector = injector;\n this.initNavigation = false;\n this.resultOfPreactivationDone = new Subject();\n }\n /**\n * @return {?}\n */\n appInitializer() {\n const /** @type {?} */ p = this.injector.get(LOCATION_INITIALIZED, Promise.resolve(null));\n return p.then(() => {\n let /** @type {?} */ resolve = /** @type {?} */ ((null));\n const /** @type {?} */ res = new Promise(r => resolve = r);\n const /** @type {?} */ router = this.injector.get(Router);\n const /** @type {?} */ opts = this.injector.get(ROUTER_CONFIGURATION);\n if (this.isLegacyDisabled(opts) || this.isLegacyEnabled(opts)) {\n resolve(true);\n }\n else if (opts.initialNavigation === 'disabled') {\n router.setUpLocationChangeListener();\n resolve(true);\n }\n else if (opts.initialNavigation === 'enabled') {\n router.hooks.afterPreactivation = () => {\n // only the initial navigation should be delayed\n if (!this.initNavigation) {\n this.initNavigation = true;\n resolve(true);\n return this.resultOfPreactivationDone;\n // subsequent navigations should not be delayed\n }\n else {\n return /** @type {?} */ (of(null));\n }\n };\n router.initialNavigation();\n }\n else {\n throw new Error(`Invalid initialNavigation options: '${opts.initialNavigation}'`);\n }\n return res;\n });\n }\n /**\n * @param {?} bootstrappedComponentRef\n * @return {?}\n */\n bootstrapListener(bootstrappedComponentRef) {\n const /** @type {?} */ opts = this.injector.get(ROUTER_CONFIGURATION);\n const /** @type {?} */ preloader = this.injector.get(RouterPreloader);\n const /** @type {?} */ router = this.injector.get(Router);\n const /** @type {?} */ ref = this.injector.get(ApplicationRef);\n if (bootstrappedComponentRef !== ref.components[0]) {\n return;\n }\n if (this.isLegacyEnabled(opts)) {\n router.initialNavigation();\n }\n else if (this.isLegacyDisabled(opts)) {\n router.setUpLocationChangeListener();\n }\n preloader.setUpPreloading();\n router.resetRootComponentType(ref.componentTypes[0]);\n this.resultOfPreactivationDone.next(/** @type {?} */ ((null)));\n this.resultOfPreactivationDone.complete();\n }\n /**\n * @param {?} opts\n * @return {?}\n */\n isLegacyEnabled(opts) {\n return opts.initialNavigation === 'legacy_enabled' || opts.initialNavigation === true ||\n opts.initialNavigation === undefined;\n }\n /**\n * @param {?} opts\n * @return {?}\n */\n isLegacyDisabled(opts) {\n return opts.initialNavigation === 'legacy_disabled' || opts.initialNavigation === false;\n }\n}\nRouterInitializer.decorators = [\n { type: Injectable },\n];\n/** @nocollapse */\nRouterInitializer.ctorParameters = () => [\n { type: Injector, },\n];\n/**\n * @param {?} r\n * @return {?}\n */\nfunction getAppInitializer(r) {\n return r.appInitializer.bind(r);\n}\n/**\n * @param {?} r\n * @return {?}\n */\nfunction getBootstrapListener(r) {\n return r.bootstrapListener.bind(r);\n}\n/**\n * A token for the router initializer that will be called after the app is bootstrapped.\n *\n * \\@experimental\n */\nconst ROUTER_INITIALIZER = new InjectionToken('Router Initializer');\n/**\n * @return {?}\n */\nfunction provideRouterInitializer() {\n return [\n RouterInitializer,\n {\n provide: APP_INITIALIZER,\n multi: true,\n useFactory: getAppInitializer,\n deps: [RouterInitializer]\n },\n { provide: ROUTER_INITIALIZER, useFactory: getBootstrapListener, deps: [RouterInitializer] },\n { provide: APP_BOOTSTRAP_LISTENER, multi: true, useExisting: ROUTER_INITIALIZER },\n ];\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * \\@stable\n */\nconst VERSION = new Version('5.2.10');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. 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.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n// This file only reexports content of the `src` folder. Keep it that way.\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { RouterLink, RouterLinkWithHref, RouterLinkActive, RouterOutlet, ActivationEnd, ActivationStart, ChildActivationEnd, ChildActivationStart, GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RouterEvent, RoutesRecognized, RouteReuseStrategy, Router, ROUTES, ROUTER_CONFIGURATION, ROUTER_INITIALIZER, RouterModule, provideRoutes, ChildrenOutletContexts, OutletContext, NoPreloading, PreloadAllModules, PreloadingStrategy, RouterPreloader, ActivatedRoute, ActivatedRouteSnapshot, RouterState, RouterStateSnapshot, PRIMARY_OUTLET, convertToParamMap, UrlHandlingStrategy, DefaultUrlSerializer, UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree, VERSION, ROUTER_PROVIDERS as ɵROUTER_PROVIDERS, flatten as ɵflatten, ROUTER_FORROOT_GUARD as ɵa, RouterInitializer as ɵg, getAppInitializer as ɵh, getBootstrapListener as ɵi, provideForRootGuard as ɵd, provideLocationStrategy as ɵc, provideRouterInitializer as ɵj, rootRoute as ɵf, routerNgProbeToken as ɵb, setupRouter as ɵe, Tree as ɵk, TreeNode as ɵl };\n//# sourceMappingURL=router.js.map\n","import { reduce as higherOrderReduce } from '../operators/reduce';\n/* tslint:enable:max-line-length */\n/**\n * Applies an accumulator function over the source Observable, and returns the\n * accumulated result when the source completes, given an optional seed value.\n *\n * <span class=\"informal\">Combines together all values emitted on the source,\n * using an accumulator function that knows how to join a new source value into\n * the accumulation from the past.</span>\n *\n * <img src=\"./img/reduce.png\" width=\"100%\">\n *\n * Like\n * [Array.prototype.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce),\n * `reduce` applies an `accumulator` function against an accumulation and each\n * value of the source Observable (from the past) to reduce it to a single\n * value, emitted on the output Observable. Note that `reduce` will only emit\n * one value, only when the source Observable completes. It is equivalent to\n * applying operator {@link scan} followed by operator {@link last}.\n *\n * Returns an Observable that applies a specified `accumulator` function to each\n * item emitted by the source Observable. If a `seed` value is specified, then\n * that value will be used as the initial value for the accumulator. If no seed\n * value is specified, the first item of the source is used as the seed.\n *\n * @example <caption>Count the number of click events that happened in 5 seconds</caption>\n * var clicksInFiveSeconds = Rx.Observable.fromEvent(document, 'click')\n * .takeUntil(Rx.Observable.interval(5000));\n * var ones = clicksInFiveSeconds.mapTo(1);\n * var seed = 0;\n * var count = ones.reduce((acc, one) => acc + one, seed);\n * count.subscribe(x => console.log(x));\n *\n * @see {@link count}\n * @see {@link expand}\n * @see {@link mergeScan}\n * @see {@link scan}\n *\n * @param {function(acc: R, value: T, index: number): R} accumulator The accumulator function\n * called on each source value.\n * @param {R} [seed] The initial accumulation value.\n * @return {Observable<R>} An Observable that emits a single value that is the\n * result of accumulating the values emitted by the source Observable.\n * @method reduce\n * @owner Observable\n */\nexport function reduce(accumulator, seed) {\n // providing a seed of `undefined` *should* be valid and trigger\n // hasSeed! so don't use `seed !== undefined` checks!\n // For this reason, we have to check it here at the original call site\n // otherwise inside Operator/Subscriber we won't know if `undefined`\n // means they didn't provide anything or if they literally provided `undefined`\n if (arguments.length >= 2) {\n return higherOrderReduce(accumulator, seed)(this);\n }\n return higherOrderReduce(accumulator)(this);\n}\n//# sourceMappingURL=reduce.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\n/**\n * Converts a higher-order Observable into a first-order Observable which\n * concurrently delivers all values that are emitted on the inner Observables.\n *\n * <span class=\"informal\">Flattens an Observable-of-Observables.</span>\n *\n * <img src=\"./img/mergeAll.png\" width=\"100%\">\n *\n * `mergeAll` subscribes to an Observable that emits Observables, also known as\n * a higher-order Observable. Each time it observes one of these emitted inner\n * Observables, it subscribes to that and delivers all the values from the\n * inner Observable on the output Observable. The output Observable only\n * completes once all inner Observables have completed. Any error delivered by\n * a inner Observable will be immediately emitted on the output Observable.\n *\n * @example <caption>Spawn a new interval Observable for each click event, and blend their outputs as one Observable</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000));\n * var firstOrder = higherOrder.mergeAll();\n * firstOrder.subscribe(x => console.log(x));\n *\n * @example <caption>Count from 0 to 9 every second for each click, but only allow 2 concurrent timers</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000).take(10));\n * var firstOrder = higherOrder.mergeAll(2);\n * firstOrder.subscribe(x => console.log(x));\n *\n * @see {@link combineAll}\n * @see {@link concatAll}\n * @see {@link exhaust}\n * @see {@link merge}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switch}\n * @see {@link zipAll}\n *\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of inner\n * Observables being subscribed to concurrently.\n * @return {Observable} An Observable that emits values coming from all the\n * inner Observables emitted by the source Observable.\n * @method mergeAll\n * @owner Observable\n */\nexport function mergeAll(concurrent = Number.POSITIVE_INFINITY) {\n return mergeMap(identity, null, concurrent);\n}\n//# sourceMappingURL=mergeAll.js.map","export const isArray = Array.isArray || ((x) => x && typeof x.length === 'number');\n//# sourceMappingURL=isArray.js.map","/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport class ObjectUnsubscribedError extends Error {\n constructor() {\n const err = super('object unsubscribed');\n this.name = err.name = 'ObjectUnsubscribedError';\n this.stack = err.stack;\n this.message = err.message;\n }\n}\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","export function isObject(x) {\n return x != null && typeof x === 'object';\n}\n//# sourceMappingURL=isObject.js.map","import { isFunction } from './util/isFunction';\nimport { Subscription } from './Subscription';\nimport { empty as emptyObserver } from './Observer';\nimport { rxSubscriber as rxSubscriberSymbol } from './symbol/rxSubscriber';\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber<T>\n */\nexport class Subscriber extends Subscription {\n /**\n * @param {Observer|function(value: T): void} [destinationOrNext] A partially\n * defined Observer or a `next` callback function.\n * @param {function(e: ?any): void} [error] The `error` callback of an\n * Observer.\n * @param {function(): void} [complete] The `complete` callback of an\n * Observer.\n */\n constructor(destinationOrNext, error, complete) {\n super();\n this.syncErrorValue = null;\n this.syncErrorThrown = false;\n this.syncErrorThrowable = false;\n this.isStopped = false;\n switch (arguments.length) {\n case 0:\n this.destination = emptyObserver;\n break;\n case 1:\n if (!destinationOrNext) {\n this.destination = emptyObserver;\n break;\n }\n if (typeof destinationOrNext === 'object') {\n // HACK(benlesh): To resolve an issue where Node users may have multiple\n // copies of rxjs in their node_modules directory.\n if (isTrustedSubscriber(destinationOrNext)) {\n const trustedSubscriber = destinationOrNext[rxSubscriberSymbol]();\n this.syncErrorThrowable = trustedSubscriber.syncErrorThrowable;\n this.destination = trustedSubscriber;\n trustedSubscriber.add(this);\n }\n else {\n this.syncErrorThrowable = true;\n this.destination = new SafeSubscriber(this, destinationOrNext);\n }\n break;\n }\n default:\n this.syncErrorThrowable = true;\n this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);\n break;\n }\n }\n [rxSubscriberSymbol]() { return this; }\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param {function(x: ?T): void} [next] The `next` callback of an Observer.\n * @param {function(e: ?any): void} [error] The `error` callback of an\n * Observer.\n * @param {function(): void} [complete] The `complete` callback of an\n * Observer.\n * @return {Subscriber<T>} A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n */\n static create(next, error, complete) {\n const subscriber = new Subscriber(next, error, complete);\n subscriber.syncErrorThrowable = false;\n return subscriber;\n }\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param {T} [value] The `next` value.\n * @return {void}\n */\n next(value) {\n if (!this.isStopped) {\n this._next(value);\n }\n }\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached {@link Error}. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param {any} [err] The `error` exception.\n * @return {void}\n */\n error(err) {\n if (!this.isStopped) {\n this.isStopped = true;\n this._error(err);\n }\n }\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n * @return {void}\n */\n complete() {\n if (!this.isStopped) {\n this.isStopped = true;\n this._complete();\n }\n }\n unsubscribe() {\n if (this.closed) {\n return;\n }\n this.isStopped = true;\n super.unsubscribe();\n }\n _next(value) {\n this.destination.next(value);\n }\n _error(err) {\n this.destination.error(err);\n this.unsubscribe();\n }\n _complete() {\n this.destination.complete();\n this.unsubscribe();\n }\n /** @deprecated internal use only */ _unsubscribeAndRecycle() {\n const { _parent, _parents } = this;\n this._parent = null;\n this._parents = null;\n this.unsubscribe();\n this.closed = false;\n this.isStopped = false;\n this._parent = _parent;\n this._parents = _parents;\n return this;\n }\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass SafeSubscriber extends Subscriber {\n constructor(_parentSubscriber, observerOrNext, error, complete) {\n super();\n this._parentSubscriber = _parentSubscriber;\n let next;\n let context = this;\n if (isFunction(observerOrNext)) {\n next = observerOrNext;\n }\n else if (observerOrNext) {\n next = observerOrNext.next;\n error = observerOrNext.error;\n complete = observerOrNext.complete;\n if (observerOrNext !== emptyObserver) {\n context = Object.create(observerOrNext);\n if (isFunction(context.unsubscribe)) {\n this.add(context.unsubscribe.bind(context));\n }\n context.unsubscribe = this.unsubscribe.bind(this);\n }\n }\n this._context = context;\n this._next = next;\n this._error = error;\n this._complete = complete;\n }\n next(value) {\n if (!this.isStopped && this._next) {\n const { _parentSubscriber } = this;\n if (!_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._next, value);\n }\n else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n this.unsubscribe();\n }\n }\n }\n error(err) {\n if (!this.isStopped) {\n const { _parentSubscriber } = this;\n if (this._error) {\n if (!_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(this._error, err);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, this._error, err);\n this.unsubscribe();\n }\n }\n else if (!_parentSubscriber.syncErrorThrowable) {\n this.unsubscribe();\n throw err;\n }\n else {\n _parentSubscriber.syncErrorValue = err;\n _parentSubscriber.syncErrorThrown = true;\n this.unsubscribe();\n }\n }\n }\n complete() {\n if (!this.isStopped) {\n const { _parentSubscriber } = this;\n if (this._complete) {\n const wrappedComplete = () => this._complete.call(this._context);\n if (!_parentSubscriber.syncErrorThrowable) {\n this.__tryOrUnsub(wrappedComplete);\n this.unsubscribe();\n }\n else {\n this.__tryOrSetError(_parentSubscriber, wrappedComplete);\n this.unsubscribe();\n }\n }\n else {\n this.unsubscribe();\n }\n }\n }\n __tryOrUnsub(fn, value) {\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n this.unsubscribe();\n throw err;\n }\n }\n __tryOrSetError(parent, fn, value) {\n try {\n fn.call(this._context, value);\n }\n catch (err) {\n parent.syncErrorValue = err;\n parent.syncErrorThrown = true;\n return true;\n }\n return false;\n }\n /** @deprecated internal use only */ _unsubscribe() {\n const { _parentSubscriber } = this;\n this._context = null;\n this._parentSubscriber = null;\n _parentSubscriber.unsubscribe();\n }\n}\nfunction isTrustedSubscriber(obj) {\n return obj instanceof Subscriber || ('syncErrorThrowable' in obj && obj[rxSubscriberSymbol]);\n}\n//# sourceMappingURL=Subscriber.js.map","export function isPromise(value) {\n return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n}\n//# sourceMappingURL=isPromise.js.map","import { Observable } from '../Observable';\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nexport class ScalarObservable extends Observable {\n constructor(value, scheduler) {\n super();\n this.value = value;\n this.scheduler = scheduler;\n this._isScalar = true;\n if (scheduler) {\n this._isScalar = false;\n }\n }\n static create(value, scheduler) {\n return new ScalarObservable(value, scheduler);\n }\n static dispatch(state) {\n const { done, value, subscriber } = state;\n if (done) {\n subscriber.complete();\n return;\n }\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n state.done = true;\n this.schedule(state);\n }\n /** @deprecated internal use only */ _subscribe(subscriber) {\n const value = this.value;\n const scheduler = this.scheduler;\n if (scheduler) {\n return scheduler.schedule(ScalarObservable.dispatch, 0, {\n done: false, value, subscriber\n });\n }\n else {\n subscriber.next(value);\n if (!subscriber.closed) {\n subscriber.complete();\n }\n }\n }\n}\n//# sourceMappingURL=ScalarObservable.js.map"],"sourceRoot":""}