@snabcentr/client-ui 1.12.1 → 1.14.0
Sign up to get free protection for your applications and to get access to all the features.
- package/cart/cart-item-mobile/sc-cart-item-mobile.component.d.ts +9 -5
- package/esm2020/banner/sc-banner.component.mjs +3 -3
- package/esm2020/cart/cart-item-mobile/sc-cart-item-mobile.component.mjs +15 -17
- package/esm2020/order/order-item-mobile/sc-order-item-mobile.component.mjs +15 -19
- package/esm2020/samples/ask-to-sample-form/sc-ask-to-sample-form.component.mjs +20 -9
- package/esm2020/samples/sc-sample.module.mjs +10 -3
- package/fesm2015/snabcentr-client-ui.mjs +48 -38
- package/fesm2015/snabcentr-client-ui.mjs.map +1 -1
- package/fesm2020/snabcentr-client-ui.mjs +48 -36
- package/fesm2020/snabcentr-client-ui.mjs.map +1 -1
- package/order/order-item-mobile/sc-order-item-mobile.component.d.ts +9 -7
- package/package.json +3 -2
- package/release_notes.tmp +12 -1
- package/samples/ask-to-sample-form/sc-ask-to-sample-form.component.d.ts +8 -0
- package/samples/sc-sample.module.d.ts +2 -1
- package/styles/tailwind/tailwind.scss +18 -2
@@ -1,6 +1,6 @@
|
|
1
1
|
import { EventEmitter, OnInit } from '@angular/core';
|
2
2
|
import { FormControl } from '@angular/forms';
|
3
|
-
import { ScCartItem,
|
3
|
+
import { ScCartItem, ScProduct, ScUnitsHelper } from '@snabcentr/client-core';
|
4
4
|
import { TuiPreviewDialogService } from '@taiga-ui/addon-preview';
|
5
5
|
import { Observable } from 'rxjs';
|
6
6
|
import * as i0 from "@angular/core";
|
@@ -10,8 +10,6 @@ import * as i0 from "@angular/core";
|
|
10
10
|
export declare class ScCartItemMobileComponent implements OnInit {
|
11
11
|
readonly unitsHelper: ScUnitsHelper;
|
12
12
|
private readonly previewDialogService;
|
13
|
-
private readonly urls;
|
14
|
-
private readonly pathImageNotFound;
|
15
13
|
/**
|
16
14
|
* Элемент корзины.
|
17
15
|
*/
|
@@ -44,6 +42,10 @@ export declare class ScCartItemMobileComponent implements OnInit {
|
|
44
42
|
* Событие нажатия на карточку.
|
45
43
|
*/
|
46
44
|
clickCardEvent: EventEmitter<void>;
|
45
|
+
/**
|
46
|
+
* Хелпер для работы с изображениями товара.
|
47
|
+
*/
|
48
|
+
private readonly imageHelper;
|
47
49
|
/**
|
48
50
|
* Элемент корзины.
|
49
51
|
*/
|
@@ -56,7 +58,7 @@ export declare class ScCartItemMobileComponent implements OnInit {
|
|
56
58
|
* @param urls Список ссылок на разделы backend'a.
|
57
59
|
* @param pathImageNotFound Путь до изображения 'Товар не найден'.
|
58
60
|
*/
|
59
|
-
constructor(unitsHelper: ScUnitsHelper, previewDialogService: TuiPreviewDialogService
|
61
|
+
constructor(unitsHelper: ScUnitsHelper, previewDialogService: TuiPreviewDialogService);
|
60
62
|
/**
|
61
63
|
* Продукт элемента корзины.
|
62
64
|
*/
|
@@ -69,8 +71,10 @@ export declare class ScCartItemMobileComponent implements OnInit {
|
|
69
71
|
showSpecification(): void;
|
70
72
|
/**
|
71
73
|
* Возвращает ссылку на изображение карточки товара.
|
74
|
+
*
|
75
|
+
* @param product Позиция товара/услуги.
|
72
76
|
*/
|
73
|
-
getCardImage(): string;
|
77
|
+
getCardImage(product: ScProduct): string;
|
74
78
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScCartItemMobileComponent, never>;
|
75
79
|
static ɵcmp: i0.ɵɵComponentDeclaration<ScCartItemMobileComponent, "sc-cart-item-mobile", never, { "cartItem": "cartItem"; }, { "quantityValueChanges": "quantityValueChanges"; "clickDeleteEvent": "clickDeleteEvent"; "clickSettingsEvent": "clickSettingsEvent"; "clickCardEvent": "clickCardEvent"; }, never, never, false>;
|
76
80
|
}
|
@@ -178,14 +178,14 @@ let ScBannerComponent = class ScBannerComponent {
|
|
178
178
|
}
|
179
179
|
};
|
180
180
|
ScBannerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", 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 });
|
181
|
-
ScBannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", 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: { "class.!hidden": "this.isHidden", "style.height": "this.height", "style.width": "this.width", "style.aspect-ratio": "this.aspectRatio" } }, 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 class=\"bg-white w-full h-full shadow-sc-2 rounded-xl overflow-hidden\" [(index)]=\"currentBannerId\">\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=\"object-cover h-full\"\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 left-8 bottom-4\"\n >\n <i class=\"icon-refresh text-black\"></i>\n </button>\n </ng-container>\n\n <img *ngSwitchCase=\"'image'\" [src]=\"banner.mediaFile\" alt=\"\u0411\u0430\u043D\u043D\u0435\u0440\" class=\"object-cover h-full\" />\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div *tuiItem [style.height]=\"height\" [style.width]=\"width\" [style.aspect-ratio]=\"aspectRatio\" class=\"overflow-hidden\">\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n</ng-container>\n<div *ngIf=\"navigateButton && !disabled && this.banners && (this.bannersListRef.length + this.banners.length) > 1\" tuiMode=\"onLight\" class=\"flex items-center\">\n <button tuiIconButton icon=\"tuiIconChevronLeftLarge\" size=\"m\" shape=\"rounded\" appearance=\"flat\" (click)=\"onPreviousBanner()\" class=\"!absolute left-2\"></button>\n <button tuiIconButton icon=\"tuiIconChevronRightLarge\" size=\"m\" shape=\"rounded\" appearance=\"flat\" (click)=\"onNextBanner()\" class=\"!absolute right-2\"></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: "component", type: i4.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "component", type: i5.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange"] }, { kind: "directive", type: i5.TuiCarouselDirective, selector: "tui-carousel", inputs: ["duration", "index"] }, { kind: "directive", type: i6.TuiItemDirective, selector: "[tuiItem]" }, { kind: "directive", type: i4.TuiModeDirective, selector: "[tuiMode]", inputs: ["tuiMode"] }, { kind: "directive", type: i6.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], animations: [tuiFadeIn], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
181
|
+
ScBannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", 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: { "class.!hidden": "this.isHidden", "style.height": "this.height", "style.width": "this.width", "style.aspect-ratio": "this.aspectRatio" } }, 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 class=\"bg-white w-full h-full shadow-sc-2 rounded-xl overflow-hidden\" [(index)]=\"currentBannerId\">\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=\"object-cover h-full\"\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 left-8 bottom-4\"\n >\n <i class=\"icon-refresh text-black\"></i>\n </button>\n </ng-container>\n\n <img *ngSwitchCase=\"'image'\" [src]=\"banner.mediaFile\" alt=\"\u0411\u0430\u043D\u043D\u0435\u0440\" class=\"object-cover h-full\" />\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div *tuiItem [style.height]=\"height\" [style.width]=\"width\" [style.aspect-ratio]=\"aspectRatio\" class=\"overflow-hidden\">\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n</ng-container>\n<div *ngIf=\"navigateButton && !disabled && this.banners && (this.bannersListRef.length + this.banners.length) > 1\" tuiMode=\"onLight\" class=\"flex items-center\">\n <button tuiIconButton icon=\"tuiIconChevronLeftLarge\" size=\"m\" shape=\"rounded\" appearance=\"flat\" (click)=\"onPreviousBanner()\" class=\"!absolute left-2\"></button>\n <button tuiIconButton icon=\"tuiIconChevronRightLarge\" size=\"m\" shape=\"rounded\" appearance=\"flat\" (click)=\"onNextBanner()\" class=\"!absolute right-2\"></button>\n</div>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}::ng-deep tui-carousel .t-scroller{touch-action:auto!important}\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: "component", type: i4.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "component", type: i5.TuiCarouselComponent, selector: "tui-carousel", inputs: ["draggable", "itemsCount", "index"], outputs: ["indexChange"] }, { kind: "directive", type: i5.TuiCarouselDirective, selector: "tui-carousel", inputs: ["duration", "index"] }, { kind: "directive", type: i6.TuiItemDirective, selector: "[tuiItem]" }, { kind: "directive", type: i4.TuiModeDirective, selector: "[tuiMode]", inputs: ["tuiMode"] }, { kind: "directive", type: i6.TuiLetDirective, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], animations: [tuiFadeIn], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
182
182
|
ScBannerComponent = __decorate([
|
183
183
|
UntilDestroy({ checkProperties: true })
|
184
184
|
], ScBannerComponent);
|
185
185
|
export { ScBannerComponent };
|
186
186
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScBannerComponent, decorators: [{
|
187
187
|
type: Component,
|
188
|
-
args: [{ selector: 'sc-banner', changeDetection: ChangeDetectionStrategy.OnPush, providers: [IntersectionObserverService], animations: [tuiFadeIn], template: "<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel class=\"bg-white w-full h-full shadow-sc-2 rounded-xl overflow-hidden\" [(index)]=\"currentBannerId\">\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=\"object-cover h-full\"\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 left-8 bottom-4\"\n >\n <i class=\"icon-refresh text-black\"></i>\n </button>\n </ng-container>\n\n <img *ngSwitchCase=\"'image'\" [src]=\"banner.mediaFile\" alt=\"\u0411\u0430\u043D\u043D\u0435\u0440\" class=\"object-cover h-full\" />\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div *tuiItem [style.height]=\"height\" [style.width]=\"width\" [style.aspect-ratio]=\"aspectRatio\" class=\"overflow-hidden\">\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n</ng-container>\n<div *ngIf=\"navigateButton && !disabled && this.banners && (this.bannersListRef.length + this.banners.length) > 1\" tuiMode=\"onLight\" class=\"flex items-center\">\n <button tuiIconButton icon=\"tuiIconChevronLeftLarge\" size=\"m\" shape=\"rounded\" appearance=\"flat\" (click)=\"onPreviousBanner()\" class=\"!absolute left-2\"></button>\n <button tuiIconButton icon=\"tuiIconChevronRightLarge\" size=\"m\" shape=\"rounded\" appearance=\"flat\" (click)=\"onNextBanner()\" class=\"!absolute right-2\"></button>\n</div>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}\n"] }]
|
188
|
+
args: [{ selector: 'sc-banner', changeDetection: ChangeDetectionStrategy.OnPush, providers: [IntersectionObserverService], animations: [tuiFadeIn], template: "<ng-container *tuiLet=\"banners$ | async\">\n <tui-carousel class=\"bg-white w-full h-full shadow-sc-2 rounded-xl overflow-hidden\" [(index)]=\"currentBannerId\">\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=\"object-cover h-full\"\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 left-8 bottom-4\"\n >\n <i class=\"icon-refresh text-black\"></i>\n </button>\n </ng-container>\n\n <img *ngSwitchCase=\"'image'\" [src]=\"banner.mediaFile\" alt=\"\u0411\u0430\u043D\u043D\u0435\u0440\" class=\"object-cover h-full\" />\n </ng-container>\n </a>\n </ng-container>\n <ng-container *ngFor=\"let item of bannersListRef\">\n <div *tuiItem [style.height]=\"height\" [style.width]=\"width\" [style.aspect-ratio]=\"aspectRatio\" class=\"overflow-hidden\">\n <ng-container [ngTemplateOutlet]=\"item\"></ng-container>\n </div>\n </ng-container>\n </tui-carousel>\n</ng-container>\n<div *ngIf=\"navigateButton && !disabled && this.banners && (this.bannersListRef.length + this.banners.length) > 1\" tuiMode=\"onLight\" class=\"flex items-center\">\n <button tuiIconButton icon=\"tuiIconChevronLeftLarge\" size=\"m\" shape=\"rounded\" appearance=\"flat\" (click)=\"onPreviousBanner()\" class=\"!absolute left-2\"></button>\n <button tuiIconButton icon=\"tuiIconChevronRightLarge\" size=\"m\" shape=\"rounded\" appearance=\"flat\" (click)=\"onNextBanner()\" class=\"!absolute right-2\"></button>\n</div>\n", styles: [":host{--tui-carousel-padding: 0;display:flex;position:relative}::ng-deep tui-carousel .t-scroller{touch-action:auto!important}\n"] }]
|
189
189
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ScBannerService }, { type: i7.IntersectionObserverService, decorators: [{
|
190
190
|
type: Inject,
|
191
191
|
args: [IntersectionObserverService]
|
@@ -231,4 +231,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
231
231
|
type: HostListener,
|
232
232
|
args: ['mouseleave']
|
233
233
|
}] } });
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYmFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9iYW5uZXIvc2MtYmFubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9iYW5uZXIvc2MtYmFubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBNkIsc0JBQXNCLEVBQXdCLE1BQU0sd0JBQXdCLENBQUM7QUFDakgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFJMUc7O0dBRUc7QUFVSSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFpQjtJQTZJMUI7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFDcUIsR0FBc0IsRUFDdEIsYUFBOEIsRUFDTyxRQUFxQyxFQUN0RCxPQUE0QixFQUN6RCxXQUEwQixFQUNqQixrQkFBd0M7UUFMeEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQ08sYUFBUSxHQUFSLFFBQVEsQ0FBNkI7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QUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2UgfSBmcm9tICdAbmctd2ViLWFwaXMvaW50ZXJzZWN0aW9uLW9ic2VydmVyJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgU2NCYW5uZXIsIFNjQmFubmVyU2VydmljZSwgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSwgU2NVc2VyTWV0cmlrYVNlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IHR1aUZhZGVJbiB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgaW50ZXJ2YWwsIG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NQeENvbnZlcnRlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xuXG4vKipcbiAqINCR0LDQvdC90LXRgCDRgSDQv9GA0L7QutGA0YPRgtC60L7QuSDQv9C10YDQtdC00LDQvdC90YvRhSB7QGxpbmsgVGVtcGxhdGVSZWZ9INGN0LvQtdC80LXQvdGC0L7Qsiwg0Lgg0LHQsNC90L3QtdGA0L7QsiDQu9C+0LrQsNGG0LjQuC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1iYW5uZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1iYW5uZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NjLWJhbm5lci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW0ludGVyc2VjdGlvbk9ic2VydmVyU2VydmljZV0sXG4gICAgYW5pbWF0aW9uczogW3R1aUZhZGVJbl0sXG59KVxuQFVudGlsRGVzdHJveSh7IGNoZWNrUHJvcGVydGllczogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFNjQmFubmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQv9C+0LrQsNC30YvQstCw0YLRjCDQutC90L7Qv9C60Lgg0L3QsNCy0LjQs9Cw0YbQuNC4LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG5hdmlnYXRlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqINCY0L3RgtC10YDQstCw0Lsg0L/QvtC60LDQt9CwINGB0LvQsNC50LTQvtCyINCyINC80LjQu9C70LjRgdC10LrRg9C90LTQsNGFLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBsYXllckludGVydmFsOiBudW1iZXIgPSA1MDAwO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQv9GA0L7QutGA0YPRgtC60LAg0LLRi9C60LvRjtGH0LXQvdCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGJhbm5lckxvY2F0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQutC+0LzQv9C+0L3QtdC90YIg0LTQvtC70LbQtdC9INGA0LDRgdGC0Y/Qs9C40LLQsNGC0YzRgdGPLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlc2l6YWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQt9Cw0LPRgNGD0LfQutC4INCx0LDQvdC90LXRgNC+0LIg0YEg0LrQvtC70LjRh9C10YHRgtCy0L7QvCDQv9C+0LvRg9GH0LXQvdC90YvRhSDQsdCw0L3QvdC10YDQvtCyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsb2FkQmFubmVyc0V2ZW50OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0Jhbm5lckV2ZW50OiBFdmVudEVtaXR0ZXI8U2NCYW5uZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxTY0Jhbm5lcj4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L3QsCDRjdC70LXQvNC10L3RgiDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuSDRiNCw0LHQu9C+0L3QvtCyLlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2Jhbm5lcicpXG4gICAgcHVibGljIGJhbm5lcnNMaXN0UmVmOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0L3QsCB7QGxpbmsgSFRNTFZpZGVvRWxlbWVudH0g0Y3Qu9C10LzQtdC90YLQsCDQvtGC0L7QsdGA0LDQttC10L3QuNGPINCy0LjQtNC10L4uXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgndmlkZW9QbGF5ZXInKVxuICAgIHByaXZhdGUgdmlkZW9SZWY6IEVsZW1lbnRSZWY8SFRNTFZpZGVvRWxlbWVudD47XG5cbiAgICAvKipcbiAgICAgKiDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgtC10LrRg9GJ0LXQs9C+INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBjdXJyZW50QmFubmVySWQ6IG51bWJlciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU3ViamVjdH0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDRgtCw0LnQvNC10YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9nZ2xlVGltZXIkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0L/QvtC60LDQt9GL0LLQsNGC0Ywg0LrQvdC+0L/QutC4INGB0YLQsNGA0YLQsCDQstC40LTQtdC+INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93UGxheUJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC+0LHQvdC+0LLQu9C10L3QuNGPINGB0L/QuNGB0LrQsCDQsdCw0L3QvdC10YDQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBiYW5uZXJzJDogT2JzZXJ2YWJsZTxTY0Jhbm5lcltdPiA9IHRoaXMuYmFubmVyU2VydmljZS5iYW5uZXJzJC5waXBlKFxuICAgICAgICBtYXAoKGJhbm5lcnMpID0+IGJhbm5lcnMuZmlsdGVyKChiYW5uZXIpID0+IGJhbm5lci5sb2NhdGlvbiA9PT0gdGhpcy5iYW5uZXJMb2NhdGlvbikucmV2ZXJzZSgpKSxcbiAgICAgICAgdGFwKChiYW5uZXJzKSA9PiB7XG4gICAgICAgICAgICBpZiAoYmFubmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzaXphYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSAnMTAwJSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHt0aGlzLnB4Q29udmVydGVyLnB4VG9SZW0oYmFubmVyc1swXS5oZWlnaHQpfXJlbWA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSBgJHt0aGlzLnB4Q29udmVydGVyLnB4VG9SZW0oYmFubmVyc1swXS53aWR0aCl9cmVtYDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFzcGVjdFJhdGlvID0gYCR7YmFubmVyc1swXS53aWR0aH0gLyAke2Jhbm5lcnNbMF0uaGVpZ2h0fWA7XG4gICAgICAgICAgICAgICAgdGhpcy5iYW5uZXJzID0gYmFubmVycztcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVRpbWVyJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmxvYWRCYW5uZXJzRXZlbnQuZW1pdChiYW5uZXJzLmxlbmd0aCk7XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LHQsNC90L3QtdGA0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgYmFubmVycz86IFNjQmFubmVyW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqINCh0LLQvtC50YHRgtCy0L4sINC+0YIg0LrQvtGC0L7RgNC+0LPQviDQt9Cw0LLQuNGB0LjRgiDQvdCw0LvQuNGH0LjQtSDQutC70LDRgdGB0LAgYCFoaWRkZW5gINGDIGA6aG9zdGAg0LrQvtC80L/QvtC90LXQvdGC0LAuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy4haGlkZGVuJylcbiAgICBwcml2YXRlIGdldCBpc0hpZGRlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmJhbm5lcnMgfHwgdGhpcy5iYW5uZXJzTGlzdFJlZi5sZW5ndGggKyB0aGlzLmJhbm5lcnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0LLQvtC50YHRgtCy0L4sINC+0YIg0LrQvtGC0L7RgNC+0LPQviDQt9Cw0LLQuNGB0LjRgiDQstGL0YHQvtGC0LAgYDpob3N0YCDQutC+0LzQv9C+0L3QtdC90YLQsC5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodCcpXG4gICAgcHVibGljIGhlaWdodDogc3RyaW5nID0gJ2F1dG8nO1xuXG4gICAgLyoqXG4gICAgICog0KHQstC+0LnRgdGC0LLQviwg0L7RgiDQutC+0YLQvtGA0L7Qs9C+INC30LDQstC40YHQuNGCINGI0LjRgNC40L3QsCBgOmhvc3RgINC60L7QvNC/0L7QvdC10L3RgtCwLlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKVxuICAgIHB1YmxpYyB3aWR0aDogc3RyaW5nID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiDQodCy0L7QudGB0YLQstC+LCDQvtGCINC60L7RgtC+0YDQvtCz0L4g0LfQsNCy0LjRgdC40YIg0YHQvtC+0YLQvdC+0YjQtdC90LjQtSBgOmhvc3RgINC60L7QvNC/0L7QvdC10L3RgtCwLlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuYXNwZWN0LXJhdGlvJylcbiAgICBwdWJsaWMgYXNwZWN0UmF0aW86IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0YHQvtCx0YvRgtC40Y8gbW91c2VlbnRlci5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgICBwcml2YXRlIG1vdXNlRW50ZXJIYW5kbGVyOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZVRpbWVyJC5uZXh0KGZhbHNlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0YHQvtCx0YvRgtC40Y8gbW91c2VsZWF2ZS5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgICBwcml2YXRlIG1vdXNlTGVhdmVIYW5kbGVyOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZVRpbWVyJC5uZXh0KHRydWUpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQmFubmVyQ29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjZHIg0J7QsdGK0LXQutGCINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0L7QsdC90LDRgNGD0LbQtdC90LjQtdC8INC40LfQvNC10L3QtdC90LjQuS5cbiAgICAgKiBAcGFyYW0gYmFubmVyU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQsdCw0L3QvdC10YDQsNC80LguXG4gICAgICogQHBhcmFtIGVudHJpZXMkXG4gICAgICogQHBhcmFtIGVsZW1lbnQg0K3Qu9C10LzQtdC90YIg0LHQsNC90L3QtdGA0LAuXG4gICAgICogQHBhcmFtIHB4Q29udmVydGVyINCt0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAt0L/QvtC80L7RidC90LjQutCwINC00LvRjyDQutC+0L3QstC10YDRgtCw0YbQuNC4INC/0LjQutGB0LXQu9C10LkuXG4gICAgICogQHBhcmFtIHVzZXJNZXRyaWthU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGB0LHQvtGA0LAg0LzQtdGC0YDQuNC6INC+INC00LXQudGB0YLQstC40Y/RhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBiYW5uZXJTZXJ2aWNlOiBTY0Jhbm5lclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSW50ZXJzZWN0aW9uT2JzZXJ2ZXJTZXJ2aWNlKSBwcml2YXRlIHJlYWRvbmx5IGVudHJpZXMkOiBJbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRWxlbWVudFJlZikgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50OiBFbGVtZW50UmVmPEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHB4Q29udmVydGVyOiBTY1B4Q29udmVydGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJNZXRyaWthU2VydmljZTogU2NVc2VyTWV0cmlrYVNlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRvZ2dsZVRpbWVyJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCh0b2dnbGUpID0+IHRvZ2dsZSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGludGVydmFsKHRoaXMucGxheWVySW50ZXJ2YWwpLnBpcGUodGFrZVVudGlsKHRoaXMudG9nZ2xlVGltZXIkKSkpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5kaXNhYmxlZCAmJiAodGhpcy5iYW5uZXJzPy5bdGhpcy5jdXJyZW50QmFubmVySWRdPy5tZWRpYVR5cGUgPT09ICdpbWFnZScgfHwgdGhpcy5zaG93UGxheUJ0bikpLFxuICAgICAgICAgICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTmV4dEJhbm5lcigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g0J7RgtGB0LvQtdC20LjQstCw0L3QuNC1INC/0LXRgNC10YHQtdGH0LXQvdC40Y8g0LrQvtC80L/QvtC90LXQvdGC0LAg0YEg0Y3QutGA0LDQvdC+0Lwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAgICAvLyDQldGB0LvQuCDQsdCw0L3QvdC10YDQsCDQvdC1INC90LDRhdC+0LTQuNGC0YHRjyDQsiDQv9C+0LvQtSDQstC40LTQuNC80L7RgdGC0Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLCDRgtC+INC+0L0g0L/QtdGA0LXRgdGC0LDRkdGCINC/0LXRgNC10LrQu9GO0YfQsNGC0YzRgdGPLCDQsCDQstC40LTQtdC+INC+0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGC0YHRjy5cbiAgICAgICAgdGhpcy5lbnRyaWVzJC5waXBlKG1hcCgoZW50cmllcykgPT4gZW50cmllcy5maW5kKChpdGVtKSA9PiBpdGVtLnRhcmdldCA9PT0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKSkuc3Vic2NyaWJlKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVUaW1lciQubmV4dCghIWVudHJ5Py5pc0ludGVyc2VjdGluZyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10LrQu9GO0YfQsNC10YIg0L3QsCDQv9GA0LXQtNGL0LTRg9GJ0LjQuSDQsdCw0L3QvdC10YAuXG4gICAgICovXG4gICAgcHVibGljIG9uUHJldmlvdXNCYW5uZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzOiBudW1iZXIgPSB0aGlzLmN1cnJlbnRCYW5uZXJJZCAtIDE7XG4gICAgICAgIHRoaXMuY3VycmVudEJhbm5lcklkID0gcHJldmlvdXMgPCAwID8gdGhpcy5iYW5uZXJzTGlzdFJlZi5sZW5ndGggKyAodGhpcy5iYW5uZXJzPy5sZW5ndGggPz8gMCkgLSAxIDogcHJldmlvdXM7XG5cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXQutC70Y7Rh9Cw0LXRgiDQvdCwINGB0LvQtdC00YPRjtGJ0LjQuSDQsdCw0L3QvdC10YAuXG4gICAgICovXG4gICAgcHVibGljIG9uTmV4dEJhbm5lcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV4dDogbnVtYmVyID0gdGhpcy5jdXJyZW50QmFubmVySWQgKyAxO1xuICAgICAgICB0aGlzLmN1cnJlbnRCYW5uZXJJZCA9IG5leHQgPT09IHRoaXMuYmFubmVyc0xpc3RSZWYubGVuZ3RoICsgKHRoaXMuYmFubmVycz8ubGVuZ3RoID8/IDApID8gMCA6IG5leHQ7XG5cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXQutC70Y7Rh9Cw0LXRgiDQvdCwINGB0LvQtdC00YPRjtGJ0LjQuSDQsdCw0L3QvdC10YAuXG4gICAgICovXG4gICAgcHVibGljIG9uRW5kZWRWaWRlbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbk5leHRCYW5uZXIoKTtcbiAgICAgICAgdGhpcy50b2dnbGVUaW1lciQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5zaG93UGxheUJ0biA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0L3QsNC20LDRgtC40Y8g0L3QsCDQsdCw0L3QvdC10YAsINCz0LXQvdC10YDQuNGA0YPRjtGJ0LjQuSDRgdC+0LHRi9GC0LjQtSB7QGxpbmsgY2xpY2tCYW5uZXJJbWdFdmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmFubmVyINCR0LDQvdC90LXRgCwg0L/QviDRgdGB0YvQu9C60LUg0LrQvtGC0L7RgNC+0LPQviDRgdC+0LLQtdGA0YjRkdC9INC/0LXRgNC10YXQvtC0LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNsaWNrKGJhbm5lcjogU2NCYW5uZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLmJhbm5lckNsaWNrLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgYmFubmVyX2lkOiBiYW5uZXIuaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYmFubmVyLnVybCkge1xuICAgICAgICAgICAgdGhpcy5jbGlja0Jhbm5lckV2ZW50LmVtaXQoYmFubmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnR1aUxldD1cImJhbm5lcnMkIHwgYXN5bmNcIj5cbiAgICA8dHVpLWNhcm91c2VsIGNsYXNzPVwiYmctd2hpdGUgdy1mdWxsIGgtZnVsbCBzaGFkb3ctc2MtMiByb3VuZGVkLXhsIG92ZXJmbG93LWhpZGRlblwiIFsoaW5kZXgpXT1cImN1cnJlbnRCYW5uZXJJZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiYW5uZXIgb2YgYmFubmVyczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKnR1aUl0ZW1cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGljayhiYW5uZXIpXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYXNwZWN0LXJhdGlvXT1cImFzcGVjdFJhdGlvXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cImJhbm5lci51cmwgPyBiYW5uZXIudXJsIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiYmFubmVyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJiYW5uZXIubWVkaWFUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid2aWRlbydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICN2aWRlb1BsYXllclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdXNwZW5kKT1cInNob3dQbGF5QnRuID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBsYXkpPVwic2hvd1BsYXlCdG4gPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJiYW5uZXIubWVkaWFGaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5kZWQpPVwib25FbmRlZFZpZGVvKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwidmlkZW9QbGF5ZXIucGF1c2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlb3V0KT1cInZpZGVvUGxheWVyLnBsYXkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvYmplY3QtY292ZXIgaC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5XG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92aWRlbz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dQbGF5QnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW0B0dWlGYWRlSW5dPVwiMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRSaXBwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHZpZGVvUGxheWVyLnBsYXkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIWFic29sdXRlIGxlZnQtOCBib3R0b20tNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uLXJlZnJlc2ggdGV4dC1ibGFja1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgW3NyY109XCJiYW5uZXIubWVkaWFGaWxlXCIgYWx0PVwi0JHQsNC90L3QtdGAXCIgY2xhc3M9XCJvYmplY3QtY292ZXIgaC1mdWxsXCIgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYmFubmVyc0xpc3RSZWZcIj5cbiAgICAgICAgICAgIDxkaXYgKnR1aUl0ZW0gW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIiBbc3R5bGUuYXNwZWN0LXJhdGlvXT1cImFzcGVjdFJhdGlvXCIgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3R1aS1jYXJvdXNlbD5cbjwvbmctY29udGFpbmVyPlxuPGRpdiAqbmdJZj1cIm5hdmlnYXRlQnV0dG9uICYmICFkaXNhYmxlZCAmJiB0aGlzLmJhbm5lcnMgJiYgKHRoaXMuYmFubmVyc0xpc3RSZWYubGVuZ3RoICsgdGhpcy5iYW5uZXJzLmxlbmd0aCkgPiAxXCIgdHVpTW9kZT1cIm9uTGlnaHRcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgPGJ1dHRvbiB0dWlJY29uQnV0dG9uIGljb249XCJ0dWlJY29uQ2hldnJvbkxlZnRMYXJnZVwiIHNpemU9XCJtXCIgc2hhcGU9XCJyb3VuZGVkXCIgYXBwZWFyYW5jZT1cImZsYXRcIiAoY2xpY2spPVwib25QcmV2aW91c0Jhbm5lcigpXCIgY2xhc3M9XCIhYWJzb2x1dGUgbGVmdC0yXCI+PC9idXR0b24+XG4gICAgPGJ1dHRvbiB0dWlJY29uQnV0dG9uIGljb249XCJ0dWlJY29uQ2hldnJvblJpZ2h0TGFyZ2VcIiBzaXplPVwibVwiIHNoYXBlPVwicm91bmRlZFwiIGFwcGVhcmFuY2U9XCJmbGF0XCIgKGNsaWNrKT1cIm9uTmV4dEJhbm5lcigpXCIgY2xhc3M9XCIhYWJzb2x1dGUgcmlnaHQtMlwiPjwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYmFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9iYW5uZXIvc2MtYmFubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9iYW5uZXIvc2MtYmFubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBNkIsc0JBQXNCLEVBQXdCLE1BQU0sd0JBQXdCLENBQUM7QUFDakgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFJMUc7O0dBRUc7QUFVSSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFpQjtJQTZJMUI7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFDcUIsR0FBc0IsRUFDdEIsYUFBOEIsRUFDTyxRQUFxQyxFQUN0RCxPQUE0QixFQUN6RCxXQUEwQixFQUNqQixrQkFBd0M7UUFMeEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQ08sYUFBUSxHQUFSLFFBQVEsQ0FBNkI7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QUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2UgfSBmcm9tICdAbmctd2ViLWFwaXMvaW50ZXJzZWN0aW9uLW9ic2VydmVyJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgU2NCYW5uZXIsIFNjQmFubmVyU2VydmljZSwgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSwgU2NVc2VyTWV0cmlrYVNlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IHR1aUZhZGVJbiB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgaW50ZXJ2YWwsIG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NQeENvbnZlcnRlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xuXG4vKipcbiAqINCR0LDQvdC90LXRgCDRgSDQv9GA0L7QutGA0YPRgtC60L7QuSDQv9C10YDQtdC00LDQvdC90YvRhSB7QGxpbmsgVGVtcGxhdGVSZWZ9INGN0LvQtdC80LXQvdGC0L7Qsiwg0Lgg0LHQsNC90L3QtdGA0L7QsiDQu9C+0LrQsNGG0LjQuC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1iYW5uZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1iYW5uZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NjLWJhbm5lci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW0ludGVyc2VjdGlvbk9ic2VydmVyU2VydmljZV0sXG4gICAgYW5pbWF0aW9uczogW3R1aUZhZGVJbl0sXG59KVxuQFVudGlsRGVzdHJveSh7IGNoZWNrUHJvcGVydGllczogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFNjQmFubmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQv9C+0LrQsNC30YvQstCw0YLRjCDQutC90L7Qv9C60Lgg0L3QsNCy0LjQs9Cw0YbQuNC4LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG5hdmlnYXRlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqINCY0L3RgtC10YDQstCw0Lsg0L/QvtC60LDQt9CwINGB0LvQsNC50LTQvtCyINCyINC80LjQu9C70LjRgdC10LrRg9C90LTQsNGFLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBsYXllckludGVydmFsOiBudW1iZXIgPSA1MDAwO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQv9GA0L7QutGA0YPRgtC60LAg0LLRi9C60LvRjtGH0LXQvdCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGJhbm5lckxvY2F0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQutC+0LzQv9C+0L3QtdC90YIg0LTQvtC70LbQtdC9INGA0LDRgdGC0Y/Qs9C40LLQsNGC0YzRgdGPLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlc2l6YWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQt9Cw0LPRgNGD0LfQutC4INCx0LDQvdC90LXRgNC+0LIg0YEg0LrQvtC70LjRh9C10YHRgtCy0L7QvCDQv9C+0LvRg9GH0LXQvdC90YvRhSDQsdCw0L3QvdC10YDQvtCyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsb2FkQmFubmVyc0V2ZW50OiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0Jhbm5lckV2ZW50OiBFdmVudEVtaXR0ZXI8U2NCYW5uZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxTY0Jhbm5lcj4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L3QsCDRjdC70LXQvNC10L3RgiDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuSDRiNCw0LHQu9C+0L3QvtCyLlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2Jhbm5lcicpXG4gICAgcHVibGljIGJhbm5lcnNMaXN0UmVmOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0L3QsCB7QGxpbmsgSFRNTFZpZGVvRWxlbWVudH0g0Y3Qu9C10LzQtdC90YLQsCDQvtGC0L7QsdGA0LDQttC10L3QuNGPINCy0LjQtNC10L4uXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgndmlkZW9QbGF5ZXInKVxuICAgIHByaXZhdGUgdmlkZW9SZWY6IEVsZW1lbnRSZWY8SFRNTFZpZGVvRWxlbWVudD47XG5cbiAgICAvKipcbiAgICAgKiDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgtC10LrRg9GJ0LXQs9C+INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBjdXJyZW50QmFubmVySWQ6IG51bWJlciA9IDA7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU3ViamVjdH0g0LjQt9C80LXQvdC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDRgtCw0LnQvNC10YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9nZ2xlVGltZXIkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0L/QvtC60LDQt9GL0LLQsNGC0Ywg0LrQvdC+0L/QutC4INGB0YLQsNGA0YLQsCDQstC40LTQtdC+INCx0LDQvdC90LXRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93UGxheUJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC+0LHQvdC+0LLQu9C10L3QuNGPINGB0L/QuNGB0LrQsCDQsdCw0L3QvdC10YDQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBiYW5uZXJzJDogT2JzZXJ2YWJsZTxTY0Jhbm5lcltdPiA9IHRoaXMuYmFubmVyU2VydmljZS5iYW5uZXJzJC5waXBlKFxuICAgICAgICBtYXAoKGJhbm5lcnMpID0+IGJhbm5lcnMuZmlsdGVyKChiYW5uZXIpID0+IGJhbm5lci5sb2NhdGlvbiA9PT0gdGhpcy5iYW5uZXJMb2NhdGlvbikucmV2ZXJzZSgpKSxcbiAgICAgICAgdGFwKChiYW5uZXJzKSA9PiB7XG4gICAgICAgICAgICBpZiAoYmFubmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzaXphYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSAnMTAwJSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHt0aGlzLnB4Q29udmVydGVyLnB4VG9SZW0oYmFubmVyc1swXS5oZWlnaHQpfXJlbWA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSBgJHt0aGlzLnB4Q29udmVydGVyLnB4VG9SZW0oYmFubmVyc1swXS53aWR0aCl9cmVtYDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFzcGVjdFJhdGlvID0gYCR7YmFubmVyc1swXS53aWR0aH0gLyAke2Jhbm5lcnNbMF0uaGVpZ2h0fWA7XG4gICAgICAgICAgICAgICAgdGhpcy5iYW5uZXJzID0gYmFubmVycztcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVRpbWVyJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmxvYWRCYW5uZXJzRXZlbnQuZW1pdChiYW5uZXJzLmxlbmd0aCk7XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LHQsNC90L3QtdGA0L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgYmFubmVycz86IFNjQmFubmVyW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqINCh0LLQvtC50YHRgtCy0L4sINC+0YIg0LrQvtGC0L7RgNC+0LPQviDQt9Cw0LLQuNGB0LjRgiDQvdCw0LvQuNGH0LjQtSDQutC70LDRgdGB0LAgYCFoaWRkZW5gINGDIGA6aG9zdGAg0LrQvtC80L/QvtC90LXQvdGC0LAuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy4haGlkZGVuJylcbiAgICBwcml2YXRlIGdldCBpc0hpZGRlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmJhbm5lcnMgfHwgdGhpcy5iYW5uZXJzTGlzdFJlZi5sZW5ndGggKyB0aGlzLmJhbm5lcnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0LLQvtC50YHRgtCy0L4sINC+0YIg0LrQvtGC0L7RgNC+0LPQviDQt9Cw0LLQuNGB0LjRgiDQstGL0YHQvtGC0LAgYDpob3N0YCDQutC+0LzQv9C+0L3QtdC90YLQsC5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmhlaWdodCcpXG4gICAgcHVibGljIGhlaWdodDogc3RyaW5nID0gJ2F1dG8nO1xuXG4gICAgLyoqXG4gICAgICog0KHQstC+0LnRgdGC0LLQviwg0L7RgiDQutC+0YLQvtGA0L7Qs9C+INC30LDQstC40YHQuNGCINGI0LjRgNC40L3QsCBgOmhvc3RgINC60L7QvNC/0L7QvdC10L3RgtCwLlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKVxuICAgIHB1YmxpYyB3aWR0aDogc3RyaW5nID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiDQodCy0L7QudGB0YLQstC+LCDQvtGCINC60L7RgtC+0YDQvtCz0L4g0LfQsNCy0LjRgdC40YIg0YHQvtC+0YLQvdC+0YjQtdC90LjQtSBgOmhvc3RgINC60L7QvNC/0L7QvdC10L3RgtCwLlxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuYXNwZWN0LXJhdGlvJylcbiAgICBwdWJsaWMgYXNwZWN0UmF0aW86IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0YHQvtCx0YvRgtC40Y8gbW91c2VlbnRlci5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgICBwcml2YXRlIG1vdXNlRW50ZXJIYW5kbGVyOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZVRpbWVyJC5uZXh0KGZhbHNlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0YHQvtCx0YvRgtC40Y8gbW91c2VsZWF2ZS5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJylcbiAgICBwcml2YXRlIG1vdXNlTGVhdmVIYW5kbGVyOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZVRpbWVyJC5uZXh0KHRydWUpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQmFubmVyQ29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjZHIg0J7QsdGK0LXQutGCINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0L7QsdC90LDRgNGD0LbQtdC90LjQtdC8INC40LfQvNC10L3QtdC90LjQuS5cbiAgICAgKiBAcGFyYW0gYmFubmVyU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQsdCw0L3QvdC10YDQsNC80LguXG4gICAgICogQHBhcmFtIGVudHJpZXMkXG4gICAgICogQHBhcmFtIGVsZW1lbnQg0K3Qu9C10LzQtdC90YIg0LHQsNC90L3QtdGA0LAuXG4gICAgICogQHBhcmFtIHB4Q29udmVydGVyINCt0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAt0L/QvtC80L7RidC90LjQutCwINC00LvRjyDQutC+0L3QstC10YDRgtCw0YbQuNC4INC/0LjQutGB0LXQu9C10LkuXG4gICAgICogQHBhcmFtIHVzZXJNZXRyaWthU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGB0LHQvtGA0LAg0LzQtdGC0YDQuNC6INC+INC00LXQudGB0YLQstC40Y/RhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBiYW5uZXJTZXJ2aWNlOiBTY0Jhbm5lclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSW50ZXJzZWN0aW9uT2JzZXJ2ZXJTZXJ2aWNlKSBwcml2YXRlIHJlYWRvbmx5IGVudHJpZXMkOiBJbnRlcnNlY3Rpb25PYnNlcnZlclNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRWxlbWVudFJlZikgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50OiBFbGVtZW50UmVmPEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHB4Q29udmVydGVyOiBTY1B4Q29udmVydGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJNZXRyaWthU2VydmljZTogU2NVc2VyTWV0cmlrYVNlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRvZ2dsZVRpbWVyJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCh0b2dnbGUpID0+IHRvZ2dsZSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGludGVydmFsKHRoaXMucGxheWVySW50ZXJ2YWwpLnBpcGUodGFrZVVudGlsKHRoaXMudG9nZ2xlVGltZXIkKSkpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5kaXNhYmxlZCAmJiAodGhpcy5iYW5uZXJzPy5bdGhpcy5jdXJyZW50QmFubmVySWRdPy5tZWRpYVR5cGUgPT09ICdpbWFnZScgfHwgdGhpcy5zaG93UGxheUJ0bikpLFxuICAgICAgICAgICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTmV4dEJhbm5lcigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g0J7RgtGB0LvQtdC20LjQstCw0L3QuNC1INC/0LXRgNC10YHQtdGH0LXQvdC40Y8g0LrQvtC80L/QvtC90LXQvdGC0LAg0YEg0Y3QutGA0LDQvdC+0Lwg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAgICAvLyDQldGB0LvQuCDQsdCw0L3QvdC10YDQsCDQvdC1INC90LDRhdC+0LTQuNGC0YHRjyDQsiDQv9C+0LvQtSDQstC40LTQuNC80L7RgdGC0Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLCDRgtC+INC+0L0g0L/QtdGA0LXRgdGC0LDRkdGCINC/0LXRgNC10LrQu9GO0YfQsNGC0YzRgdGPLCDQsCDQstC40LTQtdC+INC+0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGC0YHRjy5cbiAgICAgICAgdGhpcy5lbnRyaWVzJC5waXBlKG1hcCgoZW50cmllcykgPT4gZW50cmllcy5maW5kKChpdGVtKSA9PiBpdGVtLnRhcmdldCA9PT0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKSkuc3Vic2NyaWJlKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVUaW1lciQubmV4dCghIWVudHJ5Py5pc0ludGVyc2VjdGluZyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10LrQu9GO0YfQsNC10YIg0L3QsCDQv9GA0LXQtNGL0LTRg9GJ0LjQuSDQsdCw0L3QvdC10YAuXG4gICAgICovXG4gICAgcHVibGljIG9uUHJldmlvdXNCYW5uZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzOiBudW1iZXIgPSB0aGlzLmN1cnJlbnRCYW5uZXJJZCAtIDE7XG4gICAgICAgIHRoaXMuY3VycmVudEJhbm5lcklkID0gcHJldmlvdXMgPCAwID8gdGhpcy5iYW5uZXJzTGlzdFJlZi5sZW5ndGggKyAodGhpcy5iYW5uZXJzPy5sZW5ndGggPz8gMCkgLSAxIDogcHJldmlvdXM7XG5cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXQutC70Y7Rh9Cw0LXRgiDQvdCwINGB0LvQtdC00YPRjtGJ0LjQuSDQsdCw0L3QvdC10YAuXG4gICAgICovXG4gICAgcHVibGljIG9uTmV4dEJhbm5lcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV4dDogbnVtYmVyID0gdGhpcy5jdXJyZW50QmFubmVySWQgKyAxO1xuICAgICAgICB0aGlzLmN1cnJlbnRCYW5uZXJJZCA9IG5leHQgPT09IHRoaXMuYmFubmVyc0xpc3RSZWYubGVuZ3RoICsgKHRoaXMuYmFubmVycz8ubGVuZ3RoID8/IDApID8gMCA6IG5leHQ7XG5cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXQutC70Y7Rh9Cw0LXRgiDQvdCwINGB0LvQtdC00YPRjtGJ0LjQuSDQsdCw0L3QvdC10YAuXG4gICAgICovXG4gICAgcHVibGljIG9uRW5kZWRWaWRlbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbk5leHRCYW5uZXIoKTtcbiAgICAgICAgdGhpcy50b2dnbGVUaW1lciQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5zaG93UGxheUJ0biA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7QsdGA0LDQsdC+0YLRh9C40Log0L3QsNC20LDRgtC40Y8g0L3QsCDQsdCw0L3QvdC10YAsINCz0LXQvdC10YDQuNGA0YPRjtGJ0LjQuSDRgdC+0LHRi9GC0LjQtSB7QGxpbmsgY2xpY2tCYW5uZXJJbWdFdmVudH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYmFubmVyINCR0LDQvdC90LXRgCwg0L/QviDRgdGB0YvQu9C60LUg0LrQvtGC0L7RgNC+0LPQviDRgdC+0LLQtdGA0YjRkdC9INC/0LXRgNC10YXQvtC0LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNsaWNrKGJhbm5lcjogU2NCYW5uZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLmJhbm5lckNsaWNrLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgYmFubmVyX2lkOiBiYW5uZXIuaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYmFubmVyLnVybCkge1xuICAgICAgICAgICAgdGhpcy5jbGlja0Jhbm5lckV2ZW50LmVtaXQoYmFubmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnR1aUxldD1cImJhbm5lcnMkIHwgYXN5bmNcIj5cbiAgICA8dHVpLWNhcm91c2VsIGNsYXNzPVwiYmctd2hpdGUgdy1mdWxsIGgtZnVsbCBzaGFkb3ctc2MtMiByb3VuZGVkLXhsIG92ZXJmbG93LWhpZGRlblwiIFsoaW5kZXgpXT1cImN1cnJlbnRCYW5uZXJJZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiYW5uZXIgb2YgYmFubmVyczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKnR1aUl0ZW1cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGljayhiYW5uZXIpXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYXNwZWN0LXJhdGlvXT1cImFzcGVjdFJhdGlvXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cImJhbm5lci51cmwgPyBiYW5uZXIudXJsIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiYmFubmVyLnRpdGxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJiYW5uZXIubWVkaWFUeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid2aWRlbydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICN2aWRlb1BsYXllclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdXNwZW5kKT1cInNob3dQbGF5QnRuID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBsYXkpPVwic2hvd1BsYXlCdG4gPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJiYW5uZXIubWVkaWFGaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5kZWQpPVwib25FbmRlZFZpZGVvKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwidmlkZW9QbGF5ZXIucGF1c2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlb3V0KT1cInZpZGVvUGxheWVyLnBsYXkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvYmplY3QtY292ZXIgaC1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5XG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92aWRlbz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dQbGF5QnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW0B0dWlGYWRlSW5dPVwiMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRSaXBwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHZpZGVvUGxheWVyLnBsYXkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIWFic29sdXRlIGxlZnQtOCBib3R0b20tNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uLXJlZnJlc2ggdGV4dC1ibGFja1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgW3NyY109XCJiYW5uZXIubWVkaWFGaWxlXCIgYWx0PVwi0JHQsNC90L3QtdGAXCIgY2xhc3M9XCJvYmplY3QtY292ZXIgaC1mdWxsXCIgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYmFubmVyc0xpc3RSZWZcIj5cbiAgICAgICAgICAgIDxkaXYgKnR1aUl0ZW0gW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIiBbc3R5bGUuYXNwZWN0LXJhdGlvXT1cImFzcGVjdFJhdGlvXCIgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3R1aS1jYXJvdXNlbD5cbjwvbmctY29udGFpbmVyPlxuPGRpdiAqbmdJZj1cIm5hdmlnYXRlQnV0dG9uICYmICFkaXNhYmxlZCAmJiB0aGlzLmJhbm5lcnMgJiYgKHRoaXMuYmFubmVyc0xpc3RSZWYubGVuZ3RoICsgdGhpcy5iYW5uZXJzLmxlbmd0aCkgPiAxXCIgdHVpTW9kZT1cIm9uTGlnaHRcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgPGJ1dHRvbiB0dWlJY29uQnV0dG9uIGljb249XCJ0dWlJY29uQ2hldnJvbkxlZnRMYXJnZVwiIHNpemU9XCJtXCIgc2hhcGU9XCJyb3VuZGVkXCIgYXBwZWFyYW5jZT1cImZsYXRcIiAoY2xpY2spPVwib25QcmV2aW91c0Jhbm5lcigpXCIgY2xhc3M9XCIhYWJzb2x1dGUgbGVmdC0yXCI+PC9idXR0b24+XG4gICAgPGJ1dHRvbiB0dWlJY29uQnV0dG9uIGljb249XCJ0dWlJY29uQ2hldnJvblJpZ2h0TGFyZ2VcIiBzaXplPVwibVwiIHNoYXBlPVwicm91bmRlZFwiIGFwcGVhcmFuY2U9XCJmbGF0XCIgKGNsaWNrKT1cIm9uTmV4dEJhbm5lcigpXCIgY2xhc3M9XCIhYWJzb2x1dGUgcmlnaHQtMlwiPjwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* eslint-disable no-underscore-dangle */
|
2
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
|
2
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, inject, Input, Output, ViewChild } from '@angular/core';
|
3
3
|
import { FormControl } from '@angular/forms';
|
4
|
-
import {
|
4
|
+
import { ScImageHelper } from '@snabcentr/client-core';
|
5
5
|
import { TuiPreviewDialogService } from '@taiga-ui/addon-preview';
|
6
6
|
import { skip } from 'rxjs';
|
7
7
|
import * as i0 from "@angular/core";
|
@@ -26,11 +26,9 @@ export class ScCartItemMobileComponent {
|
|
26
26
|
* @param urls Список ссылок на разделы backend'a.
|
27
27
|
* @param pathImageNotFound Путь до изображения 'Товар не найден'.
|
28
28
|
*/
|
29
|
-
constructor(unitsHelper, previewDialogService
|
29
|
+
constructor(unitsHelper, previewDialogService) {
|
30
30
|
this.unitsHelper = unitsHelper;
|
31
31
|
this.previewDialogService = previewDialogService;
|
32
|
-
this.urls = urls;
|
33
|
-
this.pathImageNotFound = pathImageNotFound;
|
34
32
|
/**
|
35
33
|
* {@link FormControl} поля ввода количества товара в корзине.
|
36
34
|
*/
|
@@ -51,6 +49,10 @@ export class ScCartItemMobileComponent {
|
|
51
49
|
* Событие нажатия на карточку.
|
52
50
|
*/
|
53
51
|
this.clickCardEvent = new EventEmitter();
|
52
|
+
/**
|
53
|
+
* Хелпер для работы с изображениями товара.
|
54
|
+
*/
|
55
|
+
this.imageHelper = inject(ScImageHelper);
|
54
56
|
}
|
55
57
|
/**
|
56
58
|
* Элемент корзины.
|
@@ -85,25 +87,21 @@ export class ScCartItemMobileComponent {
|
|
85
87
|
}
|
86
88
|
/**
|
87
89
|
* Возвращает ссылку на изображение карточки товара.
|
90
|
+
*
|
91
|
+
* @param product Позиция товара/услуги.
|
88
92
|
*/
|
89
|
-
getCardImage() {
|
90
|
-
return this.product
|
93
|
+
getCardImage(product) {
|
94
|
+
return this.imageHelper.getImage(product);
|
91
95
|
}
|
92
96
|
}
|
93
|
-
ScCartItemMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, deps: [{ token: i1.ScUnitsHelper }, { token: TuiPreviewDialogService }
|
94
|
-
ScCartItemMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCartItemMobileComponent, selector: "sc-cart-item-mobile", inputs: { cartItem: "cartItem" }, outputs: { quantityValueChanges: "quantityValueChanges", clickDeleteEvent: "clickDeleteEvent", clickSettingsEvent: "clickSettingsEvent", clickCardEvent: "clickCardEvent" }, viewQueries: [{ propertyName: "specificationPreviewRef", first: true, predicate: ["specificationPreview"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"cartItem && product; else skeleton\">\n <!-- TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton size=\"m\" icon=\"scIconVerticalThreeDots\" appearance=\"float\" class=\"!absolute right-0 top-0\"></button> -->\n <div class=\"flex min-w-72 gap-2 rounded-xl border border-tui-base-04 bg-white p-2 shadow-sc-2\">\n <div class=\"flex w-40 items-center\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage()\"\n [alt]=\"product.name\"\n class=\"max-h-full w-full rounded-xl object-cover\"\n />\n </div>\n <div class=\"flex w-full flex-col items-center justify-between gap-2 sm:flex-row sm:gap-5\">\n <div class=\"flex max-w-full flex-col gap-1 self-start\">\n <a\n tuiLink\n (click)=\"clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n\n <div class=\"flex w-full flex-wrap gap-x-2 gap-y-1 text-xs text-tui-base-05\">\n <p *ngIf=\"product.pack\">\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n <tui-svg\n *ngIf=\"product.ignoreMinCountCheck\"\n src=\"tuiIconPackage\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n ></tui-svg>\n <ng-template #minCountHint>\n \u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0437\u0430\u043A\u0430\u0437 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u044C\u043D\u043E\u0433\u043E <br />\n \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430\n </ng-template>\n </p>\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n </div>\n\n <div class=\"flex w-full flex-wrap items-center gap-x-2 gap-y-1\">\n <p\n *ngIf=\"!product.priceInRub\"\n class=\"font-bold\"\n >\n {{ product.costString }}\n </p>\n <p class=\"text-xs font-bold text-tui-base-05\">{{ product.costRubString }}</p>\n <span\n *ngIf=\"product.discount\"\n class=\"flex items-center\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> \n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <tui-svg\n src=\"tuiIconInfoLarge\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"!h-4 !text-xs\"\n ></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n </div>\n\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n\n <div\n *ngIf=\"cartItem.height || cartItem.length || cartItem.width\"\n class=\"flex items-center gap-1\"\n >\n <button\n tuiIconButton\n icon=\"tuiIconSettings\"\n (click)=\"clickSettingsEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-wrap gap-x-2 text-xs font-thin text-tui-base-04\">\n <p *ngIf=\"cartItem.marker\">\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ cartItem.marker }}</p>\n <p *ngIf=\"cartItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ cartItem.width }} \u043C.</p>\n <ng-container *ngIf=\"cartItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ cartItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"cartItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} \u043C.</p>\n </ng-template>\n </div>\n </div>\n\n <a\n tuiLink\n *ngIf=\"cartItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a\n >\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"cartItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"cartItem.specificationImgUrl\"\n />\n <button\n icon=\"tuiIconClose\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"flex flex-col gap-1 self-start sm:mr-9 sm:self-center\">\n <div class=\"flex gap-2\">\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"quantityControl\"\n [formControl]=\"quantityControl\"\n [showCross]=\"false\"\n size=\"s\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-28\"\n ></sc-input-quantity>\n <button\n tuiIconButton\n icon=\"tuiIconTrash2\"\n shape=\"rounded\"\n size=\"xs\"\n (click)=\"clickDeleteEvent.emit()\"\n ></button>\n </div>\n <p class=\"text-sm font-bold text-tui-text-01\">\u0418\u0442\u043E\u0433\u043E: {{ cartItem.costRub | tuiFormatNumber }} {{ 'RUB' | tuiCurrency }}</p>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #skeleton>\n <div class=\"flex w-full gap-2\">\n <div class=\"size-20 rounded-xl bg-tui-base-02\"></div>\n <div class=\"flex grow flex-col gap-2.5 bg-white\">\n <div class=\"h-4 w-full rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-4/5 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "component", type: i4.ScInputQuantityComponent, selector: "sc-input-quantity", inputs: ["step", "showLoader", "showCross", "ignoreStepValidators", "appearance", "isDisabled", "size"], outputs: ["clickClearEvent"] }, { kind: "component", type: i5.ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { kind: "component", type: i3.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "component", type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i3.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHint", "tuiHintContext", "tuiHintAppearance"] }, { kind: "directive", type: i3.TuiHintDriverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)" }, { kind: "directive", type: i3.TuiHintHoverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintShowDelay", "tuiHintHideDelay"], exportAs: ["tuiHintHover"] }, { kind: "directive", type: i3.TuiHintPositionDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintDirection"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { kind: "directive", type: i7.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }, { kind: "directive", type: i8.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "pipe", type: i9.TuiCurrencyPipe, name: "tuiCurrency" }, { kind: "pipe", type: i3.TuiFormatNumberPipe, name: "tuiFormatNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
97
|
+
ScCartItemMobileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, deps: [{ token: i1.ScUnitsHelper }, { token: TuiPreviewDialogService }], target: i0.ɵɵFactoryTarget.Component });
|
98
|
+
ScCartItemMobileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScCartItemMobileComponent, selector: "sc-cart-item-mobile", inputs: { cartItem: "cartItem" }, outputs: { quantityValueChanges: "quantityValueChanges", clickDeleteEvent: "clickDeleteEvent", clickSettingsEvent: "clickSettingsEvent", clickCardEvent: "clickCardEvent" }, viewQueries: [{ propertyName: "specificationPreviewRef", first: true, predicate: ["specificationPreview"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"cartItem && product; else skeleton\">\n <!-- TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton size=\"m\" icon=\"scIconVerticalThreeDots\" appearance=\"float\" class=\"!absolute right-0 top-0\"></button> -->\n <div class=\"flex min-w-72 gap-2 rounded-xl border border-tui-base-04 bg-white p-2 shadow-sc-2\">\n <div class=\"flex w-40 items-center\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage(product)\"\n [alt]=\"product.name\"\n class=\"max-h-full w-full rounded-xl object-cover\"\n />\n </div>\n <div class=\"flex w-full flex-col items-center justify-between gap-2 sm:flex-row sm:gap-5\">\n <div class=\"flex max-w-full flex-col gap-1 self-start\">\n <a\n tuiLink\n (click)=\"clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n\n <div class=\"flex w-full flex-wrap gap-x-2 gap-y-1 text-xs text-tui-base-05\">\n <p *ngIf=\"product.pack\">\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n <tui-svg\n *ngIf=\"product.ignoreMinCountCheck\"\n src=\"tuiIconPackage\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n ></tui-svg>\n <ng-template #minCountHint>\n \u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0437\u0430\u043A\u0430\u0437 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u044C\u043D\u043E\u0433\u043E <br />\n \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430\n </ng-template>\n </p>\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n </div>\n\n <div class=\"flex w-full flex-wrap items-center gap-x-2 gap-y-1\">\n <p\n *ngIf=\"!product.priceInRub\"\n class=\"font-bold\"\n >\n {{ product.costString }}\n </p>\n <p class=\"text-xs font-bold text-tui-base-05\">{{ product.costRubString }}</p>\n <span\n *ngIf=\"product.discount\"\n class=\"flex items-center\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> \n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <tui-svg\n src=\"tuiIconInfoLarge\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"!h-4 !text-xs\"\n ></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n </div>\n\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n\n <div\n *ngIf=\"cartItem.height || cartItem.length || cartItem.width\"\n class=\"flex items-center gap-1\"\n >\n <button\n tuiIconButton\n icon=\"tuiIconSettings\"\n (click)=\"clickSettingsEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-wrap gap-x-2 text-xs font-thin text-tui-base-04\">\n <p *ngIf=\"cartItem.marker\">\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ cartItem.marker }}</p>\n <p *ngIf=\"cartItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ cartItem.width }} \u043C.</p>\n <ng-container *ngIf=\"cartItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ cartItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"cartItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} \u043C.</p>\n </ng-template>\n </div>\n </div>\n\n <a\n tuiLink\n *ngIf=\"cartItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a\n >\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"cartItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"cartItem.specificationImgUrl\"\n />\n <button\n icon=\"tuiIconClose\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"flex flex-col gap-1 self-start sm:mr-9 sm:self-center\">\n <div class=\"flex gap-2\">\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"quantityControl\"\n [formControl]=\"quantityControl\"\n [showCross]=\"false\"\n size=\"s\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-28\"\n ></sc-input-quantity>\n <button\n tuiIconButton\n icon=\"tuiIconTrash2\"\n shape=\"rounded\"\n size=\"xs\"\n (click)=\"clickDeleteEvent.emit()\"\n ></button>\n </div>\n <p class=\"text-sm font-bold text-tui-text-01\">\u0418\u0442\u043E\u0433\u043E: {{ cartItem.costRub | tuiFormatNumber }} {{ 'RUB' | tuiCurrency }}</p>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #skeleton>\n <div class=\"flex w-full gap-2\">\n <div class=\"size-20 rounded-xl bg-tui-base-02\"></div>\n <div class=\"flex grow flex-col gap-2.5 bg-white\">\n <div class=\"h-4 w-full rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-4/5 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TuiLinkComponent, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo", "icon", "iconAlign", "iconRotated", "mode"], exportAs: ["tuiLink"] }, { kind: "component", type: i4.ScInputQuantityComponent, selector: "sc-input-quantity", inputs: ["step", "showLoader", "showCross", "ignoreStepValidators", "appearance", "isDisabled", "size"], outputs: ["clickClearEvent"] }, { kind: "component", type: i5.ScPriceWarehouseStockComponent, selector: "sc-price-warehouse-stock", inputs: ["classList", "product", "withStockHint", "fromMain"] }, { kind: "component", type: i3.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { kind: "component", type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { kind: "directive", type: i3.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHint", "tuiHintContext", "tuiHintAppearance"] }, { kind: "directive", type: i3.TuiHintDriverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)" }, { kind: "directive", type: i3.TuiHintHoverDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintShowDelay", "tuiHintHideDelay"], exportAs: ["tuiHintHover"] }, { kind: "directive", type: i3.TuiHintPositionDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintDirection"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { kind: "directive", type: i7.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }, { kind: "directive", type: i8.PolymorpheusOutletDirective, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "pipe", type: i9.TuiCurrencyPipe, name: "tuiCurrency" }, { kind: "pipe", type: i3.TuiFormatNumberPipe, name: "tuiFormatNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
95
99
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScCartItemMobileComponent, decorators: [{
|
96
100
|
type: Component,
|
97
|
-
args: [{ selector: 'sc-cart-item-mobile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"cartItem && product; else skeleton\">\n <!-- TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton size=\"m\" icon=\"scIconVerticalThreeDots\" appearance=\"float\" class=\"!absolute right-0 top-0\"></button> -->\n <div class=\"flex min-w-72 gap-2 rounded-xl border border-tui-base-04 bg-white p-2 shadow-sc-2\">\n <div class=\"flex w-40 items-center\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage()\"\n [alt]=\"product.name\"\n class=\"max-h-full w-full rounded-xl object-cover\"\n />\n </div>\n <div class=\"flex w-full flex-col items-center justify-between gap-2 sm:flex-row sm:gap-5\">\n <div class=\"flex max-w-full flex-col gap-1 self-start\">\n <a\n tuiLink\n (click)=\"clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n\n <div class=\"flex w-full flex-wrap gap-x-2 gap-y-1 text-xs text-tui-base-05\">\n <p *ngIf=\"product.pack\">\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n <tui-svg\n *ngIf=\"product.ignoreMinCountCheck\"\n src=\"tuiIconPackage\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n ></tui-svg>\n <ng-template #minCountHint>\n \u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0437\u0430\u043A\u0430\u0437 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u044C\u043D\u043E\u0433\u043E <br />\n \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430\n </ng-template>\n </p>\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n </div>\n\n <div class=\"flex w-full flex-wrap items-center gap-x-2 gap-y-1\">\n <p\n *ngIf=\"!product.priceInRub\"\n class=\"font-bold\"\n >\n {{ product.costString }}\n </p>\n <p class=\"text-xs font-bold text-tui-base-05\">{{ product.costRubString }}</p>\n <span\n *ngIf=\"product.discount\"\n class=\"flex items-center\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> \n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <tui-svg\n src=\"tuiIconInfoLarge\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"!h-4 !text-xs\"\n ></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n </div>\n\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n\n <div\n *ngIf=\"cartItem.height || cartItem.length || cartItem.width\"\n class=\"flex items-center gap-1\"\n >\n <button\n tuiIconButton\n icon=\"tuiIconSettings\"\n (click)=\"clickSettingsEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-wrap gap-x-2 text-xs font-thin text-tui-base-04\">\n <p *ngIf=\"cartItem.marker\">\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ cartItem.marker }}</p>\n <p *ngIf=\"cartItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ cartItem.width }} \u043C.</p>\n <ng-container *ngIf=\"cartItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ cartItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"cartItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} \u043C.</p>\n </ng-template>\n </div>\n </div>\n\n <a\n tuiLink\n *ngIf=\"cartItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a\n >\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"cartItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"cartItem.specificationImgUrl\"\n />\n <button\n icon=\"tuiIconClose\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"flex flex-col gap-1 self-start sm:mr-9 sm:self-center\">\n <div class=\"flex gap-2\">\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"quantityControl\"\n [formControl]=\"quantityControl\"\n [showCross]=\"false\"\n size=\"s\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-28\"\n ></sc-input-quantity>\n <button\n tuiIconButton\n icon=\"tuiIconTrash2\"\n shape=\"rounded\"\n size=\"xs\"\n (click)=\"clickDeleteEvent.emit()\"\n ></button>\n </div>\n <p class=\"text-sm font-bold text-tui-text-01\">\u0418\u0442\u043E\u0433\u043E: {{ cartItem.costRub | tuiFormatNumber }} {{ 'RUB' | tuiCurrency }}</p>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #skeleton>\n <div class=\"flex w-full gap-2\">\n <div class=\"size-20 rounded-xl bg-tui-base-02\"></div>\n <div class=\"flex grow flex-col gap-2.5 bg-white\">\n <div class=\"h-4 w-full rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-4/5 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n" }]
|
101
|
+
args: [{ selector: 'sc-cart-item-mobile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"cartItem && product; else skeleton\">\n <!-- TODO: \u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u0430.\n <button tuiIconButton size=\"m\" icon=\"scIconVerticalThreeDots\" appearance=\"float\" class=\"!absolute right-0 top-0\"></button> -->\n <div class=\"flex min-w-72 gap-2 rounded-xl border border-tui-base-04 bg-white p-2 shadow-sc-2\">\n <div class=\"flex w-40 items-center\">\n <img\n (click)=\"clickCardEvent.emit()\"\n [src]=\"getCardImage(product)\"\n [alt]=\"product.name\"\n class=\"max-h-full w-full rounded-xl object-cover\"\n />\n </div>\n <div class=\"flex w-full flex-col items-center justify-between gap-2 sm:flex-row sm:gap-5\">\n <div class=\"flex max-w-full flex-col gap-1 self-start\">\n <a\n tuiLink\n (click)=\"clickCardEvent.emit()\"\n >\n <span class=\"font-bold\">{{ product.name }}</span>\n </a>\n\n <div class=\"flex w-full flex-wrap gap-x-2 gap-y-1 text-xs text-tui-base-05\">\n <p *ngIf=\"product.pack\">\n \u041D\u043E\u0440\u043C\u0430 \u0443\u043F\u0430\u043A\u043E\u0432\u043A\u0438: {{ product.pack }}\n <tui-svg\n *ngIf=\"product.ignoreMinCountCheck\"\n src=\"tuiIconPackage\"\n [tuiHint]=\"minCountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n ></tui-svg>\n <ng-template #minCountHint>\n \u0414\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0437\u0430\u043A\u0430\u0437 <br />\n \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u044C\u043D\u043E\u0433\u043E <br />\n \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430\n </ng-template>\n </p>\n <p>\u0410\u0440\u0442\u0438\u043A\u0443\u043B: {{ product.code }}</p>\n </div>\n\n <div class=\"flex w-full flex-wrap items-center gap-x-2 gap-y-1\">\n <p\n *ngIf=\"!product.priceInRub\"\n class=\"font-bold\"\n >\n {{ product.costString }}\n </p>\n <p class=\"text-xs font-bold text-tui-base-05\">{{ product.costRubString }}</p>\n <span\n *ngIf=\"product.discount\"\n class=\"flex items-center\"\n >\n <span class=\"line-through\">{{ product.discountCostString }}</span> \n <span class=\"font-bold text-tui-success-fill\"> -{{ product.discount.percent }}% </span>\n <tui-svg\n src=\"tuiIconInfoLarge\"\n [tuiHint]=\"discountHint\"\n [tuiHintShowDelay]=\"100\"\n tuiHintDirection=\"top\"\n class=\"!h-4 !text-xs\"\n ></tui-svg>\n <ng-template #discountHint>\n <div class=\"font-bold\">{{ product.discount.name }}</div>\n <div *ngIf=\"product.discount.expiredAt as expiredAt\">\u0414\u0430\u0442\u0430 \u043E\u043A\u043E\u043D\u0447\u0430\u043D\u0438\u044F: {{ expiredAt }}</div>\n </ng-template>\n </span>\n </div>\n\n <sc-price-warehouse-stock [product]=\"product\"></sc-price-warehouse-stock>\n\n <div\n *ngIf=\"cartItem.height || cartItem.length || cartItem.width\"\n class=\"flex items-center gap-1\"\n >\n <button\n tuiIconButton\n icon=\"tuiIconSettings\"\n (click)=\"clickSettingsEvent.emit()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"mr-2 !self-center\"\n ></button>\n <div class=\"flex flex-wrap gap-x-2 text-xs font-thin text-tui-base-04\">\n <p *ngIf=\"cartItem.marker\">\u041C\u0430\u0440\u043A\u0438\u0440\u043E\u0432\u043A\u0430: {{ cartItem.marker }}</p>\n <p *ngIf=\"cartItem.width\">\u0428\u0438\u0440\u0438\u043D\u0430: {{ cartItem.width }} \u043C.</p>\n <ng-container *ngIf=\"cartItem.height; else length\">\n <p>\u0412\u044B\u0441\u043E\u0442\u0430: {{ cartItem.height }} \u043C.</p>\n </ng-container>\n <ng-template #length>\n <p *ngIf=\"cartItem.length\">\u0414\u043B\u0438\u043D\u0430: {{ cartItem.length }} \u043C.</p>\n </ng-template>\n </div>\n </div>\n\n <a\n tuiLink\n *ngIf=\"cartItem.specificationImgUrl\"\n (click)=\"showSpecification()\"\n >\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F</a\n >\n <ng-template\n #specificationPreview\n let-preview\n >\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n >\n <img\n *polymorpheusOutlet=\"cartItem.specificationImgUrl as src\"\n alt=\"preview\"\n [src]=\"cartItem.specificationImgUrl\"\n />\n <button\n icon=\"tuiIconClose\"\n title=\"Close\"\n tuiIconButton\n tuiPreviewAction\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n </ng-template>\n </div>\n <div class=\"flex flex-col gap-1 self-start sm:mr-9 sm:self-center\">\n <div class=\"flex gap-2\">\n <sc-input-quantity\n #inputQuantity\n *ngIf=\"quantityControl\"\n [formControl]=\"quantityControl\"\n [showCross]=\"false\"\n size=\"s\"\n [step]=\"unitsHelper.productMultiplicity(product)\"\n [ignoreStepValidators]=\"product.ignoreMinCountCheck\"\n (keydown.enter)=\"inputQuantity.nativeFocusableElement?.blur()\"\n class=\"w-28\"\n ></sc-input-quantity>\n <button\n tuiIconButton\n icon=\"tuiIconTrash2\"\n shape=\"rounded\"\n size=\"xs\"\n (click)=\"clickDeleteEvent.emit()\"\n ></button>\n </div>\n <p class=\"text-sm font-bold text-tui-text-01\">\u0418\u0442\u043E\u0433\u043E: {{ cartItem.costRub | tuiFormatNumber }} {{ 'RUB' | tuiCurrency }}</p>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #skeleton>\n <div class=\"flex w-full gap-2\">\n <div class=\"size-20 rounded-xl bg-tui-base-02\"></div>\n <div class=\"flex grow flex-col gap-2.5 bg-white\">\n <div class=\"h-4 w-full rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-3/5 rounded-xl bg-tui-base-02\"></div>\n <div class=\"h-4 w-4/5 rounded-xl bg-tui-base-02\"></div>\n </div>\n </div>\n</ng-template>\n" }]
|
98
102
|
}], ctorParameters: function () { return [{ type: i1.ScUnitsHelper }, { type: i7.TuiPreviewDialogService, decorators: [{
|
99
103
|
type: Inject,
|
100
104
|
args: [TuiPreviewDialogService]
|
101
|
-
}] }, { type: undefined, decorators: [{
|
102
|
-
type: Inject,
|
103
|
-
args: [SC_URLS]
|
104
|
-
}] }, { type: undefined, decorators: [{
|
105
|
-
type: Inject,
|
106
|
-
args: [SC_PATH_IMAGE_NOT_FOUND]
|
107
105
|
}] }]; }, propDecorators: { cartItem: [{
|
108
106
|
type: Input
|
109
107
|
}], specificationPreviewRef: [{
|
@@ -118,4 +116,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
118
116
|
}], clickCardEvent: [{
|
119
117
|
type: Output
|
120
118
|
}] } });
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC1pdGVtLW1vYmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9jYXJ0LWl0ZW0tbW9iaWxlL3NjLWNhcnQtaXRlbS1tb2JpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvY2FydC1pdGVtLW1vYmlsZS9zYy1jYXJ0LWl0ZW0tbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUV6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQWlELE1BQU0sd0JBQXdCLENBQUM7QUFDekgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEUsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFFeEM7O0dBRUc7QUFNSCxNQUFNLE9BQU8seUJBQXlCO0lBNERsQzs7Ozs7OztPQU9HO0lBQ0gsWUFDb0IsV0FBMEIsRUFFekIsb0JBQTZDLEVBQzVCLElBQWEsRUFDRyxpQkFBeUI7UUFKM0QsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFFekIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM1QixTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ0csc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBL0MvRTs7V0FFRztRQUNJLG9CQUFlLEdBQStCLElBQUksV0FBVyxDQUFnQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUU3Rzs7V0FFRztRQUVJLHlCQUFvQixHQUE4QixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekc7O1dBRUc7UUFFSSxxQkFBZ0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV2RTs7V0FFRztRQUVJLHVCQUFrQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXpFOztXQUVHO1FBRUksbUJBQWMsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQXFCbEUsQ0FBQztJQXpFSjs7T0FFRztJQUNILElBQ1csUUFBUSxDQUFDLElBQTRCO1FBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUEwREQ7O09BRUc7SUFDSCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxRQUFRO1FBQ1gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQjtRQUNwQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNwSCxDQUFDOztzSEFwR1EseUJBQXlCLCtDQXNFdEIsdUJBQXVCLGFBRXZCLE9BQU8sYUFDUCx1QkFBdUI7MEdBekUxQix5QkFBeUIsMllDakJ0Qyw2c1FBaUtBOzJGRGhKYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0kscUJBQXFCLG1CQUVkLHVCQUF1QixDQUFDLE1BQU07OzBCQXdFMUMsTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUU5QixNQUFNOzJCQUFDLE9BQU87OzBCQUNkLE1BQU07MkJBQUMsdUJBQXVCOzRDQXBFeEIsUUFBUTtzQkFEbEIsS0FBSztnQkFvQlcsdUJBQXVCO3NCQUR2QyxTQUFTO3VCQUFDLHNCQUFzQjtnQkFZMUIsb0JBQW9CO3NCQUQxQixNQUFNO2dCQU9BLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkFPQSxrQkFBa0I7c0JBRHhCLE1BQU07Z0JBT0EsY0FBYztzQkFEcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU0NfUEFUSF9JTUFHRV9OT1RfRk9VTkQsIFNDX1VSTFMsIFNjQ2FydEl0ZW0sIFNjSVVybHMsIFNjUHJvZHVjdCwgU2NVbml0c0hlbHBlciB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tcHJldmlldyc7XG5pbXBvcnQgeyBUdWlEaWFsb2dDb250ZXh0IH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgc2tpcCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGN0LvQtdC80LXQvdGC0LAg0LrQvtGA0LfQuNC90YsuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2MtY2FydC1pdGVtLW1vYmlsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWNhcnQtaXRlbS1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0NhcnRJdGVtTW9iaWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY2FydEl0ZW0oZGF0YTogU2NDYXJ0SXRlbSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9jYXJ0SXRlbSA9IGRhdGE7XG5cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucXVhbnRpdHlDb250cm9sLnBhdGNoVmFsdWUoZGF0YS5xdWFudGl0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNhcnRJdGVtKCk6IFNjQ2FydEl0ZW0gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FydEl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC90LAg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUg0YHQv9C10YbQuNGE0LjQutCw0YbQuNC4LlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NwZWNpZmljYXRpb25QcmV2aWV3JylcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNwZWNpZmljYXRpb25QcmV2aWV3UmVmPzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dD47XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgRm9ybUNvbnRyb2x9INC/0L7Qu9GPINCy0LLQvtC00LAg0LrQvtC70LjRh9C10YHRgtCy0LAg0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBxdWFudGl0eUNvbnRyb2w6IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KDAsIHsgdXBkYXRlT246ICdibHVyJyB9KTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0LrQvtC70LjRh9C10YHRgtCy0LAg0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdC1LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBxdWFudGl0eVZhbHVlQ2hhbmdlczogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPiA9IHRoaXMucXVhbnRpdHlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHNraXAoMSkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutC90L7Qv9C60YMgXCLQo9C00LDQu9C40YLRjCDQuNC3INC60L7RgNC30LjQvdGLXCIuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrRGVsZXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQvdC+0L/QutGDIFwi0KPQtNCw0LvQuNGC0Ywg0LjQtyDQutC+0YDQt9C40L3Ri1wiLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja1NldHRpbmdzRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQsNGA0YLQvtGH0LrRgy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xpY2tDYXJkRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqINCt0LvQtdC80LXQvdGCINC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2NhcnRJdGVtPzogU2NDYXJ0SXRlbTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjQ2FydEl0ZW1Nb2JpbGVDb21wb25lbnR9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHVuaXRzSGVscGVyINCt0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAt0L/QvtC80L7RidC90LjQutCwINC00LvRjyDRgNCw0LHQvtGC0Ysg0YHQviDQt9C90LDRh9C10L3QuNGP0LzQuCDQtdC00LjQvdC40YYg0LjQt9C80LXRgNC10L3QuNGPINGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gcHJldmlld0RpYWxvZ1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC00LjQsNC70L7Qs9C+0LLQvtCz0L4g0L7QutC90LAg0L/RgNC10LTQstCw0YDQuNGC0LXQu9GM0L3QvtCz0L4g0L/RgNC+0YHQvNC+0YLRgNCwLlxuICAgICAqIEBwYXJhbSB1cmxzINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L3QsCDRgNCw0LfQtNC10LvRiyBiYWNrZW5kJ2EuXG4gICAgICogQHBhcmFtIHBhdGhJbWFnZU5vdEZvdW5kINCf0YPRgtGMINC00L4g0LjQt9C+0LHRgNCw0LbQtdC90LjRjyAn0KLQvtCy0LDRgCDQvdC1INC90LDQudC00LXQvScuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgdW5pdHNIZWxwZXI6IFNjVW5pdHNIZWxwZXIsXG4gICAgICAgIEBJbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJldmlld0RpYWxvZ1NlcnZpY2U6IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNDX1VSTFMpIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyxcbiAgICAgICAgQEluamVjdChTQ19QQVRIX0lNQUdFX05PVF9GT1VORCkgcHJpdmF0ZSByZWFkb25seSBwYXRoSW1hZ2VOb3RGb3VuZDogc3RyaW5nXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC+0LTRg9C60YIg0Y3Qu9C10LzQtdC90YLQsCDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHByb2R1Y3QoKTogU2NQcm9kdWN0IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FydEl0ZW0/LnByb2R1Y3Q7XG4gICAgfVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnF1YW50aXR5VmFsdWVDaGFuZ2VzID0gdGhpcy5xdWFudGl0eUNvbnRyb2wudmFsdWVDaGFuZ2VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQvtCx0YDQsNC30LjRgtGMINGB0L/QtdGG0LjRhNC40LrQsNGG0LjRji5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1NwZWNpZmljYXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLnNwZWNpZmljYXRpb25QcmV2aWV3UmVmID8/ICcnKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdGB0YvQu9C60YMg0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC1INC60LDRgNGC0L7Rh9C60Lgg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYXJkSW1hZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZHVjdD8uZ2V0SW1hZ2VQcmV2aWV3KHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwpID8/IHRoaXMudXJscy5pbWdTZXJ2ZXJVcmwgKyB0aGlzLnBhdGhJbWFnZU5vdEZvdW5kO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjYXJ0SXRlbSAmJiBwcm9kdWN0OyBlbHNlIHNrZWxldG9uXCI+XG4gICAgPCEtLSBUT0RPOiDQndC10L7QsdGF0L7QtNC40LzQsCDRgNC10LDQu9C40LfQsNGG0LjRjyDRhNGD0L3QutGG0LjQvtC90LDQu9CwLlxuICAgIDxidXR0b24gdHVpSWNvbkJ1dHRvbiBzaXplPVwibVwiIGljb249XCJzY0ljb25WZXJ0aWNhbFRocmVlRG90c1wiIGFwcGVhcmFuY2U9XCJmbG9hdFwiIGNsYXNzPVwiIWFic29sdXRlIHJpZ2h0LTAgdG9wLTBcIj48L2J1dHRvbj4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggbWluLXctNzIgZ2FwLTIgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLXR1aS1iYXNlLTA0IGJnLXdoaXRlIHAtMiBzaGFkb3ctc2MtMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LTQwIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0NhcmRFdmVudC5lbWl0KClcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZ2V0Q2FyZEltYWdlKClcIlxuICAgICAgICAgICAgICAgIFthbHRdPVwicHJvZHVjdC5uYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1heC1oLWZ1bGwgdy1mdWxsIHJvdW5kZWQteGwgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBzbTpmbGV4LXJvdyBzbTpnYXAtNVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWF4LXctZnVsbCBmbGV4LWNvbCBnYXAtMSBzZWxmLXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tDYXJkRXZlbnQuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkXCI+e3sgcHJvZHVjdC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LXdyYXAgZ2FwLXgtMiBnYXAteS0xIHRleHQteHMgdGV4dC10dWktYmFzZS0wNVwiPlxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInByb2R1Y3QucGFja1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAg0J3QvtGA0LzQsCDRg9C/0LDQutC+0LLQutC4OiB7eyBwcm9kdWN0LnBhY2sgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9kdWN0Lmlnbm9yZU1pbkNvdW50Q2hlY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInR1aUljb25QYWNrYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHVpSGludF09XCJtaW5Db3VudEhpbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0dWlIaW50U2hvd0RlbGF5XT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSGludERpcmVjdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC90dWktc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtaW5Db3VudEhpbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0JTQvtGB0YLRg9C/0LXQvSDQt9Cw0LrQsNC3IDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINC/0YDQvtC40LfQstC+0LvRjNC90L7Qs9C+IDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINC60L7Qu9C40YfQtdGB0YLQstCwXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwPtCQ0YDRgtC40LrRg9C7OiB7eyBwcm9kdWN0LmNvZGUgfX08L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAteC0yIGdhcC15LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXByb2R1Y3QucHJpY2VJblJ1YlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtYm9sZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb2R1Y3QuY29zdFN0cmluZyB9fVxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14cyBmb250LWJvbGQgdGV4dC10dWktYmFzZS0wNVwiPnt7IHByb2R1Y3QuY29zdFJ1YlN0cmluZyB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvZHVjdC5kaXNjb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaW5lLXRocm91Z2hcIj57eyBwcm9kdWN0LmRpc2NvdW50Q29zdFN0cmluZyB9fTwvc3Bhbj4gJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LXR1aS1zdWNjZXNzLWZpbGxcIj4gLXt7IHByb2R1Y3QuZGlzY291bnQucGVyY2VudCB9fSUgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ0dWlJY29uSW5mb0xhcmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHVpSGludF09XCJkaXNjb3VudEhpbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0dWlIaW50U2hvd0RlbGF5XT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSGludERpcmVjdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIhaC00ICF0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc2NvdW50SGludD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkXCI+e3sgcHJvZHVjdC5kaXNjb3VudC5uYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByb2R1Y3QuZGlzY291bnQuZXhwaXJlZEF0IGFzIGV4cGlyZWRBdFwiPtCU0LDRgtCwINC+0LrQvtC90YfQsNC90LjRjzoge3sgZXhwaXJlZEF0IH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8c2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrIFtwcm9kdWN0XT1cInByb2R1Y3RcIj48L3NjLXByaWNlLXdhcmVob3VzZS1zdG9jaz5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYXJ0SXRlbS5oZWlnaHQgfHwgY2FydEl0ZW0ubGVuZ3RoIHx8IGNhcnRJdGVtLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwidHVpSWNvblNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja1NldHRpbmdzRXZlbnQuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0yICFzZWxmLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC14LTIgdGV4dC14cyBmb250LXRoaW4gdGV4dC10dWktYmFzZS0wNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjYXJ0SXRlbS5tYXJrZXJcIj7QnNCw0YDQutC40YDQvtCy0LrQsDoge3sgY2FydEl0ZW0ubWFya2VyIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjYXJ0SXRlbS53aWR0aFwiPtCo0LjRgNC40L3QsDoge3sgY2FydEl0ZW0ud2lkdGggfX0g0LwuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhcnRJdGVtLmhlaWdodDsgZWxzZSBsZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD7QktGL0YHQvtGC0LA6IHt7IGNhcnRJdGVtLmhlaWdodCB9fSDQvC48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVuZ3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY2FydEl0ZW0ubGVuZ3RoXCI+0JTQu9C40L3QsDoge3sgY2FydEl0ZW0ubGVuZ3RoIH19INC8LjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhcnRJdGVtLnNwZWNpZmljYXRpb25JbWdVcmxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1NwZWNpZmljYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgID7QodC/0LXRhtC40YTQuNC60LDRhtC40Y88L2FcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICNzcGVjaWZpY2F0aW9uUHJldmlld1xuICAgICAgICAgICAgICAgICAgICBsZXQtcHJldmlld1xuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHR1aS1wcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICBbcm90YXRhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6b29tYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcG9seW1vcnBoZXVzT3V0bGV0PVwiY2FydEl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybCBhcyBzcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cInByZXZpZXdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiY2FydEl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0dWlJY29uQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlQcmV2aWV3QWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpZXcuY29tcGxldGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvdHVpLXByZXZpZXc+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTEgc2VsZi1zdGFydCBzbTptci05IHNtOnNlbGYtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNjLWlucHV0LXF1YW50aXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAjaW5wdXRRdWFudGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWFudGl0eUNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInF1YW50aXR5Q29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0Nyb3NzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwXT1cInVuaXRzSGVscGVyLnByb2R1Y3RNdWx0aXBsaWNpdHkocHJvZHVjdClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lnbm9yZVN0ZXBWYWxpZGF0b3JzXT1cInByb2R1Y3QuaWdub3JlTWluQ291bnRDaGVja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJpbnB1dFF1YW50aXR5Lm5hdGl2ZUZvY3VzYWJsZUVsZW1lbnQ/LmJsdXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMjhcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zYy1pbnB1dC1xdWFudGl0eT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25UcmFzaDJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tEZWxldGVFdmVudC5lbWl0KClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtYm9sZCB0ZXh0LXR1aS10ZXh0LTAxXCI+0JjRgtC+0LPQvjoge3sgY2FydEl0ZW0uY29zdFJ1YiB8IHR1aUZvcm1hdE51bWJlciB9fSB7eyAnUlVCJyB8IHR1aUN1cnJlbmN5IH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjc2tlbGV0b24+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGdhcC0yXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaXplLTIwIHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ3JvdyBmbGV4LWNvbCBnYXAtMi41IGJnLXdoaXRlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC00IHctZnVsbCByb3VuZGVkLXhsIGJnLXR1aS1iYXNlLTAyXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC00IHctMy81IHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTQgdy00LzUgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMlwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC1pdGVtLW1vYmlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2FydC9jYXJ0LWl0ZW0tbW9iaWxlL3NjLWNhcnQtaXRlbS1tb2JpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvY2FydC1pdGVtLW1vYmlsZS9zYy1jYXJ0LWl0ZW0tbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUV6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQWMsYUFBYSxFQUE0QixNQUFNLHdCQUF3QixDQUFDO0FBQzdGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWxFLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBRXhDOztHQUVHO0FBTUgsTUFBTSxPQUFPLHlCQUF5QjtJQWlFbEM7Ozs7Ozs7T0FPRztJQUNILFlBQ29CLFdBQTBCLEVBRXpCLG9CQUE2QztRQUY5QyxnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUV6Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBbERsRTs7V0FFRztRQUNJLG9CQUFlLEdBQStCLElBQUksV0FBVyxDQUFnQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUU3Rzs7V0FFRztRQUVJLHlCQUFvQixHQUE4QixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekc7O1dBRUc7UUFFSSxxQkFBZ0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV2RTs7V0FFRztRQUVJLHVCQUFrQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXpFOztXQUVHO1FBRUksbUJBQWMsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVyRTs7V0FFRztRQUNjLGdCQUFXLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBbUJsRCxDQUFDO0lBNUVKOztPQUVHO0lBQ0gsSUFDVyxRQUFRLENBQUMsSUFBNEI7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEQ7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQTZERDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQjtJQUNYLFFBQVE7UUFDWCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25GLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLE9BQWtCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs7c0hBekdRLHlCQUF5QiwrQ0EyRXRCLHVCQUF1QjswR0EzRTFCLHlCQUF5QiwyWUNqQnRDLG90UUFpS0E7MkZEaEphLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSxxQkFBcUIsbUJBRWQsdUJBQXVCLENBQUMsTUFBTTs7MEJBNkUxQyxNQUFNOzJCQUFDLHVCQUF1Qjs0Q0F0RXhCLFFBQVE7c0JBRGxCLEtBQUs7Z0JBb0JXLHVCQUF1QjtzQkFEdkMsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBWTFCLG9CQUFvQjtzQkFEMUIsTUFBTTtnQkFPQSxnQkFBZ0I7c0JBRHRCLE1BQU07Z0JBT0Esa0JBQWtCO3NCQUR4QixNQUFNO2dCQU9BLGNBQWM7c0JBRHBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2NDYXJ0SXRlbSwgU2NJbWFnZUhlbHBlciwgU2NQcm9kdWN0LCBTY1VuaXRzSGVscGVyIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSB9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1wcmV2aWV3JztcbmltcG9ydCB7IFR1aURpYWxvZ0NvbnRleHQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBza2lwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC60LDRgNGC0L7Rh9C60Lgg0Y3Qu9C10LzQtdC90YLQsCDQutC+0YDQt9C40L3Riy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYy1jYXJ0LWl0ZW0tbW9iaWxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtY2FydC1pdGVtLW1vYmlsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjQ2FydEl0ZW1Nb2JpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqINCt0LvQtdC80LXQvdGCINC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBjYXJ0SXRlbShkYXRhOiBTY0NhcnRJdGVtIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2NhcnRJdGVtID0gZGF0YTtcblxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5xdWFudGl0eUNvbnRyb2wucGF0Y2hWYWx1ZShkYXRhLnF1YW50aXR5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCt0LvQtdC80LXQvdGCINC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2FydEl0ZW0oKTogU2NDYXJ0SXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJ0SXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0L3QsCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSDRgdC/0LXRhtC40YTQuNC60LDRhtC40LguXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnc3BlY2lmaWNhdGlvblByZXZpZXcnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3BlY2lmaWNhdGlvblByZXZpZXdSZWY/OiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0PjtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBGb3JtQ29udHJvbH0g0L/QvtC70Y8g0LLQstC+0LTQsCDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgcHVibGljIHF1YW50aXR5Q29udHJvbDogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4gPSBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4oMCwgeyB1cGRhdGVPbjogJ2JsdXInIH0pO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90LUuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHF1YW50aXR5VmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0gdGhpcy5xdWFudGl0eUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc2tpcCgxKSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQvdCw0LbQsNGC0LjRjyDQvdCwINC60L3QvtC/0LrRgyBcItCj0LTQsNC70LjRgtGMINC40Lcg0LrQvtGA0LfQuNC90YtcIi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2xpY2tEZWxldGVFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutC90L7Qv9C60YMgXCLQo9C00LDQu9C40YLRjCDQuNC3INC60L7RgNC30LjQvdGLXCIuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrU2V0dGluZ3NFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutCw0YDRgtC+0YfQutGDLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjbGlja0NhcmRFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0KXQtdC70L/QtdGAINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LjQt9C+0LHRgNCw0LbQtdC90LjRj9C80Lgg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW1hZ2VIZWxwZXIgPSBpbmplY3QoU2NJbWFnZUhlbHBlcik7XG5cbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jYXJ0SXRlbT86IFNjQ2FydEl0ZW07XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0NhcnRJdGVtTW9iaWxlQ29tcG9uZW50fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1bml0c0hlbHBlciDQrdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwLdC/0L7QvNC+0YnQvdC40LrQsCDQtNC70Y8g0YDQsNCx0L7RgtGLINGB0L4g0LfQvdCw0YfQtdC90LjRj9C80Lgg0LXQtNC40L3QuNGGINC40LfQvNC10YDQtdC90LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICogQHBhcmFtIHByZXZpZXdEaWFsb2dTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC40LDQu9C+0LPQvtCy0L7Qs9C+INC+0LrQvdCwINC/0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90L7Qs9C+INC/0YDQvtGB0LzQvtGC0YDQsC5cbiAgICAgKiBAcGFyYW0gdXJscyDQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6INC90LAg0YDQsNC30LTQtdC70YsgYmFja2VuZCdhLlxuICAgICAqIEBwYXJhbSBwYXRoSW1hZ2VOb3RGb3VuZCDQn9GD0YLRjCDQtNC+INC40LfQvtCx0YDQsNC20LXQvdC40Y8gJ9Ci0L7QstCw0YAg0L3QtSDQvdCw0LnQtNC10L0nLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHVuaXRzSGVscGVyOiBTY1VuaXRzSGVscGVyLFxuICAgICAgICBASW5qZWN0KFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHByZXZpZXdEaWFsb2dTZXJ2aWNlOiBUdWlQcmV2aWV3RGlhbG9nU2VydmljZVxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqINCf0YDQvtC00YPQutGCINGN0LvQtdC80LXQvdGC0LAg0LrQvtGA0LfQuNC90YsuXG4gICAgICovXG4gICAgcHVibGljIGdldCBwcm9kdWN0KCk6IFNjUHJvZHVjdCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcnRJdGVtPy5wcm9kdWN0O1xuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5xdWFudGl0eVZhbHVlQ2hhbmdlcyA9IHRoaXMucXVhbnRpdHlDb250cm9sLnZhbHVlQ2hhbmdlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0L7QsdGA0LDQt9C40YLRjCDRgdC/0LXRhtC40YTQuNC60LDRhtC40Y4uXG4gICAgICovXG4gICAgcHVibGljIHNob3dTcGVjaWZpY2F0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5zcGVjaWZpY2F0aW9uUHJldmlld1JlZiA/PyAnJykuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0YHRgdGL0LvQutGDINC90LAg0LjQt9C+0LHRgNCw0LbQtdC90LjQtSDQutCw0YDRgtC+0YfQutC4INGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0INCf0L7Qt9C40YbQuNGPINGC0L7QstCw0YDQsC/Rg9GB0LvRg9Cz0LguXG4gICAgICovXG4gICAgcHVibGljIGdldENhcmRJbWFnZShwcm9kdWN0OiBTY1Byb2R1Y3QpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZUhlbHBlci5nZXRJbWFnZShwcm9kdWN0KTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiY2FydEl0ZW0gJiYgcHJvZHVjdDsgZWxzZSBza2VsZXRvblwiPlxuICAgIDwhLS0gVE9ETzog0J3QtdC+0LHRhdC+0LTQuNC80LAg0YDQtdCw0LvQuNC30LDRhtC40Y8g0YTRg9C90LrRhtC40L7QvdCw0LvQsC5cbiAgICA8YnV0dG9uIHR1aUljb25CdXR0b24gc2l6ZT1cIm1cIiBpY29uPVwic2NJY29uVmVydGljYWxUaHJlZURvdHNcIiBhcHBlYXJhbmNlPVwiZmxvYXRcIiBjbGFzcz1cIiFhYnNvbHV0ZSByaWdodC0wIHRvcC0wXCI+PC9idXR0b24+IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IG1pbi13LTcyIGdhcC0yIHJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci10dWktYmFzZS0wNCBiZy13aGl0ZSBwLTIgc2hhZG93LXNjLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy00MCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tDYXJkRXZlbnQuZW1pdCgpXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cImdldENhcmRJbWFnZShwcm9kdWN0KVwiXG4gICAgICAgICAgICAgICAgW2FsdF09XCJwcm9kdWN0Lm5hbWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF4LWgtZnVsbCB3LWZ1bGwgcm91bmRlZC14bCBvYmplY3QtY292ZXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHNtOmZsZXgtcm93IHNtOmdhcC01XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtYXgtdy1mdWxsIGZsZXgtY29sIGdhcC0xIHNlbGYtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0NhcmRFdmVudC5lbWl0KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIj57eyBwcm9kdWN0Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGZsZXgtd3JhcCBnYXAteC0yIGdhcC15LTEgdGV4dC14cyB0ZXh0LXR1aS1iYXNlLTA1XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwicHJvZHVjdC5wYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICDQndC+0YDQvNCwINGD0L/QsNC60L7QstC60Lg6IHt7IHByb2R1Y3QucGFjayB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPHR1aS1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2R1Y3QuaWdub3JlTWluQ291bnRDaGVja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwidHVpSWNvblBhY2thZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0dWlIaW50XT1cIm1pbkNvdW50SGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R1aUhpbnRTaG93RGVsYXldPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlIaW50RGlyZWN0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3R1aS1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21pbkNvdW50SGludD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDQlNC+0YHRgtGD0L/QtdC9INC30LDQutCw0LcgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0L/RgNC+0LjQt9Cy0L7Qu9GM0L3QvtCz0L4gPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0LrQvtC70LjRh9C10YHRgtCy0LBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHA+0JDRgNGC0LjQutGD0Ls6IHt7IHByb2R1Y3QuY29kZSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC14LTIgZ2FwLXktMVwiPlxuICAgICAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcHJvZHVjdC5wcmljZUluUnViXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcHJvZHVjdC5jb3N0U3RyaW5nIH19XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LXR1aS1iYXNlLTA1XCI+e3sgcHJvZHVjdC5jb3N0UnViU3RyaW5nIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9kdWN0LmRpc2NvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpbmUtdGhyb3VnaFwiPnt7IHByb2R1Y3QuZGlzY291bnRDb3N0U3RyaW5nIH19PC9zcGFuPiAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtdHVpLXN1Y2Nlc3MtZmlsbFwiPiAte3sgcHJvZHVjdC5kaXNjb3VudC5wZXJjZW50IH19JSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHVpLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInR1aUljb25JbmZvTGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0dWlIaW50XT1cImRpc2NvdW50SGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R1aUhpbnRTaG93RGVsYXldPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlIaW50RGlyZWN0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiFoLTQgIXRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHVpLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzY291bnRIaW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGRcIj57eyBwcm9kdWN0LmRpc2NvdW50Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvZHVjdC5kaXNjb3VudC5leHBpcmVkQXQgYXMgZXhwaXJlZEF0XCI+0JTQsNGC0LAg0L7QutC+0L3Rh9Cw0L3QuNGPOiB7eyBleHBpcmVkQXQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxzYy1wcmljZS13YXJlaG91c2Utc3RvY2sgW3Byb2R1Y3RdPVwicHJvZHVjdFwiPjwvc2MtcHJpY2Utd2FyZWhvdXNlLXN0b2NrPlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhcnRJdGVtLmhlaWdodCB8fCBjYXJ0SXRlbS5sZW5ndGggfHwgY2FydEl0ZW0ud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0dWlJY29uU2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrU2V0dGluZ3NFdmVudC5lbWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1yLTIgIXNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLXgtMiB0ZXh0LXhzIGZvbnQtdGhpbiB0ZXh0LXR1aS1iYXNlLTA0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNhcnRJdGVtLm1hcmtlclwiPtCc0LDRgNC60LjRgNC+0LLQutCwOiB7eyBjYXJ0SXRlbS5tYXJrZXIgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNhcnRJdGVtLndpZHRoXCI+0KjQuNGA0LjQvdCwOiB7eyBjYXJ0SXRlbS53aWR0aCB9fSDQvC48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FydEl0ZW0uaGVpZ2h0OyBlbHNlIGxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPtCS0YvRgdC+0YLQsDoge3sgY2FydEl0ZW0uaGVpZ2h0IH19INC8LjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZW5ndGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjYXJ0SXRlbS5sZW5ndGhcIj7QlNC70LjQvdCwOiB7eyBjYXJ0SXRlbS5sZW5ndGggfX0g0LwuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FydEl0ZW0uc3BlY2lmaWNhdGlvbkltZ1VybFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93U3BlY2lmaWNhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgPtCh0L/QtdGG0LjRhNC40LrQsNGG0LjRjzwvYVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgI3NwZWNpZmljYXRpb25QcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgIGxldC1wcmV2aWV3XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dHVpLXByZXZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb3RhdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3pvb21hYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb2x5bW9ycGhldXNPdXRsZXQ9XCJjYXJ0SXRlbS5zcGVjaWZpY2F0aW9uSW1nVXJsIGFzIHNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwicHJldmlld1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjYXJ0SXRlbS5zcGVjaWZpY2F0aW9uSW1nVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25DbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aVByZXZpZXdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJldmlldy5jb21wbGV0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90dWktcHJldmlldz5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMSBzZWxmLXN0YXJ0IHNtOm1yLTkgc206c2VsZi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8c2MtaW5wdXQtcXVhbnRpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICNpbnB1dFF1YW50aXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1YW50aXR5Q29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicXVhbnRpdHlDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q3Jvc3NdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0ZXBdPVwidW5pdHNIZWxwZXIucHJvZHVjdE11bHRpcGxpY2l0eShwcm9kdWN0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWdub3JlU3RlcFZhbGlkYXRvcnNdPVwicHJvZHVjdC5pZ25vcmVNaW5Db3VudENoZWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImlucHV0UXVhbnRpdHkubmF0aXZlRm9jdXNhYmxlRWxlbWVudD8uYmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0yOFwiXG4gICAgICAgICAgICAgICAgICAgID48L3NjLWlucHV0LXF1YW50aXR5PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwidHVpSWNvblRyYXNoMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja0RlbGV0ZUV2ZW50LmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtc20gZm9udC1ib2xkIHRleHQtdHVpLXRleHQtMDFcIj7QmNGC0L7Qs9C+OiB7eyBjYXJ0SXRlbS5jb3N0UnViIHwgdHVpRm9ybWF0TnVtYmVyIH19IHt7ICdSVUInIHwgdHVpQ3VycmVuY3kgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNza2VsZXRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZ2FwLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNpemUtMjAgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMlwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBncm93IGZsZXgtY29sIGdhcC0yLjUgYmctd2hpdGVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTQgdy1mdWxsIHJvdW5kZWQteGwgYmctdHVpLWJhc2UtMDJcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTQgdy0zLzUgcm91bmRlZC14bCBiZy10dWktYmFzZS0wMlwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtNCB3LTQvNSByb3VuZGVkLXhsIGJnLXR1aS1iYXNlLTAyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|