@tsi-developpement/tsi-shared-ui 1.11.7 → 1.11.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/end-points/endpoints.mjs +2 -2
- package/esm2022/lib/services/workflow/workflow-configuration.service.mjs +3 -3
- package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +51 -32
- package/esm2022/lib/tsi-components/output-components/tsi-image-display/tsi-image-display.component.mjs +2 -2
- package/esm2022/lib/tsi-components/tsi-kanban-workflow-etat/tsi-kanban-workflow-etat.component.mjs +56 -12
- package/esm2022/lib/tsi-components/tsi-search-box/tsi-search-box.component.mjs +2 -1
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +77 -19
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/end-points/endpoints.d.ts +1 -1
- package/lib/services/workflow/workflow-configuration.service.d.ts +1 -1
- package/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.d.ts +1 -1
- package/lib/tsi-components/tsi-action-erp-create-or-edit/tsi-action-erp-create-or-edit.component.d.ts +1 -1
- package/lib/tsi-components/tsi-kanban-workflow-etat/tsi-kanban-workflow-etat.component.d.ts +12 -1
- package/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -123,11 +123,11 @@ export class TsiImageDisplayComponent {
|
|
|
123
123
|
return `scale(${this.zoomLevel}) translate(${tx}px, ${ty}px)`;
|
|
124
124
|
}
|
|
125
125
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiImageDisplayComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
126
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiImageDisplayComponent, selector: "tsi-image-display", inputs: { src: "src", alt: "alt", width: "width", height: "height", isRounded: "isRounded", headerTitles: "headerTitles" }, ngImport: i0, template: "<div class=\"avatar\" [ngClass]=\"isRounded ? 'rounded' : ''\">\r\n <img [src]=\"safeSrc\"\r\n [alt]=\"alt | localize\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (click)=\"showImage()\"/>\r\n </div>\r\n\r\n<p-dialog [(visible)]=\"displayDialog\"\r\n [ngClass]=\"displayDialog ? 'dialog-avatar' : 'hidden'\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '50vw', 'max-height': '85vh'}\"\r\n [dismissableMask]=\"true\"\r\n [closable]=\"true\"\r\n [baseZIndex]=\"10000\"\r\n [contentStyle]=\"{overflow: 'auto', 'padding': '0'}\"\r\n [header]=\"title | localize\">\r\n <div class=\"img-dialog\">\r\n <img [src]=\"safeSrc\" [alt]=\"alt | localize\"\r\n (wheel)=\"onWheel($event)\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n (dblclick)=\"resetZoomAndPan()\"\r\n (click)=\"zoomLevel = 1.2\"\r\n [style.transform]=\"panTransform\"\r\n [style.cursor]=\"cursorStyle\"\r\n draggable=\"false\"\r\n />\r\n </div>\r\n</p-dialog>", styles: [":host{display:
|
|
126
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiImageDisplayComponent, selector: "tsi-image-display", inputs: { src: "src", alt: "alt", width: "width", height: "height", isRounded: "isRounded", headerTitles: "headerTitles" }, ngImport: i0, template: "<div class=\"avatar\" [ngClass]=\"isRounded ? 'rounded' : ''\">\r\n <img [src]=\"safeSrc\"\r\n [alt]=\"alt | localize\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (click)=\"showImage()\"/>\r\n </div>\r\n\r\n<p-dialog [(visible)]=\"displayDialog\"\r\n [ngClass]=\"displayDialog ? 'dialog-avatar' : 'hidden'\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '50vw', 'max-height': '85vh'}\"\r\n [dismissableMask]=\"true\"\r\n [closable]=\"true\"\r\n [baseZIndex]=\"10000\"\r\n [contentStyle]=\"{overflow: 'auto', 'padding': '0'}\"\r\n [header]=\"title | localize\">\r\n <div class=\"img-dialog\">\r\n <img [src]=\"safeSrc\" [alt]=\"alt | localize\"\r\n (wheel)=\"onWheel($event)\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n (dblclick)=\"resetZoomAndPan()\"\r\n (click)=\"zoomLevel = 1.2\"\r\n [style.transform]=\"panTransform\"\r\n [style.cursor]=\"cursorStyle\"\r\n draggable=\"false\"\r\n />\r\n </div>\r\n</p-dialog>", styles: [":host{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.avatar{display:flex;align-items:center;justify-content:center;overflow:hidden;box-sizing:border-box;height:100%;aspect-ratio:1/1;max-width:100%;flex-shrink:0;padding:.15rem;border-radius:4px}.avatar img{height:100%;width:100%;object-fit:contain;object-position:center;display:block;cursor:pointer;transition:transform .2s ease,filter .3s ease}.avatar:hover img{transform:scale(1.03);filter:brightness(.85)}.dialog-avatar .img-dialog{padding:1rem;max-width:100%;max-height:100%;box-sizing:border-box;overflow:hidden;display:flex;justify-content:center;align-items:center}.dialog-avatar .img-dialog img{display:block;max-width:100%;max-height:70vh;width:auto;height:auto;object-fit:contain;transition:transform .2s ease-in-out;transform-origin:center center;-webkit-user-select:none;user-select:none}.rounded{border-radius:50%;padding:0}.rounded img{object-fit:cover;width:100%;height:100%;border-radius:50%}::ng-deep .p-dialog .p-dialog-header{white-space:wrap;overflow:hidden;display:flex;align-items:start}::ng-deep .p-dialog .p-dialog-title{font-size:1rem!important;max-width:90%}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "pipe", type: i4.LocalizePipe, name: "localize" }] }); }
|
|
127
127
|
}
|
|
128
128
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiImageDisplayComponent, decorators: [{
|
|
129
129
|
type: Component,
|
|
130
|
-
args: [{ selector: 'tsi-image-display', template: "<div class=\"avatar\" [ngClass]=\"isRounded ? 'rounded' : ''\">\r\n <img [src]=\"safeSrc\"\r\n [alt]=\"alt | localize\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (click)=\"showImage()\"/>\r\n </div>\r\n\r\n<p-dialog [(visible)]=\"displayDialog\"\r\n [ngClass]=\"displayDialog ? 'dialog-avatar' : 'hidden'\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '50vw', 'max-height': '85vh'}\"\r\n [dismissableMask]=\"true\"\r\n [closable]=\"true\"\r\n [baseZIndex]=\"10000\"\r\n [contentStyle]=\"{overflow: 'auto', 'padding': '0'}\"\r\n [header]=\"title | localize\">\r\n <div class=\"img-dialog\">\r\n <img [src]=\"safeSrc\" [alt]=\"alt | localize\"\r\n (wheel)=\"onWheel($event)\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n (dblclick)=\"resetZoomAndPan()\"\r\n (click)=\"zoomLevel = 1.2\"\r\n [style.transform]=\"panTransform\"\r\n [style.cursor]=\"cursorStyle\"\r\n draggable=\"false\"\r\n />\r\n </div>\r\n</p-dialog>", styles: [":host{display:
|
|
130
|
+
args: [{ selector: 'tsi-image-display', template: "<div class=\"avatar\" [ngClass]=\"isRounded ? 'rounded' : ''\">\r\n <img [src]=\"safeSrc\"\r\n [alt]=\"alt | localize\"\r\n [style.width]=\"width\"\r\n [style.height]=\"height\"\r\n (click)=\"showImage()\"/>\r\n </div>\r\n\r\n<p-dialog [(visible)]=\"displayDialog\"\r\n [ngClass]=\"displayDialog ? 'dialog-avatar' : 'hidden'\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '50vw', 'max-height': '85vh'}\"\r\n [dismissableMask]=\"true\"\r\n [closable]=\"true\"\r\n [baseZIndex]=\"10000\"\r\n [contentStyle]=\"{overflow: 'auto', 'padding': '0'}\"\r\n [header]=\"title | localize\">\r\n <div class=\"img-dialog\">\r\n <img [src]=\"safeSrc\" [alt]=\"alt | localize\"\r\n (wheel)=\"onWheel($event)\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n (dblclick)=\"resetZoomAndPan()\"\r\n (click)=\"zoomLevel = 1.2\"\r\n [style.transform]=\"panTransform\"\r\n [style.cursor]=\"cursorStyle\"\r\n draggable=\"false\"\r\n />\r\n </div>\r\n</p-dialog>", styles: [":host{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.avatar{display:flex;align-items:center;justify-content:center;overflow:hidden;box-sizing:border-box;height:100%;aspect-ratio:1/1;max-width:100%;flex-shrink:0;padding:.15rem;border-radius:4px}.avatar img{height:100%;width:100%;object-fit:contain;object-position:center;display:block;cursor:pointer;transition:transform .2s ease,filter .3s ease}.avatar:hover img{transform:scale(1.03);filter:brightness(.85)}.dialog-avatar .img-dialog{padding:1rem;max-width:100%;max-height:100%;box-sizing:border-box;overflow:hidden;display:flex;justify-content:center;align-items:center}.dialog-avatar .img-dialog img{display:block;max-width:100%;max-height:70vh;width:auto;height:auto;object-fit:contain;transition:transform .2s ease-in-out;transform-origin:center center;-webkit-user-select:none;user-select:none}.rounded{border-radius:50%;padding:0}.rounded img{object-fit:cover;width:100%;height:100%;border-radius:50%}::ng-deep .p-dialog .p-dialog-header{white-space:wrap;overflow:hidden;display:flex;align-items:start}::ng-deep .p-dialog .p-dialog-title{font-size:1rem!important;max-width:90%}\n"] }]
|
|
131
131
|
}], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { src: [{
|
|
132
132
|
type: Input
|
|
133
133
|
}], alt: [{
|
package/esm2022/lib/tsi-components/tsi-kanban-workflow-etat/tsi-kanban-workflow-etat.component.mjs
CHANGED
|
@@ -10,13 +10,18 @@ import * as i2 from "../../services/configuration/entity-configuration.service";
|
|
|
10
10
|
import * as i3 from "../../pipes/localize.pipe";
|
|
11
11
|
import * as i4 from "../../services/notification/tsi-notification.service";
|
|
12
12
|
import * as i5 from "@angular/common";
|
|
13
|
-
import * as i6 from "primeng/
|
|
14
|
-
import * as i7 from "
|
|
15
|
-
import * as i8 from "
|
|
16
|
-
import * as i9 from "
|
|
17
|
-
import * as i10 from "
|
|
18
|
-
import * as i11 from "../output-components/tsi-
|
|
19
|
-
import * as i12 from "../
|
|
13
|
+
import * as i6 from "primeng/button";
|
|
14
|
+
import * as i7 from "primeng/api";
|
|
15
|
+
import * as i8 from "primeng/menu";
|
|
16
|
+
import * as i9 from "primeng/paginator";
|
|
17
|
+
import * as i10 from "primeng/badge";
|
|
18
|
+
import * as i11 from "../output-components/tsi-currency-other-display/tsi-currency-other-display.component";
|
|
19
|
+
import * as i12 from "../output-components/tsi-currency-societe-display/tsi-currency-societe-display.component";
|
|
20
|
+
import * as i13 from "../output-components/tsi-decimal-display/tsi-decimal-display.component";
|
|
21
|
+
import * as i14 from "../output-components/tsi-integer-display/tsi-integer-display.component";
|
|
22
|
+
import * as i15 from "../output-components/tsi-rate-display/tsi-rate-display.component";
|
|
23
|
+
import * as i16 from "../button-components/tsi-button/tsi-button.component";
|
|
24
|
+
import * as i17 from "../spinner/spinner.component";
|
|
20
25
|
/**
|
|
21
26
|
* TsiKanbanWorkflowEtatComponent
|
|
22
27
|
* Description: Displays a Kanban board view for TSI entities using the workflow etat value.
|
|
@@ -39,6 +44,9 @@ export class TsiKanbanWorkflowEtatComponent extends AppBaseComponent {
|
|
|
39
44
|
// Columns whose per-column summary should be displayed in the Kanban header, formatted
|
|
40
45
|
// by their display type (like the table footer). Empty by default → no summaries shown.
|
|
41
46
|
this.summaryColumns = [];
|
|
47
|
+
this.overflowActionsMenu = [];
|
|
48
|
+
this.selectKeyOnly = true;
|
|
49
|
+
this.key = 'uid';
|
|
42
50
|
this.displayTypes = DisplayTypes;
|
|
43
51
|
this.cards = [];
|
|
44
52
|
this.cardMapByWorkflowEtat = new Map();
|
|
@@ -159,6 +167,32 @@ export class TsiKanbanWorkflowEtatComponent extends AppBaseComponent {
|
|
|
159
167
|
?.find(s => s.proprety?.toLowerCase() === field?.toLowerCase());
|
|
160
168
|
return match?.summary;
|
|
161
169
|
}
|
|
170
|
+
overflowColumnClicked(menu, event, row) {
|
|
171
|
+
this.currentActionRow = row;
|
|
172
|
+
menu.toggle(event);
|
|
173
|
+
}
|
|
174
|
+
onOverflowActionClicked(card, menuItem) {
|
|
175
|
+
if (!card || !menuItem || !menuItem.id) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
this.handleButtonClicked(card?.fullRecord ?? card, menuItem.id);
|
|
179
|
+
}
|
|
180
|
+
handleButtonClicked(item, field) {
|
|
181
|
+
if (this.selectKeyOnly) {
|
|
182
|
+
this.buttonClicked.emit({ field: field, key: item[this.key], selectKeyOnly: this.selectKeyOnly });
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
this.buttonClicked.emit({ field: field, key: item, selectKeyOnly: this.selectKeyOnly });
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
edit(uid) {
|
|
189
|
+
if (uid) {
|
|
190
|
+
this.openModalComponent(uid, 'edit');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
openModalComponent(uid, mode) {
|
|
194
|
+
this.buttonClicked.emit({ field: mode, key: uid, selectKeyOnly: true });
|
|
195
|
+
}
|
|
162
196
|
async handlePageChange(page) {
|
|
163
197
|
if (page?.groups) {
|
|
164
198
|
await this.handleGroupedPage(page);
|
|
@@ -186,7 +220,10 @@ export class TsiKanbanWorkflowEtatComponent extends AppBaseComponent {
|
|
|
186
220
|
let maxGroupTotal = 0;
|
|
187
221
|
for (const group of groups) {
|
|
188
222
|
const rawKey = group.key?.trim() || null;
|
|
189
|
-
|
|
223
|
+
if (rawKey && !validKeys.includes(rawKey)) {
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
const bucketKey = rawKey;
|
|
190
227
|
counts.set(bucketKey, (counts.get(bucketKey) ?? 0) + group.totalCount);
|
|
191
228
|
if (!summaries.has(bucketKey)) {
|
|
192
229
|
summaries.set(bucketKey, group.summaries ?? []);
|
|
@@ -239,6 +276,7 @@ export class TsiKanbanWorkflowEtatComponent extends AppBaseComponent {
|
|
|
239
276
|
description: `${item[keys[col3]] ?? ''}`,
|
|
240
277
|
status: workflowEtatValue,
|
|
241
278
|
photo: item[keys[photo]] || defaultCardHeader.image,
|
|
279
|
+
fullRecord: item,
|
|
242
280
|
};
|
|
243
281
|
});
|
|
244
282
|
}
|
|
@@ -268,7 +306,7 @@ export class TsiKanbanWorkflowEtatComponent extends AppBaseComponent {
|
|
|
268
306
|
return;
|
|
269
307
|
}
|
|
270
308
|
try {
|
|
271
|
-
const response = await firstValueFrom(this._workflowConfigurationService.getWorkflowEtatByClassNameAndDescriminator(this.cardBusinessClass, descriminatorValue));
|
|
309
|
+
const response = await firstValueFrom(this._workflowConfigurationService.getWorkflowEtatByClassNameAndDescriminator(this.cardBusinessClass, descriminatorValue, true));
|
|
272
310
|
this.workFlowEtatNomLabels = [
|
|
273
311
|
{ key: null, localized: this._localize.transform('shared_tsi_component_grid_kanban_workflowEtat_view_sans_workflow').trim() },
|
|
274
312
|
...response.map((s) => ({
|
|
@@ -282,11 +320,11 @@ export class TsiKanbanWorkflowEtatComponent extends AppBaseComponent {
|
|
|
282
320
|
}
|
|
283
321
|
}
|
|
284
322
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiKanbanWorkflowEtatComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.WorkflowConfigurationService }, { token: i2.EntityConfigurationService }, { token: i3.LocalizePipe }, { token: i4.TsiNotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
285
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiKanbanWorkflowEtatComponent, selector: "Tsi-kanban-workflow-etat", inputs: { cardBusinessClass: "cardBusinessClass", header: "header", id: "id", page$: "page$", descriminatorValue: "descriminatorValue", summaryColumns: "summaryColumns", page: "page" }, outputs: { buttonClicked: "buttonClicked", callSearch: "callSearch" }, usesInheritance: true, ngImport: i0, template: "<div class=\"card flex justify-content-center\">\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalCount\"\r\n [rowsPerPageOptions]=\"[1, 10, 25, 50]\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{{ 'Showing' | localize }} {first} {{'to' | localize}} {last} {{ 'of' | localize }} {totalRecords}\">\r\n </p-paginator>\r\n</div>\r\n\r\n<div class=\"kanban-board flex gap-4 overflow-auto\">\r\n <div *ngFor=\"let workflowEtat of displayedWorkFlowEtatLabels; trackBy: trackByWorkflowEtat\"\r\n class=\"kanban-column flex flex-column border-round surface-0 shadow-2\"\r\n (dragover)=\"allowDrop($event)\"\r\n (drop)=\"drop($event, workflowEtat.key)\">\r\n \r\n <div class=\"column-header p-3 border-bottom-1 surface-border font-semibold\">\r\n {{ workflowEtat.localized }}\r\n <span class=\"text-sm font-normal text-gray-500\">\r\n ({{ getColumnCount(workflowEtat.key) }})\r\n </span>\r\n <div class=\"text-xs font-normal text-gray-500\" *ngIf=\"hasColumnSummaries\">\r\n <div *ngFor=\"let sumCol of summaryColumns\" class=\"flex align-items-center gap-1\">\r\n <span>{{ (sumCol.header ?? sumCol.field) | localize }}:</span>\r\n <ng-container [ngSwitch]=\"sumCol.type\">\r\n <Tsi-Currency-Societe-Display *ngSwitchCase=\"displayTypes.CURRENCY_SOCIETE_DISPLAY\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Currency-Societe-Display>\r\n <Tsi-Integer-Display *ngSwitchCase=\"displayTypes.INTEGER_DISPLAY\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Integer-Display>\r\n <Tsi-Rate-Display *ngSwitchCase=\"displayTypes.RATE_DISPLAY\"\r\n [isFraction]=\"sumCol.isFraction ?? false\" [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Rate-Display>\r\n <Tsi-Decimal-Display *ngSwitchCase=\"displayTypes.DECIMAL_DISPLAY\"\r\n [formatDecimal]=\"sumCol.formatDecimal\" [numOfDecimal]=\"sumCol.numOfDecimal\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Decimal-Display>\r\n <Tsi-Currency-Other-Display *ngSwitchCase=\"displayTypes.CURRENCY_OTHER_DISPLAY\"\r\n [currency]=\"sumCol.currencyOtherCode\" [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Currency-Other-Display>\r\n <span *ngSwitchDefault>{{ getColumnSummaryValue(workflowEtat.key, sumCol.field) }}</span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column-cards flex-1 overflow-auto p-3\">\r\n <div *ngFor=\"let card of cardMapByWorkflowEtat.get(workflowEtat.key); trackBy: trackByCard\"\r\n class=\"kanban-card p-3 border-round bg-white mb-3 shadow-1\"\r\n [ngClass]=\"getWorkflowEtatClass(card)\"\r\n draggable=\"true\"\r\n (dragstart)=\"dragStart($event, card)\"\r\n (dragend)=\"dragEnd()\">\r\n \r\n <div class=\"font-bold mb-2\">{{ card.headerTitle }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">{{ card.description }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">\r\n <span class=\"font-semibold\">{{ 'shared_tsi_component_grid_kanban_workflowEtat_view_workflow_etat' | localize }}:</span>\r\n <span>{{ getLocalizedWorkflowEtat(card.status) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"overlay\" *ngIf=\"isLoading\">\r\n <div class=\"spinner-wrapper\">\r\n <app-spinner></app-spinner>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;padding:1rem}[draggable=true]{-webkit-user-select:none;user-select:none}.kanban-board{height:calc(100vh - 100px);padding:1rem}.kanban-column{width:300px;max-height:100%;display:flex;flex-direction:column;background-color:#f8f9fa}.column-header{font-size:1rem;font-weight:700;background-color:#fff;border-radius:6px 6px 0 0}.column-cards{overflow-y:auto;flex:1}.kanban-card{border-left:4px solid;cursor:move;transition:border-color .3s ease}.workflowEtatColor-0{border-left-color:#7269ef}.workflowEtatColor-1{border-left-color:#00c853}.workflowEtatColor-2{border-left-color:#ffab00}.workflowEtatColor-3{border-left-color:#d50000}.workflowEtatColor-4{border-left-color:#ff33a8}.workflowEtatColor-5{border-left-color:#3357ff}.workflowEtatColor-6{border-left-color:#ff8c00}.workflowEtatColor-7{border-left-color:indigo}.workflowEtatColor-8{border-left-color:#33ff57}.workflowEtatColor-9{border-left-color:#ff5733}.workflowEtatColor-10{border-left-color:khaki}[class*=workflowEtatColor-]{border-left-style:solid;border-left-width:4px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i6.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i7.TsiCurrencyOtherDisplayComponent, selector: "Tsi-Currency-Other-Display", inputs: ["currency", "inputData"] }, { kind: "component", type: i8.TsiCurrencySocieteDisplayComponent, selector: "Tsi-Currency-Societe-Display", inputs: ["inputData"] }, { kind: "component", type: i9.TsiDecimalDisplayComponent, selector: "Tsi-Decimal-Display", inputs: ["inputData", "formatDecimal", "numOfDecimal"] }, { kind: "component", type: i10.TsiIntegerDisplayComponent, selector: "Tsi-Integer-Display", inputs: ["inputData"] }, { kind: "component", type: i11.TsiRateDisplayComponent, selector: "Tsi-Rate-Display", inputs: ["isFraction", "inputData", "numOfDecimal"] }, { kind: "component", type: i12.SpinnerComponent, selector: "app-spinner" }, { kind: "pipe", type: i3.LocalizePipe, name: "localize" }] }); }
|
|
323
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiKanbanWorkflowEtatComponent, selector: "Tsi-kanban-workflow-etat", inputs: { cardBusinessClass: "cardBusinessClass", header: "header", id: "id", page$: "page$", descriminatorValue: "descriminatorValue", summaryColumns: "summaryColumns", overflowActionsMenu: "overflowActionsMenu", selectKeyOnly: "selectKeyOnly", key: "key", page: "page" }, outputs: { buttonClicked: "buttonClicked", callSearch: "callSearch" }, usesInheritance: true, ngImport: i0, template: "<div class=\"card flex justify-content-center\">\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalCount\"\r\n [rowsPerPageOptions]=\"[1, 10, 25, 50]\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{{ 'Showing' | localize }} {first} {{'to' | localize}} {last} {{ 'of' | localize }} {totalRecords}\">\r\n </p-paginator>\r\n</div>\r\n\r\n<div class=\"kanban-board flex gap-4 overflow-auto\">\r\n <div *ngFor=\"let workflowEtat of displayedWorkFlowEtatLabels; trackBy: trackByWorkflowEtat\"\r\n class=\"kanban-column flex flex-column border-round surface-0 shadow-2\"\r\n (dragover)=\"allowDrop($event)\"\r\n (drop)=\"drop($event, workflowEtat.key)\">\r\n \r\n <div class=\"column-header p-3 border-bottom-1 surface-border font-semibold\">\r\n {{ workflowEtat.localized }}\r\n <span class=\"text-sm font-normal text-gray-500\">\r\n ({{ getColumnCount(workflowEtat.key) }})\r\n </span>\r\n <div class=\"text-xs font-normal text-gray-500\" *ngIf=\"hasColumnSummaries\">\r\n <div *ngFor=\"let sumCol of summaryColumns\" class=\"flex align-items-center gap-1\">\r\n <span>{{ (sumCol.header ?? sumCol.field) | localize }}:</span>\r\n <ng-container [ngSwitch]=\"sumCol.type\">\r\n <Tsi-Currency-Societe-Display *ngSwitchCase=\"displayTypes.CURRENCY_SOCIETE_DISPLAY\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Currency-Societe-Display>\r\n <Tsi-Integer-Display *ngSwitchCase=\"displayTypes.INTEGER_DISPLAY\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Integer-Display>\r\n <Tsi-Rate-Display *ngSwitchCase=\"displayTypes.RATE_DISPLAY\"\r\n [isFraction]=\"sumCol.isFraction ?? false\" [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Rate-Display>\r\n <Tsi-Decimal-Display *ngSwitchCase=\"displayTypes.DECIMAL_DISPLAY\"\r\n [formatDecimal]=\"sumCol.formatDecimal\" [numOfDecimal]=\"sumCol.numOfDecimal\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Decimal-Display>\r\n <Tsi-Currency-Other-Display *ngSwitchCase=\"displayTypes.CURRENCY_OTHER_DISPLAY\"\r\n [currency]=\"sumCol.currencyOtherCode\" [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Currency-Other-Display>\r\n <span *ngSwitchDefault>{{ getColumnSummaryValue(workflowEtat.key, sumCol.field) }}</span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column-cards flex-1 overflow-auto p-3\">\r\n <div *ngFor=\"let card of cardMapByWorkflowEtat.get(workflowEtat.key); trackBy: trackByCard\"\r\n class=\"kanban-card p-3 border-round bg-white mb-3 shadow-1\"\r\n [ngClass]=\"getWorkflowEtatClass(card)\"\r\n draggable=\"true\"\r\n (dragstart)=\"dragStart($event, card)\"\r\n (dragend)=\"dragEnd()\">\r\n \r\n <div class=\"font-bold mb-2\">{{ card.headerTitle }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">{{ card.description }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">\r\n <span class=\"font-semibold\">{{ 'shared_tsi_component_grid_kanban_workflowEtat_view_workflow_etat' | localize }}:</span>\r\n <span>{{ getLocalizedWorkflowEtat(card.status) }}</span>\r\n </div>\r\n\r\n <p-menu appendTo=\"body\" #menuMoreActions\r\n [model]=\"overflowActionsMenu\"\r\n [popup]=\"true\" styleClass=\"overflow-menu\"\r\n [style]=\"{ 'width': 'auto', 'min-width': '0px' }\">\r\n <ng-template pTemplate=\"item\" let-menuItem>\r\n <a pRipple class=\"flex align-items-center p-menuitem-link\"\r\n [ngClass]=\"menuItem.styleClass\"\r\n (click)=\"onOverflowActionClicked(card, menuItem)\">\r\n <i *ngIf=\"menuItem.id === 'notes'\" class=\"{{ menuItem.iconClass }} p-menuitem-icon badge-icon has-badge\"\r\n [ngClass]=\"menuItem.iconStyleClass\" pBadge severity=\"danger\"\r\n [value]=\"card.fullRecord.notesCount\"\r\n [badgeDisabled]=\"card.fullRecord.notesCount == null\" badgePosition=\"top-right\">\r\n </i>\r\n\r\n <i *ngIf=\"menuItem.id !== 'notes'\" class=\"{{menuItem.iconClass}} p-menuitem-icon\"\r\n [ngClass]=\"menuItem.iconStyleClass\">\r\n </i>\r\n\r\n <span class=\"menu-label\">\r\n {{ menuItem.label | localize }}\r\n </span>\r\n </a>\r\n </ng-template>\r\n </p-menu>\r\n\r\n <div class=\"flex justify-content-end align-items-center mt-1 gap-2 p-0\">\r\n <Tsi-Button [styleClass]=\"'p-button-rounded p-button-text p-0-5'\" type=\"button\" icon=\"pi pi-pencil\"\r\n (click)=\"edit(card.uid)\">\r\n </Tsi-Button>\r\n <p-button type=\"button\" icon=\"pi pi-ellipsis-v\" styleClass=\"overflow-btn\"\r\n (onClick)=\"overflowColumnClicked(menuMoreActions, $event, card)\">\r\n </p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"overlay\" *ngIf=\"isLoading\">\r\n <div class=\"spinner-wrapper\">\r\n <app-spinner></app-spinner>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;padding:1rem}[draggable=true]{-webkit-user-select:none;user-select:none}.kanban-board{height:calc(100vh - 100px);padding:1rem}.kanban-column{width:300px;max-height:100%;display:flex;flex-direction:column;background-color:#f8f9fa}.column-header{font-size:1rem;font-weight:700;background-color:#fff;border-radius:6px 6px 0 0}.column-cards{overflow-y:auto;flex:1}.kanban-card{border-left:4px solid;cursor:move;transition:border-color .3s ease}.workflowEtatColor-0{border-left-color:#7269ef}.workflowEtatColor-1{border-left-color:#00c853}.workflowEtatColor-2{border-left-color:#ffab00}.workflowEtatColor-3{border-left-color:#d50000}.workflowEtatColor-4{border-left-color:#ff33a8}.workflowEtatColor-5{border-left-color:#3357ff}.workflowEtatColor-6{border-left-color:#ff8c00}.workflowEtatColor-7{border-left-color:indigo}.workflowEtatColor-8{border-left-color:#33ff57}.workflowEtatColor-9{border-left-color:#ff5733}.workflowEtatColor-10{border-left-color:khaki}[class*=workflowEtatColor-]{border-left-style:solid;border-left-width:4px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i7.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i8.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i9.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "directive", type: i10.BadgeDirective, selector: "[pBadge]", inputs: ["badgeDisabled", "badgeSize", "size", "severity", "value", "badgeStyle", "badgeStyleClass"] }, { kind: "component", type: i11.TsiCurrencyOtherDisplayComponent, selector: "Tsi-Currency-Other-Display", inputs: ["currency", "inputData"] }, { kind: "component", type: i12.TsiCurrencySocieteDisplayComponent, selector: "Tsi-Currency-Societe-Display", inputs: ["inputData"] }, { kind: "component", type: i13.TsiDecimalDisplayComponent, selector: "Tsi-Decimal-Display", inputs: ["inputData", "formatDecimal", "numOfDecimal"] }, { kind: "component", type: i14.TsiIntegerDisplayComponent, selector: "Tsi-Integer-Display", inputs: ["inputData"] }, { kind: "component", type: i15.TsiRateDisplayComponent, selector: "Tsi-Rate-Display", inputs: ["isFraction", "inputData", "numOfDecimal"] }, { kind: "component", type: i16.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "component", type: i17.SpinnerComponent, selector: "app-spinner" }, { kind: "pipe", type: i3.LocalizePipe, name: "localize" }] }); }
|
|
286
324
|
}
|
|
287
325
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiKanbanWorkflowEtatComponent, decorators: [{
|
|
288
326
|
type: Component,
|
|
289
|
-
args: [{ selector: 'Tsi-kanban-workflow-etat', template: "<div class=\"card flex justify-content-center\">\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalCount\"\r\n [rowsPerPageOptions]=\"[1, 10, 25, 50]\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{{ 'Showing' | localize }} {first} {{'to' | localize}} {last} {{ 'of' | localize }} {totalRecords}\">\r\n </p-paginator>\r\n</div>\r\n\r\n<div class=\"kanban-board flex gap-4 overflow-auto\">\r\n <div *ngFor=\"let workflowEtat of displayedWorkFlowEtatLabels; trackBy: trackByWorkflowEtat\"\r\n class=\"kanban-column flex flex-column border-round surface-0 shadow-2\"\r\n (dragover)=\"allowDrop($event)\"\r\n (drop)=\"drop($event, workflowEtat.key)\">\r\n \r\n <div class=\"column-header p-3 border-bottom-1 surface-border font-semibold\">\r\n {{ workflowEtat.localized }}\r\n <span class=\"text-sm font-normal text-gray-500\">\r\n ({{ getColumnCount(workflowEtat.key) }})\r\n </span>\r\n <div class=\"text-xs font-normal text-gray-500\" *ngIf=\"hasColumnSummaries\">\r\n <div *ngFor=\"let sumCol of summaryColumns\" class=\"flex align-items-center gap-1\">\r\n <span>{{ (sumCol.header ?? sumCol.field) | localize }}:</span>\r\n <ng-container [ngSwitch]=\"sumCol.type\">\r\n <Tsi-Currency-Societe-Display *ngSwitchCase=\"displayTypes.CURRENCY_SOCIETE_DISPLAY\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Currency-Societe-Display>\r\n <Tsi-Integer-Display *ngSwitchCase=\"displayTypes.INTEGER_DISPLAY\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Integer-Display>\r\n <Tsi-Rate-Display *ngSwitchCase=\"displayTypes.RATE_DISPLAY\"\r\n [isFraction]=\"sumCol.isFraction ?? false\" [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Rate-Display>\r\n <Tsi-Decimal-Display *ngSwitchCase=\"displayTypes.DECIMAL_DISPLAY\"\r\n [formatDecimal]=\"sumCol.formatDecimal\" [numOfDecimal]=\"sumCol.numOfDecimal\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Decimal-Display>\r\n <Tsi-Currency-Other-Display *ngSwitchCase=\"displayTypes.CURRENCY_OTHER_DISPLAY\"\r\n [currency]=\"sumCol.currencyOtherCode\" [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Currency-Other-Display>\r\n <span *ngSwitchDefault>{{ getColumnSummaryValue(workflowEtat.key, sumCol.field) }}</span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column-cards flex-1 overflow-auto p-3\">\r\n <div *ngFor=\"let card of cardMapByWorkflowEtat.get(workflowEtat.key); trackBy: trackByCard\"\r\n class=\"kanban-card p-3 border-round bg-white mb-3 shadow-1\"\r\n [ngClass]=\"getWorkflowEtatClass(card)\"\r\n draggable=\"true\"\r\n (dragstart)=\"dragStart($event, card)\"\r\n (dragend)=\"dragEnd()\">\r\n \r\n <div class=\"font-bold mb-2\">{{ card.headerTitle }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">{{ card.description }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">\r\n <span class=\"font-semibold\">{{ 'shared_tsi_component_grid_kanban_workflowEtat_view_workflow_etat' | localize }}:</span>\r\n <span>{{ getLocalizedWorkflowEtat(card.status) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"overlay\" *ngIf=\"isLoading\">\r\n <div class=\"spinner-wrapper\">\r\n <app-spinner></app-spinner>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;padding:1rem}[draggable=true]{-webkit-user-select:none;user-select:none}.kanban-board{height:calc(100vh - 100px);padding:1rem}.kanban-column{width:300px;max-height:100%;display:flex;flex-direction:column;background-color:#f8f9fa}.column-header{font-size:1rem;font-weight:700;background-color:#fff;border-radius:6px 6px 0 0}.column-cards{overflow-y:auto;flex:1}.kanban-card{border-left:4px solid;cursor:move;transition:border-color .3s ease}.workflowEtatColor-0{border-left-color:#7269ef}.workflowEtatColor-1{border-left-color:#00c853}.workflowEtatColor-2{border-left-color:#ffab00}.workflowEtatColor-3{border-left-color:#d50000}.workflowEtatColor-4{border-left-color:#ff33a8}.workflowEtatColor-5{border-left-color:#3357ff}.workflowEtatColor-6{border-left-color:#ff8c00}.workflowEtatColor-7{border-left-color:indigo}.workflowEtatColor-8{border-left-color:#33ff57}.workflowEtatColor-9{border-left-color:#ff5733}.workflowEtatColor-10{border-left-color:khaki}[class*=workflowEtatColor-]{border-left-style:solid;border-left-width:4px}\n"] }]
|
|
327
|
+
args: [{ selector: 'Tsi-kanban-workflow-etat', template: "<div class=\"card flex justify-content-center\">\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalCount\"\r\n [rowsPerPageOptions]=\"[1, 10, 25, 50]\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{{ 'Showing' | localize }} {first} {{'to' | localize}} {last} {{ 'of' | localize }} {totalRecords}\">\r\n </p-paginator>\r\n</div>\r\n\r\n<div class=\"kanban-board flex gap-4 overflow-auto\">\r\n <div *ngFor=\"let workflowEtat of displayedWorkFlowEtatLabels; trackBy: trackByWorkflowEtat\"\r\n class=\"kanban-column flex flex-column border-round surface-0 shadow-2\"\r\n (dragover)=\"allowDrop($event)\"\r\n (drop)=\"drop($event, workflowEtat.key)\">\r\n \r\n <div class=\"column-header p-3 border-bottom-1 surface-border font-semibold\">\r\n {{ workflowEtat.localized }}\r\n <span class=\"text-sm font-normal text-gray-500\">\r\n ({{ getColumnCount(workflowEtat.key) }})\r\n </span>\r\n <div class=\"text-xs font-normal text-gray-500\" *ngIf=\"hasColumnSummaries\">\r\n <div *ngFor=\"let sumCol of summaryColumns\" class=\"flex align-items-center gap-1\">\r\n <span>{{ (sumCol.header ?? sumCol.field) | localize }}:</span>\r\n <ng-container [ngSwitch]=\"sumCol.type\">\r\n <Tsi-Currency-Societe-Display *ngSwitchCase=\"displayTypes.CURRENCY_SOCIETE_DISPLAY\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Currency-Societe-Display>\r\n <Tsi-Integer-Display *ngSwitchCase=\"displayTypes.INTEGER_DISPLAY\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Integer-Display>\r\n <Tsi-Rate-Display *ngSwitchCase=\"displayTypes.RATE_DISPLAY\"\r\n [isFraction]=\"sumCol.isFraction ?? false\" [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Rate-Display>\r\n <Tsi-Decimal-Display *ngSwitchCase=\"displayTypes.DECIMAL_DISPLAY\"\r\n [formatDecimal]=\"sumCol.formatDecimal\" [numOfDecimal]=\"sumCol.numOfDecimal\"\r\n [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Decimal-Display>\r\n <Tsi-Currency-Other-Display *ngSwitchCase=\"displayTypes.CURRENCY_OTHER_DISPLAY\"\r\n [currency]=\"sumCol.currencyOtherCode\" [inputData]=\"getColumnSummaryValue(workflowEtat.key, sumCol.field)\">\r\n </Tsi-Currency-Other-Display>\r\n <span *ngSwitchDefault>{{ getColumnSummaryValue(workflowEtat.key, sumCol.field) }}</span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column-cards flex-1 overflow-auto p-3\">\r\n <div *ngFor=\"let card of cardMapByWorkflowEtat.get(workflowEtat.key); trackBy: trackByCard\"\r\n class=\"kanban-card p-3 border-round bg-white mb-3 shadow-1\"\r\n [ngClass]=\"getWorkflowEtatClass(card)\"\r\n draggable=\"true\"\r\n (dragstart)=\"dragStart($event, card)\"\r\n (dragend)=\"dragEnd()\">\r\n \r\n <div class=\"font-bold mb-2\">{{ card.headerTitle }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">{{ card.description }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">\r\n <span class=\"font-semibold\">{{ 'shared_tsi_component_grid_kanban_workflowEtat_view_workflow_etat' | localize }}:</span>\r\n <span>{{ getLocalizedWorkflowEtat(card.status) }}</span>\r\n </div>\r\n\r\n <p-menu appendTo=\"body\" #menuMoreActions\r\n [model]=\"overflowActionsMenu\"\r\n [popup]=\"true\" styleClass=\"overflow-menu\"\r\n [style]=\"{ 'width': 'auto', 'min-width': '0px' }\">\r\n <ng-template pTemplate=\"item\" let-menuItem>\r\n <a pRipple class=\"flex align-items-center p-menuitem-link\"\r\n [ngClass]=\"menuItem.styleClass\"\r\n (click)=\"onOverflowActionClicked(card, menuItem)\">\r\n <i *ngIf=\"menuItem.id === 'notes'\" class=\"{{ menuItem.iconClass }} p-menuitem-icon badge-icon has-badge\"\r\n [ngClass]=\"menuItem.iconStyleClass\" pBadge severity=\"danger\"\r\n [value]=\"card.fullRecord.notesCount\"\r\n [badgeDisabled]=\"card.fullRecord.notesCount == null\" badgePosition=\"top-right\">\r\n </i>\r\n\r\n <i *ngIf=\"menuItem.id !== 'notes'\" class=\"{{menuItem.iconClass}} p-menuitem-icon\"\r\n [ngClass]=\"menuItem.iconStyleClass\">\r\n </i>\r\n\r\n <span class=\"menu-label\">\r\n {{ menuItem.label | localize }}\r\n </span>\r\n </a>\r\n </ng-template>\r\n </p-menu>\r\n\r\n <div class=\"flex justify-content-end align-items-center mt-1 gap-2 p-0\">\r\n <Tsi-Button [styleClass]=\"'p-button-rounded p-button-text p-0-5'\" type=\"button\" icon=\"pi pi-pencil\"\r\n (click)=\"edit(card.uid)\">\r\n </Tsi-Button>\r\n <p-button type=\"button\" icon=\"pi pi-ellipsis-v\" styleClass=\"overflow-btn\"\r\n (onClick)=\"overflowColumnClicked(menuMoreActions, $event, card)\">\r\n </p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"overlay\" *ngIf=\"isLoading\">\r\n <div class=\"spinner-wrapper\">\r\n <app-spinner></app-spinner>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;padding:1rem}[draggable=true]{-webkit-user-select:none;user-select:none}.kanban-board{height:calc(100vh - 100px);padding:1rem}.kanban-column{width:300px;max-height:100%;display:flex;flex-direction:column;background-color:#f8f9fa}.column-header{font-size:1rem;font-weight:700;background-color:#fff;border-radius:6px 6px 0 0}.column-cards{overflow-y:auto;flex:1}.kanban-card{border-left:4px solid;cursor:move;transition:border-color .3s ease}.workflowEtatColor-0{border-left-color:#7269ef}.workflowEtatColor-1{border-left-color:#00c853}.workflowEtatColor-2{border-left-color:#ffab00}.workflowEtatColor-3{border-left-color:#d50000}.workflowEtatColor-4{border-left-color:#ff33a8}.workflowEtatColor-5{border-left-color:#3357ff}.workflowEtatColor-6{border-left-color:#ff8c00}.workflowEtatColor-7{border-left-color:indigo}.workflowEtatColor-8{border-left-color:#33ff57}.workflowEtatColor-9{border-left-color:#ff5733}.workflowEtatColor-10{border-left-color:khaki}[class*=workflowEtatColor-]{border-left-style:solid;border-left-width:4px}\n"] }]
|
|
290
328
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.WorkflowConfigurationService }, { type: i2.EntityConfigurationService }, { type: i3.LocalizePipe }, { type: i4.TsiNotificationService }], propDecorators: { buttonClicked: [{
|
|
291
329
|
type: Output
|
|
292
330
|
}], callSearch: [{
|
|
@@ -303,7 +341,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
303
341
|
type: Input
|
|
304
342
|
}], summaryColumns: [{
|
|
305
343
|
type: Input
|
|
344
|
+
}], overflowActionsMenu: [{
|
|
345
|
+
type: Input
|
|
346
|
+
}], selectKeyOnly: [{
|
|
347
|
+
type: Input
|
|
348
|
+
}], key: [{
|
|
349
|
+
type: Input
|
|
306
350
|
}], page: [{
|
|
307
351
|
type: Input
|
|
308
352
|
}] } });
|
|
309
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWthbmJhbi13b3JrZmxvdy1ldGF0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2kta2FuYmFuLXdvcmtmbG93LWV0YXQvdHNpLWthbmJhbi13b3JrZmxvdy1ldGF0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2kta2FuYmFuLXdvcmtmbG93LWV0YXQvdHNpLWthbmJhbi13b3JrZmxvdy1ldGF0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxHLE9BQU8sRUFBbUIsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTVELE9BQU8sRUFBa0gseUJBQXlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJekssT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFJekYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQUV6RDs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sOEJBQStCLFNBQVEsZ0JBQWdCO0lBaUJoRSxJQUFhLElBQUksQ0FBQyxLQUFpQjtRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELElBQUksSUFBSSxLQUE2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBcUJ6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RyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUtPLElBQUk7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYWdpbmF0b3JTdGF0ZSB9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWZhdWx0Q2FyZEhlYWRlciB9IGZyb20gJy4uLy4uL2NvbnN0cy90c2ktY29uc3RzJztcclxuaW1wb3J0IHsgQnV0dG9uQ2xpY2tSZXN1bHQsIEdyaWRDb2x1bW4gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCwgVHNpQ2FyZCwgdXBkYXRlRW50aXR5V29ya2Zsb3dJbmZvcm1hdGlvbiwgd29ya2Zsb3dFdGF0RGV0YWlsbGVkUmVzcG9uc2UsIFdvcmtmbG93RXRhdEthbmJhblJlcXVlc3QgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2VudGl0eS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL2FwcC1iYXNlL2FwcC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrZmxvdy93b3JrZmxvdy1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSUdyb3VwZWRSZXN1bHQsIElQYWdlLCBJU3VtbWFyeUZvclByb3ByZXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wYWdpbmF0aW9uL3BhZ2luYXRpb24tYmFzZSc7XHJcbmltcG9ydCB7IERpc3BsYXlUeXBlcyB9IGZyb20gJy4uLy4uL2VudW1zL2Rpc3BsYXktdHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIFRzaUthbmJhbldvcmtmbG93RXRhdENvbXBvbmVudFxyXG4gKiBEZXNjcmlwdGlvbjogRGlzcGxheXMgYSBLYW5iYW4gYm9hcmQgdmlldyBmb3IgVFNJIGVudGl0aWVzIHVzaW5nIHRoZSB3b3JrZmxvdyBldGF0IHZhbHVlLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ1RzaS1rYW5iYW4td29ya2Zsb3ctZXRhdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHNpLWthbmJhbi13b3JrZmxvdy1ldGF0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsOiAnLi90c2kta2FuYmFuLXdvcmtmbG93LWV0YXQuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpS2FuYmFuV29ya2Zsb3dFdGF0Q29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gICAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PigpO1xyXG4gICAgQE91dHB1dCgpIGNhbGxTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBASW5wdXQoKSBjYXJkQnVzaW5lc3NDbGFzczogYW55O1xyXG4gICAgQElucHV0KCkgaGVhZGVyOiBhbnk7XHJcbiAgICBASW5wdXQoKSBpZDogYW55O1xyXG4gICAgQElucHV0KCkgcGFnZSQhOiBCZWhhdmlvclN1YmplY3Q8SVBhZ2U8YW55PiB8IG51bGw+O1xyXG4gICAgQElucHV0KCkgZGVzY3JpbWluYXRvclZhbHVlPzogc3RyaW5nXHJcbiAgICAvLyBDb2x1bW5zIHdob3NlIHBlci1jb2x1bW4gc3VtbWFyeSBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSBLYW5iYW4gaGVhZGVyLCBmb3JtYXR0ZWRcclxuICAgIC8vIGJ5IHRoZWlyIGRpc3BsYXkgdHlwZSAobGlrZSB0aGUgdGFibGUgZm9vdGVyKS4gRW1wdHkgYnkgZGVmYXVsdCDihpIgbm8gc3VtbWFyaWVzIHNob3duLlxyXG4gICAgQElucHV0KCkgc3VtbWFyeUNvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG5cclxuICAgIHJlYWRvbmx5IGRpc3BsYXlUeXBlcyA9IERpc3BsYXlUeXBlcztcclxuXHJcbiAgICBwcml2YXRlIF9wYWdlOiBJUGFnZTxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgQElucHV0KCkgc2V0IHBhZ2UodmFsdWU6IElQYWdlPGFueT4pIHtcclxuICAgICAgICB0aGlzLl9wYWdlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIGdldCBwYWdlKCk6IElQYWdlPGFueT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fcGFnZTsgfVxyXG5cclxuICAgIGNhcmRzOiBUc2lDYXJkW10gPSBbXTtcclxuICAgIGNhcmRNYXBCeVdvcmtmbG93RXRhdDogTWFwPHN0cmluZyB8IG51bGwsIFRzaUNhcmRbXT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgLy8gUG9wdWxhdGVkIG9ubHkgd2hlbiB0aGUgcGFnZSBpcyBncm91cGVkIHNlcnZlci1zaWRlIChvbmUgZ3JvdXAgcGVyIHdvcmtmbG93IGV0YXQpOlxyXG4gICAgLy8gdHJ1ZSBwZXItY29sdW1uIHRvdGFscyBhbmQgcGVyLWNvbHVtbiBzdW1tYXJpZXMsIGluZGVwZW5kZW50IG9mIHRoZSBjdXJyZW50IHBhZ2UuXHJcbiAgICBjb3VudEJ5V29ya2Zsb3dFdGF0OiBNYXA8c3RyaW5nIHwgbnVsbCwgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICAgIHN1bW1hcnlCeVdvcmtmbG93RXRhdDogTWFwPHN0cmluZyB8IG51bGwsIElTdW1tYXJ5Rm9yUHJvcHJldHlbXT4gPSBuZXcgTWFwKCk7XHJcbiAgICBwcml2YXRlIF9pc0dyb3VwZWQgPSBmYWxzZTtcclxuXHJcbiAgICBkcmFnZ2VkQ2FyZDogVHNpQ2FyZCB8IG51bGwgPSBudWxsO1xyXG4gICAgZmlyc3QgPSAwO1xyXG4gICAgcm93cyA9IDEwO1xyXG4gICAgdG90YWxDb3VudCA9IDA7XHJcbiAgICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICB3b3JrRmxvd0V0YXROb21MYWJlbHM6IHsga2V5OiBzdHJpbmcgfCBudWxsOyBsb2NhbGl6ZWQ6IHN0cmluZyB9W10gPVxyXG4gICAgICAgIFtcclxuICAgICAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIF93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2VudGl0eUNvbmZpZzogRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbG9jYWxpemU6IExvY2FsaXplUGlwZSxcclxuICAgICAgICBwcml2YXRlIF9ub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLndvcmtGbG93RXRhdE5vbUxhYmVscyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAga2V5OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxpemVkOiB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3dvcmtmbG93RXRhdF92aWV3X3NhbnNfd29ya2Zsb3cnKS50cmltKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldFdvcmtmbG93RXRhdCh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSlcclxuICAgICAgICBhd2FpdCB0aGlzLmdldEVudGl0eUluZm8oKTtcclxuXHJcbiAgICAgICAgdGhpcy5wYWdlJC5zdWJzY3JpYmUoYXN5bmMgcGFnZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhcGFnZS5sb2FkaW5nO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKHBhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZHJhZ1N0YXJ0KF86IERyYWdFdmVudCwgY2FyZDogVHNpQ2FyZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZHJhZ2dlZENhcmQgPSBjYXJkO1xyXG4gICAgfVxyXG5cclxuICAgIGRyYWdFbmQoKTogdm9pZCB7IHRoaXMuZHJhZ2dlZENhcmQgPSBudWxsOyB9XHJcblxyXG4gICAgYWxsb3dEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgfVxyXG5cclxuICAgIHRyYWNrQnlXb3JrZmxvd0V0YXQoaW5kZXg6IG51bWJlciwgc3RhdHVzOiB7IGtleTogc3RyaW5nIHwgbnVsbDsgbG9jYWxpemVkOiBzdHJpbmcgfSkgeyByZXR1cm4gc3RhdHVzLmtleTsgfVxyXG5cclxuICAgIHRyYWNrQnlDYXJkKGluZGV4OiBudW1iZXIsIGNhcmQ6IFRzaUNhcmQpIHsgcmV0dXJuIGNhcmQudWlkOyB9XHJcblxyXG4gICAgZHJvcChldmVudDogRHJhZ0V2ZW50LCBuZXdLZXk6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5kcmFnZ2VkQ2FyZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmKG5ld0tleSA9PSBudWxsIHx8IG5ld0tleSA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKFwic2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9rYW5iYW5fd29ya2Zsb3dFdGF0X3ZpZXdfc2Fuc193b3JrZmxvd19mb3JiaWRkZW5cIilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjYXJkID0gdGhpcy5kcmFnZ2VkQ2FyZDtcclxuICAgICAgICBjb25zdCBwcmV2aW91c1dvcmtmbG93RXRhdCA9IHRoaXMuZHJhZ2dlZENhcmQuc3RhdHVzO1xyXG5cclxuICAgICAgICBpZihwcmV2aW91c1dvcmtmbG93RXRhdCA9PSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3dvcmtmbG93RXRhdF92aWV3X25vX3dvcmtmbG93XCIpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuZHJhZ2dlZENhcmQuc3RhdHVzICE9PSBuZXdLZXkgJiYgdGhpcy5jYXJkQnVzaW5lc3NDbGFzcykge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWVcclxuICAgICAgICAgICAgbGV0IHJlcXVlc3Q6IFdvcmtmbG93RXRhdEthbmJhblJlcXVlc3QgPSBuZXcgV29ya2Zsb3dFdGF0S2FuYmFuUmVxdWVzdCgpO1xyXG4gICAgICAgICAgICByZXF1ZXN0LndvcmtGbG93RXRhdCA9IHRoaXMuZHJhZ2dlZENhcmQuc3RhdHVzXHJcbiAgICAgICAgICAgIHJlcXVlc3QuYnVzaW5lc3NDbGFzcyA9IHRoaXMuY2FyZEJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgICAgICAgIHJlcXVlc3QudWlkT2JqZXQgPSB0aGlzLmRyYWdnZWRDYXJkLnVpZDtcclxuICAgICAgICAgICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lID0gdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lXHJcbiAgICAgICAgICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSA9IHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZVxyXG4gICAgICAgICAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgICAgIHJlcXVlc3Qud29ya0Zsb3dFdGF0U3VpdmFudCA9IG5ld0tleTtcclxuICAgICAgICAgICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS51cGRhdGVXb3JrZmxvd0V0YXRGcm9tS2FuYmFuVmlldyhyZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjYXJkLnN0YXR1cyA9IG5ld0tleTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRNYXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoZXJyb3I/LmVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgIGNhcmQuc3RhdHVzID0gcHJldmlvdXNXb3JrZmxvd0V0YXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRNYXAoKTtcclxuICAgICAgICB0aGlzLmRyYWdnZWRDYXJkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2luYXRvclN0YXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maXJzdCA9IGV2ZW50LmZpcnN0ID8/IDA7XHJcbiAgICAgICAgdGhpcy5yb3dzID0gZXZlbnQucm93cyA/PyAxMDtcclxuICAgICAgICB0aGlzLmNhbGxTZWFyY2guZW1pdCh7IHNraXBDb3VudDogdGhpcy5maXJzdCwgbWF4UmVzdWx0Q291bnQ6IHRoaXMucm93cyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRXb3JrZmxvd0V0YXRDbGFzcyhjYXJkOiBUc2lDYXJkKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMud29ya0Zsb3dFdGF0Tm9tTGFiZWxzLmZpbmRJbmRleChsID0+IGwua2V5ID09PSBjYXJkLnN0YXR1cyk7XHJcbiAgICAgICAgcmV0dXJuIGB3b3JrZmxvd0V0YXRDb2xvci0ke2luZGV4ID49IDAgPyBpbmRleCA6ICdkZWZhdWx0J31gO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExvY2FsaXplZFdvcmtmbG93RXRhdChrZXk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICgha2V5KSByZXR1cm4gJyc7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLndvcmtGbG93RXRhdE5vbUxhYmVscy5maW5kKHMgPT4gcy5rZXkgPT09IGtleSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoPy5sb2NhbGl6ZWQgPz8ga2V5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRydWUgcGVyLWNvbHVtbiB0b3RhbDogdGhlIGdyb3VwJ3MgdW5wYWdlZCBjb3VudCB3aGVuIGdyb3VwZWQgc2VydmVyLXNpZGUsXHJcbiAgICAvLyBvdGhlcndpc2UgdGhlIG51bWJlciBvZiBjYXJkcyBvbiB0aGUgY3VycmVudCBwYWdlIChsZWdhY3kgY2xpZW50LXNpZGUgZ3JvdXBpbmcpLlxyXG4gICAgZ2V0Q29sdW1uQ291bnQoa2V5OiBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5faXNHcm91cGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvdW50QnlXb3JrZmxvd0V0YXQuZ2V0KGtleSkgPz8gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FyZE1hcEJ5V29ya2Zsb3dFdGF0LmdldChrZXkpPy5sZW5ndGggPz8gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBXaGV0aGVyIHBlci1jb2x1bW4gc3VtbWFyaWVzIHNob3VsZCByZW5kZXIgKGdyb3VwZWQgZGF0YSArIGF0IGxlYXN0IG9uZSBvcHRlZC1pbiBjb2x1bW4pLlxyXG4gICAgZ2V0IGhhc0NvbHVtblN1bW1hcmllcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNHcm91cGVkICYmICh0aGlzLnN1bW1hcnlDb2x1bW5zPy5sZW5ndGggPz8gMCkgPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbHVtbnMgdG8gcmVuZGVyOiB0aGUgXCJzYW5zIHdvcmtmbG93XCIgKG51bGwta2V5KSBjb2x1bW4gaXMgaGlkZGVuIHdoZW4gaXQgaGFzIG5vIGNhcmRzO1xyXG4gICAgLy8gcmVhbCB3b3JrZmxvdy1ldGF0IGNvbHVtbnMgYWx3YXlzIHNob3cgcmVnYXJkbGVzcyBvZiBjb3VudC5cclxuICAgIGdldCBkaXNwbGF5ZWRXb3JrRmxvd0V0YXRMYWJlbHMoKTogeyBrZXk6IHN0cmluZyB8IG51bGw7IGxvY2FsaXplZDogc3RyaW5nIH1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya0Zsb3dFdGF0Tm9tTGFiZWxzLmZpbHRlcihsID0+IGwua2V5ICE9PSBudWxsIHx8IHRoaXMuZ2V0Q29sdW1uQ291bnQobC5rZXkpID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhlIFNVTSBmb3IgYSBzdW1tYXJpemVkIGNvbHVtbiB3aXRoaW4gYSB3b3JrZmxvdy1ldGF0IGdyb3VwICh1bmRlZmluZWQgd2hlbiBub3QgZ3JvdXBlZCBvciBhYnNlbnQpLlxyXG4gICAgZ2V0Q29sdW1uU3VtbWFyeVZhbHVlKGtleTogc3RyaW5nIHwgbnVsbCwgZmllbGQ6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0dyb3VwZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLnN1bW1hcnlCeVdvcmtmbG93RXRhdC5nZXQoa2V5KVxyXG4gICAgICAgICAgICA/LmZpbmQocyA9PiBzLnByb3ByZXR5Py50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoPy5zdW1tYXJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlUGFnZUNoYW5nZShwYWdlOiBJUGFnZTxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHBhZ2U/Lmdyb3Vwcykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUdyb3VwZWRQYWdlKHBhZ2UpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXBhZ2U/Lml0ZW1zKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuX2lzR3JvdXBlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2FyZHMgPSBhd2FpdCB0aGlzLm1hcEl0ZW1zVG9DYXJkcyhwYWdlLml0ZW1zKTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBwYWdlLnRvdGFsQ291bnQ7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VydmVyLXNpZGUgZ3JvdXBlZCBwYWdlOiBvbmUgZ3JvdXAgcGVyIHdvcmtmbG93IGV0YXQsIGVhY2ggY2FycnlpbmcgaXRzIG93biBhY2N1cmF0ZVxyXG4gICAgLy8gKHVucGFnZWQpIHRvdGFsIGNvdW50IGFuZCBzdW1tYXJpZXMuIENhcmRzIG9uIHRoZSBjdXJyZW50IHBhZ2UgYXJlIG1hcHBlZCBhbmQgYnVja2V0ZWRcclxuICAgIC8vIGV4YWN0bHkgYXMgaW4gdGhlIGZsYXQgcGF0aCAodmlhIHVwZGF0ZUNhcmRNYXApOyB0aGUgdHJ1ZSBwZXItY29sdW1uIGNvdW50cy9zdW1tYXJpZXNcclxuICAgIC8vIGNvbWUgZnJvbSB0aGUgZ3JvdXBzLCBhbmQgdGhlIHNpbmdsZSBib2FyZCBwYWdpbmF0b3Igc3BhbnMgdGhlIGxhcmdlc3QgY29sdW1uIChzYW1lXHJcbiAgICAvLyBza2lwL3Rha2Ugd2luZG93IGFwcGxpZWQgdG8gZXZlcnkgZ3JvdXAgYnkgdGhlIGJhY2tlbmQpLlxyXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVHcm91cGVkUGFnZShwYWdlOiBJUGFnZTxhbnk+KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBzOiBJR3JvdXBlZFJlc3VsdDxhbnk+W10gPSBwYWdlLmdyb3VwcyA/PyBbXTtcclxuICAgICAgICBjb25zdCB2YWxpZEtleXMgPSB0aGlzLndvcmtGbG93RXRhdE5vbUxhYmVsc1xyXG4gICAgICAgICAgICAubWFwKGwgPT4gbC5rZXkpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGspOiBrIGlzIHN0cmluZyA9PiBrICE9PSBudWxsKTtcclxuXHJcbiAgICAgICAgY29uc3QgY291bnRzID0gbmV3IE1hcDxzdHJpbmcgfCBudWxsLCBudW1iZXI+KCk7XHJcbiAgICAgICAgY29uc3Qgc3VtbWFyaWVzID0gbmV3IE1hcDxzdHJpbmcgfCBudWxsLCBJU3VtbWFyeUZvclByb3ByZXR5W10+KCk7XHJcbiAgICAgICAgbGV0IG1heEdyb3VwVG90YWwgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcykge1xyXG4gICAgICAgICAgICBjb25zdCByYXdLZXkgPSBncm91cC5rZXk/LnRyaW0oKSB8fCBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBidWNrZXRLZXkgPSByYXdLZXkgJiYgdmFsaWRLZXlzLmluY2x1ZGVzKHJhd0tleSkgPyByYXdLZXkgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgY291bnRzLnNldChidWNrZXRLZXksIChjb3VudHMuZ2V0KGJ1Y2tldEtleSkgPz8gMCkgKyBncm91cC50b3RhbENvdW50KTtcclxuICAgICAgICAgICAgaWYgKCFzdW1tYXJpZXMuaGFzKGJ1Y2tldEtleSkpIHtcclxuICAgICAgICAgICAgICAgIHN1bW1hcmllcy5zZXQoYnVja2V0S2V5LCBncm91cC5zdW1tYXJpZXMgPz8gW10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1heEdyb3VwVG90YWwgPSBNYXRoLm1heChtYXhHcm91cFRvdGFsLCBncm91cC50b3RhbENvdW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERhdGEgc2hyYW5rIHVuZGVyIGEgbGF0ZXIgcGFnZSAoZHJhZy1kcm9wLCBhIGZpbHRlciwgb3IgYW5vdGhlciB1c2VyJ3MgY2hhbmdlKTpcclxuICAgICAgICAvLyB0aGUgY3VycmVudCBvZmZzZXQgaXMgbm93IHBhc3QgdGhlIGVuZCBvZiBldmVyeSBjb2x1bW4sIHNvIHRoZSBiYWNrZW5kIHJldHVybmVkIGFuXHJcbiAgICAgICAgLy8gZW1wdHkgd2luZG93IGFuZCB0aGUgYm9hcmQgd291bGQgbG9vayBlbXB0eSB1bnRpbCB0aGUgdXNlciBtYW51YWxseSBwYWdlcyBiYWNrLlxyXG4gICAgICAgIC8vIENsYW1wIHRvIHRoZSBsYXN0IHZhbGlkIHBhZ2UgYW5kIHJlLWZldGNoIG9uY2UuXHJcbiAgICAgICAgaWYgKHRoaXMuZmlyc3QgPiAwICYmIHRoaXMuZmlyc3QgPj0gbWF4R3JvdXBUb3RhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0ID0gbWF4R3JvdXBUb3RhbCA+IDBcclxuICAgICAgICAgICAgICAgID8gTWF0aC5mbG9vcigobWF4R3JvdXBUb3RhbCAtIDEpIC8gdGhpcy5yb3dzKSAqIHRoaXMucm93c1xyXG4gICAgICAgICAgICAgICAgOiAwO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxTZWFyY2guZW1pdCh7IHNraXBDb3VudDogdGhpcy5maXJzdCwgbWF4UmVzdWx0Q291bnQ6IHRoaXMucm93cyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5faXNHcm91cGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvdW50QnlXb3JrZmxvd0V0YXQgPSBjb3VudHM7XHJcbiAgICAgICAgdGhpcy5zdW1tYXJ5QnlXb3JrZmxvd0V0YXQgPSBzdW1tYXJpZXM7XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gbWF4R3JvdXBUb3RhbDtcclxuICAgICAgICB0aGlzLmNhcmRzID0gYXdhaXQgdGhpcy5tYXBJdGVtc1RvQ2FyZHMoZ3JvdXBzLmZsYXRNYXAoZyA9PiBnLml0ZW1zID8/IFtdKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlJbmZvKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZy5nZXRFbnRpdHlJbmZvRnJvbUNhY2hlKHRoaXMuY2FyZEJ1c2luZXNzQ2xhc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q29sS2V5cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwaG90bzogdGhpcy5lbnRpdHlJbmZvPy5jYXJkSGVhZGVyUGhvdG9Db2x1bW4/LnRvTG93ZXJDYXNlKCkgPz8gJycsXHJcbiAgICAgICAgICAgIGNvbDE6IHRoaXMuZW50aXR5SW5mbz8uY2FyZFRpdGxlQ29sdW1uPy50b0xvd2VyQ2FzZSgpID8/ICcnLFxyXG4gICAgICAgICAgICBjb2wyOiB0aGlzLmVudGl0eUluZm8/LmNhcmRTdWJIZWFkZXJDb2x1bW4/LnRvTG93ZXJDYXNlKCkgPz8gJycsXHJcbiAgICAgICAgICAgIGNvbDM6IHRoaXMuZW50aXR5SW5mbz8uY2FyZERlc2NyaXB0aW9uQ29sdW1uPy50b0xvd2VyQ2FzZSgpID8/ICcnLFxyXG4gICAgICAgICAgICBjbGFzc05hbWU6IHRoaXMuZW50aXR5SW5mbz8uY2xhc3NOYW1lPy50b0xvd2VyQ2FzZSgpID8/ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIG1hcEl0ZW1zVG9DYXJkcyhpdGVtczogYW55W10pOiBQcm9taXNlPFRzaUNhcmRbXT4ge1xyXG4gICAgICAgIGNvbnN0IHsgY29sMSwgY29sMiwgY29sMywgcGhvdG8gfSA9IHRoaXMuZ2V0Q29sS2V5cygpO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0pLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIGFjY1trZXkudG9Mb3dlckNhc2UoKV0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmtmbG93RXRhdFZhbHVlID0gaXRlbS53b3JrZmxvd0V0YXQgPz8gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogaW5kZXggKyAxICsgdGhpcy5maXJzdCxcclxuICAgICAgICAgICAgICAgIHVpZDogYCR7aXRlbS51aWR9YCxcclxuICAgICAgICAgICAgICAgIGhlYWRlclRpdGxlOiBgJHtpdGVtW2tleXNbY29sMV1dID8/ICcnfWAsXHJcbiAgICAgICAgICAgICAgICBzdWJIZWFkZXJUaXRsZTogYCR7aXRlbVtrZXlzW2NvbDJdXSA/PyAnJ31gLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke2l0ZW1ba2V5c1tjb2wzXV0gPz8gJyd9YCxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogd29ya2Zsb3dFdGF0VmFsdWUsXHJcbiAgICAgICAgICAgICAgICBwaG90bzogaXRlbVtrZXlzW3Bob3RvXV0gfHwgZGVmYXVsdENhcmRIZWFkZXIuaW1hZ2UsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJkTWFwKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nIHwgbnVsbCwgVHNpQ2FyZFtdPigpO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2YgdGhpcy53b3JrRmxvd0V0YXROb21MYWJlbHMpIHtcclxuICAgICAgICAgICAgbWFwLnNldChsYWJlbC5rZXksIFtdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY2FyZCBvZiB0aGlzLmNhcmRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGNhcmQuc3RhdHVzID8/IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbWFwLmdldChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwLnB1c2goY2FyZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVW5tYXBwZWQgY2FyZCBzdGF0dXM6ICR7Y2FyZC5zdGF0dXN9YCwgY2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FyZHNdIG9mIG1hcC5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgY2FyZHMuc29ydCgoYSwgYikgPT4gKGEuaGVhZGVyVGl0bGUgPz8gJycpLmxvY2FsZUNvbXBhcmUoYi5oZWFkZXJUaXRsZSA/PyAnJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYXJkTWFwQnlXb3JrZmxvd0V0YXQgPSBtYXA7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgICAgICAgXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0V0YXQoZGVzY3JpbWluYXRvclZhbHVlPzogc3RyaW5nKSB7XHJcbiAgICAgIGlmICghdGhpcy5jYXJkQnVzaW5lc3NDbGFzcykge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRXb3JrZmxvd0V0YXRCeUNsYXNzTmFtZUFuZERlc2NyaW1pbmF0b3IodGhpcy5jYXJkQnVzaW5lc3NDbGFzcywgZGVzY3JpbWluYXRvclZhbHVlKSk7XHJcbiAgICAgICAgdGhpcy53b3JrRmxvd0V0YXROb21MYWJlbHMgPSBbXHJcbiAgICAgICAgICAgIHsga2V5OiBudWxsLCBsb2NhbGl6ZWQ6IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9rYW5iYW5fd29ya2Zsb3dFdGF0X3ZpZXdfc2Fuc193b3JrZmxvdycpLnRyaW0oKSB9LFxyXG4gICAgICAgICAgICAuLi5yZXNwb25zZS5tYXAoKHM6IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGtleTogcy5rZXksXHJcbiAgICAgICAgICAgICAgICBsb2NhbGl6ZWQ6IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybShzLnZhbHVlKS50cmltKClcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2VycmV1ciBnZXRXb3JrZmxvd0V0YXRCeUNsYXNzTmFtZUFuZERlc2NyaW1pbmF0b3IgOiAnLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxufSIsIjxkaXYgY2xhc3M9XCJjYXJkIGZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gIDxwLXBhZ2luYXRvclxyXG4gICAgW2ZpcnN0XT1cImZpcnN0XCJcclxuICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbENvdW50XCJcclxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzEsIDEwLCAyNSwgNTBdXCJcclxuICAgIChvblBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7eyAnU2hvd2luZycgfCBsb2NhbGl6ZSB9fSB7Zmlyc3R9IHt7J3RvJyB8IGxvY2FsaXplfX0ge2xhc3R9IHt7ICdvZicgfCBsb2NhbGl6ZSB9fSB7dG90YWxSZWNvcmRzfVwiPlxyXG4gIDwvcC1wYWdpbmF0b3I+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImthbmJhbi1ib2FyZCBmbGV4IGdhcC00IG92ZXJmbG93LWF1dG9cIj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCB3b3JrZmxvd0V0YXQgb2YgZGlzcGxheWVkV29ya0Zsb3dFdGF0TGFiZWxzOyB0cmFja0J5OiB0cmFja0J5V29ya2Zsb3dFdGF0XCJcclxuICAgICAgIGNsYXNzPVwia2FuYmFuLWNvbHVtbiBmbGV4IGZsZXgtY29sdW1uIGJvcmRlci1yb3VuZCBzdXJmYWNlLTAgc2hhZG93LTJcIlxyXG4gICAgICAgKGRyYWdvdmVyKT1cImFsbG93RHJvcCgkZXZlbnQpXCJcclxuICAgICAgIChkcm9wKT1cImRyb3AoJGV2ZW50LCB3b3JrZmxvd0V0YXQua2V5KVwiPlxyXG4gICAgICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWhlYWRlciBwLTMgYm9yZGVyLWJvdHRvbS0xIHN1cmZhY2UtYm9yZGVyIGZvbnQtc2VtaWJvbGRcIj5cclxuICAgICAge3sgd29ya2Zsb3dFdGF0LmxvY2FsaXplZCB9fVxyXG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1ub3JtYWwgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICh7eyBnZXRDb2x1bW5Db3VudCh3b3JrZmxvd0V0YXQua2V5KSB9fSlcclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBmb250LW5vcm1hbCB0ZXh0LWdyYXktNTAwXCIgKm5nSWY9XCJoYXNDb2x1bW5TdW1tYXJpZXNcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdW1Db2wgb2Ygc3VtbWFyeUNvbHVtbnNcIiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCI+XHJcbiAgICAgICAgICA8c3Bhbj57eyAoc3VtQ29sLmhlYWRlciA/PyBzdW1Db2wuZmllbGQpIHwgbG9jYWxpemUgfX06PC9zcGFuPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3VtQ29sLnR5cGVcIj5cclxuICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXkgKm5nU3dpdGNoQ2FzZT1cImRpc3BsYXlUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0RJU1BMQVlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dERhdGFdPVwiZ2V0Q29sdW1uU3VtbWFyeVZhbHVlKHdvcmtmbG93RXRhdC5rZXksIHN1bUNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICA8VHNpLUludGVnZXItRGlzcGxheSAqbmdTd2l0Y2hDYXNlPVwiZGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWVwiXHJcbiAgICAgICAgICAgICAgW2lucHV0RGF0YV09XCJnZXRDb2x1bW5TdW1tYXJ5VmFsdWUod29ya2Zsb3dFdGF0LmtleSwgc3VtQ29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1JbnRlZ2VyLURpc3BsYXk+XHJcbiAgICAgICAgICAgIDxUc2ktUmF0ZS1EaXNwbGF5ICpuZ1N3aXRjaENhc2U9XCJkaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZXCJcclxuICAgICAgICAgICAgICBbaXNGcmFjdGlvbl09XCJzdW1Db2wuaXNGcmFjdGlvbiA/PyBmYWxzZVwiIFtpbnB1dERhdGFdPVwiZ2V0Q29sdW1uU3VtbWFyeVZhbHVlKHdvcmtmbG93RXRhdC5rZXksIHN1bUNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgPC9Uc2ktUmF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICA8VHNpLURlY2ltYWwtRGlzcGxheSAqbmdTd2l0Y2hDYXNlPVwiZGlzcGxheVR5cGVzLkRFQ0lNQUxfRElTUExBWVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1hdERlY2ltYWxdPVwic3VtQ29sLmZvcm1hdERlY2ltYWxcIiBbbnVtT2ZEZWNpbWFsXT1cInN1bUNvbC5udW1PZkRlY2ltYWxcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dERhdGFdPVwiZ2V0Q29sdW1uU3VtbWFyeVZhbHVlKHdvcmtmbG93RXRhdC5rZXksIHN1bUNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgPC9Uc2ktRGVjaW1hbC1EaXNwbGF5PlxyXG4gICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXkgKm5nU3dpdGNoQ2FzZT1cImRpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZXCJcclxuICAgICAgICAgICAgICBbY3VycmVuY3ldPVwic3VtQ29sLmN1cnJlbmN5T3RoZXJDb2RlXCIgW2lucHV0RGF0YV09XCJnZXRDb2x1bW5TdW1tYXJ5VmFsdWUod29ya2Zsb3dFdGF0LmtleSwgc3VtQ29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0Pnt7IGdldENvbHVtblN1bW1hcnlWYWx1ZSh3b3JrZmxvd0V0YXQua2V5LCBzdW1Db2wuZmllbGQpIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbi1jYXJkcyBmbGV4LTEgb3ZlcmZsb3ctYXV0byBwLTNcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2FyZCBvZiBjYXJkTWFwQnlXb3JrZmxvd0V0YXQuZ2V0KHdvcmtmbG93RXRhdC5rZXkpOyB0cmFja0J5OiB0cmFja0J5Q2FyZFwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJrYW5iYW4tY2FyZCBwLTMgYm9yZGVyLXJvdW5kIGJnLXdoaXRlIG1iLTMgc2hhZG93LTFcIlxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFdvcmtmbG93RXRhdENsYXNzKGNhcmQpXCJcclxuICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCJcclxuICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydCgkZXZlbnQsIGNhcmQpXCJcclxuICAgICAgICAgICAoZHJhZ2VuZCk9XCJkcmFnRW5kKClcIj5cclxuICAgICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkIG1iLTJcIj57eyBjYXJkLmhlYWRlclRpdGxlIH19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi0zXCI+e3sgY2FyZC5kZXNjcmlwdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItM1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkXCI+e3sgJ3NoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3dvcmtmbG93RXRhdF92aWV3X3dvcmtmbG93X2V0YXQnIHwgbG9jYWxpemUgfX06PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4+e3sgZ2V0TG9jYWxpemVkV29ya2Zsb3dFdGF0KGNhcmQuc3RhdHVzKSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwib3ZlcmxheVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNwaW5uZXItd3JhcHBlclwiPlxyXG4gICAgPGFwcC1zcGlubmVyPjwvYXBwLXNwaW5uZXI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWthbmJhbi13b3JrZmxvdy1ldGF0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2kta2FuYmFuLXdvcmtmbG93LWV0YXQvdHNpLWthbmJhbi13b3JrZmxvdy1ldGF0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2kta2FuYmFuLXdvcmtmbG93LWV0YXQvdHNpLWthbmJhbi13b3JrZmxvdy1ldGF0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxHLE9BQU8sRUFBbUIsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTVELE9BQU8sRUFBa0gseUJBQXlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJekssT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFJekYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSXpEOzs7R0FHRztBQU1ILE1BQU0sT0FBTyw4QkFBK0IsU0FBUSxnQkFBZ0I7SUFzQmhFLElBQWEsSUFBSSxDQUFDLEtBQWlCO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQTZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7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QXNELEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0UsQ0FBQztJQUNILENBQUM7K0dBcFdRLDhCQUE4QjttR0FBOUIsOEJBQThCLGdiQzFCM0Msd2hMQTJHQTs7NEZEakZhLDhCQUE4QjtrQkFMMUMsU0FBUzsrQkFDSSwwQkFBMEI7ME9BTTFCLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQU9PLElBQUk7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYWdpbmF0b3JTdGF0ZSB9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWZhdWx0Q2FyZEhlYWRlciB9IGZyb20gJy4uLy4uL2NvbnN0cy90c2ktY29uc3RzJztcclxuaW1wb3J0IHsgQnV0dG9uQ2xpY2tSZXN1bHQsIEdyaWRDb2x1bW4gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCwgVHNpQ2FyZCwgdXBkYXRlRW50aXR5V29ya2Zsb3dJbmZvcm1hdGlvbiwgd29ya2Zsb3dFdGF0RGV0YWlsbGVkUmVzcG9uc2UsIFdvcmtmbG93RXRhdEthbmJhblJlcXVlc3QgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmF0aW9uL2VudGl0eS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL2FwcC1iYXNlL2FwcC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrZmxvdy93b3JrZmxvdy1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSUdyb3VwZWRSZXN1bHQsIElQYWdlLCBJU3VtbWFyeUZvclByb3ByZXR5IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wYWdpbmF0aW9uL3BhZ2luYXRpb24tYmFzZSc7XHJcbmltcG9ydCB7IERpc3BsYXlUeXBlcyB9IGZyb20gJy4uLy4uL2VudW1zL2Rpc3BsYXktdHlwZXMnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgTWVudSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XHJcblxyXG4vKipcclxuICogVHNpS2FuYmFuV29ya2Zsb3dFdGF0Q29tcG9uZW50XHJcbiAqIERlc2NyaXB0aW9uOiBEaXNwbGF5cyBhIEthbmJhbiBib2FyZCB2aWV3IGZvciBUU0kgZW50aXRpZXMgdXNpbmcgdGhlIHdvcmtmbG93IGV0YXQgdmFsdWUuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnVHNpLWthbmJhbi13b3JrZmxvdy1ldGF0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90c2kta2FuYmFuLXdvcmtmbG93LWV0YXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL3RzaS1rYW5iYW4td29ya2Zsb3ctZXRhdC5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lLYW5iYW5Xb3JrZmxvd0V0YXRDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tSZXN1bHQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2FsbFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIEBJbnB1dCgpIGNhcmRCdXNpbmVzc0NsYXNzOiBhbnk7XHJcbiAgICBASW5wdXQoKSBoZWFkZXI6IGFueTtcclxuICAgIEBJbnB1dCgpIGlkOiBhbnk7XHJcbiAgICBASW5wdXQoKSBwYWdlJCE6IEJlaGF2aW9yU3ViamVjdDxJUGFnZTxhbnk+IHwgbnVsbD47XHJcbiAgICBASW5wdXQoKSBkZXNjcmltaW5hdG9yVmFsdWU/OiBzdHJpbmdcclxuICAgIC8vIENvbHVtbnMgd2hvc2UgcGVyLWNvbHVtbiBzdW1tYXJ5IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIEthbmJhbiBoZWFkZXIsIGZvcm1hdHRlZFxyXG4gICAgLy8gYnkgdGhlaXIgZGlzcGxheSB0eXBlIChsaWtlIHRoZSB0YWJsZSBmb290ZXIpLiBFbXB0eSBieSBkZWZhdWx0IOKGkiBubyBzdW1tYXJpZXMgc2hvd24uXHJcbiAgICBASW5wdXQoKSBzdW1tYXJ5Q29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgICBASW5wdXQoKSBvdmVyZmxvd0FjdGlvbnNNZW51OiBNZW51SXRlbVtdID0gW107XHJcbiAgICBASW5wdXQoKSBzZWxlY3RLZXlPbmx5ID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGtleSA9ICd1aWQnO1xyXG5cclxuICAgIGN1cnJlbnRBY3Rpb25Sb3c6IGFueTtcclxuXHJcbiAgICByZWFkb25seSBkaXNwbGF5VHlwZXMgPSBEaXNwbGF5VHlwZXM7XHJcblxyXG4gICAgcHJpdmF0ZSBfcGFnZTogSVBhZ2U8YW55PiB8IHVuZGVmaW5lZDtcclxuICAgIEBJbnB1dCgpIHNldCBwYWdlKHZhbHVlOiBJUGFnZTxhbnk+KSB7XHJcbiAgICAgICAgdGhpcy5fcGFnZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBnZXQgcGFnZSgpOiBJUGFnZTxhbnk+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX3BhZ2U7IH1cclxuXHJcbiAgICBjYXJkczogVHNpQ2FyZFtdID0gW107XHJcbiAgICBjYXJkTWFwQnlXb3JrZmxvd0V0YXQ6IE1hcDxzdHJpbmcgfCBudWxsLCBUc2lDYXJkW10+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIC8vIFBvcHVsYXRlZCBvbmx5IHdoZW4gdGhlIHBhZ2UgaXMgZ3JvdXBlZCBzZXJ2ZXItc2lkZSAob25lIGdyb3VwIHBlciB3b3JrZmxvdyBldGF0KTpcclxuICAgIC8vIHRydWUgcGVyLWNvbHVtbiB0b3RhbHMgYW5kIHBlci1jb2x1bW4gc3VtbWFyaWVzLCBpbmRlcGVuZGVudCBvZiB0aGUgY3VycmVudCBwYWdlLlxyXG4gICAgY291bnRCeVdvcmtmbG93RXRhdDogTWFwPHN0cmluZyB8IG51bGwsIG51bWJlcj4gPSBuZXcgTWFwKCk7XHJcbiAgICBzdW1tYXJ5QnlXb3JrZmxvd0V0YXQ6IE1hcDxzdHJpbmcgfCBudWxsLCBJU3VtbWFyeUZvclByb3ByZXR5W10+ID0gbmV3IE1hcCgpO1xyXG4gICAgcHJpdmF0ZSBfaXNHcm91cGVkID0gZmFsc2U7XHJcblxyXG4gICAgZHJhZ2dlZENhcmQ6IFRzaUNhcmQgfCBudWxsID0gbnVsbDtcclxuICAgIGZpcnN0ID0gMDtcclxuICAgIHJvd3MgPSAxMDtcclxuICAgIHRvdGFsQ291bnQgPSAwO1xyXG4gICAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgd29ya0Zsb3dFdGF0Tm9tTGFiZWxzOiB7IGtleTogc3RyaW5nIHwgbnVsbDsgbG9jYWxpemVkOiBzdHJpbmcgfVtdID1cclxuICAgICAgICBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBfd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZTogV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9lbnRpdHlDb25maWc6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2xvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy53b3JrRmxvd0V0YXROb21MYWJlbHMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleTogbnVsbCxcclxuICAgICAgICAgICAgICAgIGxvY2FsaXplZDogdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKCdzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2thbmJhbl93b3JrZmxvd0V0YXRfdmlld19zYW5zX3dvcmtmbG93JykudHJpbSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0V0YXQodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpXHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRFbnRpdHlJbmZvKCk7XHJcblxyXG4gICAgICAgIHRoaXMucGFnZSQuc3Vic2NyaWJlKGFzeW5jIHBhZ2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIXBhZ2UubG9hZGluZztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlUGFnZUNoYW5nZShwYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRyYWdTdGFydChfOiBEcmFnRXZlbnQsIGNhcmQ6IFRzaUNhcmQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRyYWdnZWRDYXJkID0gY2FyZDtcclxuICAgIH1cclxuXHJcbiAgICBkcmFnRW5kKCk6IHZvaWQgeyB0aGlzLmRyYWdnZWRDYXJkID0gbnVsbDsgfVxyXG5cclxuICAgIGFsbG93RHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IH1cclxuXHJcbiAgICB0cmFja0J5V29ya2Zsb3dFdGF0KGluZGV4OiBudW1iZXIsIHN0YXR1czogeyBrZXk6IHN0cmluZyB8IG51bGw7IGxvY2FsaXplZDogc3RyaW5nIH0pIHsgcmV0dXJuIHN0YXR1cy5rZXk7IH1cclxuXHJcbiAgICB0cmFja0J5Q2FyZChpbmRleDogbnVtYmVyLCBjYXJkOiBUc2lDYXJkKSB7IHJldHVybiBjYXJkLnVpZDsgfVxyXG5cclxuICAgIGRyb3AoZXZlbnQ6IERyYWdFdmVudCwgbmV3S2V5OiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuZHJhZ2dlZENhcmQpIHJldHVybjtcclxuICAgICAgICBpZihuZXdLZXkgPT0gbnVsbCB8fCBuZXdLZXkgPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihcInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3dvcmtmbG93RXRhdF92aWV3X3NhbnNfd29ya2Zsb3dfZm9yYmlkZGVuXCIpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2FyZCA9IHRoaXMuZHJhZ2dlZENhcmQ7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNXb3JrZmxvd0V0YXQgPSB0aGlzLmRyYWdnZWRDYXJkLnN0YXR1cztcclxuXHJcbiAgICAgICAgaWYocHJldmlvdXNXb3JrZmxvd0V0YXQgPT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2thbmJhbl93b3JrZmxvd0V0YXRfdmlld19ub193b3JrZmxvd1wiKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLmRyYWdnZWRDYXJkLnN0YXR1cyAhPT0gbmV3S2V5ICYmIHRoaXMuY2FyZEJ1c2luZXNzQ2xhc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlXHJcbiAgICAgICAgICAgIGxldCByZXF1ZXN0OiBXb3JrZmxvd0V0YXRLYW5iYW5SZXF1ZXN0ID0gbmV3IFdvcmtmbG93RXRhdEthbmJhblJlcXVlc3QoKTtcclxuICAgICAgICAgICAgcmVxdWVzdC53b3JrRmxvd0V0YXQgPSB0aGlzLmRyYWdnZWRDYXJkLnN0YXR1c1xyXG4gICAgICAgICAgICByZXF1ZXN0LmJ1c2luZXNzQ2xhc3MgPSB0aGlzLmNhcmRCdXNpbmVzc0NsYXNzLFxyXG4gICAgICAgICAgICByZXF1ZXN0LnVpZE9iamV0ID0gdGhpcy5kcmFnZ2VkQ2FyZC51aWQ7XHJcbiAgICAgICAgICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvckNsYXNzTmFtZSA9IHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZVxyXG4gICAgICAgICAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgPSB0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWVcclxuICAgICAgICAgICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICAgICAgICByZXF1ZXN0LndvcmtGbG93RXRhdFN1aXZhbnQgPSBuZXdLZXk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UudXBkYXRlV29ya2Zsb3dFdGF0RnJvbUthbmJhblZpZXcocmVxdWVzdCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FyZC5zdGF0dXMgPSBuZXdLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT5cclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKGVycm9yPy5lcnJvcilcclxuICAgICAgICAgICAgICAgICAgICBjYXJkLnN0YXR1cyA9IHByZXZpb3VzV29ya2Zsb3dFdGF0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZE1hcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICAgICAgdGhpcy5kcmFnZ2VkQ2FyZCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgb25QYWdlQ2hhbmdlKGV2ZW50OiBQYWdpbmF0b3JTdGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlyc3QgPSBldmVudC5maXJzdCA/PyAwO1xyXG4gICAgICAgIHRoaXMucm93cyA9IGV2ZW50LnJvd3MgPz8gMTA7XHJcbiAgICAgICAgdGhpcy5jYWxsU2VhcmNoLmVtaXQoeyBza2lwQ291bnQ6IHRoaXMuZmlyc3QsIG1heFJlc3VsdENvdW50OiB0aGlzLnJvd3MgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V29ya2Zsb3dFdGF0Q2xhc3MoY2FyZDogVHNpQ2FyZCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLndvcmtGbG93RXRhdE5vbUxhYmVscy5maW5kSW5kZXgobCA9PiBsLmtleSA9PT0gY2FyZC5zdGF0dXMpO1xyXG4gICAgICAgIHJldHVybiBgd29ya2Zsb3dFdGF0Q29sb3ItJHtpbmRleCA+PSAwID8gaW5kZXggOiAnZGVmYXVsdCd9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb2NhbGl6ZWRXb3JrZmxvd0V0YXQoa2V5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWtleSkgcmV0dXJuICcnO1xyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy53b3JrRmxvd0V0YXROb21MYWJlbHMuZmluZChzID0+IHMua2V5ID09PSBrZXkpO1xyXG4gICAgICAgIHJldHVybiBtYXRjaD8ubG9jYWxpemVkID8/IGtleTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUcnVlIHBlci1jb2x1bW4gdG90YWw6IHRoZSBncm91cCdzIHVucGFnZWQgY291bnQgd2hlbiBncm91cGVkIHNlcnZlci1zaWRlLFxyXG4gICAgLy8gb3RoZXJ3aXNlIHRoZSBudW1iZXIgb2YgY2FyZHMgb24gdGhlIGN1cnJlbnQgcGFnZSAobGVnYWN5IGNsaWVudC1zaWRlIGdyb3VwaW5nKS5cclxuICAgIGdldENvbHVtbkNvdW50KGtleTogc3RyaW5nIHwgbnVsbCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzR3JvdXBlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJ5V29ya2Zsb3dFdGF0LmdldChrZXkpID8/IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcmRNYXBCeVdvcmtmbG93RXRhdC5nZXQoa2V5KT8ubGVuZ3RoID8/IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2hldGhlciBwZXItY29sdW1uIHN1bW1hcmllcyBzaG91bGQgcmVuZGVyIChncm91cGVkIGRhdGEgKyBhdCBsZWFzdCBvbmUgb3B0ZWQtaW4gY29sdW1uKS5cclxuICAgIGdldCBoYXNDb2x1bW5TdW1tYXJpZXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzR3JvdXBlZCAmJiAodGhpcy5zdW1tYXJ5Q29sdW1ucz8ubGVuZ3RoID8/IDApID4gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb2x1bW5zIHRvIHJlbmRlcjogdGhlIFwic2FucyB3b3JrZmxvd1wiIChudWxsLWtleSkgY29sdW1uIGlzIGhpZGRlbiB3aGVuIGl0IGhhcyBubyBjYXJkcztcclxuICAgIC8vIHJlYWwgd29ya2Zsb3ctZXRhdCBjb2x1bW5zIGFsd2F5cyBzaG93IHJlZ2FyZGxlc3Mgb2YgY291bnQuXHJcbiAgICBnZXQgZGlzcGxheWVkV29ya0Zsb3dFdGF0TGFiZWxzKCk6IHsga2V5OiBzdHJpbmcgfCBudWxsOyBsb2NhbGl6ZWQ6IHN0cmluZyB9W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLndvcmtGbG93RXRhdE5vbUxhYmVscy5maWx0ZXIobCA9PiBsLmtleSAhPT0gbnVsbCB8fCB0aGlzLmdldENvbHVtbkNvdW50KGwua2V5KSA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoZSBTVU0gZm9yIGEgc3VtbWFyaXplZCBjb2x1bW4gd2l0aGluIGEgd29ya2Zsb3ctZXRhdCBncm91cCAodW5kZWZpbmVkIHdoZW4gbm90IGdyb3VwZWQgb3IgYWJzZW50KS5cclxuICAgIGdldENvbHVtblN1bW1hcnlWYWx1ZShrZXk6IHN0cmluZyB8IG51bGwsIGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICghdGhpcy5faXNHcm91cGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5zdW1tYXJ5QnlXb3JrZmxvd0V0YXQuZ2V0KGtleSlcclxuICAgICAgICAgICAgPy5maW5kKHMgPT4gcy5wcm9wcmV0eT8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIHJldHVybiBtYXRjaD8uc3VtbWFyeTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVyZmxvd0NvbHVtbkNsaWNrZWQobWVudTogTWVudSwgZXZlbnQ6IEV2ZW50LCByb3c6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEFjdGlvblJvdyA9IHJvdztcclxuICAgICAgICBtZW51LnRvZ2dsZShldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25PdmVyZmxvd0FjdGlvbkNsaWNrZWQoY2FyZDogVHNpQ2FyZCwgbWVudUl0ZW06IE1lbnVJdGVtKSB7XHJcbiAgICAgICAgaWYgKCFjYXJkIHx8ICFtZW51SXRlbSB8fCAhbWVudUl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5oYW5kbGVCdXR0b25DbGlja2VkKGNhcmQ/LmZ1bGxSZWNvcmQgPz8gY2FyZCwgbWVudUl0ZW0uaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUJ1dHRvbkNsaWNrZWQoaXRlbTogYW55LCBmaWVsZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0S2V5T25seSkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrZWQuZW1pdCh7IGZpZWxkOiBmaWVsZCwga2V5OiBpdGVtW3RoaXMua2V5XSwgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25DbGlja2VkLmVtaXQoeyBmaWVsZDogZmllbGQsIGtleTogaXRlbSwgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5IH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlZGl0KHVpZD86IHN0cmluZykge1xyXG4gICAgICAgIGlmICh1aWQpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuTW9kYWxDb21wb25lbnQodWlkLCAnZWRpdCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9wZW5Nb2RhbENvbXBvbmVudCh1aWQ6IHN0cmluZywgbW9kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b25DbGlja2VkLmVtaXQoeyBmaWVsZDogbW9kZSwga2V5OiB1aWQsIHNlbGVjdEtleU9ubHk6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVQYWdlQ2hhbmdlKHBhZ2U6IElQYWdlPGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAocGFnZT8uZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlR3JvdXBlZFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcGFnZT8uaXRlbXMpIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5faXNHcm91cGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jYXJkcyA9IGF3YWl0IHRoaXMubWFwSXRlbXNUb0NhcmRzKHBhZ2UuaXRlbXMpO1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IHBhZ2UudG90YWxDb3VudDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcmRNYXAoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXJ2ZXItc2lkZSBncm91cGVkIHBhZ2U6IG9uZSBncm91cCBwZXIgd29ya2Zsb3cgZXRhdCwgZWFjaCBjYXJyeWluZyBpdHMgb3duIGFjY3VyYXRlXHJcbiAgICAvLyAodW5wYWdlZCkgdG90YWwgY291bnQgYW5kIHN1bW1hcmllcy4gQ2FyZHMgb24gdGhlIGN1cnJlbnQgcGFnZSBhcmUgbWFwcGVkIGFuZCBidWNrZXRlZFxyXG4gICAgLy8gZXhhY3RseSBhcyBpbiB0aGUgZmxhdCBwYXRoICh2aWEgdXBkYXRlQ2FyZE1hcCk7IHRoZSB0cnVlIHBlci1jb2x1bW4gY291bnRzL3N1bW1hcmllc1xyXG4gICAgLy8gY29tZSBmcm9tIHRoZSBncm91cHMsIGFuZCB0aGUgc2luZ2xlIGJvYXJkIHBhZ2luYXRvciBzcGFucyB0aGUgbGFyZ2VzdCBjb2x1bW4gKHNhbWVcclxuICAgIC8vIHNraXAvdGFrZSB3aW5kb3cgYXBwbGllZCB0byBldmVyeSBncm91cCBieSB0aGUgYmFja2VuZCkuXHJcbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUdyb3VwZWRQYWdlKHBhZ2U6IElQYWdlPGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBncm91cHM6IElHcm91cGVkUmVzdWx0PGFueT5bXSA9IHBhZ2UuZ3JvdXBzID8/IFtdO1xyXG4gICAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IHRoaXMud29ya0Zsb3dFdGF0Tm9tTGFiZWxzXHJcbiAgICAgICAgICAgIC5tYXAobCA9PiBsLmtleSlcclxuICAgICAgICAgICAgLmZpbHRlcigoayk6IGsgaXMgc3RyaW5nID0+IGsgIT09IG51bGwpO1xyXG5cclxuICAgICAgICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPHN0cmluZyB8IG51bGwsIG51bWJlcj4oKTtcclxuICAgICAgICBjb25zdCBzdW1tYXJpZXMgPSBuZXcgTWFwPHN0cmluZyB8IG51bGwsIElTdW1tYXJ5Rm9yUHJvcHJldHlbXT4oKTtcclxuICAgICAgICBsZXQgbWF4R3JvdXBUb3RhbCA9IDA7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhd0tleSA9IGdyb3VwLmtleT8udHJpbSgpIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChyYXdLZXkgJiYgIXZhbGlkS2V5cy5pbmNsdWRlcyhyYXdLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBidWNrZXRLZXkgPSByYXdLZXk7XHJcblxyXG4gICAgICAgICAgICBjb3VudHMuc2V0KGJ1Y2tldEtleSwgKGNvdW50cy5nZXQoYnVja2V0S2V5KSA/PyAwKSArIGdyb3VwLnRvdGFsQ291bnQpO1xyXG4gICAgICAgICAgICBpZiAoIXN1bW1hcmllcy5oYXMoYnVja2V0S2V5KSkge1xyXG4gICAgICAgICAgICAgICAgc3VtbWFyaWVzLnNldChidWNrZXRLZXksIGdyb3VwLnN1bW1hcmllcyA/PyBbXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWF4R3JvdXBUb3RhbCA9IE1hdGgubWF4KG1heEdyb3VwVG90YWwsIGdyb3VwLnRvdGFsQ291bnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGF0YSBzaHJhbmsgdW5kZXIgYSBsYXRlciBwYWdlIChkcmFnLWRyb3AsIGEgZmlsdGVyLCBvciBhbm90aGVyIHVzZXIncyBjaGFuZ2UpOlxyXG4gICAgICAgIC8vIHRoZSBjdXJyZW50IG9mZnNldCBpcyBub3cgcGFzdCB0aGUgZW5kIG9mIGV2ZXJ5IGNvbHVtbiwgc28gdGhlIGJhY2tlbmQgcmV0dXJuZWQgYW5cclxuICAgICAgICAvLyBlbXB0eSB3aW5kb3cgYW5kIHRoZSBib2FyZCB3b3VsZCBsb29rIGVtcHR5IHVudGlsIHRoZSB1c2VyIG1hbnVhbGx5IHBhZ2VzIGJhY2suXHJcbiAgICAgICAgLy8gQ2xhbXAgdG8gdGhlIGxhc3QgdmFsaWQgcGFnZSBhbmQgcmUtZmV0Y2ggb25jZS5cclxuICAgICAgICBpZiAodGhpcy5maXJzdCA+IDAgJiYgdGhpcy5maXJzdCA+PSBtYXhHcm91cFRvdGFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3QgPSBtYXhHcm91cFRvdGFsID4gMFxyXG4gICAgICAgICAgICAgICAgPyBNYXRoLmZsb29yKChtYXhHcm91cFRvdGFsIC0gMSkgLyB0aGlzLnJvd3MpICogdGhpcy5yb3dzXHJcbiAgICAgICAgICAgICAgICA6IDA7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbFNlYXJjaC5lbWl0KHsgc2tpcENvdW50OiB0aGlzLmZpcnN0LCBtYXhSZXN1bHRDb3VudDogdGhpcy5yb3dzIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pc0dyb3VwZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY291bnRCeVdvcmtmbG93RXRhdCA9IGNvdW50cztcclxuICAgICAgICB0aGlzLnN1bW1hcnlCeVdvcmtmbG93RXRhdCA9IHN1bW1hcmllcztcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBtYXhHcm91cFRvdGFsO1xyXG4gICAgICAgIHRoaXMuY2FyZHMgPSBhd2FpdCB0aGlzLm1hcEl0ZW1zVG9DYXJkcyhncm91cHMuZmxhdE1hcChnID0+IGcuaXRlbXMgPz8gW10pKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcmRNYXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldEVudGl0eUluZm8oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gYXdhaXQgdGhpcy5fZW50aXR5Q29uZmlnLmdldEVudGl0eUluZm9Gcm9tQ2FjaGUodGhpcy5jYXJkQnVzaW5lc3NDbGFzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb2xLZXlzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBob3RvOiB0aGlzLmVudGl0eUluZm8/LmNhcmRIZWFkZXJQaG90b0NvbHVtbj8udG9Mb3dlckNhc2UoKSA/PyAnJyxcclxuICAgICAgICAgICAgY29sMTogdGhpcy5lbnRpdHlJbmZvPy5jYXJkVGl0bGVDb2x1bW4/LnRvTG93ZXJDYXNlKCkgPz8gJycsXHJcbiAgICAgICAgICAgIGNvbDI6IHRoaXMuZW50aXR5SW5mbz8uY2FyZFN1YkhlYWRlckNvbHVtbj8udG9Mb3dlckNhc2UoKSA/PyAnJyxcclxuICAgICAgICAgICAgY29sMzogdGhpcy5lbnRpdHlJbmZvPy5jYXJkRGVzY3JpcHRpb25Db2x1bW4/LnRvTG93ZXJDYXNlKCkgPz8gJycsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5lbnRpdHlJbmZvPy5jbGFzc05hbWU/LnRvTG93ZXJDYXNlKCkgPz8gJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgbWFwSXRlbXNUb0NhcmRzKGl0ZW1zOiBhbnlbXSk6IFByb21pc2U8VHNpQ2FyZFtdPiB7XHJcbiAgICAgICAgY29uc3QgeyBjb2wxLCBjb2wyLCBjb2wzLCBwaG90byB9ID0gdGhpcy5nZXRDb2xLZXlzKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaXRlbSkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYWNjW2tleS50b0xvd2VyQ2FzZSgpXSA9IGtleTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dFdGF0VmFsdWUgPSBpdGVtLndvcmtmbG93RXRhdCA/PyBudWxsO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpbmRleCArIDEgKyB0aGlzLmZpcnN0LFxyXG4gICAgICAgICAgICAgICAgdWlkOiBgJHtpdGVtLnVpZH1gLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyVGl0bGU6IGAke2l0ZW1ba2V5c1tjb2wxXV0gPz8gJyd9YCxcclxuICAgICAgICAgICAgICAgIHN1YkhlYWRlclRpdGxlOiBgJHtpdGVtW2tleXNbY29sMl1dID8/ICcnfWAsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7aXRlbVtrZXlzW2NvbDNdXSA/PyAnJ31gLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiB3b3JrZmxvd0V0YXRWYWx1ZSxcclxuICAgICAgICAgICAgICAgIHBob3RvOiBpdGVtW2tleXNbcGhvdG9dXSB8fCBkZWZhdWx0Q2FyZEhlYWRlci5pbWFnZSxcclxuICAgICAgICAgICAgICAgIGZ1bGxSZWNvcmQ6IGl0ZW0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJkTWFwKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nIHwgbnVsbCwgVHNpQ2FyZFtdPigpO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2YgdGhpcy53b3JrRmxvd0V0YXROb21MYWJlbHMpIHtcclxuICAgICAgICAgICAgbWFwLnNldChsYWJlbC5rZXksIFtdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY2FyZCBvZiB0aGlzLmNhcmRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGNhcmQuc3RhdHVzID8/IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbWFwLmdldChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwLnB1c2goY2FyZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVW5tYXBwZWQgY2FyZCBzdGF0dXM6ICR7Y2FyZC5zdGF0dXN9YCwgY2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FyZHNdIG9mIG1hcC5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgY2FyZHMuc29ydCgoYSwgYikgPT4gKGEuaGVhZGVyVGl0bGUgPz8gJycpLmxvY2FsZUNvbXBhcmUoYi5oZWFkZXJUaXRsZSA/PyAnJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYXJkTWFwQnlXb3JrZmxvd0V0YXQgPSBtYXA7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgICAgICAgXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0V0YXQoZGVzY3JpbWluYXRvclZhbHVlPzogc3RyaW5nKSB7XHJcbiAgICAgIGlmICghdGhpcy5jYXJkQnVzaW5lc3NDbGFzcykge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRXb3JrZmxvd0V0YXRCeUNsYXNzTmFtZUFuZERlc2NyaW1pbmF0b3IodGhpcy5jYXJkQnVzaW5lc3NDbGFzcywgZGVzY3JpbWluYXRvclZhbHVlLCB0cnVlKSk7XHJcbiAgICAgICAgdGhpcy53b3JrRmxvd0V0YXROb21MYWJlbHMgPSBbXHJcbiAgICAgICAgICAgIHsga2V5OiBudWxsLCBsb2NhbGl6ZWQ6IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSgnc2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9rYW5iYW5fd29ya2Zsb3dFdGF0X3ZpZXdfc2Fuc193b3JrZmxvdycpLnRyaW0oKSB9LFxyXG4gICAgICAgICAgICAuLi5yZXNwb25zZS5tYXAoKHM6IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGtleTogcy5rZXksXHJcbiAgICAgICAgICAgICAgICBsb2NhbGl6ZWQ6IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybShzLnZhbHVlKS50cmltKClcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2VycmV1ciBnZXRXb3JrZmxvd0V0YXRCeUNsYXNzTmFtZUFuZERlc2NyaW1pbmF0b3IgOiAnLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxufSIsIjxkaXYgY2xhc3M9XCJjYXJkIGZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gIDxwLXBhZ2luYXRvclxyXG4gICAgW2ZpcnN0XT1cImZpcnN0XCJcclxuICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbENvdW50XCJcclxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzEsIDEwLCAyNSwgNTBdXCJcclxuICAgIChvblBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7eyAnU2hvd2luZycgfCBsb2NhbGl6ZSB9fSB7Zmlyc3R9IHt7J3RvJyB8IGxvY2FsaXplfX0ge2xhc3R9IHt7ICdvZicgfCBsb2NhbGl6ZSB9fSB7dG90YWxSZWNvcmRzfVwiPlxyXG4gIDwvcC1wYWdpbmF0b3I+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImthbmJhbi1ib2FyZCBmbGV4IGdhcC00IG92ZXJmbG93LWF1dG9cIj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCB3b3JrZmxvd0V0YXQgb2YgZGlzcGxheWVkV29ya0Zsb3dFdGF0TGFiZWxzOyB0cmFja0J5OiB0cmFja0J5V29ya2Zsb3dFdGF0XCJcclxuICAgICAgIGNsYXNzPVwia2FuYmFuLWNvbHVtbiBmbGV4IGZsZXgtY29sdW1uIGJvcmRlci1yb3VuZCBzdXJmYWNlLTAgc2hhZG93LTJcIlxyXG4gICAgICAgKGRyYWdvdmVyKT1cImFsbG93RHJvcCgkZXZlbnQpXCJcclxuICAgICAgIChkcm9wKT1cImRyb3AoJGV2ZW50LCB3b3JrZmxvd0V0YXQua2V5KVwiPlxyXG4gICAgICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWhlYWRlciBwLTMgYm9yZGVyLWJvdHRvbS0xIHN1cmZhY2UtYm9yZGVyIGZvbnQtc2VtaWJvbGRcIj5cclxuICAgICAge3sgd29ya2Zsb3dFdGF0LmxvY2FsaXplZCB9fVxyXG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gZm9udC1ub3JtYWwgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICh7eyBnZXRDb2x1bW5Db3VudCh3b3JrZmxvd0V0YXQua2V5KSB9fSlcclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBmb250LW5vcm1hbCB0ZXh0LWdyYXktNTAwXCIgKm5nSWY9XCJoYXNDb2x1bW5TdW1tYXJpZXNcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdW1Db2wgb2Ygc3VtbWFyeUNvbHVtbnNcIiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCI+XHJcbiAgICAgICAgICA8c3Bhbj57eyAoc3VtQ29sLmhlYWRlciA/PyBzdW1Db2wuZmllbGQpIHwgbG9jYWxpemUgfX06PC9zcGFuPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3VtQ29sLnR5cGVcIj5cclxuICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1Tb2NpZXRlLURpc3BsYXkgKm5nU3dpdGNoQ2FzZT1cImRpc3BsYXlUeXBlcy5DVVJSRU5DWV9TT0NJRVRFX0RJU1BMQVlcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dERhdGFdPVwiZ2V0Q29sdW1uU3VtbWFyeVZhbHVlKHdvcmtmbG93RXRhdC5rZXksIHN1bUNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICA8VHNpLUludGVnZXItRGlzcGxheSAqbmdTd2l0Y2hDYXNlPVwiZGlzcGxheVR5cGVzLklOVEVHRVJfRElTUExBWVwiXHJcbiAgICAgICAgICAgICAgW2lucHV0RGF0YV09XCJnZXRDb2x1bW5TdW1tYXJ5VmFsdWUod29ya2Zsb3dFdGF0LmtleSwgc3VtQ29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1JbnRlZ2VyLURpc3BsYXk+XHJcbiAgICAgICAgICAgIDxUc2ktUmF0ZS1EaXNwbGF5ICpuZ1N3aXRjaENhc2U9XCJkaXNwbGF5VHlwZXMuUkFURV9ESVNQTEFZXCJcclxuICAgICAgICAgICAgICBbaXNGcmFjdGlvbl09XCJzdW1Db2wuaXNGcmFjdGlvbiA/PyBmYWxzZVwiIFtpbnB1dERhdGFdPVwiZ2V0Q29sdW1uU3VtbWFyeVZhbHVlKHdvcmtmbG93RXRhdC5rZXksIHN1bUNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgPC9Uc2ktUmF0ZS1EaXNwbGF5PlxyXG4gICAgICAgICAgICA8VHNpLURlY2ltYWwtRGlzcGxheSAqbmdTd2l0Y2hDYXNlPVwiZGlzcGxheVR5cGVzLkRFQ0lNQUxfRElTUExBWVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1hdERlY2ltYWxdPVwic3VtQ29sLmZvcm1hdERlY2ltYWxcIiBbbnVtT2ZEZWNpbWFsXT1cInN1bUNvbC5udW1PZkRlY2ltYWxcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dERhdGFdPVwiZ2V0Q29sdW1uU3VtbWFyeVZhbHVlKHdvcmtmbG93RXRhdC5rZXksIHN1bUNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgPC9Uc2ktRGVjaW1hbC1EaXNwbGF5PlxyXG4gICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLURpc3BsYXkgKm5nU3dpdGNoQ2FzZT1cImRpc3BsYXlUeXBlcy5DVVJSRU5DWV9PVEhFUl9ESVNQTEFZXCJcclxuICAgICAgICAgICAgICBbY3VycmVuY3ldPVwic3VtQ29sLmN1cnJlbmN5T3RoZXJDb2RlXCIgW2lucHV0RGF0YV09XCJnZXRDb2x1bW5TdW1tYXJ5VmFsdWUod29ya2Zsb3dFdGF0LmtleSwgc3VtQ29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1PdGhlci1EaXNwbGF5PlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0Pnt7IGdldENvbHVtblN1bW1hcnlWYWx1ZSh3b3JrZmxvd0V0YXQua2V5LCBzdW1Db2wuZmllbGQpIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbi1jYXJkcyBmbGV4LTEgb3ZlcmZsb3ctYXV0byBwLTNcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2FyZCBvZiBjYXJkTWFwQnlXb3JrZmxvd0V0YXQuZ2V0KHdvcmtmbG93RXRhdC5rZXkpOyB0cmFja0J5OiB0cmFja0J5Q2FyZFwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJrYW5iYW4tY2FyZCBwLTMgYm9yZGVyLXJvdW5kIGJnLXdoaXRlIG1iLTMgc2hhZG93LTFcIlxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFdvcmtmbG93RXRhdENsYXNzKGNhcmQpXCJcclxuICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCJcclxuICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydCgkZXZlbnQsIGNhcmQpXCJcclxuICAgICAgICAgICAoZHJhZ2VuZCk9XCJkcmFnRW5kKClcIj5cclxuICAgICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkIG1iLTJcIj57eyBjYXJkLmhlYWRlclRpdGxlIH19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi0zXCI+e3sgY2FyZC5kZXNjcmlwdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbWItM1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkXCI+e3sgJ3NoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfa2FuYmFuX3dvcmtmbG93RXRhdF92aWV3X3dvcmtmbG93X2V0YXQnIHwgbG9jYWxpemUgfX06PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4+e3sgZ2V0TG9jYWxpemVkV29ya2Zsb3dFdGF0KGNhcmQuc3RhdHVzKSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPHAtbWVudSBhcHBlbmRUbz1cImJvZHlcIiAjbWVudU1vcmVBY3Rpb25zXHJcbiAgICAgICAgICAgICBbbW9kZWxdPVwib3ZlcmZsb3dBY3Rpb25zTWVudVwiXHJcbiAgICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiIHN0eWxlQ2xhc3M9XCJvdmVyZmxvdy1tZW51XCJcclxuICAgICAgICAgICAgIFtzdHlsZV09XCJ7ICd3aWR0aCc6ICdhdXRvJywgJ21pbi13aWR0aCc6ICcwcHgnIH1cIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpdGVtXCIgbGV0LW1lbnVJdGVtPlxyXG4gICAgICAgICAgICA8YSBwUmlwcGxlIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC1tZW51aXRlbS1saW5rXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJtZW51SXRlbS5zdHlsZUNsYXNzXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25PdmVyZmxvd0FjdGlvbkNsaWNrZWQoY2FyZCwgbWVudUl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCJtZW51SXRlbS5pZCA9PT0gJ25vdGVzJ1wiIGNsYXNzPVwie3sgbWVudUl0ZW0uaWNvbkNsYXNzIH19IHAtbWVudWl0ZW0taWNvbiBiYWRnZS1pY29uIGhhcy1iYWRnZVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtZW51SXRlbS5pY29uU3R5bGVDbGFzc1wiIHBCYWRnZSBzZXZlcml0eT1cImRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY2FyZC5mdWxsUmVjb3JkLm5vdGVzQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgW2JhZGdlRGlzYWJsZWRdPVwiY2FyZC5mdWxsUmVjb3JkLm5vdGVzQ291bnQgPT0gbnVsbFwiIGJhZGdlUG9zaXRpb249XCJ0b3AtcmlnaHRcIj5cclxuICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwibWVudUl0ZW0uaWQgIT09ICdub3RlcydcIiBjbGFzcz1cInt7bWVudUl0ZW0uaWNvbkNsYXNzfX0gcC1tZW51aXRlbS1pY29uXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1lbnVJdGVtLmljb25TdHlsZUNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIHt7IG1lbnVJdGVtLmxhYmVsIHwgbG9jYWxpemUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLW1lbnU+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyIG10LTEgZ2FwLTIgcC0wXCI+XHJcbiAgICAgICAgICA8VHNpLUJ1dHRvbiBbc3R5bGVDbGFzc109XCIncC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtMC01J1wiIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktcGVuY2lsXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImVkaXQoY2FyZC51aWQpXCI+XHJcbiAgICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgICA8cC1idXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1lbGxpcHNpcy12XCIgc3R5bGVDbGFzcz1cIm92ZXJmbG93LWJ0blwiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm92ZXJmbG93Q29sdW1uQ2xpY2tlZChtZW51TW9yZUFjdGlvbnMsICRldmVudCwgY2FyZClcIj5cclxuICAgICAgICAgIDwvcC1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cIm92ZXJsYXlcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzcGlubmVyLXdyYXBwZXJcIj5cclxuICAgIDxhcHAtc3Bpbm5lcj48L2FwcC1zcGlubmVyPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -135,6 +135,7 @@ export class TsiSearchBoxComponent {
|
|
|
135
135
|
handleKeyDown(event) {
|
|
136
136
|
if (event.key === 'F5' || event.key === 'Enter') {
|
|
137
137
|
event.preventDefault();
|
|
138
|
+
document.activeElement?.blur();
|
|
138
139
|
this.onSearch();
|
|
139
140
|
}
|
|
140
141
|
}
|
|
@@ -174,4 +175,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
174
175
|
type: HostListener,
|
|
175
176
|
args: ['window:keydown', ['$event']]
|
|
176
177
|
}] } });
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXNlYXJjaC1ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL3RzaS1zZWFyY2gtYm94L3RzaS1zZWFyY2gtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktc2VhcmNoLWJveC90c2ktc2VhcmNoLWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUtuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRL0QsTUFBTSxPQUFPLHFCQUFxQjtJQVVoQyxZQUFZO0lBRVosZ0JBQWdCO0lBQ2hCLElBQWEsWUFBWSxDQUFDLEtBQXFDO1FBQzdELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixPQUFPO1lBQ1AsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFFeEIsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFhLGFBQWEsQ0FBQyxLQUF5QjtRQUNsRCxJQUFJLENBQUMs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RyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2hELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7K0dBakpVLHFCQUFxQjttR0FBckIscUJBQXFCLHFwQkNmbEMsc3RZQStNTTs7NEZEaE1PLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxnQkFBZ0I7OEpBaUJiLFlBQVk7c0JBQXhCLEtBQUs7Z0JBYU8sYUFBYTtzQkFBekIsS0FBSztnQkFVTyxrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBU0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUtJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQWtGUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW5wdXRUeXBlcywgTGF5b3V0T3JpZW50YXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgRW50aXR5SW5mbywgRW50aXR5UHJvcGVydGllc1Jlc3BvbnNlLCBLZXlWYWx1ZVBhaXIsIFNlYXJjaEZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgU3RhdHVzTWV0YWRhdGFSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9zdGF0dXMvY29sb3Itc3RhdHVzJztcclxuaW1wb3J0IHsgRW50aXR5U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXR1cy9lbnRpdHlTdGF0dXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrZmxvdy93b3JrZmxvdy1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWx0ZXJIZWxwZXIgfSBmcm9tICcuLi8uLi90c2ktaGVscGVycy9maWx0ZXItaGVscGVyJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RzaS1zZWFyY2gtYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLXNlYXJjaC1ib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1zZWFyY2gtYm94LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lTZWFyY2hCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAvLyNyZWdpb24gbG9jYWwgdmFyc1xyXG4gIHByaXZhdGUgX3NlYXJjaEZpZWxkcyE6IEFycmF5PFNlYXJjaEZpZWxkPjtcclxuICBpbnB1dFR5cGVzID0gSW5wdXRUeXBlcztcclxuICBmYWtlQWx3YXlzRmFsc2VDb25kaXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAga2V5d29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIGxheW91dE9yaWVudGF0aW9uUmVmID0gTGF5b3V0T3JpZW50YXRpb25cclxuICB0b29sdGlwVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBpbnB1dHNcclxuICBASW5wdXQoKSBzZXQgc2VhcmNoRmllbGRzKHZhbHVlOiBBcnJheTxTZWFyY2hGaWVsZD4gfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAvL3Jlc2V0XHJcbiAgICAgIHRoaXMuX3NlYXJjaEZpZWxkcyA9IFtdO1xyXG5cclxuICAgICAgLy9pbml0IHVzaW5nIHZhbHVlXHJcbiAgICAgIHRoaXMuX3NlYXJjaEZpZWxkcyA9IEZpbHRlckhlbHBlci5pbml0U2VhcmNoRmllbGRzKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNlYXJjaEZpZWxkcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hGaWVsZHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2J1c2luZXNzQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9idXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLmdldEVudGl0eVN0YXR1cygpO1xyXG4gICAgdGhpcy5nZXRXb3JrZmxvd0V0YXQoKVxyXG4gIH1cclxuICBnZXQgYnVzaW5lc3NDbGFzcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVzY3JpbWluYXRvclZhbHVlPzogc3RyaW5nXHJcbiAgQElucHV0KCkgc2V0IGRlc2NyaW1pbmF0b3JWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZVxyXG4gICAgdGhpcy5nZXRXb3JrZmxvd0V0YXQoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGRlc2NyaW1pbmF0b3JWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXNjcmltaW5hdG9yVmFsdWVcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGlzUnRsTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlbnRpdHlJbmZvOiBFbnRpdHlJbmZvIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHN0YXR1c01ldGFkYXRhPzogU3RhdHVzTWV0YWRhdGFSZXNwb25zZTtcclxuXHJcbiAgLy8jcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBvdXRwdXRzXHJcbiAgQE91dHB1dCgpIHNlYXJjaEZpZWxkc0NoYW5nZSE6IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+O1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hGaWVsZHNBcHBsaWVkOiBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PigpO1xyXG4gIEBPdXRwdXQoKSBrZXl3b3JkVmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG4gIEBPdXRwdXQoKSBzdGF0dXNGaWx0ZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG4gIEBPdXRwdXQoKSB3b3JrZmxvd0V0YXRGaWx0ZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG4gIEBPdXRwdXQoKSBjb21ib0JveExhYmVsQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFycmF5PFNlYXJjaEZpZWxkPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFNlYXJjaEZpZWxkPj4oKVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZW50aXR5U3RhdHVzU2VydmljZTogRW50aXR5U3RhdHVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2U6IFdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sb2NhbGl6ZVBpcGU6IExvY2FsaXplUGlwZSkge1xyXG4gICAgdGhpcy5faW5pdCgpO1xyXG4gICAgdGhpcy50b29sdGlwVGV4dCA9IF9sb2NhbGl6ZVBpcGUudHJhbnNmb3JtKCdzaGFyZWRfdHNpX3NlYXJjaF9ib3hfZ2xvYmFsX3NlYXJjaF9pbmZvJykgPz8gJyc7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxyXG5cclxuICAvLyNyZWdpb24gZXZlbnRzIGhhbmRsZXJzXHJcbiAgb25TZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkOiBTZWFyY2hGaWVsZCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hGaWVsZHNDaGFuZ2UuZW1pdCh0aGlzLnNlYXJjaEZpZWxkcyk7XHJcbiAgfVxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgdGhpcy5rZXl3b3JkVmFsdWVDaGFuZ2VkLmVtaXQodGhpcy5rZXl3b3JkKTtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzQXBwbGllZC5lbWl0KHRoaXMuc2VhcmNoRmllbGRzKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF9pbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VhcmNoRmllbGRzID0gW107XHJcbiAgICB0aGlzLnNlYXJjaEZpZWxkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tYm9MYWJlbChzZWFyY2hGaWVsZDogU2VhcmNoRmllbGQsIGxhYmVsOiBzdHJpbmcpIHtcclxuICAgIHNlYXJjaEZpZWxkLmNvbWJvYm94TGFiZWwgPSBsYWJlbDtcclxuICAgIHRoaXMuY29tYm9Cb3hMYWJlbENoYW5nZWQuZW1pdCh0aGlzLnNlYXJjaEZpZWxkcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBHZXR0ZXIgZm9yIHN0YXR1c1xyXG4gIGdldCBzdGF0dXMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XHJcbiAgfVxyXG4gIC8vIFNldHRlciBmb3Igc3RhdHVzXHJcbiAgc2V0IHN0YXR1cyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9zdGF0dXMgPSB2YWx1ZTtcclxuICB9XHJcbiAgZW50aXR5U3RhdHVzTGlzdDogS2V5VmFsdWVQYWlyPHN0cmluZywgc3RyaW5nPltdID0gW107XHJcblxyXG4gIHByaXZhdGUgZ2V0RW50aXR5U3RhdHVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbnRpdHlTdGF0dXNTZXJ2aWNlLmdldEVudGl0eVN0YXR1cyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhOiBFbnRpdHlQcm9wZXJ0aWVzUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAoIWRhdGEpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEuZW50aXR5U3RhdHVzICYmIEFycmF5LmlzQXJyYXkoZGF0YS5lbnRpdHlTdGF0dXMpKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eVN0YXR1c0xpc3QgPSBkYXRhLmVudGl0eVN0YXR1cztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBkYXRhLmRlZmF1bHRTdGF0dXM7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHdvcmtmbG93RXRhdExpc3Q6IEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz5bXSA9IFtdXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0V0YXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0V29ya2Zsb3dFdGF0QnlDbGFzc05hbWVBbmREZXNjcmltaW5hdG9yKHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhOiBLZXlWYWx1ZVBhaXI8c3RyaW5nLCBzdHJpbmc+W10pID0+IHtcclxuICAgICAgICAgIHRoaXMud29ya2Zsb3dFdGF0TGlzdCA9IGRhdGFcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbldvcmtmbG93RXRhdEZpbHRlckNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLndvcmtmbG93RXRhdEZpbHRlckNoYW5nZWQuZW1pdChldmVudClcclxuICB9XHJcblxyXG4gIG9uU3RhdHVzQ2hhbmdlKGV2dDogYW55KSB7XHJcbiAgICB0aGlzLnN0YXR1cyA9IGV2dDtcclxuICAgIHRoaXMuc3RhdHVzRmlsdGVyQ2hhbmdlZC5lbWl0KHRoaXMuc3RhdHVzKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRjUnIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLm9uU2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImdyaWQgcC0yXCIgW25nQ2xhc3NdPVwieydwLTMnOiBpc1J0bE1vZGV9XCI+XHJcblxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgc2VhcmNoRmllbGQgb2Ygc2VhcmNoRmllbGRzXCIgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLnN0eWxlQ2xhc3N9fSBncmlkIG5vLXBhZFwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJ7e3NlYXJjaEZpZWxkLmZpZWxkfX1cIj5cclxuICAgICAgPCEtLSBOb3QgTWF4TWluID09PSBTaW5nbGUgRmlsdGVyIElucHV0IC0tPlxyXG4gICAgICA8IS0tIEZha2UgZWxlbWVudCB0byBlc2NhcGUgYml6YXJyZSBpbnB1dCBmb3JtYXQgLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmYWtlQWx3YXlzRmFsc2VDb25kaXRpb247IGVsc2Ugc2VhcmNoQ29tYm9CbG9ja1wiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBUc2ktU2VhcmNoLUNvbWJvIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI3NlYXJjaENvbWJvQmxvY2s+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLnR5cGUgPT0gaW5wdXRUeXBlcy5TRUFSQ0hfQ09NQk87IGVsc2UgY3VycmVuY3lTb2NpZXRlSW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwie3tzZWFyY2hGaWVsZC5sYWJlbFN0eWxlQ2xhc3N9fSBwci0xXCJcclxuICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJzZWFyY2hGaWVsZC5sYWJlbFZhbHVlIHwgbG9jYWxpemVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmlucHV0U3R5bGVDbGFzc319XCIgW2VsZW1lbnRTb3VyY2VVcmxdPVwic2VhcmNoRmllbGQuZWxlbWVudFNvdXJjZVVybFwiXHJcbiAgICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwic2VhcmNoRmllbGQubGlzdFNvdXJjZVVybFwiIFsoYmluZCldPVwic2VhcmNoRmllbGQudmFsdWVcIlxyXG4gICAgICAgICAgICAgIGlkLWZpZWxkPVwie3tzZWFyY2hGaWVsZC5pZEZpZWxkfX1cIiBsYWJlbC1maWVsZD1cInt7c2VhcmNoRmllbGQubGFiZWxGaWVsZH19XCJcclxuICAgICAgICAgICAgICBbaXNGaWx0ZXJlZF09XCJzZWFyY2hGaWVsZC5pc0ZpbHRlcmVkXCIgKGJpbmRDaGFuZ2UpPVwib25TZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlYXJjaEZpZWxkLmRpc2FibGVkID8/IGZhbHNlXCIgWyhzZWxlY3RlZExhYmVsKV09XCJzZWFyY2hGaWVsZC5jb21ib2JveExhYmVsXCJcclxuICAgICAgICAgICAgICAoc2VsZWN0ZWRMYWJlbENoYW5nZSk9XCJnZXRDb21ib0xhYmVsKHNlYXJjaEZpZWxkLCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFtidXNpbmVzc0NsYXNzXT1cInNlYXJjaEZpZWxkLmJ1c2luZXNzQ2xhc3MgPz8gJydcIiBbc2hvd0FkZEJ1dHRvbl09XCJzZWFyY2hGaWVsZC5zaG93QWRkQnV0dG9uID8/IHRydWVcIiBbc2hvd1VwZGF0ZUJ1dHRvbl09XCJzZWFyY2hGaWVsZC5zaG93VXBkYXRlQnV0dG9uID8/IHVuZGVmaW5lZFwiIFtzaG93Q29uc3VsdEJ1dHRvbl09XCJzZWFyY2hGaWVsZC5zaG93Q29uc3VsdEJ1dHRvbiA/PyB1bmRlZmluZWRcIlxyXG4gICAgICAgICAgICAgIFtzaG93U2VhcmNoQnV0dG9uXT1cInNlYXJjaEZpZWxkLnNob3dTZWFyY2hCdXR0b24gPz8gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW211bHRpcGxlXT1cInNlYXJjaEZpZWxkLm11bHRpcGxlID8/IGZhbHNlXCI+PC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LVNvY2lldGUtSW5wdXQgLS0+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjY3VycmVuY3lTb2NpZXRlSW5wdXRCbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQudHlwZSA9PSBpbnB1dFR5cGVzLkNVUlJFTkNZX1NPQ0lFVEVfSU5QVVQ7IGVsc2UgY3VycmVuY3lPdGhlcklucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cInt7c2VhcmNoRmllbGQubGFiZWxTdHlsZUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cInNlYXJjaEZpZWxkLmxhYmVsVmFsdWUgfCBsb2NhbGl6ZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLUN1cnJlbmN5LVNvY2lldGUtSW5wdXQgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmlucHV0U3R5bGVDbGFzc319XCIgW2lucHV0TmFtZV09XCJzZWFyY2hGaWVsZC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgW2lucHV0SWRdPVwic2VhcmNoRmllbGQuZmllbGRcIiBbKGlucHV0RmllbGQpXT1cInNlYXJjaEZpZWxkLnZhbHVlXCJcclxuICAgICAgICAgICAgICAoaW5wdXRGaWVsZENoYW5nZSk9XCJvblNlYXJjaEZpZWxkVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQpXCIgW2Rpc2FibGVkXT1cInNlYXJjaEZpZWxkLmRpc2FibGVkID8/IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LVNvY2lldGUtSW5wdXQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8IS0tIFRzaS1DdXJyZW5jeS1PdGhlci1JbnB1dCAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNjdXJyZW5jeU90aGVySW5wdXRCbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQudHlwZSA9PSBpbnB1dFR5cGVzLkNVUlJFTkNZX09USEVSX0lOUFVUOyBlbHNlIGRhdGVQaWNrZXJJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmxhYmVsU3R5bGVDbGFzc319XCJcclxuICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJzZWFyY2hGaWVsZC5sYWJlbFZhbHVlIHwgbG9jYWxpemVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1DdXJyZW5jeS1PdGhlci1JbnB1dCBjbGFzcz1cInt7c2VhcmNoRmllbGQuaW5wdXRTdHlsZUNsYXNzfX1cIiBbaW5wdXROYW1lXT1cInNlYXJjaEZpZWxkLmZpZWxkXCJcclxuICAgICAgICAgICAgICBbaW5wdXRJZF09XCJzZWFyY2hGaWVsZC5maWVsZFwiIFsoaW5wdXRGaWVsZCldPVwic2VhcmNoRmllbGQudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChpbnB1dEZpZWxkQ2hhbmdlKT1cIm9uU2VhcmNoRmllbGRWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZClcIiBbZGlzYWJsZWRdPVwic2VhcmNoRmllbGQuZGlzYWJsZWQgPz8gZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtjdXJyZW5jeV09XCJzZWFyY2hGaWVsZC5jdXJyZW5jeVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1PdGhlci1JbnB1dD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2RhdGVQaWNrZXJJbnB1dEJsb2NrPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC50eXBlID09IGlucHV0VHlwZXMuREFURTsgZWxzZSBkYXRldGltZVBpY2tlcklucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cInt7c2VhcmNoRmllbGQubGFiZWxTdHlsZUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cInNlYXJjaEZpZWxkLmxhYmVsVmFsdWUgfCBsb2NhbGl6ZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLURhdGUtUGlja2VyIGNsYXNzPVwie3tzZWFyY2hGaWVsZC5pbnB1dFN0eWxlQ2xhc3N9fVwiIFtpbnB1dE5hbWVdPVwic2VhcmNoRmllbGQuZmllbGRcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dElkXT1cInNlYXJjaEZpZWxkLmZpZWxkXCIgWyhpbnB1dEZpZWxkKV09XCJzZWFyY2hGaWVsZC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlYXJjaEZpZWxkLmRpc2FibGVkID8/IGZhbHNlXCIgKGlucHV0RmllbGRDaGFuZ2UpPVwib25TZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkKVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1EYXRlLVBpY2tlcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2RhdGV0aW1lUGlja2VySW5wdXRCbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQudHlwZSA9PSBpbnB1dFR5cGVzLkRBVEVUSU1FOyBlbHNlIGNoZWNrQm94SW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwie3tzZWFyY2hGaWVsZC5sYWJlbFN0eWxlQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwic2VhcmNoRmllbGQubGFiZWxWYWx1ZSB8IGxvY2FsaXplXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktRGF0ZS1QaWNrZXIgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmlucHV0U3R5bGVDbGFzc319XCIgW3Nob3dUaW1lXT1cInRydWVcIiBbaW5wdXROYW1lXT1cInNlYXJjaEZpZWxkLmZpZWxkXCJcclxuICAgICAgICAgICAgICBbaW5wdXRJZF09XCJzZWFyY2hGaWVsZC5maWVsZFwiIFsoaW5wdXRGaWVsZCldPVwic2VhcmNoRmllbGQudmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWFyY2hGaWVsZC5kaXNhYmxlZCA/PyBmYWxzZVwiIChpbnB1dEZpZWxkQ2hhbmdlKT1cIm9uU2VhcmNoRmllbGRWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZClcIj5cclxuICAgICAgICAgICAgPC9Uc2ktRGF0ZS1QaWNrZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8IS0tIFRzaS1DaGVja0JveCAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNjaGVja0JveElucHV0QmxvY2s+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLnR5cGUgPT0gaW5wdXRUeXBlcy5DSEVDS0JPWDsgZWxzZSBkZWNpbWFsSW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwie3tzZWFyY2hGaWVsZC5sYWJlbFN0eWxlQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwic2VhcmNoRmllbGQubGFiZWxWYWx1ZSB8IGxvY2FsaXplXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmlucHV0U3R5bGVDbGFzc319XCIgW2lucHV0TmFtZV09XCJzZWFyY2hGaWVsZC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgW2lucHV0SWRdPVwic2VhcmNoRmllbGQuZmllbGRcIiBbKGlucHV0RmllbGQpXT1cInNlYXJjaEZpZWxkLnZhbHVlXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VhcmNoRmllbGQuZGlzYWJsZWQgPz8gZmFsc2VcIiAoaW5wdXRGaWVsZENoYW5nZSk9XCJvblNlYXJjaEZpZWxkVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQpXCJcclxuICAgICAgICAgICAgICBbaXNCaW5hcnldPVwic2VhcmNoRmllbGQuaXNCaW5hcnkgPz8gZmFsc2VcIj5cclxuICAgICAgICAgICAgPC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8IS0tIFRzaS1EZWNpbWFsLUlucHV0IC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2RlY2ltYWxJbnB1dEJsb2NrPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC50eXBlID09IGlucHV0VHlwZXMuREVDSU1BTF9JTlBVVDsgZWxzZSBpbnRlZ2VySW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwie3tzZWFyY2hGaWVsZC5sYWJlbFN0eWxlQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwic2VhcmNoRmllbGQubGFiZWxWYWx1ZSB8IGxvY2FsaXplXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktRGVjaW1hbC1JbnB1dCBjbGFzcz1cInt7c2VhcmNoRmllbGQuaW5wdXRTdHlsZUNsYXNzfX1cIiBbaW5wdXROYW1lXT1cInNlYXJjaEZpZWxkLmZpZWxkXCJcclxuICAgICAgICAgICAgICBbaW5wdXRJZF09XCJzZWFyY2hGaWVsZC5maWVsZFwiIFsoaW5wdXRGaWVsZCldPVwic2VhcmNoRmllbGQudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChpbnB1dEZpZWxkQ2hhbmdlKT1cIm9uU2VhcmNoRmllbGRWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZClcIiBbZGlzYWJsZWRdPVwic2VhcmNoRmllbGQuZGlzYWJsZWQgPz8gZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtudW1PZkRlY2ltYWxdPVwic2VhcmNoRmllbGQubnVtT2ZEZWNpbWFsXCI+XHJcbiAgICAgICAgICAgIDwvVHNpLURlY2ltYWwtSW5wdXQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8IS0tIFRzaS1JbnRlZ2VyIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2ludGVnZXJJbnB1dEJsb2NrPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC50eXBlID09IGlucHV0VHlwZXMuSU5URUdFUjsgZWxzZSByYXRlSW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwie3tzZWFyY2hGaWVsZC5sYWJlbFN0eWxlQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwic2VhcmNoRmllbGQubGFiZWxWYWx1ZSB8IGxvY2FsaXplXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkPy5pbnB1dFN0eWxlQ2xhc3N9fVwiPlxyXG4gICAgICAgICAgICAgIDxUc2ktSW50ZWdlciBbaW5wdXROYW1lXT1cInNlYXJjaEZpZWxkLmZpZWxkXCIgW2lucHV0SWRdPVwic2VhcmNoRmllbGQuZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJzZWFyY2hGaWVsZC52YWx1ZVwiIChpbnB1dEZpZWxkQ2hhbmdlKT1cIm9uU2VhcmNoRmllbGRWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlYXJjaEZpZWxkLmRpc2FibGVkID8/IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgPC9Uc2ktSW50ZWdlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8IS0tIFRzaS1SYXRlLUlucHV0IC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgICNyYXRlSW5wdXRCbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQudHlwZSA9PSBpbnB1dFR5cGVzLlJBVEVfSU5QVVQ7IGVsc2UgcmFkaW9JbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmxhYmVsU3R5bGVDbGFzc319XCJcclxuICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJzZWFyY2hGaWVsZC5sYWJlbFZhbHVlIHwgbG9jYWxpemVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1SYXRlLUlucHV0IGNsYXNzPVwie3tzZWFyY2hGaWVsZC5pbnB1dFN0eWxlQ2xhc3N9fVwiIFtpbnB1dE5hbWVdPVwic2VhcmNoRmllbGQuZmllbGRcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dElkXT1cInNlYXJjaEZpZWxkLmZpZWxkXCIgWyhpbnB1dEZpZWxkKV09XCJzZWFyY2hGaWVsZC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgKGlucHV0RmllbGRDaGFuZ2UpPVwib25TZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkKVwiIFtpc0ZyYWN0aW9uXT1cInNlYXJjaEZpZWxkLmlzRnJhY3Rpb25cIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWFyY2hGaWVsZC5kaXNhYmxlZCA/PyBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1SYXRlLUlucHV0PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNyYWRpb0lucHV0QmxvY2s+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLnR5cGUgPT0gaW5wdXRUeXBlcy5SQURJT19CVVRUT047IGVsc2UgZGVmYXVsdFRleHRJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmxhYmVsU3R5bGVDbGFzc319XCJcclxuICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJzZWFyY2hGaWVsZC5sYWJlbFZhbHVlIHwgbG9jYWxpemVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1SYWRpby1CdXR0b24gY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmlucHV0U3R5bGVDbGFzc319XCIgW2lucHV0TmFtZV09XCJzZWFyY2hGaWVsZC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJzZWFyY2hGaWVsZC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgKGlucHV0RmllbGRDaGFuZ2UpPVwib25TZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlYXJjaEZpZWxkLmRpc2FibGVkID8/IGZhbHNlXCJcclxuICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJzZWFyY2hGaWVsZC5yYWRpb0J1dHRvbkRhdGFzb3VyY2VcIlxyXG4gICAgICAgICAgICAgIFtsYXlvdXRPcmllbnRhdGlvbl09XCJzZWFyY2hGaWVsZC5sYXlvdXRPcmllbnRhdGlvbiA/PyBsYXlvdXRPcmllbnRhdGlvblJlZi52ZXJ0aWNhbFwiPlxyXG4gICAgICAgICAgICA8L1RzaS1SYWRpby1CdXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8IS0tIFRzaS1UZXh0LUJveCAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGV4dElucHV0QmxvY2s+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cInt7c2VhcmNoRmllbGQubGFiZWxTdHlsZUNsYXNzfX0gcHItMVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwic2VhcmNoRmllbGQubGFiZWxWYWx1ZSB8IGxvY2FsaXplXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmlucHV0U3R5bGVDbGFzc319XCIgW2lucHV0TmFtZV09XCJzZWFyY2hGaWVsZC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgW2lucHV0SWRdPVwic2VhcmNoRmllbGQuZmllbGRcIiBbKGlucHV0RmllbGQpXT1cInNlYXJjaEZpZWxkLnZhbHVlXCJcclxuICAgICAgICAgICAgICAoaW5wdXRGaWVsZENoYW5nZSk9XCJvblNlYXJjaEZpZWxkVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQpXCIgW2Rpc2FibGVkXT1cInNlYXJjaEZpZWxkLmRpc2FibGVkID8/IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8IS0tICAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IHB4LTJcIj5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJpc1J0bE1vZGUgPyAncnRsLW1vZGUnIDogJ2x0ci1tb2RlJyBcIiBjbGFzcz1cInAtaW5wdXRncm91cCBydGwtbW9kZSBoLTJyZW0gbm8tcGFkXCI+XHJcbiAgICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJnbG9iYWxfc2VhcmNoXCIgY2xhc3M9XCJwLWlucHV0Z3JvdXAgcnRsLW1vZGUgaC0ycmVtIG5vLXBhZFwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiXCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImtleXdvcmRcIiBwSW5wdXRUZXh0IFtwbGFjZWhvbGRlcl09XCInZ2xvYmFsX3NlYXJjaCcgfCBsb2NhbGl6ZVwiPlxyXG5cclxuICAgICAgICAgIDwhLS0gV29ya2Zsb3cgZXRhdCBmaWx0ZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJidXNpbmVzc0NsYXNzICYmIHdvcmtmbG93RXRhdExpc3QgJiYgd29ya2Zsb3dFdGF0TGlzdC5sZW5ndGggPiAwXCIgaWQ9XCJ3b3JrZmxvdy1ldGF0LWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIiBbcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlXT1cIidXb3JrZmxvd0V0YXQnXCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gXHJcbiAgICAgICAgICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ1dvcmtmbG93IEV0YXQnXCIgXHJcbiAgICAgICAgICAgICAgICBbaWQtZmllbGRdPVwiJ2tleSdcIiBcclxuICAgICAgICAgICAgICAgIFtsYWJlbC1maWVsZF09XCIndmFsdWUnXCIgXHJcbiAgICAgICAgICAgICAgICBbaXNGaWx0ZXJlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAoYmluZENoYW5nZSk9XCJvbldvcmtmbG93RXRhdEZpbHRlckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtkYXRhc291cmNlXT1cIndvcmtmbG93RXRhdExpc3RcIlxyXG4gICAgICAgICAgICAgICAgW21heFdpZHRoXT1cIicxMCdcIj5cclxuICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1c2luZXNzQ2xhc3MgJiYgZW50aXR5U3RhdHVzTGlzdCAmJiBlbnRpdHlTdGF0dXNMaXN0Lmxlbmd0aCA+IDBcIiBpZD1cInN0YXR1cy1maWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCIgW3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZV09XCJlbnRpdHlJbmZvPy5zdGF0dXNDb2x1bW5OYW1lXCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gXHJcbiAgICAgICAgICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ1N0YXR1dCdcIiBcclxuICAgICAgICAgICAgICAgIFtpZC1maWVsZF09XCIna2V5J1wiIFxyXG4gICAgICAgICAgICAgICAgW2xhYmVsLWZpZWxkXT1cIid2YWx1ZSdcIiBcclxuICAgICAgICAgICAgICAgIChiaW5kQ2hhbmdlKT1cIm9uU3RhdHVzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW2NvbWJvVHlwZV09XCInc3RhdHVzJ1wiXHJcbiAgICAgICAgICAgICAgICBbc3RhdHVzTWV0YWRhdGFdPVwic3RhdHVzTWV0YWRhdGFcIlxyXG4gICAgICAgICAgICAgICAgW2RhdGFzb3VyY2VdPVwiZW50aXR5U3RhdHVzTGlzdFwiID5cclxuICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2VhcmNoX2J1dHRvblwiPlxyXG4gICAgICAgICAgPFRzaS1CdXR0b24gc3R5bGVDbGFzcz1cInAtZWxlbWVudCBuZy10bnMtYzc5NTgzNTAzLTEyMjEgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24taWNvbi1vbmx5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1NlYXJjaEJ1dHRvbkRpc2FibGVkXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiXHJcbiAgICAgICAgICAgIHRvb2x0aXBUZXh0PVwic2hhcmVkX3RzaV9zZWFyY2hfYm94X3JlY2hlcmNoZXJcIiAoY2xpY2spPVwib25TZWFyY2goKVwiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtMlwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiIFtwVG9vbHRpcF09XCJ0b29sdGlwVGV4dCA/IGdsb2JhbFNlYXJjaFRvb2x0aXBDb250ZW50IDogdW5kZWZpbmVkXCIgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCJcclxuICAgICAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJjdXN0b20tdG9vbHRpcFwiPjwvaT5cclxuXHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2dsb2JhbFNlYXJjaFRvb2x0aXBDb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgdG9vbHRpcFRleHQgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXNlYXJjaC1ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL3RzaS1zZWFyY2gtYm94L3RzaS1zZWFyY2gtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktc2VhcmNoLWJveC90c2ktc2VhcmNoLWJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUtuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRL0QsTUFBTSxPQUFPLHFCQUFxQjtJQVVoQyxZQUFZO0lBRVosZ0JBQWdCO0lBQ2hCLElBQWEsWUFBWSxDQUFDLEtBQXFDO1FBQzdELElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixPQUFPO1lBQ1AsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFFeEIsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFhLGFBQWEsQ0FBQyxLQUF5QjtRQUNsRCxJQUFJLENBQUMs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RyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2hELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixRQUFRLENBQUMsYUFBb0MsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7K0dBbEpVLHFCQUFxQjttR0FBckIscUJBQXFCLHFwQkNmbEMsc3RZQStNTTs7NEZEaE1PLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxnQkFBZ0I7OEpBaUJiLFlBQVk7c0JBQXhCLEtBQUs7Z0JBYU8sYUFBYTtzQkFBekIsS0FBSztnQkFVTyxrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBU0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUtJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQWtGUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSW5wdXRUeXBlcywgTGF5b3V0T3JpZW50YXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgRW50aXR5SW5mbywgRW50aXR5UHJvcGVydGllc1Jlc3BvbnNlLCBLZXlWYWx1ZVBhaXIsIFNlYXJjaEZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgU3RhdHVzTWV0YWRhdGFSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9zdGF0dXMvY29sb3Itc3RhdHVzJztcclxuaW1wb3J0IHsgRW50aXR5U3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXR1cy9lbnRpdHlTdGF0dXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrZmxvdy93b3JrZmxvdy1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWx0ZXJIZWxwZXIgfSBmcm9tICcuLi8uLi90c2ktaGVscGVycy9maWx0ZXItaGVscGVyJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RzaS1zZWFyY2gtYm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLXNlYXJjaC1ib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1zZWFyY2gtYm94LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lTZWFyY2hCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAvLyNyZWdpb24gbG9jYWwgdmFyc1xyXG4gIHByaXZhdGUgX3NlYXJjaEZpZWxkcyE6IEFycmF5PFNlYXJjaEZpZWxkPjtcclxuICBpbnB1dFR5cGVzID0gSW5wdXRUeXBlcztcclxuICBmYWtlQWx3YXlzRmFsc2VDb25kaXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAga2V5d29yZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIGxheW91dE9yaWVudGF0aW9uUmVmID0gTGF5b3V0T3JpZW50YXRpb25cclxuICB0b29sdGlwVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBpbnB1dHNcclxuICBASW5wdXQoKSBzZXQgc2VhcmNoRmllbGRzKHZhbHVlOiBBcnJheTxTZWFyY2hGaWVsZD4gfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAvL3Jlc2V0XHJcbiAgICAgIHRoaXMuX3NlYXJjaEZpZWxkcyA9IFtdO1xyXG5cclxuICAgICAgLy9pbml0IHVzaW5nIHZhbHVlXHJcbiAgICAgIHRoaXMuX3NlYXJjaEZpZWxkcyA9IEZpbHRlckhlbHBlci5pbml0U2VhcmNoRmllbGRzKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNlYXJjaEZpZWxkcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hGaWVsZHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2J1c2luZXNzQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9idXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLmdldEVudGl0eVN0YXR1cygpO1xyXG4gICAgdGhpcy5nZXRXb3JrZmxvd0V0YXQoKVxyXG4gIH1cclxuICBnZXQgYnVzaW5lc3NDbGFzcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVzY3JpbWluYXRvclZhbHVlPzogc3RyaW5nXHJcbiAgQElucHV0KCkgc2V0IGRlc2NyaW1pbmF0b3JWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZVxyXG4gICAgdGhpcy5nZXRXb3JrZmxvd0V0YXQoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGRlc2NyaW1pbmF0b3JWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kZXNjcmltaW5hdG9yVmFsdWVcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGlzUnRsTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlbnRpdHlJbmZvOiBFbnRpdHlJbmZvIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHN0YXR1c01ldGFkYXRhPzogU3RhdHVzTWV0YWRhdGFSZXNwb25zZTtcclxuXHJcbiAgLy8jcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBvdXRwdXRzXHJcbiAgQE91dHB1dCgpIHNlYXJjaEZpZWxkc0NoYW5nZSE6IEV2ZW50RW1pdHRlcjxBcnJheTxTZWFyY2hGaWVsZD4+O1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hGaWVsZHNBcHBsaWVkOiBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PigpO1xyXG4gIEBPdXRwdXQoKSBrZXl3b3JkVmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG4gIEBPdXRwdXQoKSBzdGF0dXNGaWx0ZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG4gIEBPdXRwdXQoKSB3b3JrZmxvd0V0YXRGaWx0ZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG4gIEBPdXRwdXQoKSBjb21ib0JveExhYmVsQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFycmF5PFNlYXJjaEZpZWxkPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFNlYXJjaEZpZWxkPj4oKVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZW50aXR5U3RhdHVzU2VydmljZTogRW50aXR5U3RhdHVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2U6IFdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sb2NhbGl6ZVBpcGU6IExvY2FsaXplUGlwZSkge1xyXG4gICAgdGhpcy5faW5pdCgpO1xyXG4gICAgdGhpcy50b29sdGlwVGV4dCA9IF9sb2NhbGl6ZVBpcGUudHJhbnNmb3JtKCdzaGFyZWRfdHNpX3NlYXJjaF9ib3hfZ2xvYmFsX3NlYXJjaF9pbmZvJykgPz8gJyc7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxyXG5cclxuICAvLyNyZWdpb24gZXZlbnRzIGhhbmRsZXJzXHJcbiAgb25TZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkOiBTZWFyY2hGaWVsZCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hGaWVsZHNDaGFuZ2UuZW1pdCh0aGlzLnNlYXJjaEZpZWxkcyk7XHJcbiAgfVxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgdGhpcy5rZXl3b3JkVmFsdWVDaGFuZ2VkLmVtaXQodGhpcy5rZXl3b3JkKTtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzQXBwbGllZC5lbWl0KHRoaXMuc2VhcmNoRmllbGRzKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF9pbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VhcmNoRmllbGRzID0gW107XHJcbiAgICB0aGlzLnNlYXJjaEZpZWxkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tYm9MYWJlbChzZWFyY2hGaWVsZDogU2VhcmNoRmllbGQsIGxhYmVsOiBzdHJpbmcpIHtcclxuICAgIHNlYXJjaEZpZWxkLmNvbWJvYm94TGFiZWwgPSBsYWJlbDtcclxuICAgIHRoaXMuY29tYm9Cb3hMYWJlbENoYW5nZWQuZW1pdCh0aGlzLnNlYXJjaEZpZWxkcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBHZXR0ZXIgZm9yIHN0YXR1c1xyXG4gIGdldCBzdGF0dXMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XHJcbiAgfVxyXG4gIC8vIFNldHRlciBmb3Igc3RhdHVzXHJcbiAgc2V0IHN0YXR1cyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9zdGF0dXMgPSB2YWx1ZTtcclxuICB9XHJcbiAgZW50aXR5U3RhdHVzTGlzdDogS2V5VmFsdWVQYWlyPHN0cmluZywgc3RyaW5nPltdID0gW107XHJcblxyXG4gIHByaXZhdGUgZ2V0RW50aXR5U3RhdHVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbnRpdHlTdGF0dXNTZXJ2aWNlLmdldEVudGl0eVN0YXR1cyh0aGlzLmJ1c2luZXNzQ2xhc3MpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhOiBFbnRpdHlQcm9wZXJ0aWVzUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAoIWRhdGEpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEuZW50aXR5U3RhdHVzICYmIEFycmF5LmlzQXJyYXkoZGF0YS5lbnRpdHlTdGF0dXMpKSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eVN0YXR1c0xpc3QgPSBkYXRhLmVudGl0eVN0YXR1cztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBkYXRhLmRlZmF1bHRTdGF0dXM7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHdvcmtmbG93RXRhdExpc3Q6IEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz5bXSA9IFtdXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0V0YXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0V29ya2Zsb3dFdGF0QnlDbGFzc05hbWVBbmREZXNjcmltaW5hdG9yKHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhOiBLZXlWYWx1ZVBhaXI8c3RyaW5nLCBzdHJpbmc+W10pID0+IHtcclxuICAgICAgICAgIHRoaXMud29ya2Zsb3dFdGF0TGlzdCA9IGRhdGFcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbldvcmtmbG93RXRhdEZpbHRlckNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLndvcmtmbG93RXRhdEZpbHRlckNoYW5nZWQuZW1pdChldmVudClcclxuICB9XHJcblxyXG4gIG9uU3RhdHVzQ2hhbmdlKGV2dDogYW55KSB7XHJcbiAgICB0aGlzLnN0YXR1cyA9IGV2dDtcclxuICAgIHRoaXMuc3RhdHVzRmlsdGVyQ2hhbmdlZC5lbWl0KHRoaXMuc3RhdHVzKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRjUnIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IG51bGwpPy5ibHVyKCk7XHJcbiAgICAgIHRoaXMub25TZWFyY2goKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICA8ZGl2IGNsYXNzPVwiZ3JpZCBwLTJcIiBbbmdDbGFzc109XCJ7J3AtMyc6IGlzUnRsTW9kZX1cIj5cclxuXHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzZWFyY2hGaWVsZCBvZiBzZWFyY2hGaWVsZHNcIiBjbGFzcz1cInt7c2VhcmNoRmllbGQuc3R5bGVDbGFzc319IGdyaWQgbm8tcGFkXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInt7c2VhcmNoRmllbGQuZmllbGR9fVwiPlxyXG4gICAgICA8IS0tIE5vdCBNYXhNaW4gPT09IFNpbmdsZSBGaWx0ZXIgSW5wdXQgLS0+XHJcbiAgICAgIDwhLS0gRmFrZSBlbGVtZW50IHRvIGVzY2FwZSBiaXphcnJlIGlucHV0IGZvcm1hdCAtLT5cclxuICAgICAgPGRpdiAqbmdJZj1cImZha2VBbHdheXNGYWxzZUNvbmRpdGlvbjsgZWxzZSBzZWFyY2hDb21ib0Jsb2NrXCI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIFRzaS1TZWFyY2gtQ29tYm8gLS0+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoQ29tYm9CbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQudHlwZSA9PSBpbnB1dFR5cGVzLlNFQVJDSF9DT01CTzsgZWxzZSBjdXJyZW5jeVNvY2lldGVJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmxhYmVsU3R5bGVDbGFzc319IHByLTFcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cInNlYXJjaEZpZWxkLmxhYmVsVmFsdWUgfCBsb2NhbGl6ZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cInt7c2VhcmNoRmllbGQuaW5wdXRTdHlsZUNsYXNzfX1cIiBbZWxlbWVudFNvdXJjZVVybF09XCJzZWFyY2hGaWVsZC5lbGVtZW50U291cmNlVXJsXCJcclxuICAgICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJzZWFyY2hGaWVsZC5saXN0U291cmNlVXJsXCIgWyhiaW5kKV09XCJzZWFyY2hGaWVsZC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgaWQtZmllbGQ9XCJ7e3NlYXJjaEZpZWxkLmlkRmllbGR9fVwiIGxhYmVsLWZpZWxkPVwie3tzZWFyY2hGaWVsZC5sYWJlbEZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgIFtpc0ZpbHRlcmVkXT1cInNlYXJjaEZpZWxkLmlzRmlsdGVyZWRcIiAoYmluZENoYW5nZSk9XCJvblNlYXJjaEZpZWxkVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VhcmNoRmllbGQuZGlzYWJsZWQgPz8gZmFsc2VcIiBbKHNlbGVjdGVkTGFiZWwpXT1cInNlYXJjaEZpZWxkLmNvbWJvYm94TGFiZWxcIlxyXG4gICAgICAgICAgICAgIChzZWxlY3RlZExhYmVsQ2hhbmdlKT1cImdldENvbWJvTGFiZWwoc2VhcmNoRmllbGQsJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW2J1c2luZXNzQ2xhc3NdPVwic2VhcmNoRmllbGQuYnVzaW5lc3NDbGFzcyA/PyAnJ1wiIFtzaG93QWRkQnV0dG9uXT1cInNlYXJjaEZpZWxkLnNob3dBZGRCdXR0b24gPz8gdHJ1ZVwiIFtzaG93VXBkYXRlQnV0dG9uXT1cInNlYXJjaEZpZWxkLnNob3dVcGRhdGVCdXR0b24gPz8gdW5kZWZpbmVkXCIgW3Nob3dDb25zdWx0QnV0dG9uXT1cInNlYXJjaEZpZWxkLnNob3dDb25zdWx0QnV0dG9uID8/IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgICAgICAgW3Nob3dTZWFyY2hCdXR0b25dPVwic2VhcmNoRmllbGQuc2hvd1NlYXJjaEJ1dHRvbiA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwic2VhcmNoRmllbGQubXVsdGlwbGUgPz8gZmFsc2VcIj48L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPCEtLSBUc2ktQ3VycmVuY3ktU29jaWV0ZS1JbnB1dCAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNjdXJyZW5jeVNvY2lldGVJbnB1dEJsb2NrPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC50eXBlID09IGlucHV0VHlwZXMuQ1VSUkVOQ1lfU09DSUVURV9JTlBVVDsgZWxzZSBjdXJyZW5jeU90aGVySW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwie3tzZWFyY2hGaWVsZC5sYWJlbFN0eWxlQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwic2VhcmNoRmllbGQubGFiZWxWYWx1ZSB8IGxvY2FsaXplXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktU29jaWV0ZS1JbnB1dCBjbGFzcz1cInt7c2VhcmNoRmllbGQuaW5wdXRTdHlsZUNsYXNzfX1cIiBbaW5wdXROYW1lXT1cInNlYXJjaEZpZWxkLmZpZWxkXCJcclxuICAgICAgICAgICAgICBbaW5wdXRJZF09XCJzZWFyY2hGaWVsZC5maWVsZFwiIFsoaW5wdXRGaWVsZCldPVwic2VhcmNoRmllbGQudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChpbnB1dEZpZWxkQ2hhbmdlKT1cIm9uU2VhcmNoRmllbGRWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZClcIiBbZGlzYWJsZWRdPVwic2VhcmNoRmllbGQuZGlzYWJsZWQgPz8gZmFsc2VcIj5cclxuICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktU29jaWV0ZS1JbnB1dD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LU90aGVyLUlucHV0IC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2N1cnJlbmN5T3RoZXJJbnB1dEJsb2NrPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC50eXBlID09IGlucHV0VHlwZXMuQ1VSUkVOQ1lfT1RIRVJfSU5QVVQ7IGVsc2UgZGF0ZVBpY2tlcklucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cInt7c2VhcmNoRmllbGQubGFiZWxTdHlsZUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cInNlYXJjaEZpZWxkLmxhYmVsVmFsdWUgfCBsb2NhbGl6ZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLUlucHV0IGNsYXNzPVwie3tzZWFyY2hGaWVsZC5pbnB1dFN0eWxlQ2xhc3N9fVwiIFtpbnB1dE5hbWVdPVwic2VhcmNoRmllbGQuZmllbGRcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dElkXT1cInNlYXJjaEZpZWxkLmZpZWxkXCIgWyhpbnB1dEZpZWxkKV09XCJzZWFyY2hGaWVsZC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgKGlucHV0RmllbGRDaGFuZ2UpPVwib25TZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkKVwiIFtkaXNhYmxlZF09XCJzZWFyY2hGaWVsZC5kaXNhYmxlZCA/PyBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2N1cnJlbmN5XT1cInNlYXJjaEZpZWxkLmN1cnJlbmN5XCI+XHJcbiAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LU90aGVyLUlucHV0PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPCEtLSBUc2ktRGF0ZS1QaWNrZXIgLS0+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0ZVBpY2tlcklucHV0QmxvY2s+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLnR5cGUgPT0gaW5wdXRUeXBlcy5EQVRFOyBlbHNlIGRhdGV0aW1lUGlja2VySW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwie3tzZWFyY2hGaWVsZC5sYWJlbFN0eWxlQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwic2VhcmNoRmllbGQubGFiZWxWYWx1ZSB8IGxvY2FsaXplXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDxUc2ktRGF0ZS1QaWNrZXIgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmlucHV0U3R5bGVDbGFzc319XCIgW2lucHV0TmFtZV09XCJzZWFyY2hGaWVsZC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgW2lucHV0SWRdPVwic2VhcmNoRmllbGQuZmllbGRcIiBbKGlucHV0RmllbGQpXT1cInNlYXJjaEZpZWxkLnZhbHVlXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VhcmNoRmllbGQuZGlzYWJsZWQgPz8gZmFsc2VcIiAoaW5wdXRGaWVsZENoYW5nZSk9XCJvblNlYXJjaEZpZWxkVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQpXCI+XHJcbiAgICAgICAgICAgIDwvVHNpLURhdGUtUGlja2VyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPCEtLSBUc2ktRGF0ZS1QaWNrZXIgLS0+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0ZXRpbWVQaWNrZXJJbnB1dEJsb2NrPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC50eXBlID09IGlucHV0VHlwZXMuREFURVRJTUU7IGVsc2UgY2hlY2tCb3hJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmxhYmVsU3R5bGVDbGFzc319XCJcclxuICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJzZWFyY2hGaWVsZC5sYWJlbFZhbHVlIHwgbG9jYWxpemVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1EYXRlLVBpY2tlciBjbGFzcz1cInt7c2VhcmNoRmllbGQuaW5wdXRTdHlsZUNsYXNzfX1cIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtpbnB1dE5hbWVdPVwic2VhcmNoRmllbGQuZmllbGRcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dElkXT1cInNlYXJjaEZpZWxkLmZpZWxkXCIgWyhpbnB1dEZpZWxkKV09XCJzZWFyY2hGaWVsZC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlYXJjaEZpZWxkLmRpc2FibGVkID8/IGZhbHNlXCIgKGlucHV0RmllbGRDaGFuZ2UpPVwib25TZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkKVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1EYXRlLVBpY2tlcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVHNpLUNoZWNrQm94IC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2NoZWNrQm94SW5wdXRCbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQudHlwZSA9PSBpbnB1dFR5cGVzLkNIRUNLQk9YOyBlbHNlIGRlY2ltYWxJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmxhYmVsU3R5bGVDbGFzc319XCJcclxuICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJzZWFyY2hGaWVsZC5sYWJlbFZhbHVlIHwgbG9jYWxpemVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1DaGVja0JveCBjbGFzcz1cInt7c2VhcmNoRmllbGQuaW5wdXRTdHlsZUNsYXNzfX1cIiBbaW5wdXROYW1lXT1cInNlYXJjaEZpZWxkLmZpZWxkXCJcclxuICAgICAgICAgICAgICBbaW5wdXRJZF09XCJzZWFyY2hGaWVsZC5maWVsZFwiIFsoaW5wdXRGaWVsZCldPVwic2VhcmNoRmllbGQudmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWFyY2hGaWVsZC5kaXNhYmxlZCA/PyBmYWxzZVwiIChpbnB1dEZpZWxkQ2hhbmdlKT1cIm9uU2VhcmNoRmllbGRWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZClcIlxyXG4gICAgICAgICAgICAgIFtpc0JpbmFyeV09XCJzZWFyY2hGaWVsZC5pc0JpbmFyeSA/PyBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L1RzaS1DaGVja0JveD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVHNpLURlY2ltYWwtSW5wdXQgLS0+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVjaW1hbElucHV0QmxvY2s+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLnR5cGUgPT0gaW5wdXRUeXBlcy5ERUNJTUFMX0lOUFVUOyBlbHNlIGludGVnZXJJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmxhYmVsU3R5bGVDbGFzc319XCJcclxuICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJzZWFyY2hGaWVsZC5sYWJlbFZhbHVlIHwgbG9jYWxpemVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1EZWNpbWFsLUlucHV0IGNsYXNzPVwie3tzZWFyY2hGaWVsZC5pbnB1dFN0eWxlQ2xhc3N9fVwiIFtpbnB1dE5hbWVdPVwic2VhcmNoRmllbGQuZmllbGRcIlxyXG4gICAgICAgICAgICAgIFtpbnB1dElkXT1cInNlYXJjaEZpZWxkLmZpZWxkXCIgWyhpbnB1dEZpZWxkKV09XCJzZWFyY2hGaWVsZC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgKGlucHV0RmllbGRDaGFuZ2UpPVwib25TZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkKVwiIFtkaXNhYmxlZF09XCJzZWFyY2hGaWVsZC5kaXNhYmxlZCA/PyBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW251bU9mRGVjaW1hbF09XCJzZWFyY2hGaWVsZC5udW1PZkRlY2ltYWxcIj5cclxuICAgICAgICAgICAgPC9Uc2ktRGVjaW1hbC1JbnB1dD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVHNpLUludGVnZXIgLS0+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjaW50ZWdlcklucHV0QmxvY2s+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLnR5cGUgPT0gaW5wdXRUeXBlcy5JTlRFR0VSOyBlbHNlIHJhdGVJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmxhYmVsU3R5bGVDbGFzc319XCJcclxuICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJzZWFyY2hGaWVsZC5sYWJlbFZhbHVlIHwgbG9jYWxpemVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInt7c2VhcmNoRmllbGQ/LmlucHV0U3R5bGVDbGFzc319XCI+XHJcbiAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyIFtpbnB1dE5hbWVdPVwic2VhcmNoRmllbGQuZmllbGRcIiBbaW5wdXRJZF09XCJzZWFyY2hGaWVsZC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cInNlYXJjaEZpZWxkLnZhbHVlXCIgKGlucHV0RmllbGRDaGFuZ2UpPVwib25TZWFyY2hGaWVsZFZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VhcmNoRmllbGQuZGlzYWJsZWQgPz8gZmFsc2VcIj5cclxuICAgICAgICAgICAgICA8L1RzaS1JbnRlZ2VyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVHNpLVJhdGUtSW5wdXQgLS0+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAgI3JhdGVJbnB1dEJsb2NrPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC50eXBlID09IGlucHV0VHlwZXMuUkFURV9JTlBVVDsgZWxzZSByYWRpb0lucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cInt7c2VhcmNoRmllbGQubGFiZWxTdHlsZUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cInNlYXJjaEZpZWxkLmxhYmVsVmFsdWUgfCBsb2NhbGl6ZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVJhdGUtSW5wdXQgY2xhc3M9XCJ7e3NlYXJjaEZpZWxkLmlucHV0U3R5bGVDbGFzc319XCIgW2lucHV0TmFtZV09XCJzZWFyY2hGaWVsZC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgW2lucHV0SWRdPVwic2VhcmNoRmllbGQuZmllbGRcIiBbKGlucHV0RmllbGQpXT1cInNlYXJjaEZpZWxkLnZhbHVlXCJcclxuICAgICAgICAgICAgICAoaW5wdXRGaWVsZENoYW5nZSk9XCJvblNlYXJjaEZpZWxkVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQpXCIgW2lzRnJhY3Rpb25dPVwic2VhcmNoRmllbGQuaXNGcmFjdGlvblwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlYXJjaEZpZWxkLmRpc2FibGVkID8/IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIDwvVHNpLVJhdGUtSW5wdXQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3JhZGlvSW5wdXRCbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQudHlwZSA9PSBpbnB1dFR5cGVzLlJBRElPX0JVVFRPTjsgZWxzZSBkZWZhdWx0VGV4dElucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cInt7c2VhcmNoRmllbGQubGFiZWxTdHlsZUNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cInNlYXJjaEZpZWxkLmxhYmVsVmFsdWUgfCBsb2NhbGl6ZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8VHNpLVJhZGlvLUJ1dHRvbiBjbGFzcz1cInt7c2VhcmNoRmllbGQuaW5wdXRTdHlsZUNsYXNzfX1cIiBbaW5wdXROYW1lXT1cInNlYXJjaEZpZWxkLmZpZWxkXCJcclxuICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cInNlYXJjaEZpZWxkLnZhbHVlXCJcclxuICAgICAgICAgICAgICAoaW5wdXRGaWVsZENoYW5nZSk9XCJvblNlYXJjaEZpZWxkVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VhcmNoRmllbGQuZGlzYWJsZWQgPz8gZmFsc2VcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInNlYXJjaEZpZWxkLnJhZGlvQnV0dG9uRGF0YXNvdXJjZVwiXHJcbiAgICAgICAgICAgICAgW2xheW91dE9yaWVudGF0aW9uXT1cInNlYXJjaEZpZWxkLmxheW91dE9yaWVudGF0aW9uID8/IGxheW91dE9yaWVudGF0aW9uUmVmLnZlcnRpY2FsXCI+XHJcbiAgICAgICAgICAgIDwvVHNpLVJhZGlvLUJ1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gVHNpLVRleHQtQm94IC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZXh0SW5wdXRCbG9jaz5cclxuICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwie3tzZWFyY2hGaWVsZC5sYWJlbFN0eWxlQ2xhc3N9fSBwci0xXCJcclxuICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCJzZWFyY2hGaWVsZC5sYWJlbFZhbHVlIHwgbG9jYWxpemVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cInt7c2VhcmNoRmllbGQuaW5wdXRTdHlsZUNsYXNzfX1cIiBbaW5wdXROYW1lXT1cInNlYXJjaEZpZWxkLmZpZWxkXCJcclxuICAgICAgICAgICAgICBbaW5wdXRJZF09XCJzZWFyY2hGaWVsZC5maWVsZFwiIFsoaW5wdXRGaWVsZCldPVwic2VhcmNoRmllbGQudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChpbnB1dEZpZWxkQ2hhbmdlKT1cIm9uU2VhcmNoRmllbGRWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZClcIiBbZGlzYWJsZWRdPVwic2VhcmNoRmllbGQuZGlzYWJsZWQgPz8gZmFsc2VcIj5cclxuICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwhLS0gIC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXggcHgtMlwiPlxyXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cImlzUnRsTW9kZSA/ICdydGwtbW9kZScgOiAnbHRyLW1vZGUnIFwiIGNsYXNzPVwicC1pbnB1dGdyb3VwIHJ0bC1tb2RlIGgtMnJlbSBuby1wYWRcIj5cclxuICAgICAgICA8ZGl2IHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImdsb2JhbF9zZWFyY2hcIiBjbGFzcz1cInAtaW5wdXRncm91cCBydGwtbW9kZSBoLTJyZW0gbm8tcGFkXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwia2V5d29yZFwiIHBJbnB1dFRleHQgW3BsYWNlaG9sZGVyXT1cIidnbG9iYWxfc2VhcmNoJyB8IGxvY2FsaXplXCI+XHJcblxyXG4gICAgICAgICAgPCEtLSBXb3JrZmxvdyBldGF0IGZpbHRlciAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1c2luZXNzQ2xhc3MgJiYgd29ya2Zsb3dFdGF0TGlzdCAmJiB3b3JrZmxvd0V0YXRMaXN0Lmxlbmd0aCA+IDBcIiBpZD1cIndvcmtmbG93LWV0YXQtZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiIFtwcmVzZW50YXRpb25EZXNpZ25lckJhc2VdPVwiJ1dvcmtmbG93RXRhdCdcIj5cclxuICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBcclxuICAgICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInV29ya2Zsb3cgRXRhdCdcIiBcclxuICAgICAgICAgICAgICAgIFtpZC1maWVsZF09XCIna2V5J1wiIFxyXG4gICAgICAgICAgICAgICAgW2xhYmVsLWZpZWxkXT1cIid2YWx1ZSdcIiBcclxuICAgICAgICAgICAgICAgIFtpc0ZpbHRlcmVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIChiaW5kQ2hhbmdlKT1cIm9uV29ya2Zsb3dFdGF0RmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW2RhdGFzb3VyY2VdPVwid29ya2Zsb3dFdGF0TGlzdFwiXHJcbiAgICAgICAgICAgICAgICBbbWF4V2lkdGhdPVwiJzEwJ1wiPlxyXG4gICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnVzaW5lc3NDbGFzcyAmJiBlbnRpdHlTdGF0dXNMaXN0ICYmIGVudGl0eVN0YXR1c0xpc3QubGVuZ3RoID4gMFwiIGlkPVwic3RhdHVzLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIiBbcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlXT1cImVudGl0eUluZm8/LnN0YXR1c0NvbHVtbk5hbWVcIj5cclxuICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBcclxuICAgICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInU3RhdHV0J1wiIFxyXG4gICAgICAgICAgICAgICAgW2lkLWZpZWxkXT1cIidrZXknXCIgXHJcbiAgICAgICAgICAgICAgICBbbGFiZWwtZmllbGRdPVwiJ3ZhbHVlJ1wiIFxyXG4gICAgICAgICAgICAgICAgKGJpbmRDaGFuZ2UpPVwib25TdGF0dXNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICBbY29tYm9UeXBlXT1cIidzdGF0dXMnXCJcclxuICAgICAgICAgICAgICAgIFtzdGF0dXNNZXRhZGF0YV09XCJzdGF0dXNNZXRhZGF0YVwiXHJcbiAgICAgICAgICAgICAgICBbZGF0YXNvdXJjZV09XCJlbnRpdHlTdGF0dXNMaXN0XCIgPlxyXG4gICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzZWFyY2hfYnV0dG9uXCI+XHJcbiAgICAgICAgICA8VHNpLUJ1dHRvbiBzdHlsZUNsYXNzPVwicC1lbGVtZW50IG5nLXRucy1jNzk1ODM1MDMtMTIyMSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzU2VhcmNoQnV0dG9uRGlzYWJsZWRcIiBpY29uPVwicGkgcGktc2VhcmNoXCIgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCJcclxuICAgICAgICAgICAgdG9vbHRpcFRleHQ9XCJzaGFyZWRfdHNpX3NlYXJjaF9ib3hfcmVjaGVyY2hlclwiIChjbGljayk9XCJvblNlYXJjaCgpXCI+PC9Uc2ktQnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBweC0yXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlXCIgW3BUb29sdGlwXT1cInRvb2x0aXBUZXh0ID8gZ2xvYmFsU2VhcmNoVG9vbHRpcENvbnRlbnQgOiB1bmRlZmluZWRcIiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIlxyXG4gICAgICAgICAgICB0b29sdGlwU3R5bGVDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+PC9pPlxyXG5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZ2xvYmFsU2VhcmNoVG9vbHRpcENvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyB0b29sdGlwVGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|