@snabcentr/client-ui 3.6.0 → 3.6.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, QueryList, TemplateRef } from '@angular/core';
1
+ import { ChangeDetectorRef, ElementRef, EventEmitter, QueryList, TemplateRef } from '@angular/core';
2
2
  import { IntersectionObserverService } from '@ng-web-apis/intersection-observer';
3
3
  import { ScBanner, ScBannerService, ScUserMetrikaService } from '@snabcentr/client-core';
4
4
  import { Observable, Subject } from 'rxjs';
@@ -7,7 +7,7 @@ import * as i0 from "@angular/core";
7
7
  /**
8
8
  * Баннер с прокруткой переданных {@link TemplateRef} элементов, и баннеров локации.
9
9
  */
10
- export declare class ScBannerComponent implements AfterViewInit {
10
+ export declare class ScBannerComponent {
11
11
  private readonly cdr;
12
12
  private readonly bannerService;
13
13
  private readonly entries$;
@@ -19,13 +19,9 @@ export declare class ScBannerComponent implements AfterViewInit {
19
19
  */
20
20
  navigateButton: boolean;
21
21
  /**
22
- * Интервал показа слайдов в миллисекундах.
22
+ * Интервал автоматической смены слайдов в миллисекундах (используйте 0, чтобы отключить автоматическую смену слайда).
23
23
  */
24
- playerInterval: number;
25
- /**
26
- * Признак, что прокрутка выключена.
27
- */
28
- disabled: boolean;
24
+ duration: number;
29
25
  /**
30
26
  * Местоположение баннера.
31
27
  */
@@ -46,14 +42,6 @@ export declare class ScBannerComponent implements AfterViewInit {
46
42
  * Список ссылок на элемент представлений шаблонов.
47
43
  */
48
44
  bannersListRef: QueryList<TemplateRef<any>>;
49
- /**
50
- * Ссылка на {@link HTMLVideoElement} элемента отображения видео.
51
- */
52
- private videoRef;
53
- /**
54
- * Ссылка для автоматического управления уничтожением зависимостей.
55
- */
56
- private destroyRef;
57
45
  /**
58
46
  * Идентификатор текущего баннера.
59
47
  */
@@ -62,10 +50,6 @@ export declare class ScBannerComponent implements AfterViewInit {
62
50
  * {@link Subject} изменения состояния таймера.
63
51
  */
64
52
  readonly toggleTimer$: Subject<boolean>;
65
- /**
66
- * Признак, что необходимо показывать кнопки старта видео баннера.
67
- */
68
- showPlayBtn: boolean;
69
53
  /**
70
54
  * {@link Observable} обновления списка баннеров.
71
55
  */
@@ -74,26 +58,10 @@ export declare class ScBannerComponent implements AfterViewInit {
74
58
  * Список баннеров.
75
59
  */
76
60
  banners?: ScBanner[];
77
- /**
78
- * Свойство, от которого зависит высота `:host` компонента.
79
- */
80
- height: string;
81
- /**
82
- * Свойство, от которого зависит ширина `:host` компонента.
83
- */
84
- width: string;
85
61
  /**
86
62
  * Свойство, от которого зависит соотношение `:host` компонента.
87
63
  */
88
64
  aspectRatio: string;
89
- /**
90
- * Обработчик события mouseenter.
91
- */
92
- private mouseEnterHandler;
93
- /**
94
- * Обработчик события mouseleave.
95
- */
96
- private mouseLeaveHandler;
97
65
  /**
98
66
  * Инициализирует экземпляр класса {@link ScBannerComponent}.
99
67
  *
@@ -109,20 +77,6 @@ export declare class ScBannerComponent implements AfterViewInit {
109
77
  * Свойство, от которого зависит наличие класса `!hidden` у `:host` компонента.
110
78
  */
111
79
  private get isHidden();
112
- /** @inheritDoc */
113
- ngAfterViewInit(): void;
114
- /**
115
- * Переключает на предыдущий баннер.
116
- */
117
- onPreviousBanner(): void;
118
- /**
119
- * Переключает на следующий баннер.
120
- */
121
- onNextBanner(): void;
122
- /**
123
- * Переключает на следующий баннер.
124
- */
125
- onEndedVideo(): void;
126
80
  /**
127
81
  * Обработчик нажатия на баннер, генерирующий событие {@link clickBannerImgEvent}.
128
82
  *
@@ -130,5 +84,5 @@ export declare class ScBannerComponent implements AfterViewInit {
130
84
  */
131
85
  onClick(banner: ScBanner): void;
132
86
  static ɵfac: i0.ɵɵFactoryDeclaration<ScBannerComponent, never>;
133
- static ɵcmp: i0.ɵɵComponentDeclaration<ScBannerComponent, "sc-banner", never, { "navigateButton": { "alias": "navigateButton"; "required": false; }; "playerInterval": { "alias": "playerInterval"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "bannerLocation": { "alias": "bannerLocation"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; }, { "loadBannersEvent": "loadBannersEvent"; "clickBannerEvent": "clickBannerEvent"; }, ["bannersListRef"], never, false, never>;
87
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScBannerComponent, "sc-banner", never, { "navigateButton": { "alias": "navigateButton"; "required": false; }; "duration": { "alias": "duration"; "required": false; }; "bannerLocation": { "alias": "bannerLocation"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; }, { "loadBannersEvent": "loadBannersEvent"; "clickBannerEvent": "clickBannerEvent"; }, ["bannersListRef"], never, false, never>;
134
88
  }
@@ -17,12 +17,16 @@ export declare class HoverImageCarouselComponent {
17
17
  */
18
18
  currentIndex: WritableSignal<number>;
19
19
  /**
20
- * Обработчик события mousemove.
20
+ * Обработчик события `mousemove.silent`.
21
21
  *
22
22
  * @param offsetX Отступ курсора мыши по оси X от края {@link HTMLElement}.
23
23
  * @param target Объект {@link HTMLElement} в котором лежат изображения
24
24
  */
25
25
  private onHover;
26
+ /**
27
+ * Обработчик события `mouseleave.silent`.
28
+ */
29
+ private onLeave;
26
30
  static ɵfac: i0.ɵɵFactoryDeclaration<HoverImageCarouselComponent, never>;
27
31
  static ɵcmp: i0.ɵɵComponentDeclaration<HoverImageCarouselComponent, "sc-hover-image-carousel", never, { "images": { "alias": "images"; "required": false; }; "isShowActions": { "alias": "isShowActions"; "required": false; }; }, {}, never, never, true, never>;
28
32
  }
@@ -1,9 +1,7 @@
1
- import { ChangeDetectionStrategy, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, HostBinding, HostListener, Inject, inject, Input, Output, ViewChild, } from '@angular/core';
2
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Inject, Input, Output, } from '@angular/core';
3
2
  import { IntersectionObserverService } from '@ng-web-apis/intersection-observer';
4
3
  import { ScUserMetrikaGoalsEnum } from '@snabcentr/client-core';
5
- import { tuiFadeIn } from '@taiga-ui/core';
6
- import { filter, interval, map, shareReplay, Subject, switchMap, takeUntil, tap } from 'rxjs';
4
+ import { map, shareReplay, Subject, tap } from 'rxjs';
7
5
  import * as i0 from "@angular/core";
8
6
  import * as i1 from "@snabcentr/client-core";
9
7
  import * as i2 from "../helpers";
@@ -39,17 +37,13 @@ export class ScBannerComponent {
39
37
  */
40
38
  this.navigateButton = true;
41
39
  /**
42
- * Интервал показа слайдов в миллисекундах.
40
+ * Интервал автоматической смены слайдов в миллисекундах (используйте 0, чтобы отключить автоматическую смену слайда).
43
41
  */
44
- this.playerInterval = 5000;
45
- /**
46
- * Признак, что прокрутка выключена.
47
- */
48
- this.disabled = false;
42
+ this.duration = 5000;
49
43
  /**
50
44
  * Признак, что компонент должен растягиваться.
51
45
  */
52
- this.resizable = true;
46
+ this.resizable = false;
53
47
  /**
54
48
  * Событие загрузки баннеров с количеством полученных баннеров.
55
49
  */
@@ -58,10 +52,6 @@ export class ScBannerComponent {
58
52
  * Событие нажатия на изображение баннера.
59
53
  */
60
54
  this.clickBannerEvent = new EventEmitter();
61
- /**
62
- * Ссылка для автоматического управления уничтожением зависимостей.
63
- */
64
- this.destroyRef = inject(DestroyRef);
65
55
  /**
66
56
  * Идентификатор текущего баннера.
67
57
  */
@@ -70,23 +60,14 @@ export class ScBannerComponent {
70
60
  * {@link Subject} изменения состояния таймера.
71
61
  */
72
62
  this.toggleTimer$ = new Subject();
73
- /**
74
- * Признак, что необходимо показывать кнопки старта видео баннера.
75
- */
76
- this.showPlayBtn = false;
77
63
  /**
78
64
  * {@link Observable} обновления списка баннеров.
79
65
  */
80
66
  this.banners$ = this.bannerService.banners$.pipe(map((banners) => banners.filter((banner) => banner.location === this.bannerLocation).reverse()), tap((banners) => {
81
67
  if (banners.length > 0) {
82
- if (this.resizable) {
83
- this.width = '100%';
68
+ if (!this.resizable) {
69
+ this.aspectRatio = `${banners[0].width} / ${banners[0].height}`;
84
70
  }
85
- else {
86
- this.height = `${this.pxConverter.pxToRem(banners[0].height)}rem`;
87
- this.width = `${this.pxConverter.pxToRem(banners[0].width)}rem`;
88
- }
89
- this.aspectRatio = `${banners[0].width} / ${banners[0].height}`;
90
71
  this.banners = banners;
91
72
  this.toggleTimer$.next(true);
92
73
  }
@@ -98,30 +79,10 @@ export class ScBannerComponent {
98
79
  * Список баннеров.
99
80
  */
100
81
  this.banners = [];
101
- /**
102
- * Свойство, от которого зависит высота `:host` компонента.
103
- */
104
- this.height = 'auto';
105
- /**
106
- * Свойство, от которого зависит ширина `:host` компонента.
107
- */
108
- this.width = '';
109
82
  /**
110
83
  * Свойство, от которого зависит соотношение `:host` компонента.
111
84
  */
112
85
  this.aspectRatio = '';
113
- /**
114
- * Обработчик события mouseenter.
115
- */
116
- this.mouseEnterHandler = () => {
117
- this.toggleTimer$.next(false);
118
- };
119
- /**
120
- * Обработчик события mouseleave.
121
- */
122
- this.mouseLeaveHandler = () => {
123
- this.toggleTimer$.next(true);
124
- };
125
86
  }
126
87
  /**
127
88
  * Свойство, от которого зависит наличие класса `!hidden` у `:host` компонента.
@@ -129,43 +90,6 @@ export class ScBannerComponent {
129
90
  get isHidden() {
130
91
  return !this.banners || this.bannersListRef.length + this.banners.length === 0;
131
92
  }
132
- /** @inheritDoc */
133
- ngAfterViewInit() {
134
- this.toggleTimer$
135
- .pipe(filter((toggle) => toggle), switchMap(() => interval(this.playerInterval).pipe(takeUntil(this.toggleTimer$))), filter(() => !this.disabled && (this.banners?.[this.currentBannerId]?.mediaType === 'image' || this.showPlayBtn)), takeUntilDestroyed(this.destroyRef))
136
- .subscribe(() => {
137
- this.onNextBanner();
138
- });
139
- // Отслеживание пересечения компонента с экраном пользователя.
140
- // Если баннера не находится в поле видимости пользователя, то он перестаёт переключаться, а видео останавливается.
141
- this.entries$.pipe(map((entries) => entries.find((item) => item.target === this.element.nativeElement))).subscribe((entry) => {
142
- this.toggleTimer$.next(!!entry?.isIntersecting);
143
- });
144
- }
145
- /**
146
- * Переключает на предыдущий баннер.
147
- */
148
- onPreviousBanner() {
149
- const previous = this.currentBannerId - 1;
150
- this.currentBannerId = previous < 0 ? this.bannersListRef.length + (this.banners?.length ?? 0) - 1 : previous;
151
- this.cdr.markForCheck();
152
- }
153
- /**
154
- * Переключает на следующий баннер.
155
- */
156
- onNextBanner() {
157
- const next = this.currentBannerId + 1;
158
- this.currentBannerId = next === this.bannersListRef.length + (this.banners?.length ?? 0) ? 0 : next;
159
- this.cdr.markForCheck();
160
- }
161
- /**
162
- * Переключает на следующий баннер.
163
- */
164
- onEndedVideo() {
165
- this.onNextBanner();
166
- this.toggleTimer$.next(true);
167
- this.showPlayBtn = true;
168
- }
169
93
  /**
170
94
  * Обработчик нажатия на баннер, генерирующий событие {@link clickBannerImgEvent}.
171
95
  *
@@ -183,11 +107,11 @@ export class ScBannerComponent {
183
107
  }
184
108
  }
185
109
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScBannerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ScBannerService }, { token: IntersectionObserverService }, { token: ElementRef }, { token: i2.ScPxConverter }, { token: i1.ScUserMetrikaService }], target: i0.ɵɵFactoryTarget.Component }); }
186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ScBannerComponent, selector: "sc-banner", inputs: { navigateButton: "navigateButton", playerInterval: "playerInterval", disabled: "disabled", bannerLocation: "bannerLocation", resizable: "resizable" }, outputs: { loadBannersEvent: "loadBannersEvent", clickBannerEvent: "clickBannerEvent" }, host: { listeners: { "mouseenter": "mouseEnterHandler()", "mouseleave": "mouseLeaveHandler()" }, properties: { "style.height": "this.height", "style.width": "this.width", "style.aspect-ratio": "this.aspectRatio", "class.!hidden": "this.isHidden" } }, providers: [IntersectionObserverService], queries: [{ propertyName: "bannersListRef", predicate: ["banner"] }], viewQueries: [{ propertyName: "videoRef", first: true, predicate: ["videoPlayer"], descendants: true }], ngImport: i0, template: "<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel\n class=\"size-full overflow-hidden rounded-xl bg-white\"\n [(index)]=\"currentBannerId\"\n >\n <ng-container *ngFor=\"let banner of banners; let index = index\">\n <a\n *tuiItem\n (click)=\"onClick(banner)\"\n [style.aspect-ratio]=\"aspectRatio\"\n [attr.href]=\"banner.url ? banner.url : null\"\n target=\"_blank\"\n [title]=\"banner.title\"\n class=\"relative\"\n >\n <ng-container [ngSwitch]=\"banner.mediaType\">\n <ng-container *ngSwitchCase=\"'video'\">\n <video\n #videoPlayer\n (suspend)=\"showPlayBtn = true\"\n (play)=\"showPlayBtn = false\"\n [src]=\"banner.mediaFile\"\n (ended)=\"onEndedVideo()\"\n (mouseover)=\"videoPlayer.pause()\"\n (mouseout)=\"videoPlayer.play()\"\n class=\"h-full object-cover\"\n muted\n autoplay\n ></video>\n <button\n *ngIf=\"showPlayBtn\"\n tuiIconButton\n [@tuiFadeIn]=\"200\"\n matRipple\n (click)=\"$event.preventDefault(); videoPlayer.play()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"!absolute bottom-4 left-8\"\n >\n <i class=\"icon-refresh text-black\"></i>\n </button>\n </ng-container>\n\n <img\n *ngSwitchCase=\"'image'\"\n [src]=\"banner.mediaFile\"\n alt=\"\u0411\u0430\u043D\u043D\u0435\u0440\"\n class=\"h-full object-cover\"\n />\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div\n *tuiItem\n [style.height]=\"height\"\n [style.width]=\"width\"\n [style.aspect-ratio]=\"aspectRatio\"\n class=\"overflow-hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n</ng-container>\n<div\n *ngIf=\"navigateButton && !disabled && this.banners && this.bannersListRef.length + this.banners.length > 1\"\n tuiTheme=\"light\"\n class=\"flex items-center\"\n>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"onPreviousBanner()\"\n class=\"!absolute left-2\"\n ></button>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"onNextBanner()\"\n class=\"!absolute right-2\"\n ></button>\n</div>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: i5.TuiItem, selector: "[tuiItem]" }, { kind: "component", type: i6.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange"] }, { kind: "directive", type: i7.TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], animations: [tuiFadeIn], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
110
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ScBannerComponent, selector: "sc-banner", inputs: { navigateButton: "navigateButton", duration: "duration", bannerLocation: "bannerLocation", resizable: "resizable" }, outputs: { loadBannersEvent: "loadBannersEvent", clickBannerEvent: "clickBannerEvent" }, host: { properties: { "style.aspect-ratio": "this.aspectRatio", "class.!hidden": "this.isHidden" } }, providers: [IntersectionObserverService], queries: [{ propertyName: "bannersListRef", predicate: ["banner"] }], ngImport: i0, template: "<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel\n [duration]=\"duration\"\n #carousel\n [attr.resizable]=\"resizable\"\n class=\"size-full overflow-hidden rounded-xl bg-white\"\n [(index)]=\"currentBannerId\"\n >\n <ng-container *ngFor=\"let banner of banners; let index = index\">\n <ng-container [ngSwitch]=\"banner.mediaType\">\n <ng-container *ngSwitchCase=\"'image'\">\n <a\n *tuiItem\n (click)=\"onClick(banner)\"\n target=\"_blank\"\n [title]=\"banner.title\"\n [style.aspect-ratio]=\"aspectRatio\"\n [attr.href]=\"banner.url ? banner.url : null\"\n [style.background-image]=\"'url(' + banner.mediaFile + ')'\"\n class=\"size-full bg-[length:100%_100%]\"\n >\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div\n *tuiItem\n [style.aspect-ratio]=\"aspectRatio\"\n class=\"size-full overflow-hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n\n <div\n *ngIf=\"navigateButton && duration && this.banners && this.bannersListRef.length + this.banners.length > 1\"\n tuiTheme=\"light\"\n class=\"flex items-center\"\n >\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.prev()\"\n class=\"!absolute left-2\"\n ></button>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.next()\"\n class=\"!absolute right-2\"\n ></button>\n </div>\n</ng-container>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}::ng-deep tui-carousel[resizable=true] .t-scroller,::ng-deep tui-carousel[resizable=true] .t-items{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: i5.TuiItem, selector: "[tuiItem]" }, { kind: "component", type: i6.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange"] }, { kind: "directive", type: i7.TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
187
111
  }
188
112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ScBannerComponent, decorators: [{
189
113
  type: Component,
190
- args: [{ selector: 'sc-banner', changeDetection: ChangeDetectionStrategy.OnPush, providers: [IntersectionObserverService], animations: [tuiFadeIn], template: "<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel\n class=\"size-full overflow-hidden rounded-xl bg-white\"\n [(index)]=\"currentBannerId\"\n >\n <ng-container *ngFor=\"let banner of banners; let index = index\">\n <a\n *tuiItem\n (click)=\"onClick(banner)\"\n [style.aspect-ratio]=\"aspectRatio\"\n [attr.href]=\"banner.url ? banner.url : null\"\n target=\"_blank\"\n [title]=\"banner.title\"\n class=\"relative\"\n >\n <ng-container [ngSwitch]=\"banner.mediaType\">\n <ng-container *ngSwitchCase=\"'video'\">\n <video\n #videoPlayer\n (suspend)=\"showPlayBtn = true\"\n (play)=\"showPlayBtn = false\"\n [src]=\"banner.mediaFile\"\n (ended)=\"onEndedVideo()\"\n (mouseover)=\"videoPlayer.pause()\"\n (mouseout)=\"videoPlayer.play()\"\n class=\"h-full object-cover\"\n muted\n autoplay\n ></video>\n <button\n *ngIf=\"showPlayBtn\"\n tuiIconButton\n [@tuiFadeIn]=\"200\"\n matRipple\n (click)=\"$event.preventDefault(); videoPlayer.play()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"!absolute bottom-4 left-8\"\n >\n <i class=\"icon-refresh text-black\"></i>\n </button>\n </ng-container>\n\n <img\n *ngSwitchCase=\"'image'\"\n [src]=\"banner.mediaFile\"\n alt=\"\u0411\u0430\u043D\u043D\u0435\u0440\"\n class=\"h-full object-cover\"\n />\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div\n *tuiItem\n [style.height]=\"height\"\n [style.width]=\"width\"\n [style.aspect-ratio]=\"aspectRatio\"\n class=\"overflow-hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n</ng-container>\n<div\n *ngIf=\"navigateButton && !disabled && this.banners && this.bannersListRef.length + this.banners.length > 1\"\n tuiTheme=\"light\"\n class=\"flex items-center\"\n>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"onPreviousBanner()\"\n class=\"!absolute left-2\"\n ></button>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"onNextBanner()\"\n class=\"!absolute right-2\"\n ></button>\n</div>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}\n"] }]
114
+ args: [{ selector: 'sc-banner', changeDetection: ChangeDetectionStrategy.OnPush, providers: [IntersectionObserverService], template: "<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel\n [duration]=\"duration\"\n #carousel\n [attr.resizable]=\"resizable\"\n class=\"size-full overflow-hidden rounded-xl bg-white\"\n [(index)]=\"currentBannerId\"\n >\n <ng-container *ngFor=\"let banner of banners; let index = index\">\n <ng-container [ngSwitch]=\"banner.mediaType\">\n <ng-container *ngSwitchCase=\"'image'\">\n <a\n *tuiItem\n (click)=\"onClick(banner)\"\n target=\"_blank\"\n [title]=\"banner.title\"\n [style.aspect-ratio]=\"aspectRatio\"\n [attr.href]=\"banner.url ? banner.url : null\"\n [style.background-image]=\"'url(' + banner.mediaFile + ')'\"\n class=\"size-full bg-[length:100%_100%]\"\n >\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div\n *tuiItem\n [style.aspect-ratio]=\"aspectRatio\"\n class=\"size-full overflow-hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n\n <div\n *ngIf=\"navigateButton && duration && this.banners && this.bannersListRef.length + this.banners.length > 1\"\n tuiTheme=\"light\"\n class=\"flex items-center\"\n >\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-left\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.prev()\"\n class=\"!absolute left-2\"\n ></button>\n <button\n tuiIconButton\n iconStart=\"@tui.chevron-right\"\n size=\"m\"\n [style.border-radius.%]=\"100\"\n appearance=\"flat\"\n (click)=\"carousel.next()\"\n class=\"!absolute right-2\"\n ></button>\n </div>\n</ng-container>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}::ng-deep tui-carousel[resizable=true] .t-scroller,::ng-deep tui-carousel[resizable=true] .t-items{width:100%;height:100%}\n"] }]
191
115
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ScBannerService }, { type: i8.IntersectionObserverService, decorators: [{
192
116
  type: Inject,
193
117
  args: [IntersectionObserverService]
@@ -196,9 +120,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
196
120
  args: [ElementRef]
197
121
  }] }, { type: i2.ScPxConverter }, { type: i1.ScUserMetrikaService }], propDecorators: { navigateButton: [{
198
122
  type: Input
199
- }], playerInterval: [{
200
- type: Input
201
- }], disabled: [{
123
+ }], duration: [{
202
124
  type: Input
203
125
  }], bannerLocation: [{
204
126
  type: Input
@@ -211,26 +133,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
211
133
  }], bannersListRef: [{
212
134
  type: ContentChildren,
213
135
  args: ['banner']
214
- }], videoRef: [{
215
- type: ViewChild,
216
- args: ['videoPlayer']
217
- }], height: [{
218
- type: HostBinding,
219
- args: ['style.height']
220
- }], width: [{
221
- type: HostBinding,
222
- args: ['style.width']
223
136
  }], aspectRatio: [{
224
137
  type: HostBinding,
225
138
  args: ['style.aspect-ratio']
226
- }], mouseEnterHandler: [{
227
- type: HostListener,
228
- args: ['mouseenter']
229
- }], mouseLeaveHandler: [{
230
- type: HostListener,
231
- args: ['mouseleave']
232
139
  }], isHidden: [{
233
140
  type: HostBinding,
234
141
  args: ['class.!hidden']
235
142
  }] } });
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYmFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9iYW5uZXIvc2MtYmFubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9iYW5uZXIvc2MtYmFubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakYsT0FBTyxFQUE2QixzQkFBc0IsRUFBd0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNqSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLFdBQVcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFJMUc7O0dBRUc7QUFTSCxNQUFNLE9BQU8saUJBQWlCO0lBNEkxQjs7Ozs7Ozs7O09BU0c7SUFDSCxZQUNxQixHQUFzQixFQUN0QixhQUE4QixFQUNPLFFBQXFDLEVBQ3RELE9BQTRCLEVBQ3pELFdBQTBCLEVBQ2pCLGtCQUF3QztRQUx4QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFDTyxhQUFRLEdBQVIsUUFBUSxDQUE2QjtR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QUFRO3NCQURuQixXQUFXO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEludGVyc2VjdGlvbk9ic2VydmVyU2VydmljZSB9IGZyb20gJ0BuZy13ZWItYXBpcy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInO1xuaW1wb3J0IHsgU2NCYW5uZXIsIFNjQmFubmVyU2VydmljZSwgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSwgU2NVc2VyTWV0cmlrYVNlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IHR1aUZhZGVJbiB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgaW50ZXJ2YWwsIG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NQeENvbnZlcnRlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xuXG4vKipcbiAqINCR0LDQvdC90LXRgCDRgSDQv9GA0L7QutGA0YPRgtC60L7QuSDQv9C10YDQtdC00LDQvdC90YvRhSB7QGxpbmsgVGVtcGxhdGVSZWZ9INGN0LvQtdC80LXQvdGC0L7Qsiwg0Lgg0LHQsNC90L3QtdGA0L7QsiDQu9C+0LrQsNGG0LjQuC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1iYW5uZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1iYW5uZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NjLWJhbm5lci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW0ludGVyc2VjdGlvbk9ic2VydmVyU2VydmljZV0sXG4gICAgYW5pbWF0aW9uczogW3R1aUZhZGVJbl0sXG59KVxuZXhwb3J0IGNsYXNzIFNjQmFubmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQv9C+0LrQsNC30YvQstCw0YLRjCDQutC90L7Qv9C60Lgg0L3QsNCy0LjQs9Cw0YbQuNC4LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG5hdmlnYXRlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqINCY0L3RgtC10YDQstCw0Lsg0L/QvtC60LDQt9CwINGB0LvQsNC50LTQvtCyINCyINC80LjQu9C70LjRgdC10LrRg9C90LTQsNGFLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBsYXllckludGVydmFsOiBudW1iZXIgPSA1MDAwO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQv9GA0L7QutGA0YPRgtC60LAg0LLRi9C60LvRjtGH0LXQvdCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGJhbm5lckxvY2F0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQutC+0LzQv9C+0L3QtdC90YIg0LTQvtC70LbQtdC9INGA0LDRgdGC0Y/Qs9C40LLQsNGC0YzRgdGPLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlc2l6YWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQt9Cw0LPRgNGD0LfQutC4INCx0LDQvdC90LXRgNC+0LIg0YEg0LrQvtC70LjRh9C10YHRgtCy0L7QvCDQv9C+0LvRg9GH0LXQvdC90YvRhSDQsdCw0L3QvdC10YDQvtCyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsb2FkQmFubmVyc0V2ZW50OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0Jhbm5lckV2ZW50OiBFdmVudEVtaXR0ZXI8U2NCYW5uZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxTY0Jhbm5lcj4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L3QsCDRjdC70LXQvNC10L3RgiDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuSDRiNCw0LHQu9C+0L3QvtCyLlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2Jhbm5lcicpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwdWJsaWMgYmFubmVyc0xpc3RSZWY6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqINCh0YHRi9C70LrQsCDQvdCwIHtAbGluayBIVE1MVmlkZW9FbGVtZW50fSDRjdC70LXQvNC10L3RgtCwINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0LLQuNC00LXQvi5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCd2aWRlb1BsYXllcicpXG4gICAgcHJpdmF0ZSB2aWRlb1JlZjogRWxlbWVudFJlZjxIVE1MVmlkZW9FbGVtZW50PjtcblxuICAgIC8qKlxuICAgICAqINCh0YHRi9C70LrQsCDQtNC70Y8g0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60L7Qs9C+INGD0L/RgNCw0LLQu9C10L3QuNGPINGD0L3QuNGH0YLQvtC20LXQvdC40LXQvCDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC10LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqXG4gICAgICog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YLQtdC60YPRidC10LPQviDQsdCw0L3QvdC10YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3VycmVudEJhbm5lcklkOiBudW1iZXIgPSAwO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INC40LfQvNC10L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0YLQsNC50LzQtdGA0LAuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHRvZ2dsZVRpbWVyJDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC90LXQvtCx0YXQvtC00LjQvNC+INC/0L7QutCw0LfRi9Cy0LDRgtGMINC60L3QvtC/0LrQuCDRgdGC0LDRgNGC0LAg0LLQuNC00LXQviDQsdCw0L3QvdC10YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1BsYXlCdG46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQvtCx0L3QvtCy0LvQtdC90LjRjyDRgdC/0LjRgdC60LAg0LHQsNC90L3QtdGA0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYmFubmVycyQ6IE9ic2VydmFibGU8U2NCYW5uZXJbXT4gPSB0aGlzLmJhbm5lclNlcnZpY2UuYmFubmVycyQucGlwZShcbiAgICAgICAgbWFwKChiYW5uZXJzKSA9PiBiYW5uZXJzLmZpbHRlcigoYmFubmVyKSA9PiBiYW5uZXIubG9jYXRpb24gPT09IHRoaXMuYmFubmVyTG9jYXRpb24pLnJldmVyc2UoKSksXG4gICAgICAgIHRhcCgoYmFubmVycykgPT4ge1xuICAgICAgICAgICAgaWYgKGJhbm5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gJzEwMCUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7dGhpcy5weENvbnZlcnRlci5weFRvUmVtKGJhbm5lcnNbMF0uaGVpZ2h0KX1yZW1gO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gYCR7dGhpcy5weENvbnZlcnRlci5weFRvUmVtKGJhbm5lcnNbMF0ud2lkdGgpfXJlbWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5hc3BlY3RSYXRpbyA9IGAke2Jhbm5lcnNbMF0ud2lkdGh9IC8gJHtiYW5uZXJzWzBdLmhlaWdodH1gO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFubmVycyA9IGJhbm5lcnM7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVUaW1lciQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sb2FkQmFubmVyc0V2ZW50LmVtaXQoYmFubmVycy5sZW5ndGgpO1xuICAgICAgICB9KSxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMvbm8tc2hhcmVyZXBsYXlcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INCx0LDQvdC90LXRgNC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGJhbm5lcnM/OiBTY0Jhbm5lcltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiDQodCy0L7QudGB0YLQstC+LCDQvtGCINC60L7RgtC+0YDQvtCz0L4g0LfQsNCy0LjRgdC40YIg0LLRi9GB0L7RgtCwIGA6aG9zdGAg0LrQvtC80L/QvtC90LXQvdGC0LAuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKVxuICAgIHB1YmxpYyBoZWlnaHQ6IHN0cmluZyA9ICdhdXRvJztcblxuICAgIC8qKlxuICAgICAqINCh0LLQvtC50YHRgtCy0L4sINC+0YIg0LrQvtGC0L7RgNC+0LPQviDQt9Cw0LLQuNGB0LjRgiDRiNC40YDQuNC90LAgYDpob3N0YCDQutC+0LzQv9C+0L3QtdC90YLQsC5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJylcbiAgICBwdWJsaWMgd2lkdGg6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqXG4gICAgICog0KHQstC+0LnRgdGC0LLQviwg0L7RgiDQutC+0YLQvtGA0L7Qs9C+INC30LDQstC40YHQuNGCINGB0L7QvtGC0L3QvtGI0LXQvdC40LUgYDpob3N0YCDQutC+0LzQv9C+0L3QtdC90YLQsC5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmFzcGVjdC1yYXRpbycpXG4gICAgcHVibGljIGFzcGVjdFJhdGlvOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INGB0L7QsdGL0YLQuNGPIG1vdXNlZW50ZXIuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicpXG4gICAgcHJpdmF0ZSBtb3VzZUVudGVySGFuZGxlcjogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy50b2dnbGVUaW1lciQubmV4dChmYWxzZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INGB0L7QsdGL0YLQuNGPIG1vdXNlbGVhdmUuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gICAgcHJpdmF0ZSBtb3VzZUxlYXZlSGFuZGxlcjogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy50b2dnbGVUaW1lciQubmV4dCh0cnVlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0Jhbm5lckNvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2RyINCe0LHRitC10LrRgiDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC+0LHQvdCw0YDRg9C20LXQvdC40LXQvCDQuNC30LzQtdC90LXQvdC40LkuXG4gICAgICogQHBhcmFtIGJhbm5lclNlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LHQsNC90L3QtdGA0LDQvNC4LlxuICAgICAqIEBwYXJhbSBlbnRyaWVzJCBJbnRlcnNlY3Rpb24gT2JzZXJ2ZXIgU2VydmljZS5cbiAgICAgKiBAcGFyYW0gZWxlbWVudCDQrdC70LXQvNC10L3RgiDQsdCw0L3QvdC10YDQsC5cbiAgICAgKiBAcGFyYW0gcHhDb252ZXJ0ZXIg0K3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsC3Qv9C+0LzQvtGJ0L3QuNC60LAg0LTQu9GPINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0L/QuNC60YHQtdC70LXQuS5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGJhbm5lclNlcnZpY2U6IFNjQmFubmVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChJbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZW50cmllcyQ6IEludGVyc2VjdGlvbk9ic2VydmVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnRSZWY8RWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgcHhDb252ZXJ0ZXI6IFNjUHhDb252ZXJ0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZVxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqINCh0LLQvtC50YHRgtCy0L4sINC+0YIg0LrQvtGC0L7RgNC+0LPQviDQt9Cw0LLQuNGB0LjRgiDQvdCw0LvQuNGH0LjQtSDQutC70LDRgdGB0LAgYCFoaWRkZW5gINGDIGA6aG9zdGAg0LrQvtC80L/QvtC90LXQvdGC0LAuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy4haGlkZGVuJylcbiAgICBwcml2YXRlIGdldCBpc0hpZGRlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmJhbm5lcnMgfHwgdGhpcy5iYW5uZXJzTGlzdFJlZi5sZW5ndGggKyB0aGlzLmJhbm5lcnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9nZ2xlVGltZXIkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKHRvZ2dsZSkgPT4gdG9nZ2xlKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gaW50ZXJ2YWwodGhpcy5wbGF5ZXJJbnRlcnZhbCkucGlwZSh0YWtlVW50aWwodGhpcy50b2dnbGVUaW1lciQpKSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLmRpc2FibGVkICYmICh0aGlzLmJhbm5lcnM/Llt0aGlzLmN1cnJlbnRCYW5uZXJJZF0/Lm1lZGlhVHlwZSA9PT0gJ2ltYWdlJyB8fCB0aGlzLnNob3dQbGF5QnRuKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25OZXh0QmFubmVyKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyDQntGC0YHQu9C10LbQuNCy0LDQvdC40LUg0L/QtdGA0LXRgdC10YfQtdC90LjRjyDQutC+0LzQv9C+0L3QtdC90YLQsCDRgSDRjdC60YDQsNC90L7QvCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICAgIC8vINCV0YHQu9C4INCx0LDQvdC90LXRgNCwINC90LUg0L3QsNGF0L7QtNC40YLRgdGPINCyINC/0L7Qu9C1INCy0LjQtNC40LzQvtGB0YLQuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8sINGC0L4g0L7QvSDQv9C10YDQtdGB0YLQsNGR0YIg0L/QtdGA0LXQutC70Y7Rh9Cw0YLRjNGB0Y8sINCwINCy0LjQtNC10L4g0L7RgdGC0LDQvdCw0LLQu9C40LLQsNC10YLRgdGPLlxuICAgICAgICB0aGlzLmVudHJpZXMkLnBpcGUobWFwKChlbnRyaWVzKSA9PiBlbnRyaWVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0udGFyZ2V0ID09PSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVRpbWVyJC5uZXh0KCEhZW50cnk/LmlzSW50ZXJzZWN0aW5nKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXQutC70Y7Rh9Cw0LXRgiDQvdCwINC/0YDQtdC00YvQtNGD0YnQuNC5INCx0LDQvdC90LXRgC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25QcmV2aW91c0Jhbm5lcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXM6IG51bWJlciA9IHRoaXMuY3VycmVudEJhbm5lcklkIC0gMTtcbiAgICAgICAgdGhpcy5jdXJyZW50QmFubmVySWQgPSBwcmV2aW91cyA8IDAgPyB0aGlzLmJhbm5lcnNMaXN0UmVmLmxlbmd0aCArICh0aGlzLmJhbm5lcnM/Lmxlbmd0aCA/PyAwKSAtIDEgOiBwcmV2aW91cztcblxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdC60LvRjtGH0LDQtdGCINC90LAg0YHQu9C10LTRg9GO0YnQuNC5INCx0LDQvdC90LXRgC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25OZXh0QmFubmVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXh0OiBudW1iZXIgPSB0aGlzLmN1cnJlbnRCYW5uZXJJZCArIDE7XG4gICAgICAgIHRoaXMuY3VycmVudEJhbm5lcklkID0gbmV4dCA9PT0gdGhpcy5iYW5uZXJzTGlzdFJlZi5sZW5ndGggKyAodGhpcy5iYW5uZXJzPy5sZW5ndGggPz8gMCkgPyAwIDogbmV4dDtcblxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdC60LvRjtGH0LDQtdGCINC90LAg0YHQu9C10LTRg9GO0YnQuNC5INCx0LDQvdC90LXRgC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25FbmRlZFZpZGVvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uTmV4dEJhbm5lcigpO1xuICAgICAgICB0aGlzLnRvZ2dsZVRpbWVyJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLnNob3dQbGF5QnRuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDQvdCw0LbQsNGC0LjRjyDQvdCwINCx0LDQvdC90LXRgCwg0LPQtdC90LXRgNC40YDRg9GO0YnQuNC5INGB0L7QsdGL0YLQuNC1IHtAbGluayBjbGlja0Jhbm5lckltZ0V2ZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBiYW5uZXIg0JHQsNC90L3QtdGALCDQv9C+INGB0YHRi9C70LrQtSDQutC+0YLQvtGA0L7Qs9C+INGB0L7QstC10YDRiNGR0L0g0L/QtdGA0LXRhdC+0LQuXG4gICAgICovXG4gICAgcHVibGljIG9uQ2xpY2soYmFubmVyOiBTY0Jhbm5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICB0YXJnZXQ6IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0uYmFubmVyQ2xpY2ssXG4gICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBiYW5uZXJfaWQ6IGJhbm5lci5pZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChiYW5uZXIudXJsKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrQmFubmVyRXZlbnQuZW1pdChiYW5uZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqdHVpTGV0PVwiYmFubmVycyQgfCBhc3luY1wiPlxuICAgIDx0dWktY2Fyb3VzZWxcbiAgICAgICAgY2xhc3M9XCJzaXplLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQteGwgYmctd2hpdGVcIlxuICAgICAgICBbKGluZGV4KV09XCJjdXJyZW50QmFubmVySWRcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYmFubmVyIG9mIGJhbm5lcnM7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICp0dWlJdGVtXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soYmFubmVyKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmFzcGVjdC1yYXRpb109XCJhc3BlY3RSYXRpb1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuaHJlZl09XCJiYW5uZXIudXJsID8gYmFubmVyLnVybCA6IG51bGxcIlxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImJhbm5lci50aXRsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiYmFubmVyLm1lZGlhVHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndmlkZW8nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdmlkZW9QbGF5ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VzcGVuZCk9XCJzaG93UGxheUJ0biA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbGF5KT1cInNob3dQbGF5QnRuID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiYmFubmVyLm1lZGlhRmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZGVkKT1cIm9uRW5kZWRWaWRlbygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cInZpZGVvUGxheWVyLnBhdXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZW91dCk9XCJ2aWRlb1BsYXllci5wbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaC1mdWxsIG9iamVjdC1jb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvcGxheVxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmlkZW8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93UGxheUJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtAdHVpRmFkZUluXT1cIjIwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0UmlwcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB2aWRlb1BsYXllci5wbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiFhYnNvbHV0ZSBib3R0b20tNCBsZWZ0LThcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbi1yZWZyZXNoIHRleHQtYmxhY2tcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJiYW5uZXIubWVkaWFGaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cItCR0LDQvdC90LXRgFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtZnVsbCBvYmplY3QtY292ZXJcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBiYW5uZXJzTGlzdFJlZlwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICp0dWlJdGVtXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmFzcGVjdC1yYXRpb109XCJhc3BlY3RSYXRpb1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdHVpLWNhcm91c2VsPlxuPC9uZy1jb250YWluZXI+XG48ZGl2XG4gICAgKm5nSWY9XCJuYXZpZ2F0ZUJ1dHRvbiAmJiAhZGlzYWJsZWQgJiYgdGhpcy5iYW5uZXJzICYmIHRoaXMuYmFubmVyc0xpc3RSZWYubGVuZ3RoICsgdGhpcy5iYW5uZXJzLmxlbmd0aCA+IDFcIlxuICAgIHR1aVRoZW1lPVwibGlnaHRcIlxuICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIlxuPlxuICAgIDxidXR0b25cbiAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLmNoZXZyb24tbGVmdFwiXG4gICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgW3N0eWxlLmJvcmRlci1yYWRpdXMuJV09XCIxMDBcIlxuICAgICAgICBhcHBlYXJhbmNlPVwiZmxhdFwiXG4gICAgICAgIChjbGljayk9XCJvblByZXZpb3VzQmFubmVyKClcIlxuICAgICAgICBjbGFzcz1cIiFhYnNvbHV0ZSBsZWZ0LTJcIlxuICAgID48L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICBbc3R5bGUuYm9yZGVyLXJhZGl1cy4lXT1cIjEwMFwiXG4gICAgICAgIGFwcGVhcmFuY2U9XCJmbGF0XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uTmV4dEJhbm5lcigpXCJcbiAgICAgICAgY2xhc3M9XCIhYWJzb2x1dGUgcmlnaHQtMlwiXG4gICAgPjwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYmFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9iYW5uZXIvc2MtYmFubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9iYW5uZXIvc2MtYmFubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FHVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRixPQUFPLEVBQTZCLHNCQUFzQixFQUF3QixNQUFNLHdCQUF3QixDQUFDO0FBQ2pILE9BQU8sRUFBRSxHQUFHLEVBQWMsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFJbEU7O0dBRUc7QUFRSCxNQUFNLE9BQU8saUJBQWlCO0lBc0YxQjs7Ozs7Ozs7O09BU0c7SUFDSCxZQUNxQixHQUFzQixFQUN0QixhQUE4QixFQUNPLFFBQXFDLEVBQ3RELE9BQTRCLEVBQ3pELFdBQTBCLEVBQ2pCLGtCQUF3QztRQUx4QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFDTyxhQUFRLEdBQVIsUUFBUSxDQUE2QjtRQUN0RCxZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQUN6RCxnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUNqQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXNCO1FBckc3RDs7V0FFRztRQUVJLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRXRDOztXQUVHO1FBRUksYUFBUSxHQUFXLElBQUksQ0FBQztRQVEvQjs7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QUFDLFFBQVE7Z0JBNENsQixXQUFXO3NCQURqQixXQUFXO3VCQUFDLG9CQUFvQjtnQkEwQnJCLFFBQVE7c0JBRG5CLFdBQVc7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2UgfSBmcm9tICdAbmctd2ViLWFwaXMvaW50ZXJzZWN0aW9uLW9ic2VydmVyJztcbmltcG9ydCB7IFNjQmFubmVyLCBTY0Jhbm5lclNlcnZpY2UsIFNjVXNlck1ldHJpa2FHb2Fsc0VudW0sIFNjVXNlck1ldHJpa2FTZXJ2aWNlIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LCBTdWJqZWN0LCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NQeENvbnZlcnRlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xuXG4vKipcbiAqINCR0LDQvdC90LXRgCDRgSDQv9GA0L7QutGA0YPRgtC60L7QuSDQv9C10YDQtdC00LDQvdC90YvRhSB7QGxpbmsgVGVtcGxhdGVSZWZ9INGN0LvQtdC80LXQvdGC0L7Qsiwg0Lgg0LHQsNC90L3QtdGA0L7QsiDQu9C+0LrQsNGG0LjQuC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1iYW5uZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1iYW5uZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NjLWJhbm5lci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW0ludGVyc2VjdGlvbk9ic2VydmVyU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNjQmFubmVyQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC90LXQvtCx0YXQvtC00LjQvNC+INC/0L7QutCw0LfRi9Cy0LDRgtGMINC60L3QvtC/0LrQuCDQvdCw0LLQuNCz0LDRhtC40LguXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbmF2aWdhdGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdGC0LXRgNCy0LDQuyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtC5INGB0LzQtdC90Ysg0YHQu9Cw0LnQtNC+0LIg0LIg0LzQuNC70LvQuNGB0LXQutGD0L3QtNCw0YUgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgMCwg0YfRgtC+0LHRiyDQvtGC0LrQu9GO0YfQuNGC0Ywg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60YPRjiDRgdC80LXQvdGDINGB0LvQsNC50LTQsCkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZHVyYXRpb246IG51bWJlciA9IDUwMDA7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGJhbm5lckxvY2F0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQutC+0LzQv9C+0L3QtdC90YIg0LTQvtC70LbQtdC9INGA0LDRgdGC0Y/Qs9C40LLQsNGC0YzRgdGPLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlc2l6YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0LfQsNCz0YDRg9C30LrQuCDQsdCw0L3QvdC10YDQvtCyINGBINC60L7Qu9C40YfQtdGB0YLQstC+0Lwg0L/QvtC70YPRh9C10L3QvdGL0YUg0LHQsNC90L3QtdGA0L7Qsi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbG9hZEJhbm5lcnNFdmVudDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LjQt9C+0LHRgNCw0LbQtdC90LjQtSDQsdCw0L3QvdC10YDQsC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xpY2tCYW5uZXJFdmVudDogRXZlbnRFbWl0dGVyPFNjQmFubmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8U2NCYW5uZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6INC90LAg0Y3Qu9C10LzQtdC90YIg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Lkg0YjQsNCx0LvQvtC90L7Qsi5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKCdiYW5uZXInKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHVibGljIGJhbm5lcnNMaXN0UmVmOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgtC10LrRg9GJ0LXQs9C+INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBjdXJyZW50QmFubmVySWQ6IG51bWJlciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU3ViamVjdH0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDRgtCw0LnQvNC10YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9nZ2xlVGltZXIkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQvtCx0L3QvtCy0LvQtdC90LjRjyDRgdC/0LjRgdC60LAg0LHQsNC90L3QtdGA0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYmFubmVycyQ6IE9ic2VydmFibGU8U2NCYW5uZXJbXT4gPSB0aGlzLmJhbm5lclNlcnZpY2UuYmFubmVycyQucGlwZShcbiAgICAgICAgbWFwKChiYW5uZXJzKSA9PiBiYW5uZXJzLmZpbHRlcigoYmFubmVyKSA9PiBiYW5uZXIubG9jYXRpb24gPT09IHRoaXMuYmFubmVyTG9jYXRpb24pLnJldmVyc2UoKSksXG4gICAgICAgIHRhcCgoYmFubmVycykgPT4ge1xuICAgICAgICAgICAgaWYgKGJhbm5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZXNpemFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3BlY3RSYXRpbyA9IGAke2Jhbm5lcnNbMF0ud2lkdGh9IC8gJHtiYW5uZXJzWzBdLmhlaWdodH1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuYmFubmVycyA9IGJhbm5lcnM7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVUaW1lciQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5sb2FkQmFubmVyc0V2ZW50LmVtaXQoYmFubmVycy5sZW5ndGgpO1xuICAgICAgICB9KSxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMvbm8tc2hhcmVyZXBsYXlcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INCx0LDQvdC90LXRgNC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGJhbm5lcnM/OiBTY0Jhbm5lcltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiDQodCy0L7QudGB0YLQstC+LCDQvtGCINC60L7RgtC+0YDQvtCz0L4g0LfQsNCy0LjRgdC40YIg0YHQvtC+0YLQvdC+0YjQtdC90LjQtSBgOmhvc3RgINC60L7QvNC/0L7QvdC10L3RgtCwLlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuYXNwZWN0LXJhdGlvJylcbiAgICBwdWJsaWMgYXNwZWN0UmF0aW86IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0Jhbm5lckNvbXBvbmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2RyINCe0LHRitC10LrRgiDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC+0LHQvdCw0YDRg9C20LXQvdC40LXQvCDQuNC30LzQtdC90LXQvdC40LkuXG4gICAgICogQHBhcmFtIGJhbm5lclNlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LHQsNC90L3QtdGA0LDQvNC4LlxuICAgICAqIEBwYXJhbSBlbnRyaWVzJCBJbnRlcnNlY3Rpb24gT2JzZXJ2ZXIgU2VydmljZS5cbiAgICAgKiBAcGFyYW0gZWxlbWVudCDQrdC70LXQvNC10L3RgiDQsdCw0L3QvdC10YDQsC5cbiAgICAgKiBAcGFyYW0gcHhDb252ZXJ0ZXIg0K3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsC3Qv9C+0LzQvtGJ0L3QuNC60LAg0LTQu9GPINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0L/QuNC60YHQtdC70LXQuS5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGJhbm5lclNlcnZpY2U6IFNjQmFubmVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChJbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZW50cmllcyQ6IEludGVyc2VjdGlvbk9ic2VydmVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnRSZWY8RWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgcHhDb252ZXJ0ZXI6IFNjUHhDb252ZXJ0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZVxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqINCh0LLQvtC50YHRgtCy0L4sINC+0YIg0LrQvtGC0L7RgNC+0LPQviDQt9Cw0LLQuNGB0LjRgiDQvdCw0LvQuNGH0LjQtSDQutC70LDRgdGB0LAgYCFoaWRkZW5gINGDIGA6aG9zdGAg0LrQvtC80L/QvtC90LXQvdGC0LAuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy4haGlkZGVuJylcbiAgICBwcml2YXRlIGdldCBpc0hpZGRlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmJhbm5lcnMgfHwgdGhpcy5iYW5uZXJzTGlzdFJlZi5sZW5ndGggKyB0aGlzLmJhbm5lcnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INC90LDQttCw0YLQuNGPINC90LAg0LHQsNC90L3QtdGALCDQs9C10L3QtdGA0LjRgNGD0Y7RidC40Lkg0YHQvtCx0YvRgtC40LUge0BsaW5rIGNsaWNrQmFubmVySW1nRXZlbnR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGJhbm5lciDQkdCw0L3QvdC10YAsINC/0L4g0YHRgdGL0LvQutC1INC60L7RgtC+0YDQvtCz0L4g0YHQvtCy0LXRgNGI0ZHQvSDQv9C10YDQtdGF0L7QtC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25DbGljayhiYW5uZXI6IFNjQmFubmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5iYW5uZXJDbGljayxcbiAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgIGJhbm5lcl9pZDogYmFubmVyLmlkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGJhbm5lci51cmwpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tCYW5uZXJFdmVudC5lbWl0KGJhbm5lcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICp0dWlMZXQ9XCJiYW5uZXJzJCB8IGFzeW5jXCI+XG4gICAgPHR1aS1jYXJvdXNlbFxuICAgICAgICBbZHVyYXRpb25dPVwiZHVyYXRpb25cIlxuICAgICAgICAjY2Fyb3VzZWxcbiAgICAgICAgW2F0dHIucmVzaXphYmxlXT1cInJlc2l6YWJsZVwiXG4gICAgICAgIGNsYXNzPVwic2l6ZS1mdWxsIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLXhsIGJnLXdoaXRlXCJcbiAgICAgICAgWyhpbmRleCldPVwiY3VycmVudEJhbm5lcklkXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJhbm5lciBvZiBiYW5uZXJzOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiYmFubmVyLm1lZGlhVHlwZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICp0dWlJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGljayhiYW5uZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiYmFubmVyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5hc3BlY3QtcmF0aW9dPVwiYXNwZWN0UmF0aW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaHJlZl09XCJiYW5uZXIudXJsID8gYmFubmVyLnVybCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiJ3VybCgnICsgYmFubmVyLm1lZGlhRmlsZSArICcpJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpemUtZnVsbCBiZy1bbGVuZ3RoOjEwMCVfMTAwJV1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBiYW5uZXJzTGlzdFJlZlwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICp0dWlJdGVtXG4gICAgICAgICAgICAgICAgW3N0eWxlLmFzcGVjdC1yYXRpb109XCJhc3BlY3RSYXRpb1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzaXplLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3R1aS1jYXJvdXNlbD5cblxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJuYXZpZ2F0ZUJ1dHRvbiAmJiBkdXJhdGlvbiAmJiB0aGlzLmJhbm5lcnMgJiYgdGhpcy5iYW5uZXJzTGlzdFJlZi5sZW5ndGggKyB0aGlzLmJhbm5lcnMubGVuZ3RoID4gMVwiXG4gICAgICAgIHR1aVRoZW1lPVwibGlnaHRcIlxuICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCJcbiAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuY2hldnJvbi1sZWZ0XCJcbiAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgIFtzdHlsZS5ib3JkZXItcmFkaXVzLiVdPVwiMTAwXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJmbGF0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjYXJvdXNlbC5wcmV2KClcIlxuICAgICAgICAgICAgY2xhc3M9XCIhYWJzb2x1dGUgbGVmdC0yXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLmNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgW3N0eWxlLmJvcmRlci1yYWRpdXMuJV09XCIxMDBcIlxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cImZsYXRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNhcm91c2VsLm5leHQoKVwiXG4gICAgICAgICAgICBjbGFzcz1cIiFhYnNvbHV0ZSByaWdodC0yXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -20,7 +20,7 @@ export class HoverImageCarouselComponent {
20
20
  this.currentIndex = signal(0);
21
21
  }
22
22
  /**
23
- * Обработчик события mousemove.
23
+ * Обработчик события `mousemove.silent`.
24
24
  *
25
25
  * @param offsetX Отступ курсора мыши по оси X от края {@link HTMLElement}.
26
26
  * @param target Объект {@link HTMLElement} в котором лежат изображения
@@ -29,17 +29,27 @@ export class HoverImageCarouselComponent {
29
29
  if (this.images.length <= 1 || offsetX < 0) {
30
30
  return;
31
31
  }
32
+ // new Event().preventDefault
32
33
  const elementWidth = target.offsetWidth;
33
34
  const hoverPercentage = offsetX / elementWidth;
34
35
  const newIndex = Math.floor(hoverPercentage * this.images.length);
35
36
  this.currentIndex.set(newIndex);
36
37
  }
38
+ /**
39
+ * Обработчик события `mouseleave.silent`.
40
+ */
41
+ onLeave() {
42
+ if (this.images.length <= 1) {
43
+ return;
44
+ }
45
+ this.currentIndex.set(0);
46
+ }
37
47
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: HoverImageCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: HoverImageCarouselComponent, isStandalone: true, selector: "sc-hover-image-carousel", inputs: { images: "images", isShowActions: "isShowActions" }, host: { listeners: { "mousemove.silent": "onHover($event.offsetX,$event.target)" } }, ngImport: i0, template: "<div\n class=\"overflow-hidden rounded-xl\"\n [class.mb-2]=\"images.length <= 1 && isShowActions\"\n [style.aspect-ratio]=\"'20/19'\"\n>\n <img\n [src]=\"images[currentIndex()]\"\n class=\"size-full rounded-xl object-contain\"\n />\n</div>\n\n@if (images.length > 1 && isShowActions) {\n <tui-pagination\n size=\"s\"\n [length]=\"images.length\"\n [index]=\"currentIndex()\"\n />\n}\n", dependencies: [{ kind: "component", type: TuiPagination, selector: "tui-pagination", inputs: ["length", "focusable", "size", "disabled", "activePadding", "sidePadding", "content", "index"], outputs: ["indexChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: HoverImageCarouselComponent, isStandalone: true, selector: "sc-hover-image-carousel", inputs: { images: "images", isShowActions: "isShowActions" }, host: { listeners: { "mousemove.silent": "onHover($event.offsetX,$event.target)", "mouseleave.silent": "onLeave()" } }, ngImport: i0, template: "<div\n class=\"overflow-hidden rounded-xl\"\n [class.mb-2]=\"images.length <= 1 && isShowActions\"\n [style.aspect-ratio]=\"'20/19'\"\n>\n <img\n [src]=\"images[currentIndex()]\"\n class=\"size-full rounded-xl object-contain\"\n />\n</div>\n\n@if (images.length > 1 && isShowActions) {\n <tui-pagination\n size=\"s\"\n [length]=\"images.length\"\n [index]=\"currentIndex()\"\n (indexChange)=\"currentIndex.set($event)\"\n (mousemove.silent)=\"$event.stopPropagation()\"\n />\n}\n", dependencies: [{ kind: "component", type: TuiPagination, selector: "tui-pagination", inputs: ["length", "focusable", "size", "disabled", "activePadding", "sidePadding", "content", "index"], outputs: ["indexChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39
49
  }
40
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: HoverImageCarouselComponent, decorators: [{
41
51
  type: Component,
42
- args: [{ selector: 'sc-hover-image-carousel', standalone: true, imports: [TuiPagination], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"overflow-hidden rounded-xl\"\n [class.mb-2]=\"images.length <= 1 && isShowActions\"\n [style.aspect-ratio]=\"'20/19'\"\n>\n <img\n [src]=\"images[currentIndex()]\"\n class=\"size-full rounded-xl object-contain\"\n />\n</div>\n\n@if (images.length > 1 && isShowActions) {\n <tui-pagination\n size=\"s\"\n [length]=\"images.length\"\n [index]=\"currentIndex()\"\n />\n}\n" }]
52
+ args: [{ standalone: true, selector: 'sc-hover-image-carousel', imports: [TuiPagination], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"overflow-hidden rounded-xl\"\n [class.mb-2]=\"images.length <= 1 && isShowActions\"\n [style.aspect-ratio]=\"'20/19'\"\n>\n <img\n [src]=\"images[currentIndex()]\"\n class=\"size-full rounded-xl object-contain\"\n />\n</div>\n\n@if (images.length > 1 && isShowActions) {\n <tui-pagination\n size=\"s\"\n [length]=\"images.length\"\n [index]=\"currentIndex()\"\n (indexChange)=\"currentIndex.set($event)\"\n (mousemove.silent)=\"$event.stopPropagation()\"\n />\n}\n" }]
43
53
  }], propDecorators: { images: [{
44
54
  type: Input
45
55
  }], isShowActions: [{
@@ -47,5 +57,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
47
57
  }], onHover: [{
48
58
  type: HostListener,
49
59
  args: ['mousemove.silent', ['$event.offsetX', '$event.target']]
60
+ }], onLeave: [{
61
+ type: HostListener,
62
+ args: ['mouseleave.silent']
50
63
  }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItaW1hZ2UtY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvaG92ZXItaW1hZ2UtY2Fyb3VzZWwvaG92ZXItaW1hZ2UtY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvaG92ZXItaW1hZ2UtY2Fyb3VzZWwvaG92ZXItaW1hZ2UtY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFOUM7O0dBRUc7QUFRSCxNQUFNLE9BQU8sMkJBQTJCO0lBUHhDO1FBUUk7O1dBRUc7UUFFSSxXQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTdCOztXQUVHO1FBRUksa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFckM7O1dBRUc7UUFDSSxpQkFBWSxHQUEyQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FtQjNEO0lBakJHOzs7OztPQUtHO0lBRUssT0FBTyxDQUFDLE9BQWUsRUFBRSxNQUFtQjtRQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekMsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3hDLE1BQU0sZUFBZSxHQUFHLE9BQU8sR0FBRyxZQUFZLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDOytHQWxDUSwyQkFBMkI7bUdBQTNCLDJCQUEyQix1T0NieEMsMGJBa0JBLDRDRFRjLGFBQWE7OzRGQUlkLDJCQUEyQjtrQkFQdkMsU0FBUzsrQkFDSSx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQLENBQUMsYUFBYSxDQUFDLG1CQUVQLHVCQUF1QixDQUFDLE1BQU07OEJBT3hDLE1BQU07c0JBRFosS0FBSztnQkFPQyxhQUFhO3NCQURuQixLQUFLO2dCQWVFLE9BQU87c0JBRGQsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFR1aVBhZ2luYXRpb24gfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0L/RgNC+0YHQvNC+0YLRgNCwINC40LfQvtCx0YDQsNC20LXQvdC40Lkg0YfQtdGA0LXQtyDRgdC+0LHRi9GC0LjQtSDQvdCw0LLQtdC00LXQvdC40Y8uXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtaG92ZXItaW1hZ2UtY2Fyb3VzZWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1R1aVBhZ2luYXRpb25dLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ob3Zlci1pbWFnZS1jYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEhvdmVySW1hZ2VDYXJvdXNlbENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0JzQsNGB0YHQuNCyINC40LfQvtCx0YDQsNC20LXQvdC40LkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW1hZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YfRgtC+INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQvtCx0YDQsNC30LjRgtGMINGN0LvQtdC80LXQvdGC0Ysg0YPQv9GA0LDQstC70LXQvdC40Y8uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXNTaG93QWN0aW9uczogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgV3JpdGFibGVTaWduYWx9INC00LvRjyDQvtGC0YHQu9C10LbQuNCy0LDQvdC40Y8g0YLQtdC60YPRidC10LPQviDQuNC90LTQtdC60YHQsCDQuNC30L7QsdGA0LDQttC10L3QuNGPLlxuICAgICAqL1xuICAgIHB1YmxpYyBjdXJyZW50SW5kZXg6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gPSBzaWduYWwoMCk7XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDRgdC+0LHRi9GC0LjRjyBtb3VzZW1vdmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb2Zmc2V0WCDQntGC0YHRgtGD0L8g0LrRg9GA0YHQvtGA0LAg0LzRi9GI0Lgg0L/QviDQvtGB0LggWCDQvtGCINC60YDQsNGPIHtAbGluayBIVE1MRWxlbWVudH0uXG4gICAgICogQHBhcmFtIHRhcmdldCDQntCx0YrQtdC60YIge0BsaW5rIEhUTUxFbGVtZW50fSDQsiDQutC+0YLQvtGA0L7QvCDQu9C10LbQsNGCINC40LfQvtCx0YDQsNC20LXQvdC40Y9cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUuc2lsZW50JywgWyckZXZlbnQub2Zmc2V0WCcsICckZXZlbnQudGFyZ2V0J10pXG4gICAgcHJpdmF0ZSBvbkhvdmVyKG9mZnNldFg6IG51bWJlciwgdGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZXMubGVuZ3RoIDw9IDEgfHwgb2Zmc2V0WCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IHRhcmdldC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3QgaG92ZXJQZXJjZW50YWdlID0gb2Zmc2V0WCAvIGVsZW1lbnRXaWR0aDtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBNYXRoLmZsb29yKGhvdmVyUGVyY2VudGFnZSAqIHRoaXMuaW1hZ2VzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4LnNldChuZXdJbmRleCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQteGxcIlxuICAgIFtjbGFzcy5tYi0yXT1cImltYWdlcy5sZW5ndGggPD0gMSAmJiBpc1Nob3dBY3Rpb25zXCJcbiAgICBbc3R5bGUuYXNwZWN0LXJhdGlvXT1cIicyMC8xOSdcIlxuPlxuICAgIDxpbWdcbiAgICAgICAgW3NyY109XCJpbWFnZXNbY3VycmVudEluZGV4KCldXCJcbiAgICAgICAgY2xhc3M9XCJzaXplLWZ1bGwgcm91bmRlZC14bCBvYmplY3QtY29udGFpblwiXG4gICAgLz5cbjwvZGl2PlxuXG5AaWYgKGltYWdlcy5sZW5ndGggPiAxICYmIGlzU2hvd0FjdGlvbnMpIHtcbiAgICA8dHVpLXBhZ2luYXRpb25cbiAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICBbbGVuZ3RoXT1cImltYWdlcy5sZW5ndGhcIlxuICAgICAgICBbaW5kZXhdPVwiY3VycmVudEluZGV4KClcIlxuICAgIC8+XG59XG4iXX0=
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItaW1hZ2UtY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvaG92ZXItaW1hZ2UtY2Fyb3VzZWwvaG92ZXItaW1hZ2UtY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvaG92ZXItaW1hZ2UtY2Fyb3VzZWwvaG92ZXItaW1hZ2UtY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFOUM7O0dBRUc7QUFRSCxNQUFNLE9BQU8sMkJBQTJCO0lBUHhDO1FBUUk7O1dBRUc7UUFFSSxXQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTdCOztXQUVHO1FBRUksa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFckM7O1dBRUc7UUFDSSxpQkFBWSxHQUEyQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0ErQjNEO0lBN0JHOzs7OztPQUtHO0lBRUssT0FBTyxDQUFDLE9BQWUsRUFBRSxNQUFtQjtRQUNoRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekMsT0FBTztRQUNYLENBQUM7UUFDRCw2QkFBNkI7UUFDN0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN4QyxNQUFNLGVBQWUsR0FBRyxPQUFPLEdBQUcsWUFBWSxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBRUssT0FBTztRQUNYLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDOytHQTlDUSwyQkFBMkI7bUdBQTNCLDJCQUEyQix5UUNieEMsdWlCQW9CQSw0Q0RYYyxhQUFhOzs0RkFJZCwyQkFBMkI7a0JBUHZDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLHlCQUF5QixXQUMxQixDQUFDLGFBQWEsQ0FBQyxtQkFFUCx1QkFBdUIsQ0FBQyxNQUFNOzhCQU94QyxNQUFNO3NCQURaLEtBQUs7Z0JBT0MsYUFBYTtzQkFEbkIsS0FBSztnQkFlRSxPQUFPO3NCQURkLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUM7Z0JBZ0I3RCxPQUFPO3NCQURkLFlBQVk7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbnB1dCwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHVpUGFnaW5hdGlvbiB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQv9GA0L7RgdC80L7RgtGA0LAg0LjQt9C+0LHRgNCw0LbQtdC90LjQuSDRh9C10YDQtdC3INGB0L7QsdGL0YLQuNC1INC90LDQstC10LTQtdC90LjRjy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLWhvdmVyLWltYWdlLWNhcm91c2VsJyxcbiAgICBpbXBvcnRzOiBbVHVpUGFnaW5hdGlvbl0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hvdmVyLWltYWdlLWNhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgSG92ZXJJbWFnZUNhcm91c2VsQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiDQnNCw0YHRgdC40LIg0LjQt9C+0LHRgNCw0LbQtdC90LjQuS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbWFnZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRh9GC0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0Ywg0Y3Qu9C10LzQtdC90YLRiyDRg9C/0YDQsNCy0LvQtdC90LjRjy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpc1Nob3dBY3Rpb25zOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBXcml0YWJsZVNpZ25hbH0g0LTQu9GPINC+0YLRgdC70LXQttC40LLQsNC90LjRjyDRgtC10LrRg9GJ0LXQs9C+INC40L3QtNC10LrRgdCwINC40LfQvtCx0YDQsNC20LXQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIGN1cnJlbnRJbmRleDogV3JpdGFibGVTaWduYWw8bnVtYmVyPiA9IHNpZ25hbCgwKTtcblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INGB0L7QsdGL0YLQuNGPIGBtb3VzZW1vdmUuc2lsZW50YC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvZmZzZXRYINCe0YLRgdGC0YPQvyDQutGD0YDRgdC+0YDQsCDQvNGL0YjQuCDQv9C+INC+0YHQuCBYINC+0YIg0LrRgNCw0Y8ge0BsaW5rIEhUTUxFbGVtZW50fS5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0INCe0LHRitC10LrRgiB7QGxpbmsgSFRNTEVsZW1lbnR9INCyINC60L7RgtC+0YDQvtC8INC70LXQttCw0YIg0LjQt9C+0LHRgNCw0LbQtdC90LjRj1xuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbW92ZS5zaWxlbnQnLCBbJyRldmVudC5vZmZzZXRYJywgJyRldmVudC50YXJnZXQnXSlcbiAgICBwcml2YXRlIG9uSG92ZXIob2Zmc2V0WDogbnVtYmVyLCB0YXJnZXQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlcy5sZW5ndGggPD0gMSB8fCBvZmZzZXRYIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5ldyBFdmVudCgpLnByZXZlbnREZWZhdWx0XG4gICAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IHRhcmdldC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3QgaG92ZXJQZXJjZW50YWdlID0gb2Zmc2V0WCAvIGVsZW1lbnRXaWR0aDtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBNYXRoLmZsb29yKGhvdmVyUGVyY2VudGFnZSAqIHRoaXMuaW1hZ2VzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4LnNldChuZXdJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0YHQvtCx0YvRgtC40Y8gYG1vdXNlbGVhdmUuc2lsZW50YC5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlLnNpbGVudCcpXG4gICAgcHJpdmF0ZSBvbkxlYXZlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbWFnZXMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4LnNldCgwKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC14bFwiXG4gICAgW2NsYXNzLm1iLTJdPVwiaW1hZ2VzLmxlbmd0aCA8PSAxICYmIGlzU2hvd0FjdGlvbnNcIlxuICAgIFtzdHlsZS5hc3BlY3QtcmF0aW9dPVwiJzIwLzE5J1wiXG4+XG4gICAgPGltZ1xuICAgICAgICBbc3JjXT1cImltYWdlc1tjdXJyZW50SW5kZXgoKV1cIlxuICAgICAgICBjbGFzcz1cInNpemUtZnVsbCByb3VuZGVkLXhsIG9iamVjdC1jb250YWluXCJcbiAgICAvPlxuPC9kaXY+XG5cbkBpZiAoaW1hZ2VzLmxlbmd0aCA+IDEgJiYgaXNTaG93QWN0aW9ucykge1xuICAgIDx0dWktcGFnaW5hdGlvblxuICAgICAgICBzaXplPVwic1wiXG4gICAgICAgIFtsZW5ndGhdPVwiaW1hZ2VzLmxlbmd0aFwiXG4gICAgICAgIFtpbmRleF09XCJjdXJyZW50SW5kZXgoKVwiXG4gICAgICAgIChpbmRleENoYW5nZSk9XCJjdXJyZW50SW5kZXguc2V0KCRldmVudClcIlxuICAgICAgICAobW91c2Vtb3ZlLnNpbGVudCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIC8+XG59XG4iXX0=