@valtimo/zgw 12.26.0 → 12.28.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.
@@ -32,11 +32,10 @@ import * as i3 from "@ngx-translate/core";
32
32
  import * as i4 from "@valtimo/config";
33
33
  import * as i5 from "@valtimo/security";
34
34
  import * as i6 from "carbon-components-angular";
35
- import * as i7 from "../../services/documenten-api-document.service";
36
- import * as i8 from "../../services";
37
- import * as i9 from "@valtimo/access-control";
38
- import * as i10 from "@angular/common";
39
- import * as i11 from "@valtimo/components";
35
+ import * as i7 from "../../services";
36
+ import * as i8 from "@valtimo/access-control";
37
+ import * as i9 from "@angular/common";
38
+ import * as i10 from "@valtimo/components";
40
39
  export class DossierDetailTabDocumentenApiDocumentsComponent {
41
40
  constructor(route, router, uploadProviderService, downloadService, translateService, configService, userProviderService, iconService, documentenApiDocumentService, documentenApiColumnService, documentenApiVersionService, permissionService) {
42
41
  this.route = route;
@@ -196,13 +195,19 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
196
195
  this.registerPermissionSubscriptions();
197
196
  }
198
197
  registerPermissionSubscriptions() {
199
- this._subscriptions.add(this.relatedFiles$
200
- .pipe(switchMap(files => combineLatest({
201
- files: of(files),
202
- canView: this.getPermissions(files, CAN_VIEW_RESOURCE_PERMISSION),
203
- canModify: this.getPermissions(files, CAN_MODIFY_RESOURCE_PERMISSION),
204
- canDelete: this.getPermissions(files, CAN_DELETE_RESOURCE_PERMISSION),
205
- })))
198
+ this._subscriptions.add(combineLatest([this.relatedFiles$, this.documentId$])
199
+ .pipe(switchMap(([files, documentId]) => {
200
+ const documentContext = {
201
+ resource: RESOURCE_PERMISSION_RESOURCE.jsonSchemaDocument,
202
+ identifier: documentId,
203
+ };
204
+ return combineLatest({
205
+ files: of(files),
206
+ canView: this.getPermissions(files, CAN_VIEW_RESOURCE_PERMISSION, documentContext),
207
+ canModify: this.getPermissions(files, CAN_MODIFY_RESOURCE_PERMISSION, documentContext),
208
+ canDelete: this.getPermissions(files, CAN_DELETE_RESOURCE_PERMISSION, documentContext),
209
+ });
210
+ }))
206
211
  .subscribe(permissions => permissions.files.map(file => (this.filePermissions[file.fileId] = {
207
212
  canView: permissions.canView[file.fileId],
208
213
  canModify: permissions.canModify[file.fileId],
@@ -217,9 +222,16 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
217
222
  this.showDeleteConfirmationModal$.next(true);
218
223
  }
219
224
  deleteDocument() {
220
- this._itemsLoading$.next(true);
221
- this.documentenApiDocumentService.deleteDocument(this.document).subscribe(() => {
222
- this.refetchDocuments();
225
+ this.documentId$.pipe(take(1)).subscribe(documentId => {
226
+ this._itemsLoading$.next(true);
227
+ this.documentenApiDocumentService.deleteDocument(this.document, documentId).subscribe({
228
+ next: () => {
229
+ this.refetchDocuments();
230
+ },
231
+ error: () => {
232
+ this._itemsLoading$.next(false);
233
+ },
234
+ });
223
235
  });
224
236
  }
225
237
  bytesToMegabytes(bytes) {
@@ -261,10 +273,15 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
261
273
  if (!file)
262
274
  return;
263
275
  if (this.isEditMode$.getValue()) {
264
- this.documentenApiDocumentService.updateDocument(file, metadata).subscribe(() => {
265
- this.refetchDocuments();
266
- this.uploading$.next(false);
267
- this.fileToBeUploaded$.next(null);
276
+ this.documentenApiDocumentService.updateDocument(file, metadata, documentId).subscribe({
277
+ next: () => {
278
+ this.refetchDocuments();
279
+ this.uploading$.next(false);
280
+ this.fileToBeUploaded$.next(null);
281
+ },
282
+ error: () => {
283
+ this.uploading$.next(false);
284
+ },
268
285
  });
269
286
  }
270
287
  else {
@@ -345,7 +362,9 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
345
362
  return !this.filePermissions[file.fileId]?.canDelete;
346
363
  }
347
364
  downloadDocument(relatedFile, forceDownload) {
348
- this.downloadService.downloadFile(`${this.valtimoEndpointUri}v1/documenten-api/${relatedFile.pluginConfigurationId}/files/${relatedFile.fileId}/download`, relatedFile.bestandsnaam ?? '', forceDownload);
365
+ this.documentId$.pipe(take(1)).subscribe(documentId => {
366
+ this.downloadService.downloadFile(`${this.valtimoEndpointUri}v1/zaken-api/${relatedFile.pluginConfigurationId}/case-document/${documentId}/files/${relatedFile.fileId}/download`, relatedFile.bestandsnaam ?? '', forceDownload);
367
+ });
349
368
  }
350
369
  openQueryParamsSubscription() {
351
370
  this._subscriptions.add(combineLatest([
@@ -403,8 +422,8 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
403
422
  }
404
423
  return null;
405
424
  }
406
- getPermissions(files, permissionRequest) {
407
- return combineLatest(files.map(file => this.getPermission(permissionRequest, {
425
+ getPermissions(files, permissionRequest, context) {
426
+ return combineLatest(files.map(file => this.getPermission(permissionRequest, context || {
408
427
  resource: RESOURCE_PERMISSION_RESOURCE.resourcePermission,
409
428
  identifier: file.fileId,
410
429
  }).pipe(map(available => ({ [file.fileId]: available }))))).pipe(map(permissions => permissions.reduce((acc, permission) => ({ ...acc, ...permission }), {})));
@@ -417,8 +436,8 @@ export class DossierDetailTabDocumentenApiDocumentsComponent {
417
436
  return this.permissionService.requestPermission(permissionRequest, context);
418
437
  }));
419
438
  }
420
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTabDocumentenApiDocumentsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.UploadProviderService }, { token: i2.DownloadService }, { token: i3.TranslateService }, { token: i4.ConfigService }, { token: i5.UserProviderService }, { token: i6.IconService }, { token: i7.DocumentenApiDocumentService }, { token: i8.DocumentenApiColumnService }, { token: i8.DocumentenApiVersionService }, { token: i9.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
421
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierDetailTabDocumentenApiDocumentsComponent, isStandalone: true, selector: "valtimo-dossier-detail-tab-documenten-api-documents", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "translationTemplate", first: true, predicate: ["translationTemplate"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<div\n class=\"carbon-document-table-wrapper\"\n *ngIf=\"{\n loading: loading$ | async,\n fieldsLoading: fieldsLoading$ | async,\n uploading: uploading$ | async,\n relatedFiles: relatedFiles$ | async,\n fields: fields$ | async,\n supportedDocumentenApiFeatures: supportedDocumentenApiFeatures$ | async,\n pagination: pagination$ | async,\n sortState: sortState$ | async,\n uploadFields: uploadFields$ | async,\n defaultValues: defaultValues$ | async,\n hideFields: hideFields$ | async,\n } as obs\"\n>\n @if ((!obs.fieldsLoading && obs.fields.length) || obs.fieldsLoading) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [items]=\"obs.relatedFiles\"\n [fields]=\"obs.fields\"\n [initialSortState]=\"obs.sortState\"\n [loading]=\"obs.loading\"\n [pagination]=\"obs.pagination\"\n [paginatorConfig]=\"paginatorConfig\"\n paginationIdentifier=\"documentenApi\"\n (rowClicked)=\"onRowClick($event)\"\n (sortChanged)=\"\n obs?.supportedDocumentenApiFeatures?.supportsSortableColumns && onSortChanged($event)\n \"\n (paginationClicked)=\"onPaginationClicked($event)\"\n (paginationSet)=\"onPaginationSet($event)\"\n hideColumnHeader\n >\n <div carbonToolbarContent>\n <input\n [accept]=\"acceptedFiles\"\n (change)=\"onFileSelected($event)\"\n hidden\n type=\"file\"\n #fileInput\n />\n\n <button\n *ngIf=\"obs?.supportedDocumentenApiFeatures?.supportsFilterableColumns\"\n [cdsOverflowMenu]=\"overflowFilter\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"noResults\"></ng-container>\n </valtimo-carbon-list>\n } @else {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'zgw.documents.noColumns.description' | translate\"\n [title]=\"'zgw.documents.noColumns.title' | translate\"\n ></valtimo-no-results>\n }\n\n <valtimo-documenten-api-metadata-modal\n [defaultValues]=\"obs.defaultValues\"\n [disableAuthor]=\"obs.uploadFields?.auteur?.readonly\"\n [disableConfidentialityLevel]=\"obs.uploadFields?.vertrouwelijkheidaanduiding?.readonly\"\n [disableCreationDate]=\"obs.uploadFields?.creatiedatum?.readonly\"\n [disableDescription]=\"obs.uploadFields?.beschrijving?.readonly\"\n [disableDocumentTitle]=\"obs.uploadFields?.titel?.readonly\"\n [disableDocumentType]=\"obs.uploadFields?.informatieobjecttype?.readonly\"\n [disableFilename]=\"obs.uploadFields?.bestandsnaam?.readonly\"\n [disableLanguage]=\"obs.uploadFields?.taal?.readonly\"\n [disableStatus]=\"obs.uploadFields?.status?.readonly\"\n [hideFields]=\"obs.hideFields\"\n [open]=\"showUploadModal$ | async\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [isEditMode]=\"isEditMode$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n (modalClose)=\"closeMetadataModal()\"\n (metadata)=\"metadataSet($event)\"\n ></valtimo-documenten-api-metadata-modal>\n</div>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n contentTranslationKey=\"dossier.documenten.deleteConfirmationModal.content\"\n confirmButtonType=\"danger\"\n titleTranslationKey=\"dossier.documenten.deleteConfirmationModal.title\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n (confirmEvent)=\"deleteDocument()\"\n>\n</valtimo-confirmation-modal>\n\n<ng-template #noResults>\n @if ((filter$ | async | keyvalue)?.length) {\n <valtimo-no-results\n [action]=\"resetFilterButton\"\n [description]=\"'zgw.documents.noResults.filterDescription' | translate\"\n [title]=\"'zgw.documents.noResults.filterTitle' | translate\"\n ></valtimo-no-results>\n } @else if (showZaakLinkWarning && isAdmin) {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'dossier.documenten.noZaakFound' | translate\"\n [title]=\"'dossier.documenten.noZaakFoundTitle' | translate\"\n ></valtimo-no-results>\n } @else {\n <valtimo-no-results\n [action]=\"uploadButton\"\n [description]=\"'dossier.documenten.noFiles' | translate\"\n [title]=\"'dossier.documenten.noFilesTitle' | translate\"\n ></valtimo-no-results>\n }\n</ng-template>\n\n<ng-template #overflowFilter>\n <valtimo-dossier-detail-tab-documenten-api-filter\n [prefillFilter]=\"filter$ | async\"\n (filterEvent)=\"onFilterEvent($event)\"\n ></valtimo-dossier-detail-tab-documenten-api-filter>\n</ng-template>\n\n<ng-template #resetFilterButton>\n <button cdsButton=\"primary\" (click)=\"onFilterEvent(null)\">\n {{ 'Reset filter' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #uploadButton let-disabled=\"disabled\">\n <button\n [disabled]=\"\n (uploadProcessLinkedSet && !uploadProcessLinked) ||\n showZaakLinkWarning ||\n disabled ||\n (canCreateResource$ | async) === false\n \"\n [vTooltip]=\"getUploadButtonTooltip() | translate\"\n (click)=\"onUploadButtonClick()\"\n cdsButton=\"primary\"\n >\n {{ 'Upload' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #translationTemplate let-data=\"data\">\n @if (data.item[data.key]) {\n {{ 'document.' + data.item[data.key] | translate }}\n } @else {\n -\n }\n</ng-template>\n\n<ng-template #navigateToCaseAdminButton>\n <button (click)=\"onNavigateToCaseAdminClick()\" cdsButton=\"primary\">\n {{ 'dossier.documenten.navigateToCaseAdmin' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"settings\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: [".hidden{display:none}.loading-container{padding:var(--cds-grid-margin);display:flex;align-items:center;justify-content:center}.carbon-document-table-wrapper{margin:0}.documenten-api-documents-filesize-template{text-align:right}::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i11.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i11.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: DocumentenApiMetadataModalComponent, selector: "valtimo-documenten-api-metadata-modal", inputs: ["disabled$", "file$", "hideFields", "defaultValues", "disableAuthor", "disableConfidentialityLevel", "disableDescription", "disableDocumentTitle", "disableDocumentType", "disableFilename", "disableLanguage", "disableStatus", "supportsTrefwoorden", "disableCreationDate", "isEditMode", "open"], outputs: ["metadata", "modalClose"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i6.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: DocumentenApiFilterComponent, selector: "valtimo-dossier-detail-tab-documenten-api-filter", outputs: ["filterEvent"] }, { kind: "ngmodule", type: DialogModule }, { kind: "directive", type: i6.OverflowMenuDirective, selector: "[cdsOverflowMenu], [ibmOverflowMenu]", inputs: ["ibmOverflowMenu", "cdsOverflowMenu", "flip", "offset", "wrapperClass", "customPane"], exportAs: ["overflowMenu"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i11.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }] }); }
439
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTabDocumentenApiDocumentsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.UploadProviderService }, { token: i2.DownloadService }, { token: i3.TranslateService }, { token: i4.ConfigService }, { token: i5.UserProviderService }, { token: i6.IconService }, { token: i7.DocumentenApiDocumentService }, { token: i7.DocumentenApiColumnService }, { token: i7.DocumentenApiVersionService }, { token: i8.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
440
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierDetailTabDocumentenApiDocumentsComponent, isStandalone: true, selector: "valtimo-dossier-detail-tab-documenten-api-documents", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "translationTemplate", first: true, predicate: ["translationTemplate"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<div\n class=\"carbon-document-table-wrapper\"\n *ngIf=\"{\n loading: loading$ | async,\n fieldsLoading: fieldsLoading$ | async,\n uploading: uploading$ | async,\n relatedFiles: relatedFiles$ | async,\n fields: fields$ | async,\n supportedDocumentenApiFeatures: supportedDocumentenApiFeatures$ | async,\n pagination: pagination$ | async,\n sortState: sortState$ | async,\n uploadFields: uploadFields$ | async,\n defaultValues: defaultValues$ | async,\n hideFields: hideFields$ | async,\n } as obs\"\n>\n @if ((!obs.fieldsLoading && obs.fields.length) || obs.fieldsLoading) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [items]=\"obs.relatedFiles\"\n [fields]=\"obs.fields\"\n [initialSortState]=\"obs.sortState\"\n [loading]=\"obs.loading\"\n [pagination]=\"obs.pagination\"\n [paginatorConfig]=\"paginatorConfig\"\n paginationIdentifier=\"documentenApi\"\n (rowClicked)=\"onRowClick($event)\"\n (sortChanged)=\"\n obs?.supportedDocumentenApiFeatures?.supportsSortableColumns && onSortChanged($event)\n \"\n (paginationClicked)=\"onPaginationClicked($event)\"\n (paginationSet)=\"onPaginationSet($event)\"\n hideColumnHeader\n >\n <div carbonToolbarContent>\n <input\n [accept]=\"acceptedFiles\"\n (change)=\"onFileSelected($event)\"\n hidden\n type=\"file\"\n #fileInput\n />\n\n <button\n *ngIf=\"obs?.supportedDocumentenApiFeatures?.supportsFilterableColumns\"\n [cdsOverflowMenu]=\"overflowFilter\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"noResults\"></ng-container>\n </valtimo-carbon-list>\n } @else {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'zgw.documents.noColumns.description' | translate\"\n [title]=\"'zgw.documents.noColumns.title' | translate\"\n ></valtimo-no-results>\n }\n\n <valtimo-documenten-api-metadata-modal\n [defaultValues]=\"obs.defaultValues\"\n [disableAuthor]=\"obs.uploadFields?.auteur?.readonly\"\n [disableConfidentialityLevel]=\"obs.uploadFields?.vertrouwelijkheidaanduiding?.readonly\"\n [disableCreationDate]=\"obs.uploadFields?.creatiedatum?.readonly\"\n [disableDescription]=\"obs.uploadFields?.beschrijving?.readonly\"\n [disableDocumentTitle]=\"obs.uploadFields?.titel?.readonly\"\n [disableDocumentType]=\"obs.uploadFields?.informatieobjecttype?.readonly\"\n [disableFilename]=\"obs.uploadFields?.bestandsnaam?.readonly\"\n [disableLanguage]=\"obs.uploadFields?.taal?.readonly\"\n [disableStatus]=\"obs.uploadFields?.status?.readonly\"\n [hideFields]=\"obs.hideFields\"\n [open]=\"showUploadModal$ | async\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [isEditMode]=\"isEditMode$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n (modalClose)=\"closeMetadataModal()\"\n (metadata)=\"metadataSet($event)\"\n ></valtimo-documenten-api-metadata-modal>\n</div>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n contentTranslationKey=\"dossier.documenten.deleteConfirmationModal.content\"\n confirmButtonType=\"danger\"\n titleTranslationKey=\"dossier.documenten.deleteConfirmationModal.title\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n (confirmEvent)=\"deleteDocument()\"\n>\n</valtimo-confirmation-modal>\n\n<ng-template #noResults>\n @if ((filter$ | async | keyvalue)?.length) {\n <valtimo-no-results\n [action]=\"resetFilterButton\"\n [description]=\"'zgw.documents.noResults.filterDescription' | translate\"\n [title]=\"'zgw.documents.noResults.filterTitle' | translate\"\n ></valtimo-no-results>\n } @else if (showZaakLinkWarning && isAdmin) {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'dossier.documenten.noZaakFound' | translate\"\n [title]=\"'dossier.documenten.noZaakFoundTitle' | translate\"\n ></valtimo-no-results>\n } @else {\n <valtimo-no-results\n [action]=\"uploadButton\"\n [description]=\"'dossier.documenten.noFiles' | translate\"\n [title]=\"'dossier.documenten.noFilesTitle' | translate\"\n ></valtimo-no-results>\n }\n</ng-template>\n\n<ng-template #overflowFilter>\n <valtimo-dossier-detail-tab-documenten-api-filter\n [prefillFilter]=\"filter$ | async\"\n (filterEvent)=\"onFilterEvent($event)\"\n ></valtimo-dossier-detail-tab-documenten-api-filter>\n</ng-template>\n\n<ng-template #resetFilterButton>\n <button cdsButton=\"primary\" (click)=\"onFilterEvent(null)\">\n {{ 'Reset filter' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #uploadButton let-disabled=\"disabled\">\n <button\n [disabled]=\"\n (uploadProcessLinkedSet && !uploadProcessLinked) ||\n showZaakLinkWarning ||\n disabled ||\n (canCreateResource$ | async) === false\n \"\n [vTooltip]=\"getUploadButtonTooltip() | translate\"\n (click)=\"onUploadButtonClick()\"\n cdsButton=\"primary\"\n >\n {{ 'Upload' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #translationTemplate let-data=\"data\">\n @if (data.item[data.key]) {\n {{ 'document.' + data.item[data.key] | translate }}\n } @else {\n -\n }\n</ng-template>\n\n<ng-template #navigateToCaseAdminButton>\n <button (click)=\"onNavigateToCaseAdminClick()\" cdsButton=\"primary\">\n {{ 'dossier.documenten.navigateToCaseAdmin' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"settings\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: [".hidden{display:none}.loading-container{padding:var(--cds-grid-margin);display:flex;align-items:center;justify-content:center}.carbon-document-table-wrapper{margin:0}.documenten-api-documents-filesize-template{text-align:right}::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i10.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i10.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: DocumentenApiMetadataModalComponent, selector: "valtimo-documenten-api-metadata-modal", inputs: ["disabled$", "file$", "hideFields", "defaultValues", "disableAuthor", "disableConfidentialityLevel", "disableDescription", "disableDocumentTitle", "disableDocumentType", "disableFilename", "disableLanguage", "disableStatus", "supportsTrefwoorden", "disableCreationDate", "isEditMode", "open"], outputs: ["metadata", "modalClose"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i6.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "component", type: DocumentenApiFilterComponent, selector: "valtimo-dossier-detail-tab-documenten-api-filter", outputs: ["filterEvent"] }, { kind: "ngmodule", type: DialogModule }, { kind: "directive", type: i6.OverflowMenuDirective, selector: "[cdsOverflowMenu], [ibmOverflowMenu]", inputs: ["ibmOverflowMenu", "cdsOverflowMenu", "flip", "offset", "wrapperClass", "customPane"], exportAs: ["overflowMenu"] }, { kind: "ngmodule", type: ConfirmationModalModule }, { kind: "component", type: i10.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }] }); }
422
441
  }
423
442
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTabDocumentenApiDocumentsComponent, decorators: [{
424
443
  type: Component,
@@ -433,11 +452,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
433
452
  DialogModule,
434
453
  ConfirmationModalModule,
435
454
  ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<div\n class=\"carbon-document-table-wrapper\"\n *ngIf=\"{\n loading: loading$ | async,\n fieldsLoading: fieldsLoading$ | async,\n uploading: uploading$ | async,\n relatedFiles: relatedFiles$ | async,\n fields: fields$ | async,\n supportedDocumentenApiFeatures: supportedDocumentenApiFeatures$ | async,\n pagination: pagination$ | async,\n sortState: sortState$ | async,\n uploadFields: uploadFields$ | async,\n defaultValues: defaultValues$ | async,\n hideFields: hideFields$ | async,\n } as obs\"\n>\n @if ((!obs.fieldsLoading && obs.fields.length) || obs.fieldsLoading) {\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [items]=\"obs.relatedFiles\"\n [fields]=\"obs.fields\"\n [initialSortState]=\"obs.sortState\"\n [loading]=\"obs.loading\"\n [pagination]=\"obs.pagination\"\n [paginatorConfig]=\"paginatorConfig\"\n paginationIdentifier=\"documentenApi\"\n (rowClicked)=\"onRowClick($event)\"\n (sortChanged)=\"\n obs?.supportedDocumentenApiFeatures?.supportsSortableColumns && onSortChanged($event)\n \"\n (paginationClicked)=\"onPaginationClicked($event)\"\n (paginationSet)=\"onPaginationSet($event)\"\n hideColumnHeader\n >\n <div carbonToolbarContent>\n <input\n [accept]=\"acceptedFiles\"\n (change)=\"onFileSelected($event)\"\n hidden\n type=\"file\"\n #fileInput\n />\n\n <button\n *ngIf=\"obs?.supportedDocumentenApiFeatures?.supportsFilterableColumns\"\n [cdsOverflowMenu]=\"overflowFilter\"\n [customPane]=\"true\"\n [iconOnly]=\"true\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 47}\"\n cdsButton=\"ghost\"\n placement=\"bottom\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"noResults\"></ng-container>\n </valtimo-carbon-list>\n } @else {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'zgw.documents.noColumns.description' | translate\"\n [title]=\"'zgw.documents.noColumns.title' | translate\"\n ></valtimo-no-results>\n }\n\n <valtimo-documenten-api-metadata-modal\n [defaultValues]=\"obs.defaultValues\"\n [disableAuthor]=\"obs.uploadFields?.auteur?.readonly\"\n [disableConfidentialityLevel]=\"obs.uploadFields?.vertrouwelijkheidaanduiding?.readonly\"\n [disableCreationDate]=\"obs.uploadFields?.creatiedatum?.readonly\"\n [disableDescription]=\"obs.uploadFields?.beschrijving?.readonly\"\n [disableDocumentTitle]=\"obs.uploadFields?.titel?.readonly\"\n [disableDocumentType]=\"obs.uploadFields?.informatieobjecttype?.readonly\"\n [disableFilename]=\"obs.uploadFields?.bestandsnaam?.readonly\"\n [disableLanguage]=\"obs.uploadFields?.taal?.readonly\"\n [disableStatus]=\"obs.uploadFields?.status?.readonly\"\n [hideFields]=\"obs.hideFields\"\n [open]=\"showUploadModal$ | async\"\n [disabled$]=\"modalDisabled$\"\n [file$]=\"fileToBeUploaded$\"\n [isEditMode]=\"isEditMode$ | async\"\n [supportsTrefwoorden]=\"obs?.supportedDocumentenApiFeatures?.supportsTrefwoorden\"\n (modalClose)=\"closeMetadataModal()\"\n (metadata)=\"metadataSet($event)\"\n ></valtimo-documenten-api-metadata-modal>\n</div>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"dashboardManagement.deleteModal.confirm\"\n contentTranslationKey=\"dossier.documenten.deleteConfirmationModal.content\"\n confirmButtonType=\"danger\"\n titleTranslationKey=\"dossier.documenten.deleteConfirmationModal.title\"\n [showModalSubject$]=\"showDeleteConfirmationModal$\"\n (confirmEvent)=\"deleteDocument()\"\n>\n</valtimo-confirmation-modal>\n\n<ng-template #noResults>\n @if ((filter$ | async | keyvalue)?.length) {\n <valtimo-no-results\n [action]=\"resetFilterButton\"\n [description]=\"'zgw.documents.noResults.filterDescription' | translate\"\n [title]=\"'zgw.documents.noResults.filterTitle' | translate\"\n ></valtimo-no-results>\n } @else if (showZaakLinkWarning && isAdmin) {\n <valtimo-no-results\n [action]=\"navigateToCaseAdminButton\"\n [description]=\"'dossier.documenten.noZaakFound' | translate\"\n [title]=\"'dossier.documenten.noZaakFoundTitle' | translate\"\n ></valtimo-no-results>\n } @else {\n <valtimo-no-results\n [action]=\"uploadButton\"\n [description]=\"'dossier.documenten.noFiles' | translate\"\n [title]=\"'dossier.documenten.noFilesTitle' | translate\"\n ></valtimo-no-results>\n }\n</ng-template>\n\n<ng-template #overflowFilter>\n <valtimo-dossier-detail-tab-documenten-api-filter\n [prefillFilter]=\"filter$ | async\"\n (filterEvent)=\"onFilterEvent($event)\"\n ></valtimo-dossier-detail-tab-documenten-api-filter>\n</ng-template>\n\n<ng-template #resetFilterButton>\n <button cdsButton=\"primary\" (click)=\"onFilterEvent(null)\">\n {{ 'Reset filter' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #uploadButton let-disabled=\"disabled\">\n <button\n [disabled]=\"\n (uploadProcessLinkedSet && !uploadProcessLinked) ||\n showZaakLinkWarning ||\n disabled ||\n (canCreateResource$ | async) === false\n \"\n [vTooltip]=\"getUploadButtonTooltip() | translate\"\n (click)=\"onUploadButtonClick()\"\n cdsButton=\"primary\"\n >\n {{ 'Upload' | translate }}\n <svg class=\"cds--btn__icon\" cdsIcon=\"upload\" size=\"16\"></svg>\n </button>\n</ng-template>\n\n<ng-template #translationTemplate let-data=\"data\">\n @if (data.item[data.key]) {\n {{ 'document.' + data.item[data.key] | translate }}\n } @else {\n -\n }\n</ng-template>\n\n<ng-template #navigateToCaseAdminButton>\n <button (click)=\"onNavigateToCaseAdminClick()\" cdsButton=\"primary\">\n {{ 'dossier.documenten.navigateToCaseAdmin' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"settings\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: [".hidden{display:none}.loading-container{padding:var(--cds-grid-margin);display:flex;align-items:center;justify-content:center}.carbon-document-table-wrapper{margin:0}.documenten-api-documents-filesize-template{text-align:right}::ng-deep .cds--overflow-menu-options.cds--overflow-menu-options--open{max-width:max-content!important;width:max-content!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
436
- }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.UploadProviderService }, { type: i2.DownloadService }, { type: i3.TranslateService }, { type: i4.ConfigService }, { type: i5.UserProviderService }, { type: i6.IconService }, { type: i7.DocumentenApiDocumentService }, { type: i8.DocumentenApiColumnService }, { type: i8.DocumentenApiVersionService }, { type: i9.PermissionService }], propDecorators: { fileInput: [{
455
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.UploadProviderService }, { type: i2.DownloadService }, { type: i3.TranslateService }, { type: i4.ConfigService }, { type: i5.UserProviderService }, { type: i6.IconService }, { type: i7.DocumentenApiDocumentService }, { type: i7.DocumentenApiColumnService }, { type: i7.DocumentenApiVersionService }, { type: i8.PermissionService }], propDecorators: { fileInput: [{
437
456
  type: ViewChild,
438
457
  args: ['fileInput']
439
458
  }], translationTemplate: [{
440
459
  type: ViewChild,
441
460
  args: ['translationTemplate']
442
461
  }] } });
443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vemd3L3NyYy9saWIvbW9kdWxlcy9kb2N1bWVudGVuLWFwaS9jb21wb25lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUE4QyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFL0YsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUVMLGdCQUFnQixFQUVoQix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUl4QixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsNEJBQTRCLEVBRTVCLDRCQUE0QixHQUU3QixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBYyxNQUFNLDJCQUEyQixDQUFD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NEJBQTRCO3dCQUM1QixZQUFZO3dCQUNaLHVCQUF1QjtxQkFDeEI7K2JBR3VCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDWSxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RmlsdGVyMTYsIFRhZ0dyb3VwMTYsIFVwbG9hZDE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RNb2R1bGUsXG4gIENvbHVtbkNvbmZpZyxcbiAgQ29uZmlybWF0aW9uTW9kYWxNb2R1bGUsXG4gIERFRkFVTFRfUEFHSU5BVElPTixcbiAgREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHLFxuICBEb2N1bWVudGVuQXBpTWV0YWRhdGEsXG4gIFBhZ2luYXRpb24sXG4gIFNvcnRTdGF0ZSxcbiAgVmlld1R5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlLCBEaXJlY3Rpb259IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1xuICBDQU5fQ1JFQVRFX1JFU09VUkNFX1BFUk1JU1NJT04sXG4gIENBTl9ERUxFVEVfUkVTT1VSQ0VfUEVSTUlTU0lPTixcbiAgQ0FOX01PRElGWV9SRVNPVVJDRV9QRVJNSVNTSU9OLFxuICBDQU5fVklFV19SRVNPVVJDRV9QRVJNSVNTSU9OLFxuICBEb3dubG9hZFNlcnZpY2UsXG4gIFJFU09VUkNFX1BFUk1JU1NJT05fUkVTT1VSQ0UsXG4gIFVwbG9hZFByb3ZpZGVyU2VydmljZSxcbn0gZnJvbSAnQHZhbHRpbW8vcmVzb3VyY2UnO1xuaW1wb3J0IHtVc2VyUHJvdmlkZXJTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9zZWN1cml0eSc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZSwgRGlhbG9nTW9kdWxlLCBJY29uTW9kdWxlLCBJY29uU2VydmljZX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBSZXBsYXlTdWJqZWN0LFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YWtlLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENPTFVNTl9WSUVXX1RZUEVTLFxuICBDb25maWd1cmVkQ29sdW1uLFxuICBET0NVTUVOVEVOX0NPTFVNTl9LRVlTLFxuICBEb2N1bWVudGVuQXBpRmlsdGVyTW9kZWwsXG4gIERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSxcbiAgU3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpQ29sdW1uU2VydmljZSwgRG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpRmlsdGVyQ29tcG9uZW50fSBmcm9tICcuLi9kb2N1bWVudGVuLWFwaS1maWx0ZXIvZG9jdW1lbnRlbi1hcGktZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50fSBmcm9tICcuLi9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkRGVmYXVsdFZhbHVlcyxcbiAgRG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkcyxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL2RvY3VtZW50ZW4tYXBpLXVwbG9hZC1maWVsZC5tb2RlbCc7XG5pbXBvcnQge1Blcm1pc3Npb25SZXF1ZXN0LCBQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vYWNjZXNzLWNvbnRyb2wnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhYi1kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ2FyYm9uTGlzdE1vZHVsZSxcbiAgICBEb2N1bWVudGVuQXBpTWV0YWRhdGFNb2RhbENvbXBvbmVudCxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgRG9jdW1lbnRlbkFwaUZpbHRlckNvbXBvbmVudCxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgQ29uZmlybWF0aW9uTW9kYWxNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJEZXRhaWxUYWJEb2N1bWVudGVuQXBpRG9jdW1lbnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBmaWxlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zbGF0aW9uVGVtcGxhdGUnKSB0cmFuc2xhdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgZmlsdGVyKGNhc2VEZWZpbml0aW9uTmFtZSA9PiAhIWNhc2VEZWZpbml0aW9uTmFtZSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJCA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxTdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMgfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkOiBPYnNlcnZhYmxlPFN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcz4gPVxuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY2FzZURlZmluaXRpb25OYW1lID0+XG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlLmdldFN1cHBvcnRlZEFwaUZlYXR1cmVzKGNhc2VEZWZpbml0aW9uTmFtZSlcbiAgICAgICksXG4gICAgICB0YXAoc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzID0+XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJC5uZXh0KHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcylcbiAgICAgIClcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWVsZHMkOiBPYnNlcnZhYmxlPENvbHVtbkNvbmZpZ1tdPiA9IHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMuZmllbGRzTG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlLmdldENvbmZpZ3VyZWRDb2x1bW5zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgICB0aGlzLl9zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkLFxuICAgICAgICB0aGlzLl9zb3J0JCxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFtjb2x1bW5zLCBzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMsIHNvcnRdKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0U29ydENvbHVtbjogQ29uZmlndXJlZENvbHVtbiB8IHVuZGVmaW5lZCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbHVtbjogQ29uZmlndXJlZENvbHVtbikgPT4gISFjb2x1bW4uZGVmYXVsdFNvcnRcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgICEhZGVmYXVsdFNvcnRDb2x1bW4gJiZcbiAgICAgICAgIXNvcnQ/LnNvcnQgJiZcbiAgICAgICAgc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLnN1cHBvcnRzU29ydGFibGVDb2x1bW5zXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fc29ydCQubmV4dCh7c29ydDogYCR7ZGVmYXVsdFNvcnRDb2x1bW4ua2V5fSwke2RlZmF1bHRTb3J0Q29sdW1uLmRlZmF1bHRTb3J0fWB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW46IENvbmZpZ3VyZWRDb2x1bW4pID0+ICh7XG4gICAgICAgIGtleTogY29sdW1uLmtleSA9PT0gRE9DVU1FTlRFTl9DT0xVTU5fS0VZUy5CRVNUQU5EU09NVkFORyA/ICdzaXplJyA6IGNvbHVtbi5rZXksXG4gICAgICAgIGxhYmVsOiBgemd3LmRvY3VtZW50Q29sdW1ucy4ke2NvbHVtbi5rZXl9YCxcbiAgICAgICAgdmlld1R5cGU6ICFDT0xVTU5fVklFV19UWVBFU1tjb2x1bW4ua2V5XSA/IFZpZXdUeXBlLlRFWFQgOiBDT0xVTU5fVklFV19UWVBFU1tjb2x1bW4ua2V5XSxcbiAgICAgICAgLi4uKENPTFVNTl9WSUVXX1RZUEVTW2NvbHVtbi5rZXldID09PSBWaWV3VHlwZS5URU1QTEFURSAmJiB7XG4gICAgICAgICAgdGVtcGxhdGU6IHRoaXMudHJhbnNsYXRpb25UZW1wbGF0ZSxcbiAgICAgICAgICB0ZW1wbGF0ZURhdGE6IHtrZXk6IGNvbHVtbi5rZXl9LFxuICAgICAgICB9KSxcbiAgICAgICAgLi4uKGNvbHVtbi5rZXkgPT09IERPQ1VNRU5URU5fQ09MVU1OX0tFWVMuQ1JFQVRJRURBVFVNICYmIHtmb3JtYXQ6ICdERC1NTS1ZWVlZJ30pLFxuICAgICAgICBzb3J0YWJsZTogY29sdW1uLnNvcnRhYmxlICYmIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcy5zdXBwb3J0c1NvcnRhYmxlQ29sdW1ucyxcbiAgICAgIH0pKTtcbiAgICB9KSxcbiAgICB0YXAoKCkgPT4gdGhpcy5maWVsZHNMb2FkaW5nJC5uZXh0KGZhbHNlKSlcbiAgKTtcbiAgcHVibGljIGRvY3VtZW50OiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGU7XG4gIHB1YmxpYyBhY3Rpb25JdGVtczogQWN0aW9uSXRlbVtdID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiAnZG9jdW1lbnQuZG93bmxvYWQnLFxuICAgICAgY2FsbGJhY2s6IHRoaXMub25Eb3dubG9hZEFjdGlvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICBkaXNhYmxlZENhbGxiYWNrOiB0aGlzLmRvd25sb2FkRGlzYWJsZWQuYmluZCh0aGlzKSxcbiAgICAgIHR5cGU6ICdub3JtYWwnLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdkb2N1bWVudC5lZGl0JyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9uRWRpdE1ldGFkYXRhLmJpbmQodGhpcyksXG4gICAgICBkaXNhYmxlZENhbGxiYWNrOiB0aGlzLmVkaXREaXNhYmxlZC5iaW5kKHRoaXMpLFxuICAgICAgdHlwZTogJ25vcm1hbCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ2RvY3VtZW50LmRlbGV0ZScsXG4gICAgICBjYWxsYmFjazogdGhpcy5vbkRlbGV0ZUFjdGlvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICBkaXNhYmxlZENhbGxiYWNrOiB0aGlzLmRlbGV0ZURpc2FibGVkLmJpbmQodGhpcyksXG4gICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICB9LFxuICBdO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgZmlsdGVyKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4gISFkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudElkJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnRJZCksXG4gICAgZmlsdGVyKGRvY3VtZW50SWQgPT4gISFkb2N1bWVudElkKVxuICApO1xuXG4gIHB1YmxpYyBpc0FkbWluOiBib29sZWFuO1xuICBwdWJsaWMgc2hvd1phYWtMaW5rV2FybmluZzogYm9vbGVhbjtcbiAgcHVibGljIHVwbG9hZFByb2Nlc3NMaW5rZWRTZXQgPSBmYWxzZTtcbiAgcHVibGljIHVwbG9hZFByb2Nlc3NMaW5rZWQhOiBib29sZWFuO1xuXG4gIHB1YmxpYyBpc0VkaXRNb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBhY2NlcHRlZEZpbGVzOiBzdHJpbmcgfCBudWxsID1cbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2U/LmNvbmZpZz8uY2FzZUZpbGVVcGxvYWRBY2NlcHRlZEZpbGVzIHx8IG51bGw7XG4gIHB1YmxpYyByZWFkb25seSBtYXhGaWxlU2l6ZTogbnVtYmVyID0gdGhpcy5jb25maWdTZXJ2aWNlPy5jb25maWc/LmNhc2VGaWxlU2l6ZVVwbG9hZExpbWl0TUIgfHwgNTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsZVRvQmVVcGxvYWRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbGUgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IG1vZGFsRGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93TW9kYWwkID0gbmV3IFN1YmplY3Q8bnVsbD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dVcGxvYWRNb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dEZWxldGVDb25maXJtYXRpb25Nb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdXBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IGZpZWxkc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckID0gY29tYmluZUxhdGVzdChbdGhpcy5faXRlbXNMb2FkaW5nJCwgdGhpcy5maWVsZHNMb2FkaW5nJF0pLnBpcGUoXG4gICAgbWFwKChbaXRlbXNMb2FkaW5nLCBmaWVsZHNMb2FkaW5nXSkgPT4gaXRlbXNMb2FkaW5nIHx8IGZpZWxkc0xvYWRpbmcpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlciQgPSBuZXcgUmVwbGF5U3ViamVjdDxEb2N1bWVudGVuQXBpRmlsdGVyTW9kZWwgfCBudWxsPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhZ2luYXRpb24+KERFRkFVTFRfUEFHSU5BVElPTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlZmV0Y2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc29ydCQgPSBuZXcgUmVwbGF5U3ViamVjdDx7c29ydDogc3RyaW5nfSB8IG51bGw+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsdGltb0VuZHBvaW50VXJpITogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBwYWdpbmF0b3JDb25maWcgPSB7XG4gICAgLi4uREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHLFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IFs1LCAxMCwgMjAsIDUwLCAxMDBdLFxuICB9O1xuXG4gIHB1YmxpYyBzb3J0U3RhdGUkOiBPYnNlcnZhYmxlPFNvcnRTdGF0ZSB8IG51bGw+ID0gdGhpcy5fc29ydCQucGlwZShcbiAgICBmaWx0ZXIoc29ydFZhbHVlID0+ICEhc29ydFZhbHVlPy5zb3J0KSxcbiAgICBtYXAoc29ydFZhbHVlID0+IHRoaXMuZ2V0U29ydFN0YXRlRnJvbVNvcnRTdHJpbmcoc29ydFZhbHVlPy5zb3J0KSlcbiAgKTtcblxuICBwdWJsaWMgdXBsb2FkRmllbGRzJDogT2JzZXJ2YWJsZTxEb2N1bWVudGVuQXBpVXBsb2FkRmllbGRzPiA9IHRoaXMuZG9jdW1lbnRJZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnRJZCA9PiB0aGlzLmRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UuZ2V0UHJlZmlsbGVkVXBsb2FkRmllbGRzKGRvY3VtZW50SWQpKSxcbiAgICBtYXAodXBsb2FkRmllbGRzID0+XG4gICAgICB1cGxvYWRGaWVsZHMucmVkdWNlKFxuICAgICAgICAoYWNjLCBjdXJyKSA9PiAoe1xuICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICBbY3Vyci5rZXldOiB7XG4gICAgICAgICAgICBrZXk6IGN1cnIua2V5LFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBjdXJyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHZpc2libGU6IGN1cnIudmlzaWJsZSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiBjdXJyLnJlYWRvbmx5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgZGVmYXVsdFZhbHVlcyQ6IE9ic2VydmFibGU8RG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkRGVmYXVsdFZhbHVlcz4gPVxuICAgIHRoaXMudXBsb2FkRmllbGRzJC5waXBlKFxuICAgICAgbWFwKGZvcm1GaWVsZHMgPT4gKHtcbiAgICAgICAgYXV0ZXVyOiBmb3JtRmllbGRzPy5hdXRldXI/LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nOiBmb3JtRmllbGRzPy52ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmc/LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgYmVzY2hyaWp2aW5nOiBmb3JtRmllbGRzPy5iZXNjaHJpanZpbmc/LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdGl0ZWw6IGZvcm1GaWVsZHM/LnRpdGVsPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGluZm9ybWF0aWVvYmplY3R0eXBlOiBmb3JtRmllbGRzPy5pbmZvcm1hdGllb2JqZWN0dHlwZT8uZGVmYXVsdFZhbHVlLFxuICAgICAgICBiZXN0YW5kc25hYW06IGZvcm1GaWVsZHM/LmJlc3RhbmRzbmFhbT8uZGVmYXVsdFZhbHVlLFxuICAgICAgICB0YWFsOiBmb3JtRmllbGRzPy50YWFsPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIHN0YXR1czogZm9ybUZpZWxkcz8uc3RhdHVzPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIHRyZWZ3b29yZGVuOiBmb3JtRmllbGRzPy50cmVmd29vcmRlbj8uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgPy5zcGxpdCgnLCcpXG4gICAgICAgICAgPy5tYXAodGFnID0+IHRhZy50cmltKCkpXG4gICAgICAgICAgPy5maWx0ZXIodGFnID0+ICEhdGFnKSxcbiAgICAgIH0pKVxuICAgICk7XG5cbiAgcHVibGljIGhpZGVGaWVsZHMkOiBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+ID0gdGhpcy51cGxvYWRGaWVsZHMkLnBpcGUoXG4gICAgbWFwKGZvcm1GaWVsZHMgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZHMpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGZvcm1GaWVsZHMpLmZpbHRlcihmaWVsZCA9PiAhZm9ybUZpZWxkc1tmaWVsZF0/LnZpc2libGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlbGF0ZWRGaWxlcyQ6IE9ic2VydmFibGU8QXJyYXk8RG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRvY3VtZW50SWQkLFxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcCxcbiAgICB0aGlzLl9yZWZldGNoJCxcbiAgXSkucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5faXRlbXNMb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudElkLCBxdWVyeVBhcmFtc10pID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlLmdldEZpbHRlcmVkWmFrZW5BcGlEb2N1bWVudHMoXG4gICAgICAgICAgZG9jdW1lbnRJZCxcbiAgICAgICAgICBxdWVyeVBhcmFtc1sncGFyYW1zJ11cbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gICAgICBdKVxuICAgICksXG4gICAgbWFwKChbcmVsYXRlZEZpbGVzXSkgPT4ge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLFxuICAgICAgICBjb2xsZWN0aW9uU2l6ZTogcmVsYXRlZEZpbGVzLnRvdGFsRWxlbWVudHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRGaWxlcyA9IHJlbGF0ZWRGaWxlcz8uY29udGVudD8ubWFwKGZpbGUgPT4gKHtcbiAgICAgICAgLi4uZmlsZSxcbiAgICAgICAgY3JlYXRlZEJ5OiBmaWxlLmNyZWF0ZWRCeSB8fCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlzdC5hdXRvbWF0aWNhbGx5R2VuZXJhdGVkJyksXG4gICAgICAgIHNpemU6IHRoaXMuYnl0ZXNUb01lZ2FieXRlcyhmaWxlLmJlc3RhbmRzb212YW5nKSxcbiAgICAgICAgdGFnczogZmlsZS50cmVmd29vcmRlbj8ubWFwKCh0cmVmd29vcmQ6IHN0cmluZykgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiB0cmVmd29vcmQsXG4gICAgICAgIH0pKSxcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiB0cmFuc2xhdGVkRmlsZXMgfHwgW107XG4gICAgfSksXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfSksXG4gICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICB0aGlzLnNob3daYWFrTGlua1dhcm5pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5faXRlbXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZW5hYmxlUGJhY0RvY3VtZW50ZW5BcGlEb2N1bWVudHMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0RmVhdHVyZVRvZ2dsZU9ic2VydmFibGUoJ2VuYWJsZVBiYWNEb2N1bWVudGVuQXBpRG9jdW1lbnRzJyk7XG5cbiAgcHVibGljIGZpbGVQZXJtaXNzaW9uczoge1xuICAgIFtmaWxlSWQ6IHN0cmluZ106IHtjYW5WaWV3OiBib29sZWFuOyBjYW5Nb2RpZnk6IGJvb2xlYW47IGNhbkRlbGV0ZTogYm9vbGVhbn07XG4gIH0gPSB7fTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY2FuQ3JlYXRlUmVzb3VyY2UkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5kb2N1bWVudElkJC5waXBlKFxuICAgIHN3aXRjaE1hcChkb2N1bWVudElkID0+XG4gICAgICB0aGlzLmdldFBlcm1pc3Npb24oQ0FOX0NSRUFURV9SRVNPVVJDRV9QRVJNSVNTSU9OLCB7XG4gICAgICAgIHJlc291cmNlOiBSRVNPVVJDRV9QRVJNSVNTSU9OX1JFU09VUkNFLmpzb25TY2hlbWFEb2N1bWVudCxcbiAgICAgICAgaWRlbnRpZmllcjogZG9jdW1lbnRJZCxcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVwbG9hZFByb3ZpZGVyU2VydmljZTogVXBsb2FkUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG93bmxvYWRTZXJ2aWNlOiBEb3dubG9hZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQcm92aWRlclNlcnZpY2U6IFVzZXJQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRlbkFwaUNvbHVtblNlcnZpY2U6IERvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlOiBEb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlcihGaWx0ZXIxNik7XG4gICAgdGhpcy52YWx0aW1vRW5kcG9pbnRVcmkgPSBjb25maWdTZXJ2aWNlLmNvbmZpZy52YWx0aW1vQXBpLmVuZHBvaW50VXJpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0SW5pdGlhbFBhcmFtcygpO1xuICAgIHRoaXMuc2V0VXBsb2FkUHJvY2Vzc0xpbmtlZCgpO1xuICAgIHRoaXMuaXNVc2VyQWRtaW4oKTtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtGaWx0ZXIxNiwgVGFnR3JvdXAxNiwgVXBsb2FkMTZdKTtcbiAgICB0aGlzLnJlZ2lzdGVyUGVybWlzc2lvblN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlclBlcm1pc3Npb25TdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5yZWxhdGVkRmlsZXMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChmaWxlcyA9PlxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICAgIGZpbGVzOiBvZihmaWxlcyksXG4gICAgICAgICAgICAgIGNhblZpZXc6IHRoaXMuZ2V0UGVybWlzc2lvbnMoZmlsZXMsIENBTl9WSUVXX1JFU09VUkNFX1BFUk1JU1NJT04pLFxuICAgICAgICAgICAgICBjYW5Nb2RpZnk6IHRoaXMuZ2V0UGVybWlzc2lvbnMoZmlsZXMsIENBTl9NT0RJRllfUkVTT1VSQ0VfUEVSTUlTU0lPTiksXG4gICAgICAgICAgICAgIGNhbkRlbGV0ZTogdGhpcy5nZXRQZXJtaXNzaW9ucyhmaWxlcywgQ0FOX0RFTEVURV9SRVNPVVJDRV9QRVJNSVNTSU9OKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUocGVybWlzc2lvbnMgPT5cbiAgICAgICAgICBwZXJtaXNzaW9ucy5maWxlcy5tYXAoXG4gICAgICAgICAgICBmaWxlID0+XG4gICAgICAgICAgICAgICh0aGlzLmZpbGVQZXJtaXNzaW9uc1tmaWxlLmZpbGVJZF0gPSB7XG4gICAgICAgICAgICAgICAgY2FuVmlldzogcGVybWlzc2lvbnMuY2FuVmlld1tmaWxlLmZpbGVJZF0sXG4gICAgICAgICAgICAgICAgY2FuTW9kaWZ5OiBwZXJtaXNzaW9ucy5jYW5Nb2RpZnlbZmlsZS5maWxlSWRdLFxuICAgICAgICAgICAgICAgIGNhbkRlbGV0ZTogcGVybWlzc2lvbnMuY2FuRGVsZXRlW2ZpbGUuZmlsZUlkXSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRlbGV0ZUFjdGlvbkNsaWNrKGl0ZW06IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnQgPSBpdGVtO1xuICAgIHRoaXMuc2hvd0RlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZURvY3VtZW50KCk6IHZvaWQge1xuICAgIHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UuZGVsZXRlRG9jdW1lbnQodGhpcy5kb2N1bWVudCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVmZXRjaERvY3VtZW50cygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGJ5dGVzVG9NZWdhYnl0ZXMoYnl0ZXM6IG51bWJlciB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCFieXRlcykgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgbWVnYWJ5dGVzID0gYnl0ZXMgLyAoMTAyNCAqIDEwMjQpO1xuICAgIGlmIChtZWdhYnl0ZXMgPCAxKSB7XG4gICAgICByZXR1cm4gYCR7TWF0aC5jZWlsKG1lZ2FieXRlcyAqIDEwMDApfSBLQmA7XG4gICAgfSBlbHNlIGlmIChtZWdhYnl0ZXMgPCAxMDAwKSB7XG4gICAgICByZXR1cm4gbWVnYWJ5dGVzLnRvRml4ZWQoMikgKyAnIE1CJztcbiAgICB9XG5cbiAgICByZXR1cm4gKG1lZ2FieXRlcyAvIDEwMDApLnRvRml4ZWQoMikgKyAnIEdCJztcbiAgfVxuXG4gIHB1YmxpYyBnZXRVcGxvYWRCdXR0b25Ub29sdGlwKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMudXBsb2FkUHJvY2Vzc0xpbmtlZFNldCAmJiB0aGlzLnVwbG9hZFByb2Nlc3NMaW5rZWQpIHtcbiAgICAgIHJldHVybiAnVXBsb2FkJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNBZG1pbikge1xuICAgICAgcmV0dXJuICdkb3NzaWVyLmRvY3VtZW50ZW4ubm9Qcm9jZXNzTGlua2VkLmFkbWluUm9sZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdkb3NzaWVyLmRvY3VtZW50ZW4ubm9Qcm9jZXNzTGlua2VkLnJlZ3VsYXJVc2VyJztcbiAgfVxuXG4gIHB1YmxpYyBpc1VzZXJBZG1pbigpIHtcbiAgICB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2VcbiAgICAgIC5nZXRVc2VyU3ViamVjdCgpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgdXNlcklkZW50aXR5ID0+IHtcbiAgICAgICAgICB0aGlzLmlzQWRtaW4gPSB1c2VySWRlbnRpdHkucm9sZXMuaW5jbHVkZXMoJ1JPTEVfQURNSU4nKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBZG1pbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIG1ldGFkYXRhU2V0KG1ldGFkYXRhOiBEb2N1bWVudGVuQXBpTWV0YWRhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnVwbG9hZGluZyQubmV4dCh0cnVlKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZmlsZVRvQmVVcGxvYWRlZCQsIHRoaXMuZG9jdW1lbnRJZCRdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKFtmaWxlLCBkb2N1bWVudElkXSkgPT4ge1xuICAgICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xuICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUkLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZS51cGRhdGVEb2N1bWVudChmaWxlLCBtZXRhZGF0YSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5yZWZldGNoRG9jdW1lbnRzKCk7XG4gICAgICAgICAgICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgdGhpcy5maWxlVG9CZVVwbG9hZGVkJC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkUHJvdmlkZXJTZXJ2aWNlXG4gICAgICAgICAgICAgIC51cGxvYWRGaWxlV2l0aE1ldGFkYXRhKGZpbGUsIGRvY3VtZW50SWQsIG1ldGFkYXRhKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmV0Y2hEb2N1bWVudHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciQubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoREVGQVVMVF9QQUdJTkFUSU9OKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlVG9CZVVwbG9hZGVkJC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25Eb3dubG9hZEFjdGlvbkNsaWNrKGZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWREb2N1bWVudChmaWxlLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVkaXRNZXRhZGF0YShmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRNb2RlJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZmlsZVRvQmVVcGxvYWRlZCQubmV4dChmaWxlKTtcbiAgICB0aGlzLnNob3dVcGxvYWRNb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZU1ldGFkYXRhTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93VXBsb2FkTW9kYWwkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmlzRWRpdE1vZGUkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuZmlsZVRvQmVVcGxvYWRlZCQubmV4dChldmVudC50YXJnZXQuZmlsZXNbMF0pO1xuICAgIHRoaXMuc2hvd1VwbG9hZE1vZGFsJC5uZXh0KHRydWUpO1xuICAgIHRoaXMucmVzZXRGaWxlSW5wdXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5hdmlnYXRlVG9DYXNlQWRtaW5DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4ge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvZG9zc2llci1tYW5hZ2VtZW50L2Rvc3NpZXIvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfWBdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd0NsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWxlUGVybWlzc2lvbnNbZXZlbnQuZmlsZUlkXT8uY2FuVmlldykge1xuICAgICAgdGhpcy5kb3dubG9hZERvY3VtZW50KGV2ZW50LCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUGFnaW5hdGlvbkNsaWNrZWQocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi50aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCksIHBhZ2V9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblBhZ2luYXRpb25TZXQoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qge2NvbGxlY3Rpb25TaXplLCBwYWdlfSA9IHRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKTtcbiAgICBjb25zdCByZXNldFBhZ2U6IGJvb2xlYW4gPSBNYXRoLmNlaWwoK2NvbGxlY3Rpb25TaXplIC8gc2l6ZSkgPD0gK3BhZ2UgJiYgK2NvbGxlY3Rpb25TaXplID4gMDtcbiAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKSwgc2l6ZSwgLi4uKHJlc2V0UGFnZSAmJiB7cGFnZTogMX0pfSk7XG4gIH1cblxuICBwdWJsaWMgb25VcGxvYWRCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgb25GaWx0ZXJFdmVudChmaWx0ZXI6IERvY3VtZW50ZW5BcGlGaWx0ZXJNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlciQubmV4dChmaWx0ZXIpO1xuICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7Li4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLCAuLi5ERUZBVUxUX1BBR0lOQVRJT059KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNvcnRDaGFuZ2VkKHNvcnRTdGF0ZTogU29ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5fc29ydCQubmV4dChcbiAgICAgIHNvcnRTdGF0ZS5pc1NvcnRpbmdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzb3J0OiBgJHtzb3J0U3RhdGUuc3RhdGUubmFtZSA9PT0gJ3NpemUnID8gRE9DVU1FTlRFTl9DT0xVTU5fS0VZUy5CRVNUQU5EU09NVkFORyA6IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lfSwke3NvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb259YCxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVmZXRjaERvY3VtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWZldGNoJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZERpc2FibGVkKGZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5maWxlUGVybWlzc2lvbnNbZmlsZS5maWxlSWRdPy5jYW5WaWV3O1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0RGlzYWJsZWQoZmlsZTogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICghdGhpcy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkLnZhbHVlLnN1cHBvcnRzVXBkYXRpbmdEZWZpbml0aXZlRG9jdW1lbnQgJiZcbiAgICAgICAgZmlsZS5zdGF0dXMgPT09ICdkZWZpbml0aWVmJykgfHxcbiAgICAgICF0aGlzLmZpbGVQZXJtaXNzaW9uc1tmaWxlLmZpbGVJZF0/LmNhbk1vZGlmeVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZURpc2FibGVkKGZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5maWxlUGVybWlzc2lvbnNbZmlsZS5maWxlSWRdPy5jYW5EZWxldGU7XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkRG9jdW1lbnQocmVsYXRlZEZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSwgZm9yY2VEb3dubG9hZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWRTZXJ2aWNlLmRvd25sb2FkRmlsZShcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50ZW4tYXBpLyR7cmVsYXRlZEZpbGUucGx1Z2luQ29uZmlndXJhdGlvbklkfS9maWxlcy8ke3JlbGF0ZWRGaWxlLmZpbGVJZH0vZG93bmxvYWRgLFxuICAgICAgcmVsYXRlZEZpbGUuYmVzdGFuZHNuYWFtID8/ICcnLFxuICAgICAgZm9yY2VEb3dubG9hZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5RdWVyeVBhcmFtc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgICAgICB0aGlzLmRvY3VtZW50SWQkLFxuICAgICAgICB0aGlzLmZpbHRlciQsXG4gICAgICAgIHRoaXMuX3NvcnQkLFxuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLFxuICAgICAgXSkuc3Vic2NyaWJlKChbZGVmaW5pdGlvbk5hbWUsIGRvY3VtZW50SWQsIGZpbHRlciwgc29ydCwgcGFnaW5hdGlvbl0pID0+IHtcbiAgICAgICAgY29uc3Qge3NpemUsIHBhZ2V9ID0gcGFnaW5hdGlvbjtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvZG9zc2llcnMvJHtkZWZpbml0aW9uTmFtZX0vZG9jdW1lbnQvJHtkb2N1bWVudElkfS9kb2N1bWVudHNgXSwge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7Li4uZmlsdGVyLCAuLi5zb3J0LCBzaXplLCBwYWdlOiBwYWdlIC0gMX0sXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEZpbGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBwcml2YXRlIHNldFVwbG9hZFByb2Nlc3NMaW5rZWQoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChkb2N1bWVudERlZmluaXRpb25OYW1lID0+XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm92aWRlclNlcnZpY2UuY2hlY2tVcGxvYWRQcm9jZXNzTGluayhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgICApLFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkUHJvY2Vzc0xpbmtlZFNldCA9IHRydWU7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaW5rZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgdGhpcy51cGxvYWRQcm9jZXNzTGlua2VkID0gbGlua2VkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWFwKHF1ZXJ5UGFyYW1zID0+IHtcbiAgICAgICAgICBjb25zdCB7c29ydCwgc2l6ZSwgcGFnZSwgLi4uZmlsdGVyfSA9IHF1ZXJ5UGFyYW1zWydwYXJhbXMnXTtcbiAgICAgICAgICByZXR1cm4ge3NvcnQsIGZpbHRlciwgc2l6ZSwgcGFnZX07XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7ZmlsdGVyLCBzb3J0LCBzaXplLCBwYWdlfSkgPT4ge1xuICAgICAgICB0aGlzLl9zb3J0JC5uZXh0KHtzb3J0fSk7XG4gICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KGZpbHRlcik7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7XG4gICAgICAgICAgLi4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLFxuICAgICAgICAgIHNpemU6ICtzaXplLFxuICAgICAgICAgIHBhZ2U6ICsocGFnZSA/PyAwKSArIDEsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9wZW5RdWVyeVBhcmFtc1N1YnNjcmlwdGlvbigpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNvcnRTdGF0ZUZyb21Tb3J0U3RyaW5nKHNvcnRTdHJpbmc/OiBzdHJpbmcpOiBTb3J0U3RhdGUgfCBudWxsIHtcbiAgICBjb25zdCBzcGxpdFN0cmluZyA9IHNvcnRTdHJpbmcgJiYgc29ydFN0cmluZy5zcGxpdCgnLCcpO1xuICAgIGlmIChzcGxpdFN0cmluZyAmJiBzcGxpdFN0cmluZz8ubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNTb3J0aW5nOiB0cnVlLFxuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIG5hbWU6IHNwbGl0U3RyaW5nWzBdLFxuICAgICAgICAgIGRpcmVjdGlvbjogc3BsaXRTdHJpbmdbMV0gYXMgRGlyZWN0aW9uLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVybWlzc2lvbnMoXG4gICAgZmlsZXM6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZVtdLFxuICAgIHBlcm1pc3Npb25SZXF1ZXN0OiBQZXJtaXNzaW9uUmVxdWVzdFxuICApOiBPYnNlcnZhYmxlPHtcbiAgICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xuICB9PiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoXG4gICAgICBmaWxlcy5tYXAoZmlsZSA9PlxuICAgICAgICB0aGlzLmdldFBlcm1pc3Npb24ocGVybWlzc2lvblJlcXVlc3QsIHtcbiAgICAgICAgICByZXNvdXJjZTogUkVTT1VSQ0VfUEVSTUlTU0lPTl9SRVNPVVJDRS5yZXNvdXJjZVBlcm1pc3Npb24sXG4gICAgICAgICAgaWRlbnRpZmllcjogZmlsZS5maWxlSWQsXG4gICAgICAgIH0pLnBpcGUobWFwKGF2YWlsYWJsZSA9PiAoe1tmaWxlLmZpbGVJZF06IGF2YWlsYWJsZX0pKSlcbiAgICAgIClcbiAgICApLnBpcGUoXG4gICAgICBtYXAocGVybWlzc2lvbnMgPT4gcGVybWlzc2lvbnMucmVkdWNlKChhY2MsIHBlcm1pc3Npb24pID0+ICh7Li4uYWNjLCAuLi5wZXJtaXNzaW9ufSksIHt9KSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtaXNzaW9uKHBlcm1pc3Npb25SZXF1ZXN0OiBQZXJtaXNzaW9uUmVxdWVzdCwgY29udGV4dD86IGFueSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZVBiYWNEb2N1bWVudGVuQXBpRG9jdW1lbnRzJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGVuYWJsZWQgPT4ge1xuICAgICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGVybWlzc2lvblNlcnZpY2UucmVxdWVzdFBlcm1pc3Npb24ocGVybWlzc2lvblJlcXVlc3QsIGNvbnRleHQpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG48ZGl2XG4gIGNsYXNzPVwiY2FyYm9uLWRvY3VtZW50LXRhYmxlLXdyYXBwZXJcIlxuICAqbmdJZj1cIntcbiAgICBsb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jLFxuICAgIGZpZWxkc0xvYWRpbmc6IGZpZWxkc0xvYWRpbmckIHwgYXN5bmMsXG4gICAgdXBsb2FkaW5nOiB1cGxvYWRpbmckIHwgYXN5bmMsXG4gICAgcmVsYXRlZEZpbGVzOiByZWxhdGVkRmlsZXMkIHwgYXN5bmMsXG4gICAgZmllbGRzOiBmaWVsZHMkIHwgYXN5bmMsXG4gICAgc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzOiBzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkIHwgYXN5bmMsXG4gICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvbiQgfCBhc3luYyxcbiAgICBzb3J0U3RhdGU6IHNvcnRTdGF0ZSQgfCBhc3luYyxcbiAgICB1cGxvYWRGaWVsZHM6IHVwbG9hZEZpZWxkcyQgfCBhc3luYyxcbiAgICBkZWZhdWx0VmFsdWVzOiBkZWZhdWx0VmFsdWVzJCB8IGFzeW5jLFxuICAgIGhpZGVGaWVsZHM6IGhpZGVGaWVsZHMkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbj5cbiAgQGlmICgoIW9icy5maWVsZHNMb2FkaW5nICYmIG9icy5maWVsZHMubGVuZ3RoKSB8fCBvYnMuZmllbGRzTG9hZGluZykge1xuICAgIDx2YWx0aW1vLWNhcmJvbi1saXN0XG4gICAgICBbYWN0aW9uSXRlbXNdPVwiYWN0aW9uSXRlbXNcIlxuICAgICAgW2l0ZW1zXT1cIm9icy5yZWxhdGVkRmlsZXNcIlxuICAgICAgW2ZpZWxkc109XCJvYnMuZmllbGRzXCJcbiAgICAgIFtpbml0aWFsU29ydFN0YXRlXT1cIm9icy5zb3J0U3RhdGVcIlxuICAgICAgW2xvYWRpbmddPVwib2JzLmxvYWRpbmdcIlxuICAgICAgW3BhZ2luYXRpb25dPVwib2JzLnBhZ2luYXRpb25cIlxuICAgICAgW3BhZ2luYXRvckNvbmZpZ109XCJwYWdpbmF0b3JDb25maWdcIlxuICAgICAgcGFnaW5hdGlvbklkZW50aWZpZXI9XCJkb2N1bWVudGVuQXBpXCJcbiAgICAgIChyb3dDbGlja2VkKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXG4gICAgICAoc29ydENoYW5nZWQpPVwiXG4gICAgICAgIG9icz8uc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPy5zdXBwb3J0c1NvcnRhYmxlQ29sdW1ucyAmJiBvblNvcnRDaGFuZ2VkKCRldmVudClcbiAgICAgIFwiXG4gICAgICAocGFnaW5hdGlvbkNsaWNrZWQpPVwib25QYWdpbmF0aW9uQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgIChwYWdpbmF0aW9uU2V0KT1cIm9uUGFnaW5hdGlvblNldCgkZXZlbnQpXCJcbiAgICAgIGhpZGVDb2x1bW5IZWFkZXJcbiAgICA+XG4gICAgICA8ZGl2IGNhcmJvblRvb2xiYXJDb250ZW50PlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZXNcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgaGlkZGVuXG4gICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgLz5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJvYnM/LnN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcz8uc3VwcG9ydHNGaWx0ZXJhYmxlQ29sdW1uc1wiXG4gICAgICAgICAgW2Nkc092ZXJmbG93TWVudV09XCJvdmVyZmxvd0ZpbHRlclwiXG4gICAgICAgICAgW2N1c3RvbVBhbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgICAgIFtmbGlwXT1cInRydWVcIlxuICAgICAgICAgIFtvZmZzZXRdPVwie3g6IDAsIHk6IDQ3fVwiXG4gICAgICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwiZmlsdGVyXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9SZXN1bHRzXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC92YWx0aW1vLWNhcmJvbi1saXN0PlxuICB9IEBlbHNlIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cIm5hdmlnYXRlVG9DYXNlQWRtaW5CdXR0b25cIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIid6Z3cuZG9jdW1lbnRzLm5vQ29sdW1ucy5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgW3RpdGxlXT1cIid6Z3cuZG9jdW1lbnRzLm5vQ29sdW1ucy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfVxuXG4gIDx2YWx0aW1vLWRvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsXG4gICAgW2RlZmF1bHRWYWx1ZXNdPVwib2JzLmRlZmF1bHRWYWx1ZXNcIlxuICAgIFtkaXNhYmxlQXV0aG9yXT1cIm9icy51cGxvYWRGaWVsZHM/LmF1dGV1cj8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlQ29uZmlkZW50aWFsaXR5TGV2ZWxdPVwib2JzLnVwbG9hZEZpZWxkcz8udmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVDcmVhdGlvbkRhdGVdPVwib2JzLnVwbG9hZEZpZWxkcz8uY3JlYXRpZWRhdHVtPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVEZXNjcmlwdGlvbl09XCJvYnMudXBsb2FkRmllbGRzPy5iZXNjaHJpanZpbmc/LnJlYWRvbmx5XCJcbiAgICBbZGlzYWJsZURvY3VtZW50VGl0bGVdPVwib2JzLnVwbG9hZEZpZWxkcz8udGl0ZWw/LnJlYWRvbmx5XCJcbiAgICBbZGlzYWJsZURvY3VtZW50VHlwZV09XCJvYnMudXBsb2FkRmllbGRzPy5pbmZvcm1hdGllb2JqZWN0dHlwZT8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlRmlsZW5hbWVdPVwib2JzLnVwbG9hZEZpZWxkcz8uYmVzdGFuZHNuYWFtPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVMYW5ndWFnZV09XCJvYnMudXBsb2FkRmllbGRzPy50YWFsPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVTdGF0dXNdPVwib2JzLnVwbG9hZEZpZWxkcz8uc3RhdHVzPy5yZWFkb25seVwiXG4gICAgW2hpZGVGaWVsZHNdPVwib2JzLmhpZGVGaWVsZHNcIlxuICAgIFtvcGVuXT1cInNob3dVcGxvYWRNb2RhbCQgfCBhc3luY1wiXG4gICAgW2Rpc2FibGVkJF09XCJtb2RhbERpc2FibGVkJFwiXG4gICAgW2ZpbGUkXT1cImZpbGVUb0JlVXBsb2FkZWQkXCJcbiAgICBbaXNFZGl0TW9kZV09XCJpc0VkaXRNb2RlJCB8IGFzeW5jXCJcbiAgICBbc3VwcG9ydHNUcmVmd29vcmRlbl09XCJvYnM/LnN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcz8uc3VwcG9ydHNUcmVmd29vcmRlblwiXG4gICAgKG1vZGFsQ2xvc2UpPVwiY2xvc2VNZXRhZGF0YU1vZGFsKClcIlxuICAgIChtZXRhZGF0YSk9XCJtZXRhZGF0YVNldCgkZXZlbnQpXCJcbiAgPjwvdmFsdGltby1kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbD5cbjwvZGl2PlxuXG48dmFsdGltby1jb25maXJtYXRpb24tbW9kYWxcbiAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImRhc2hib2FyZE1hbmFnZW1lbnQuZGVsZXRlTW9kYWwuY29uZmlybVwiXG4gIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuZG9jdW1lbnRlbi5kZWxldGVDb25maXJtYXRpb25Nb2RhbC5jb250ZW50XCJcbiAgY29uZmlybUJ1dHRvblR5cGU9XCJkYW5nZXJcIlxuICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5kb2N1bWVudGVuLmRlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsLnRpdGxlXCJcbiAgW3Nob3dNb2RhbFN1YmplY3QkXT1cInNob3dEZWxldGVDb25maXJtYXRpb25Nb2RhbCRcIlxuICAoY29uZmlybUV2ZW50KT1cImRlbGV0ZURvY3VtZW50KClcIlxuPlxuPC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNub1Jlc3VsdHM+XG4gIEBpZiAoKGZpbHRlciQgfCBhc3luYyB8IGtleXZhbHVlKT8ubGVuZ3RoKSB7XG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2FjdGlvbl09XCJyZXNldEZpbHRlckJ1dHRvblwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ3pndy5kb2N1bWVudHMubm9SZXN1bHRzLmZpbHRlckRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdGl0bGVdPVwiJ3pndy5kb2N1bWVudHMubm9SZXN1bHRzLmZpbHRlclRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuICB9IEBlbHNlIGlmIChzaG93WmFha0xpbmtXYXJuaW5nICYmIGlzQWRtaW4pIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cIm5hdmlnYXRlVG9DYXNlQWRtaW5CdXR0b25cIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb3NzaWVyLmRvY3VtZW50ZW4ubm9aYWFrRm91bmQnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInZG9zc2llci5kb2N1bWVudGVuLm5vWmFha0ZvdW5kVGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIH0gQGVsc2Uge1xuICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgIFthY3Rpb25dPVwidXBsb2FkQnV0dG9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9zc2llci5kb2N1bWVudGVuLm5vRmlsZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInZG9zc2llci5kb2N1bWVudGVuLm5vRmlsZXNUaXRsZScgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNvdmVyZmxvd0ZpbHRlcj5cbiAgPHZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFiLWRvY3VtZW50ZW4tYXBpLWZpbHRlclxuICAgIFtwcmVmaWxsRmlsdGVyXT1cImZpbHRlciQgfCBhc3luY1wiXG4gICAgKGZpbHRlckV2ZW50KT1cIm9uRmlsdGVyRXZlbnQoJGV2ZW50KVwiXG4gID48L3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFiLWRvY3VtZW50ZW4tYXBpLWZpbHRlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmVzZXRGaWx0ZXJCdXR0b24+XG4gIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkZpbHRlckV2ZW50KG51bGwpXCI+XG4gICAge3sgJ1Jlc2V0IGZpbHRlcicgfCB0cmFuc2xhdGUgfX1cblxuICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJ0cmFzaC1jYW5cIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3VwbG9hZEJ1dHRvbiBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICA8YnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cIlxuICAgICAgKHVwbG9hZFByb2Nlc3NMaW5rZWRTZXQgJiYgIXVwbG9hZFByb2Nlc3NMaW5rZWQpIHx8XG4gICAgICBzaG93WmFha0xpbmtXYXJuaW5nIHx8XG4gICAgICBkaXNhYmxlZCB8fFxuICAgICAgKGNhbkNyZWF0ZVJlc291cmNlJCB8IGFzeW5jKSA9PT0gZmFsc2VcbiAgICBcIlxuICAgIFt2VG9vbHRpcF09XCJnZXRVcGxvYWRCdXR0b25Ub29sdGlwKCkgfCB0cmFuc2xhdGVcIlxuICAgIChjbGljayk9XCJvblVwbG9hZEJ1dHRvbkNsaWNrKClcIlxuICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICA+XG4gICAge3sgJ1VwbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwidXBsb2FkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvblRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICBAaWYgKGRhdGEuaXRlbVtkYXRhLmtleV0pIHtcbiAgICB7eyAnZG9jdW1lbnQuJyArIGRhdGEuaXRlbVtkYXRhLmtleV0gfCB0cmFuc2xhdGUgfX1cbiAgfSBAZWxzZSB7XG4gICAgLVxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25hdmlnYXRlVG9DYXNlQWRtaW5CdXR0b24+XG4gIDxidXR0b24gKGNsaWNrKT1cIm9uTmF2aWdhdGVUb0Nhc2VBZG1pbkNsaWNrKClcIiBjZHNCdXR0b249XCJwcmltYXJ5XCI+XG4gICAge3sgJ2Rvc3NpZXIuZG9jdW1lbnRlbi5uYXZpZ2F0ZVRvQ2FzZUFkbWluJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInNldHRpbmdzXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vemd3L3NyYy9saWIvbW9kdWxlcy9kb2N1bWVudGVuLWFwaS9jb21wb25lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy9kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzL2RvY3VtZW50ZW4tYXBpLWRvY3VtZW50cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUE4QyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFL0YsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBQyxlQUFlLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUVMLGdCQUFnQixFQUVoQix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUl4QixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsNEJBQTRCLEVBRTVCLDRCQUE0QixHQUU3QixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBYyxNQUFNLDJCQUEyQixDQUFD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VyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLFVBQVUsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFFTyxhQUFhLENBQUMsaUJBQW9DLEVBQUUsT0FBYTtRQUN2RSxPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQ2hELFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQTVrQlUsK0NBQStDO21HQUEvQywrQ0FBK0Msb1VDekY1RCx1d05BeUxBLCtoQ0QzR0ksWUFBWSx5WkFDWixnQkFBZ0IsMjFCQUNoQixtQ0FBbUMscWFBQ25DLFlBQVksZ01BQ1osVUFBVSw0TkFDVixlQUFlLDRGQUNmLDRCQUE0QixzSEFDNUIsWUFBWSxtUUFDWix1QkFBdUI7OzRGQUdkLCtDQUErQztrQkFqQjNELFNBQVM7K0JBQ0UscURBQXFELGNBR25ELElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsbUNBQW1DO3dCQUNuQyxZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsZUFBZTt3QkFDZiw0QkFBNEI7d0JBQzVCLFlBQVk7d0JBQ1osdUJBQXVCO3FCQUN4QjsrYkFHdUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNZLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtGaWx0ZXIxNiwgVGFnR3JvdXAxNiwgVXBsb2FkMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aW9uSXRlbSxcbiAgQ2FyYm9uTGlzdE1vZHVsZSxcbiAgQ29sdW1uQ29uZmlnLFxuICBDb25maXJtYXRpb25Nb2RhbE1vZHVsZSxcbiAgREVGQVVMVF9QQUdJTkFUSU9OLFxuICBERUZBVUxUX1BBR0lOQVRPUl9DT05GSUcsXG4gIERvY3VtZW50ZW5BcGlNZXRhZGF0YSxcbiAgUGFnaW5hdGlvbixcbiAgU29ydFN0YXRlLFxuICBWaWV3VHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2UsIERpcmVjdGlvbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7XG4gIENBTl9DUkVBVEVfUkVTT1VSQ0VfUEVSTUlTU0lPTixcbiAgQ0FOX0RFTEVURV9SRVNPVVJDRV9QRVJNSVNTSU9OLFxuICBDQU5fTU9ESUZZX1JFU09VUkNFX1BFUk1JU1NJT04sXG4gIENBTl9WSUVXX1JFU09VUkNFX1BFUk1JU1NJT04sXG4gIERvd25sb2FkU2VydmljZSxcbiAgUkVTT1VSQ0VfUEVSTUlTU0lPTl9SRVNPVVJDRSxcbiAgVXBsb2FkUHJvdmlkZXJTZXJ2aWNlLFxufSBmcm9tICdAdmFsdGltby9yZXNvdXJjZSc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7QnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIEljb25Nb2R1bGUsIEljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFJlcGxheVN1YmplY3QsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ09MVU1OX1ZJRVdfVFlQRVMsXG4gIENvbmZpZ3VyZWRDb2x1bW4sXG4gIERPQ1VNRU5URU5fQ09MVU1OX0tFWVMsXG4gIERvY3VtZW50ZW5BcGlGaWx0ZXJNb2RlbCxcbiAgRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlLFxuICBTdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlLCBEb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7RG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpRmlsdGVyQ29tcG9uZW50fSBmcm9tICcuLi9kb2N1bWVudGVuLWFwaS1maWx0ZXIvZG9jdW1lbnRlbi1hcGktZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlNZXRhZGF0YU1vZGFsQ29tcG9uZW50fSBmcm9tICcuLi9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkRGVmYXVsdFZhbHVlcyxcbiAgRG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkcyxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL2RvY3VtZW50ZW4tYXBpLXVwbG9hZC1maWVsZC5tb2RlbCc7XG5pbXBvcnQge1Blcm1pc3Npb25SZXF1ZXN0LCBQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vYWNjZXNzLWNvbnRyb2wnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhYi1kb2N1bWVudGVuLWFwaS1kb2N1bWVudHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnRlbi1hcGktZG9jdW1lbnRzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQ2FyYm9uTGlzdE1vZHVsZSxcbiAgICBEb2N1bWVudGVuQXBpTWV0YWRhdGFNb2RhbENvbXBvbmVudCxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgRG9jdW1lbnRlbkFwaUZpbHRlckNvbXBvbmVudCxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgQ29uZmlybWF0aW9uTW9kYWxNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJEZXRhaWxUYWJEb2N1bWVudGVuQXBpRG9jdW1lbnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBmaWxlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RyYW5zbGF0aW9uVGVtcGxhdGUnKSB0cmFuc2xhdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgZmlsdGVyKGNhc2VEZWZpbml0aW9uTmFtZSA9PiAhIWNhc2VEZWZpbml0aW9uTmFtZSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJCA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxTdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMgfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkOiBPYnNlcnZhYmxlPFN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcz4gPVxuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY2FzZURlZmluaXRpb25OYW1lID0+XG4gICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlLmdldFN1cHBvcnRlZEFwaUZlYXR1cmVzKGNhc2VEZWZpbml0aW9uTmFtZSlcbiAgICAgICksXG4gICAgICB0YXAoc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzID0+XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzJC5uZXh0KHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcylcbiAgICAgIClcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWVsZHMkOiBPYnNlcnZhYmxlPENvbHVtbkNvbmZpZ1tdPiA9IHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgdGFwKCgpID0+IHRoaXMuZmllbGRzTG9hZGluZyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlLmdldENvbmZpZ3VyZWRDb2x1bW5zKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgICB0aGlzLl9zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkLFxuICAgICAgICB0aGlzLl9zb3J0JCxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFtjb2x1bW5zLCBzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMsIHNvcnRdKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0U29ydENvbHVtbjogQ29uZmlndXJlZENvbHVtbiB8IHVuZGVmaW5lZCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbHVtbjogQ29uZmlndXJlZENvbHVtbikgPT4gISFjb2x1bW4uZGVmYXVsdFNvcnRcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgICEhZGVmYXVsdFNvcnRDb2x1bW4gJiZcbiAgICAgICAgIXNvcnQ/LnNvcnQgJiZcbiAgICAgICAgc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLnN1cHBvcnRzU29ydGFibGVDb2x1bW5zXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fc29ydCQubmV4dCh7c29ydDogYCR7ZGVmYXVsdFNvcnRDb2x1bW4ua2V5fSwke2RlZmF1bHRTb3J0Q29sdW1uLmRlZmF1bHRTb3J0fWB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW46IENvbmZpZ3VyZWRDb2x1bW4pID0+ICh7XG4gICAgICAgIGtleTogY29sdW1uLmtleSA9PT0gRE9DVU1FTlRFTl9DT0xVTU5fS0VZUy5CRVNUQU5EU09NVkFORyA/ICdzaXplJyA6IGNvbHVtbi5rZXksXG4gICAgICAgIGxhYmVsOiBgemd3LmRvY3VtZW50Q29sdW1ucy4ke2NvbHVtbi5rZXl9YCxcbiAgICAgICAgdmlld1R5cGU6ICFDT0xVTU5fVklFV19UWVBFU1tjb2x1bW4ua2V5XSA/IFZpZXdUeXBlLlRFWFQgOiBDT0xVTU5fVklFV19UWVBFU1tjb2x1bW4ua2V5XSxcbiAgICAgICAgLi4uKENPTFVNTl9WSUVXX1RZUEVTW2NvbHVtbi5rZXldID09PSBWaWV3VHlwZS5URU1QTEFURSAmJiB7XG4gICAgICAgICAgdGVtcGxhdGU6IHRoaXMudHJhbnNsYXRpb25UZW1wbGF0ZSxcbiAgICAgICAgICB0ZW1wbGF0ZURhdGE6IHtrZXk6IGNvbHVtbi5rZXl9LFxuICAgICAgICB9KSxcbiAgICAgICAgLi4uKGNvbHVtbi5rZXkgPT09IERPQ1VNRU5URU5fQ09MVU1OX0tFWVMuQ1JFQVRJRURBVFVNICYmIHtmb3JtYXQ6ICdERC1NTS1ZWVlZJ30pLFxuICAgICAgICBzb3J0YWJsZTogY29sdW1uLnNvcnRhYmxlICYmIHN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcy5zdXBwb3J0c1NvcnRhYmxlQ29sdW1ucyxcbiAgICAgIH0pKTtcbiAgICB9KSxcbiAgICB0YXAoKCkgPT4gdGhpcy5maWVsZHNMb2FkaW5nJC5uZXh0KGZhbHNlKSlcbiAgKTtcbiAgcHVibGljIGRvY3VtZW50OiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGU7XG4gIHB1YmxpYyBhY3Rpb25JdGVtczogQWN0aW9uSXRlbVtdID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiAnZG9jdW1lbnQuZG93bmxvYWQnLFxuICAgICAgY2FsbGJhY2s6IHRoaXMub25Eb3dubG9hZEFjdGlvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICBkaXNhYmxlZENhbGxiYWNrOiB0aGlzLmRvd25sb2FkRGlzYWJsZWQuYmluZCh0aGlzKSxcbiAgICAgIHR5cGU6ICdub3JtYWwnLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6ICdkb2N1bWVudC5lZGl0JyxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLm9uRWRpdE1ldGFkYXRhLmJpbmQodGhpcyksXG4gICAgICBkaXNhYmxlZENhbGxiYWNrOiB0aGlzLmVkaXREaXNhYmxlZC5iaW5kKHRoaXMpLFxuICAgICAgdHlwZTogJ25vcm1hbCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogJ2RvY3VtZW50LmRlbGV0ZScsXG4gICAgICBjYWxsYmFjazogdGhpcy5vbkRlbGV0ZUFjdGlvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICBkaXNhYmxlZENhbGxiYWNrOiB0aGlzLmRlbGV0ZURpc2FibGVkLmJpbmQodGhpcyksXG4gICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICB9LFxuICBdO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgZmlsdGVyKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4gISFkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudElkJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnRJZCksXG4gICAgZmlsdGVyKGRvY3VtZW50SWQgPT4gISFkb2N1bWVudElkKVxuICApO1xuXG4gIHB1YmxpYyBpc0FkbWluOiBib29sZWFuO1xuICBwdWJsaWMgc2hvd1phYWtMaW5rV2FybmluZzogYm9vbGVhbjtcbiAgcHVibGljIHVwbG9hZFByb2Nlc3NMaW5rZWRTZXQgPSBmYWxzZTtcbiAgcHVibGljIHVwbG9hZFByb2Nlc3NMaW5rZWQhOiBib29sZWFuO1xuXG4gIHB1YmxpYyBpc0VkaXRNb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBhY2NlcHRlZEZpbGVzOiBzdHJpbmcgfCBudWxsID1cbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2U/LmNvbmZpZz8uY2FzZUZpbGVVcGxvYWRBY2NlcHRlZEZpbGVzIHx8IG51bGw7XG4gIHB1YmxpYyByZWFkb25seSBtYXhGaWxlU2l6ZTogbnVtYmVyID0gdGhpcy5jb25maWdTZXJ2aWNlPy5jb25maWc/LmNhc2VGaWxlU2l6ZVVwbG9hZExpbWl0TUIgfHwgNTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsZVRvQmVVcGxvYWRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbGUgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IG1vZGFsRGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93TW9kYWwkID0gbmV3IFN1YmplY3Q8bnVsbD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dVcGxvYWRNb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dEZWxldGVDb25maXJtYXRpb25Nb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdXBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IGZpZWxkc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmckID0gY29tYmluZUxhdGVzdChbdGhpcy5faXRlbXNMb2FkaW5nJCwgdGhpcy5maWVsZHNMb2FkaW5nJF0pLnBpcGUoXG4gICAgbWFwKChbaXRlbXNMb2FkaW5nLCBmaWVsZHNMb2FkaW5nXSkgPT4gaXRlbXNMb2FkaW5nIHx8IGZpZWxkc0xvYWRpbmcpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlciQgPSBuZXcgUmVwbGF5U3ViamVjdDxEb2N1bWVudGVuQXBpRmlsdGVyTW9kZWwgfCBudWxsPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhZ2luYXRpb24+KERFRkFVTFRfUEFHSU5BVElPTik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlZmV0Y2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc29ydCQgPSBuZXcgUmVwbGF5U3ViamVjdDx7c29ydDogc3RyaW5nfSB8IG51bGw+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmFsdGltb0VuZHBvaW50VXJpITogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBwYWdpbmF0b3JDb25maWcgPSB7XG4gICAgLi4uREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHLFxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IFs1LCAxMCwgMjAsIDUwLCAxMDBdLFxuICB9O1xuXG4gIHB1YmxpYyBzb3J0U3RhdGUkOiBPYnNlcnZhYmxlPFNvcnRTdGF0ZSB8IG51bGw+ID0gdGhpcy5fc29ydCQucGlwZShcbiAgICBmaWx0ZXIoc29ydFZhbHVlID0+ICEhc29ydFZhbHVlPy5zb3J0KSxcbiAgICBtYXAoc29ydFZhbHVlID0+IHRoaXMuZ2V0U29ydFN0YXRlRnJvbVNvcnRTdHJpbmcoc29ydFZhbHVlPy5zb3J0KSlcbiAgKTtcblxuICBwdWJsaWMgdXBsb2FkRmllbGRzJDogT2JzZXJ2YWJsZTxEb2N1bWVudGVuQXBpVXBsb2FkRmllbGRzPiA9IHRoaXMuZG9jdW1lbnRJZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoZG9jdW1lbnRJZCA9PiB0aGlzLmRvY3VtZW50ZW5BcGlEb2N1bWVudFNlcnZpY2UuZ2V0UHJlZmlsbGVkVXBsb2FkRmllbGRzKGRvY3VtZW50SWQpKSxcbiAgICBtYXAodXBsb2FkRmllbGRzID0+XG4gICAgICB1cGxvYWRGaWVsZHMucmVkdWNlKFxuICAgICAgICAoYWNjLCBjdXJyKSA9PiAoe1xuICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICBbY3Vyci5rZXldOiB7XG4gICAgICAgICAgICBrZXk6IGN1cnIua2V5LFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBjdXJyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHZpc2libGU6IGN1cnIudmlzaWJsZSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiBjdXJyLnJlYWRvbmx5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgZGVmYXVsdFZhbHVlcyQ6IE9ic2VydmFibGU8RG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkRGVmYXVsdFZhbHVlcz4gPVxuICAgIHRoaXMudXBsb2FkRmllbGRzJC5waXBlKFxuICAgICAgbWFwKGZvcm1GaWVsZHMgPT4gKHtcbiAgICAgICAgYXV0ZXVyOiBmb3JtRmllbGRzPy5hdXRldXI/LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nOiBmb3JtRmllbGRzPy52ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmc/LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgYmVzY2hyaWp2aW5nOiBmb3JtRmllbGRzPy5iZXNjaHJpanZpbmc/LmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdGl0ZWw6IGZvcm1GaWVsZHM/LnRpdGVsPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIGluZm9ybWF0aWVvYmplY3R0eXBlOiBmb3JtRmllbGRzPy5pbmZvcm1hdGllb2JqZWN0dHlwZT8uZGVmYXVsdFZhbHVlLFxuICAgICAgICBiZXN0YW5kc25hYW06IGZvcm1GaWVsZHM/LmJlc3RhbmRzbmFhbT8uZGVmYXVsdFZhbHVlLFxuICAgICAgICB0YWFsOiBmb3JtRmllbGRzPy50YWFsPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIHN0YXR1czogZm9ybUZpZWxkcz8uc3RhdHVzPy5kZWZhdWx0VmFsdWUsXG4gICAgICAgIHRyZWZ3b29yZGVuOiBmb3JtRmllbGRzPy50cmVmd29vcmRlbj8uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgPy5zcGxpdCgnLCcpXG4gICAgICAgICAgPy5tYXAodGFnID0+IHRhZy50cmltKCkpXG4gICAgICAgICAgPy5maWx0ZXIodGFnID0+ICEhdGFnKSxcbiAgICAgIH0pKVxuICAgICk7XG5cbiAgcHVibGljIGhpZGVGaWVsZHMkOiBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+ID0gdGhpcy51cGxvYWRGaWVsZHMkLnBpcGUoXG4gICAgbWFwKGZvcm1GaWVsZHMgPT4ge1xuICAgICAgaWYgKGZvcm1GaWVsZHMpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGZvcm1GaWVsZHMpLmZpbHRlcihmaWVsZCA9PiAhZm9ybUZpZWxkc1tmaWVsZF0/LnZpc2libGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlbGF0ZWRGaWxlcyQ6IE9ic2VydmFibGU8QXJyYXk8RG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRvY3VtZW50SWQkLFxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcCxcbiAgICB0aGlzLl9yZWZldGNoJCxcbiAgXSkucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5faXRlbXNMb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudElkLCBxdWVyeVBhcmFtc10pID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlLmdldEZpbHRlcmVkWmFrZW5BcGlEb2N1bWVudHMoXG4gICAgICAgICAgZG9jdW1lbnRJZCxcbiAgICAgICAgICBxdWVyeVBhcmFtc1sncGFyYW1zJ11cbiAgICAgICAgKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gICAgICBdKVxuICAgICksXG4gICAgbWFwKChbcmVsYXRlZEZpbGVzXSkgPT4ge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHtcbiAgICAgICAgLi4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLFxuICAgICAgICBjb2xsZWN0aW9uU2l6ZTogcmVsYXRlZEZpbGVzLnRvdGFsRWxlbWVudHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRGaWxlcyA9IHJlbGF0ZWRGaWxlcz8uY29udGVudD8ubWFwKGZpbGUgPT4gKHtcbiAgICAgICAgLi4uZmlsZSxcbiAgICAgICAgY3JlYXRlZEJ5OiBmaWxlLmNyZWF0ZWRCeSB8fCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlzdC5hdXRvbWF0aWNhbGx5R2VuZXJhdGVkJyksXG4gICAgICAgIHNpemU6IHRoaXMuYnl0ZXNUb01lZ2FieXRlcyhmaWxlLmJlc3RhbmRzb212YW5nKSxcbiAgICAgICAgdGFnczogZmlsZS50cmVmd29vcmRlbj8ubWFwKCh0cmVmd29vcmQ6IHN0cmluZykgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiB0cmVmd29vcmQsXG4gICAgICAgIH0pKSxcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiB0cmFuc2xhdGVkRmlsZXMgfHwgW107XG4gICAgfSksXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfSksXG4gICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICB0aGlzLnNob3daYWFrTGlua1dhcm5pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5faXRlbXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybiBvZihbXSk7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZW5hYmxlUGJhY0RvY3VtZW50ZW5BcGlEb2N1bWVudHMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0RmVhdHVyZVRvZ2dsZU9ic2VydmFibGUoJ2VuYWJsZVBiYWNEb2N1bWVudGVuQXBpRG9jdW1lbnRzJyk7XG5cbiAgcHVibGljIGZpbGVQZXJtaXNzaW9uczoge1xuICAgIFtmaWxlSWQ6IHN0cmluZ106IHtjYW5WaWV3OiBib29sZWFuOyBjYW5Nb2RpZnk6IGJvb2xlYW47IGNhbkRlbGV0ZTogYm9vbGVhbn07XG4gIH0gPSB7fTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY2FuQ3JlYXRlUmVzb3VyY2UkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5kb2N1bWVudElkJC5waXBlKFxuICAgIHN3aXRjaE1hcChkb2N1bWVudElkID0+XG4gICAgICB0aGlzLmdldFBlcm1pc3Npb24oQ0FOX0NSRUFURV9SRVNPVVJDRV9QRVJNSVNTSU9OLCB7XG4gICAgICAgIHJlc291cmNlOiBSRVNPVVJDRV9QRVJNSVNTSU9OX1JFU09VUkNFLmpzb25TY2hlbWFEb2N1bWVudCxcbiAgICAgICAgaWRlbnRpZmllcjogZG9jdW1lbnRJZCxcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVwbG9hZFByb3ZpZGVyU2VydmljZTogVXBsb2FkUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG93bmxvYWRTZXJ2aWNlOiBEb3dubG9hZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQcm92aWRlclNlcnZpY2U6IFVzZXJQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRlbkFwaUNvbHVtblNlcnZpY2U6IERvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlOiBEb2N1bWVudGVuQXBpVmVyc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlcihGaWx0ZXIxNik7XG4gICAgdGhpcy52YWx0aW1vRW5kcG9pbnRVcmkgPSBjb25maWdTZXJ2aWNlLmNvbmZpZy52YWx0aW1vQXBpLmVuZHBvaW50VXJpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0SW5pdGlhbFBhcmFtcygpO1xuICAgIHRoaXMuc2V0VXBsb2FkUHJvY2Vzc0xpbmtlZCgpO1xuICAgIHRoaXMuaXNVc2VyQWRtaW4oKTtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtGaWx0ZXIxNiwgVGFnR3JvdXAxNiwgVXBsb2FkMTZdKTtcbiAgICB0aGlzLnJlZ2lzdGVyUGVybWlzc2lvblN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlclBlcm1pc3Npb25TdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5yZWxhdGVkRmlsZXMkLCB0aGlzLmRvY3VtZW50SWQkXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChbZmlsZXMsIGRvY3VtZW50SWRdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudENvbnRleHQgPSB7XG4gICAgICAgICAgICAgIHJlc291cmNlOiBSRVNPVVJDRV9QRVJNSVNTSU9OX1JFU09VUkNFLmpzb25TY2hlbWFEb2N1bWVudCxcbiAgICAgICAgICAgICAgaWRlbnRpZmllcjogZG9jdW1lbnRJZCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgICAgICAgZmlsZXM6IG9mKGZpbGVzKSxcbiAgICAgICAgICAgICAgY2FuVmlldzogdGhpcy5nZXRQZXJtaXNzaW9ucyhmaWxlcywgQ0FOX1ZJRVdfUkVTT1VSQ0VfUEVSTUlTU0lPTiwgZG9jdW1lbnRDb250ZXh0KSxcbiAgICAgICAgICAgICAgY2FuTW9kaWZ5OiB0aGlzLmdldFBlcm1pc3Npb25zKFxuICAgICAgICAgICAgICAgIGZpbGVzLFxuICAgICAgICAgICAgICAgIENBTl9NT0RJRllfUkVTT1VSQ0VfUEVSTUlTU0lPTixcbiAgICAgICAgICAgICAgICBkb2N1bWVudENvbnRleHRcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgY2FuRGVsZXRlOiB0aGlzLmdldFBlcm1pc3Npb25zKFxuICAgICAgICAgICAgICAgIGZpbGVzLFxuICAgICAgICAgICAgICAgIENBTl9ERUxFVEVfUkVTT1VSQ0VfUEVSTUlTU0lPTixcbiAgICAgICAgICAgICAgICBkb2N1bWVudENvbnRleHRcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShwZXJtaXNzaW9ucyA9PlxuICAgICAgICAgIHBlcm1pc3Npb25zLmZpbGVzLm1hcChcbiAgICAgICAgICAgIGZpbGUgPT5cbiAgICAgICAgICAgICAgKHRoaXMuZmlsZVBlcm1pc3Npb25zW2ZpbGUuZmlsZUlkXSA9IHtcbiAgICAgICAgICAgICAgICBjYW5WaWV3OiBwZXJtaXNzaW9ucy5jYW5WaWV3W2ZpbGUuZmlsZUlkXSxcbiAgICAgICAgICAgICAgICBjYW5Nb2RpZnk6IHBlcm1pc3Npb25zLmNhbk1vZGlmeVtmaWxlLmZpbGVJZF0sXG4gICAgICAgICAgICAgICAgY2FuRGVsZXRlOiBwZXJtaXNzaW9ucy5jYW5EZWxldGVbZmlsZS5maWxlSWRdLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9uRGVsZXRlQWN0aW9uQ2xpY2soaXRlbTogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudCA9IGl0ZW07XG4gICAgdGhpcy5zaG93RGVsZXRlQ29uZmlybWF0aW9uTW9kYWwkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlRG9jdW1lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudElkJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkb2N1bWVudElkID0+IHtcbiAgICAgIHRoaXMuX2l0ZW1zTG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZS5kZWxldGVEb2N1bWVudCh0aGlzLmRvY3VtZW50LCBkb2N1bWVudElkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWZldGNoRG9jdW1lbnRzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5faXRlbXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGJ5dGVzVG9NZWdhYnl0ZXMoYnl0ZXM6IG51bWJlciB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCFieXRlcykgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgbWVnYWJ5dGVzID0gYnl0ZXMgLyAoMTAyNCAqIDEwMjQpO1xuICAgIGlmIChtZWdhYnl0ZXMgPCAxKSB7XG4gICAgICByZXR1cm4gYCR7TWF0aC5jZWlsKG1lZ2FieXRlcyAqIDEwMDApfSBLQmA7XG4gICAgfSBlbHNlIGlmIChtZWdhYnl0ZXMgPCAxMDAwKSB7XG4gICAgICByZXR1cm4gbWVnYWJ5dGVzLnRvRml4ZWQoMikgKyAnIE1CJztcbiAgICB9XG5cbiAgICByZXR1cm4gKG1lZ2FieXRlcyAvIDEwMDApLnRvRml4ZWQoMikgKyAnIEdCJztcbiAgfVxuXG4gIHB1YmxpYyBnZXRVcGxvYWRCdXR0b25Ub29sdGlwKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMudXBsb2FkUHJvY2Vzc0xpbmtlZFNldCAmJiB0aGlzLnVwbG9hZFByb2Nlc3NMaW5rZWQpIHtcbiAgICAgIHJldHVybiAnVXBsb2FkJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNBZG1pbikge1xuICAgICAgcmV0dXJuICdkb3NzaWVyLmRvY3VtZW50ZW4ubm9Qcm9jZXNzTGlua2VkLmFkbWluUm9sZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdkb3NzaWVyLmRvY3VtZW50ZW4ubm9Qcm9jZXNzTGlua2VkLnJlZ3VsYXJVc2VyJztcbiAgfVxuXG4gIHB1YmxpYyBpc1VzZXJBZG1pbigpIHtcbiAgICB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2VcbiAgICAgIC5nZXRVc2VyU3ViamVjdCgpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgdXNlcklkZW50aXR5ID0+IHtcbiAgICAgICAgICB0aGlzLmlzQWRtaW4gPSB1c2VySWRlbnRpdHkucm9sZXMuaW5jbHVkZXMoJ1JPTEVfQURNSU4nKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBZG1pbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIG1ldGFkYXRhU2V0KG1ldGFkYXRhOiBEb2N1bWVudGVuQXBpTWV0YWRhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnVwbG9hZGluZyQubmV4dCh0cnVlKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuZmlsZVRvQmVVcGxvYWRlZCQsIHRoaXMuZG9jdW1lbnRJZCRdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKFtmaWxlLCBkb2N1bWVudElkXSkgPT4ge1xuICAgICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xuICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUkLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaURvY3VtZW50U2VydmljZS51cGRhdGVEb2N1bWVudChmaWxlLCBtZXRhZGF0YSwgZG9jdW1lbnRJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVmZXRjaERvY3VtZW50cygpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVUb0JlVXBsb2FkZWQkLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkUHJvdmlkZXJTZXJ2aWNlXG4gICAgICAgICAgICAgIC51cGxvYWRGaWxlV2l0aE1ldGFkYXRhKGZpbGUsIGRvY3VtZW50SWQsIG1ldGFkYXRhKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmV0Y2hEb2N1bWVudHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciQubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoREVGQVVMVF9QQUdJTkFUSU9OKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlVG9CZVVwbG9hZGVkJC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25Eb3dubG9hZEFjdGlvbkNsaWNrKGZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWREb2N1bWVudChmaWxlLCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVkaXRNZXRhZGF0YShmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRNb2RlJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZmlsZVRvQmVVcGxvYWRlZCQubmV4dChmaWxlKTtcbiAgICB0aGlzLnNob3dVcGxvYWRNb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZU1ldGFkYXRhTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93VXBsb2FkTW9kYWwkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmlzRWRpdE1vZGUkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuZmlsZVRvQmVVcGxvYWRlZCQubmV4dChldmVudC50YXJnZXQuZmlsZXNbMF0pO1xuICAgIHRoaXMuc2hvd1VwbG9hZE1vZGFsJC5uZXh0KHRydWUpO1xuICAgIHRoaXMucmVzZXRGaWxlSW5wdXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5hdmlnYXRlVG9DYXNlQWRtaW5DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4ge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvZG9zc2llci1tYW5hZ2VtZW50L2Rvc3NpZXIvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfWBdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd0NsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWxlUGVybWlzc2lvbnNbZXZlbnQuZmlsZUlkXT8uY2FuVmlldykge1xuICAgICAgdGhpcy5kb3dubG9hZERvY3VtZW50KGV2ZW50LCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUGFnaW5hdGlvbkNsaWNrZWQocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHsuLi50aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCksIHBhZ2V9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblBhZ2luYXRpb25TZXQoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qge2NvbGxlY3Rpb25TaXplLCBwYWdlfSA9IHRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKTtcbiAgICBjb25zdCByZXNldFBhZ2U6IGJvb2xlYW4gPSBNYXRoLmNlaWwoK2NvbGxlY3Rpb25TaXplIC8gc2l6ZSkgPD0gK3BhZ2UgJiYgK2NvbGxlY3Rpb25TaXplID4gMDtcbiAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQoey4uLnRoaXMucGFnaW5hdGlvbiQuZ2V0VmFsdWUoKSwgc2l6ZSwgLi4uKHJlc2V0UGFnZSAmJiB7cGFnZTogMX0pfSk7XG4gIH1cblxuICBwdWJsaWMgb25VcGxvYWRCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgb25GaWx0ZXJFdmVudChmaWx0ZXI6IERvY3VtZW50ZW5BcGlGaWx0ZXJNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlciQubmV4dChmaWx0ZXIpO1xuICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dCh7Li4udGhpcy5wYWdpbmF0aW9uJC5nZXRWYWx1ZSgpLCAuLi5ERUZBVUxUX1BBR0lOQVRJT059KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNvcnRDaGFuZ2VkKHNvcnRTdGF0ZTogU29ydFN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5fc29ydCQubmV4dChcbiAgICAgIHNvcnRTdGF0ZS5pc1NvcnRpbmdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzb3J0OiBgJHtzb3J0U3RhdGUuc3RhdGUubmFtZSA9PT0gJ3NpemUnID8gRE9DVU1FTlRFTl9DT0xVTU5fS0VZUy5CRVNUQU5EU09NVkFORyA6IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lfSwke3NvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb259YCxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVmZXRjaERvY3VtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWZldGNoJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZERpc2FibGVkKGZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5maWxlUGVybWlzc2lvbnNbZmlsZS5maWxlSWRdPy5jYW5WaWV3O1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0RGlzYWJsZWQoZmlsZTogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICghdGhpcy5zdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkLnZhbHVlLnN1cHBvcnRzVXBkYXRpbmdEZWZpbml0aXZlRG9jdW1lbnQgJiZcbiAgICAgICAgZmlsZS5zdGF0dXMgPT09ICdkZWZpbml0aWVmJykgfHxcbiAgICAgICF0aGlzLmZpbGVQZXJtaXNzaW9uc1tmaWxlLmZpbGVJZF0/LmNhbk1vZGlmeVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZURpc2FibGVkKGZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5maWxlUGVybWlzc2lvbnNbZmlsZS5maWxlSWRdPy5jYW5EZWxldGU7XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkRG9jdW1lbnQocmVsYXRlZEZpbGU6IERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZSwgZm9yY2VEb3dubG9hZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRJZCQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnRJZCA9PiB7XG4gICAgICB0aGlzLmRvd25sb2FkU2VydmljZS5kb3dubG9hZEZpbGUoXG4gICAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3pha2VuLWFwaS8ke3JlbGF0ZWRGaWxlLnBsdWdpbkNvbmZpZ3VyYXRpb25JZH0vY2FzZS1kb2N1bWVudC8ke2RvY3VtZW50SWR9L2ZpbGVzLyR7cmVsYXRlZEZpbGUuZmlsZUlkfS9kb3dubG9hZGAsXG4gICAgICAgIHJlbGF0ZWRGaWxlLmJlc3RhbmRzbmFhbSA/PyAnJyxcbiAgICAgICAgZm9yY2VEb3dubG9hZFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlblF1ZXJ5UGFyYW1zU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJZCQsXG4gICAgICAgIHRoaXMuZmlsdGVyJCxcbiAgICAgICAgdGhpcy5fc29ydCQsXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQsXG4gICAgICBdKS5zdWJzY3JpYmUoKFtkZWZpbml0aW9uTmFtZSwgZG9jdW1lbnRJZCwgZmlsdGVyLCBzb3J0LCBwYWdpbmF0aW9uXSkgPT4ge1xuICAgICAgICBjb25zdCB7c2l6ZSwgcGFnZX0gPSBwYWdpbmF0aW9uO1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9kb3NzaWVycy8ke2RlZmluaXRpb25OYW1lfS9kb2N1bWVudC8ke2RvY3VtZW50SWR9L2RvY3VtZW50c2BdLCB7XG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHsuLi5maWx0ZXIsIC4uLnNvcnQsIHNpemUsIHBhZ2U6IHBhZ2UgLSAxfSxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RmlsZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXBsb2FkUHJvY2Vzc0xpbmtlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgICB0aGlzLnVwbG9hZFByb3ZpZGVyU2VydmljZS5jaGVja1VwbG9hZFByb2Nlc3NMaW5rKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICAgICksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm9jZXNzTGlua2VkU2V0ID0gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpbmtlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICB0aGlzLnVwbG9hZFByb2Nlc3NMaW5rZWQgPSBsaW5rZWQ7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbFBhcmFtcygpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXBcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAocXVlcnlQYXJhbXMgPT4ge1xuICAgICAgICAgIGNvbnN0IHtzb3J0LCBzaXplLCBwYWdlLCAuLi5maWx0ZXJ9ID0gcXVlcnlQYXJhbXNbJ3BhcmFtcyddO1xuICAgICAgICAgIHJldHVybiB7c29ydCwgZmlsdGVyLCBzaXplLCBwYWdlfTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHtmaWx0ZXIsIHNvcnQsIHNpemUsIHBhZ2V9KSA9PiB7XG4gICAgICAgIHRoaXMuX3NvcnQkLm5leHQoe3NvcnR9KTtcbiAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQoZmlsdGVyKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uJC5uZXh0KHtcbiAgICAgICAgICAuLi50aGlzLnBhZ2luYXRpb24kLmdldFZhbHVlKCksXG4gICAgICAgICAgc2l6ZTogK3NpemUsXG4gICAgICAgICAgcGFnZTogKyhwYWdlID8/IDApICsgMSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3BlblF1ZXJ5UGFyYW1zU3Vic2NyaXB0aW9uKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydFN0YXRlRnJvbVNvcnRTdHJpbmcoc29ydFN0cmluZz86IHN0cmluZyk6IFNvcnRTdGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IHNwbGl0U3RyaW5nID0gc29ydFN0cmluZyAmJiBzb3J0U3RyaW5nLnNwbGl0KCcsJyk7XG4gICAgaWYgKHNwbGl0U3RyaW5nICYmIHNwbGl0U3RyaW5nPy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1NvcnRpbmc6IHRydWUsXG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgbmFtZTogc3BsaXRTdHJpbmdbMF0sXG4gICAgICAgICAgZGlyZWN0aW9uOiBzcGxpdFN0cmluZ1sxXSBhcyBEaXJlY3Rpb24sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtaXNzaW9ucyhcbiAgICBmaWxlczogRG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlW10sXG4gICAgcGVybWlzc2lvblJlcXVlc3Q6IFBlcm1pc3Npb25SZXF1ZXN0LFxuICAgIGNvbnRleHQ/OiBhbnlcbiAgKTogT2JzZXJ2YWJsZTx7XG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcbiAgfT4ge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFxuICAgICAgZmlsZXMubWFwKGZpbGUgPT5cbiAgICAgICAgdGhpcy5nZXRQZXJtaXNzaW9uKFxuICAgICAgICAgIHBlcm1pc3Npb25SZXF1ZXN0LFxuICAgICAgICAgIGNvbnRleHQgfHwge1xuICAgICAgICAgICAgcmVzb3VyY2U6IFJFU09VUkNFX1BFUk1JU1NJT05fUkVTT1VSQ0UucmVzb3VyY2VQZXJtaXNzaW9uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogZmlsZS5maWxlSWQsXG4gICAgICAgICAgfVxuICAgICAgICApLnBpcGUobWFwKGF2YWlsYWJsZSA9PiAoe1tmaWxlLmZpbGVJZF06IGF2YWlsYWJsZX0pKSlcbiAgICAgIClcbiAgICApLnBpcGUoXG4gICAgICBtYXAocGVybWlzc2lvbnMgPT4gcGVybWlzc2lvbnMucmVkdWNlKChhY2MsIHBlcm1pc3Npb24pID0+ICh7Li4uYWNjLCAuLi5wZXJtaXNzaW9ufSksIHt9KSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJtaXNzaW9uKHBlcm1pc3Npb25SZXF1ZXN0OiBQZXJtaXNzaW9uUmVxdWVzdCwgY29udGV4dD86IGFueSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZVBiYWNEb2N1bWVudGVuQXBpRG9jdW1lbnRzJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGVuYWJsZWQgPT4ge1xuICAgICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGVybWlzc2lvblNlcnZpY2UucmVxdWVzdFBlcm1pc3Npb24ocGVybWlzc2lvblJlcXVlc3QsIGNvbnRleHQpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG48ZGl2XG4gIGNsYXNzPVwiY2FyYm9uLWRvY3VtZW50LXRhYmxlLXdyYXBwZXJcIlxuICAqbmdJZj1cIntcbiAgICBsb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jLFxuICAgIGZpZWxkc0xvYWRpbmc6IGZpZWxkc0xvYWRpbmckIHwgYXN5bmMsXG4gICAgdXBsb2FkaW5nOiB1cGxvYWRpbmckIHwgYXN5bmMsXG4gICAgcmVsYXRlZEZpbGVzOiByZWxhdGVkRmlsZXMkIHwgYXN5bmMsXG4gICAgZmllbGRzOiBmaWVsZHMkIHwgYXN5bmMsXG4gICAgc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzOiBzdXBwb3J0ZWREb2N1bWVudGVuQXBpRmVhdHVyZXMkIHwgYXN5bmMsXG4gICAgcGFnaW5hdGlvbjogcGFnaW5hdGlvbiQgfCBhc3luYyxcbiAgICBzb3J0U3RhdGU6IHNvcnRTdGF0ZSQgfCBhc3luYyxcbiAgICB1cGxvYWRGaWVsZHM6IHVwbG9hZEZpZWxkcyQgfCBhc3luYyxcbiAgICBkZWZhdWx0VmFsdWVzOiBkZWZhdWx0VmFsdWVzJCB8IGFzeW5jLFxuICAgIGhpZGVGaWVsZHM6IGhpZGVGaWVsZHMkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbj5cbiAgQGlmICgoIW9icy5maWVsZHNMb2FkaW5nICYmIG9icy5maWVsZHMubGVuZ3RoKSB8fCBvYnMuZmllbGRzTG9hZGluZykge1xuICAgIDx2YWx0aW1vLWNhcmJvbi1saXN0XG4gICAgICBbYWN0aW9uSXRlbXNdPVwiYWN0aW9uSXRlbXNcIlxuICAgICAgW2l0ZW1zXT1cIm9icy5yZWxhdGVkRmlsZXNcIlxuICAgICAgW2ZpZWxkc109XCJvYnMuZmllbGRzXCJcbiAgICAgIFtpbml0aWFsU29ydFN0YXRlXT1cIm9icy5zb3J0U3RhdGVcIlxuICAgICAgW2xvYWRpbmddPVwib2JzLmxvYWRpbmdcIlxuICAgICAgW3BhZ2luYXRpb25dPVwib2JzLnBhZ2luYXRpb25cIlxuICAgICAgW3BhZ2luYXRvckNvbmZpZ109XCJwYWdpbmF0b3JDb25maWdcIlxuICAgICAgcGFnaW5hdGlvbklkZW50aWZpZXI9XCJkb2N1bWVudGVuQXBpXCJcbiAgICAgIChyb3dDbGlja2VkKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXG4gICAgICAoc29ydENoYW5nZWQpPVwiXG4gICAgICAgIG9icz8uc3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPy5zdXBwb3J0c1NvcnRhYmxlQ29sdW1ucyAmJiBvblNvcnRDaGFuZ2VkKCRldmVudClcbiAgICAgIFwiXG4gICAgICAocGFnaW5hdGlvbkNsaWNrZWQpPVwib25QYWdpbmF0aW9uQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgIChwYWdpbmF0aW9uU2V0KT1cIm9uUGFnaW5hdGlvblNldCgkZXZlbnQpXCJcbiAgICAgIGhpZGVDb2x1bW5IZWFkZXJcbiAgICA+XG4gICAgICA8ZGl2IGNhcmJvblRvb2xiYXJDb250ZW50PlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZXNcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgaGlkZGVuXG4gICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgLz5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJvYnM/LnN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcz8uc3VwcG9ydHNGaWx0ZXJhYmxlQ29sdW1uc1wiXG4gICAgICAgICAgW2Nkc092ZXJmbG93TWVudV09XCJvdmVyZmxvd0ZpbHRlclwiXG4gICAgICAgICAgW2N1c3RvbVBhbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgICAgIFtmbGlwXT1cInRydWVcIlxuICAgICAgICAgIFtvZmZzZXRdPVwie3g6IDAsIHk6IDQ3fVwiXG4gICAgICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwiZmlsdGVyXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9SZXN1bHRzXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC92YWx0aW1vLWNhcmJvbi1saXN0PlxuICB9IEBlbHNlIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cIm5hdmlnYXRlVG9DYXNlQWRtaW5CdXR0b25cIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIid6Z3cuZG9jdW1lbnRzLm5vQ29sdW1ucy5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgW3RpdGxlXT1cIid6Z3cuZG9jdW1lbnRzLm5vQ29sdW1ucy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfVxuXG4gIDx2YWx0aW1vLWRvY3VtZW50ZW4tYXBpLW1ldGFkYXRhLW1vZGFsXG4gICAgW2RlZmF1bHRWYWx1ZXNdPVwib2JzLmRlZmF1bHRWYWx1ZXNcIlxuICAgIFtkaXNhYmxlQXV0aG9yXT1cIm9icy51cGxvYWRGaWVsZHM/LmF1dGV1cj8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlQ29uZmlkZW50aWFsaXR5TGV2ZWxdPVwib2JzLnVwbG9hZEZpZWxkcz8udmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVDcmVhdGlvbkRhdGVdPVwib2JzLnVwbG9hZEZpZWxkcz8uY3JlYXRpZWRhdHVtPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVEZXNjcmlwdGlvbl09XCJvYnMudXBsb2FkRmllbGRzPy5iZXNjaHJpanZpbmc/LnJlYWRvbmx5XCJcbiAgICBbZGlzYWJsZURvY3VtZW50VGl0bGVdPVwib2JzLnVwbG9hZEZpZWxkcz8udGl0ZWw/LnJlYWRvbmx5XCJcbiAgICBbZGlzYWJsZURvY3VtZW50VHlwZV09XCJvYnMudXBsb2FkRmllbGRzPy5pbmZvcm1hdGllb2JqZWN0dHlwZT8ucmVhZG9ubHlcIlxuICAgIFtkaXNhYmxlRmlsZW5hbWVdPVwib2JzLnVwbG9hZEZpZWxkcz8uYmVzdGFuZHNuYWFtPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVMYW5ndWFnZV09XCJvYnMudXBsb2FkRmllbGRzPy50YWFsPy5yZWFkb25seVwiXG4gICAgW2Rpc2FibGVTdGF0dXNdPVwib2JzLnVwbG9hZEZpZWxkcz8uc3RhdHVzPy5yZWFkb25seVwiXG4gICAgW2hpZGVGaWVsZHNdPVwib2JzLmhpZGVGaWVsZHNcIlxuICAgIFtvcGVuXT1cInNob3dVcGxvYWRNb2RhbCQgfCBhc3luY1wiXG4gICAgW2Rpc2FibGVkJF09XCJtb2RhbERpc2FibGVkJFwiXG4gICAgW2ZpbGUkXT1cImZpbGVUb0JlVXBsb2FkZWQkXCJcbiAgICBbaXNFZGl0TW9kZV09XCJpc0VkaXRNb2RlJCB8IGFzeW5jXCJcbiAgICBbc3VwcG9ydHNUcmVmd29vcmRlbl09XCJvYnM/LnN1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcz8uc3VwcG9ydHNUcmVmd29vcmRlblwiXG4gICAgKG1vZGFsQ2xvc2UpPVwiY2xvc2VNZXRhZGF0YU1vZGFsKClcIlxuICAgIChtZXRhZGF0YSk9XCJtZXRhZGF0YVNldCgkZXZlbnQpXCJcbiAgPjwvdmFsdGltby1kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbD5cbjwvZGl2PlxuXG48dmFsdGltby1jb25maXJtYXRpb24tbW9kYWxcbiAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImRhc2hib2FyZE1hbmFnZW1lbnQuZGVsZXRlTW9kYWwuY29uZmlybVwiXG4gIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cImRvc3NpZXIuZG9jdW1lbnRlbi5kZWxldGVDb25maXJtYXRpb25Nb2RhbC5jb250ZW50XCJcbiAgY29uZmlybUJ1dHRvblR5cGU9XCJkYW5nZXJcIlxuICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiZG9zc2llci5kb2N1bWVudGVuLmRlbGV0ZUNvbmZpcm1hdGlvbk1vZGFsLnRpdGxlXCJcbiAgW3Nob3dNb2RhbFN1YmplY3QkXT1cInNob3dEZWxldGVDb25maXJtYXRpb25Nb2RhbCRcIlxuICAoY29uZmlybUV2ZW50KT1cImRlbGV0ZURvY3VtZW50KClcIlxuPlxuPC92YWx0aW1vLWNvbmZpcm1hdGlvbi1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNub1Jlc3VsdHM+XG4gIEBpZiAoKGZpbHRlciQgfCBhc3luYyB8IGtleXZhbHVlKT8ubGVuZ3RoKSB7XG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2FjdGlvbl09XCJyZXNldEZpbHRlckJ1dHRvblwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ3pndy5kb2N1bWVudHMubm9SZXN1bHRzLmZpbHRlckRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbdGl0bGVdPVwiJ3pndy5kb2N1bWVudHMubm9SZXN1bHRzLmZpbHRlclRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuICB9IEBlbHNlIGlmIChzaG93WmFha0xpbmtXYXJuaW5nICYmIGlzQWRtaW4pIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbYWN0aW9uXT1cIm5hdmlnYXRlVG9DYXNlQWRtaW5CdXR0b25cIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb3NzaWVyLmRvY3VtZW50ZW4ubm9aYWFrRm91bmQnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInZG9zc2llci5kb2N1bWVudGVuLm5vWmFha0ZvdW5kVGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIH0gQGVsc2Uge1xuICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgIFthY3Rpb25dPVwidXBsb2FkQnV0dG9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9zc2llci5kb2N1bWVudGVuLm5vRmlsZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt0aXRsZV09XCInZG9zc2llci5kb2N1bWVudGVuLm5vRmlsZXNUaXRsZScgfCB0cmFuc2xhdGVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNvdmVyZmxvd0ZpbHRlcj5cbiAgPHZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFiLWRvY3VtZW50ZW4tYXBpLWZpbHRlclxuICAgIFtwcmVmaWxsRmlsdGVyXT1cImZpbHRlciQgfCBhc3luY1wiXG4gICAgKGZpbHRlckV2ZW50KT1cIm9uRmlsdGVyRXZlbnQoJGV2ZW50KVwiXG4gID48L3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFiLWRvY3VtZW50ZW4tYXBpLWZpbHRlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmVzZXRGaWx0ZXJCdXR0b24+XG4gIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkZpbHRlckV2ZW50KG51bGwpXCI+XG4gICAge3sgJ1Jlc2V0IGZpbHRlcicgfCB0cmFuc2xhdGUgfX1cblxuICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJ0cmFzaC1jYW5cIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3VwbG9hZEJ1dHRvbiBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICA8YnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cIlxuICAgICAgKHVwbG9hZFByb2Nlc3NMaW5rZWRTZXQgJiYgIXVwbG9hZFByb2Nlc3NMaW5rZWQpIHx8XG4gICAgICBzaG93WmFha0xpbmtXYXJuaW5nIHx8XG4gICAgICBkaXNhYmxlZCB8fFxuICAgICAgKGNhbkNyZWF0ZVJlc291cmNlJCB8IGFzeW5jKSA9PT0gZmFsc2VcbiAgICBcIlxuICAgIFt2VG9vbHRpcF09XCJnZXRVcGxvYWRCdXR0b25Ub29sdGlwKCkgfCB0cmFuc2xhdGVcIlxuICAgIChjbGljayk9XCJvblVwbG9hZEJ1dHRvbkNsaWNrKClcIlxuICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICA+XG4gICAge3sgJ1VwbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwidXBsb2FkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cmFuc2xhdGlvblRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICBAaWYgKGRhdGEuaXRlbVtkYXRhLmtleV0pIHtcbiAgICB7eyAnZG9jdW1lbnQuJyArIGRhdGEuaXRlbVtkYXRhLmtleV0gfCB0cmFuc2xhdGUgfX1cbiAgfSBAZWxzZSB7XG4gICAgLVxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25hdmlnYXRlVG9DYXNlQWRtaW5CdXR0b24+XG4gIDxidXR0b24gKGNsaWNrKT1cIm9uTmF2aWdhdGVUb0Nhc2VBZG1pbkNsaWNrKClcIiBjZHNCdXR0b249XCJwcmltYXJ5XCI+XG4gICAge3sgJ2Rvc3NpZXIuZG9jdW1lbnRlbi5uYXZpZ2F0ZVRvQ2FzZUFkbWluJyB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInNldHRpbmdzXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -31,11 +31,11 @@ export class DocumentenApiDocumentService extends BaseApiService {
31
31
  ? this.httpClient.get(this.getApiUrl(`/v2/zaken-api/document/${documentId}/files`), { params })
32
32
  : this.httpClient.get(this.getApiUrl(`/v2/zaken-api/document/${documentId}/files`));
33
33
  }
34
- updateDocument(file, metadata) {
35
- return this.httpClient.put(this.getApiUrl(`/v1/documenten-api/${file.pluginConfigurationId}/files/${file.fileId}`), metadata);
34
+ updateDocument(file, metadata, caseDocumentId) {
35
+ return this.httpClient.put(this.getApiUrl(`/v1/zaken-api/${file.pluginConfigurationId}/case-document/${caseDocumentId}/files/${file.fileId}`), metadata);
36
36
  }
37
- deleteDocument(file) {
38
- return this.httpClient.delete(this.getApiUrl(`/v1/documenten-api/${file.pluginConfigurationId}/files/${file.fileId}`));
37
+ deleteDocument(file, caseDocumentId) {
38
+ return this.httpClient.delete(this.getApiUrl(`/v1/zaken-api/${file.pluginConfigurationId}/case-document/${caseDocumentId}/files/${file.fileId}`));
39
39
  }
40
40
  getPrefilledUploadFields(documentId) {
41
41
  return this.httpClient.get(this.getApiUrl(`/v1/document/${documentId}/zgw-document/upload-field`));
@@ -55,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
55
55
  providedIn: 'root',
56
56
  }]
57
57
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }] });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktZG9jdW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vemd3L3NyYy9saWIvbW9kdWxlcy9kb2N1bWVudGVuLWFwaS9zZXJ2aWNlcy9kb2N1bWVudGVuLWFwaS1kb2N1bWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFhLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGNBQWMsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVFwRSxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsY0FBYztJQUM5RCxZQUNxQixVQUFzQixFQUN0QixhQUE0QjtRQUUvQyxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBSGQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUdqRCxDQUFDO0lBRU0sNEJBQTRCLENBQ2pDLFVBQWtCLEVBQ2xCLFNBQWU7UUFFZixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDO1FBRXZELE9BQU8sQ0FBQyxDQUFDLFNBQVM7WUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUEwQixVQUFVLFFBQVEsQ0FBQyxFQUM1RCxFQUFDLE1BQU0sRUFBQyxDQUNUO1lBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUEwQixVQUFVLFFBQVEsQ0FBQyxDQUM3RCxDQUFDO0lBQ1IsQ0FBQztJQUVNLGNBQWMsQ0FBQyxJQUFTLEVBQUUsUUFBYTtRQUM1QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixJQUFJLENBQUMscUJBQXFCLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQ3ZGLFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVNLGNBQWMsQ0FBQyxJQUE4QjtRQUNsRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixJQUFJLENBQUMscUJBQXFCLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQ3hGLENBQUM7SUFDSixDQUFDO0lBRU0sd0JBQXdCLENBQUMsVUFBa0I7UUFDaEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsVUFBVSw0QkFBNEIsQ0FBQyxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUVNLGVBQWUsQ0FBQyxrQkFBMEI7UUFDL0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLFNBQVMsQ0FDWixrQ0FBa0Msa0JBQWtCLDRCQUE0QixDQUNqRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRU0saUJBQWlCLENBQ3RCLGtCQUEwQixFQUMxQixXQUFxQztRQUVyQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUN4QixJQUFJLENBQUMsU0FBUyxDQUNaLGtDQUFrQyxrQkFBa0IsNEJBQTRCLENBQ2pGLEVBQ0QsV0FBVyxDQUNaLENBQUM7SUFDSixDQUFDOytHQTdEVSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUYzQixNQUFNOzs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmFzZUFwaVNlcnZpY2UsIENvbmZpZ1NlcnZpY2UsIFBhZ2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGV9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZH0gZnJvbSAnLi4vbW9kZWxzL2RvY3VtZW50ZW4tYXBpLXVwbG9hZC1maWVsZC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZUFwaVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZVxuICApIHtcbiAgICBzdXBlcihodHRwQ2xpZW50LCBjb25maWdTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJlZFpha2VuQXBpRG9jdW1lbnRzKFxuICAgIGRvY3VtZW50SWQ6IHN0cmluZyxcbiAgICBwYXJhbXNNYXA/OiBhbnlcbiAgKTogT2JzZXJ2YWJsZTxQYWdlPERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZT4+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogcGFyYW1zTWFwfSk7XG5cbiAgICByZXR1cm4gISFwYXJhbXNNYXBcbiAgICAgID8gdGhpcy5odHRwQ2xpZW50LmdldDxQYWdlPERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZT4+KFxuICAgICAgICAgIHRoaXMuZ2V0QXBpVXJsKGAvdjIvemFrZW4tYXBpL2RvY3VtZW50LyR7ZG9jdW1lbnRJZH0vZmlsZXNgKSxcbiAgICAgICAgICB7cGFyYW1zfVxuICAgICAgICApXG4gICAgICA6IHRoaXMuaHR0cENsaWVudC5nZXQ8UGFnZTxEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGU+PihcbiAgICAgICAgICB0aGlzLmdldEFwaVVybChgL3YyL3pha2VuLWFwaS9kb2N1bWVudC8ke2RvY3VtZW50SWR9L2ZpbGVzYClcbiAgICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVEb2N1bWVudChmaWxlOiBhbnksIG1ldGFkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnB1dDx2b2lkPihcbiAgICAgIHRoaXMuZ2V0QXBpVXJsKGAvdjEvZG9jdW1lbnRlbi1hcGkvJHtmaWxlLnBsdWdpbkNvbmZpZ3VyYXRpb25JZH0vZmlsZXMvJHtmaWxlLmZpbGVJZH1gKSxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVEb2N1bWVudChmaWxlOiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGUpOiBPYnNlcnZhYmxlPERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWxldGU8RG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlW10+KFxuICAgICAgdGhpcy5nZXRBcGlVcmwoYC92MS9kb2N1bWVudGVuLWFwaS8ke2ZpbGUucGx1Z2luQ29uZmlndXJhdGlvbklkfS9maWxlcy8ke2ZpbGUuZmlsZUlkfWApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmVmaWxsZWRVcGxvYWRGaWVsZHMoZG9jdW1lbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxEb2N1bWVudGVuQXBpVXBsb2FkRmllbGRbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PERvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZFtdPihcbiAgICAgIHRoaXMuZ2V0QXBpVXJsKGAvdjEvZG9jdW1lbnQvJHtkb2N1bWVudElkfS96Z3ctZG9jdW1lbnQvdXBsb2FkLWZpZWxkYClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFVwbG9hZEZpZWxkcyhjYXNlRGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8RG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkPj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFycmF5PERvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZD4+KFxuICAgICAgdGhpcy5nZXRBcGlVcmwoXG4gICAgICAgIGAvbWFuYWdlbWVudC92MS9jYXNlLWRlZmluaXRpb24vJHtjYXNlRGVmaW5pdGlvbk5hbWV9L3pndy1kb2N1bWVudC91cGxvYWQtZmllbGRgXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVVcGxvYWRGaWVsZChcbiAgICBjYXNlRGVmaW5pdGlvbk5hbWU6IHN0cmluZyxcbiAgICB1cGxvYWRGaWVsZDogRG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkXG4gICk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucHV0PHZvaWQ+KFxuICAgICAgdGhpcy5nZXRBcGlVcmwoXG4gICAgICAgIGAvbWFuYWdlbWVudC92MS9jYXNlLWRlZmluaXRpb24vJHtjYXNlRGVmaW5pdGlvbk5hbWV9L3pndy1kb2N1bWVudC91cGxvYWQtZmllbGRgXG4gICAgICApLFxuICAgICAgdXBsb2FkRmllbGRcbiAgICApO1xuICB9XG59XG4iXX0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktZG9jdW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vemd3L3NyYy9saWIvbW9kdWxlcy9kb2N1bWVudGVuLWFwaS9zZXJ2aWNlcy9kb2N1bWVudGVuLWFwaS1kb2N1bWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFhLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGNBQWMsRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVFwRSxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsY0FBYztJQUM5RCxZQUNxQixVQUFzQixFQUN0QixhQUE0QjtRQUUvQyxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBSGQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUdqRCxDQUFDO0lBRU0sNEJBQTRCLENBQ2pDLFVBQWtCLEVBQ2xCLFNBQWU7UUFFZixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDO1FBRXZELE9BQU8sQ0FBQyxDQUFDLFNBQVM7WUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUEwQixVQUFVLFFBQVEsQ0FBQyxFQUM1RCxFQUFDLE1BQU0sRUFBQyxDQUNUO1lBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUEwQixVQUFVLFFBQVEsQ0FBQyxDQUM3RCxDQUFDO0lBQ1IsQ0FBQztJQUVNLGNBQWMsQ0FBQyxJQUFTLEVBQUUsUUFBYSxFQUFFLGNBQXNCO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ3hCLElBQUksQ0FBQyxTQUFTLENBQ1osaUJBQWlCLElBQUksQ0FBQyxxQkFBcUIsa0JBQWtCLGNBQWMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQ25HLEVBQ0QsUUFBUSxDQUNULENBQUM7SUFDSixDQUFDO0lBRU0sY0FBYyxDQUNuQixJQUE4QixFQUM5QixjQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUMzQixJQUFJLENBQUMsU0FBUyxDQUNaLGlCQUFpQixJQUFJLENBQUMscUJBQXFCLGtCQUFrQixjQUFjLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUNuRyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU0sd0JBQXdCLENBQUMsVUFBa0I7UUFDaEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsVUFBVSw0QkFBNEIsQ0FBQyxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUVNLGVBQWUsQ0FBQyxrQkFBMEI7UUFDL0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FDeEIsSUFBSSxDQUFDLFNBQVMsQ0FDWixrQ0FBa0Msa0JBQWtCLDRCQUE0QixDQUNqRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRU0saUJBQWlCLENBQ3RCLGtCQUEwQixFQUMxQixXQUFxQztRQUVyQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUN4QixJQUFJLENBQUMsU0FBUyxDQUNaLGtDQUFrQyxrQkFBa0IsNEJBQTRCLENBQ2pGLEVBQ0QsV0FBVyxDQUNaLENBQUM7SUFDSixDQUFDOytHQXBFVSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUYzQixNQUFNOzs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmFzZUFwaVNlcnZpY2UsIENvbmZpZ1NlcnZpY2UsIFBhZ2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGV9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZH0gZnJvbSAnLi4vbW9kZWxzL2RvY3VtZW50ZW4tYXBpLXVwbG9hZC1maWVsZC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudGVuQXBpRG9jdW1lbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZUFwaVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZVxuICApIHtcbiAgICBzdXBlcihodHRwQ2xpZW50LCBjb25maWdTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWx0ZXJlZFpha2VuQXBpRG9jdW1lbnRzKFxuICAgIGRvY3VtZW50SWQ6IHN0cmluZyxcbiAgICBwYXJhbXNNYXA/OiBhbnlcbiAgKTogT2JzZXJ2YWJsZTxQYWdlPERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZT4+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogcGFyYW1zTWFwfSk7XG5cbiAgICByZXR1cm4gISFwYXJhbXNNYXBcbiAgICAgID8gdGhpcy5odHRwQ2xpZW50LmdldDxQYWdlPERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZT4+KFxuICAgICAgICAgIHRoaXMuZ2V0QXBpVXJsKGAvdjIvemFrZW4tYXBpL2RvY3VtZW50LyR7ZG9jdW1lbnRJZH0vZmlsZXNgKSxcbiAgICAgICAgICB7cGFyYW1zfVxuICAgICAgICApXG4gICAgICA6IHRoaXMuaHR0cENsaWVudC5nZXQ8UGFnZTxEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGU+PihcbiAgICAgICAgICB0aGlzLmdldEFwaVVybChgL3YyL3pha2VuLWFwaS9kb2N1bWVudC8ke2RvY3VtZW50SWR9L2ZpbGVzYClcbiAgICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVEb2N1bWVudChmaWxlOiBhbnksIG1ldGFkYXRhOiBhbnksIGNhc2VEb2N1bWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnB1dDx2b2lkPihcbiAgICAgIHRoaXMuZ2V0QXBpVXJsKFxuICAgICAgICBgL3YxL3pha2VuLWFwaS8ke2ZpbGUucGx1Z2luQ29uZmlndXJhdGlvbklkfS9jYXNlLWRvY3VtZW50LyR7Y2FzZURvY3VtZW50SWR9L2ZpbGVzLyR7ZmlsZS5maWxlSWR9YFxuICAgICAgKSxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVEb2N1bWVudChcbiAgICBmaWxlOiBEb2N1bWVudGVuQXBpUmVsYXRlZEZpbGUsXG4gICAgY2FzZURvY3VtZW50SWQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPERvY3VtZW50ZW5BcGlSZWxhdGVkRmlsZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWxldGU8RG9jdW1lbnRlbkFwaVJlbGF0ZWRGaWxlW10+KFxuICAgICAgdGhpcy5nZXRBcGlVcmwoXG4gICAgICAgIGAvdjEvemFrZW4tYXBpLyR7ZmlsZS5wbHVnaW5Db25maWd1cmF0aW9uSWR9L2Nhc2UtZG9jdW1lbnQvJHtjYXNlRG9jdW1lbnRJZH0vZmlsZXMvJHtmaWxlLmZpbGVJZH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmVmaWxsZWRVcGxvYWRGaWVsZHMoZG9jdW1lbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxEb2N1bWVudGVuQXBpVXBsb2FkRmllbGRbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PERvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZFtdPihcbiAgICAgIHRoaXMuZ2V0QXBpVXJsKGAvdjEvZG9jdW1lbnQvJHtkb2N1bWVudElkfS96Z3ctZG9jdW1lbnQvdXBsb2FkLWZpZWxkYClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFVwbG9hZEZpZWxkcyhjYXNlRGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8RG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkPj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFycmF5PERvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZD4+KFxuICAgICAgdGhpcy5nZXRBcGlVcmwoXG4gICAgICAgIGAvbWFuYWdlbWVudC92MS9jYXNlLWRlZmluaXRpb24vJHtjYXNlRGVmaW5pdGlvbk5hbWV9L3pndy1kb2N1bWVudC91cGxvYWQtZmllbGRgXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVVcGxvYWRGaWVsZChcbiAgICBjYXNlRGVmaW5pdGlvbk5hbWU6IHN0cmluZyxcbiAgICB1cGxvYWRGaWVsZDogRG9jdW1lbnRlbkFwaVVwbG9hZEZpZWxkXG4gICk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucHV0PHZvaWQ+KFxuICAgICAgdGhpcy5nZXRBcGlVcmwoXG4gICAgICAgIGAvbWFuYWdlbWVudC92MS9jYXNlLWRlZmluaXRpb24vJHtjYXNlRGVmaW5pdGlvbk5hbWV9L3pndy1kb2N1bWVudC91cGxvYWQtZmllbGRgXG4gICAgICApLFxuICAgICAgdXBsb2FkRmllbGRcbiAgICApO1xuICB9XG59XG4iXX0=