@snabcentr/client-core 2.66.14 → 2.66.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,6 +23,10 @@ export declare class ScAuthService {
23
23
  * Признак, что скрипт выполняется на сервере.
24
24
  */
25
25
  private readonly isServer;
26
+ /**
27
+ * Ограничивает жизнь подписок из конструктора инжектором (актуально для unit-тестов).
28
+ */
29
+ private readonly destroyRef;
26
30
  /**
27
31
  * Инициализирует экземпляр класса {@link ScAuthService}.
28
32
  *
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/unified-signatures */
2
2
  import { HttpContext, HttpHeaders } from '@angular/common/http';
3
- import { Inject, inject, Injectable } from '@angular/core';
3
+ import { DestroyRef, Inject, inject, Injectable } from '@angular/core';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
5
  import { combineLatest, debounceTime, map, of, partition, ReplaySubject, switchMap, tap } from 'rxjs';
5
6
  import { SC_AUTH_ADD_HEADER_REQUIRED } from '../../httpInterceptors/tokens/sc-auth-add-header-required';
6
7
  import { SC_IS_LOGOUT_REQUEST } from '../../httpInterceptors/tokens/sc-is-logout-request';
@@ -41,12 +42,16 @@ export class ScAuthService {
41
42
  * Признак, что скрипт выполняется на сервере.
42
43
  */
43
44
  this.isServer = inject(IS_SERVER);
45
+ /**
46
+ * Ограничивает жизнь подписок из конструктора инжектором (актуально для unit-тестов).
47
+ */
48
+ this.destroyRef = inject(DestroyRef);
44
49
  const [authState$, actions$] = partition(combineLatest({
45
50
  access: this.tokenService.accessAuthToken$.pipe(map((token) => token !== null)),
46
51
  guest: this.tokenService.guestToken$.pipe(map((token) => token !== null)),
47
52
  }).pipe(debounceTime(0)), // Исправляет ошибку одновременного удаления ключа гостя и ключа пользователя. Возникает при очистке Storage.
48
53
  ({ access, guest }) => (access && !guest) || (!access && guest));
49
- authState$.subscribe(({ access }) => {
54
+ authState$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(({ access }) => {
50
55
  this.authSubject.next(access);
51
56
  });
52
57
  actions$
@@ -56,7 +61,7 @@ export class ScAuthService {
56
61
  return of(null);
57
62
  }
58
63
  return this.getGuestToken$();
59
- }))
64
+ }), takeUntilDestroyed(this.destroyRef))
60
65
  .subscribe();
61
66
  if (this.isServer) {
62
67
  this.authSubject.next(false);
@@ -154,4 +159,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
154
159
  type: Inject,
155
160
  args: [SC_API_KEYS]
156
161
  }] }, { type: i2.ScTokenService }, { type: i3.ScUserMetrikaService }] });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9hdXRoL3NlcnZpY2VzL3NjLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFFMUQsT0FBTyxFQUFjLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJbEgsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDeEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDMUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDcEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFJbEY7O0dBRUc7QUFJSCxNQUFNLE9BQU8sYUFBYTtJQVd0Qjs7Ozs7Ozs7T0FRRztJQUNILFlBQ3FCLElBQWdCLEVBQ0MsSUFBYSxFQUNULE9BQW1CLEVBQ3hDLFlBQTRCLEVBQzVCLGtCQUF3QztRQUp4QyxTQUFJLEdBQUosSUFBSSxDQUFZ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cGVzY3JpcHQtZXNsaW50L3VuaWZpZWQtc2lnbmF0dXJlcyAqL1xuXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwQ29udGV4dCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBtYXAsIE9ic2VydmFibGUsIG9mLCBwYXJ0aXRpb24sIFJlcGxheVN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjSUFwaUtleXMgfSBmcm9tICcuLi8uLi9jb25maWcvc2MtaS1hcGkta2V5cyc7XG5pbXBvcnQgeyBTY0lVcmxzIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NjLWktdXJscyc7XG5pbXBvcnQgeyBTQ19BVVRIX0FERF9IRUFERVJfUkVRVUlSRUQgfSBmcm9tICcuLi8uLi9odHRwSW50ZXJjZXB0b3JzL3Rva2Vucy9zYy1hdXRoLWFkZC1oZWFkZXItcmVxdWlyZWQnO1xuaW1wb3J0IHsgU0NfSVNfTE9HT1VUX1JFUVVFU1QgfSBmcm9tICcuLi8uLi9odHRwSW50ZXJjZXB0b3JzL3Rva2Vucy9zYy1pcy1sb2dvdXQtcmVxdWVzdCc7XG5pbXBvcnQgeyBTQ19JU19SRUZSRVNIX1JFUVVJUkVEIH0gZnJvbSAnLi4vLi4vaHR0cEludGVyY2VwdG9ycy90b2tlbnMvc2MtaXMtcmVmcmVzaC10b2tlbi1yZXF1aXJlZCc7XG5pbXBvcnQgeyBJU19TRVJWRVIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvc3NyLnByb3ZpZGVycyc7XG5pbXBvcnQgeyBTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIFNDX0lTX0hJRERFTl9FUlJPUl9BTEVSVF9IVFRQX0NPTlRFWFQgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgU0NfQVBJX0tFWVMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtYXBpLWtleXMnO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy11cmxzJztcbmltcG9ydCB7IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0sIFNjVXNlck1ldHJpa2FTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1tZXRyaWthJztcbmltcG9ydCB7IElBdXRoVG9rZW4sIElMb2dpbiwgSVBob25lTG9naW4sIElUb2tlbiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2NUb2tlblNlcnZpY2UgfSBmcm9tICcuL3NjLXRva2VuLnNlcnZpY2UnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY0F1dGhTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgUmVwbGF5U3ViamVjdH0g0LTQu9GPINGB0L7QsdGL0YLQuNC50L3QvtC5INC80L7QtNC10LvQuCDRgdC10YDQstC40YHQsCDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgYXV0aFN1YmplY3Q6IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YHQutGA0LjQv9GCINCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L3QsCDRgdC10YDQstC10YDQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzU2VydmVyOiBib29sZWFuID0gaW5qZWN0KElTX1NFUlZFUik7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQXV0aFNlcnZpY2V9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGh0dHAgSFRUUC3QutC70LjQtdC90YIuXG4gICAgICogQHBhcmFtIHVybHMg0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQvdCwINGA0LDQt9C00LXQu9GLIGJhY2tlbmQnYS5cbiAgICAgKiBAcGFyYW0gYXBpS2V5cyDQl9Cw0LPQvtC70L7QstC60Lgg0LrQu9GO0YfQtdC5INC00L7RgdGC0YPQv9CwINC6IEFQSS5cbiAgICAgKiBAcGFyYW0gdG9rZW5TZXJ2aWNlINCh0LXRgNCy0LjRgSDQutC70Y7Rh9C10Lkg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KFNDX1VSTFMpIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyxcbiAgICAgICAgQEluamVjdChTQ19BUElfS0VZUykgcHJpdmF0ZSByZWFkb25seSBhcGlLZXlzOiBTY0lBcGlLZXlzLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuU2VydmljZTogU2NUb2tlblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZVxuICAgICkge1xuICAgICAgICBjb25zdCBbYXV0aFN0YXRlJCwgYWN0aW9ucyRdID0gcGFydGl0aW9uKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICAgICAgYWNjZXNzOiB0aGlzLnRva2VuU2VydmljZS5hY2Nlc3NBdXRoVG9rZW4kLnBpcGUobWFwKCh0b2tlbikgPT4gdG9rZW4gIT09IG51bGwpKSxcbiAgICAgICAgICAgICAgICBndWVzdDogdGhpcy50b2tlblNlcnZpY2UuZ3Vlc3RUb2tlbiQucGlwZShtYXAoKHRva2VuKSA9PiB0b2tlbiAhPT0gbnVsbCkpLFxuICAgICAgICAgICAgfSkucGlwZShkZWJvdW5jZVRpbWUoMCkpLCAvLyDQmNGB0L/RgNCw0LLQu9GP0LXRgiDQvtGI0LjQsdC60YMg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+0LPQviDRg9C00LDQu9C10L3QuNGPINC60LvRjtGH0LAg0LPQvtGB0YLRjyDQuCDQutC70Y7Rh9CwINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy4g0JLQvtC30L3QuNC60LDQtdGCINC/0YDQuCDQvtGH0LjRgdGC0LrQtSBTdG9yYWdlLlxuICAgICAgICAgICAgKHsgYWNjZXNzLCBndWVzdCB9KSA9PiAoYWNjZXNzICYmICFndWVzdCkgfHwgKCFhY2Nlc3MgJiYgZ3Vlc3QpXG4gICAgICAgICk7XG4gICAgICAgIGF1dGhTdGF0ZSQuc3Vic2NyaWJlKCh7IGFjY2VzcyB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF1dGhTdWJqZWN0Lm5leHQoYWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbnMkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHsgYWNjZXNzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2UucmVtb3ZlR3Vlc3RUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRHdWVzdFRva2VuJCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0aFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQvtGB0YLQvtGP0L3QuNGPINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40LgsINGH0YLQvtCx0Ysg0YDQtdCw0LPQuNGA0L7QstCw0YLRjCDQvdCwINC40LfQvNC10L3QtdC90LjRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QXV0aENoYW5nZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXIg0JTQsNC90L3Ri9C1INC00LvRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQv9C+IGVtYWlsLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTaWduSW4kKHVzZXI6IElMb2dpbik6IE9ic2VydmFibGU8SUF1dGhUb2tlbj47XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlciDQlNCw0L3QvdGL0LUg0LTQu9GPINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC/0L4g0L3QvtC80LXRgNGDINGC0LXQu9C10YTQvtC90LAuXG4gICAgICovXG4gICAgcHVibGljIGdldFNpZ25JbiQodXNlcjogSVBob25lTG9naW4pOiBPYnNlcnZhYmxlPElBdXRoVG9rZW4+O1xuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXIg0JTQsNC90L3Ri9C1INC+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtSDQtNC70Y8g0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2lnbkluJCh1c2VyOiBJTG9naW4gfCBJUGhvbmVMb2dpbik6IE9ic2VydmFibGU8SUF1dGhUb2tlbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SUF1dGhUb2tlbj4oYCR7dGhpcy51cmxzLmFwaVVybH0vYXV0aC9sb2dpbmAsIHVzZXIpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLnNpZ25lZEluLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgc2lnbl9pbl90eXBlOiAncGFzc3dvcmQnIGluIHVzZXIgPyAnbG9naW4vcGFzc3dvcmQnIDogJ3Bob25lL2NvZGUnIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgodG9rZW5zT2JqZWN0OiBJQXV0aFRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0QXV0aFRva2VuKHRva2Vuc09iamVjdCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZW1vdmVBdXRoVG9rZW4g0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDRg9C00LDQu9C40YLRjCDQutC70Y7RhyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTaWduT3V0JChyZW1vdmVBdXRoVG9rZW46IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTx1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3Q8dW5kZWZpbmVkPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLnVybHMuYXBpVXJsfS9hdXRoL2xvZ291dGAsXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBuZXcgSHR0cENvbnRleHQoKS5zZXQoU0NfSVNfTE9HT1VUX1JFUVVFU1QsIHRydWUpLnNldChTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIHRydWUpLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5zaWduZWRPdXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVBdXRoVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnJlbW92ZUF1dGhUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINC30LDQv9GA0L7RgSDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2lnbk91dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRTaWduT3V0JCgpLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQv9C+0LLRgtC+0YDQvdC+0Lkg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0Lgg0L7QsdC90L7QstC70LXQvdC40Y8g0LrQu9GO0YfQsCDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZnJlc2hUb2tlbnMg0JrQu9GO0YfQuCDQtNC+0YHRgtGD0L/QsCDQuiBBUEksINC4INC+0LHQvdC+0LLQu9C10L3QuNGPINGB0LXRgdGB0LjQuCDQtNC+0YHRgtGD0L/QsCDQuiBBUEkuINCV0YHQu9C4INC60LvRjtGH0Lgg0L3QtSDQv9C10YDQtdC00LDQvdGLLCDQsdC10YDRkdGCINC40YUg0LjQtyB7QGxpbmsgU3RvcmFnZX0uXG4gICAgICovXG4gICAgcHVibGljIGdldFJlZnJlc2hUb2tlbiQocmVmcmVzaFRva2Vucz86IElBdXRoVG9rZW4pOiBPYnNlcnZhYmxlPElBdXRoVG9rZW4+IHtcbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gcmVmcmVzaFRva2Vucz8ucmVmcmVzaC50b2tlbiA/PyB0aGlzLnRva2VuU2VydmljZS5nZXRSZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSByZWZyZXNoVG9rZW5zXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCh0aGlzLmFwaUtleXMua2V5TmFtZSwgcmVmcmVzaFRva2Vucy5hY2Nlc3MudG9rZW4pLFxuICAgICAgICAgICAgICAgICAgY29udGV4dDogbmV3IEh0dHBDb250ZXh0KCkuc2V0KFNDX0lTX1JFRlJFU0hfUkVRVUlSRUQsIHRydWUpLnNldChTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIHRydWUpLnNldChTQ19BVVRIX0FERF9IRUFERVJfUkVRVUlSRUQsIGZhbHNlKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBuZXcgSHR0cENvbnRleHQoKS5zZXQoU0NfSVNfUkVGUkVTSF9SRVFVSVJFRCwgdHJ1ZSkuc2V0KFNDX0lTX0hJRERFTl9FUlJPUl9BTEVSVCwgdHJ1ZSksXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxJQXV0aFRva2VuPihgJHt0aGlzLnVybHMuYXBpVXJsfS9hdXRoL3Rva2VuYCwgeyByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4gfSwgcmVxdWVzdE9wdGlvbnMpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHRva2VuczogSUF1dGhUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldEF1dGhUb2tlbih0b2tlbnMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0L/QvtC70YPRh9C10L3QuNGPINCz0L7RgdGC0LXQstC+0LPQviDQutC70Y7Rh9CwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRHdWVzdFRva2VuJCgpOiBPYnNlcnZhYmxlPElUb2tlbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0PElUb2tlbj4oYCR7dGhpcy51cmxzLmFwaVVybH0vYXV0aC9ndWVzdC90b2tlbmAsIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBTQ19JU19ISURERU5fRVJST1JfQUxFUlRfSFRUUF9DT05URVhULFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgodG9rZW46IElUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXRHdWVzdFRva2VuKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9hdXRoL3NlcnZpY2VzL3NjLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFFMUQsT0FBTyxFQUFjLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWxILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7Ozs7O0FBSWxGOztHQUVHO0FBSUgsTUFBTSxPQUFPLGFBQWE7SUFnQnRCOzs7Ozs7OztPQVFHO0lBQ0gsWUFDcUIsSUFBZ0IsRUFDQyxJQUFhLEVBQ1Qs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S1EsYUFBYSw0Q0EyQlYsT0FBTyxhQUNQLFdBQVc7bUhBNUJkLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBNEJRLE1BQU07MkJBQUMsT0FBTzs7MEJBQ2QsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3VuaWZpZWQtc2lnbmF0dXJlcyAqL1xuXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwQ29udGV4dCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBtYXAsIE9ic2VydmFibGUsIG9mLCBwYXJ0aXRpb24sIFJlcGxheVN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjSUFwaUtleXMgfSBmcm9tICcuLi8uLi9jb25maWcvc2MtaS1hcGkta2V5cyc7XG5pbXBvcnQgeyBTY0lVcmxzIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NjLWktdXJscyc7XG5pbXBvcnQgeyBTQ19BVVRIX0FERF9IRUFERVJfUkVRVUlSRUQgfSBmcm9tICcuLi8uLi9odHRwSW50ZXJjZXB0b3JzL3Rva2Vucy9zYy1hdXRoLWFkZC1oZWFkZXItcmVxdWlyZWQnO1xuaW1wb3J0IHsgU0NfSVNfTE9HT1VUX1JFUVVFU1QgfSBmcm9tICcuLi8uLi9odHRwSW50ZXJjZXB0b3JzL3Rva2Vucy9zYy1pcy1sb2dvdXQtcmVxdWVzdCc7XG5pbXBvcnQgeyBTQ19JU19SRUZSRVNIX1JFUVVJUkVEIH0gZnJvbSAnLi4vLi4vaHR0cEludGVyY2VwdG9ycy90b2tlbnMvc2MtaXMtcmVmcmVzaC10b2tlbi1yZXF1aXJlZCc7XG5pbXBvcnQgeyBJU19TRVJWRVIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvc3NyLnByb3ZpZGVycyc7XG5pbXBvcnQgeyBTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIFNDX0lTX0hJRERFTl9FUlJPUl9BTEVSVF9IVFRQX0NPTlRFWFQgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgU0NfQVBJX0tFWVMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtYXBpLWtleXMnO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy11cmxzJztcbmltcG9ydCB7IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0sIFNjVXNlck1ldHJpa2FTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1tZXRyaWthJztcbmltcG9ydCB7IElBdXRoVG9rZW4sIElMb2dpbiwgSVBob25lTG9naW4sIElUb2tlbiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2NUb2tlblNlcnZpY2UgfSBmcm9tICcuL3NjLXRva2VuLnNlcnZpY2UnO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY0F1dGhTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgUmVwbGF5U3ViamVjdH0g0LTQu9GPINGB0L7QsdGL0YLQuNC50L3QvtC5INC80L7QtNC10LvQuCDRgdC10YDQstC40YHQsCDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgYXV0aFN1YmplY3Q6IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YHQutGA0LjQv9GCINCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L3QsCDRgdC10YDQstC10YDQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzU2VydmVyOiBib29sZWFuID0gaW5qZWN0KElTX1NFUlZFUik7XG5cbiAgICAvKipcbiAgICAgKiDQntCz0YDQsNC90LjRh9C40LLQsNC10YIg0LbQuNC30L3RjCDQv9C+0LTQv9C40YHQvtC6INC40Lcg0LrQvtC90YHRgtGA0YPQutGC0L7RgNCwINC40L3QttC10LrRgtC+0YDQvtC8ICjQsNC60YLRg9Cw0LvRjNC90L4g0LTQu9GPIHVuaXQt0YLQtdGB0YLQvtCyKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQXV0aFNlcnZpY2V9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGh0dHAgSFRUUC3QutC70LjQtdC90YIuXG4gICAgICogQHBhcmFtIHVybHMg0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQvdCwINGA0LDQt9C00LXQu9GLIGJhY2tlbmQnYS5cbiAgICAgKiBAcGFyYW0gYXBpS2V5cyDQl9Cw0LPQvtC70L7QstC60Lgg0LrQu9GO0YfQtdC5INC00L7RgdGC0YPQv9CwINC6IEFQSS5cbiAgICAgKiBAcGFyYW0gdG9rZW5TZXJ2aWNlINCh0LXRgNCy0LjRgSDQutC70Y7Rh9C10Lkg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KFNDX1VSTFMpIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyxcbiAgICAgICAgQEluamVjdChTQ19BUElfS0VZUykgcHJpdmF0ZSByZWFkb25seSBhcGlLZXlzOiBTY0lBcGlLZXlzLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuU2VydmljZTogU2NUb2tlblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZVxuICAgICkge1xuICAgICAgICBjb25zdCBbYXV0aFN0YXRlJCwgYWN0aW9ucyRdID0gcGFydGl0aW9uKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICAgICAgYWNjZXNzOiB0aGlzLnRva2VuU2VydmljZS5hY2Nlc3NBdXRoVG9rZW4kLnBpcGUobWFwKCh0b2tlbikgPT4gdG9rZW4gIT09IG51bGwpKSxcbiAgICAgICAgICAgICAgICBndWVzdDogdGhpcy50b2tlblNlcnZpY2UuZ3Vlc3RUb2tlbiQucGlwZShtYXAoKHRva2VuKSA9PiB0b2tlbiAhPT0gbnVsbCkpLFxuICAgICAgICAgICAgfSkucGlwZShkZWJvdW5jZVRpbWUoMCkpLCAvLyDQmNGB0L/RgNCw0LLQu9GP0LXRgiDQvtGI0LjQsdC60YMg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+0LPQviDRg9C00LDQu9C10L3QuNGPINC60LvRjtGH0LAg0LPQvtGB0YLRjyDQuCDQutC70Y7Rh9CwINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy4g0JLQvtC30L3QuNC60LDQtdGCINC/0YDQuCDQvtGH0LjRgdGC0LrQtSBTdG9yYWdlLlxuICAgICAgICAgICAgKHsgYWNjZXNzLCBndWVzdCB9KSA9PiAoYWNjZXNzICYmICFndWVzdCkgfHwgKCFhY2Nlc3MgJiYgZ3Vlc3QpXG4gICAgICAgICk7XG4gICAgICAgIGF1dGhTdGF0ZSQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCh7IGFjY2VzcyB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF1dGhTdWJqZWN0Lm5leHQoYWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbnMkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHsgYWNjZXNzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2UucmVtb3ZlR3Vlc3RUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRHdWVzdFRva2VuJCgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0aFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQvtGB0YLQvtGP0L3QuNGPINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40LgsINGH0YLQvtCx0Ysg0YDQtdCw0LPQuNGA0L7QstCw0YLRjCDQvdCwINC40LfQvNC10L3QtdC90LjRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QXV0aENoYW5nZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXIg0JTQsNC90L3Ri9C1INC00LvRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQv9C+IGVtYWlsLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTaWduSW4kKHVzZXI6IElMb2dpbik6IE9ic2VydmFibGU8SUF1dGhUb2tlbj47XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlciDQlNCw0L3QvdGL0LUg0LTQu9GPINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC/0L4g0L3QvtC80LXRgNGDINGC0LXQu9C10YTQvtC90LAuXG4gICAgICovXG4gICAgcHVibGljIGdldFNpZ25JbiQodXNlcjogSVBob25lTG9naW4pOiBPYnNlcnZhYmxlPElBdXRoVG9rZW4+O1xuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVzZXIg0JTQsNC90L3Ri9C1INC+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtSDQtNC70Y8g0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2lnbkluJCh1c2VyOiBJTG9naW4gfCBJUGhvbmVMb2dpbik6IE9ic2VydmFibGU8SUF1dGhUb2tlbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SUF1dGhUb2tlbj4oYCR7dGhpcy51cmxzLmFwaVVybH0vYXV0aC9sb2dpbmAsIHVzZXIpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLnNpZ25lZEluLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgc2lnbl9pbl90eXBlOiAncGFzc3dvcmQnIGluIHVzZXIgPyAnbG9naW4vcGFzc3dvcmQnIDogJ3Bob25lL2NvZGUnIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgodG9rZW5zT2JqZWN0OiBJQXV0aFRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0QXV0aFRva2VuKHRva2Vuc09iamVjdCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZW1vdmVBdXRoVG9rZW4g0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDRg9C00LDQu9C40YLRjCDQutC70Y7RhyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTaWduT3V0JChyZW1vdmVBdXRoVG9rZW46IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTx1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3Q8dW5kZWZpbmVkPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLnVybHMuYXBpVXJsfS9hdXRoL2xvZ291dGAsXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBuZXcgSHR0cENvbnRleHQoKS5zZXQoU0NfSVNfTE9HT1VUX1JFUVVFU1QsIHRydWUpLnNldChTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIHRydWUpLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5zaWduZWRPdXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVBdXRoVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnJlbW92ZUF1dGhUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINC30LDQv9GA0L7RgSDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2lnbk91dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRTaWduT3V0JCgpLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQv9C+0LLRgtC+0YDQvdC+0Lkg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0Lgg0L7QsdC90L7QstC70LXQvdC40Y8g0LrQu9GO0YfQsCDQsNGD0YLQtdC90YLQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlZnJlc2hUb2tlbnMg0JrQu9GO0YfQuCDQtNC+0YHRgtGD0L/QsCDQuiBBUEksINC4INC+0LHQvdC+0LLQu9C10L3QuNGPINGB0LXRgdGB0LjQuCDQtNC+0YHRgtGD0L/QsCDQuiBBUEkuINCV0YHQu9C4INC60LvRjtGH0Lgg0L3QtSDQv9C10YDQtdC00LDQvdGLLCDQsdC10YDRkdGCINC40YUg0LjQtyB7QGxpbmsgU3RvcmFnZX0uXG4gICAgICovXG4gICAgcHVibGljIGdldFJlZnJlc2hUb2tlbiQocmVmcmVzaFRva2Vucz86IElBdXRoVG9rZW4pOiBPYnNlcnZhYmxlPElBdXRoVG9rZW4+IHtcbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gcmVmcmVzaFRva2Vucz8ucmVmcmVzaC50b2tlbiA/PyB0aGlzLnRva2VuU2VydmljZS5nZXRSZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSByZWZyZXNoVG9rZW5zXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLnNldCh0aGlzLmFwaUtleXMua2V5TmFtZSwgcmVmcmVzaFRva2Vucy5hY2Nlc3MudG9rZW4pLFxuICAgICAgICAgICAgICAgICAgY29udGV4dDogbmV3IEh0dHBDb250ZXh0KCkuc2V0KFNDX0lTX1JFRlJFU0hfUkVRVUlSRUQsIHRydWUpLnNldChTQ19JU19ISURERU5fRVJST1JfQUxFUlQsIHRydWUpLnNldChTQ19BVVRIX0FERF9IRUFERVJfUkVRVUlSRUQsIGZhbHNlKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBuZXcgSHR0cENvbnRleHQoKS5zZXQoU0NfSVNfUkVGUkVTSF9SRVFVSVJFRCwgdHJ1ZSkuc2V0KFNDX0lTX0hJRERFTl9FUlJPUl9BTEVSVCwgdHJ1ZSksXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxJQXV0aFRva2VuPihgJHt0aGlzLnVybHMuYXBpVXJsfS9hdXRoL3Rva2VuYCwgeyByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4gfSwgcmVxdWVzdE9wdGlvbnMpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHRva2VuczogSUF1dGhUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldEF1dGhUb2tlbih0b2tlbnMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0L/QvtC70YPRh9C10L3QuNGPINCz0L7RgdGC0LXQstC+0LPQviDQutC70Y7Rh9CwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRHdWVzdFRva2VuJCgpOiBPYnNlcnZhYmxlPElUb2tlbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0PElUb2tlbj4oYCR7dGhpcy51cmxzLmFwaVVybH0vYXV0aC9ndWVzdC90b2tlbmAsIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBTQ19JU19ISURERU5fRVJST1JfQUxFUlRfSFRUUF9DT05URVhULFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgodG9rZW46IElUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXRHdWVzdFRva2VuKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
- import { HttpClient } from '@angular/common/http';
1
+ import { HttpClient, HttpErrorResponse } from '@angular/common/http';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { map, of, tap } from 'rxjs';
3
+ import { catchError, distinctUntilChanged, first, map, of, switchMap, tap, throwError } from 'rxjs';
4
4
  import { ScCachedItem } from '../../catalog/classes/sc-cached-item';
5
5
  import { loadingPlaceholder } from '../../order/tokens/sc-order-loader.token';
6
6
  import { IS_BROWSER } from '../../providers/ssr.providers';
@@ -51,7 +51,7 @@ export class ScCartService {
51
51
  this.userMetrikaService = inject(ScUserMetrikaService);
52
52
  if (this.isBrowser) {
53
53
  this.cartCachedItem$ = new ScCachedItem(Infinity, this.getCartData$(), loadingPlaceholder);
54
- this.user$.subscribe(() => {
54
+ this.user$.pipe(distinctUntilChanged((previous, current) => previous.id === current.id)).subscribe(() => {
55
55
  this.cartCachedItem$.update();
56
56
  });
57
57
  }
@@ -63,7 +63,16 @@ export class ScCartService {
63
63
  * Создаёт запрос получения содержимого корзины и обновляет корзину, возвращая {@link Observable} содержимого корзины.
64
64
  */
65
65
  getCartData$() {
66
- return this.http.get(`${this.urls.apiUrl}/cart`).pipe(map((cartDTO) => new ScCart(cartDTO)));
66
+ return this.user$.pipe(first(), switchMap((user) => this.http.get(`${this.urls.apiUrl}/cart`).pipe(map((cartDTO) => new ScCart(cartDTO)),
67
+ // TODO: Пересмотреть механизмы перехвата HTTP-ошибок 401/403/0 централизованно (с использованием interceptors).
68
+ catchError((error) => {
69
+ if (user.isGuest && error instanceof HttpErrorResponse && [0, 401, 403].includes(error.status)) {
70
+ // Для гостя в неавторизованных/сетевых кейсах отдаём пустую корзину,
71
+ // чтобы не пробрасывать ошибку во все подписки UI.
72
+ return of(new ScCart());
73
+ }
74
+ return throwError(() => error);
75
+ }))));
67
76
  }
68
77
  /**
69
78
  * Возвращает полную информацию о корзине (контекст загрузчика).
@@ -191,4 +200,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
191
200
  providedIn: 'root',
192
201
  }]
193
202
  }], ctorParameters: () => [] });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jYXJ0L3NlcnZpY2VzL3NjLWNhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQU9wRSxPQUFPLEVBQUUsa0JBQWtCLEVBQWtCLE1BQU0sMENBQTBDLENBQUM7QUFDOUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRzFDOztHQUVHO0FBSUgsTUFBTSxPQUFPLGFBQWE7SUF5Q3RCOztPQUVHO0lBQ0g7UUF0Q0E7O1dBRUc7UUFDYyxjQUFTLEdBQVksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpEOztXQUVHO1FBQ2MsVUFBSyxHQUF1QixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbEU7O1dBRUc7UUFDYyxTQUFJLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXZEOztXQUVHO1FBQ2MsU0FBSSxHQUFZLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqRDs7V0FFRztRQUNjLGNBQVMsR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTlEOztXQUVHO1FBQ2MscUJBQWdCLEdBQXVCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRW5GOztXQUVHO1FBQ2MsdUJBQWtCLEdBQXlCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBTXJGLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzVGLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDUCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFFLElBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEgsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsSUFBeUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNsRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDTCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDO29CQUN6QyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsYUFBYTtvQkFDNUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7aUJBQ3pDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxjQUFjLENBQUMsRUFBVSxFQUFFLEtBQTZDO1FBQzNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sU0FBUyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQ3pFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDckMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsSUFBaUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxTQUFTLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDeEUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNyQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDekMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLGVBQWU7Z0JBQzlDLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRTthQUMxQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUMvRCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDO2dCQUN6QyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsV0FBVzthQUM3QyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxpQkFBaUI7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUNuQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUUsSUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUM1SixDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxrREFBa0Q7SUFDM0MsY0FBYyxDQUFDLEtBQWM7UUFDaEMsT0FBTztZQUNILEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUTtZQUNyQixTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUM3QixhQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7U0FDbkQsQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxrQkFBa0I7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNYLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxtQkFBbUIsRUFBRTtZQUN6QyxZQUFZLEVBQUUsTUFBTTtTQUN2QixDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFtQixDQUFDLElBQW9CO1FBQzNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3pFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDckMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7Z0JBQ3pDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxhQUFhO2FBQy9DLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOytHQTlNUSxhQUFhO21IQUFiLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY0NhY2hlZEl0ZW0gfSBmcm9tICcuLi8uLi9jYXRhbG9nL2NsYXNzZXMvc2MtY2FjaGVkLWl0ZW0nO1xuaW1wb3J0IHsgU2NJVXJscyB9IGZyb20gJy4uLy4uL2NvbmZpZy9zYy1pLXVybHMnO1xuaW1wb3J0IHsgU2NVcGxvYWRlZEZpbGUgfSBmcm9tICcuLi8uLi9jb250YWN0cy9kdG8vc2MtdXBsb2FkZWQtZmlsZSc7XG5pbXBvcnQgeyBTY09yZGVyIH0gZnJvbSAnLi4vLi4vb3JkZXIvY2xhc3Nlcy9zYy1vcmRlcic7XG5pbXBvcnQgeyBTY09yZGVySXRlbSB9IGZyb20gJy4uLy4uL29yZGVyL2NsYXNzZXMvc2Mtb3JkZXItaXRlbSc7XG5pbXBvcnQgeyBTY0lOZXdPcmRlckl0ZW1CYXNlIH0gZnJvbSAnLi4vLi4vb3JkZXIvaW50ZXJuYWwvc2MtaS1uZXctb3JkZXItaXRlbS1iYXNlJztcbmltcG9ydCB7IFNjSU9yZGVyRWRpdG9yTG9hZGVyIH0gZnJvbSAnLi4vLi4vb3JkZXIvaW50ZXJuYWwvc2MtaS1vcmRlci1sb2FkZXInO1xuaW1wb3J0IHsgbG9hZGluZ1BsYWNlaG9sZGVyLCBTY09yZGVyTG9hZGluZyB9IGZyb20gJy4uLy4uL29yZGVyL3Rva2Vucy9zYy1vcmRlci1sb2FkZXIudG9rZW4nO1xuaW1wb3J0IHsgSVNfQlJPV1NFUiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9zc3IucHJvdmlkZXJzJztcbmltcG9ydCB7IFNDX1VSTFMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtdXJscyc7XG5pbXBvcnQgeyBTY1VJU2VydmljZSB9IGZyb20gJy4uLy4uL3VpL3NlcnZpY2VzL3NjLXVpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NVc2VyIH0gZnJvbSAnLi4vLi4vdXNlci9kdG8vc2MtdXNlcic7XG5pbXBvcnQgeyBTQ19VU0VSX0lORk8gfSBmcm9tICcuLi8uLi91c2VyL3Rva2Vucy9zYy11c2VyLXByb3ZpZGVycyc7XG5pbXBvcnQgeyBTY1VzZXJNZXRyaWthR29hbHNFbnVtIH0gZnJvbSAnLi4vLi4vdXNlci1tZXRyaWthL2VudW1zL3NjLXVzZXItbWV0cmlrYS1nb2Fscy1lbnVtJztcbmltcG9ydCB7IFNjVXNlck1ldHJpa2FTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1tZXRyaWthL3NlcnZpY2VzL3NjLXVzZXItbWV0cmlrYS5zZXJ2aWNlJztcbmltcG9ydCB7IFNjV2FyZWhvdXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3dhcmVob3VzZSc7XG5pbXBvcnQgeyBTY0NhcnQgfSBmcm9tICcuLi9jbGFzc2VzL3NjLWNhcnQnO1xuaW1wb3J0IHsgU2NTdW0gfSBmcm9tICcuLi9jbGFzc2VzL3NjLXN1bSc7XG5pbXBvcnQgeyBTY0lDYXJ0IH0gZnJvbSAnLi4vaW50ZXJuYWwvc2MtaS1jYXJ0JztcblxuLyoqXG4gKiDQlNCw0L3QvdGL0LUg0L4g0YHQtdGA0LLQuNGB0LUg0LrQvtGA0LfQuNC90YsuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjQ2FydFNlcnZpY2UgaW1wbGVtZW50cyBTY0lPcmRlckVkaXRvckxvYWRlcjxTY09yZGVySXRlbSwgU2NDYXJ0PiB7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIFJlcGxheVN1YmplY3R9INC00LvRjyDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgY2FydENhY2hlZEl0ZW0kOiBTY0NhY2hlZEl0ZW08U2NDYXJ0LCBTY09yZGVyTG9hZGluZz47XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INGB0LrRgNC40L/RgiDQstGL0L/QvtC70L3Rj9C10YLRgdGPINCyINCx0YDQsNGD0LfQtdGA0LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0Jyb3dzZXI6IGJvb2xlYW4gPSBpbmplY3QoSVNfQlJPV1NFUik7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LTQsNC90L3Ri9GFINC+INGC0LXQutGD0YnQtdC8INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXIkOiBPYnNlcnZhYmxlPFNjVXNlcj4gPSBpbmplY3QoU0NfVVNFUl9JTkZPKTtcblxuICAgIC8qKlxuICAgICAqIEhUVFAt0LrQu9C40LXQvdGCLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L/RgNC40LvQvtC20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cmxzOiBTY0lVcmxzID0gaW5qZWN0KFNDX1VSTFMpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEgVUkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1aVNlcnZpY2U6IFNjVUlTZXJ2aWNlID0gaW5qZWN0KFNjVUlTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGB0L4g0YHQutC70LDQtNCw0LzQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHdhcmVob3VzZVNlcnZpY2U6IFNjV2FyZWhvdXNlU2VydmljZSA9IGluamVjdChTY1dhcmVob3VzZVNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgdCx0L7RgNCwINC80LXRgtGA0LjQuiDQviDQtNC10LnRgdGC0LLQuNGP0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyTWV0cmlrYVNlcnZpY2U6IFNjVXNlck1ldHJpa2FTZXJ2aWNlID0gaW5qZWN0KFNjVXNlck1ldHJpa2FTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NDYXJ0U2VydmljZX0uXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBpZiAodGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2FydENhY2hlZEl0ZW0kID0gbmV3IFNjQ2FjaGVkSXRlbShJbmZpbml0eSwgdGhpcy5nZXRDYXJ0RGF0YSQoKSwgbG9hZGluZ1BsYWNlaG9sZGVyKTtcbiAgICAgICAgICAgIHRoaXMudXNlciQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRDYWNoZWRJdGVtJC51cGRhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYXJ0Q2FjaGVkSXRlbSQgPSBuZXcgU2NDYWNoZWRJdGVtKEluZmluaXR5LCBvZihuZXcgU2NDYXJ0KCkpLCBsb2FkaW5nUGxhY2Vob2xkZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INC60L7RgNC30LjQvdGLINC4INC+0LHQvdC+0LLQu9GP0LXRgiDQutC+0YDQt9C40L3Rgywg0LLQvtC30LLRgNCw0YnQsNGPIHtAbGluayBPYnNlcnZhYmxlfSDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q2FydERhdGEkKCk6IE9ic2VydmFibGU8U2NDYXJ0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFNjSUNhcnQ+KGAke3RoaXMudXJscy5hcGlVcmx9L2NhcnRgKS5waXBlKG1hcCgoY2FydERUTykgPT4gbmV3IFNjQ2FydChjYXJ0RFRPKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0L7Qu9C90YPRjiDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDQutC+0YDQt9C40L3QtSAo0LrQvtC90YLQtdC60YHRgiDQt9Cw0LPRgNGD0LfRh9C40LrQsCkuXG4gICAgICovXG4gICAgcHVibGljIGdldCQoKTogT2JzZXJ2YWJsZTxTY0NhcnQgfCBTY09yZGVyTG9hZGluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJ0Q2FjaGVkSXRlbSQuaXRlbSQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0YHQv9C40YHQvtC6INGN0LvQtdC80LXQvdGC0L7QsiDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SXRlbXMkKCk6IE9ic2VydmFibGU8U2NPcmRlckl0ZW1bXSB8IFNjT3JkZXJMb2FkaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCQoKS5waXBlKG1hcCgoY2FydCkgPT4gKGNhcnQgPT09IGxvYWRpbmdQbGFjZWhvbGRlciA/IGxvYWRpbmdQbGFjZWhvbGRlciA6IChjYXJ0IGFzIFNjQ2FydCkuaXRlbXMpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JTQvtCx0LDQstC70Y/QtdGCINC/0YDQvtC00YPQutGCINCyINC60L7RgNC30LjQvdGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEg0JTQsNC90L3Ri9C1INC00L7QsdCw0LLQu9GP0LXQvNC+0LPQviDQv9GA0L7QtNGD0LrRgtCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRQcm9kdWN0JChkYXRhOiBTY0lOZXdPcmRlckl0ZW1CYXNlKTogT2JzZXJ2YWJsZTxTY0NhcnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxTY0lDYXJ0PihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXJ0YCwgZGF0YSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoY2FydERUTykgPT4gbmV3IFNjQ2FydChjYXJ0RFRPKSksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnByb2R1Y3RJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0uY2FydEl0ZW1BZGRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBwcm9kdWN0X2lkOiBkYXRhLnByb2R1Y3RJZCB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoY2FydCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydENhY2hlZEl0ZW0kLnNldFZhbHVlKGNhcnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQmNC30LzQtdC90Y/QtdGCINC/0YDQvtC00YPQutGCINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC/0L7Qt9C40YbQuNC4LlxuICAgICAqIEBwYXJhbSBwYXRjaCDQp9Cw0YHRgtC40YfQvdGL0LUg0LTQsNC90L3Ri9C1INC00LvRjyDQvtCx0L3QvtCy0LvQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlUHJvZHVjdCQoaWQ6IHN0cmluZywgcGF0Y2g6IE9taXQ8U2NJTmV3T3JkZXJJdGVtQmFzZSwgJ3Byb2R1Y3RJZCc+KTogT2JzZXJ2YWJsZTxTY0NhcnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxTY0lDYXJ0PihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXJ0LyR7aWR9YCwgcGF0Y2gpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGNhcnREVE8pID0+IG5ldyBTY0NhcnQoY2FydERUTykpLFxuICAgICAgICAgICAgdGFwKChjYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0Q2FjaGVkSXRlbSQuc2V0VmFsdWUoY2FydCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINC/0YDQvtC00YPQutGCINC40Lcg0LrQvtGA0LfQuNC90YsuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQo9C00LDQu9GP0LXQvNCw0Y8g0L/QvtC30LjRhtC40Y8uXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZVByb2R1Y3QkKGl0ZW06IFNjT3JkZXJJdGVtKTogT2JzZXJ2YWJsZTxTY0NhcnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8U2NJQ2FydD4oYCR7dGhpcy51cmxzLmFwaVVybH0vY2FydC8ke2l0ZW0uaWR9YCkucGlwZShcbiAgICAgICAgICAgIG1hcCgoY2FydERUTykgPT4gbmV3IFNjQ2FydChjYXJ0RFRPKSksXG4gICAgICAgICAgICB0YXAoKGNhcnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRDYWNoZWRJdGVtJC5zZXRWYWx1ZShjYXJ0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5jYXJ0SXRlbURlbGV0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBwcm9kdWN0X2lkOiBpdGVtLnByb2R1Y3QuaWQgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC/0YDQvtGBINC+0YfQuNGB0YLQutC4INC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckNhcnQkKCk6IE9ic2VydmFibGU8dW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHVuZGVmaW5lZD4oYCR7dGhpcy51cmxzLmFwaVVybH0vY2FydGApLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLmNhcnRDbGVhcmVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLnJlbW92ZUFsbE5ld09yZGVyc01ldGFkYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0Q2FjaGVkSXRlbSQuc2V0VmFsdWUobmV3IFNjQ2FydCgpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdC90L7QstC70Y/QtdGCINC60L7RgNC30LjQvdGDLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVDYXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhcnRDYWNoZWRJdGVtJC51cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0L/QvtC30LjRhtC40Lkg0LIg0LrQvtGA0LfQuNC90LUg0YEg0YLQvtCy0LDRgNCw0LzQuCwg0LrQvtGC0L7RgNGL0LUg0LHRi9C70Lgg0YPQtNCw0LvQtdC90Ysg0LjQtyDQv9GA0LDQudGBLdC70LjRgtCwINC4INCx0L7Qu9GM0YjQtSDQvdC1INC/0YDQvtC00LDRjtGC0YHRjy5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgcHVibGljIGdldE51bGxDYXJ0SXRlbXMkKCk6IE9ic2VydmFibGU8U2NPcmRlckl0ZW1bXSB8IFNjT3JkZXJMb2FkaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCQoKS5waXBlKFxuICAgICAgICAgICAgbWFwKChjYXJ0KSA9PiAoY2FydCA9PT0gbG9hZGluZ1BsYWNlaG9sZGVyID8gbG9hZGluZ1BsYWNlaG9sZGVyIDogKGNhcnQgYXMgU2NDYXJ0KS5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ucHJvZHVjdC5pc051bGwgfHwgaXRlbS5wcm9kdWN0LmlzSGlkZGVuKSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L7QsdGK0LXQutGCIHtAbGluayBTY0NhcnR9INC60L7RgNC30LjQvdGLLCDRgdC+0LfQtNCw0L3QvdGL0Lkg0LjQtyDQvtCx0YrQtdC60YLQsCDQt9Cw0LrQsNC30LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3JkZXIg0JTQsNC90L3Ri9C1INC+INC30LDQutCw0LfQtS5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHB1YmxpYyBnZXRDYXJ0QnlPcmRlcihvcmRlcjogU2NPcmRlcik6IFNjQ2FydCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogb3JkZXIucHJvZHVjdHMsXG4gICAgICAgICAgICByZXN1bHRTdW06IHsgcnViOiBvcmRlci5zdW0gfSxcbiAgICAgICAgICAgIGRpcmVjdGlvbnNTdW06IHsgW29yZGVyLmRpcmVjdGlvbl06IG5ldyBTY1N1bShvcmRlci5zdW0pIH0sXG4gICAgICAgIH0gYXMgU2NDYXJ0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YDQuNC80LXRgCBDU1Yg0YTQsNC50LvQsCDQtNC70Y8g0LTQvtCx0LDQstC70LXQvdC40Y8g0L/RgNC+0LTRg9C60YLQvtCyINCyINC60L7RgNC30LjQvdGDLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYXJ0Q3N2RXhhbXBsZSQoKTogT2JzZXJ2YWJsZTxCbG9iPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5nZXQoYCR7dGhpcy51cmxzLmFwaVVybH0vY2FydC9jc3YvZXhhbXBsZWAsIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShtYXAoKGJsb2IpID0+IG5ldyBCbG9iKFtibG9iXSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JTQvtCx0LDQstC70Y/QtdGCINGC0L7QstCw0YDRiyDQsiDQutC+0YDQt9C40L3RgyDQuNC3INGE0LDQudC70LAgQ1NWLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbGUg0JfQsNCz0YDRg9C20LDQtdC80YvQuSDRhNCw0LnQuyDQsiDRhNC+0YDQvNCw0YLQtSBiYXNlNjQuXG4gICAgICovXG4gICAgcHVibGljIGFkZFByb2R1Y3RzRnJvbUNzdiQoZmlsZTogU2NVcGxvYWRlZEZpbGUpOiBPYnNlcnZhYmxlPFNjQ2FydD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2NJQ2FydD4oYCR7dGhpcy51cmxzLmFwaVVybH0vY2FydC9jc3ZgLCB7IGZpbGUgfSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoY2FydERUTykgPT4gbmV3IFNjQ2FydChjYXJ0RFRPKSksXG4gICAgICAgICAgICB0YXAoKGNhcnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRDYWNoZWRJdGVtJC5zZXRWYWx1ZShjYXJ0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5jYXJ0Q3N2VXBsb2FkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jYXJ0L3NlcnZpY2VzL3NjLWNhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFPcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFrQixNQUFNLDBDQUEwQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUM3RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUcxQzs7R0FFRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBeUN0Qjs7T0FF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QUlHO0lBQ0ksbUJBQW1CLENBQUMsSUFBb0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDekUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNyQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDekMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLGFBQWE7YUFDL0MsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7K0dBL05RLGFBQWE7bUhBQWIsYUFBYSxjQUZWLE1BQU07OzRGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaXJzdCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3dpdGNoTWFwLCB0YXAsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NDYWNoZWRJdGVtIH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9jbGFzc2VzL3NjLWNhY2hlZC1pdGVtJztcbmltcG9ydCB7IFNjSVVybHMgfSBmcm9tICcuLi8uLi9jb25maWcvc2MtaS11cmxzJztcbmltcG9ydCB7IFNjVXBsb2FkZWRGaWxlIH0gZnJvbSAnLi4vLi4vY29udGFjdHMvZHRvL3NjLXVwbG9hZGVkLWZpbGUnO1xuaW1wb3J0IHsgU2NPcmRlciB9IGZyb20gJy4uLy4uL29yZGVyL2NsYXNzZXMvc2Mtb3JkZXInO1xuaW1wb3J0IHsgU2NPcmRlckl0ZW0gfSBmcm9tICcuLi8uLi9vcmRlci9jbGFzc2VzL3NjLW9yZGVyLWl0ZW0nO1xuaW1wb3J0IHsgU2NJTmV3T3JkZXJJdGVtQmFzZSB9IGZyb20gJy4uLy4uL29yZGVyL2ludGVybmFsL3NjLWktbmV3LW9yZGVyLWl0ZW0tYmFzZSc7XG5pbXBvcnQgeyBTY0lPcmRlckVkaXRvckxvYWRlciB9IGZyb20gJy4uLy4uL29yZGVyL2ludGVybmFsL3NjLWktb3JkZXItbG9hZGVyJztcbmltcG9ydCB7IGxvYWRpbmdQbGFjZWhvbGRlciwgU2NPcmRlckxvYWRpbmcgfSBmcm9tICcuLi8uLi9vcmRlci90b2tlbnMvc2Mtb3JkZXItbG9hZGVyLnRva2VuJztcbmltcG9ydCB7IElTX0JST1dTRVIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvc3NyLnByb3ZpZGVycyc7XG5pbXBvcnQgeyBTQ19VUkxTIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLXVybHMnO1xuaW1wb3J0IHsgU2NVSVNlcnZpY2UgfSBmcm9tICcuLi8uLi91aS9zZXJ2aWNlcy9zYy11aS5zZXJ2aWNlJztcbmltcG9ydCB7IFNjVXNlciB9IGZyb20gJy4uLy4uL3VzZXIvZHRvL3NjLXVzZXInO1xuaW1wb3J0IHsgU0NfVVNFUl9JTkZPIH0gZnJvbSAnLi4vLi4vdXNlci90b2tlbnMvc2MtdXNlci1wcm92aWRlcnMnO1xuaW1wb3J0IHsgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSB9IGZyb20gJy4uLy4uL3VzZXItbWV0cmlrYS9lbnVtcy9zYy11c2VyLW1ldHJpa2EtZ29hbHMtZW51bSc7XG5pbXBvcnQgeyBTY1VzZXJNZXRyaWthU2VydmljZSB9IGZyb20gJy4uLy4uL3VzZXItbWV0cmlrYS9zZXJ2aWNlcy9zYy11c2VyLW1ldHJpa2Euc2VydmljZSc7XG5pbXBvcnQgeyBTY1dhcmVob3VzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi93YXJlaG91c2UnO1xuaW1wb3J0IHsgU2NDYXJ0IH0gZnJvbSAnLi4vY2xhc3Nlcy9zYy1jYXJ0JztcbmltcG9ydCB7IFNjU3VtIH0gZnJvbSAnLi4vY2xhc3Nlcy9zYy1zdW0nO1xuaW1wb3J0IHsgU2NJQ2FydCB9IGZyb20gJy4uL2ludGVybmFsL3NjLWktY2FydCc7XG5cbi8qKlxuICog0JTQsNC90L3Ri9C1INC+INGB0LXRgNCy0LjRgdC1INC60L7RgNC30LjQvdGLLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY0NhcnRTZXJ2aWNlIGltcGxlbWVudHMgU2NJT3JkZXJFZGl0b3JMb2FkZXI8U2NPcmRlckl0ZW0sIFNjQ2FydD4ge1xuICAgIC8qKlxuICAgICAqIHtAbGluayBSZXBsYXlTdWJqZWN0fSDQtNC70Y8g0YHQvtC00LXRgNC20LjQvNC+0LPQviDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNhcnRDYWNoZWRJdGVtJDogU2NDYWNoZWRJdGVtPFNjQ2FydCwgU2NPcmRlckxvYWRpbmc+O1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDRgdC60YDQuNC/0YIg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyDQsiDQsdGA0LDRg9C30LXRgNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCcm93c2VyOiBib29sZWFuID0gaW5qZWN0KElTX0JST1dTRVIpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC00LDQvdC90YvRhSDQviDRgtC10LrRg9GJ0LXQvCDQv9C+0LvRjNC30L7QstCw0YLQtdC70LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyJDogT2JzZXJ2YWJsZTxTY1VzZXI+ID0gaW5qZWN0KFNDX1VTRVJfSU5GTyk7XG5cbiAgICAvKipcbiAgICAgKiBIVFRQLdC60LvQuNC10L3Rgi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6INC/0YDQuNC70L7QttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyA9IGluamVjdChTQ19VUkxTKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBIFVJLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdWlTZXJ2aWNlOiBTY1VJU2VydmljZSA9IGluamVjdChTY1VJU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgdC+INGB0LrQu9Cw0LTQsNC80LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB3YXJlaG91c2VTZXJ2aWNlOiBTY1dhcmVob3VzZVNlcnZpY2UgPSBpbmplY3QoU2NXYXJlaG91c2VTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZSA9IGluamVjdChTY1VzZXJNZXRyaWthU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQ2FydFNlcnZpY2V9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNCcm93c2VyKSB7XG4gICAgICAgICAgICB0aGlzLmNhcnRDYWNoZWRJdGVtJCA9IG5ldyBTY0NhY2hlZEl0ZW0oSW5maW5pdHksIHRoaXMuZ2V0Q2FydERhdGEkKCksIGxvYWRpbmdQbGFjZWhvbGRlcik7XG4gICAgICAgICAgICB0aGlzLnVzZXIkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBwcmV2aW91cy5pZCA9PT0gY3VycmVudC5pZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0Q2FjaGVkSXRlbSQudXBkYXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FydENhY2hlZEl0ZW0kID0gbmV3IFNjQ2FjaGVkSXRlbShJbmZpbml0eSwgb2YobmV3IFNjQ2FydCgpKSwgbG9hZGluZ1BsYWNlaG9sZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINC30LDQv9GA0L7RgSDQv9C+0LvRg9GH0LXQvdC40Y8g0YHQvtC00LXRgNC20LjQvNC+0LPQviDQutC+0YDQt9C40L3RiyDQuCDQvtCx0L3QvtCy0LvRj9C10YIg0LrQvtGA0LfQuNC90YMsINCy0L7Qt9Cy0YDQsNGJ0LDRjyB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQvtC00LXRgNC20LjQvNC+0LPQviDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENhcnREYXRhJCgpOiBPYnNlcnZhYmxlPFNjQ2FydD4ge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyJC5waXBlKFxuICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgodXNlcikgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PFNjSUNhcnQ+KGAke3RoaXMudXJscy5hcGlVcmx9L2NhcnRgKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKGNhcnREVE8pID0+IG5ldyBTY0NhcnQoY2FydERUTykpLFxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiDQn9C10YDQtdGB0LzQvtGC0YDQtdGC0Ywg0LzQtdGF0LDQvdC40LfQvNGLINC/0LXRgNC10YXQstCw0YLQsCBIVFRQLdC+0YjQuNCx0L7QuiA0MDEvNDAzLzAg0YbQtdC90YLRgNCw0LvQuNC30L7QstCw0L3QvdC+ICjRgSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC8IGludGVyY2VwdG9ycykuXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlci5pc0d1ZXN0ICYmIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgWzAsIDQwMSwgNDAzXS5pbmNsdWRlcyhlcnJvci5zdGF0dXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0JTQu9GPINCz0L7RgdGC0Y8g0LIg0L3QtdCw0LLRgtC+0YDQuNC30L7QstCw0L3QvdGL0YUv0YHQtdGC0LXQstGL0YUg0LrQtdC50YHQsNGFINC+0YLQtNCw0ZHQvCDQv9GD0YHRgtGD0Y4g0LrQvtGA0LfQuNC90YMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g0YfRgtC+0LHRiyDQvdC1INC/0YDQvtCx0YDQsNGB0YvQstCw0YLRjCDQvtGI0LjQsdC60YMg0LLQviDQstGB0LUg0L/QvtC00L/QuNGB0LrQuCBVSS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobmV3IFNjQ2FydCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9C+0LvQvdGD0Y4g0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0LrQvtGA0LfQuNC90LUgKNC60L7QvdGC0LXQutGB0YIg0LfQsNCz0YDRg9C30YfQuNC60LApLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQkKCk6IE9ic2VydmFibGU8U2NDYXJ0IHwgU2NPcmRlckxvYWRpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydENhY2hlZEl0ZW0kLml0ZW0kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L/QuNGB0L7QuiDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsuXG4gICAgICovXG4gICAgcHVibGljIGdldEl0ZW1zJCgpOiBPYnNlcnZhYmxlPFNjT3JkZXJJdGVtW10gfCBTY09yZGVyTG9hZGluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQkKCkucGlwZShtYXAoKGNhcnQpID0+IChjYXJ0ID09PSBsb2FkaW5nUGxhY2Vob2xkZXIgPyBsb2FkaW5nUGxhY2Vob2xkZXIgOiAoY2FydCBhcyBTY0NhcnQpLml0ZW1zKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCU0L7QsdCw0LLQu9GP0LXRgiDQv9GA0L7QtNGD0LrRgiDQsiDQutC+0YDQt9C40L3Rgy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhINCU0LDQvdC90YvQtSDQtNC+0LHQsNCy0LvRj9C10LzQvtCz0L4g0L/RgNC+0LTRg9C60YLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkUHJvZHVjdCQoZGF0YTogU2NJTmV3T3JkZXJJdGVtQmFzZSk6IE9ic2VydmFibGU8U2NDYXJ0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8U2NJQ2FydD4oYCR7dGhpcy51cmxzLmFwaVVybH0vY2FydGAsIGRhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGNhcnREVE8pID0+IG5ldyBTY0NhcnQoY2FydERUTykpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wcm9kdWN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLmNhcnRJdGVtQWRkZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgcHJvZHVjdF9pZDogZGF0YS5wcm9kdWN0SWQgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAoKGNhcnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRDYWNoZWRJdGVtJC5zZXRWYWx1ZShjYXJ0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JjQt9C80LXQvdGP0LXRgiDQv9GA0L7QtNGD0LrRgiDQsiDQutC+0YDQt9C40L3QtS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQv9C+0LfQuNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gcGF0Y2gg0KfQsNGB0YLQuNGH0L3Ri9C1INC00LDQvdC90YvQtSDQtNC70Y8g0L7QsdC90L7QstC70LXQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVByb2R1Y3QkKGlkOiBzdHJpbmcsIHBhdGNoOiBPbWl0PFNjSU5ld09yZGVySXRlbUJhc2UsICdwcm9kdWN0SWQnPik6IE9ic2VydmFibGU8U2NDYXJ0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8U2NJQ2FydD4oYCR7dGhpcy51cmxzLmFwaVVybH0vY2FydC8ke2lkfWAsIHBhdGNoKS5waXBlKFxuICAgICAgICAgICAgbWFwKChjYXJ0RFRPKSA9PiBuZXcgU2NDYXJ0KGNhcnREVE8pKSxcbiAgICAgICAgICAgIHRhcCgoY2FydCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydENhY2hlZEl0ZW0kLnNldFZhbHVlKGNhcnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDQv9GA0L7QtNGD0LrRgiDQuNC3INC60L7RgNC30LjQvdGLLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0KPQtNCw0LvRj9C10LzQsNGPINC/0L7Qt9C40YbQuNGPLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVQcm9kdWN0JChpdGVtOiBTY09yZGVySXRlbSk6IE9ic2VydmFibGU8U2NDYXJ0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPFNjSUNhcnQ+KGAke3RoaXMudXJscy5hcGlVcmx9L2NhcnQvJHtpdGVtLmlkfWApLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGNhcnREVE8pID0+IG5ldyBTY0NhcnQoY2FydERUTykpLFxuICAgICAgICAgICAgdGFwKChjYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0Q2FjaGVkSXRlbSQuc2V0VmFsdWUoY2FydCk7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0uY2FydEl0ZW1EZWxldGVkLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgcHJvZHVjdF9pZDogaXRlbS5wcm9kdWN0LmlkIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINC30LDQv9GA0L7RgSDQvtGH0LjRgdGC0LrQuCDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJDYXJ0JCgpOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx1bmRlZmluZWQ+KGAke3RoaXMudXJscy5hcGlVcmx9L2NhcnRgKS5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5jYXJ0Q2xlYXJlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVpU2VydmljZS5yZW1vdmVBbGxOZXdPcmRlcnNNZXRhZGF0YSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydENhY2hlZEl0ZW0kLnNldFZhbHVlKG5ldyBTY0NhcnQoKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHQvdC+0LLQu9GP0LXRgiDQutC+0YDQt9C40L3Rgy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlQ2FydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXJ0Q2FjaGVkSXRlbSQudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC/0L7Qt9C40YbQuNC5INCyINC60L7RgNC30LjQvdC1INGBINGC0L7QstCw0YDQsNC80LgsINC60L7RgtC+0YDRi9C1INCx0YvQu9C4INGD0LTQsNC70LXQvdGLINC40Lcg0L/RgNCw0LnRgS3Qu9C40YLQsCDQuCDQsdC+0LvRjNGI0LUg0L3QtSDQv9GA0L7QtNCw0Y7RgtGB0Y8uXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROdWxsQ2FydEl0ZW1zJCgpOiBPYnNlcnZhYmxlPFNjT3JkZXJJdGVtW10gfCBTY09yZGVyTG9hZGluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQkKCkucGlwZShcbiAgICAgICAgICAgIG1hcCgoY2FydCkgPT4gKGNhcnQgPT09IGxvYWRpbmdQbGFjZWhvbGRlciA/IGxvYWRpbmdQbGFjZWhvbGRlciA6IChjYXJ0IGFzIFNjQ2FydCkuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnByb2R1Y3QuaXNOdWxsIHx8IGl0ZW0ucHJvZHVjdC5pc0hpZGRlbikpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC+0LHRitC10LrRgiB7QGxpbmsgU2NDYXJ0fSDQutC+0YDQt9C40L3Riywg0YHQvtC30LTQsNC90L3Ri9C5INC40Lcg0L7QsdGK0LXQutGC0LAg0LfQsNC60LDQt9CwLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9yZGVyINCU0LDQvdC90YvQtSDQviDQt9Cw0LrQsNC30LUuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBwdWJsaWMgZ2V0Q2FydEJ5T3JkZXIob3JkZXI6IFNjT3JkZXIpOiBTY0NhcnQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IG9yZGVyLnByb2R1Y3RzLFxuICAgICAgICAgICAgcmVzdWx0U3VtOiB7IHJ1Yjogb3JkZXIuc3VtIH0sXG4gICAgICAgICAgICBkaXJlY3Rpb25zU3VtOiB7IFtvcmRlci5kaXJlY3Rpb25dOiBuZXcgU2NTdW0ob3JkZXIuc3VtKSB9LFxuICAgICAgICB9IGFzIFNjQ2FydDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9GA0LjQvNC10YAgQ1NWINGE0LDQudC70LAg0LTQu9GPINC00L7QsdCw0LLQu9C10L3QuNGPINC/0YDQvtC00YPQutGC0L7QsiDQsiDQutC+0YDQt9C40L3Rgy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2FydENzdkV4YW1wbGUkKCk6IE9ic2VydmFibGU8QmxvYj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0KGAke3RoaXMudXJscy5hcGlVcmx9L2NhcnQvY3N2L2V4YW1wbGVgLCB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUobWFwKChibG9iKSA9PiBuZXcgQmxvYihbYmxvYl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCU0L7QsdCw0LLQu9GP0LXRgiDRgtC+0LLQsNGA0Ysg0LIg0LrQvtGA0LfQuNC90YMg0LjQtyDRhNCw0LnQu9CwIENTVi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlINCX0LDQs9GA0YPQttCw0LXQvNGL0Lkg0YTQsNC50Lsg0LIg0YTQvtGA0LzQsNGC0LUgYmFzZTY0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRQcm9kdWN0c0Zyb21Dc3YkKGZpbGU6IFNjVXBsb2FkZWRGaWxlKTogT2JzZXJ2YWJsZTxTY0NhcnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFNjSUNhcnQ+KGAke3RoaXMudXJscy5hcGlVcmx9L2NhcnQvY3N2YCwgeyBmaWxlIH0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGNhcnREVE8pID0+IG5ldyBTY0NhcnQoY2FydERUTykpLFxuICAgICAgICAgICAgdGFwKChjYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0Q2FjaGVkSXRlbSQuc2V0VmFsdWUoY2FydCk7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0uY2FydENzdlVwbG9hZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
@@ -1,14 +1,14 @@
1
1
  import { parseISO, parse, isValid, format } from 'date-fns';
2
2
  import { isString, isNil, isMatch, isArray, get } from 'lodash-es';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, inject, PLATFORM_ID, Injectable, Inject, Optional, EventEmitter, LOCALE_ID, Pipe, RendererFactory2 } from '@angular/core';
4
+ import { InjectionToken, inject, PLATFORM_ID, Injectable, Inject, Optional, EventEmitter, DestroyRef, LOCALE_ID, Pipe, RendererFactory2 } from '@angular/core';
5
5
  import { WA_LOCAL_STORAGE, WA_USER_AGENT, WA_WINDOW } from '@ng-web-apis/common';
6
6
  import { filterByKey, toValue, WA_STORAGE_EVENT, StorageService } from '@ng-web-apis/storage';
7
7
  import * as i1 from 'rxjs';
8
- import { startWith, Subject, ReplaySubject, partition, combineLatest, map, debounceTime, switchMap, of, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, expand, takeWhile, toArray, catchError, throwError, concatMap, finalize, takeUntil, interval, share, scan } from 'rxjs';
8
+ import { startWith, Subject, ReplaySubject, partition, combineLatest, map, debounceTime, switchMap, of, tap, filter, shareReplay, distinctUntilChanged, BehaviorSubject, materialize, dematerialize, merge, distinctUntilKeyChanged, skip, first, catchError, throwError, expand, takeWhile, toArray, concatMap, finalize, takeUntil, interval, share, scan } from 'rxjs';
9
9
  import { isPlatformBrowser, isPlatformServer, DOCUMENT, formatDate } from '@angular/common';
10
10
  import * as i1$1 from '@angular/common/http';
11
- import { HttpContextToken, HttpContext, HttpHeaders, HttpClient, HttpParams, HttpResponse, HttpErrorResponse } from '@angular/common/http';
11
+ import { HttpContextToken, HttpContext, HttpHeaders, HttpClient, HttpParams, HttpErrorResponse, HttpResponse } from '@angular/common/http';
12
12
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
13
13
  import { tuiIsPresent, TuiDay, tuiPure, TUI_TRUE_HANDLER } from '@taiga-ui/cdk';
14
14
  import { tuiCleanObject } from '@taiga-ui/addon-doc/utils';
@@ -981,12 +981,16 @@ class ScAuthService {
981
981
  * Признак, что скрипт выполняется на сервере.
982
982
  */
983
983
  this.isServer = inject(IS_SERVER);
984
+ /**
985
+ * Ограничивает жизнь подписок из конструктора инжектором (актуально для unit-тестов).
986
+ */
987
+ this.destroyRef = inject(DestroyRef);
984
988
  const [authState$, actions$] = partition(combineLatest({
985
989
  access: this.tokenService.accessAuthToken$.pipe(map((token) => token !== null)),
986
990
  guest: this.tokenService.guestToken$.pipe(map((token) => token !== null)),
987
991
  }).pipe(debounceTime(0)), // Исправляет ошибку одновременного удаления ключа гостя и ключа пользователя. Возникает при очистке Storage.
988
992
  ({ access, guest }) => (access && !guest) || (!access && guest));
989
- authState$.subscribe(({ access }) => {
993
+ authState$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(({ access }) => {
990
994
  this.authSubject.next(access);
991
995
  });
992
996
  actions$
@@ -996,7 +1000,7 @@ class ScAuthService {
996
1000
  return of(null);
997
1001
  }
998
1002
  return this.getGuestToken$();
999
- }))
1003
+ }), takeUntilDestroyed(this.destroyRef))
1000
1004
  .subscribe();
1001
1005
  if (this.isServer) {
1002
1006
  this.authSubject.next(false);
@@ -2787,7 +2791,7 @@ class ScCartService {
2787
2791
  this.userMetrikaService = inject(ScUserMetrikaService);
2788
2792
  if (this.isBrowser) {
2789
2793
  this.cartCachedItem$ = new ScCachedItem(Infinity, this.getCartData$(), loadingPlaceholder);
2790
- this.user$.subscribe(() => {
2794
+ this.user$.pipe(distinctUntilChanged((previous, current) => previous.id === current.id)).subscribe(() => {
2791
2795
  this.cartCachedItem$.update();
2792
2796
  });
2793
2797
  }
@@ -2799,7 +2803,16 @@ class ScCartService {
2799
2803
  * Создаёт запрос получения содержимого корзины и обновляет корзину, возвращая {@link Observable} содержимого корзины.
2800
2804
  */
2801
2805
  getCartData$() {
2802
- return this.http.get(`${this.urls.apiUrl}/cart`).pipe(map((cartDTO) => new ScCart(cartDTO)));
2806
+ return this.user$.pipe(first(), switchMap((user) => this.http.get(`${this.urls.apiUrl}/cart`).pipe(map((cartDTO) => new ScCart(cartDTO)),
2807
+ // TODO: Пересмотреть механизмы перехвата HTTP-ошибок 401/403/0 централизованно (с использованием interceptors).
2808
+ catchError((error) => {
2809
+ if (user.isGuest && error instanceof HttpErrorResponse && [0, 401, 403].includes(error.status)) {
2810
+ // Для гостя в неавторизованных/сетевых кейсах отдаём пустую корзину,
2811
+ // чтобы не пробрасывать ошибку во все подписки UI.
2812
+ return of(new ScCart());
2813
+ }
2814
+ return throwError(() => error);
2815
+ }))));
2803
2816
  }
2804
2817
  /**
2805
2818
  * Возвращает полную информацию о корзине (контекст загрузчика).