@snabcentr/client-ui 0.30.1 → 0.31.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,12 @@
1
1
  import { ChangeDetectorRef, EventEmitter, OnInit } from '@angular/core';
2
- import { ScFavoriteService, ScIUrls } from '@snabcentr/client-core';
2
+ import { ScFavoriteService, ScITerminalProvider, ScIUrls } from '@snabcentr/client-core';
3
3
  import * as i0 from "@angular/core";
4
4
  /**
5
5
  * Компонент списка категорий.
6
6
  */
7
7
  export declare class ScCategoriesListComponent<T extends object> implements OnInit {
8
8
  private readonly urls;
9
+ readonly terminal: ScITerminalProvider;
9
10
  private readonly favoriteService;
10
11
  private readonly cdr;
11
12
  /**
@@ -24,10 +25,11 @@ export declare class ScCategoriesListComponent<T extends object> implements OnIn
24
25
  * Инициализирует экземпляр класса {@link ScCategoriesListComponent}.
25
26
  *
26
27
  * @param urls объект информации о базовом списке ссылок приложения.
28
+ * @param terminal Данные о запуске приложения на терминале.
27
29
  * @param favoriteService Сервис для работы с корзиной.
28
30
  * @param cdr Объект для работы с обнаружением изменений.
29
31
  */
30
- constructor(urls: ScIUrls, favoriteService: ScFavoriteService, cdr: ChangeDetectorRef);
32
+ constructor(urls: ScIUrls, terminal: ScITerminalProvider, favoriteService: ScFavoriteService, cdr: ChangeDetectorRef);
31
33
  /** @inheritDoc */
32
34
  ngOnInit(): void;
33
35
  /**
@@ -1,7 +1,8 @@
1
1
  import { __decorate } from "tslib";
2
- import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, inject } from '@angular/core';
2
+ /* eslint-disable @typescript-eslint/no-explicit-any,class-methods-use-this,lodash/prefer-some,lodash/prefer-lodash-method,no-param-reassign */
3
+ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, inject, Input, Output } from '@angular/core';
3
4
  import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
4
- import { SC_URLS } from '@snabcentr/client-core';
5
+ import { IS_RUNNING_ON_TERMINAL, SC_URLS, TERMINAL_PROVIDERS } from '@snabcentr/client-core';
5
6
  import { TUI_IS_MOBILE, tuiPure } from '@taiga-ui/cdk';
6
7
  import { filter, tap } from 'rxjs';
7
8
  import * as i0 from "@angular/core";
@@ -17,11 +18,13 @@ let ScCategoriesListComponent = class ScCategoriesListComponent {
17
18
  * Инициализирует экземпляр класса {@link ScCategoriesListComponent}.
18
19
  *
19
20
  * @param urls объект информации о базовом списке ссылок приложения.
21
+ * @param terminal Данные о запуске приложения на терминале.
20
22
  * @param favoriteService Сервис для работы с корзиной.
21
23
  * @param cdr Объект для работы с обнаружением изменений.
22
24
  */
23
- constructor(urls, favoriteService, cdr) {
25
+ constructor(urls, terminal, favoriteService, cdr) {
24
26
  this.urls = urls;
27
+ this.terminal = terminal;
25
28
  this.favoriteService = favoriteService;
26
29
  this.cdr = cdr;
27
30
  /**
@@ -36,12 +39,14 @@ let ScCategoriesListComponent = class ScCategoriesListComponent {
36
39
  /** @inheritDoc */
37
40
  ngOnInit() {
38
41
  this.favoriteService.categories$
39
- .pipe(filter(() => !!this.categories && Boolean(this.categories.length) && 'id' in this.categories[0]), tap((categories) => {
40
- this.categories?.forEach(category => {
41
- category.isFavorite = categories.findIndex(item => category.id === item.id) !== -1;
42
+ .pipe(filter(() => !!this.categories && this.categories.length > 0 && 'id' in this.categories[0]), tap((categories) => {
43
+ this.categories.forEach((category) => {
44
+ category.isFavorite = categories.findIndex((item) => category.id === item.id) !== -1;
42
45
  });
43
46
  }), untilDestroyed(this))
44
- .subscribe(() => this.cdr.markForCheck());
47
+ .subscribe(() => {
48
+ this.cdr.markForCheck();
49
+ });
45
50
  }
46
51
  /**
47
52
  * Возвращает путь до изображения на сервере.
@@ -49,7 +54,7 @@ let ScCategoriesListComponent = class ScCategoriesListComponent {
49
54
  * @param imgPath путь, где хранится изображение.
50
55
  */
51
56
  getCategoryImage(imgPath) {
52
- return this.urls.imgServerUrl + '/' + imgPath;
57
+ return `${this.urls.imgServerUrl}/${imgPath}`;
53
58
  }
54
59
  /**
55
60
  * Проверяет наличие хотя бы одного изображения.
@@ -61,8 +66,8 @@ let ScCategoriesListComponent = class ScCategoriesListComponent {
61
66
  return categories.some((item) => item.properties?.image);
62
67
  }
63
68
  };
64
- ScCategoriesListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoriesListComponent, deps: [{ token: SC_URLS }, { token: i1.ScFavoriteService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
65
- ScCategoriesListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCategoriesListComponent, selector: "sc-categories-list", inputs: { categories: "categories" }, outputs: { clickCategoryEvent: "clickCategoryEvent" }, ngImport: i0, template: "<div class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\">\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-svg\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n src=\"tuiIconCameraOffLarge\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-svg>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-svg\n *ngIf=\"item.isFavorite\"\n src=\"scIconFavoriteFill\"\n class=\"mr-auto !text-sm text-tui-primary\"\n ></tui-svg>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i4.TuiRepeatTimesDirective, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
69
+ ScCategoriesListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoriesListComponent, deps: [{ token: SC_URLS }, { token: IS_RUNNING_ON_TERMINAL }, { token: i1.ScFavoriteService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
70
+ ScCategoriesListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCategoriesListComponent, selector: "sc-categories-list", inputs: { categories: "categories" }, outputs: { clickCategoryEvent: "clickCategoryEvent" }, providers: [TERMINAL_PROVIDERS], ngImport: i0, template: "<div\n [ngClass]=\"{ '!flex !flex-col': terminal.isRunningOnTerminal }\"\n class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\"\n>\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-svg\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n src=\"tuiIconCameraOffLarge\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-svg>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-svg\n *ngIf=\"item.isFavorite\"\n src=\"scIconFavoriteFill\"\n class=\"mr-auto !text-sm text-tui-primary\"\n ></tui-svg>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i4.TuiRepeatTimesDirective, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
66
71
  __decorate([
67
72
  tuiPure
68
73
  ], ScCategoriesListComponent.prototype, "checkImagesExists", null);
@@ -72,13 +77,16 @@ ScCategoriesListComponent = __decorate([
72
77
  export { ScCategoriesListComponent };
73
78
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoriesListComponent, decorators: [{
74
79
  type: Component,
75
- args: [{ selector: 'sc-categories-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\">\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-svg\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n src=\"tuiIconCameraOffLarge\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-svg>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-svg\n *ngIf=\"item.isFavorite\"\n src=\"scIconFavoriteFill\"\n class=\"mr-auto !text-sm text-tui-primary\"\n ></tui-svg>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n</ng-template>\n" }]
80
+ args: [{ selector: 'sc-categories-list', providers: [TERMINAL_PROVIDERS], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [ngClass]=\"{ '!flex !flex-col': terminal.isRunningOnTerminal }\"\n class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\"\n>\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-svg\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n src=\"tuiIconCameraOffLarge\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-svg>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-svg\n *ngIf=\"item.isFavorite\"\n src=\"scIconFavoriteFill\"\n class=\"mr-auto !text-sm text-tui-primary\"\n ></tui-svg>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n</ng-template>\n" }]
76
81
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
77
82
  type: Inject,
78
83
  args: [SC_URLS]
84
+ }] }, { type: undefined, decorators: [{
85
+ type: Inject,
86
+ args: [IS_RUNNING_ON_TERMINAL]
79
87
  }] }, { type: i1.ScFavoriteService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { categories: [{
80
88
  type: Input
81
89
  }], clickCategoryEvent: [{
82
90
  type: Output
83
91
  }], checkImagesExists: [] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0ZWdvcmllcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL2NhdGVnb3JpZXMtbGlzdC9zYy1jYXRlZ29yaWVzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0ZWdvcmllcy1saXN0L3NjLWNhdGVnb3JpZXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQTBDLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQUVuQzs7R0FFRztBQU9JLElBQU0seUJBQXlCLEdBQS9CLE1BQU0seUJBQXlCO0lBa0JsQzs7Ozs7O09BTUc7SUFDSCxZQUNzQyxJQUFhLEVBQzlCLGVBQWtDLEVBQ2xDLEdBQXNCO1FBRkwsU0FBSSxHQUFKLElBQUksQ0FBUztRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFyQjNDOztXQUVHO1FBQ2EsYUFBUSxHQUFZLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUxRDs7V0FFRztRQUVJLHVCQUFrQixHQUFvQixJQUFJLFlBQVksRUFBSyxDQUFDO0lBYWhFLENBQUM7SUFFSixrQkFBa0I7SUFDWCxRQUFRO1FBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXO2FBQzNCLElBQUksQ0FDRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEcsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBMkIsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2xELFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLEVBQ0YsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUN2QjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUVJLGlCQUFpQixDQUFDLFVBQWlCO1FBQ3RDLHNFQUFzRTtRQUN0RSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQzs7c0hBaEVRLHlCQUF5QixrQkEwQnRCLE9BQU87MEdBMUJWLHlCQUF5Qix1SkNmdEMsMHBGQXlEQTtBRG1CSTtJQURDLE9BQU87a0VBSVA7QUFoRVEseUJBQXlCO0lBRHJDLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztHQUMzQix5QkFBeUIsQ0FpRXJDO1NBakVZLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNJLG9CQUFvQixtQkFFYix1QkFBdUIsQ0FBQyxNQUFNOzswQkE2QjFDLE1BQU07MkJBQUMsT0FBTzs0R0FyQlosVUFBVTtzQkFEaEIsS0FBSztnQkFZQyxrQkFBa0I7c0JBRHhCLE1BQU07Z0JBOENBLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgU0NfVVJMUywgU2NDYXRlZ29yeSwgU2NGYXZvcml0ZVNlcnZpY2UsIFNjSVVybHMgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFRVSV9JU19NT0JJTEUsIHR1aVB1cmUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINGB0L/QuNGB0LrQsCDQutCw0YLQtdCz0L7RgNC40LkuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtY2F0ZWdvcmllcy1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtY2F0ZWdvcmllcy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbkBVbnRpbERlc3Ryb3koeyBjaGVja1Byb3BlcnRpZXM6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBTY0NhdGVnb3JpZXNMaXN0Q29tcG9uZW50PFQgZXh0ZW5kcyBvYmplY3Q+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhdGVnb3JpZXM6IFRbXSB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGN0YLQvtGCINC60L7QvNC/0L7QvdC10L3RgiDQvdCwINC80L7QsdC40LvRjNC90L7QvCDRg9GB0YLRgNC+0LnRgdGC0LLQtSDQuNC70Lgg0L3QtdGCLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc01vYmlsZTogYm9vbGVhbiA9IGluamVjdChUVUlfSVNfTU9CSUxFKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQsNGC0LXQs9C+0YDQuNGOLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0NhdGVnb3J5RXZlbnQ6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NDYXRlZ29yaWVzTGlzdENvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJscyDQvtCx0YrQtdC60YIg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0LHQsNC30L7QstC+0Lwg0YHQv9C40YHQutC1INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKiBAcGFyYW0gZmF2b3JpdGVTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC60L7RgNC30LjQvdC+0LkuXG4gICAgICogQHBhcmFtIGNkciDQntCx0YrQtdC60YIg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQvtCx0L3QsNGA0YPQttC10L3QuNC10Lwg0LjQt9C80LXQvdC10L3QuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChTQ19VUkxTKSBwcml2YXRlIHJlYWRvbmx5IHVybHM6IFNjSVVybHMsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZmF2b3JpdGVTZXJ2aWNlOiBTY0Zhdm9yaXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7fVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZhdm9yaXRlU2VydmljZS5jYXRlZ29yaWVzJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5jYXRlZ29yaWVzICYmIEJvb2xlYW4odGhpcy5jYXRlZ29yaWVzLmxlbmd0aCkgJiYgJ2lkJyBpbiB0aGlzLmNhdGVnb3JpZXNbMF0pLFxuICAgICAgICAgICAgICAgIHRhcCgoY2F0ZWdvcmllcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5jYXRlZ29yaWVzIGFzIFNjQ2F0ZWdvcnlbXSk/LmZvckVhY2goY2F0ZWdvcnkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkuaXNGYXZvcml0ZSA9IGNhdGVnb3JpZXMuZmluZEluZGV4KGl0ZW0gPT4gY2F0ZWdvcnkuaWQgPT09IGl0ZW0uaWQpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZHIubWFya0ZvckNoZWNrKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YPRgtGMINC00L4g0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQvdCwINGB0LXRgNCy0LXRgNC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIGltZ1BhdGgg0L/Rg9GC0YwsINCz0LTQtSDRhdGA0LDQvdC40YLRgdGPINC40LfQvtCx0YDQsNC20LXQvdC40LUuXG4gICAgICovXG4gICAgcHVibGljIGdldENhdGVnb3J5SW1hZ2UoaW1nUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwgKyAnLycgKyBpbWdQYXRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQvtCy0LXRgNGP0LXRgiDQvdCw0LvQuNGH0LjQtSDRhdC+0YLRjyDQsdGLINC+0LTQvdC+0LPQviDQuNC30L7QsdGA0LDQttC10L3QuNGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3JpZXMg0KHQv9C40YHQvtC6INC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBAdHVpUHVyZVxuICAgIHB1YmxpYyBjaGVja0ltYWdlc0V4aXN0cyhjYXRlZ29yaWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIHJldHVybiBjYXRlZ29yaWVzLnNvbWUoKGl0ZW0pID0+IGl0ZW0ucHJvcGVydGllcz8uaW1hZ2UpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy1bcmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjFyZW0sMWZyKSldIGdhcC14LTggZ2FwLXktMlwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXRlZ29yaWVzOyBlbHNlIGNhdGVnb3JpZXNTa2VsZXRvblwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiAkYW55KGNhdGVnb3JpZXMpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAgZmxleCBoLTExIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXhsIGJnLXR1aS1iYXNlLTAyIHB4LTMgcHktMS41IHRleHQtbGVmdCByaW5nLXR1aS1wcmltYXJ5IGR1cmF0aW9uLTE1MCBob3Zlci1ob3Zlcjpob3ZlcjpyaW5nLTIgaG92ZXItbm9uZTphY3RpdmU6cmluZy0yXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGlja0NhdGVnb3J5RXZlbnQuZW1pdChpdGVtKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ucHJvcGVydGllcz8uaW1hZ2UgYXMgaW1hZ2VcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0Q2F0ZWdvcnlJbWFnZShpbWFnZSlcIlxuICAgICAgICAgICAgICAgIFthbHRdPVwiaXRlbS5uYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNpemUtOCByb3VuZGVkIGJnLXR1aS1iYXNlLTAzIG9iamVjdC1jb3ZlclwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8dHVpLXN2Z1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0ucHJvcGVydGllcz8uaW1hZ2UgJiYgY2hlY2tJbWFnZXNFeGlzdHMoY2F0ZWdvcmllcylcIlxuICAgICAgICAgICAgICAgIHNyYz1cInR1aUljb25DYW1lcmFPZmZMYXJnZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCIhaC04ICF3LTggcm91bmRlZCBiZy10dWktYmFzZS0wMyB0ZXh0LXR1aS1iYXNlLTA1XCJcbiAgICAgICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBncm93IGZsZXgtY29sIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ3JvdyB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRydW5jYXRlIHRleHQtYmFzZSBmb250LWJvbGRcIj57eyBpdGVtLm5hbWUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uaXNGYXZvcml0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJzY0ljb25GYXZvcml0ZUZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci1hdXRvICF0ZXh0LXNtIHRleHQtdHVpLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICA+PC90dWktc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5tMlByaWNlIGFzIG0yUHJpY2VcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgZm9udC1tZWRpdW0gdGV4dC10dWktdGV4dC0wMlwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDQodGA0LXQtNC90Y/RjyDRgdGC0L7QuNC80L7RgdGC0YwgPHNwYW4gW2lubmVySFRNTF09XCJtMlByaWNlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8dHVpLXN2Z1xuICAgICAgICAgICAgICAgIHNyYz1cInR1aUljb25DaGV2cm9uUmlnaHRMYXJnZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkdXJhdGlvbi0xNTAgaG92ZXItaG92ZXI6Z3JvdXAtaG92ZXI6dGV4dC10dWktcHJpbWFyeSBob3Zlci1ub25lOmdyb3VwLWFjdGl2ZTp0ZXh0LXR1aS1wcmltYXJ5XCJcbiAgICAgICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2F0ZWdvcmllc1NrZWxldG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgKnR1aVJlcGVhdFRpbWVzPVwibGV0IGluZGV4IG9mIGlzTW9iaWxlID8gMyA6IDZcIlxuICAgICAgICBjbGFzcz1cImdyb3VwIGZsZXggaC0xMSBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMiBweC0zIHB5LTEuNSB0ZXh0LWxlZnQgcmluZy10dWktYmFzZS0wNSBkdXJhdGlvbi0xNTAgaG92ZXItaG92ZXI6aG92ZXI6cmluZy0yIGhvdmVyLW5vbmU6YWN0aXZlOnJpbmctMlwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidHVpLXNrZWxldG9uIHNpemUtOFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidHVpLXNrZWxldG9uIGgtNCBncm93XCI+PC9kaXY+XG4gICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgICBzcmM9XCJ0dWlJY29uQ2hldnJvblJpZ2h0TGFyZ2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0dWktc2tlbGV0b24gZHVyYXRpb24tMTUwIGhvdmVyLWhvdmVyOmdyb3VwLWhvdmVyOnRleHQtdHVpLXByaW1hcnkgaG92ZXItbm9uZTpncm91cC1hY3RpdmU6dGV4dC10dWktcHJpbWFyeVwiXG4gICAgICAgID48L3R1aS1zdmc+XG4gICAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0ZWdvcmllcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL2NhdGVnb3JpZXMtbGlzdC9zYy1jYXRlZ29yaWVzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0ZWdvcmllcy1saXN0L3NjLWNhdGVnb3JpZXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0lBQStJO0FBRS9JLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0ksT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxFQUErRCxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFKLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFFbkM7O0dBRUc7QUFRSSxJQUFNLHlCQUF5QixHQUEvQixNQUFNLHlCQUF5QjtJQWtCbEM7Ozs7Ozs7T0FPRztJQUNILFlBRXFCLElBQWEsRUFFZCxRQUE2QixFQUM1QixlQUFrQyxFQUNsQyxHQUFzQjtRQUp0QixTQUFJLEdBQUosSUFBSSxDQUFTO1FBRWQsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBQ2xDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBekIzQzs7V0FFRztRQUNhLGFBQVEsR0FBWSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFMUQ7O1dBRUc7UUFFSSx1QkFBa0IsR0FBb0IsSUFBSSxZQUFZLEVBQUssQ0FBQztJQWlCaEUsQ0FBQztJQUVKLGtCQUFrQjtJQUNYLFFBQVE7UUFDWCxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVc7YUFDM0IsSUFBSSxDQUNELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDM0YsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDbkQsUUFBUSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6RixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxFQUNGLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FDdkI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCLENBQUMsT0FBZTtRQUNuQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksT0FBTyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7O09BSUc7SUFFSSxpQkFBaUIsQ0FBQyxVQUFpQjtRQUN0QyxzRUFBc0U7UUFDdEUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7O3NIQXRFUSx5QkFBeUIsa0JBMkJ0QixPQUFPLGFBRVAsc0JBQXNCOzBHQTdCekIseUJBQXlCLDBJQUp2QixDQUFDLGtCQUFrQixDQUFDLDBCQ2RuQyx3dUZBNERBO0FEeUJJO0lBREMsT0FBTztrRUFJUDtBQXRFUSx5QkFBeUI7SUFEckMsWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDO0dBQzNCLHlCQUF5QixDQXVFckM7U0F2RVkseUJBQXlCOzJGQUF6Qix5QkFBeUI7a0JBUHJDLFNBQVM7K0JBQ0ksb0JBQW9CLGFBRW5CLENBQUMsa0JBQWtCLENBQUMsbUJBQ2QsdUJBQXVCLENBQUMsTUFBTTs7MEJBOEIxQyxNQUFNOzJCQUFDLE9BQU87OzBCQUVkLE1BQU07MkJBQUMsc0JBQXNCOzRHQXhCM0IsVUFBVTtzQkFEaEIsS0FBSztnQkFZQyxrQkFBa0I7c0JBRHhCLE1BQU07Z0JBb0RBLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksY2xhc3MtbWV0aG9kcy11c2UtdGhpcyxsb2Rhc2gvcHJlZmVyLXNvbWUsbG9kYXNoL3ByZWZlci1sb2Rhc2gtbWV0aG9kLG5vLXBhcmFtLXJlYXNzaWduICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgSVNfUlVOTklOR19PTl9URVJNSU5BTCwgU0NfVVJMUywgU2NDYXRlZ29yeSwgU2NGYXZvcml0ZVNlcnZpY2UsIFNjSVRlcm1pbmFsUHJvdmlkZXIsIFNjSVVybHMsIFRFUk1JTkFMX1BST1ZJREVSUyB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVFVJX0lTX01PQklMRSwgdHVpUHVyZSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YXAgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0YHQv9C40YHQutCwINC60LDRgtC10LPQvtGA0LjQuS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1jYXRlZ29yaWVzLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1jYXRlZ29yaWVzLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1RFUk1JTkFMX1BST1ZJREVSU10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuQFVudGlsRGVzdHJveSh7IGNoZWNrUHJvcGVydGllczogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFNjQ2F0ZWdvcmllc0xpc3RDb21wb25lbnQ8VCBleHRlbmRzIG9iamVjdD4gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQutCw0YLQtdCz0L7RgNC40LkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2F0ZWdvcmllczogVFtdIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INGC0L7Qs9C+LCDQvtGC0L7QsdGA0LDQttCw0LXRgtGB0Y8g0Y3RgtC+0YIg0LrQvtC80L/QvtC90LXQvdGCINC90LAg0LzQvtCx0LjQu9GM0L3QvtC8INGD0YHRgtGA0L7QudGB0YLQstC1INC40LvQuCDQvdC10YIuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGlzTW9iaWxlOiBib29sZWFuID0gaW5qZWN0KFRVSV9JU19NT0JJTEUpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutCw0YLQtdCz0L7RgNC40Y4uXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrQ2F0ZWdvcnlFdmVudDogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0NhdGVnb3JpZXNMaXN0Q29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmxzINC+0LHRitC10LrRgiDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDQsdCw0LfQvtCy0L7QvCDRgdC/0LjRgdC60LUg0YHRgdGL0LvQvtC6INC/0YDQuNC70L7QttC10L3QuNGPLlxuICAgICAqIEBwYXJhbSB0ZXJtaW5hbCDQlNCw0L3QvdGL0LUg0L4g0LfQsNC/0YPRgdC60LUg0L/RgNC40LvQvtC20LXQvdC40Y8g0L3QsCDRgtC10YDQvNC40L3QsNC70LUuXG4gICAgICogQHBhcmFtIGZhdm9yaXRlU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutC+0YDQt9C40L3QvtC5LlxuICAgICAqIEBwYXJhbSBjZHIg0J7QsdGK0LXQutGCINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0L7QsdC90LDRgNGD0LbQtdC90LjQtdC8INC40LfQvNC10L3QtdC90LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoU0NfVVJMUylcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1cmxzOiBTY0lVcmxzLFxuICAgICAgICBASW5qZWN0KElTX1JVTk5JTkdfT05fVEVSTUlOQUwpXG4gICAgICAgIHB1YmxpYyByZWFkb25seSB0ZXJtaW5hbDogU2NJVGVybWluYWxQcm92aWRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmYXZvcml0ZVNlcnZpY2U6IFNjRmF2b3JpdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHt9XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmF2b3JpdGVTZXJ2aWNlLmNhdGVnb3JpZXMkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gISF0aGlzLmNhdGVnb3JpZXMgJiYgdGhpcy5jYXRlZ29yaWVzLmxlbmd0aCA+IDAgJiYgJ2lkJyBpbiB0aGlzLmNhdGVnb3JpZXNbMF0pLFxuICAgICAgICAgICAgICAgIHRhcCgoY2F0ZWdvcmllcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5jYXRlZ29yaWVzIGFzIFNjQ2F0ZWdvcnlbXSkuZm9yRWFjaCgoY2F0ZWdvcnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5LmlzRmF2b3JpdGUgPSBjYXRlZ29yaWVzLmZpbmRJbmRleCgoaXRlbSkgPT4gY2F0ZWdvcnkuaWQgPT09IGl0ZW0uaWQpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L/Rg9GC0Ywg0LTQviDQuNC30L7QsdGA0LDQttC10L3QuNGPINC90LAg0YHQtdGA0LLQtdGA0LUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW1nUGF0aCDQv9GD0YLRjCwg0LPQtNC1INGF0YDQsNC90LjRgtGB0Y8g0LjQt9C+0LHRgNCw0LbQtdC90LjQtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q2F0ZWdvcnlJbWFnZShpbWdQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy51cmxzLmltZ1NlcnZlclVybH0vJHtpbWdQYXRofWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC+0LLQtdGA0Y/QtdGCINC90LDQu9C40YfQuNC1INGF0L7RgtGPINCx0Ysg0L7QtNC90L7Qs9C+INC40LfQvtCx0YDQsNC20LXQvdC40Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcmllcyDQodC/0LjRgdC+0Log0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIEB0dWlQdXJlXG4gICAgcHVibGljIGNoZWNrSW1hZ2VzRXhpc3RzKGNhdGVnb3JpZXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgcmV0dXJuIGNhdGVnb3JpZXMuc29tZSgoaXRlbSkgPT4gaXRlbS5wcm9wZXJ0aWVzPy5pbWFnZSk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIFtuZ0NsYXNzXT1cInsgJyFmbGV4ICFmbGV4LWNvbCc6IHRlcm1pbmFsLmlzUnVubmluZ09uVGVybWluYWwgfVwiXG4gICAgY2xhc3M9XCJncmlkIGdyaWQtY29scy1bcmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjFyZW0sMWZyKSldIGdhcC14LTggZ2FwLXktMlwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhdGVnb3JpZXM7IGVsc2UgY2F0ZWdvcmllc1NrZWxldG9uXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mICRhbnkoY2F0ZWdvcmllcylcIlxuICAgICAgICAgICAgY2xhc3M9XCJncm91cCBmbGV4IGgtMTEgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDIgcHgtMyBweS0xLjUgdGV4dC1sZWZ0IHJpbmctdHVpLXByaW1hcnkgZHVyYXRpb24tMTUwIGhvdmVyLWhvdmVyOmhvdmVyOnJpbmctMiBob3Zlci1ub25lOmFjdGl2ZTpyaW5nLTJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrQ2F0ZWdvcnlFdmVudC5lbWl0KGl0ZW0pXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5wcm9wZXJ0aWVzPy5pbWFnZSBhcyBpbWFnZVwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJnZXRDYXRlZ29yeUltYWdlKGltYWdlKVwiXG4gICAgICAgICAgICAgICAgW2FsdF09XCJpdGVtLm5hbWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2l6ZS04IHJvdW5kZWQgYmctdHVpLWJhc2UtMDMgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXRlbS5wcm9wZXJ0aWVzPy5pbWFnZSAmJiBjaGVja0ltYWdlc0V4aXN0cyhjYXRlZ29yaWVzKVwiXG4gICAgICAgICAgICAgICAgc3JjPVwidHVpSWNvbkNhbWVyYU9mZkxhcmdlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIiFoLTggIXctOCByb3VuZGVkIGJnLXR1aS1iYXNlLTAzIHRleHQtdHVpLWJhc2UtMDVcIlxuICAgICAgICAgICAgPjwvdHVpLXN2Zz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdyb3cgZmxleC1jb2wgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBncm93IHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidHJ1bmNhdGUgdGV4dC1iYXNlIGZvbnQtYm9sZFwiPnt7IGl0ZW0ubmFtZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pc0Zhdm9yaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInNjSWNvbkZhdm9yaXRlRmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLWF1dG8gIXRleHQtc20gdGV4dC10dWktcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLm0yUHJpY2UgYXMgbTJQcmljZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXR1aS10ZXh0LTAyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgINCh0YDQtdC00L3Rj9GPINGB0YLQvtC40LzQvtGB0YLRjCA8c3BhbiBbaW5uZXJIVE1MXT1cIm0yUHJpY2VcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgICAgICAgc3JjPVwidHVpSWNvbkNoZXZyb25SaWdodExhcmdlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR1cmF0aW9uLTE1MCBob3Zlci1ob3Zlcjpncm91cC1ob3Zlcjp0ZXh0LXR1aS1wcmltYXJ5IGhvdmVyLW5vbmU6Z3JvdXAtYWN0aXZlOnRleHQtdHVpLXByaW1hcnlcIlxuICAgICAgICAgICAgPjwvdHVpLXN2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjYXRlZ29yaWVzU2tlbGV0b24+XG4gICAgPGJ1dHRvblxuICAgICAgICAqdHVpUmVwZWF0VGltZXM9XCJsZXQgaW5kZXggb2YgaXNNb2JpbGUgPyAzIDogNlwiXG4gICAgICAgIGNsYXNzPVwiZ3JvdXAgZmxleCBoLTExIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXhsIGJnLXR1aS1iYXNlLTAyIHB4LTMgcHktMS41IHRleHQtbGVmdCByaW5nLXR1aS1iYXNlLTA1IGR1cmF0aW9uLTE1MCBob3Zlci1ob3Zlcjpob3ZlcjpyaW5nLTIgaG92ZXItbm9uZTphY3RpdmU6cmluZy0yXCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0dWktc2tlbGV0b24gc2l6ZS04XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0dWktc2tlbGV0b24gaC00IGdyb3dcIj48L2Rpdj5cbiAgICAgICAgPHR1aS1zdmdcbiAgICAgICAgICAgIHNyYz1cInR1aUljb25DaGV2cm9uUmlnaHRMYXJnZVwiXG4gICAgICAgICAgICBjbGFzcz1cInR1aS1za2VsZXRvbiBkdXJhdGlvbi0xNTAgaG92ZXItaG92ZXI6Z3JvdXAtaG92ZXI6dGV4dC10dWktcHJpbWFyeSBob3Zlci1ub25lOmdyb3VwLWFjdGl2ZTp0ZXh0LXR1aS1wcmltYXJ5XCJcbiAgICAgICAgPjwvdHVpLXN2Zz5cbiAgICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,3 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/unbound-method,lodash/prefer-lodash-method */
2
+ import { HttpErrorResponse } from '@angular/common/http';
1
3
  import { ChangeDetectionStrategy, Component, Inject, inject } from '@angular/core';
2
4
  import { FormControl, FormGroup, Validators } from '@angular/forms';
3
5
  import { ScISuggestionType, ScUserMetrikaGoalsEnum, } from '@snabcentr/client-core';
@@ -47,17 +49,21 @@ export class ScAddDeliveryAddressDialogComponent {
47
49
  */
48
50
  this.request$ = this.onSubmit$.pipe(tap(() => {
49
51
  tuiMarkControlAsTouchedAndValidate(this.form);
50
- }), filter(() => this.form.valid), map(() => this.form.value), switchMap((value) => this.deliveryAddressService.createDeliveryAddress$(this.convertersService.removeNullRecursive(value)).pipe(catchError((error) => {
51
- const errorResponse = error.error;
52
- for (const key in errorResponse.errors) {
53
- this.form.get(key)?.setErrors({ serverResponse: errorResponse.errors[key] });
54
- }
55
- if (!errorResponse.errors && errorResponse.message) {
56
- this.form.setErrors({ serverResponse: [errorResponse.message] });
57
- }
58
- return of();
59
- }), tap(() => {
52
+ }), filter(() => this.form.valid), map(() => this.form.value), switchMap((value) => this.deliveryAddressService.createDeliveryAddress$(this.convertersService.removeNullRecursive(value)).pipe(tap(() => {
60
53
  this.context.completeWith();
54
+ }), catchError((error) => {
55
+ if (error instanceof HttpErrorResponse) {
56
+ const { errors, message } = error.error;
57
+ if (errors) {
58
+ Object.keys(errors).forEach((key) => {
59
+ this.form.get(key)?.setErrors({ serverResponse: errors[key] });
60
+ });
61
+ }
62
+ else if (message) {
63
+ this.form.setErrors({ serverResponse: [message] });
64
+ }
65
+ }
66
+ return of({});
61
67
  }), startWith(null))), share());
62
68
  /**
63
69
  * {@link Observable} изменения состояния загрузки данных.
@@ -92,4 +98,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
92
98
  type: Inject,
93
99
  args: [POLYMORPHEUS_CONTEXT]
94
100
  }] }, { type: i1.ScConvertersService }]; } });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9kZWxpdmVyeS1hZGRyZXNzL2FkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy9zYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2RlbGl2ZXJ5LWFkZHJlc3MvYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nL3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFLSCxpQkFBaUIsRUFDakIsc0JBQXNCLEdBRXpCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBRTFHOzs7O0dBSUc7QUFNSCxNQUFNLE9BQU8sbUNBQW1DO0lBbUU1Qzs7Ozs7OztPQU9HO0lBQ0gsWUFDcUIsc0JBQWdELEVBQ2hELGtCQUF3QyxFQUNYLE9BQXFDLEVBQ2xFLGlCQUFzQztR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QyxDQUFDO0lBZUEsQ0FBQztJQUVKLGtCQUFrQjtJQUNYLGVBQWU7UUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDO1lBQ3pDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxpQ0FBaUM7U0FDbkUsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7Z0lBdkZRLG1DQUFtQyw4RkE4RWhDLG9CQUFvQjtvSEE5RXZCLG1DQUFtQyxzRUM5QmhELG1vSEEwRkE7MkZENURhLG1DQUFtQztrQkFML0MsU0FBUzsrQkFDSSxnQ0FBZ0MsbUJBRXpCLHVCQUF1QixDQUFDLE1BQU07OzBCQWdGMUMsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByeGpzL25vLWltcGxpY2l0LWFueS1jYXRjaCxndWFyZC1mb3ItaW4sbm8tcmVzdHJpY3RlZC1zeW50YXgsQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbixAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgKi9cblxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgU2NDb252ZXJ0ZXJzU2VydmljZSxcbiAgICBTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UsXG4gICAgU2NJRGVsaXZlcnlBZGRyZXNzLFxuICAgIFNjSURlbGl2ZXJ5QWRkcmVzc09uRGF0YUNyZWF0ZSxcbiAgICBTY0lTdWdnZXN0aW9uVHlwZSxcbiAgICBTY1VzZXJNZXRyaWthR29hbHNFbnVtLFxuICAgIFNjVXNlck1ldHJpa2FTZXJ2aWNlLFxufSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFRVSV9JU19NT0JJTEUsIHR1aU1hcmtDb250cm9sQXNUb3VjaGVkQW5kVmFsaWRhdGUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBQT0xZTU9SUEhFVVNfQ09OVEVYVCB9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBBcGlFcnJvclJlc3BvbnNlIH0gZnJvbSAncHJvamVjdHMvY2xpZW50LXVpL2F1dGgnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQtNC+0LHQsNCy0LvQtdC90LjRjyDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuC5cbiAqXG4gKiBUT0RPOiBUQVNLWzg4MTNdINCU0L7QsdCw0LLQuNGC0Ywg0LrQsNGA0YLRgywg0Lgg0L/QvtCy0LXQtNC10L3QuNC1INCy0YvQsdC+0YDQsCDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuCDRh9C10YDQtdC3INC60LDRgNGC0YMuINCf0YDQuCDRjdGC0L7QvCDQstGL0L3QtdGB0YLQuCDRhNC+0YDQvNGDINCyINC+0YLQtNC10LvRjNC90YvQuSDQutC+0LzQv9C+0L3QtdC90YIgQWRkRGVsaXZlcnlBZGRyZXNzRm9ybSDQuNC70Lggc3VibWl0INC70L7Qs9C40LrRgyDQsiDQtNC40YDQtdC60YLQuNCy0YMuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NBZGREZWxpdmVyeUFkZHJlc3NEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGN0YLQvtGCINC60L7QvNC/0L7QvdC10L3RgiDQvdCwINC80L7QsdC40LvRjNC90L7QvCDRg9GB0YLRgNC+0LnRgdGC0LLQtSDQuNC70Lgg0L3QtdGCLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc01vYmlsZTogYm9vbGVhbiA9IGluamVjdChUVUlfSVNfTU9CSUxFKTtcblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10YfQuNGB0LvQtdC90LjQtSDRgtC40L/QvtCyINC/0L7QtNGB0LrQsNC30L7Qui5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VnZ2VzdGlvblR5cGU6IHR5cGVvZiBTY0lTdWdnZXN0aW9uVHlwZSA9IFNjSVN1Z2dlc3Rpb25UeXBlO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TdWJtaXQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQtNCw0L3QvdGL0YUg0LTQvtCx0LDQstC70LXQvdC40Y8g0LDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdCQ6IE9ic2VydmFibGU8U2NJRGVsaXZlcnlBZGRyZXNzIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSB0aGlzLm9uU3VibWl0JC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgdHVpTWFya0NvbnRyb2xBc1RvdWNoZWRBbmRWYWxpZGF0ZSh0aGlzLmZvcm0pO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZm9ybS52YWxpZCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmZvcm0udmFsdWUgYXMgU2NJRGVsaXZlcnlBZGRyZXNzT25EYXRhQ3JlYXRlKSxcbiAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzU2VydmljZS5jcmVhdGVEZWxpdmVyeUFkZHJlc3MkKHRoaXMuY29udmVydGVyc1NlcnZpY2UucmVtb3ZlTnVsbFJlY3Vyc2l2ZTxTY0lEZWxpdmVyeUFkZHJlc3NPbkRhdGFDcmVhdGU+KHZhbHVlKSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IGVycm9yLmVycm9yIGFzIEFwaUVycm9yUmVzcG9uc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXJyb3JSZXNwb25zZS5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoa2V5KT8uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IGVycm9yUmVzcG9uc2UuZXJyb3JzW2tleV0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVycm9yUmVzcG9uc2UuZXJyb3JzICYmIGVycm9yUmVzcG9uc2UubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBbZXJyb3JSZXNwb25zZS5tZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5jb21wbGV0ZVdpdGgoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgc2hhcmUoKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LPRgNGD0LfQutC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnJlcXVlc3QkLnBpcGUobWFwKChkYXRhKSA9PiBkYXRhID09PSBudWxsKSk7XG5cbiAgICAvKipcbiAgICAgKiDQpNC+0YDQvNCwINC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINCw0LTRgNC10YHQsCDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIGFkZHJlc3M6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgY29udGFjdDogbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICBwaG9uZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMildKSxcbiAgICAgICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5lbWFpbCksXG4gICAgICAgICAgICBwb3NpdGlvbjogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpLFxuICAgICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NBZGREZWxpdmVyeUFkZHJlc3NEaWFsb2dDb21wb25lbnR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlbGl2ZXJ5QWRkcmVzc1NlcnZpY2Ug0KHQtdGA0LLQuNGBINGA0LDQsdC+0YLRiyDRgSDQsNC00YDQtdGB0LDQvNC4INC00L7RgdGC0LDQstC60LguXG4gICAgICogQHBhcmFtIHVzZXJNZXRyaWthU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGB0LHQvtGA0LAg0LzQtdGC0YDQuNC6INC+INC00LXQudGB0YLQstC40Y/RhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuS5cbiAgICAgKiBAcGFyYW0gY29udGV4dCDQmtC+0L3RgtC10LrRgdGCINC00LjQsNC70L7Qs9C+0LLQvtCz0L4g0L7QutC90LAsINCyINC60L7RgtC+0YDQvtC8INC+0YLQutGA0YvRgiDQutC+0LzQv9C+0L3QtdC90YIuXG4gICAgICogQHBhcmFtIGNvbnZlcnRlcnNTZXJ2aWNlINCh0LXRgNCy0LjRgSDQutC+0L3QstC10YDRgtCw0YbQuNC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGVsaXZlcnlBZGRyZXNzU2VydmljZTogU2NEZWxpdmVyeUFkZHJlc3NTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJNZXRyaWthU2VydmljZTogU2NVc2VyTWV0cmlrYVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoUE9MWU1PUlBIRVVTX0NPTlRFWFQpIHB1YmxpYyByZWFkb25seSBjb250ZXh0OiBUdWlEaWFsb2dDb250ZXh0PHZvaWQsIHZvaWQ+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlOiBTY0NvbnZlcnRlcnNTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqIEBpbmhlcml0ZG9jICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLnVzZXJQcm9maWxlRGVsaXZlcnlBZGRyZXNzQWRkU2hvdyxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGZvcm1cbiAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCQubmV4dCgpXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIlxuPlxuICAgIDxsYWJlbCB0dWlMYWJlbD1cItCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFwiPlxuICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIj5cbiAgICAgICAgICAgINCQ0LTRgNC10YEg0LTQvtGB0YLQsNCy0LrQuFxuICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJzdWdnZXN0aW9uVHlwZS5hZGRyZXNzXCJcbiAgICAgICAgICAgID48L3NjLXN1Z2dlc3Rpb24tZmllbGQ+XG4gICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgID48L3R1aS1lcnJvcj5cbiAgICA8L2xhYmVsPlxuICAgIDxkaXZcbiAgICAgICAgZm9ybUdyb3VwTmFtZT1cImNvbnRhY3RcIlxuICAgICAgICBjbGFzcz1cImZsZXggZ3JvdyBmbGV4LWNvbCBnYXAtMlwiXG4gICAgPlxuICAgICAgICA8cCBjbGFzcz1cInctZnVsbCBmb250LWJvbGRcIj7QmtC+0L3RgtCw0LrRgtC90L7QtSDQu9C40YbQvjo8L3A+XG4gICAgICAgIDxsYWJlbCB0dWlMYWJlbD1cItCkLtCYLtCeLlwiPlxuICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAg0KQu0Jgu0J4uXG4gICAgICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmZpb1wiXG4gICAgICAgICAgICAgICAgPjwvc2Mtc3VnZ2VzdGlvbi1maWVsZD5cbiAgICAgICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCB0dWlMYWJlbD1cItCi0LXQu9C10YTQvtC9XCI+XG4gICAgICAgICAgICA8dHVpLWlucHV0LXBob25lIGZvcm1Db250cm9sTmFtZT1cInBob25lXCI+INCi0LXQu9C10YTQvtC9IDwvdHVpLWlucHV0LXBob25lPlxuICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBob25lXCJcbiAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgPjwvdHVpLWVycm9yPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8bGFiZWwgdHVpTGFiZWw9XCLQkNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRi1wiPlxuICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0dWlUZXh0ZmllbGRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmVtYWlsXCJcbiAgICAgICAgICAgICAgICA+PC9zYy1zdWdnZXN0aW9uLWZpZWxkPlxuICAgICAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCB0dWlMYWJlbD1cItCU0L7Qu9C20L3QvtGB0YLRjFwiPlxuICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwb3NpdGlvblwiPiDQlNC+0LvQttC90L7RgdGC0YwgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicG9zaXRpb25cIlxuICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgZ2FwLThcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiY29udGV4dC4kaW1wbGljaXQuY29tcGxldGUoKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHR1aU1vZGU9XCJvbkxpZ2h0XCJcbiAgICAgICAgICAgIFtpY29uXT1cImlzTW9iaWxlID8gJ3R1aUljb25YJyA6ICd0dWlJY29uWExhcmdlJ1wiXG4gICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0J7RgtC80LXQvdCwXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIFtpY29uXT1cImlzTW9iaWxlID8gJ3R1aUljb25TYXZlJyA6ICd0dWlJY29uU2F2ZUxhcmdlJ1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cIiEhKGxvYWRpbmckIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQlNC+0LHQsNCy0LjRgtGMXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9mb3JtPlxuIl19
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9kZWxpdmVyeS1hZGRyZXNzL2FkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy9zYy1hZGQtZGVsaXZlcnktYWRkcmVzcy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2RlbGl2ZXJ5LWFkZHJlc3MvYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nL3NjLWFkZC1kZWxpdmVyeS1hZGRyZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrRkFBa0Y7QUFFbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBS0gsaUJBQWlCLEVBQ2pCLHNCQUFzQixHQUV6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQUUxRzs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLG1DQUFtQztJQXFFNUM7Ozs7Ozs7T0FP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QUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVGLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUM7Z0JBQzdELFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBZ0IsSUFBSSxDQUFDO2FBQ2pELENBQUM7U0FDTCxDQUFDLENBQUM7SUFlQSxDQUFDO0lBRUosa0JBQWtCO0lBQ1gsZUFBZTtRQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7WUFDekMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLGlDQUFpQztTQUNuRSxDQUFDLENBQUM7SUFDUCxDQUFDOztnSUF6RlEsbUNBQW1DLDhGQWdGaEMsb0JBQW9CO29IQWhGdkIsbUNBQW1DLHNFQzlCaEQsbW9IQTBGQTsyRkQ1RGEsbUNBQW1DO2tCQUwvQyxTQUFTOytCQUNJLGdDQUFnQyxtQkFFekIsdUJBQXVCLENBQUMsTUFBTTs7MEJBa0YxQyxNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCxsb2Rhc2gvcHJlZmVyLWxvZGFzaC1tZXRob2QgKi9cblxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgU2NDb252ZXJ0ZXJzU2VydmljZSxcbiAgICBTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UsXG4gICAgU2NJRGVsaXZlcnlBZGRyZXNzLFxuICAgIFNjSURlbGl2ZXJ5QWRkcmVzc09uRGF0YUNyZWF0ZSxcbiAgICBTY0lTdWdnZXN0aW9uVHlwZSxcbiAgICBTY1VzZXJNZXRyaWthR29hbHNFbnVtLFxuICAgIFNjVXNlck1ldHJpa2FTZXJ2aWNlLFxufSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFRVSV9JU19NT0JJTEUsIHR1aU1hcmtDb250cm9sQXNUb3VjaGVkQW5kVmFsaWRhdGUgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBQT0xZTU9SUEhFVVNfQ09OVEVYVCB9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBBcGlFcnJvclJlc3BvbnNlIH0gZnJvbSAncHJvamVjdHMvY2xpZW50LXVpL2F1dGgnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQtNC+0LHQsNCy0LvQtdC90LjRjyDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuC5cbiAqXG4gKiBUT0RPOiBUQVNLWzg4MTNdINCU0L7QsdCw0LLQuNGC0Ywg0LrQsNGA0YLRgywg0Lgg0L/QvtCy0LXQtNC10L3QuNC1INCy0YvQsdC+0YDQsCDQsNC00YDQtdGB0LAg0LTQvtGB0YLQsNCy0LrQuCDRh9C10YDQtdC3INC60LDRgNGC0YMuINCf0YDQuCDRjdGC0L7QvCDQstGL0L3QtdGB0YLQuCDRhNC+0YDQvNGDINCyINC+0YLQtNC10LvRjNC90YvQuSDQutC+0LzQv9C+0L3QtdC90YIgQWRkRGVsaXZlcnlBZGRyZXNzRm9ybSDQuNC70Lggc3VibWl0INC70L7Qs9C40LrRgyDQsiDQtNC40YDQtdC60YLQuNCy0YMuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtYWRkLWRlbGl2ZXJ5LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NBZGREZWxpdmVyeUFkZHJlc3NEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGN0YLQvtGCINC60L7QvNC/0L7QvdC10L3RgiDQvdCwINC80L7QsdC40LvRjNC90L7QvCDRg9GB0YLRgNC+0LnRgdGC0LLQtSDQuNC70Lgg0L3QtdGCLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpc01vYmlsZTogYm9vbGVhbiA9IGluamVjdChUVUlfSVNfTU9CSUxFKTtcblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10YfQuNGB0LvQtdC90LjQtSDRgtC40L/QvtCyINC/0L7QtNGB0LrQsNC30L7Qui5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VnZ2VzdGlvblR5cGU6IHR5cGVvZiBTY0lTdWdnZXN0aW9uVHlwZSA9IFNjSVN1Z2dlc3Rpb25UeXBlO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb25TdWJtaXQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQtNCw0L3QvdGL0YUg0LTQvtCx0LDQstC70LXQvdC40Y8g0LDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdCQ6IE9ic2VydmFibGU8U2NJRGVsaXZlcnlBZGRyZXNzIHwgbnVsbD4gPSB0aGlzLm9uU3VibWl0JC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgdHVpTWFya0NvbnRyb2xBc1RvdWNoZWRBbmRWYWxpZGF0ZSh0aGlzLmZvcm0pO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZm9ybS52YWxpZCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmZvcm0udmFsdWUgYXMgU2NJRGVsaXZlcnlBZGRyZXNzT25EYXRhQ3JlYXRlKSxcbiAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzU2VydmljZS5jcmVhdGVEZWxpdmVyeUFkZHJlc3MkKHRoaXMuY29udmVydGVyc1NlcnZpY2UucmVtb3ZlTnVsbFJlY3Vyc2l2ZTxTY0lEZWxpdmVyeUFkZHJlc3NPbkRhdGFDcmVhdGU+KHZhbHVlKSkucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuY29tcGxldGVXaXRoKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JzLCBtZXNzYWdlIH0gPSBlcnJvci5lcnJvciBhcyBBcGlFcnJvclJlc3BvbnNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldChrZXkpPy5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogZXJyb3JzW2tleV0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IFttZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7fSBhcyBTY0lEZWxpdmVyeUFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZSgpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQs9GA0YPQt9C60Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMucmVxdWVzdCQucGlwZShtYXAoKGRhdGEpID0+IGRhdGEgPT09IG51bGwpKTtcblxuICAgIC8qKlxuICAgICAqINCk0L7RgNC80LAg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgYWRkcmVzczogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBjb250YWN0OiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgIHBob25lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEyKV0pLFxuICAgICAgICAgICAgZW1haWw6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLmVtYWlsKSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0FkZERlbGl2ZXJ5QWRkcmVzc0RpYWxvZ0NvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVsaXZlcnlBZGRyZXNzU2VydmljZSDQodC10YDQstC40YEg0YDQsNCx0L7RgtGLINGBINCw0LTRgNC10YHQsNC80Lgg0LTQvtGB0YLQsNCy0LrQuC5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqIEBwYXJhbSBjb250ZXh0INCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKiBAcGFyYW0gY29udmVydGVyc1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZWxpdmVyeUFkZHJlc3NTZXJ2aWNlOiBTY0RlbGl2ZXJ5QWRkcmVzc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZSxcbiAgICAgICAgQEluamVjdChQT0xZTU9SUEhFVVNfQ09OVEVYVCkgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ6IFR1aURpYWxvZ0NvbnRleHQ8dm9pZCwgdm9pZD4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29udmVydGVyc1NlcnZpY2U6IFNjQ29udmVydGVyc1NlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKiogQGluaGVyaXRkb2MgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0udXNlclByb2ZpbGVEZWxpdmVyeUFkZHJlc3NBZGRTaG93LFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8Zm9ybVxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgKG5nU3VibWl0KT1cIm9uU3VibWl0JC5uZXh0KClcIlxuICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtM1wiXG4+XG4gICAgPGxhYmVsIHR1aUxhYmVsPVwi0JDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4XCI+XG4gICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiPlxuICAgICAgICAgICAg0JDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4XG4gICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmFkZHJlc3NcIlxuICAgICAgICAgICAgPjwvc2Mtc3VnZ2VzdGlvbi1maWVsZD5cbiAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgPjwvdHVpLWVycm9yPlxuICAgIDwvbGFiZWw+XG4gICAgPGRpdlxuICAgICAgICBmb3JtR3JvdXBOYW1lPVwiY29udGFjdFwiXG4gICAgICAgIGNsYXNzPVwiZmxleCBncm93IGZsZXgtY29sIGdhcC0yXCJcbiAgICA+XG4gICAgICAgIDxwIGNsYXNzPVwidy1mdWxsIGZvbnQtYm9sZFwiPtCa0L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+OjwvcD5cbiAgICAgICAgPGxhYmVsIHR1aUxhYmVsPVwi0KQu0Jgu0J4uXCI+XG4gICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICDQpC7QmC7Qni5cbiAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZmlvXCJcbiAgICAgICAgICAgICAgICA+PC9zYy1zdWdnZXN0aW9uLWZpZWxkPlxuICAgICAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgID48L3R1aS1lcnJvcj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIHR1aUxhYmVsPVwi0KLQtdC70LXRhNC+0L1cIj5cbiAgICAgICAgICAgIDx0dWktaW5wdXQtcGhvbmUgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIj4g0KLQtdC70LXRhNC+0L0gPC90dWktaW5wdXQtcGhvbmU+XG4gICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIlxuICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICA+PC90dWktZXJyb3I+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCB0dWlMYWJlbD1cItCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXCI+XG4gICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAg0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YtcbiAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZW1haWxcIlxuICAgICAgICAgICAgICAgID48L3NjLXN1Z2dlc3Rpb24tZmllbGQ+XG4gICAgICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgID48L3R1aS1lcnJvcj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIHR1aUxhYmVsPVwi0JTQvtC70LbQvdC+0YHRgtGMXCI+XG4gICAgICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cInBvc2l0aW9uXCI+INCU0L7Qu9C20L3QvtGB0YLRjCA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgID48L3R1aS1lcnJvcj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBnYXAtOFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJjb250ZXh0LiRpbXBsaWNpdC5jb21wbGV0ZSgpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdHVpTW9kZT1cIm9uTGlnaHRcIlxuICAgICAgICAgICAgW2ljb25dPVwiaXNNb2JpbGUgPyAndHVpSWNvblgnIDogJ3R1aUljb25YTGFyZ2UnXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQntGC0LzQtdC90LBcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgW2ljb25dPVwiaXNNb2JpbGUgPyAndHVpSWNvblNhdmUnIDogJ3R1aUljb25TYXZlTGFyZ2UnXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwiISEobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCU0L7QsdCw0LLQuNGC0YxcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { EventEmitter, Component, ChangeDetectionStrategy, Inject, Input, Output, SkipSelf, Directive, HostBinding, ContentChild, ViewChild, NgModule, Optional, Injectable, ElementRef, ContentChildren, HostListener, ChangeDetectorRef, Self, inject, InjectionToken, forwardRef } from '@angular/core';
3
3
  import * as i1 from '@snabcentr/client-core';
4
- import { ScUserMetrikaGoalsEnum, ScISuggestionType, ScOpfList, SC_URLS, SC_PATH_IMAGE_NOT_FOUND, ScWarehouseService, ScAuthService, SEARCH_TERM, ScImageHelper, SEARCH_TERM_PROVIDERS, ScCatalogService, ScCartService, ScIconTypesEnum, ScUserService } from '@snabcentr/client-core';
4
+ import { ScUserMetrikaGoalsEnum, ScISuggestionType, ScOpfList, SC_URLS, SC_PATH_IMAGE_NOT_FOUND, IS_RUNNING_ON_TERMINAL, TERMINAL_PROVIDERS, ScWarehouseService, ScAuthService, SEARCH_TERM, ScImageHelper, SEARCH_TERM_PROVIDERS, ScCatalogService, ScCartService, ScIconTypesEnum, ScUserService } from '@snabcentr/client-core';
5
5
  import * as i5 from 'rxjs';
6
6
  import { Subject, map, filter, switchMap, tap, catchError, of, finalize, startWith, share, timer, scan, takeWhile, endWith, distinctUntilChanged, combineLatest, debounceTime, throwError, shareReplay, interval, takeUntil, skip, merge } from 'rxjs';
7
7
  import * as i2 from '@angular/common';
@@ -2969,11 +2969,13 @@ let ScCategoriesListComponent = class ScCategoriesListComponent {
2969
2969
  * Инициализирует экземпляр класса {@link ScCategoriesListComponent}.
2970
2970
  *
2971
2971
  * @param urls объект информации о базовом списке ссылок приложения.
2972
+ * @param terminal Данные о запуске приложения на терминале.
2972
2973
  * @param favoriteService Сервис для работы с корзиной.
2973
2974
  * @param cdr Объект для работы с обнаружением изменений.
2974
2975
  */
2975
- constructor(urls, favoriteService, cdr) {
2976
+ constructor(urls, terminal, favoriteService, cdr) {
2976
2977
  this.urls = urls;
2978
+ this.terminal = terminal;
2977
2979
  this.favoriteService = favoriteService;
2978
2980
  this.cdr = cdr;
2979
2981
  /**
@@ -2988,13 +2990,14 @@ let ScCategoriesListComponent = class ScCategoriesListComponent {
2988
2990
  /** @inheritDoc */
2989
2991
  ngOnInit() {
2990
2992
  this.favoriteService.categories$
2991
- .pipe(filter(() => !!this.categories && Boolean(this.categories.length) && 'id' in this.categories[0]), tap((categories) => {
2992
- var _a;
2993
- (_a = this.categories) === null || _a === void 0 ? void 0 : _a.forEach(category => {
2994
- category.isFavorite = categories.findIndex(item => category.id === item.id) !== -1;
2993
+ .pipe(filter(() => !!this.categories && this.categories.length > 0 && 'id' in this.categories[0]), tap((categories) => {
2994
+ this.categories.forEach((category) => {
2995
+ category.isFavorite = categories.findIndex((item) => category.id === item.id) !== -1;
2995
2996
  });
2996
2997
  }), untilDestroyed(this))
2997
- .subscribe(() => this.cdr.markForCheck());
2998
+ .subscribe(() => {
2999
+ this.cdr.markForCheck();
3000
+ });
2998
3001
  }
2999
3002
  /**
3000
3003
  * Возвращает путь до изображения на сервере.
@@ -3002,7 +3005,7 @@ let ScCategoriesListComponent = class ScCategoriesListComponent {
3002
3005
  * @param imgPath путь, где хранится изображение.
3003
3006
  */
3004
3007
  getCategoryImage(imgPath) {
3005
- return this.urls.imgServerUrl + '/' + imgPath;
3008
+ return `${this.urls.imgServerUrl}/${imgPath}`;
3006
3009
  }
3007
3010
  /**
3008
3011
  * Проверяет наличие хотя бы одного изображения.
@@ -3014,8 +3017,8 @@ let ScCategoriesListComponent = class ScCategoriesListComponent {
3014
3017
  return categories.some((item) => { var _a; return (_a = item.properties) === null || _a === void 0 ? void 0 : _a.image; });
3015
3018
  }
3016
3019
  };
3017
- ScCategoriesListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoriesListComponent, deps: [{ token: SC_URLS }, { token: i1.ScFavoriteService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3018
- ScCategoriesListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCategoriesListComponent, selector: "sc-categories-list", inputs: { categories: "categories" }, outputs: { clickCategoryEvent: "clickCategoryEvent" }, ngImport: i0, template: "<div class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\">\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-svg\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n src=\"tuiIconCameraOffLarge\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-svg>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-svg\n *ngIf=\"item.isFavorite\"\n src=\"scIconFavoriteFill\"\n class=\"mr-auto !text-sm text-tui-primary\"\n ></tui-svg>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i6.TuiRepeatTimesDirective, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3020
+ ScCategoriesListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoriesListComponent, deps: [{ token: SC_URLS }, { token: IS_RUNNING_ON_TERMINAL }, { token: i1.ScFavoriteService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3021
+ ScCategoriesListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCategoriesListComponent, selector: "sc-categories-list", inputs: { categories: "categories" }, outputs: { clickCategoryEvent: "clickCategoryEvent" }, providers: [TERMINAL_PROVIDERS], ngImport: i0, template: "<div\n [ngClass]=\"{ '!flex !flex-col': terminal.isRunningOnTerminal }\"\n class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\"\n>\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-svg\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n src=\"tuiIconCameraOffLarge\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-svg>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-svg\n *ngIf=\"item.isFavorite\"\n src=\"scIconFavoriteFill\"\n class=\"mr-auto !text-sm text-tui-primary\"\n ></tui-svg>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i6.TuiRepeatTimesDirective, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3019
3022
  __decorate([
3020
3023
  tuiPure
3021
3024
  ], ScCategoriesListComponent.prototype, "checkImagesExists", null);
@@ -3024,11 +3027,14 @@ ScCategoriesListComponent = __decorate([
3024
3027
  ], ScCategoriesListComponent);
3025
3028
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCategoriesListComponent, decorators: [{
3026
3029
  type: Component,
3027
- args: [{ selector: 'sc-categories-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\">\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-svg\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n src=\"tuiIconCameraOffLarge\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-svg>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-svg\n *ngIf=\"item.isFavorite\"\n src=\"scIconFavoriteFill\"\n class=\"mr-auto !text-sm text-tui-primary\"\n ></tui-svg>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n</ng-template>\n" }]
3030
+ args: [{ selector: 'sc-categories-list', providers: [TERMINAL_PROVIDERS], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [ngClass]=\"{ '!flex !flex-col': terminal.isRunningOnTerminal }\"\n class=\"grid grid-cols-[repeat(auto-fill,minmax(21rem,1fr))] gap-x-8 gap-y-2\"\n>\n <ng-container *ngIf=\"categories; else categoriesSkeleton\">\n <button\n *ngFor=\"let item of $any(categories)\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-primary duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n (click)=\"clickCategoryEvent.emit(item)\"\n >\n <img\n *ngIf=\"item.properties?.image as image\"\n [src]=\"getCategoryImage(image)\"\n [alt]=\"item.name\"\n class=\"size-8 rounded bg-tui-base-03 object-cover\"\n />\n\n <tui-svg\n *ngIf=\"!item.properties?.image && checkImagesExists(categories)\"\n src=\"tuiIconCameraOffLarge\"\n class=\"!h-8 !w-8 rounded bg-tui-base-03 text-tui-base-05\"\n ></tui-svg>\n <div class=\"flex grow flex-col truncate\">\n <div class=\"flex grow truncate\">\n <p class=\"truncate text-base font-bold\">{{ item.name }}</p>\n <tui-svg\n *ngIf=\"item.isFavorite\"\n src=\"scIconFavoriteFill\"\n class=\"mr-auto !text-sm text-tui-primary\"\n ></tui-svg>\n </div>\n <p\n *ngIf=\"item.m2Price as m2Price\"\n class=\"text-xs font-medium text-tui-text-02\"\n >\n \u0421\u0440\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C <span [innerHTML]=\"m2Price\"></span>\n </p>\n </div>\n\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n </ng-container>\n</div>\n\n<ng-template #categoriesSkeleton>\n <button\n *tuiRepeatTimes=\"let index of isMobile ? 3 : 6\"\n class=\"group flex h-11 items-center gap-2 rounded-xl bg-tui-base-02 px-3 py-1.5 text-left ring-tui-base-05 duration-150 hover-hover:hover:ring-2 hover-none:active:ring-2\"\n >\n <div class=\"tui-skeleton size-8\"></div>\n <div class=\"tui-skeleton h-4 grow\"></div>\n <tui-svg\n src=\"tuiIconChevronRightLarge\"\n class=\"tui-skeleton duration-150 hover-hover:group-hover:text-tui-primary hover-none:group-active:text-tui-primary\"\n ></tui-svg>\n </button>\n</ng-template>\n" }]
3028
3031
  }], ctorParameters: function () {
3029
3032
  return [{ type: undefined, decorators: [{
3030
3033
  type: Inject,
3031
3034
  args: [SC_URLS]
3035
+ }] }, { type: undefined, decorators: [{
3036
+ type: Inject,
3037
+ args: [IS_RUNNING_ON_TERMINAL]
3032
3038
  }] }, { type: i1.ScFavoriteService }, { type: i0.ChangeDetectorRef }];
3033
3039
  }, propDecorators: { categories: [{
3034
3040
  type: Input
@@ -3835,6 +3841,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
3835
3841
  }]
3836
3842
  }] });
3837
3843
 
3844
+ /* eslint-disable @typescript-eslint/unbound-method,lodash/prefer-lodash-method */
3838
3845
  /**
3839
3846
  * Компонент добавления адреса доставки.
3840
3847
  *
@@ -3871,18 +3878,22 @@ class ScAddDeliveryAddressDialogComponent {
3871
3878
  */
3872
3879
  this.request$ = this.onSubmit$.pipe(tap(() => {
3873
3880
  tuiMarkControlAsTouchedAndValidate(this.form);
3874
- }), filter(() => this.form.valid), map(() => this.form.value), switchMap((value) => this.deliveryAddressService.createDeliveryAddress$(this.convertersService.removeNullRecursive(value)).pipe(catchError((error) => {
3875
- var _a;
3876
- const errorResponse = error.error;
3877
- for (const key in errorResponse.errors) {
3878
- (_a = this.form.get(key)) === null || _a === void 0 ? void 0 : _a.setErrors({ serverResponse: errorResponse.errors[key] });
3879
- }
3880
- if (!errorResponse.errors && errorResponse.message) {
3881
- this.form.setErrors({ serverResponse: [errorResponse.message] });
3882
- }
3883
- return of();
3884
- }), tap(() => {
3881
+ }), filter(() => this.form.valid), map(() => this.form.value), switchMap((value) => this.deliveryAddressService.createDeliveryAddress$(this.convertersService.removeNullRecursive(value)).pipe(tap(() => {
3885
3882
  this.context.completeWith();
3883
+ }), catchError((error) => {
3884
+ if (error instanceof HttpErrorResponse) {
3885
+ const { errors, message } = error.error;
3886
+ if (errors) {
3887
+ Object.keys(errors).forEach((key) => {
3888
+ var _a;
3889
+ (_a = this.form.get(key)) === null || _a === void 0 ? void 0 : _a.setErrors({ serverResponse: errors[key] });
3890
+ });
3891
+ }
3892
+ else if (message) {
3893
+ this.form.setErrors({ serverResponse: [message] });
3894
+ }
3895
+ }
3896
+ return of({});
3886
3897
  }), startWith(null))), share());
3887
3898
  /**
3888
3899
  * {@link Observable} изменения состояния загрузки данных.