pdm-ui-kit 0.2.0 → 0.3.0
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/README.md +168 -3
- package/esm2020/lib/components/button-group/button-group.component.mjs +208 -182
- package/esm2020/lib/components/combobox/combobox.component.mjs +136 -14
- package/esm2020/lib/components/context-menu/context-menu.component.mjs +121 -42
- package/esm2020/lib/components/data-table/data-table.component.mjs +3 -3
- package/esm2020/lib/components/date-picker/date-picker.component.mjs +66 -54
- package/esm2020/lib/components/dialog/dialog.component.mjs +111 -94
- package/esm2020/lib/components/hover-card/hover-card.component.mjs +185 -24
- package/esm2020/lib/components/input/input.component.mjs +15 -15
- package/esm2020/lib/components/input-group/input-group.component.mjs +14 -14
- package/esm2020/lib/components/menubar/menubar.component.mjs +105 -29
- package/esm2020/lib/components/popover/popover.component.mjs +107 -75
- package/esm2020/lib/components/select/select.component.mjs +23 -22
- package/esm2020/lib/components/table/table.component.mjs +77 -68
- package/esm2020/lib/components/tabs/tabs.component.mjs +6 -6
- package/esm2020/lib/components/toggle-group/toggle-group.component.mjs +6 -6
- package/esm2020/lib/components/tooltip/tooltip.component.mjs +162 -19
- package/esm2020/lib/overlay/z-index-helper.mjs +69 -0
- package/esm2020/lib/utils/z-index.mjs +25 -28
- package/esm2020/public-api.mjs +67 -66
- package/fesm2015/pdm-ui-kit.mjs +1376 -654
- package/fesm2015/pdm-ui-kit.mjs.map +1 -1
- package/fesm2020/pdm-ui-kit.mjs +1380 -654
- package/fesm2020/pdm-ui-kit.mjs.map +1 -1
- package/lib/components/button-group/button-group.component.d.ts +8 -2
- package/lib/components/combobox/combobox.component.d.ts +20 -3
- package/lib/components/context-menu/context-menu.component.d.ts +17 -8
- package/lib/components/date-picker/date-picker.component.d.ts +5 -6
- package/lib/components/dialog/dialog.component.d.ts +5 -5
- package/lib/components/hover-card/hover-card.component.d.ts +27 -4
- package/lib/components/input/input.component.d.ts +3 -3
- package/lib/components/input-group/input-group.component.d.ts +1 -1
- package/lib/components/menubar/menubar.component.d.ts +16 -8
- package/lib/components/popover/popover.component.d.ts +13 -12
- package/lib/components/select/select.component.d.ts +4 -5
- package/lib/components/table/table.component.d.ts +2 -2
- package/lib/components/tabs/tabs.component.d.ts +1 -1
- package/lib/components/toggle-group/toggle-group.component.d.ts +1 -1
- package/lib/components/tooltip/tooltip.component.d.ts +21 -3
- package/lib/overlay/z-index-helper.d.ts +36 -0
- package/lib/utils/z-index.d.ts +14 -18
- package/package.json +6 -6
- package/public-api.d.ts +66 -65
- package/src/lib/styles/tokens.css +182 -0
|
@@ -237,10 +237,10 @@ export class PdmDataTableComponent {
|
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
239
|
PdmDataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDataTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
240
|
-
PdmDataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDataTableComponent, selector: "pdm-data-table", inputs: { className: "className", columns: "columns", responsiveStrategy: "responsiveStrategy", selectable: "selectable", showActions: "showActions", showFilter: "showFilter", showPagination: "showPagination", showColumnSelector: "showColumnSelector", filterPlaceholder: "filterPlaceholder", columnsLabel: "columnsLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", emptyLabel: "emptyLabel", rowsSelectedLabel: "rowsSelectedLabel", statusLabel: "statusLabel", emailLabel: "emailLabel", amountLabel: "amountLabel", rows: "rows", page: "page", pageSize: "pageSize", query: "query", filterFn: "filterFn" }, outputs: { queryChange: "queryChange", rowAction: "rowAction", pageChange: "pageChange", selectionChange: "selectionChange", columnSort: "columnSort" }, ngImport: i0, template: "<section [ngClass]=\"['flex w-full flex-col', className]\">\n <!-- Toolbar: Filtro + Selector de columnas -->\n <div
|
|
240
|
+
PdmDataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDataTableComponent, selector: "pdm-data-table", inputs: { className: "className", columns: "columns", responsiveStrategy: "responsiveStrategy", selectable: "selectable", showActions: "showActions", showFilter: "showFilter", showPagination: "showPagination", showColumnSelector: "showColumnSelector", filterPlaceholder: "filterPlaceholder", columnsLabel: "columnsLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", emptyLabel: "emptyLabel", rowsSelectedLabel: "rowsSelectedLabel", statusLabel: "statusLabel", emailLabel: "emailLabel", amountLabel: "amountLabel", rows: "rows", page: "page", pageSize: "pageSize", query: "query", filterFn: "filterFn" }, outputs: { queryChange: "queryChange", rowAction: "rowAction", pageChange: "pageChange", selectionChange: "selectionChange", columnSort: "columnSort" }, ngImport: i0, template: "<section [ngClass]=\"['flex w-full flex-col', className]\">\n <!-- Toolbar: Filtro + Selector de columnas -->\n <div\n *ngIf=\"showFilter || showColumnSelector\"\n class=\"flex w-full flex-col gap-2 py-4 sm:flex-row sm:items-center\"\n >\n <input\n *ngIf=\"showFilter\"\n type=\"text\"\n [placeholder]=\"filterPlaceholder\"\n [value]=\"query\"\n (input)=\"onQueryInput($event)\"\n class=\"h-9 flex-1 rounded-md border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm placeholder:text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n />\n\n <button\n *ngIf=\"showColumnSelector\"\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm font-medium text-foreground shadow-sm whitespace-nowrap\"\n >\n <span>{{ columnsLabel }}</span>\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 10L12 15L17 10\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n </div>\n\n <!-- Tabla con responsive -->\n <pdm-table\n variant=\"data\"\n [responsiveStrategy]=\"responsiveStrategy\"\n [fullBleed]=\"false\"\n >\n <thead>\n <tr>\n <!-- Columna de selecci\u00F3n -->\n <th *ngIf=\"selectable\" class=\"w-10 px-2 py-2 text-left font-medium\">\n <input\n type=\"checkbox\"\n (change)=\"onToggleAll($event)\"\n class=\"h-4 w-4 rounded-sm border border-input\"\n />\n </th>\n\n <!-- Columnas din\u00E1micas -->\n <th\n *ngFor=\"let column of effectiveColumns\"\n [ngClass]=\"getHeaderClass(column)\"\n [ngStyle]=\"getColumnStyle(column)\"\n >\n <!-- Header sortable -->\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n (click)=\"onSort(column)\"\n class=\"inline-flex appearance-none items-center gap-1 rounded-sm border-0 bg-transparent px-3 py-2 text-sm hover:underline\"\n >\n <span>{{ column.label }}</span>\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 6L4 10L8 14M16 18L20 14L16 10\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n\n <!-- Header no sortable -->\n <span *ngIf=\"!column.sortable\">{{ column.label }}</span>\n </th>\n\n <!-- Columna de acciones -->\n <th *ngIf=\"showActions\" class=\"w-10 px-2 py-2\"></th>\n </tr>\n </thead>\n\n <tbody>\n <!-- Filas con datos -->\n <tr *ngFor=\"let row of pagedRows\">\n <!-- Celda de selecci\u00F3n -->\n <td *ngIf=\"selectable\" class=\"px-2 py-2\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(row)\"\n (change)=\"onToggleRow(row, $event)\"\n class=\"h-4 w-4 rounded-sm border border-input\"\n />\n </td>\n\n <!-- Celdas din\u00E1micas -->\n <td\n *ngFor=\"let column of effectiveColumns\"\n [ngClass]=\"getCellClass(column)\"\n >\n <!-- Template personalizado si existe -->\n <ng-container *ngIf=\"column.cellTemplate; else defaultCell\">\n <ng-container\n *ngTemplateOutlet=\"\n column.cellTemplate;\n context: { $implicit: row, value: row[column.key] }\n \"\n >\n </ng-container>\n </ng-container>\n\n <!-- Renderizado default -->\n <ng-template #defaultCell>\n {{ getCellValue(row, column) }}\n </ng-template>\n </td>\n\n <!-- Celda de acciones -->\n <td *ngIf=\"showActions\" class=\"px-2 py-2\">\n <button\n type=\"button\"\n class=\"inline-flex h-8 w-8 appearance-none items-center justify-center border-0 bg-transparent p-0 hover:text-foreground\"\n (click)=\"onAction(row)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"6\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n <circle cx=\"12\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n <circle cx=\"18\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n </svg>\n </button>\n </td>\n </tr>\n\n <!-- Fila vac\u00EDa -->\n <tr *ngIf=\"pagedRows.length === 0\">\n <td\n [attr.colspan]=\"\n effectiveColumns.length +\n (selectable ? 1 : 0) +\n (showActions ? 1 : 0)\n \"\n class=\"px-3 py-6 text-center text-sm text-muted-foreground\"\n >\n {{ emptyLabel }}\n </td>\n </tr>\n </tbody>\n </pdm-table>\n\n <!-- Footer: Info + Paginaci\u00F3n -->\n <div\n *ngIf=\"showPagination || selectable\"\n class=\"flex w-full flex-wrap items-center gap-2 py-4 sm:flex-nowrap\"\n >\n <p\n *ngIf=\"selectable\"\n class=\"m-0 flex-1 pr-2 text-sm text-muted-foreground whitespace-nowrap\"\n >\n {{ selectedCount }} of {{ rows.length }} {{ rowsSelectedLabel }}\n </p>\n\n <div *ngIf=\"showPagination\" class=\"flex items-center gap-2 ml-auto\">\n <span class=\"text-sm text-muted-foreground whitespace-nowrap\">\n Page {{ page }} of {{ totalPages }}\n </span>\n <button\n type=\"button\"\n class=\"h-9 appearance-none rounded-md border border-input bg-background px-4 text-sm font-medium text-foreground shadow-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"page <= 1\"\n (click)=\"previous()\"\n >\n {{ previousLabel }}\n </button>\n <button\n type=\"button\"\n class=\"h-9 appearance-none rounded-md border border-input bg-background px-4 text-sm font-medium text-foreground shadow-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"page >= totalPages\"\n (click)=\"next()\"\n >\n {{ nextLabel }}\n </button>\n </div>\n </div>\n</section>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.PdmTableComponent, selector: "pdm-table", inputs: ["variant", "responsiveStrategy", "className", "fullBleed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
241
241
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDataTableComponent, decorators: [{
|
|
242
242
|
type: Component,
|
|
243
|
-
args: [{ selector: 'pdm-data-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section [ngClass]=\"['flex w-full flex-col', className]\">\n <!-- Toolbar: Filtro + Selector de columnas -->\n <div
|
|
243
|
+
args: [{ selector: 'pdm-data-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<section [ngClass]=\"['flex w-full flex-col', className]\">\n <!-- Toolbar: Filtro + Selector de columnas -->\n <div\n *ngIf=\"showFilter || showColumnSelector\"\n class=\"flex w-full flex-col gap-2 py-4 sm:flex-row sm:items-center\"\n >\n <input\n *ngIf=\"showFilter\"\n type=\"text\"\n [placeholder]=\"filterPlaceholder\"\n [value]=\"query\"\n (input)=\"onQueryInput($event)\"\n class=\"h-9 flex-1 rounded-md border border-input bg-transparent px-3 py-1 text-sm text-foreground shadow-sm placeholder:text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n />\n\n <button\n *ngIf=\"showColumnSelector\"\n type=\"button\"\n class=\"inline-flex h-9 appearance-none items-center gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm font-medium text-foreground shadow-sm whitespace-nowrap\"\n >\n <span>{{ columnsLabel }}</span>\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4 text-foreground\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7 10L12 15L17 10\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n </div>\n\n <!-- Tabla con responsive -->\n <pdm-table\n variant=\"data\"\n [responsiveStrategy]=\"responsiveStrategy\"\n [fullBleed]=\"false\"\n >\n <thead>\n <tr>\n <!-- Columna de selecci\u00F3n -->\n <th *ngIf=\"selectable\" class=\"w-10 px-2 py-2 text-left font-medium\">\n <input\n type=\"checkbox\"\n (change)=\"onToggleAll($event)\"\n class=\"h-4 w-4 rounded-sm border border-input\"\n />\n </th>\n\n <!-- Columnas din\u00E1micas -->\n <th\n *ngFor=\"let column of effectiveColumns\"\n [ngClass]=\"getHeaderClass(column)\"\n [ngStyle]=\"getColumnStyle(column)\"\n >\n <!-- Header sortable -->\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n (click)=\"onSort(column)\"\n class=\"inline-flex appearance-none items-center gap-1 rounded-sm border-0 bg-transparent px-3 py-2 text-sm hover:underline\"\n >\n <span>{{ column.label }}</span>\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 6L4 10L8 14M16 18L20 14L16 10\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </svg>\n </button>\n\n <!-- Header no sortable -->\n <span *ngIf=\"!column.sortable\">{{ column.label }}</span>\n </th>\n\n <!-- Columna de acciones -->\n <th *ngIf=\"showActions\" class=\"w-10 px-2 py-2\"></th>\n </tr>\n </thead>\n\n <tbody>\n <!-- Filas con datos -->\n <tr *ngFor=\"let row of pagedRows\">\n <!-- Celda de selecci\u00F3n -->\n <td *ngIf=\"selectable\" class=\"px-2 py-2\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(row)\"\n (change)=\"onToggleRow(row, $event)\"\n class=\"h-4 w-4 rounded-sm border border-input\"\n />\n </td>\n\n <!-- Celdas din\u00E1micas -->\n <td\n *ngFor=\"let column of effectiveColumns\"\n [ngClass]=\"getCellClass(column)\"\n >\n <!-- Template personalizado si existe -->\n <ng-container *ngIf=\"column.cellTemplate; else defaultCell\">\n <ng-container\n *ngTemplateOutlet=\"\n column.cellTemplate;\n context: { $implicit: row, value: row[column.key] }\n \"\n >\n </ng-container>\n </ng-container>\n\n <!-- Renderizado default -->\n <ng-template #defaultCell>\n {{ getCellValue(row, column) }}\n </ng-template>\n </td>\n\n <!-- Celda de acciones -->\n <td *ngIf=\"showActions\" class=\"px-2 py-2\">\n <button\n type=\"button\"\n class=\"inline-flex h-8 w-8 appearance-none items-center justify-center border-0 bg-transparent p-0 hover:text-foreground\"\n (click)=\"onAction(row)\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n class=\"h-4 w-4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"6\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n <circle cx=\"12\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n <circle cx=\"18\" cy=\"12\" r=\"1.5\" fill=\"currentColor\"></circle>\n </svg>\n </button>\n </td>\n </tr>\n\n <!-- Fila vac\u00EDa -->\n <tr *ngIf=\"pagedRows.length === 0\">\n <td\n [attr.colspan]=\"\n effectiveColumns.length +\n (selectable ? 1 : 0) +\n (showActions ? 1 : 0)\n \"\n class=\"px-3 py-6 text-center text-sm text-muted-foreground\"\n >\n {{ emptyLabel }}\n </td>\n </tr>\n </tbody>\n </pdm-table>\n\n <!-- Footer: Info + Paginaci\u00F3n -->\n <div\n *ngIf=\"showPagination || selectable\"\n class=\"flex w-full flex-wrap items-center gap-2 py-4 sm:flex-nowrap\"\n >\n <p\n *ngIf=\"selectable\"\n class=\"m-0 flex-1 pr-2 text-sm text-muted-foreground whitespace-nowrap\"\n >\n {{ selectedCount }} of {{ rows.length }} {{ rowsSelectedLabel }}\n </p>\n\n <div *ngIf=\"showPagination\" class=\"flex items-center gap-2 ml-auto\">\n <span class=\"text-sm text-muted-foreground whitespace-nowrap\">\n Page {{ page }} of {{ totalPages }}\n </span>\n <button\n type=\"button\"\n class=\"h-9 appearance-none rounded-md border border-input bg-background px-4 text-sm font-medium text-foreground shadow-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"page <= 1\"\n (click)=\"previous()\"\n >\n {{ previousLabel }}\n </button>\n <button\n type=\"button\"\n class=\"h-9 appearance-none rounded-md border border-input bg-background px-4 text-sm font-medium text-foreground shadow-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n [disabled]=\"page >= totalPages\"\n (click)=\"next()\"\n >\n {{ nextLabel }}\n </button>\n </div>\n </div>\n</section>\n" }]
|
|
244
244
|
}], propDecorators: { className: [{
|
|
245
245
|
type: Input
|
|
246
246
|
}], columns: [{
|
|
@@ -296,4 +296,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
296
296
|
}], columnSort: [{
|
|
297
297
|
type: Output
|
|
298
298
|
}] } });
|
|
299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQzs7OztBQTJFN0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQU1ILE1BQU0sT0FBTyxxQkFBcUI7SUFMbEM7UUFNVyxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXhCOzs7V0FHRztRQUNNLFlBQU8sR0FBNEIsRUFBRSxDQUFDO1FBRS9DOztXQUVHO1FBQ00sdUJBQWtCLEdBQTRCLFFBQVEsQ0FBQztRQUVoRTs7V0FFRztRQUNNLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFNUI7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUU3Qjs7V0FFRztRQUNNLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFM0I7O1dBRUc7UUFDTSxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUUvQjs7V0FFRztRQUNNLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUVwQyxjQUFjO1FBQ0wsc0JBQWlCLEdBQUcsV0FBVyxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsVUFBVSxDQUFDO1FBQzNCLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDbkIsZUFBVSxHQUFHLGFBQWEsQ0FBQztRQUMzQixzQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUUvQyw4REFBOEQ7UUFDOUQ7O1dBRUc7UUFDTSxnQkFBVyxHQUFH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QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVSZXNwb25zaXZlU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi91dGlscy9yZXNwb25zaXZlJztcblxuLyoqXG4gKiBERVBSRUNBVEVEOiBFc3RhIGludGVyZmF6IGVzIHBhcmEgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICogVXNhciBQZG1EYXRhVGFibGVDb2x1bW48VD4gY29uIHRpcG8gZ2Vuw6lyaWNvIGVuIHN1IGx1Z2FyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGRtRGF0YVRhYmxlUm93IHtcbiAgaWQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICBzZWxlY3RlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVmaW5pY2nDs24gZGUgY29sdW1uYSBwYXJhIGRhdGEtdGFibGUgZ2Vuw6lyaWNvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGRtRGF0YVRhYmxlQ29sdW1uPFQgPSBhbnk+IHtcbiAgLyoqXG4gICAqIEtleSBkZWwgY2FtcG8gZW4gZWwgb2JqZXRvIGRlIGRhdG9zXG4gICAqIFVzYWRvIHBhcmEgYWNjZWRlciBhbCB2YWxvcjogcm93W2tleV1cbiAgICovXG4gIGtleToga2V5b2YgVDtcbiAgXG4gIC8qKlxuICAgKiBMYWJlbCBhIG1vc3RyYXIgZW4gZWwgaGVhZGVyXG4gICAqL1xuICBsYWJlbDogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIEFuY2hvIGRlIGxhIGNvbHVtbmEgKENTUyB3aWR0aClcbiAgICogRWo6ICcxMDBweCcsICcyMCUnLCAnYXV0bydcbiAgICovXG4gIHdpZHRoPzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIFNpIGxhIGNvbHVtbmEgZXMgc29ydGFibGVcbiAgICovXG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgXG4gIC8qKlxuICAgKiBBbGluZWFjacOzbiBkZWwgY29udGVuaWRvXG4gICAqL1xuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcbiAgXG4gIC8qKlxuICAgKiBGdW5jacOzbiBjdXN0b20gcGFyYSByZW5kZXJpemFyIGVsIHZhbG9yXG4gICAqIFNpIG5vIHNlIHByb3ZlZSwgc2UgdXNhIHRvU3RyaW5nKCkgZGVsIHZhbG9yXG4gICAqL1xuICByZW5kZXI/OiAodmFsdWU6IGFueSwgcm93OiBUKSA9PiBzdHJpbmc7XG4gIFxuICAvKipcbiAgICogVGVtcGxhdGUgcGVyc29uYWxpemFkbyBwYXJhIGxhIGNlbGRhXG4gICAqIFRpZW5lIHByaW9yaWRhZCBzb2JyZSByZW5kZXIoKVxuICAgKi9cbiAgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IFQ7IHZhbHVlOiBhbnkgfT47XG4gIFxuICAvKipcbiAgICogU2kgZXMgdHJ1ZSwgbGEgY29sdW1uYSBzZSBvY3VsdGEgZW4gbW9iaWxlXG4gICAqIFNvbG8gc2UgbXVlc3RyYSBlbiBicmVha3BvaW50IG1kKyAoNzY4cHgpXG4gICAqL1xuICBoaWRlT25Nb2JpbGU/OiBib29sZWFuO1xuICBcbiAgLyoqXG4gICAqIENTUyBjbGFzc2VzIGFkaWNpb25hbGVzIHBhcmEgbGFzIGNlbGRhcyBkZSBlc3RhIGNvbHVtbmFcbiAgICovXG4gIGNlbGxDbGFzcz86IHN0cmluZztcbiAgXG4gIC8qKlxuICAgKiBDU1MgY2xhc3NlcyBhZGljaW9uYWxlcyBwYXJhIGVsIGhlYWRlciBkZSBlc3RhIGNvbHVtbmFcbiAgICovXG4gIGhlYWRlckNsYXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERhdGEtdGFibGUgZ2Vuw6lyaWNvIGNvbiBwYWdpbmFjacOzbiwgZmlsdHJhZG8geSBzZWxlY2Npw7NuXG4gKiBcbiAqIE5VRVZPOiBBaG9yYSBlcyBnZW7DqXJpY28geSBjb25maWd1cmFibGUgdmlhIGNvbHVtbmFzXG4gKiBcbiAqIEBleGFtcGxlXG4gKiAvLyBEZWZpbmlyIGNvbHVtbmFzXG4gKiBjb2x1bW5zOiBQZG1EYXRhVGFibGVDb2x1bW48VXNlcj5bXSA9IFtcbiAqICAgeyBrZXk6ICduYW1lJywgbGFiZWw6ICdOYW1lJywgc29ydGFibGU6IHRydWUgfSxcbiAqICAgeyBrZXk6ICdlbWFpbCcsIGxhYmVsOiAnRW1haWwnLCBzb3J0YWJsZTogdHJ1ZSB9LFxuICogICB7IGtleTogJ3JvbGUnLCBsYWJlbDogJ1JvbGUnLCBoaWRlT25Nb2JpbGU6IHRydWUgfSxcbiAqICAgeyBrZXk6ICdjcmVhdGVkQXQnLCBsYWJlbDogJ0NyZWF0ZWQnLCByZW5kZXI6ICh2YWwpID0+IGZvcm1hdERhdGUodmFsKSB9XG4gKiBdO1xuICogXG4gKiAvLyBFbiBlbCB0ZW1wbGF0ZVxuICogPHBkbS1kYXRhLXRhYmxlXG4gKiAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICogICBbcm93c109XCJ1c2Vyc1wiXG4gKiAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICogICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0KCRldmVudClcIj5cbiAqIDwvcGRtLWRhdGEtdGFibGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1kYXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1EYXRhVGFibGVDb21wb25lbnQ8VCA9IGFueT4ge1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgXG4gIC8qKlxuICAgKiBDb2x1bW5hcyBhIG1vc3RyYXJcbiAgICogU2kgbm8gc2UgcHJvdmVlLCBpbnRlbnRhIGluZmVyaXIgZGVsIHByaW1lciByb3cgKGxlZ2FjeSBtb2RlKVxuICAgKi9cbiAgQElucHV0KCkgY29sdW1uczogUGRtRGF0YVRhYmxlQ29sdW1uPFQ+W10gPSBbXTtcbiAgXG4gIC8qKlxuICAgKiBFc3RyYXRlZ2lhIHJlc3BvbnNpdmUgZGUgbGEgdGFibGFcbiAgICovXG4gIEBJbnB1dCgpIHJlc3BvbnNpdmVTdHJhdGVneTogVGFibGVSZXNwb25zaXZlU3RyYXRlZ3kgPSAnc2Nyb2xsJztcbiAgXG4gIC8qKlxuICAgKiBTaSBlcyB0cnVlLCBtdWVzdHJhIGNoZWNrYm94IGRlIHNlbGVjY2nDs24gZW4gY2FkYSBmaWxhXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogU2kgZXMgdHJ1ZSwgbXVlc3RyYSBib3TDs24gZGUgYWNjaW9uZXMgKHRyZXMgcHVudG9zKSBlbiBjYWRhIGZpbGFcbiAgICovXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25zID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogU2kgZXMgdHJ1ZSwgbXVlc3RyYSBmaWx0cm8gZGUgYsO6c3F1ZWRhXG4gICAqL1xuICBASW5wdXQoKSBzaG93RmlsdGVyID0gdHJ1ZTtcbiAgXG4gIC8qKlxuICAgKiBTaSBlcyB0cnVlLCBtdWVzdHJhIGNvbnRyb2xlcyBkZSBwYWdpbmFjacOzblxuICAgKi9cbiAgQElucHV0KCkgc2hvd1BhZ2luYXRpb24gPSB0cnVlO1xuICBcbiAgLyoqXG4gICAqIFNpIGVzIHRydWUsIG11ZXN0cmEgc2VsZWN0b3IgZGUgY29sdW1uYXNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dDb2x1bW5TZWxlY3RvciA9IGZhbHNlO1xuICBcbiAgLy8gTGFiZWxzIGkxOG5cbiAgQElucHV0KCkgZmlsdGVyUGxhY2Vob2xkZXIgPSAnRmlsdGVyLi4uJztcbiAgQElucHV0KCkgY29sdW1uc0xhYmVsID0gJ0NvbHVtbnMnO1xuICBASW5wdXQoKSBwcmV2aW91c0xhYmVsID0gJ1ByZXZpb3VzJztcbiAgQElucHV0KCkgbmV4dExhYmVsID0gJ05leHQnO1xuICBASW5wdXQoKSBlbXB0eUxhYmVsID0gJ05vIHJlc3VsdHMuJztcbiAgQElucHV0KCkgcm93c1NlbGVjdGVkTGFiZWwgPSAncm93KHMpIHNlbGVjdGVkJztcbiAgXG4gIC8vIERFUFJFQ0FURUQ6IExhYmVscyBoYXJkY29kZWFkb3MgcGFyYSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY29sdW1ucyBjb25maWd1cmF0aW9uIGluc3RlYWRcbiAgICovXG4gIEBJbnB1dCgpIHN0YXR1c0xhYmVsID0gJ1N0YXR1cyc7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY29sdW1ucyBjb25maWd1cmF0aW9uIGluc3RlYWRcbiAgICovXG4gIEBJbnB1dCgpIGVtYWlsTGFiZWwgPSAnRW1haWwnO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGNvbHVtbnMgY29uZmlndXJhdGlvbiBpbnN0ZWFkXG4gICAqL1xuICBASW5wdXQoKSBhbW91bnRMYWJlbCA9ICdBbW91bnQnO1xuICBcbiAgLyoqXG4gICAqIERhdG9zIGEgbW9zdHJhclxuICAgKi9cbiAgQElucHV0KCkgcm93czogVFtdID0gW107XG4gIFxuICAvKipcbiAgICogUMOhZ2luYSBhY3R1YWwgKDEtaW5kZXhlZClcbiAgICovXG4gIEBJbnB1dCgpIHBhZ2UgPSAxO1xuICBcbiAgLyoqXG4gICAqIENhbnRpZGFkIGRlIGZpbGFzIHBvciBww6FnaW5hXG4gICAqL1xuICBASW5wdXQoKSBwYWdlU2l6ZSA9IDEwO1xuICBcbiAgLyoqXG4gICAqIFF1ZXJ5IGRlIGZpbHRyYWRvXG4gICAqL1xuICBASW5wdXQoKSBxdWVyeSA9ICcnO1xuICBcbiAgLyoqXG4gICAqIEZ1bmNpw7NuIGN1c3RvbSBkZSBmaWx0cmFkb1xuICAgKiBTaSBubyBzZSBwcm92ZWUsIGJ1c2NhIGVuIHRvZG9zIGxvcyBjYW1wb3Mgc3RyaW5nXG4gICAqL1xuICBASW5wdXQoKSBmaWx0ZXJGbj86IChyb3c6IFQsIHF1ZXJ5OiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIHF1ZXJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByb3dBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcm93OiBUOyBzZWxlY3RlZDogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgY29sdW1uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IFBkbURhdGFUYWJsZUNvbHVtbjxUPjsgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB9PigpO1xuXG4gIC8vIEVzdGFkbyBpbnRlcm5vXG4gIHNlbGVjdGVkUm93cyA9IG5ldyBTZXQ8VD4oKTtcbiAgc29ydENvbHVtbj86IFBkbURhdGFUYWJsZUNvbHVtbjxUPjtcbiAgc29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcblxuICAvKipcbiAgICogQmFja3dhcmQgY29tcGF0aWJpbGl0eTogc2kgbm8gaGF5IGNvbHVtbmFzIGRlZmluaWRhcywgaW5mZXJpciBkZWwgcHJpbWVyIHJvd1xuICAgKi9cbiAgZ2V0IGVmZmVjdGl2ZUNvbHVtbnMoKTogUGRtRGF0YVRhYmxlQ29sdW1uPFQ+W10ge1xuICAgIGlmICh0aGlzLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgXG4gICAgLy8gTGVnYWN5IG1vZGU6IGluZmVyaXIgY29sdW1uYXMgZGVsIHByaW1lciByb3cgKHNvbG8gcGFyYSBQZG1EYXRhVGFibGVSb3cpXG4gICAgaWYgKHRoaXMucm93cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMucm93c1swXSBhcyBhbnk7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlyc3RSb3cpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ3NlbGVjdGVkJylcbiAgICAgICAgLm1hcChrZXkgPT4gKHtcbiAgICAgICAgICBrZXk6IGtleSBhcyBrZXlvZiBULFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExlZ2FjeUxhYmVsKGtleSksXG4gICAgICAgICAgYWxpZ246IGtleSA9PT0gJ2Ftb3VudCcgPyAncmlnaHQnIDogJ2xlZnQnXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIExFR0FDWTogbWFwZW8gZGUga2V5cyBhIGxhYmVscyBoYXJkY29kZWFkb3NcbiAgICovXG4gIHByaXZhdGUgZ2V0TGVnYWN5TGFiZWwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNMYWJlbCxcbiAgICAgIGVtYWlsOiB0aGlzLmVtYWlsTGFiZWwsXG4gICAgICBhbW91bnQ6IHRoaXMuYW1vdW50TGFiZWxcbiAgICB9O1xuICAgIHJldHVybiBtYXBba2V5XSB8fCBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRSb3dzKCk6IFRbXSB7XG4gICAgY29uc3QgcSA9IHRoaXMucXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFxKSByZXR1cm4gdGhpcy5yb3dzO1xuICAgIFxuICAgIGlmICh0aGlzLmZpbHRlckZuKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3dzLmZpbHRlcihyb3cgPT4gdGhpcy5maWx0ZXJGbiEocm93LCBxKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEZpbHRyYWRvIGRlZmF1bHQ6IGJ1c2NhciBlbiB0b2RvcyBsb3MgY2FtcG9zIHN0cmluZ1xuICAgIHJldHVybiB0aGlzLnJvd3MuZmlsdGVyKHJvdyA9PiB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyb3cgYXMgYW55KS5zb21lKHZhbCA9PiBcbiAgICAgICAgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcGFnZWRSb3dzKCk6IFRbXSB7XG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5wYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkUm93cy5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLnBhZ2VTaXplKTtcbiAgfVxuXG4gIGdldCB0b3RhbFBhZ2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDEsIE1hdGguY2VpbCh0aGlzLmZpbHRlcmVkUm93cy5sZW5ndGggLyB0aGlzLnBhZ2VTaXplKSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cy5zaXplO1xuICB9XG5cbiAgb25RdWVyeUlucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICB0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgb25Ub2dnbGVSb3cocm93OiBULCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAgIFxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5hZGQocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuZGVsZXRlKHJvdyk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoeyByb3csIHNlbGVjdGVkOiBjaGVja2VkIH0pO1xuICB9XG5cbiAgb25Ub2dnbGVBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgdGhpcy5wYWdlZFJvd3MuZm9yRWFjaChyb3cgPT4gdGhpcy5zZWxlY3RlZFJvd3MuYWRkKHJvdykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VkUm93cy5mb3JFYWNoKHJvdyA9PiB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUocm93KSk7XG4gICAgfVxuICB9XG5cbiAgaXNTZWxlY3RlZChyb3c6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKHJvdyk7XG4gIH1cblxuICBwcmV2aW91cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdlIDw9IDEpIHJldHVybjtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLnBhZ2UgLSAxKTtcbiAgfVxuXG4gIG5leHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnZSA+PSB0aGlzLnRvdGFsUGFnZXMpIHJldHVybjtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLnBhZ2UgKyAxKTtcbiAgfVxuXG4gIG9uQWN0aW9uKHJvdzogVCk6IHZvaWQge1xuICAgIHRoaXMucm93QWN0aW9uLmVtaXQocm93KTtcbiAgfVxuXG4gIG9uU29ydChjb2x1bW46IFBkbURhdGFUYWJsZUNvbHVtbjxUPik6IHZvaWQge1xuICAgIGlmICghY29sdW1uLnNvcnRhYmxlKSByZXR1cm47XG4gICAgXG4gICAgaWYgKHRoaXMuc29ydENvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc29ydENvbHVtbiA9IGNvbHVtbjtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmNvbHVtblNvcnQuZW1pdCh7IGNvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLnNvcnREaXJlY3Rpb24gfSk7XG4gIH1cblxuICBnZXRDZWxsVmFsdWUocm93OiBULCBjb2x1bW46IFBkbURhdGFUYWJsZUNvbHVtbjxUPik6IGFueSB7XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmtleV07XG4gICAgXG4gICAgaWYgKGNvbHVtbi5yZW5kZXIpIHtcbiAgICAgIHJldHVybiBjb2x1bW4ucmVuZGVyKHZhbHVlLCByb3cpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IFN0cmluZyh2YWx1ZSkgOiAnJztcbiAgfVxuXG4gIGdldENlbGxDbGFzcyhjb2x1bW46IFBkbURhdGFUYWJsZUNvbHVtbjxUPik6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFsncHgtMicsICdweS0yJ107XG4gICAgXG4gICAgaWYgKGNvbHVtbi5hbGlnbiA9PT0gJ2NlbnRlcicpIGNsYXNzZXMucHVzaCgndGV4dC1jZW50ZXInKTtcbiAgICBpZiAoY29sdW1uLmFsaWduID09PSAncmlnaHQnKSBjbGFzc2VzLnB1c2goJ3RleHQtcmlnaHQnKTtcbiAgICBpZiAoY29sdW1uLmhpZGVPbk1vYmlsZSkgY2xhc3Nlcy5wdXNoKCdoaWRkZW4nLCAnbWQ6dGFibGUtY2VsbCcpO1xuICAgIGlmIChjb2x1bW4uY2VsbENsYXNzKSBjbGFzc2VzLnB1c2goY29sdW1uLmNlbGxDbGFzcyk7XG4gICAgXG4gICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgZ2V0SGVhZGVyQ2xhc3MoY29sdW1uOiBQZG1EYXRhVGFibGVDb2x1bW48VD4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbJ3B4LTInLCAncHktMicsICd0ZXh0LWxlZnQnLCAnZm9udC1tZWRpdW0nXTtcbiAgICBcbiAgICBpZiAoY29sdW1uLmhpZGVPbk1vYmlsZSkgY2xhc3Nlcy5wdXNoKCdoaWRkZW4nLCAnbWQ6dGFibGUtY2VsbCcpO1xuICAgIGlmIChjb2x1bW4uaGVhZGVyQ2xhc3MpIGNsYXNzZXMucHVzaChjb2x1bW4uaGVhZGVyQ2xhc3MpO1xuICAgIFxuICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldENvbHVtblN0eWxlKGNvbHVtbjogUGRtRGF0YVRhYmxlQ29sdW1uPFQ+KTogYW55IHtcbiAgICByZXR1cm4gY29sdW1uLndpZHRoID8geyB3aWR0aDogY29sdW1uLndpZHRoIH0gOiB7fTtcbiAgfVxufVxuIiwiPHNlY3Rpb24gW25nQ2xhc3NdPVwiWydmbGV4IHctZnVsbCBmbGV4LWNvbCcsIGNsYXNzTmFtZV1cIj5cbiAgPCEtLSBUb29sYmFyOiBGaWx0cm8gKyBTZWxlY3RvciBkZSBjb2x1bW5hcyAtLT5cbiAgPGRpdiAqbmdJZj1cInNob3dGaWx0ZXIgfHwgc2hvd0NvbHVtblNlbGVjdG9yXCIgY2xhc3M9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB5LTRcIj5cbiAgICA8aW5wdXRcbiAgICAgICpuZ0lmPVwic2hvd0ZpbHRlclwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyUGxhY2Vob2xkZXJcIlxuICAgICAgW3ZhbHVlXT1cInF1ZXJ5XCJcbiAgICAgIChpbnB1dCk9XCJvblF1ZXJ5SW5wdXQoJGV2ZW50KVwiXG4gICAgICBjbGFzcz1cImgtOSBmbGV4LTEgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LXNtIHRleHQtZm9yZWdyb3VuZCBzaGFkb3ctc20gcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC1iYWNrZ3JvdW5kXCJcbiAgICAvPlxuXG4gICAgPGJ1dHRvbiBcbiAgICAgICpuZ0lmPVwic2hvd0NvbHVtblNlbGVjdG9yXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC05IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgPHNwYW4+e3sgY29sdW1uc0xhYmVsIH19PC9zcGFuPlxuICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00IHRleHQtZm9yZWdyb3VuZFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aCBkPVwiTTcgMTBMMTIgMTVMMTcgMTBcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICA8L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUYWJsYSBjb24gcmVzcG9uc2l2ZSAtLT5cbiAgPHBkbS10YWJsZSBcbiAgICB2YXJpYW50PVwiZGF0YVwiXG4gICAgW3Jlc3BvbnNpdmVTdHJhdGVneV09XCJyZXNwb25zaXZlU3RyYXRlZ3lcIlxuICAgIFtmdWxsQmxlZWRdPVwiZmFsc2VcIj5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgIDwhLS0gQ29sdW1uYSBkZSBzZWxlY2Npw7NuIC0tPlxuICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3RhYmxlXCIgY2xhc3M9XCJ3LTEwIHB4LTIgcHktMiB0ZXh0LWxlZnQgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVBbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImgtNCB3LTQgcm91bmRlZC1zbSBib3JkZXIgYm9yZGVyLWlucHV0XCIgXG4gICAgICAgICAgLz5cbiAgICAgICAgPC90aD5cblxuICAgICAgICA8IS0tIENvbHVtbmFzIGRpbsOhbWljYXMgLS0+XG4gICAgICAgIDx0aCBcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGVmZmVjdGl2ZUNvbHVtbnNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEhlYWRlckNsYXNzKGNvbHVtbilcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldENvbHVtblN0eWxlKGNvbHVtbilcIj5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIEhlYWRlciBzb3J0YWJsZSAtLT5cbiAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU29ydChjb2x1bW4pXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBnYXAtMSByb3VuZGVkLXNtIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIGhvdmVyOnVuZGVybGluZVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgY29sdW1uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCA2TDQgMTBMOCAxNE0xNiAxOEwyMCAxNEwxNiAxMFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPCEtLSBIZWFkZXIgbm8gc29ydGFibGUgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sdW1uLnNvcnRhYmxlXCI+e3sgY29sdW1uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L3RoPlxuXG4gICAgICAgIDwhLS0gQ29sdW1uYSBkZSBhY2Npb25lcyAtLT5cbiAgICAgICAgPHRoICpuZ0lmPVwic2hvd0FjdGlvbnNcIiBjbGFzcz1cInctMTAgcHgtMiBweS0yXCI+PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cblxuICAgIDx0Ym9keT5cbiAgICAgIDwhLS0gRmlsYXMgY29uIGRhdG9zIC0tPlxuICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgcGFnZWRSb3dzXCI+XG4gICAgICAgIDwhLS0gQ2VsZGEgZGUgc2VsZWNjacOzbiAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0YWJsZVwiIGNsYXNzPVwicHgtMiBweS0yXCI+XG4gICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKHJvdylcIiBcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVSb3cocm93LCAkZXZlbnQpXCIgXG4gICAgICAgICAgICBjbGFzcz1cImgtNCB3LTQgcm91bmRlZC1zbSBib3JkZXIgYm9yZGVyLWlucHV0XCIgXG4gICAgICAgICAgLz5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIENlbGRhcyBkaW7DoW1pY2FzIC0tPlxuICAgICAgICA8dGQgXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBlZmZlY3RpdmVDb2x1bW5zXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gVGVtcGxhdGUgcGVyc29uYWxpemFkbyBzaSBleGlzdGUgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5jZWxsVGVtcGxhdGU7IGVsc2UgZGVmYXVsdENlbGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uLmNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdywgdmFsdWU6IHJvd1tjb2x1bW4ua2V5XSB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0gUmVuZGVyaXphZG8gZGVmYXVsdCAtLT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsPlxuICAgICAgICAgICAge3sgZ2V0Q2VsbFZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPCEtLSBDZWxkYSBkZSBhY2Npb25lcyAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwic2hvd0FjdGlvbnNcIiBjbGFzcz1cInB4LTIgcHktMlwiPlxuICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGgtOCB3LTggYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItMCBiZy10cmFuc3BhcmVudCBwLTAgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kXCIgXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb24ocm93KVwiPlxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI2XCIgY3k9XCIxMlwiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvY2lyY2xlPlxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMThcIiBjeT1cIjEyXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L2NpcmNsZT5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cblxuICAgICAgPCEtLSBGaWxhIHZhY8OtYSAtLT5cbiAgICAgIDx0ciAqbmdJZj1cInBhZ2VkUm93cy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgPHRkIFxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiZWZmZWN0aXZlQ29sdW1ucy5sZW5ndGggKyAoc2VsZWN0YWJsZSA/IDEgOiAwKSArIChzaG93QWN0aW9ucyA/IDEgOiAwKVwiIFxuICAgICAgICAgIGNsYXNzPVwicHgtMyBweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAge3sgZW1wdHlMYWJlbCB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L3BkbS10YWJsZT5cblxuICA8IS0tIEZvb3RlcjogSW5mbyArIFBhZ2luYWNpw7NuIC0tPlxuICA8ZGl2ICpuZ0lmPVwic2hvd1BhZ2luYXRpb24gfHwgc2VsZWN0YWJsZVwiIGNsYXNzPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0yIHB5LTQgZmxleC13cmFwIHNtOmZsZXgtbm93cmFwXCI+XG4gICAgPHAgKm5nSWY9XCJzZWxlY3RhYmxlXCIgY2xhc3M9XCJtLTAgZmxleC0xIHByLTIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgIHt7IHNlbGVjdGVkQ291bnQgfX0gb2Yge3sgcm93cy5sZW5ndGggfX0ge3sgcm93c1NlbGVjdGVkTGFiZWwgfX1cbiAgICA8L3A+XG5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1BhZ2luYXRpb25cIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG1sLWF1dG9cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgUGFnZSB7eyBwYWdlIH19IG9mIHt7IHRvdGFsUGFnZXMgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxidXR0b24gXG4gICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgY2xhc3M9XCJoLTkgYXBwZWFyYW5jZS1ub25lIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHB4LTQgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkXCIgXG4gICAgICAgIFtkaXNhYmxlZF09XCJwYWdlIDw9IDFcIiBcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzKClcIj5cbiAgICAgICAge3sgcHJldmlvdXNMYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgIGNsYXNzPVwiaC05IGFwcGVhcmFuY2Utbm9uZSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC00IHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiIFxuICAgICAgICBbZGlzYWJsZWRdPVwicGFnZSA+PSB0b3RhbFBhZ2VzXCIgXG4gICAgICAgIChjbGljayk9XCJuZXh0KClcIj5cbiAgICAgICAge3sgbmV4dExhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
|
|
299
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQzs7OztBQTJFN0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQU1ILE1BQU0sT0FBTyxxQkFBcUI7SUFMbEM7UUFNVyxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXhCOzs7V0FHRztRQUNNLFlBQU8sR0FBNEIsRUFBRSxDQUFDO1FBRS9DOztXQUVHO1FBQ00sdUJBQWtCLEdBQTRCLFFBQVEsQ0FBQztRQUVoRTs7V0FFRztRQUNNLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFNUI7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUU3Qjs7V0FFRztRQUNNLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFM0I7O1dBRUc7UUFDTSxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUUvQjs7V0FFRztRQUNNLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUVwQyxjQUFjO1FBQ0wsc0JBQWlCLEdBQUcsV0FBVyxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsVUFBVSxDQUFDO1FBQzNCLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDbkIsZUFBVSxHQUFHLGFBQWEsQ0FBQztRQUMzQixzQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUUvQyw4REFBOEQ7UUFDOUQ7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLFFBQVEsQ0FBQztRQUNoQzs7V0FFRztRQUNNLGVBQVUsR0FBRyxPQUFPLENBQUM7UUFDOUI7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLFFBQVEsQ0FBQztRQUVoQzs7V0FFRztRQUNNLFNBQUksR0FBUSxFQUFFLENBQUM7UUFFeEI7O1dBRUc7UUFDTSxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRWxCOztXQUVHO1FBQ00sYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUV2Qjs7V0FFRztRQUNNLFVBQUssR0FBRyxFQUFFLENBQUM7UUFRVixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDekMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7UUFDbEMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBaUMsQ0FBQztRQUNwRSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWdFLENBQUM7UUFFeEcsaUJBQWlCO1FBQ2pCLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQUssQ0FBQztRQUU1QixrQkFBYSxHQUFtQixLQUFLLENBQUM7S0E2SnZDO0lBM0pDOztPQUVHO0lBQ0gsSUFBSSxnQkFBZ0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3JCO1FBRUQsMkVBQTJFO1FBQzNFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFRLENBQUM7WUFDckMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztpQkFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQztpQkFDakMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDWCxHQUFHLEVBQUUsR0FBYztnQkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUMvQixLQUFLLEVBQUUsR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNO2FBQzNDLENBQUMsQ0FBQyxDQUFDO1NBQ1A7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWMsQ0FBQyxHQUFXO1FBQ2hDLE1BQU0sR0FBRyxHQUEyQjtZQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVztTQUN6QixDQUFDO1FBQ0YsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRXpCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUVELHNEQUFzRDtRQUN0RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDMUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQ3pELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLE1BQU0sS0FBSyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQU0sRUFBRSxLQUFZO1FBQzlCLE1BQU0sT0FBTyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLE9BQU8sQ0FBQztRQUUzRCxJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQjtRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxXQUFXLENBQUMsS0FBWTtRQUN0QixNQUFNLE9BQU8sR0FBSSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxPQUFPLENBQUM7UUFFM0QsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDM0Q7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsR0FBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztZQUFFLE9BQU87UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQU07UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQTZCO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNwRTthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFNLEVBQUUsTUFBNkI7UUFDaEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDakIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNsQztRQUVELE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUE2QjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVqQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUTtZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0QsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLE9BQU87WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELElBQUksTUFBTSxDQUFDLFlBQVk7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNqRSxJQUFJLE1BQU0sQ0FBQyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBNkI7UUFDMUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUU3RCxJQUFJLE1BQU0sQ0FBQyxZQUFZO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDakUsSUFBSSxNQUFNLENBQUMsV0FBVztZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXpELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQTZCO1FBQzFDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckQsQ0FBQzs7a0hBNVBVLHFCQUFxQjtzR0FBckIscUJBQXFCLHV6QkN0R2xDLHdoT0F5TUE7MkZEbkdhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBRVQsdUJBQXVCLENBQUMsTUFBTTs4QkFHdEMsU0FBUztzQkFBakIsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVSZXNwb25zaXZlU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi91dGlscy9yZXNwb25zaXZlJztcblxuLyoqXG4gKiBERVBSRUNBVEVEOiBFc3RhIGludGVyZmF6IGVzIHBhcmEgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICogVXNhciBQZG1EYXRhVGFibGVDb2x1bW48VD4gY29uIHRpcG8gZ2Vuw6lyaWNvIGVuIHN1IGx1Z2FyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGRtRGF0YVRhYmxlUm93IHtcbiAgaWQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICBzZWxlY3RlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGVmaW5pY2nDs24gZGUgY29sdW1uYSBwYXJhIGRhdGEtdGFibGUgZ2Vuw6lyaWNvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGRtRGF0YVRhYmxlQ29sdW1uPFQgPSBhbnk+IHtcbiAgLyoqXG4gICAqIEtleSBkZWwgY2FtcG8gZW4gZWwgb2JqZXRvIGRlIGRhdG9zXG4gICAqIFVzYWRvIHBhcmEgYWNjZWRlciBhbCB2YWxvcjogcm93W2tleV1cbiAgICovXG4gIGtleToga2V5b2YgVDtcbiAgXG4gIC8qKlxuICAgKiBMYWJlbCBhIG1vc3RyYXIgZW4gZWwgaGVhZGVyXG4gICAqL1xuICBsYWJlbDogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIEFuY2hvIGRlIGxhIGNvbHVtbmEgKENTUyB3aWR0aClcbiAgICogRWo6ICcxMDBweCcsICcyMCUnLCAnYXV0bydcbiAgICovXG4gIHdpZHRoPzogc3RyaW5nO1xuICBcbiAgLyoqXG4gICAqIFNpIGxhIGNvbHVtbmEgZXMgc29ydGFibGVcbiAgICovXG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgXG4gIC8qKlxuICAgKiBBbGluZWFjacOzbiBkZWwgY29udGVuaWRvXG4gICAqL1xuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcbiAgXG4gIC8qKlxuICAgKiBGdW5jacOzbiBjdXN0b20gcGFyYSByZW5kZXJpemFyIGVsIHZhbG9yXG4gICAqIFNpIG5vIHNlIHByb3ZlZSwgc2UgdXNhIHRvU3RyaW5nKCkgZGVsIHZhbG9yXG4gICAqL1xuICByZW5kZXI/OiAodmFsdWU6IGFueSwgcm93OiBUKSA9PiBzdHJpbmc7XG4gIFxuICAvKipcbiAgICogVGVtcGxhdGUgcGVyc29uYWxpemFkbyBwYXJhIGxhIGNlbGRhXG4gICAqIFRpZW5lIHByaW9yaWRhZCBzb2JyZSByZW5kZXIoKVxuICAgKi9cbiAgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IFQ7IHZhbHVlOiBhbnkgfT47XG4gIFxuICAvKipcbiAgICogU2kgZXMgdHJ1ZSwgbGEgY29sdW1uYSBzZSBvY3VsdGEgZW4gbW9iaWxlXG4gICAqIFNvbG8gc2UgbXVlc3RyYSBlbiBicmVha3BvaW50IG1kKyAoNzY4cHgpXG4gICAqL1xuICBoaWRlT25Nb2JpbGU/OiBib29sZWFuO1xuICBcbiAgLyoqXG4gICAqIENTUyBjbGFzc2VzIGFkaWNpb25hbGVzIHBhcmEgbGFzIGNlbGRhcyBkZSBlc3RhIGNvbHVtbmFcbiAgICovXG4gIGNlbGxDbGFzcz86IHN0cmluZztcbiAgXG4gIC8qKlxuICAgKiBDU1MgY2xhc3NlcyBhZGljaW9uYWxlcyBwYXJhIGVsIGhlYWRlciBkZSBlc3RhIGNvbHVtbmFcbiAgICovXG4gIGhlYWRlckNsYXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERhdGEtdGFibGUgZ2Vuw6lyaWNvIGNvbiBwYWdpbmFjacOzbiwgZmlsdHJhZG8geSBzZWxlY2Npw7NuXG4gKiBcbiAqIE5VRVZPOiBBaG9yYSBlcyBnZW7DqXJpY28geSBjb25maWd1cmFibGUgdmlhIGNvbHVtbmFzXG4gKiBcbiAqIEBleGFtcGxlXG4gKiAvLyBEZWZpbmlyIGNvbHVtbmFzXG4gKiBjb2x1bW5zOiBQZG1EYXRhVGFibGVDb2x1bW48VXNlcj5bXSA9IFtcbiAqICAgeyBrZXk6ICduYW1lJywgbGFiZWw6ICdOYW1lJywgc29ydGFibGU6IHRydWUgfSxcbiAqICAgeyBrZXk6ICdlbWFpbCcsIGxhYmVsOiAnRW1haWwnLCBzb3J0YWJsZTogdHJ1ZSB9LFxuICogICB7IGtleTogJ3JvbGUnLCBsYWJlbDogJ1JvbGUnLCBoaWRlT25Nb2JpbGU6IHRydWUgfSxcbiAqICAgeyBrZXk6ICdjcmVhdGVkQXQnLCBsYWJlbDogJ0NyZWF0ZWQnLCByZW5kZXI6ICh2YWwpID0+IGZvcm1hdERhdGUodmFsKSB9XG4gKiBdO1xuICogXG4gKiAvLyBFbiBlbCB0ZW1wbGF0ZVxuICogPHBkbS1kYXRhLXRhYmxlXG4gKiAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICogICBbcm93c109XCJ1c2Vyc1wiXG4gKiAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICogICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0KCRldmVudClcIj5cbiAqIDwvcGRtLWRhdGEtdGFibGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1kYXRhLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQZG1EYXRhVGFibGVDb21wb25lbnQ8VCA9IGFueT4ge1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgXG4gIC8qKlxuICAgKiBDb2x1bW5hcyBhIG1vc3RyYXJcbiAgICogU2kgbm8gc2UgcHJvdmVlLCBpbnRlbnRhIGluZmVyaXIgZGVsIHByaW1lciByb3cgKGxlZ2FjeSBtb2RlKVxuICAgKi9cbiAgQElucHV0KCkgY29sdW1uczogUGRtRGF0YVRhYmxlQ29sdW1uPFQ+W10gPSBbXTtcbiAgXG4gIC8qKlxuICAgKiBFc3RyYXRlZ2lhIHJlc3BvbnNpdmUgZGUgbGEgdGFibGFcbiAgICovXG4gIEBJbnB1dCgpIHJlc3BvbnNpdmVTdHJhdGVneTogVGFibGVSZXNwb25zaXZlU3RyYXRlZ3kgPSAnc2Nyb2xsJztcbiAgXG4gIC8qKlxuICAgKiBTaSBlcyB0cnVlLCBtdWVzdHJhIGNoZWNrYm94IGRlIHNlbGVjY2nDs24gZW4gY2FkYSBmaWxhXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogU2kgZXMgdHJ1ZSwgbXVlc3RyYSBib3TDs24gZGUgYWNjaW9uZXMgKHRyZXMgcHVudG9zKSBlbiBjYWRhIGZpbGFcbiAgICovXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25zID0gZmFsc2U7XG4gIFxuICAvKipcbiAgICogU2kgZXMgdHJ1ZSwgbXVlc3RyYSBmaWx0cm8gZGUgYsO6c3F1ZWRhXG4gICAqL1xuICBASW5wdXQoKSBzaG93RmlsdGVyID0gdHJ1ZTtcbiAgXG4gIC8qKlxuICAgKiBTaSBlcyB0cnVlLCBtdWVzdHJhIGNvbnRyb2xlcyBkZSBwYWdpbmFjacOzblxuICAgKi9cbiAgQElucHV0KCkgc2hvd1BhZ2luYXRpb24gPSB0cnVlO1xuICBcbiAgLyoqXG4gICAqIFNpIGVzIHRydWUsIG11ZXN0cmEgc2VsZWN0b3IgZGUgY29sdW1uYXNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dDb2x1bW5TZWxlY3RvciA9IGZhbHNlO1xuICBcbiAgLy8gTGFiZWxzIGkxOG5cbiAgQElucHV0KCkgZmlsdGVyUGxhY2Vob2xkZXIgPSAnRmlsdGVyLi4uJztcbiAgQElucHV0KCkgY29sdW1uc0xhYmVsID0gJ0NvbHVtbnMnO1xuICBASW5wdXQoKSBwcmV2aW91c0xhYmVsID0gJ1ByZXZpb3VzJztcbiAgQElucHV0KCkgbmV4dExhYmVsID0gJ05leHQnO1xuICBASW5wdXQoKSBlbXB0eUxhYmVsID0gJ05vIHJlc3VsdHMuJztcbiAgQElucHV0KCkgcm93c1NlbGVjdGVkTGFiZWwgPSAncm93KHMpIHNlbGVjdGVkJztcbiAgXG4gIC8vIERFUFJFQ0FURUQ6IExhYmVscyBoYXJkY29kZWFkb3MgcGFyYSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY29sdW1ucyBjb25maWd1cmF0aW9uIGluc3RlYWRcbiAgICovXG4gIEBJbnB1dCgpIHN0YXR1c0xhYmVsID0gJ1N0YXR1cyc7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY29sdW1ucyBjb25maWd1cmF0aW9uIGluc3RlYWRcbiAgICovXG4gIEBJbnB1dCgpIGVtYWlsTGFiZWwgPSAnRW1haWwnO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGNvbHVtbnMgY29uZmlndXJhdGlvbiBpbnN0ZWFkXG4gICAqL1xuICBASW5wdXQoKSBhbW91bnRMYWJlbCA9ICdBbW91bnQnO1xuICBcbiAgLyoqXG4gICAqIERhdG9zIGEgbW9zdHJhclxuICAgKi9cbiAgQElucHV0KCkgcm93czogVFtdID0gW107XG4gIFxuICAvKipcbiAgICogUMOhZ2luYSBhY3R1YWwgKDEtaW5kZXhlZClcbiAgICovXG4gIEBJbnB1dCgpIHBhZ2UgPSAxO1xuICBcbiAgLyoqXG4gICAqIENhbnRpZGFkIGRlIGZpbGFzIHBvciBww6FnaW5hXG4gICAqL1xuICBASW5wdXQoKSBwYWdlU2l6ZSA9IDEwO1xuICBcbiAgLyoqXG4gICAqIFF1ZXJ5IGRlIGZpbHRyYWRvXG4gICAqL1xuICBASW5wdXQoKSBxdWVyeSA9ICcnO1xuICBcbiAgLyoqXG4gICAqIEZ1bmNpw7NuIGN1c3RvbSBkZSBmaWx0cmFkb1xuICAgKiBTaSBubyBzZSBwcm92ZWUsIGJ1c2NhIGVuIHRvZG9zIGxvcyBjYW1wb3Mgc3RyaW5nXG4gICAqL1xuICBASW5wdXQoKSBmaWx0ZXJGbj86IChyb3c6IFQsIHF1ZXJ5OiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpIHF1ZXJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByb3dBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcm93OiBUOyBzZWxlY3RlZDogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgY29sdW1uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IFBkbURhdGFUYWJsZUNvbHVtbjxUPjsgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB9PigpO1xuXG4gIC8vIEVzdGFkbyBpbnRlcm5vXG4gIHNlbGVjdGVkUm93cyA9IG5ldyBTZXQ8VD4oKTtcbiAgc29ydENvbHVtbj86IFBkbURhdGFUYWJsZUNvbHVtbjxUPjtcbiAgc29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcblxuICAvKipcbiAgICogQmFja3dhcmQgY29tcGF0aWJpbGl0eTogc2kgbm8gaGF5IGNvbHVtbmFzIGRlZmluaWRhcywgaW5mZXJpciBkZWwgcHJpbWVyIHJvd1xuICAgKi9cbiAgZ2V0IGVmZmVjdGl2ZUNvbHVtbnMoKTogUGRtRGF0YVRhYmxlQ29sdW1uPFQ+W10ge1xuICAgIGlmICh0aGlzLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgXG4gICAgLy8gTGVnYWN5IG1vZGU6IGluZmVyaXIgY29sdW1uYXMgZGVsIHByaW1lciByb3cgKHNvbG8gcGFyYSBQZG1EYXRhVGFibGVSb3cpXG4gICAgaWYgKHRoaXMucm93cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdFJvdyA9IHRoaXMucm93c1swXSBhcyBhbnk7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlyc3RSb3cpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ3NlbGVjdGVkJylcbiAgICAgICAgLm1hcChrZXkgPT4gKHtcbiAgICAgICAgICBrZXk6IGtleSBhcyBrZXlvZiBULFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExlZ2FjeUxhYmVsKGtleSksXG4gICAgICAgICAgYWxpZ246IGtleSA9PT0gJ2Ftb3VudCcgPyAncmlnaHQnIDogJ2xlZnQnXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIExFR0FDWTogbWFwZW8gZGUga2V5cyBhIGxhYmVscyBoYXJkY29kZWFkb3NcbiAgICovXG4gIHByaXZhdGUgZ2V0TGVnYWN5TGFiZWwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNMYWJlbCxcbiAgICAgIGVtYWlsOiB0aGlzLmVtYWlsTGFiZWwsXG4gICAgICBhbW91bnQ6IHRoaXMuYW1vdW50TGFiZWxcbiAgICB9O1xuICAgIHJldHVybiBtYXBba2V5XSB8fCBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRSb3dzKCk6IFRbXSB7XG4gICAgY29uc3QgcSA9IHRoaXMucXVlcnkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFxKSByZXR1cm4gdGhpcy5yb3dzO1xuICAgIFxuICAgIGlmICh0aGlzLmZpbHRlckZuKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3dzLmZpbHRlcihyb3cgPT4gdGhpcy5maWx0ZXJGbiEocm93LCBxKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEZpbHRyYWRvIGRlZmF1bHQ6IGJ1c2NhciBlbiB0b2RvcyBsb3MgY2FtcG9zIHN0cmluZ1xuICAgIHJldHVybiB0aGlzLnJvd3MuZmlsdGVyKHJvdyA9PiB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyb3cgYXMgYW55KS5zb21lKHZhbCA9PiBcbiAgICAgICAgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcGFnZWRSb3dzKCk6IFRbXSB7XG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5wYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplO1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkUm93cy5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLnBhZ2VTaXplKTtcbiAgfVxuXG4gIGdldCB0b3RhbFBhZ2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDEsIE1hdGguY2VpbCh0aGlzLmZpbHRlcmVkUm93cy5sZW5ndGggLyB0aGlzLnBhZ2VTaXplKSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cy5zaXplO1xuICB9XG5cbiAgb25RdWVyeUlucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICB0aGlzLnF1ZXJ5Q2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgb25Ub2dnbGVSb3cocm93OiBULCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAgIFxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5hZGQocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuZGVsZXRlKHJvdyk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoeyByb3csIHNlbGVjdGVkOiBjaGVja2VkIH0pO1xuICB9XG5cbiAgb25Ub2dnbGVBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgdGhpcy5wYWdlZFJvd3MuZm9yRWFjaChyb3cgPT4gdGhpcy5zZWxlY3RlZFJvd3MuYWRkKHJvdykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VkUm93cy5mb3JFYWNoKHJvdyA9PiB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUocm93KSk7XG4gICAgfVxuICB9XG5cbiAgaXNTZWxlY3RlZChyb3c6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKHJvdyk7XG4gIH1cblxuICBwcmV2aW91cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdlIDw9IDEpIHJldHVybjtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLnBhZ2UgLSAxKTtcbiAgfVxuXG4gIG5leHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnZSA+PSB0aGlzLnRvdGFsUGFnZXMpIHJldHVybjtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLnBhZ2UgKyAxKTtcbiAgfVxuXG4gIG9uQWN0aW9uKHJvdzogVCk6IHZvaWQge1xuICAgIHRoaXMucm93QWN0aW9uLmVtaXQocm93KTtcbiAgfVxuXG4gIG9uU29ydChjb2x1bW46IFBkbURhdGFUYWJsZUNvbHVtbjxUPik6IHZvaWQge1xuICAgIGlmICghY29sdW1uLnNvcnRhYmxlKSByZXR1cm47XG4gICAgXG4gICAgaWYgKHRoaXMuc29ydENvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc29ydENvbHVtbiA9IGNvbHVtbjtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmNvbHVtblNvcnQuZW1pdCh7IGNvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLnNvcnREaXJlY3Rpb24gfSk7XG4gIH1cblxuICBnZXRDZWxsVmFsdWUocm93OiBULCBjb2x1bW46IFBkbURhdGFUYWJsZUNvbHVtbjxUPik6IGFueSB7XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmtleV07XG4gICAgXG4gICAgaWYgKGNvbHVtbi5yZW5kZXIpIHtcbiAgICAgIHJldHVybiBjb2x1bW4ucmVuZGVyKHZhbHVlLCByb3cpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IFN0cmluZyh2YWx1ZSkgOiAnJztcbiAgfVxuXG4gIGdldENlbGxDbGFzcyhjb2x1bW46IFBkbURhdGFUYWJsZUNvbHVtbjxUPik6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFsncHgtMicsICdweS0yJ107XG4gICAgXG4gICAgaWYgKGNvbHVtbi5hbGlnbiA9PT0gJ2NlbnRlcicpIGNsYXNzZXMucHVzaCgndGV4dC1jZW50ZXInKTtcbiAgICBpZiAoY29sdW1uLmFsaWduID09PSAncmlnaHQnKSBjbGFzc2VzLnB1c2goJ3RleHQtcmlnaHQnKTtcbiAgICBpZiAoY29sdW1uLmhpZGVPbk1vYmlsZSkgY2xhc3Nlcy5wdXNoKCdoaWRkZW4nLCAnbWQ6dGFibGUtY2VsbCcpO1xuICAgIGlmIChjb2x1bW4uY2VsbENsYXNzKSBjbGFzc2VzLnB1c2goY29sdW1uLmNlbGxDbGFzcyk7XG4gICAgXG4gICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgZ2V0SGVhZGVyQ2xhc3MoY29sdW1uOiBQZG1EYXRhVGFibGVDb2x1bW48VD4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXMgPSBbJ3B4LTInLCAncHktMicsICd0ZXh0LWxlZnQnLCAnZm9udC1tZWRpdW0nXTtcbiAgICBcbiAgICBpZiAoY29sdW1uLmhpZGVPbk1vYmlsZSkgY2xhc3Nlcy5wdXNoKCdoaWRkZW4nLCAnbWQ6dGFibGUtY2VsbCcpO1xuICAgIGlmIChjb2x1bW4uaGVhZGVyQ2xhc3MpIGNsYXNzZXMucHVzaChjb2x1bW4uaGVhZGVyQ2xhc3MpO1xuICAgIFxuICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldENvbHVtblN0eWxlKGNvbHVtbjogUGRtRGF0YVRhYmxlQ29sdW1uPFQ+KTogYW55IHtcbiAgICByZXR1cm4gY29sdW1uLndpZHRoID8geyB3aWR0aDogY29sdW1uLndpZHRoIH0gOiB7fTtcbiAgfVxufVxuIiwiPHNlY3Rpb24gW25nQ2xhc3NdPVwiWydmbGV4IHctZnVsbCBmbGV4LWNvbCcsIGNsYXNzTmFtZV1cIj5cbiAgPCEtLSBUb29sYmFyOiBGaWx0cm8gKyBTZWxlY3RvciBkZSBjb2x1bW5hcyAtLT5cbiAgPGRpdlxuICAgICpuZ0lmPVwic2hvd0ZpbHRlciB8fCBzaG93Q29sdW1uU2VsZWN0b3JcIlxuICAgIGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTIgcHktNCBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXJcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICAqbmdJZj1cInNob3dGaWx0ZXJcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cImZpbHRlclBsYWNlaG9sZGVyXCJcbiAgICAgIFt2YWx1ZV09XCJxdWVyeVwiXG4gICAgICAoaW5wdXQpPVwib25RdWVyeUlucHV0KCRldmVudClcIlxuICAgICAgY2xhc3M9XCJoLTkgZmxleC0xIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy10cmFuc3BhcmVudCBweC0zIHB5LTEgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtYmFja2dyb3VuZFwiXG4gICAgLz5cblxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwic2hvd0NvbHVtblNlbGVjdG9yXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTkgYXBwZWFyYW5jZS1ub25lIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICA+XG4gICAgICA8c3Bhbj57eyBjb2x1bW5zTGFiZWwgfX08L3NwYW4+XG4gICAgICA8c3ZnXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICBjbGFzcz1cImgtNCB3LTQgdGV4dC1mb3JlZ3JvdW5kXCJcbiAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgID5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTcgMTBMMTIgMTVMMTcgMTBcIlxuICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgID48L3BhdGg+XG4gICAgICA8L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUYWJsYSBjb24gcmVzcG9uc2l2ZSAtLT5cbiAgPHBkbS10YWJsZVxuICAgIHZhcmlhbnQ9XCJkYXRhXCJcbiAgICBbcmVzcG9uc2l2ZVN0cmF0ZWd5XT1cInJlc3BvbnNpdmVTdHJhdGVneVwiXG4gICAgW2Z1bGxCbGVlZF09XCJmYWxzZVwiXG4gID5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgIDwhLS0gQ29sdW1uYSBkZSBzZWxlY2Npw7NuIC0tPlxuICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3RhYmxlXCIgY2xhc3M9XCJ3LTEwIHB4LTIgcHktMiB0ZXh0LWxlZnQgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlQWxsKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJoLTQgdy00IHJvdW5kZWQtc20gYm9yZGVyIGJvcmRlci1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC90aD5cblxuICAgICAgICA8IS0tIENvbHVtbmFzIGRpbsOhbWljYXMgLS0+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZWZmZWN0aXZlQ29sdW1uc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SGVhZGVyQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sdW1uU3R5bGUoY29sdW1uKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIEhlYWRlciBzb3J0YWJsZSAtLT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblNvcnQoY29sdW1uKVwiXG4gICAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZC1zbSBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0zIHB5LTIgdGV4dC1zbSBob3Zlcjp1bmRlcmxpbmVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbHVtbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNFwiXG4gICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk04IDZMNCAxMEw4IDE0TTE2IDE4TDIwIDE0TDE2IDEwXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tIEhlYWRlciBubyBzb3J0YWJsZSAtLT5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2x1bW4uc29ydGFibGVcIj57eyBjb2x1bW4ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvdGg+XG5cbiAgICAgICAgPCEtLSBDb2x1bW5hIGRlIGFjY2lvbmVzIC0tPlxuICAgICAgICA8dGggKm5nSWY9XCJzaG93QWN0aW9uc1wiIGNsYXNzPVwidy0xMCBweC0yIHB5LTJcIj48L3RoPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuXG4gICAgPHRib2R5PlxuICAgICAgPCEtLSBGaWxhcyBjb24gZGF0b3MgLS0+XG4gICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBwYWdlZFJvd3NcIj5cbiAgICAgICAgPCEtLSBDZWxkYSBkZSBzZWxlY2Npw7NuIC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCJzZWxlY3RhYmxlXCIgY2xhc3M9XCJweC0yIHB5LTJcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZVJvdyhyb3csICRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJoLTQgdy00IHJvdW5kZWQtc20gYm9yZGVyIGJvcmRlci1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIENlbGRhcyBkaW7DoW1pY2FzIC0tPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGVmZmVjdGl2ZUNvbHVtbnNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gVGVtcGxhdGUgcGVyc29uYWxpemFkbyBzaSBleGlzdGUgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5jZWxsVGVtcGxhdGU7IGVsc2UgZGVmYXVsdENlbGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBjb2x1bW4uY2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3csIHZhbHVlOiByb3dbY29sdW1uLmtleV0gfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIFJlbmRlcml6YWRvIGRlZmF1bHQgLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbD5cbiAgICAgICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gQ2VsZGEgZGUgYWNjaW9uZXMgLS0+XG4gICAgICAgIDx0ZCAqbmdJZj1cInNob3dBY3Rpb25zXCIgY2xhc3M9XCJweC0yIHB5LTJcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggaC04IHctOCBhcHBlYXJhbmNlLW5vbmUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHAtMCBob3Zlcjp0ZXh0LWZvcmVncm91bmRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uKHJvdylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaC00IHctNFwiXG4gICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI2XCIgY3k9XCIxMlwiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvY2lyY2xlPlxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMThcIiBjeT1cIjEyXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L2NpcmNsZT5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cblxuICAgICAgPCEtLSBGaWxhIHZhY8OtYSAtLT5cbiAgICAgIDx0ciAqbmdJZj1cInBhZ2VkUm93cy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJcbiAgICAgICAgICAgIGVmZmVjdGl2ZUNvbHVtbnMubGVuZ3RoICtcbiAgICAgICAgICAgIChzZWxlY3RhYmxlID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93QWN0aW9ucyA/IDEgOiAwKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJweC0zIHB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZW1wdHlMYWJlbCB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L3BkbS10YWJsZT5cblxuICA8IS0tIEZvb3RlcjogSW5mbyArIFBhZ2luYWNpw7NuIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93UGFnaW5hdGlvbiB8fCBzZWxlY3RhYmxlXCJcbiAgICBjbGFzcz1cImZsZXggdy1mdWxsIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHktNCBzbTpmbGV4LW5vd3JhcFwiXG4gID5cbiAgICA8cFxuICAgICAgKm5nSWY9XCJzZWxlY3RhYmxlXCJcbiAgICAgIGNsYXNzPVwibS0wIGZsZXgtMSBwci0yIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICA+XG4gICAgICB7eyBzZWxlY3RlZENvdW50IH19IG9mIHt7IHJvd3MubGVuZ3RoIH19IHt7IHJvd3NTZWxlY3RlZExhYmVsIH19XG4gICAgPC9wPlxuXG4gICAgPGRpdiAqbmdJZj1cInNob3dQYWdpbmF0aW9uXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBtbC1hdXRvXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgIFBhZ2Uge3sgcGFnZSB9fSBvZiB7eyB0b3RhbFBhZ2VzIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImgtOSBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtNCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCBzaGFkb3ctc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicGFnZSA8PSAxXCJcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzKClcIlxuICAgICAgPlxuICAgICAgICB7eyBwcmV2aW91c0xhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiaC05IGFwcGVhcmFuY2Utbm9uZSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC00IHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJwYWdlID49IHRvdGFsUGFnZXNcIlxuICAgICAgICAoY2xpY2spPVwibmV4dCgpXCJcbiAgICAgID5cbiAgICAgICAge3sgbmV4dExhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
|