@c8y/ngx-components 1018.0.147 → 1018.0.151

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.
Files changed (30) hide show
  1. package/core/common/date.pipe.d.ts +2 -2
  2. package/core/common/stringify-object.pipe.d.ts +2 -1
  3. package/ecosystem/application-properties/update-application-modal/update-application-modal.component.d.ts +0 -2
  4. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts +7 -6
  5. package/ecosystem/shared/ecosystem.constants.d.ts +3 -1
  6. package/ecosystem/shared/ecosystem.model.d.ts +3 -1
  7. package/ecosystem/shared/ecosystem.service.d.ts +11 -5
  8. package/esm2020/core/common/date.pipe.mjs +12 -7
  9. package/esm2020/core/common/stringify-object.pipe.mjs +11 -8
  10. package/esm2020/ecosystem/application-properties/application-properties.component.mjs +6 -4
  11. package/esm2020/ecosystem/application-properties/update-application-modal/update-application-modal.component.mjs +11 -22
  12. package/esm2020/ecosystem/applications/install-from-package/install-from-package.component.mjs +2 -2
  13. package/esm2020/ecosystem/packages/deploy-application/deploy-application.component.mjs +28 -85
  14. package/esm2020/ecosystem/shared/ecosystem.constants.mjs +5 -3
  15. package/esm2020/ecosystem/shared/ecosystem.model.mjs +3 -1
  16. package/esm2020/ecosystem/shared/ecosystem.service.mjs +121 -24
  17. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +139 -27
  18. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  19. package/fesm2015/c8y-ngx-components-ecosystem.mjs +110 -179
  20. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  21. package/fesm2015/c8y-ngx-components.mjs +20 -13
  22. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  23. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +126 -25
  24. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  25. package/fesm2020/c8y-ngx-components-ecosystem.mjs +110 -176
  26. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  27. package/fesm2020/c8y-ngx-components.mjs +20 -13
  28. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  29. package/locales/locales.pot +15 -3
  30. package/package.json +1 -1
@@ -35,39 +35,28 @@ export class UpdateApplicationModalComponent {
35
35
  async updateApplication() {
36
36
  try {
37
37
  const binaryMoId = this.sourcePackage.activeVersionId;
38
- await this.uploadNewBinary(binaryMoId);
38
+ await this.inventoryService.detail(binaryMoId); // only trying if we can access it
39
+ await this.ecosystemService.uploadBinaryFromOtherPackage(this.sourcePackage, this.application, this.sourcePackage.activeVersionId);
39
40
  }
40
41
  catch (e) {
41
42
  if (e.res?.status === 404) {
42
- await this.fallBackToCloneUpdate();
43
+ try {
44
+ this.updateFailure = !(await this.ecosystemService.fallbackToClone(this.application, this.sourcePackage));
45
+ }
46
+ catch (ex) {
47
+ this.updateFailure = true;
48
+ this.ecosystemService.alertError(e);
49
+ }
43
50
  }
44
51
  else {
45
52
  this.updateFailure = true;
46
- this.alertService.addServerFailure(e);
53
+ this.ecosystemService.alertError(e);
47
54
  }
48
55
  }
49
56
  finally {
50
57
  this.isUpdateOngoing = false;
51
58
  }
52
59
  }
53
- async uploadNewBinary(binaryMoId) {
54
- const { data: binaryMo } = await this.inventoryService.detail(binaryMoId);
55
- const binary = await this.inventoryService.binary.download(binaryMo.id);
56
- const blob = await binary.blob();
57
- const file = new File([blob], binaryMo.name);
58
- const app = await this.ecosystemService.uploadArchiveToApp(file, this.application, false);
59
- await this.ecosystemService.updateAppManifest(app, this.sourcePackage);
60
- }
61
- async fallBackToCloneUpdate() {
62
- try {
63
- const { data: clonedApp } = await this.applicationService.clone(this.sourcePackage);
64
- await this.uploadNewBinary(clonedApp.activeVersionId);
65
- await this.ecosystemService.deleteApp(clonedApp, true);
66
- }
67
- catch (e) {
68
- this.alertService.addServerFailure(e);
69
- }
70
- }
71
60
  }
72
61
  UpdateApplicationModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UpdateApplicationModalComponent, deps: [{ token: i1.InventoryService }, { token: i2.EcosystemService }, { token: i1.ApplicationService }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component });
73
62
  UpdateApplicationModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UpdateApplicationModalComponent, selector: "c8y-update-application-modal", viewQueries: [{ propertyName: "modal", first: true, predicate: ["modal"], descendants: true }], ngImport: i0, template: "<c8y-modal\n [title]=\"'Update application' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n #modal\n>\n <ng-container c8y-modal-title>\n <span class=\"dlt-c8y-icon-installing-updates\"></span>\n </ng-container>\n\n <c8y-progress-bar\n *ngIf=\"isUpdateOngoing\"\n [message]=\"'Updating\u2026' | translate\"\n class=\"text-center d-block p-t-56 p-b-56 m-t-4 m-b-4\"\n style=\"min-height: 180px\"\n ></c8y-progress-bar>\n\n <c8y-operation-result\n *ngIf=\"!isUpdateOngoing && !updateFailure\"\n text=\"{{ 'Update completed' | translate }}\"\n [size]=\"120\"\n [vertical]=\"true\"\n type=\"success\"\n ></c8y-operation-result>\n <c8y-operation-result\n *ngIf=\"!isUpdateOngoing && updateFailure\"\n text=\"{{ 'Failed to update application.' | translate }}\"\n [size]=\"120\"\n [vertical]=\"true\"\n type=\"error\"\n ></c8y-operation-result>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Close' | translate }}\"\n [disabled]=\"isUpdateOngoing\"\n class=\"btn btn-default\"\n (click)=\"done()\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ProgressBarComponent, selector: "c8y-progress-bar", inputs: ["message", "progress"] }, { kind: "component", type: i3.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
@@ -78,4 +67,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
78
67
  type: ViewChild,
79
68
  args: ['modal', { static: false }]
80
69
  }] } });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWFwcGxpY2F0aW9uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzL3VwZGF0ZS1hcHBsaWNhdGlvbi1tb2RhbC91cGRhdGUtYXBwbGljYXRpb24tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXByb3BlcnRpZXMvdXBkYXRlLWFwcGxpY2F0aW9uLW1vZGFsL3VwZGF0ZS1hcHBsaWNhdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7O0FBTXhFLE1BQU0sT0FBTywrQkFBK0I7SUFjMUMsWUFDVSxnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLGtCQUFzQyxFQUN0QyxZQUEwQjtRQUgxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQWhCcEMsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFHdEIsV0FBTSxHQUFrQixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixJ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bnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TZXJ2aWNlLCBJQXBwbGljYXRpb24sIEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEVjb3N5c3RlbVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktdXBkYXRlLWFwcGxpY2F0aW9uLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VwZGF0ZS1hcHBsaWNhdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXBkYXRlQXBwbGljYXRpb25Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ21vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByaXZhdGUgbW9kYWw7XG4gIGlzVXBkYXRlT25nb2luZyA9IHRydWU7XG4gIHVwZGF0ZUZhaWx1cmUgPSBmYWxzZTtcbiAgc291cmNlUGFja2FnZTogSUFwcGxpY2F0aW9uO1xuICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uO1xuICByZXN1bHQ6IFByb21pc2U8dm9pZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcblxuICBwcml2YXRlIF9yZXNvbHZlOiAodmFsdWU6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPikgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAodmFsdWU6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPikgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVBcHBsaWNhdGlvbigpO1xuICB9XG5cbiAgZG9uZSgpIHtcbiAgICBpZiAoIXRoaXMudXBkYXRlRmFpbHVyZSkge1xuICAgICAgdGhpcy5fcmVzb2x2ZSgpO1xuICAgICAgdGhpcy5tb2RhbC5fZGlzbWlzcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9yZWplY3QoKTtcbiAgICB0aGlzLm1vZGFsLl9kaXNtaXNzKCk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBsaWNhdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmluYXJ5TW9JZCA9IHRoaXMuc291cmNlUGFja2FnZS5hY3RpdmVWZXJzaW9uSWQ7XG4gICAgICBhd2FpdCB0aGlzLnVwbG9hZE5ld0JpbmFyeShiaW5hcnlNb0lkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5yZXM/LnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmFsbEJhY2tUb0Nsb25lVXBkYXRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZUZhaWx1cmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzVXBkYXRlT25nb2luZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkTmV3QmluYXJ5KGJpbmFyeU1vSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHsgZGF0YTogYmluYXJ5TW8gfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5TW9JZCk7XG4gICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmJpbmFyeS5kb3dubG9hZChiaW5hcnlNby5pZCk7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IGJpbmFyeS5ibG9iKCk7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgYmluYXJ5TW8ubmFtZSk7XG4gICAgY29uc3QgYXBwID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwbG9hZEFyY2hpdmVUb0FwcChmaWxlLCB0aGlzLmFwcGxpY2F0aW9uLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcE1hbmlmZXN0KGFwcCwgdGhpcy5zb3VyY2VQYWNrYWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmFsbEJhY2tUb0Nsb25lVXBkYXRlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGE6IGNsb25lZEFwcCB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY2xvbmUodGhpcy5zb3VyY2VQYWNrYWdlKTtcbiAgICAgIGF3YWl0IHRoaXMudXBsb2FkTmV3QmluYXJ5KGNsb25lZEFwcC5hY3RpdmVWZXJzaW9uSWQpO1xuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmRlbGV0ZUFwcChjbG9uZWRBcHAsIHRydWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LW1vZGFsXG4gIFt0aXRsZV09XCInVXBkYXRlIGFwcGxpY2F0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gIFtoZWFkZXJDbGFzc2VzXT1cIidkaWFsb2ctaGVhZGVyJ1wiXG4gIFtjdXN0b21Gb290ZXJdPVwidHJ1ZVwiXG4gICNtb2RhbFxuPlxuICA8bmctY29udGFpbmVyIGM4eS1tb2RhbC10aXRsZT5cbiAgICA8c3BhbiBjbGFzcz1cImRsdC1jOHktaWNvbi1pbnN0YWxsaW5nLXVwZGF0ZXNcIj48L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxjOHktcHJvZ3Jlc3MtYmFyXG4gICAgKm5nSWY9XCJpc1VwZGF0ZU9uZ29pbmdcIlxuICAgIFttZXNzYWdlXT1cIidVcGRhdGluZ+KApicgfCB0cmFuc2xhdGVcIlxuICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgZC1ibG9jayBwLXQtNTYgcC1iLTU2IG0tdC00IG0tYi00XCJcbiAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDE4MHB4XCJcbiAgPjwvYzh5LXByb2dyZXNzLWJhcj5cblxuICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAqbmdJZj1cIiFpc1VwZGF0ZU9uZ29pbmcgJiYgIXVwZGF0ZUZhaWx1cmVcIlxuICAgIHRleHQ9XCJ7eyAnVXBkYXRlIGNvbXBsZXRlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIFtzaXplXT1cIjEyMFwiXG4gICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICpuZ0lmPVwiIWlzVXBkYXRlT25nb2luZyAmJiB1cGRhdGVGYWlsdXJlXCJcbiAgICB0ZXh0PVwie3sgJ0ZhaWxlZCB0byB1cGRhdGUgYXBwbGljYXRpb24uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgW3NpemVdPVwiMTIwXCJcbiAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgdHlwZT1cImVycm9yXCJcbiAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0aXRsZT1cInt7ICdDbG9zZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgW2Rpc2FibGVkXT1cImlzVXBkYXRlT25nb2luZ1wiXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAoY2xpY2spPVwiZG9uZSgpXCJcbiAgICA+XG4gICAgICB7eyAnQ2xvc2UnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9jOHktbW9kYWw+XG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWFwcGxpY2F0aW9uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzL3VwZGF0ZS1hcHBsaWNhdGlvbi1tb2RhbC91cGRhdGUtYXBwbGljYXRpb24tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXByb3BlcnRpZXMvdXBkYXRlLWFwcGxpY2F0aW9uLW1vZGFsL3VwZGF0ZS1hcHBsaWNhdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQWdCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7O0FBTXhFLE1BQU0sT0FBTywrQkFBK0I7SUFjMUMsWUFDVSxnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLGtCQUFzQyxFQUN0QyxZQUEwQjtRQUgxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQWhCcEMsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFHdEIsV0FBTSxHQUFrQixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQVVBLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLElBQUk7WUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQztZQUN0RCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7WUFDbEYsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLENBQ3RELElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUNuQyxDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFO2dCQUN6QixJQUFJO29CQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FDaEUsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FDbkIsQ0FBQyxDQUFDO2lCQUNKO2dCQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNYLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyQzthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0Y7Z0JBQVM7WUFDUixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztTQUM5QjtJQUNILENBQUM7OzRIQTlEVSwrQkFBK0I7Z0hBQS9CLCtCQUErQixvS0NUNUMseXFDQTBDQTsyRkRqQ2EsK0JBQStCO2tCQUozQyxTQUFTOytCQUNFLDhCQUE4QjtrTUFJTyxLQUFLO3NCQUFuRCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNlcnZpY2UsIElBcHBsaWNhdGlvbiwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRWNvc3lzdGVtU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS11cGRhdGUtYXBwbGljYXRpb24tbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBkYXRlLWFwcGxpY2F0aW9uLW1vZGFsLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBVcGRhdGVBcHBsaWNhdGlvbk1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZCgnbW9kYWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHJpdmF0ZSBtb2RhbDtcbiAgaXNVcGRhdGVPbmdvaW5nID0gdHJ1ZTtcbiAgdXBkYXRlRmFpbHVyZSA9IGZhbHNlO1xuICBzb3VyY2VQYWNrYWdlOiBJQXBwbGljYXRpb247XG4gIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb247XG4gIHJlc3VsdDogUHJvbWlzZTx2b2lkPiA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xuXG4gIHByaXZhdGUgX3Jlc29sdmU6ICh2YWx1ZTogdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+KSA9PiB2b2lkO1xuICBwcml2YXRlIF9yZWplY3Q6ICh2YWx1ZTogdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUFwcGxpY2F0aW9uKCk7XG4gIH1cblxuICBkb25lKCkge1xuICAgIGlmICghdGhpcy51cGRhdGVGYWlsdXJlKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlKCk7XG4gICAgICB0aGlzLm1vZGFsLl9kaXNtaXNzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3JlamVjdCgpO1xuICAgIHRoaXMubW9kYWwuX2Rpc21pc3MoKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcGxpY2F0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiaW5hcnlNb0lkID0gdGhpcy5zb3VyY2VQYWNrYWdlLmFjdGl2ZVZlcnNpb25JZDtcbiAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5TW9JZCk7IC8vIG9ubHkgdHJ5aW5nIGlmIHdlIGNhbiBhY2Nlc3MgaXRcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGxvYWRCaW5hcnlGcm9tT3RoZXJQYWNrYWdlKFxuICAgICAgICB0aGlzLnNvdXJjZVBhY2thZ2UsXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24sXG4gICAgICAgIHRoaXMuc291cmNlUGFja2FnZS5hY3RpdmVWZXJzaW9uSWRcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUucmVzPy5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRmFpbHVyZSA9ICEoYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmZhbGxiYWNrVG9DbG9uZShcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24sXG4gICAgICAgICAgICB0aGlzLnNvdXJjZVBhY2thZ2VcbiAgICAgICAgICApKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUZhaWx1cmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZWNvc3lzdGVtU2VydmljZS5hbGVydEVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZUZhaWx1cmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuYWxlcnRFcnJvcihlKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1VwZGF0ZU9uZ29pbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxjOHktbW9kYWxcbiAgW3RpdGxlXT1cIidVcGRhdGUgYXBwbGljYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgW2hlYWRlckNsYXNzZXNdPVwiJ2RpYWxvZy1oZWFkZXInXCJcbiAgW2N1c3RvbUZvb3Rlcl09XCJ0cnVlXCJcbiAgI21vZGFsXG4+XG4gIDxuZy1jb250YWluZXIgYzh5LW1vZGFsLXRpdGxlPlxuICAgIDxzcGFuIGNsYXNzPVwiZGx0LWM4eS1pY29uLWluc3RhbGxpbmctdXBkYXRlc1wiPjwvc3Bhbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGM4eS1wcm9ncmVzcy1iYXJcbiAgICAqbmdJZj1cImlzVXBkYXRlT25nb2luZ1wiXG4gICAgW21lc3NhZ2VdPVwiJ1VwZGF0aW5n4oCmJyB8IHRyYW5zbGF0ZVwiXG4gICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBkLWJsb2NrIHAtdC01NiBwLWItNTYgbS10LTQgbS1iLTRcIlxuICAgIHN0eWxlPVwibWluLWhlaWdodDogMTgwcHhcIlxuICA+PC9jOHktcHJvZ3Jlc3MtYmFyPlxuXG4gIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICpuZ0lmPVwiIWlzVXBkYXRlT25nb2luZyAmJiAhdXBkYXRlRmFpbHVyZVwiXG4gICAgdGV4dD1cInt7ICdVcGRhdGUgY29tcGxldGVkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgW3NpemVdPVwiMTIwXCJcbiAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgdHlwZT1cInN1Y2Nlc3NcIlxuICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgKm5nSWY9XCIhaXNVcGRhdGVPbmdvaW5nICYmIHVwZGF0ZUZhaWx1cmVcIlxuICAgIHRleHQ9XCJ7eyAnRmFpbGVkIHRvIHVwZGF0ZSBhcHBsaWNhdGlvbi4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICBbc2l6ZV09XCIxMjBcIlxuICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICB0eXBlPVwiZXJyb3JcIlxuICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b25cbiAgICAgIHRpdGxlPVwie3sgJ0Nsb3NlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNVcGRhdGVPbmdvaW5nXCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIChjbGljayk9XCJkb25lKClcIlxuICAgID5cbiAgICAgIHt7ICdDbG9zZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2M4eS1tb2RhbD5cbiJdfQ==
@@ -128,7 +128,7 @@ export class InstallFromPackageComponent {
128
128
  this.canDeploy = true;
129
129
  }
130
130
  async selectPackage(selectedPackage) {
131
- const apps = (await this.ecosystemService.getApplications()).data;
131
+ const apps = await this.ecosystemService.getHostedAndPackageApplications();
132
132
  this.newAppConfig = this.ecosystemService.getUniqueAppConfig(selectedPackage, apps);
133
133
  this.selectedPackage = selectedPackage;
134
134
  this.loadSelectedPackageVersions();
@@ -184,4 +184,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
184
184
  type: ViewChild,
185
185
  args: [ApplicationPropertiesFormComponent]
186
186
  }] } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC1mcm9tLXBhY2thZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9ucy9pbnN0YWxsLWZyb20tcGFja2FnZS9pbnN0YWxsLWZyb20tcGFja2FnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb25zL2luc3RhbGwtZnJvbS1wYWNrYWdlL2luc3RhbGwtZnJvbS1wYWNrYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsZ0JBQWdCLEVBRWpCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7QUFNMUYsTUFBTSxPQUFPLDJCQUEyQjtJQW9CdEMsWUFDVSxnQkFBa0MsRUFDbEMsa0JBQXNDLEVBQ3RDLGVBQWdDLEVBQ2hDLGNBQThCLEVBQzlCLGdCQUFrQztRQUpsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIs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QUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDOzt3SEEzTVUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsMkhBaUIzQixrQ0FBa0MsZ0RDbkMvQyw0dkxBcUtBOzJGRG5KYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsMEJBQTBCO2tPQXFCcEMseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJUmVzdWx0TGlzdFxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBQbHVnaW5zU2VydmljZSwgV2l6YXJkQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm1Db21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktaW5zdGFsbC1mcm9tLXBhY2thZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5zdGFsbC1mcm9tLXBhY2thZ2UuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEluc3RhbGxGcm9tUGFja2FnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG5ld0FwcENvbmZpZzogSUFwcGxpY2F0aW9uO1xuICBzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbjtcbiAgcGFja2FnZXM6IElBcHBsaWNhdGlvbltdO1xuICBpblByb2dyZXNzOiBib29sZWFuO1xuICBkZXBsb3llZFdpdGhTdWNjZXNzID0gZmFsc2U7XG4gIGlzRGVwbG95ZWQgPSBmYWxzZTtcblxuICBtb2RlbCA9IHtcbiAgICBzZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIGJpbmFyeToge1xuICAgICAgaWQ6IHVuZGVmaW5lZFxuICAgIH1cbiAgfTtcbiAgY2FuRGVwbG95ID0gZmFsc2U7XG4gIG9uSW5wdXQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgdmVyc2lvbnMkOiBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElBcHBsaWNhdGlvblZlcnNpb24+PjtcbiAgQFZpZXdDaGlsZChBcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtQ29tcG9uZW50KVxuICBhcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtOiBBcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgd2l6YXJkQ29tcG9uZW50OiBXaXphcmRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZTogUGx1Z2luc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRQYWNrYWdlcygpO1xuICB9XG5cbiAgYmFjaygpIHtcbiAgICB0aGlzLndpemFyZENvbXBvbmVudC5yZXNldCgpO1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFBhY2thZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy52ZXJzaW9ucyQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tb2RlbCA9IHtcbiAgICAgIHNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgICBiaW5hcnk6IHtcbiAgICAgICAgaWQ6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy53aXphcmRDb21wb25lbnQuY2xvc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRlcGxveUFwcCgpIHtcbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIGNvbnN0IGZvcm1Hcm91cFZhbHVlID0gdGhpcy5hcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHAgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmNyZWF0ZUNvbmZpZyh0aGlzLnNlbGVjdGVkUGFja2FnZSwgZm9ybUdyb3VwVmFsdWUpO1xuICAgIGNvbmZpZy52ZXJzaW9uID0gdGhpcy5tb2RlbC5zZWxlY3RlZC52ZXJzaW9uO1xuICAgIGNvbmZpZy5pc1NldHVwID0gdHJ1ZTtcbiAgICBpZiAoIWNvbmZpZy5tYW5pZmVzdCkge1xuICAgICAgY29uZmlnLm1hbmlmZXN0ID0ge307XG4gICAgfVxuICAgIGNvbmZpZy5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjb25maWcubWFuaWZlc3Quc291cmNlID0gdGhpcy5zZWxlY3RlZFBhY2thZ2UuaWQ7XG4gICAgY29uZmlnLm1hbmlmZXN0LnBhY2thZ2UgPSAnYmx1ZXByaW50JztcbiAgICBjb25maWcucmVzb3VyY2VzVXJsID0gJy8nO1xuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHBcbiAgICBjb25zdCBuZXdBcHAgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKGNvbmZpZykpLmRhdGE7XG4gICAgLy8gQmluYXJ5XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBiaW5hcnkgZGV0YWlsc1xuICAgICAgY29uc3QgeyBkYXRhOiBiaW5hcnlEZXRhaWxzIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKFxuICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkLmJpbmFyeUlkXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgYmluYXJ5IGZyb20gc3BlY2lmaWMgcGFja2FnZSB2ZXJzaW9uXG4gICAgICBjb25zdCBiaW5hcnkgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QmluYXJ5KHRoaXMuc2VsZWN0ZWRQYWNrYWdlLCB7XG4gICAgICAgIGlkOiB0aGlzLm1vZGVsLnNlbGVjdGVkLmJpbmFyeUlkXG4gICAgICB9KTtcbiAgICAgIC8vIENyZWF0ZSB6aXBcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiBiaW5hcnlEZXRhaWxzLmNvbnRlbnRUeXBlIH0pO1xuICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtmaWxlQmluYXJ5XSwgYmluYXJ5RGV0YWlscy5uYW1lLCB7XG4gICAgICAgIHR5cGU6IGJpbmFyeURldGFpbHMuY29udGVudFR5cGVcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGxvYWQgYmluYXJ5IHRvIG5ldyBhcHBcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGxvYWRBcmNoaXZlVG9BcHAoZmlsZSwgbmV3QXBwKTtcbiAgICAgIC8vIFVwZGF0ZSBtYW5pZmVzdFxuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcE1hbmlmZXN0KG5ld0FwcCwgdGhpcy5zZWxlY3RlZFBhY2thZ2UpO1xuXG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3I/LnJlcz8uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKG5ld0FwcC5pZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZmFsbGJhY2tUb0Nsb25lTGF0ZXN0KGNvbmZpZyk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzRGVwbG95ZWQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmYWxsYmFja1RvQ2xvbmVMYXRlc3QoY29uZmlnKSB7XG4gICAgbGV0IGNsb25lZFBrZztcbiAgICB0cnkge1xuICAgICAgY2xvbmVkUGtnID0gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNsb25lKHRoaXMuc2VsZWN0ZWRQYWNrYWdlKSkuZGF0YTtcblxuICAgICAgLy8gY2xlYW4gb3V0IGFsbCBmYWxzZWx5IGNsb25lZCBhcHBsaWNhdGlvblZlcnNpb25zLCB3ZSBkb24ndCBuZWVkIHRoZW1cbiAgICAgIGZvciAoY29uc3QgYXBwVmVyc2lvbiBvZiBjbG9uZWRQa2cuYXBwbGljYXRpb25WZXJzaW9ucyBhcyBJQXBwbGljYXRpb25WZXJzaW9uW10pIHtcbiAgICAgICAgaWYgKGFwcFZlcnNpb24udGFncy5pbmNsdWRlcygnbGF0ZXN0JykpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoY2xvbmVkUGtnLCBhcHBWZXJzaW9uLnZlcnNpb24sIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZGVsZXRlUGFja2FnZVZlcnNpb24oY2xvbmVkUGtnLCB7XG4gICAgICAgICAgdmVyc2lvbjogYXBwVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNvbmZpZy50eXBlO1xuICAgICAgY29uZmlnLmlzUGFja2FnZSA9IGZhbHNlO1xuICAgICAgY29uc3QgeyBkYXRhOiBuZXdBcHAgfSA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGRhdGVBcHAoXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogY2xvbmVkUGtnLmlkLFxuICAgICAgICAgIGFjdGl2ZVZlcnNpb25JZDogY2xvbmVkUGtnLmFjdGl2ZVZlcnNpb25JZCxcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBkYXRlQXBwTWFuaWZlc3QobmV3QXBwLCB0aGlzLnNlbGVjdGVkUGFja2FnZSk7XG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZGVsZXRlQXBwKGNsb25lZFBrZy5pZCwgdHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubWFya0FzRGVwbG95ZWQoKTtcbiAgfVxuXG4gIG9uQXBwVmVyc2lvblNlbGVjdChhcHBWZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLCB7XG4gICAgICBzZWxlY3RlZDogYXBwVmVyc2lvblxuICAgIH0pO1xuICAgIHRoaXMuY2FuRGVwbG95ID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdFBhY2thZ2Uoc2VsZWN0ZWRQYWNrYWdlOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRBcHBsaWNhdGlvbnMoKSkuZGF0YTtcbiAgICB0aGlzLm5ld0FwcENvbmZpZyA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRVbmlxdWVBcHBDb25maWcoc2VsZWN0ZWRQYWNrYWdlLCBhcHBzKTtcbiAgICB0aGlzLnNlbGVjdGVkUGFja2FnZSA9IHNlbGVjdGVkUGFja2FnZTtcblxuICAgIHRoaXMubG9hZFNlbGVjdGVkUGFja2FnZVZlcnNpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRTZWxlY3RlZFBhY2thZ2VWZXJzaW9ucygpIHtcbiAgICB0aGlzLnZlcnNpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5nZXRBcHBWZXJzaW9ucyh0aGlzLnNlbGVjdFBhY2thZ2UpLFxuICAgICAgdGhpcy5vbklucHV0LmFzT2JzZXJ2YWJsZSgpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdExpc3QsIGZpbHRlclN0cl0pID0+IHtcbiAgICAgICAgdGhpcy5jYW5EZXBsb3kgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdmVyc2lvbnNGaWx0ZXJlZEJ5U3RyID0gdGhpcy5maWx0ZXJBcHBWZXJzaW9ucyhyZXN1bHRMaXN0LmRhdGEsIGZpbHRlclN0cik7XG4gICAgICAgIGNvbnN0IHNvcnRlZEFwcFZlcnNpb25zID0gdGhpcy5wbHVnaW5zU2VydmljZS5zb3J0VmVyc2lvbnMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGlzdDogdmVyc2lvbnNGaWx0ZXJlZEJ5U3RyLFxuICAgICAgICAgICAgcGF0aDogWyd2ZXJzaW9uJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgICdkZXNjJ1xuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlRm9ySW5wdXQoc29ydGVkQXBwVmVyc2lvbnMpO1xuICAgICAgICByZXR1cm4geyBkYXRhOiBzb3J0ZWRBcHBWZXJzaW9ucywgcmVzOiByZXN1bHRMaXN0LnJlcyB9O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBWZXJzaW9ucyhtbzogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgdmVyc2lvbnMgPSBtbz8uYXBwbGljYXRpb25WZXJzaW9ucztcbiAgICByZXR1cm4gdmVyc2lvbnMgJiYgdmVyc2lvbnMubGVuZ3RoID4gMFxuICAgICAgPyBvZih7IGRhdGE6IHZlcnNpb25zLCByZXM6IHVuZGVmaW5lZCB9KVxuICAgICAgOiBmcm9tKHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RWZXJzaW9ucyh0aGlzLnNlbGVjdGVkUGFja2FnZS5pZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWVGb3JJbnB1dCh2ZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLnNlbGVjdGVkICYmIHZlcnNpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhdGVzdCA9IHZlcnNpb25zLmZpbmQodiA9PiB2LnRhZ3MuaW5jbHVkZXMoJ2xhdGVzdCcpKTtcbiAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWQgPSBsYXRlc3QgfHwgdmVyc2lvbnNbMF07XG4gICAgICB0aGlzLmNhbkRlcGxveSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJBcHBWZXJzaW9ucyhcbiAgICBhcHBWZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdLFxuICAgIGZpbHRlclN0cjogc3RyaW5nXG4gICk6IElBcHBsaWNhdGlvblZlcnNpb25bXSB7XG4gICAgcmV0dXJuIGZpbHRlclN0ciA9PT0gJydcbiAgICAgID8gYXBwVmVyc2lvbnNcbiAgICAgIDogYXBwVmVyc2lvbnMuZmlsdGVyKGFwcFZlcnNpb24gPT4gYXBwVmVyc2lvbi52ZXJzaW9uLmluY2x1ZGVzKGZpbHRlclN0cikpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNEZXBsb3llZCgpIHtcbiAgICB0aGlzLmlzRGVwbG95ZWQgPSB0cnVlO1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUGFja2FnZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXBwbGljYXRpb25zID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldFBhY2thZ2VBcHBsaWNhdGlvbnMoKTtcbiAgICB0aGlzLnBhY2thZ2VzID0gYXBwbGljYXRpb25zLmZpbHRlcihhcHAgPT4gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzUGFja2FnZUJsdWVwcmludChhcHApKTtcbiAgfVxufVxuIiwiPGM4eS13aXphcmQtaGVhZGVyPlxuICA8aSBbYzh5SWNvbl09XCInYmlnLXBhcmNlbCdcIj48L2k+XG4gIDxoNCBpZD1cIm1vZGFsLXRpdGxlXCIgdHJhbnNsYXRlPkluc3RhbGwgZnJvbSBleHRlbnNpb24gcGFja2FnZTwvaDQ+XG48L2M4eS13aXphcmQtaGVhZGVyPlxuPGM4eS13aXphcmQtYm9keT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWxlY3RlZFBhY2thZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaW5uZXItc2Nyb2xsXCIgaWQ9XCJtb2RhbC1ib2R5XCI+XG4gICAgICA8cCBjbGFzcz1cInAtMTYgdGV4dC1tZWRpdW0gdGV4dC1jZW50ZXIgc2VwYXJhdG9yLWJvdHRvbSBzdGlja3ktdG9wIGJnLWxldmVsLTBcIj5cbiAgICAgICAge3sgJ1NlbGVjdCBmcm9tIGF2YWlsYWJsZSBleHRlbnNpb24gcGFja2FnZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG5cbiAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgKm5nSWY9XCIhcGFja2FnZXM/Lmxlbmd0aFwiXG4gICAgICAgIFtpY29uXT1cIidiaWctcGFyY2VsJ1wiXG4gICAgICAgIFt0aXRsZV09XCInTm8gZXh0ZW5zaW9uIHBhY2thZ2VzIHRvIGRpc3BsYXkuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwicGFja2FnZXM/Lmxlbmd0aFwiIGNsYXNzPVwiYzh5LXdpemFyZC1saXN0LW5hdlwiIHN0eWxlPVwibWluLWhlaWdodDogMjU3cHhcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwYWNrYWdlIG9mIHBhY2thZ2VzXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGFja2FnZShwYWNrYWdlKVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBwYWNrYWdlLm5hbWUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cImJpZy1wYXJjZWxcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaWNvblwiPjwvaT5cbiAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT1cInBhY2thZ2UubmFtZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNEZXBsb3llZCAmJiBzZWxlY3RlZFBhY2thZ2VcIj5cbiAgICA8cCBjbGFzcz1cInAtMTYgdGV4dC1jZW50ZXIgdGV4dC1tZWRpdW0gc2VwYXJhdG9yLWJvdHRvbSBzdGlja3ktdG9wIGJnLWxldmVsLTBcIj5cbiAgICAgIHt7ICdQcm92aWRlIGFwcGxpY2F0aW9uIGRldGFpbHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1jb2wgYS1pLWNlbnRlciBqLWMtY2VudGVyXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAyNTdweFwiPlxuICAgICAgPGM4eS1hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzLWZvcm1cbiAgICAgICAgKm5nSWY9XCIhaW5Qcm9ncmVzc1wiXG4gICAgICAgIFthcHBsaWNhdGlvbl09XCJuZXdBcHBDb25maWdcIlxuICAgICAgICBjbGFzcz1cImQtYmxvY2sgZml0LXdcIlxuICAgICAgPjwvYzh5LWFwcGxpY2F0aW9uLXByb3BlcnRpZXMtZm9ybT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpblByb2dyZXNzXCI+XG4gICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBwYWRkaW5nOiAnMCAxNnB4JyB9XCIgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWdyYXktd2hpdGVcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwicGFja2FnZVZlcnNpb25cIiB0cmFuc2xhdGU+VXNlIGV4dGVuc2lvbiBwYWNrYWdlIHZlcnNpb248L2xhYmVsPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxjOHktdHlwZWFoZWFkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBuYW1lPVwicGFja2FnZVZlcnNpb25cIlxuICAgICAgICAgICAgICAob25TZWFyY2gpPVwib25JbnB1dC5uZXh0KCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdTZWxlY3Qgb3IgZW50ZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgW2Rpc3BsYXlQcm9wZXJ0eV09XCIndmVyc2lvbidcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtoaWRlTmV3XT1cInRydWVcIlxuICAgICAgICAgICAgICBbY29udGFpbmVyXT1cIidib2R5J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktbGlcbiAgICAgICAgICAgICAgICAqYzh5Rm9yPVwibGV0IHZlcnNpb24gb2YgdmVyc2lvbnMkOyBsb2FkTW9yZTogJ2F1dG8nOyBub3RGb3VuZDogbm90Rm91bmRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXBwVmVyc2lvblNlbGVjdCh2ZXJzaW9uKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWwtOCBwLXItOCBjOHktbGlzdF9faXRlbS0tbGlua1wiXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJtb2RlbC5zZWxlY3RlZCA9PT0gdmVyc2lvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yzh5LWxpLWljb24gaWNvbj1cImJpZy1wYXJjZWxcIj48L2M4eS1saS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZsZXgtZGlyZWN0aW9uJzogJ3JvdycsXG4gICAgICAgICAgICAgICAgICAgICdhbGlnbi1jb250ZW50JzogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQnOiAnc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgICAgICAgICAgICdhbGlnbi1pdGVtcyc6ICdjZW50ZXInXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ2ZXJzaW9uLnZlcnNpb24gfHwgJy0tJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtwYXR0ZXJuXT1cIm9uSW5wdXQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuXG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHRhZyBvZiB2ZXJzaW9uLnRhZ3NcIiBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm8gbS1sLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyB0YWcgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90Rm91bmRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLWdyYXktbGlnaHRlciBwLThcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIob25JbnB1dCB8IGFzeW5jKT8ubGVuZ3RoID4gMCAmJiAodmVyc2lvbnMkIHwgYXN5bmMpPy5kYXRhPy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5ObyBtYXRjaCBmb3VuZC48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2M4eS10eXBlYWhlYWQ+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGM4eS1wcm9ncmVzcy1iYXJcbiAgICAgICAgW21lc3NhZ2VdPVwiJ0luc3RhbGxpbmfigKYnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBkLWJsb2NrXCJcbiAgICAgICAgKm5nSWY9XCJpblByb2dyZXNzXCJcbiAgICAgID48L2M4eS1wcm9ncmVzcy1iYXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlcGxveWVkXCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJkZXBsb3llZFdpdGhTdWNjZXNzOyBlbHNlIGZhaWxlZERlcGxveVwiXG4gICAgICBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAyNTdweFwiXG4gICAgPlxuICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgIHRleHQ9XCJ7eyAnQXBwbGljYXRpb24gY3JlYXRlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgICBjbGFzcz1cImxlYWRcIlxuICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNmYWlsZWREZXBsb3k+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgai1jLWNlbnRlclwiIHN0eWxlPVwibWluLWhlaWdodDogMjU3cHhcIj5cbiAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgdGV4dD1cInt7ICdBcHBsaWNhdGlvbiBjcmVhdGlvbiBmYWlsZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgIHR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvYzh5LXdpemFyZC1ib2R5PlxuXG48Yzh5LXdpemFyZC1mb290ZXI+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cIiFpc0RlcGxveWVkXCJcbiAgICAoY2xpY2spPVwic2VsZWN0ZWRQYWNrYWdlID8gY2xlYW4oKSA6IGJhY2soKVwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgIHRpdGxlPVwie3sgJ0JhY2snIHwgdHJhbnNsYXRlIH19XCJcbiAgICBbZGlzYWJsZWRdPVwiaW5Qcm9ncmVzc1wiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gID5cbiAgICB7eyAnQmFjaycgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7IGlzRGVwbG95ZWQgJiYgZGVwbG95ZWRXaXRoU3VjY2VzcyA/ICgnQ2xvc2UnIHwgdHJhbnNsYXRlKSA6ICgnQ2FuY2VsJyB8IHRyYW5zbGF0ZSkgfX1cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICA+XG4gICAge3sgaXNEZXBsb3llZCAmJiBkZXBsb3llZFdpdGhTdWNjZXNzID8gKCdDbG9zZScgfCB0cmFuc2xhdGUpIDogKCdDYW5jZWwnIHwgdHJhbnNsYXRlKSB9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgdGl0bGU9XCJ7eyAnSW5zdGFsbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwiZGVwbG95QXBwKClcIlxuICAgIFtkaXNhYmxlZF09XCJpblByb2dyZXNzIHx8ICFwYWNrYWdlcz8ubGVuZ3RoXCJcbiAgICAqbmdJZj1cIiFpc0RlcGxveWVkXCJcbiAgPlxuICAgIHt7ICdJbnN0YWxsJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LXdpemFyZC1mb290ZXI+XG4iXX0=
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC1mcm9tLXBhY2thZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9ucy9pbnN0YWxsLWZyb20tcGFja2FnZS9pbnN0YWxsLWZyb20tcGFja2FnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb25zL2luc3RhbGwtZnJvbS1wYWNrYWdlL2luc3RhbGwtZnJvbS1wYWNrYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsZ0JBQWdCLEVBRWpCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7QUFNMUYsTUFBTSxPQUFPLDJCQUEyQjtJQW9CdEMsWUFDVSxnQkFBa0MsRUFDbEMsa0JBQXNDLEVBQ3RDLGVBQWdDLEVBQ2hDLGNBQThCLEVBQzlCLGdCQUFrQztRQUpsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIs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Q0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDOzt3SEEzTVUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsMkhBaUIzQixrQ0FBa0MsZ0RDbkMvQyw0dkxBcUtBOzJGRG5KYSwyQkFBMkI7a0JBSnZDLFNBQVM7K0JBQ0UsMEJBQTBCO2tPQXFCcEMseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJUmVzdWx0TGlzdFxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBQbHVnaW5zU2VydmljZSwgV2l6YXJkQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm1Db21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktaW5zdGFsbC1mcm9tLXBhY2thZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5zdGFsbC1mcm9tLXBhY2thZ2UuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEluc3RhbGxGcm9tUGFja2FnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG5ld0FwcENvbmZpZzogSUFwcGxpY2F0aW9uO1xuICBzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbjtcbiAgcGFja2FnZXM6IElBcHBsaWNhdGlvbltdO1xuICBpblByb2dyZXNzOiBib29sZWFuO1xuICBkZXBsb3llZFdpdGhTdWNjZXNzID0gZmFsc2U7XG4gIGlzRGVwbG95ZWQgPSBmYWxzZTtcblxuICBtb2RlbCA9IHtcbiAgICBzZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIGJpbmFyeToge1xuICAgICAgaWQ6IHVuZGVmaW5lZFxuICAgIH1cbiAgfTtcbiAgY2FuRGVwbG95ID0gZmFsc2U7XG4gIG9uSW5wdXQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgdmVyc2lvbnMkOiBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElBcHBsaWNhdGlvblZlcnNpb24+PjtcbiAgQFZpZXdDaGlsZChBcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtQ29tcG9uZW50KVxuICBhcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtOiBBcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgd2l6YXJkQ29tcG9uZW50OiBXaXphcmRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZTogUGx1Z2luc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRQYWNrYWdlcygpO1xuICB9XG5cbiAgYmFjaygpIHtcbiAgICB0aGlzLndpemFyZENvbXBvbmVudC5yZXNldCgpO1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFBhY2thZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy52ZXJzaW9ucyQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tb2RlbCA9IHtcbiAgICAgIHNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgICBiaW5hcnk6IHtcbiAgICAgICAgaWQ6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy53aXphcmRDb21wb25lbnQuY2xvc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRlcGxveUFwcCgpIHtcbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIGNvbnN0IGZvcm1Hcm91cFZhbHVlID0gdGhpcy5hcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHAgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmNyZWF0ZUNvbmZpZyh0aGlzLnNlbGVjdGVkUGFja2FnZSwgZm9ybUdyb3VwVmFsdWUpO1xuICAgIGNvbmZpZy52ZXJzaW9uID0gdGhpcy5tb2RlbC5zZWxlY3RlZC52ZXJzaW9uO1xuICAgIGNvbmZpZy5pc1NldHVwID0gdHJ1ZTtcbiAgICBpZiAoIWNvbmZpZy5tYW5pZmVzdCkge1xuICAgICAgY29uZmlnLm1hbmlmZXN0ID0ge307XG4gICAgfVxuICAgIGNvbmZpZy5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjb25maWcubWFuaWZlc3Quc291cmNlID0gdGhpcy5zZWxlY3RlZFBhY2thZ2UuaWQ7XG4gICAgY29uZmlnLm1hbmlmZXN0LnBhY2thZ2UgPSAnYmx1ZXByaW50JztcbiAgICBjb25maWcucmVzb3VyY2VzVXJsID0gJy8nO1xuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHBcbiAgICBjb25zdCBuZXdBcHAgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKGNvbmZpZykpLmRhdGE7XG4gICAgLy8gQmluYXJ5XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBiaW5hcnkgZGV0YWlsc1xuICAgICAgY29uc3QgeyBkYXRhOiBiaW5hcnlEZXRhaWxzIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKFxuICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkLmJpbmFyeUlkXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgYmluYXJ5IGZyb20gc3BlY2lmaWMgcGFja2FnZSB2ZXJzaW9uXG4gICAgICBjb25zdCBiaW5hcnkgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QmluYXJ5KHRoaXMuc2VsZWN0ZWRQYWNrYWdlLCB7XG4gICAgICAgIGlkOiB0aGlzLm1vZGVsLnNlbGVjdGVkLmJpbmFyeUlkXG4gICAgICB9KTtcbiAgICAgIC8vIENyZWF0ZSB6aXBcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiBiaW5hcnlEZXRhaWxzLmNvbnRlbnRUeXBlIH0pO1xuICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtmaWxlQmluYXJ5XSwgYmluYXJ5RGV0YWlscy5uYW1lLCB7XG4gICAgICAgIHR5cGU6IGJpbmFyeURldGFpbHMuY29udGVudFR5cGVcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGxvYWQgYmluYXJ5IHRvIG5ldyBhcHBcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGxvYWRBcmNoaXZlVG9BcHAoZmlsZSwgbmV3QXBwKTtcbiAgICAgIC8vIFVwZGF0ZSBtYW5pZmVzdFxuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcE1hbmlmZXN0KG5ld0FwcCwgdGhpcy5zZWxlY3RlZFBhY2thZ2UpO1xuXG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3I/LnJlcz8uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKG5ld0FwcC5pZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZmFsbGJhY2tUb0Nsb25lTGF0ZXN0KGNvbmZpZyk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzRGVwbG95ZWQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmYWxsYmFja1RvQ2xvbmVMYXRlc3QoY29uZmlnKSB7XG4gICAgbGV0IGNsb25lZFBrZztcbiAgICB0cnkge1xuICAgICAgY2xvbmVkUGtnID0gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNsb25lKHRoaXMuc2VsZWN0ZWRQYWNrYWdlKSkuZGF0YTtcblxuICAgICAgLy8gY2xlYW4gb3V0IGFsbCBmYWxzZWx5IGNsb25lZCBhcHBsaWNhdGlvblZlcnNpb25zLCB3ZSBkb24ndCBuZWVkIHRoZW1cbiAgICAgIGZvciAoY29uc3QgYXBwVmVyc2lvbiBvZiBjbG9uZWRQa2cuYXBwbGljYXRpb25WZXJzaW9ucyBhcyBJQXBwbGljYXRpb25WZXJzaW9uW10pIHtcbiAgICAgICAgaWYgKGFwcFZlcnNpb24udGFncy5pbmNsdWRlcygnbGF0ZXN0JykpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoY2xvbmVkUGtnLCBhcHBWZXJzaW9uLnZlcnNpb24sIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZGVsZXRlUGFja2FnZVZlcnNpb24oY2xvbmVkUGtnLCB7XG4gICAgICAgICAgdmVyc2lvbjogYXBwVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNvbmZpZy50eXBlO1xuICAgICAgY29uZmlnLmlzUGFja2FnZSA9IGZhbHNlO1xuICAgICAgY29uc3QgeyBkYXRhOiBuZXdBcHAgfSA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGRhdGVBcHAoXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogY2xvbmVkUGtnLmlkLFxuICAgICAgICAgIGFjdGl2ZVZlcnNpb25JZDogY2xvbmVkUGtnLmFjdGl2ZVZlcnNpb25JZCxcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBkYXRlQXBwTWFuaWZlc3QobmV3QXBwLCB0aGlzLnNlbGVjdGVkUGFja2FnZSk7XG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZGVsZXRlQXBwKGNsb25lZFBrZy5pZCwgdHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubWFya0FzRGVwbG95ZWQoKTtcbiAgfVxuXG4gIG9uQXBwVmVyc2lvblNlbGVjdChhcHBWZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLCB7XG4gICAgICBzZWxlY3RlZDogYXBwVmVyc2lvblxuICAgIH0pO1xuICAgIHRoaXMuY2FuRGVwbG95ID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHNlbGVjdFBhY2thZ2Uoc2VsZWN0ZWRQYWNrYWdlOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEhvc3RlZEFuZFBhY2thZ2VBcHBsaWNhdGlvbnMoKTtcbiAgICB0aGlzLm5ld0FwcENvbmZpZyA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRVbmlxdWVBcHBDb25maWcoc2VsZWN0ZWRQYWNrYWdlLCBhcHBzKTtcbiAgICB0aGlzLnNlbGVjdGVkUGFja2FnZSA9IHNlbGVjdGVkUGFja2FnZTtcblxuICAgIHRoaXMubG9hZFNlbGVjdGVkUGFja2FnZVZlcnNpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRTZWxlY3RlZFBhY2thZ2VWZXJzaW9ucygpIHtcbiAgICB0aGlzLnZlcnNpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5nZXRBcHBWZXJzaW9ucyh0aGlzLnNlbGVjdFBhY2thZ2UpLFxuICAgICAgdGhpcy5vbklucHV0LmFzT2JzZXJ2YWJsZSgpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdExpc3QsIGZpbHRlclN0cl0pID0+IHtcbiAgICAgICAgdGhpcy5jYW5EZXBsb3kgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgdmVyc2lvbnNGaWx0ZXJlZEJ5U3RyID0gdGhpcy5maWx0ZXJBcHBWZXJzaW9ucyhyZXN1bHRMaXN0LmRhdGEsIGZpbHRlclN0cik7XG4gICAgICAgIGNvbnN0IHNvcnRlZEFwcFZlcnNpb25zID0gdGhpcy5wbHVnaW5zU2VydmljZS5zb3J0VmVyc2lvbnMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGlzdDogdmVyc2lvbnNGaWx0ZXJlZEJ5U3RyLFxuICAgICAgICAgICAgcGF0aDogWyd2ZXJzaW9uJ11cbiAgICAgICAgICB9LFxuICAgICAgICAgICdkZXNjJ1xuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlRm9ySW5wdXQoc29ydGVkQXBwVmVyc2lvbnMpO1xuICAgICAgICByZXR1cm4geyBkYXRhOiBzb3J0ZWRBcHBWZXJzaW9ucywgcmVzOiByZXN1bHRMaXN0LnJlcyB9O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBWZXJzaW9ucyhtbzogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgdmVyc2lvbnMgPSBtbz8uYXBwbGljYXRpb25WZXJzaW9ucztcbiAgICByZXR1cm4gdmVyc2lvbnMgJiYgdmVyc2lvbnMubGVuZ3RoID4gMFxuICAgICAgPyBvZih7IGRhdGE6IHZlcnNpb25zLCByZXM6IHVuZGVmaW5lZCB9KVxuICAgICAgOiBmcm9tKHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RWZXJzaW9ucyh0aGlzLnNlbGVjdGVkUGFja2FnZS5pZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWVGb3JJbnB1dCh2ZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLnNlbGVjdGVkICYmIHZlcnNpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhdGVzdCA9IHZlcnNpb25zLmZpbmQodiA9PiB2LnRhZ3MuaW5jbHVkZXMoJ2xhdGVzdCcpKTtcbiAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWQgPSBsYXRlc3QgfHwgdmVyc2lvbnNbMF07XG4gICAgICB0aGlzLmNhbkRlcGxveSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJBcHBWZXJzaW9ucyhcbiAgICBhcHBWZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdLFxuICAgIGZpbHRlclN0cjogc3RyaW5nXG4gICk6IElBcHBsaWNhdGlvblZlcnNpb25bXSB7XG4gICAgcmV0dXJuIGZpbHRlclN0ciA9PT0gJydcbiAgICAgID8gYXBwVmVyc2lvbnNcbiAgICAgIDogYXBwVmVyc2lvbnMuZmlsdGVyKGFwcFZlcnNpb24gPT4gYXBwVmVyc2lvbi52ZXJzaW9uLmluY2x1ZGVzKGZpbHRlclN0cikpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNEZXBsb3llZCgpIHtcbiAgICB0aGlzLmlzRGVwbG95ZWQgPSB0cnVlO1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUGFja2FnZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXBwbGljYXRpb25zID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldFBhY2thZ2VBcHBsaWNhdGlvbnMoKTtcbiAgICB0aGlzLnBhY2thZ2VzID0gYXBwbGljYXRpb25zLmZpbHRlcihhcHAgPT4gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzUGFja2FnZUJsdWVwcmludChhcHApKTtcbiAgfVxufVxuIiwiPGM4eS13aXphcmQtaGVhZGVyPlxuICA8aSBbYzh5SWNvbl09XCInYmlnLXBhcmNlbCdcIj48L2k+XG4gIDxoNCBpZD1cIm1vZGFsLXRpdGxlXCIgdHJhbnNsYXRlPkluc3RhbGwgZnJvbSBleHRlbnNpb24gcGFja2FnZTwvaDQ+XG48L2M4eS13aXphcmQtaGVhZGVyPlxuPGM4eS13aXphcmQtYm9keT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWxlY3RlZFBhY2thZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaW5uZXItc2Nyb2xsXCIgaWQ9XCJtb2RhbC1ib2R5XCI+XG4gICAgICA8cCBjbGFzcz1cInAtMTYgdGV4dC1tZWRpdW0gdGV4dC1jZW50ZXIgc2VwYXJhdG9yLWJvdHRvbSBzdGlja3ktdG9wIGJnLWxldmVsLTBcIj5cbiAgICAgICAge3sgJ1NlbGVjdCBmcm9tIGF2YWlsYWJsZSBleHRlbnNpb24gcGFja2FnZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG5cbiAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgKm5nSWY9XCIhcGFja2FnZXM/Lmxlbmd0aFwiXG4gICAgICAgIFtpY29uXT1cIidiaWctcGFyY2VsJ1wiXG4gICAgICAgIFt0aXRsZV09XCInTm8gZXh0ZW5zaW9uIHBhY2thZ2VzIHRvIGRpc3BsYXkuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwicGFja2FnZXM/Lmxlbmd0aFwiIGNsYXNzPVwiYzh5LXdpemFyZC1saXN0LW5hdlwiIHN0eWxlPVwibWluLWhlaWdodDogMjU3cHhcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwYWNrYWdlIG9mIHBhY2thZ2VzXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGFja2FnZShwYWNrYWdlKVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBwYWNrYWdlLm5hbWUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cImJpZy1wYXJjZWxcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaWNvblwiPjwvaT5cbiAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT1cInBhY2thZ2UubmFtZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNEZXBsb3llZCAmJiBzZWxlY3RlZFBhY2thZ2VcIj5cbiAgICA8cCBjbGFzcz1cInAtMTYgdGV4dC1jZW50ZXIgdGV4dC1tZWRpdW0gc2VwYXJhdG9yLWJvdHRvbSBzdGlja3ktdG9wIGJnLWxldmVsLTBcIj5cbiAgICAgIHt7ICdQcm92aWRlIGFwcGxpY2F0aW9uIGRldGFpbHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1jb2wgYS1pLWNlbnRlciBqLWMtY2VudGVyXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAyNTdweFwiPlxuICAgICAgPGM4eS1hcHBsaWNhdGlvbi1wcm9wZXJ0aWVzLWZvcm1cbiAgICAgICAgKm5nSWY9XCIhaW5Qcm9ncmVzc1wiXG4gICAgICAgIFthcHBsaWNhdGlvbl09XCJuZXdBcHBDb25maWdcIlxuICAgICAgICBjbGFzcz1cImQtYmxvY2sgZml0LXdcIlxuICAgICAgPjwvYzh5LWFwcGxpY2F0aW9uLXByb3BlcnRpZXMtZm9ybT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpblByb2dyZXNzXCI+XG4gICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBwYWRkaW5nOiAnMCAxNnB4JyB9XCIgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWdyYXktd2hpdGVcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwicGFja2FnZVZlcnNpb25cIiB0cmFuc2xhdGU+VXNlIGV4dGVuc2lvbiBwYWNrYWdlIHZlcnNpb248L2xhYmVsPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxjOHktdHlwZWFoZWFkXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWwuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICBuYW1lPVwicGFja2FnZVZlcnNpb25cIlxuICAgICAgICAgICAgICAob25TZWFyY2gpPVwib25JbnB1dC5uZXh0KCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdTZWxlY3Qgb3IgZW50ZXInIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgW2Rpc3BsYXlQcm9wZXJ0eV09XCIndmVyc2lvbidcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtoaWRlTmV3XT1cInRydWVcIlxuICAgICAgICAgICAgICBbY29udGFpbmVyXT1cIidib2R5J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktbGlcbiAgICAgICAgICAgICAgICAqYzh5Rm9yPVwibGV0IHZlcnNpb24gb2YgdmVyc2lvbnMkOyBsb2FkTW9yZTogJ2F1dG8nOyBub3RGb3VuZDogbm90Rm91bmRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXBwVmVyc2lvblNlbGVjdCh2ZXJzaW9uKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWwtOCBwLXItOCBjOHktbGlzdF9faXRlbS0tbGlua1wiXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJtb2RlbC5zZWxlY3RlZCA9PT0gdmVyc2lvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Yzh5LWxpLWljb24gaWNvbj1cImJpZy1wYXJjZWxcIj48L2M4eS1saS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZsZXgtZGlyZWN0aW9uJzogJ3JvdycsXG4gICAgICAgICAgICAgICAgICAgICdhbGlnbi1jb250ZW50JzogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LWNvbnRlbnQnOiAnc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgICAgICAgICAgICdhbGlnbi1pdGVtcyc6ICdjZW50ZXInXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ2ZXJzaW9uLnZlcnNpb24gfHwgJy0tJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtwYXR0ZXJuXT1cIm9uSW5wdXQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuXG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHRhZyBvZiB2ZXJzaW9uLnRhZ3NcIiBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm8gbS1sLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyB0YWcgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90Rm91bmRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLWdyYXktbGlnaHRlciBwLThcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIob25JbnB1dCB8IGFzeW5jKT8ubGVuZ3RoID4gMCAmJiAodmVyc2lvbnMkIHwgYXN5bmMpPy5kYXRhPy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5ObyBtYXRjaCBmb3VuZC48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2M4eS10eXBlYWhlYWQ+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGM4eS1wcm9ncmVzcy1iYXJcbiAgICAgICAgW21lc3NhZ2VdPVwiJ0luc3RhbGxpbmfigKYnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBkLWJsb2NrXCJcbiAgICAgICAgKm5nSWY9XCJpblByb2dyZXNzXCJcbiAgICAgID48L2M4eS1wcm9ncmVzcy1iYXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlcGxveWVkXCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJkZXBsb3llZFdpdGhTdWNjZXNzOyBlbHNlIGZhaWxlZERlcGxveVwiXG4gICAgICBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXJcIlxuICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAyNTdweFwiXG4gICAgPlxuICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgIHRleHQ9XCJ7eyAnQXBwbGljYXRpb24gY3JlYXRlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgICBjbGFzcz1cImxlYWRcIlxuICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNmYWlsZWREZXBsb3k+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgai1jLWNlbnRlclwiIHN0eWxlPVwibWluLWhlaWdodDogMjU3cHhcIj5cbiAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgdGV4dD1cInt7ICdBcHBsaWNhdGlvbiBjcmVhdGlvbiBmYWlsZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgIHR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgY2xhc3M9XCJsZWFkXCJcbiAgICAgICAgPjwvYzh5LW9wZXJhdGlvbi1yZXN1bHQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvYzh5LXdpemFyZC1ib2R5PlxuXG48Yzh5LXdpemFyZC1mb290ZXI+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cIiFpc0RlcGxveWVkXCJcbiAgICAoY2xpY2spPVwic2VsZWN0ZWRQYWNrYWdlID8gY2xlYW4oKSA6IGJhY2soKVwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgIHRpdGxlPVwie3sgJ0JhY2snIHwgdHJhbnNsYXRlIH19XCJcbiAgICBbZGlzYWJsZWRdPVwiaW5Qcm9ncmVzc1wiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gID5cbiAgICB7eyAnQmFjaycgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b25cbiAgICB0aXRsZT1cInt7IGlzRGVwbG95ZWQgJiYgZGVwbG95ZWRXaXRoU3VjY2VzcyA/ICgnQ2xvc2UnIHwgdHJhbnNsYXRlKSA6ICgnQ2FuY2VsJyB8IHRyYW5zbGF0ZSkgfX1cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICA+XG4gICAge3sgaXNEZXBsb3llZCAmJiBkZXBsb3llZFdpdGhTdWNjZXNzID8gKCdDbG9zZScgfCB0cmFuc2xhdGUpIDogKCdDYW5jZWwnIHwgdHJhbnNsYXRlKSB9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgdGl0bGU9XCJ7eyAnSW5zdGFsbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwiZGVwbG95QXBwKClcIlxuICAgIFtkaXNhYmxlZF09XCJpblByb2dyZXNzIHx8ICFwYWNrYWdlcz8ubGVuZ3RoXCJcbiAgICAqbmdJZj1cIiFpc0RlcGxveWVkXCJcbiAgPlxuICAgIHt7ICdJbnN0YWxsJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LXdpemFyZC1mb290ZXI+XG4iXX0=
@@ -1,24 +1,23 @@
1
1
  import { Component, ViewChild } from '@angular/core';
2
- import { ApplicationService, InventoryService } from '@c8y/client';
3
- import { gettext, PluginsService, WizardComponent, GainsightService } from '@c8y/ngx-components';
2
+ import { Router } from '@angular/router';
3
+ import { GainsightService, PluginsService, ViewContext, WizardComponent, gettext } from '@c8y/ngx-components';
4
4
  import { ApplicationPropertiesFormComponent, EcosystemService, PRODUCT_EXPERIENCE } from '@c8y/ngx-components/ecosystem/shared';
5
5
  import { TranslateService } from '@ngx-translate/core';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@c8y/ngx-components/ecosystem/shared";
8
- import * as i2 from "@c8y/client";
9
- import * as i3 from "@c8y/ngx-components";
10
- import * as i4 from "@ngx-translate/core";
8
+ import * as i2 from "@c8y/ngx-components";
9
+ import * as i3 from "@ngx-translate/core";
10
+ import * as i4 from "@angular/router";
11
11
  import * as i5 from "@angular/common";
12
12
  import * as i6 from "@angular/forms";
13
13
  export class DeployApplicationComponent {
14
- constructor(ecosystemService, applicationService, wizardComponent, translate, inventoryService, pluginService, gainsightService) {
14
+ constructor(ecosystemService, wizardComponent, translate, pluginService, gainsightService, router) {
15
15
  this.ecosystemService = ecosystemService;
16
- this.applicationService = applicationService;
17
16
  this.wizardComponent = wizardComponent;
18
17
  this.translate = translate;
19
- this.inventoryService = inventoryService;
20
18
  this.pluginService = pluginService;
21
19
  this.gainsightService = gainsightService;
20
+ this.router = router;
22
21
  this.CURRENT_LOCATION = location.href;
23
22
  this.inProgress = true;
24
23
  this.isDeployed = false;
@@ -37,7 +36,7 @@ export class DeployApplicationComponent {
37
36
  this.package = this.wizardComponent.package;
38
37
  }
39
38
  async ngOnInit() {
40
- const apps = (await this.ecosystemService.getApplications()).data;
39
+ const apps = await this.ecosystemService.getHostedAndPackageApplications();
41
40
  this.newAppConfig = this.ecosystemService.getUniqueAppConfig(this.package, apps);
42
41
  this.headerText = this.getHeaderText();
43
42
  this.inProgress = false;
@@ -45,11 +44,12 @@ export class DeployApplicationComponent {
45
44
  async deployApp() {
46
45
  this.inProgress = true;
47
46
  const formGroupValue = this.applicationPropertiesForm.formGroup.getRawValue();
48
- const { contextPath, license, name } = this.package;
47
+ this.package.manifest.version = this.model.selected.version;
48
+ const { contextPath, license, name, manifest } = this.package;
49
49
  const type = this.pluginService.getPackageType(this.package);
50
50
  const licensedApp = {
51
51
  contextPath,
52
- license,
52
+ license: license || manifest.license,
53
53
  name,
54
54
  type,
55
55
  version: this.model.selected.version
@@ -59,38 +59,9 @@ export class DeployApplicationComponent {
59
59
  this.cancel();
60
60
  return;
61
61
  }
62
- // Create new app config
63
- const config = await this.ecosystemService.createConfig(this.package, formGroupValue);
64
- config.version = this.model.selected.version;
65
- config.isSetup = true;
66
- if (!config.manifest) {
67
- config.manifest = {};
68
- }
69
- config.manifest.isPackage = false;
70
- config.manifest.source = this.package.id;
71
- config.manifest.package = 'blueprint';
72
- config.resourcesUrl = '/';
73
- // Create new app
74
- const newApp = (await this.applicationService.create(config)).data;
75
- // Binary
76
62
  try {
77
- // Get binary details
78
- const { data: binaryDetails } = await this.inventoryService.detail(this.model.selected.binaryId);
79
- // Get binary from specific package version
80
- const binary = await this.ecosystemService.getBinary(this.package, {
81
- id: this.model.selected.binaryId
82
- });
83
- // Create zip
84
- const fileBinary = new Blob([binary], { type: binaryDetails.contentType });
85
- const file = new File([fileBinary], binaryDetails.name, {
86
- type: binaryDetails.contentType
87
- });
88
- // Upload binary to new app
89
- await this.ecosystemService.uploadArchiveToApp(file, newApp);
90
- // Update manifest
91
- await this.ecosystemService.updateAppManifest(newApp, this.package);
63
+ this.deployedApp = await this.ecosystemService.deployApp(this.package, formGroupValue, this.model);
92
64
  this.deployedWithSuccess = true;
93
- this.applicationHref = this.applicationService.getHref(newApp);
94
65
  this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.DEPLOY_APPLICATION, {
95
66
  component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.DEPLOY_APPLICATION,
96
67
  action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.DEPLOY_APPLICATION,
@@ -99,50 +70,18 @@ export class DeployApplicationComponent {
99
70
  });
100
71
  }
101
72
  catch (error) {
102
- if (error?.res?.status === 404) {
103
- await this.applicationService.delete(newApp.id);
104
- await this.fallbackToCloneLatest(config);
105
- this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.DEPLOY_APPLICATION, {
106
- component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.DEPLOY_APPLICATION,
107
- action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.DEPLOY_APPLICATION,
108
- result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SERVER_FAILURE,
109
- url: this.CURRENT_LOCATION
110
- });
111
- }
73
+ this.ecosystemService.alertError(error);
74
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.DEPLOY_APPLICATION, {
75
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.DEPLOY_APPLICATION,
76
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.DEPLOY_APPLICATION,
77
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SERVER_FAILURE,
78
+ url: this.CURRENT_LOCATION
79
+ });
112
80
  }
113
81
  finally {
114
82
  this.markAsDeployed();
115
83
  }
116
84
  }
117
- async fallbackToCloneLatest(config) {
118
- let clonedPkg;
119
- try {
120
- clonedPkg = (await this.applicationService.clone(this.package)).data;
121
- // clean out all falsely cloned applicationVersions, we don't need them
122
- for (const appVersion of clonedPkg.applicationVersions) {
123
- if (appVersion.tags.includes('latest')) {
124
- await this.ecosystemService.setPackageVersionTag(clonedPkg, appVersion.version, []);
125
- }
126
- await this.ecosystemService.deletePackageVersion(clonedPkg, {
127
- version: appVersion.version
128
- });
129
- }
130
- delete config.type;
131
- config.isPackage = false;
132
- const { data: newApp } = await this.ecosystemService.updateApp({
133
- id: clonedPkg.id,
134
- activeVersionId: clonedPkg.activeVersionId,
135
- ...config
136
- }, false);
137
- await this.ecosystemService.updateAppManifest(newApp, this.package);
138
- this.deployedWithSuccess = true;
139
- this.applicationHref = this.applicationService.getHref(newApp);
140
- }
141
- catch (error) {
142
- await this.ecosystemService.deleteApp(clonedPkg.id, true);
143
- }
144
- this.markAsDeployed();
145
- }
146
85
  cancel() {
147
86
  this.wizardComponent.close();
148
87
  }
@@ -152,6 +91,10 @@ export class DeployApplicationComponent {
152
91
  });
153
92
  this.canDeploy = true;
154
93
  }
94
+ open() {
95
+ this.router.navigateByUrl(ViewContext.Application.replace(':id', `${this.deployedApp.id}`));
96
+ this.cancel();
97
+ }
155
98
  markAsDeployed() {
156
99
  this.isDeployed = true;
157
100
  this.inProgress = false;
@@ -162,13 +105,13 @@ export class DeployApplicationComponent {
162
105
  });
163
106
  }
164
107
  }
165
- DeployApplicationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeployApplicationComponent, deps: [{ token: i1.EcosystemService }, { token: i2.ApplicationService }, { token: i3.WizardComponent }, { token: i4.TranslateService }, { token: i2.InventoryService }, { token: i3.PluginsService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
166
- DeployApplicationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DeployApplicationComponent, selector: "c8y-deploy-application", viewQueries: [{ propertyName: "applicationPropertiesForm", first: true, predicate: ApplicationPropertiesFormComponent, descendants: true }], ngImport: i0, template: "<c8y-wizard-header>\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"output\"></i>\n <h4 id=\"modal-title\">{{ 'Deploy application' | translate }}</h4>\n </div>\n</c8y-wizard-header>\n\n<c8y-wizard-body id=\"modal-body\">\n <ng-container *ngIf=\"!isDeployed\">\n <div class=\"fadeIn animated d-flex a-i-center j-c-center d-col\" style=\"min-height: 309px\">\n <p\n class=\"bg-level-0 fit-w p-16 text-center text-medium sticky-top bg-level-0 separator-bottom\"\n *ngIf=\"!inProgress\"\n >\n {{ headerText | translate }}\n </p>\n <c8y-application-properties-form\n *ngIf=\"!inProgress\"\n [application]=\"newAppConfig\"\n class=\"d-block fit-w bg-level-1\"\n ></c8y-application-properties-form>\n\n <ng-container *ngIf=\"!inProgress\">\n <div [ngStyle]=\"{ padding: '0 16px' }\" class=\"d-block fit-w bg-gray-white\">\n <c8y-package-version-select\n [ngModel]=\"model.selected\"\n (ngModelChange)=\"onAppVersionSelect($event)\"\n [packageId]=\"package?.id\"\n [label]=\"'Use extension package version' | translate\"\n ></c8y-package-version-select>\n </div>\n </ng-container>\n\n <c8y-progress-bar\n *ngIf=\"inProgress\"\n [message]=\"'Deploying\u2026' | translate\"\n class=\"text-center\"\n ></c8y-progress-bar>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isDeployed\">\n <div\n *ngIf=\"deployedWithSuccess; else failedDeploy\"\n class=\"modal-body fadeIn animated\"\n style=\"min-height: 309px\"\n >\n <div class=\"d-flex a-i-center j-c-center d-col\">\n <c8y-operation-result\n type=\"success\"\n [size]=\"84\"\n [vertical]=\"true\"\n [text]=\"successMessageTemplate | translate: { packageName: package.name }\"\n class=\"lead d-block m-b-16\"\n ></c8y-operation-result>\n </div>\n </div>\n <ng-template #failedDeploy>\n <div class=\"modal-body fadeIn animated text-center\" style=\"min-height: 257px\">\n <c8y-operation-result\n type=\"error\"\n [size]=\"84\"\n [vertical]=\"true\"\n text=\"{{ 'Application creation failed' | translate }}\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n </ng-container>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\"\n >\n {{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\n </button>\n\n <button\n (click)=\"deployApp()\"\n *ngIf=\"!isDeployed\"\n [disabled]=\"inProgress || !canDeploy\"\n [ngClass]=\"{ 'btn-pending': inProgress }\"\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Deploy' | translate }}\"\n >\n {{ 'Deploy' | translate }}\n </button>\n\n <a\n *ngIf=\"isDeployed && applicationHref\"\n [href]=\"applicationHref\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"btn btn-primary\"\n title=\"{{ 'Open' | translate }}\"\n >\n <i c8yIcon=\"external-link\" class=\"m-r-4\"></i>\n {{ 'Open' | translate }}\n </a>\n</c8y-wizard-footer>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.ProgressBarComponent, selector: "c8y-progress-bar", inputs: ["message", "progress"] }, { kind: "component", type: i3.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.WizardHeaderComponent, selector: "c8y-wizard-header" }, { kind: "component", type: i3.WizardBodyComponent, selector: "c8y-wizard-body" }, { kind: "component", type: i3.WizardFooterComponent, selector: "c8y-wizard-footer" }, { kind: "component", type: i1.ApplicationPropertiesFormComponent, selector: "c8y-application-properties-form", inputs: ["application", "disabled"] }, { kind: "component", type: i1.PackageVersionSelectComponent, selector: "c8y-package-version-select", inputs: ["label", "packageContextPath", "packageId"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
108
+ DeployApplicationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeployApplicationComponent, deps: [{ token: i1.EcosystemService }, { token: i2.WizardComponent }, { token: i3.TranslateService }, { token: i2.PluginsService }, { token: i2.GainsightService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
109
+ DeployApplicationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DeployApplicationComponent, selector: "c8y-deploy-application", viewQueries: [{ propertyName: "applicationPropertiesForm", first: true, predicate: ApplicationPropertiesFormComponent, descendants: true }], ngImport: i0, template: "<c8y-wizard-header>\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"output\"></i>\n <h4 id=\"modal-title\">{{ 'Deploy application' | translate }}</h4>\n </div>\n</c8y-wizard-header>\n\n<c8y-wizard-body id=\"modal-body\">\n <ng-container *ngIf=\"!isDeployed\">\n <div class=\"fadeIn animated d-flex a-i-center j-c-center d-col\" style=\"min-height: 309px\">\n <p\n class=\"bg-level-0 fit-w p-16 text-center text-medium sticky-top bg-level-0 separator-bottom\"\n *ngIf=\"!inProgress\"\n >\n {{ headerText | translate }}\n </p>\n <c8y-application-properties-form\n *ngIf=\"!inProgress\"\n [application]=\"newAppConfig\"\n class=\"d-block fit-w bg-level-1\"\n ></c8y-application-properties-form>\n\n <ng-container *ngIf=\"!inProgress\">\n <div [ngStyle]=\"{ padding: '0 16px' }\" class=\"d-block fit-w bg-gray-white\">\n <c8y-package-version-select\n [ngModel]=\"model.selected\"\n (ngModelChange)=\"onAppVersionSelect($event)\"\n [packageId]=\"package?.id\"\n [label]=\"'Use extension package version' | translate\"\n ></c8y-package-version-select>\n </div>\n </ng-container>\n\n <c8y-progress-bar\n *ngIf=\"inProgress\"\n [message]=\"'Deploying\u2026' | translate\"\n class=\"text-center\"\n ></c8y-progress-bar>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isDeployed\">\n <div\n *ngIf=\"deployedWithSuccess; else failedDeploy\"\n class=\"modal-body fadeIn animated\"\n style=\"min-height: 309px\"\n >\n <div class=\"d-flex a-i-center j-c-center d-col\">\n <c8y-operation-result\n type=\"success\"\n [size]=\"84\"\n [vertical]=\"true\"\n [text]=\"successMessageTemplate | translate: { packageName: package.name }\"\n class=\"lead d-block m-b-16\"\n ></c8y-operation-result>\n </div>\n </div>\n <ng-template #failedDeploy>\n <div class=\"modal-body fadeIn animated text-center\" style=\"min-height: 257px\">\n <c8y-operation-result\n type=\"error\"\n [size]=\"84\"\n [vertical]=\"true\"\n text=\"{{ 'Application creation failed' | translate }}\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n </ng-container>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\"\n >\n {{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\n </button>\n\n <button\n (click)=\"deployApp()\"\n *ngIf=\"!isDeployed\"\n [disabled]=\"inProgress || !canDeploy\"\n [ngClass]=\"{ 'btn-pending': inProgress }\"\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Deploy' | translate }}\"\n >\n {{ 'Deploy' | translate }}\n </button>\n\n <button\n (click)=\"open()\"\n type=\"button\"\n class=\"btn btn-primary\"\n *ngIf=\"isDeployed && deployedWithSuccess\"\n title=\"{{ 'Open the application details' | translate }}\"\n translate\n >\n Open\n </button>\n</c8y-wizard-footer>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ProgressBarComponent, selector: "c8y-progress-bar", inputs: ["message", "progress"] }, { kind: "component", type: i2.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.WizardHeaderComponent, selector: "c8y-wizard-header" }, { kind: "component", type: i2.WizardBodyComponent, selector: "c8y-wizard-body" }, { kind: "component", type: i2.WizardFooterComponent, selector: "c8y-wizard-footer" }, { kind: "component", type: i1.ApplicationPropertiesFormComponent, selector: "c8y-application-properties-form", inputs: ["application", "disabled"] }, { kind: "component", type: i1.PackageVersionSelectComponent, selector: "c8y-package-version-select", inputs: ["label", "packageContextPath", "packageId"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
167
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeployApplicationComponent, decorators: [{
168
111
  type: Component,
169
- args: [{ selector: 'c8y-deploy-application', template: "<c8y-wizard-header>\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"output\"></i>\n <h4 id=\"modal-title\">{{ 'Deploy application' | translate }}</h4>\n </div>\n</c8y-wizard-header>\n\n<c8y-wizard-body id=\"modal-body\">\n <ng-container *ngIf=\"!isDeployed\">\n <div class=\"fadeIn animated d-flex a-i-center j-c-center d-col\" style=\"min-height: 309px\">\n <p\n class=\"bg-level-0 fit-w p-16 text-center text-medium sticky-top bg-level-0 separator-bottom\"\n *ngIf=\"!inProgress\"\n >\n {{ headerText | translate }}\n </p>\n <c8y-application-properties-form\n *ngIf=\"!inProgress\"\n [application]=\"newAppConfig\"\n class=\"d-block fit-w bg-level-1\"\n ></c8y-application-properties-form>\n\n <ng-container *ngIf=\"!inProgress\">\n <div [ngStyle]=\"{ padding: '0 16px' }\" class=\"d-block fit-w bg-gray-white\">\n <c8y-package-version-select\n [ngModel]=\"model.selected\"\n (ngModelChange)=\"onAppVersionSelect($event)\"\n [packageId]=\"package?.id\"\n [label]=\"'Use extension package version' | translate\"\n ></c8y-package-version-select>\n </div>\n </ng-container>\n\n <c8y-progress-bar\n *ngIf=\"inProgress\"\n [message]=\"'Deploying\u2026' | translate\"\n class=\"text-center\"\n ></c8y-progress-bar>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isDeployed\">\n <div\n *ngIf=\"deployedWithSuccess; else failedDeploy\"\n class=\"modal-body fadeIn animated\"\n style=\"min-height: 309px\"\n >\n <div class=\"d-flex a-i-center j-c-center d-col\">\n <c8y-operation-result\n type=\"success\"\n [size]=\"84\"\n [vertical]=\"true\"\n [text]=\"successMessageTemplate | translate: { packageName: package.name }\"\n class=\"lead d-block m-b-16\"\n ></c8y-operation-result>\n </div>\n </div>\n <ng-template #failedDeploy>\n <div class=\"modal-body fadeIn animated text-center\" style=\"min-height: 257px\">\n <c8y-operation-result\n type=\"error\"\n [size]=\"84\"\n [vertical]=\"true\"\n text=\"{{ 'Application creation failed' | translate }}\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n </ng-container>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\"\n >\n {{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\n </button>\n\n <button\n (click)=\"deployApp()\"\n *ngIf=\"!isDeployed\"\n [disabled]=\"inProgress || !canDeploy\"\n [ngClass]=\"{ 'btn-pending': inProgress }\"\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Deploy' | translate }}\"\n >\n {{ 'Deploy' | translate }}\n </button>\n\n <a\n *ngIf=\"isDeployed && applicationHref\"\n [href]=\"applicationHref\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"btn btn-primary\"\n title=\"{{ 'Open' | translate }}\"\n >\n <i c8yIcon=\"external-link\" class=\"m-r-4\"></i>\n {{ 'Open' | translate }}\n </a>\n</c8y-wizard-footer>\n" }]
170
- }], ctorParameters: function () { return [{ type: i1.EcosystemService }, { type: i2.ApplicationService }, { type: i3.WizardComponent }, { type: i4.TranslateService }, { type: i2.InventoryService }, { type: i3.PluginsService }, { type: i3.GainsightService }]; }, propDecorators: { applicationPropertiesForm: [{
112
+ args: [{ selector: 'c8y-deploy-application', template: "<c8y-wizard-header>\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"output\"></i>\n <h4 id=\"modal-title\">{{ 'Deploy application' | translate }}</h4>\n </div>\n</c8y-wizard-header>\n\n<c8y-wizard-body id=\"modal-body\">\n <ng-container *ngIf=\"!isDeployed\">\n <div class=\"fadeIn animated d-flex a-i-center j-c-center d-col\" style=\"min-height: 309px\">\n <p\n class=\"bg-level-0 fit-w p-16 text-center text-medium sticky-top bg-level-0 separator-bottom\"\n *ngIf=\"!inProgress\"\n >\n {{ headerText | translate }}\n </p>\n <c8y-application-properties-form\n *ngIf=\"!inProgress\"\n [application]=\"newAppConfig\"\n class=\"d-block fit-w bg-level-1\"\n ></c8y-application-properties-form>\n\n <ng-container *ngIf=\"!inProgress\">\n <div [ngStyle]=\"{ padding: '0 16px' }\" class=\"d-block fit-w bg-gray-white\">\n <c8y-package-version-select\n [ngModel]=\"model.selected\"\n (ngModelChange)=\"onAppVersionSelect($event)\"\n [packageId]=\"package?.id\"\n [label]=\"'Use extension package version' | translate\"\n ></c8y-package-version-select>\n </div>\n </ng-container>\n\n <c8y-progress-bar\n *ngIf=\"inProgress\"\n [message]=\"'Deploying\u2026' | translate\"\n class=\"text-center\"\n ></c8y-progress-bar>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isDeployed\">\n <div\n *ngIf=\"deployedWithSuccess; else failedDeploy\"\n class=\"modal-body fadeIn animated\"\n style=\"min-height: 309px\"\n >\n <div class=\"d-flex a-i-center j-c-center d-col\">\n <c8y-operation-result\n type=\"success\"\n [size]=\"84\"\n [vertical]=\"true\"\n [text]=\"successMessageTemplate | translate: { packageName: package.name }\"\n class=\"lead d-block m-b-16\"\n ></c8y-operation-result>\n </div>\n </div>\n <ng-template #failedDeploy>\n <div class=\"modal-body fadeIn animated text-center\" style=\"min-height: 257px\">\n <c8y-operation-result\n type=\"error\"\n [size]=\"84\"\n [vertical]=\"true\"\n text=\"{{ 'Application creation failed' | translate }}\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n </ng-container>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\"\n >\n {{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\n </button>\n\n <button\n (click)=\"deployApp()\"\n *ngIf=\"!isDeployed\"\n [disabled]=\"inProgress || !canDeploy\"\n [ngClass]=\"{ 'btn-pending': inProgress }\"\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Deploy' | translate }}\"\n >\n {{ 'Deploy' | translate }}\n </button>\n\n <button\n (click)=\"open()\"\n type=\"button\"\n class=\"btn btn-primary\"\n *ngIf=\"isDeployed && deployedWithSuccess\"\n title=\"{{ 'Open the application details' | translate }}\"\n translate\n >\n Open\n </button>\n</c8y-wizard-footer>\n" }]
113
+ }], ctorParameters: function () { return [{ type: i1.EcosystemService }, { type: i2.WizardComponent }, { type: i3.TranslateService }, { type: i2.PluginsService }, { type: i2.GainsightService }, { type: i4.Router }]; }, propDecorators: { applicationPropertiesForm: [{
171
114
  type: ViewChild,
172
115
  args: [ApplicationPropertiesFormComponent]
173
116
  }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9kZXBsb3ktYXBwbGljYXRpb24vZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9kZXBsb3ktYXBwbGljYXRpb24vZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsZ0JBQWdCLEVBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFDTCxrQ0FBa0MsRUFDbEMsZ0JBQWdCLEVBRWhCLGtCQUFrQixFQUNuQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7OztBQU12RCxNQUFNLE9BQU8sMEJBQTBCO0lBNkJyQyxZQUNVLGdCQUFrQyxFQUNsQyxrQkFBc0MsRUFDdEMsZUFBZ0MsRUFDaEMsU0FBMkIsRUFDM0IsZ0JBQWtDLEVBQ2xDLGFBQTZCLEVBQzdCLGdCQUFrQztRQU5sQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBQzdCLHFCQUFnQixHQUFo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QUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRTtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDM0Q7UUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUErQjtRQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDeEIsUUFBUSxFQUFFLFVBQVU7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVPLGFBQWE7UUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDdEQsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDOzt1SEExTFUsMEJBQTBCOzJHQUExQiwwQkFBMEIseUhBa0IxQixrQ0FBa0MsZ0RDdEMvQyxrMEdBeUdBOzJGRHJGYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0Usd0JBQXdCO2dTQXNCbEMseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJbnZlbnRvcnlTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGdldHRleHQsIFBsdWdpbnNTZXJ2aWNlLCBXaXphcmRDb21wb25lbnQsIEdhaW5zaWdodFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm1Db21wb25lbnQsXG4gIEVjb3N5c3RlbVNlcnZpY2UsXG4gIExpY2Vuc2VkQXBwbGljYXRpb25QbHVnaW4sXG4gIFBST0RVQ1RfRVhQRVJJRU5DRVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGVwbG95LWFwcGxpY2F0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RlcGxveS1hcHBsaWNhdGlvbi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGVwbG95QXBwbGljYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcblxuICBpblByb2dyZXNzID0gdHJ1ZTtcbiAgcGFja2FnZTogSUFwcGxpY2F0aW9uO1xuICBpc0RlcGxveWVkID0gZmFsc2U7XG4gIGRlcGxveWVkV2l0aFN1Y2Nlc3MgPSBmYWxzZTtcbiAgbmV3QXBwQ29uZmlnOiBJQXBwbGljYXRpb247XG4gIGFwcGxpY2F0aW9uSHJlZjogc3RyaW5nO1xuXG4gIG1vZGVsID0ge1xuICAgIHNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgYmluYXJ5OiB7XG4gICAgICBpZDogdW5kZWZpbmVkXG4gICAgfVxuICB9O1xuICBjYW5EZXBsb3kgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKEFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm1Db21wb25lbnQpXG4gIGFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm06IEFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm1Db21wb25lbnQ7XG5cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb25UZW1wbGF0ZTogc3RyaW5nID0gZ2V0dGV4dChcbiAgICAnRGVwbG95IGFwcGxpY2F0aW9uIHVzaW5nIFwie3sgcGFja2FnZU5hbWUgfX1cIiBwYWNrYWdlJ1xuICApO1xuICByZWFkb25seSBzdWNjZXNzTWVzc2FnZVRlbXBsYXRlID0gZ2V0dGV4dCgnQXBwbGljYXRpb24gXCJ7eyBwYWNrYWdlTmFtZSB9fVwiIGNyZWF0ZWQnKTtcbiAgcmVhZG9ubHkgZG9uZUxhYmVsID0gZ2V0dGV4dCgnRG9uZScpO1xuICByZWFkb25seSBjYW5jZWxMYWJlbCA9IGdldHRleHQoJ0NhbmNlbCcpO1xuICBoZWFkZXJUZXh0OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aXphcmRDb21wb25lbnQ6IFdpemFyZENvbXBvbmVudCxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbHVnaW5TZXJ2aWNlOiBQbHVnaW5zU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5wYWNrYWdlID0gKHRoaXMud2l6YXJkQ29tcG9uZW50IGFzIGFueSkucGFja2FnZTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcGxpY2F0aW9ucygpKS5kYXRhO1xuICAgIHRoaXMubmV3QXBwQ29uZmlnID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldFVuaXF1ZUFwcENvbmZpZyh0aGlzLnBhY2thZ2UsIGFwcHMpO1xuICAgIHRoaXMuaGVhZGVyVGV4dCA9IHRoaXMuZ2V0SGVhZGVyVGV4dCgpO1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZGVwbG95QXBwKCkge1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgY29uc3QgZm9ybUdyb3VwVmFsdWUgPSB0aGlzLmFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm0uZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICBjb25zdCB7IGNvbnRleHRQYXRoLCBsaWNlbnNlLCBuYW1lIH0gPSB0aGlzLnBhY2thZ2U7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMucGx1Z2luU2VydmljZS5nZXRQYWNrYWdlVHlwZSh0aGlzLnBhY2thZ2UpO1xuICAgIGNvbnN0IGxpY2Vuc2VkQXBwOiBMaWNlbnNlZEFwcGxpY2F0aW9uUGx1Z2luID0ge1xuICAgICAgY29udGV4dFBhdGgsXG4gICAgICBsaWNlbnNlLFxuICAgICAgbmFtZSxcbiAgICAgIHR5cGUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLm1vZGVsLnNlbGVjdGVkLnZlcnNpb25cbiAgICB9O1xuICAgIGNvbnN0IGxpY2Vuc2VzVmVyaWZpZWRCeVVzZXIgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudmVyaWZ5TGljZW5zZXMoW2xpY2Vuc2VkQXBwXSk7XG4gICAgaWYgKCFsaWNlbnNlc1ZlcmlmaWVkQnlVc2VyKSB7XG4gICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBuZXcgYXBwIGNvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5jcmVhdGVDb25maWcodGhpcy5wYWNrYWdlLCBmb3JtR3JvdXBWYWx1ZSk7XG4gICAgY29uZmlnLnZlcnNpb24gPSB0aGlzLm1vZGVsLnNlbGVjdGVkLnZlcnNpb247XG4gICAgY29uZmlnLmlzU2V0dXAgPSB0cnVlO1xuICAgIGlmICghY29uZmlnLm1hbmlmZXN0KSB7XG4gICAgICBjb25maWcubWFuaWZlc3QgPSB7fTtcbiAgICB9XG4gICAgY29uZmlnLm1hbmlmZXN0LmlzUGFja2FnZSA9IGZhbHNlO1xuICAgIGNvbmZpZy5tYW5pZmVzdC5zb3VyY2UgPSB0aGlzLnBhY2thZ2UuaWQ7XG4gICAgY29uZmlnLm1hbmlmZXN0LnBhY2thZ2UgPSAnYmx1ZXByaW50JztcbiAgICBjb25maWcucmVzb3VyY2VzVXJsID0gJy8nO1xuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHBcbiAgICBjb25zdCBuZXdBcHAgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKGNvbmZpZykpLmRhdGE7XG4gICAgLy8gQmluYXJ5XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBiaW5hcnkgZGV0YWlsc1xuICAgICAgY29uc3QgeyBkYXRhOiBiaW5hcnlEZXRhaWxzIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKFxuICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkLmJpbmFyeUlkXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgYmluYXJ5IGZyb20gc3BlY2lmaWMgcGFja2FnZSB2ZXJzaW9uXG4gICAgICBjb25zdCBiaW5hcnkgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QmluYXJ5KHRoaXMucGFja2FnZSwge1xuICAgICAgICBpZDogdGhpcy5tb2RlbC5zZWxlY3RlZC5iaW5hcnlJZFxuICAgICAgfSk7XG4gICAgICAvLyBDcmVhdGUgemlwXG4gICAgICBjb25zdCBmaWxlQmluYXJ5ID0gbmV3IEJsb2IoW2JpbmFyeV0sIHsgdHlwZTogYmluYXJ5RGV0YWlscy5jb250ZW50VHlwZSB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbZmlsZUJpbmFyeV0sIGJpbmFyeURldGFpbHMubmFtZSwge1xuICAgICAgICB0eXBlOiBiaW5hcnlEZXRhaWxzLmNvbnRlbnRUeXBlXG4gICAgICB9KTtcblxuICAgICAgLy8gVXBsb2FkIGJpbmFyeSB0byBuZXcgYXBwXG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBsb2FkQXJjaGl2ZVRvQXBwKGZpbGUsIG5ld0FwcCk7XG4gICAgICAvLyBVcGRhdGUgbWFuaWZlc3RcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGRhdGVBcHBNYW5pZmVzdChuZXdBcHAsIHRoaXMucGFja2FnZSk7XG5cbiAgICAgIHRoaXMuZGVwbG95ZWRXaXRoU3VjY2VzcyA9IHRydWU7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uSHJlZiA9IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEhyZWYobmV3QXBwKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLkRFUExPWV9BUFBMSUNBVElPTixcbiAgICAgICAge1xuICAgICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkRFUExPWV9BUFBMSUNBVElPTixcbiAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5ERVBMT1lfQVBQTElDQVRJT04sXG4gICAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuREVQTE9ZRUQsXG4gICAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yPy5yZXM/LnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShuZXdBcHAuaWQpO1xuICAgICAgICBhd2FpdCB0aGlzLmZhbGxiYWNrVG9DbG9uZUxhdGVzdChjb25maWcpO1xuICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLkRFUExPWV9BUFBMSUNBVElPTixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5ERVBMT1lfQVBQTElDQVRJT04sXG4gICAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5ERVBMT1lfQVBQTElDQVRJT04sXG4gICAgICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRSxcbiAgICAgICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLm1hcmtBc0RlcGxveWVkKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmFsbGJhY2tUb0Nsb25lTGF0ZXN0KGNvbmZpZykge1xuICAgIGxldCBjbG9uZWRQa2c7XG4gICAgdHJ5IHtcbiAgICAgIGNsb25lZFBrZyA9IChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jbG9uZSh0aGlzLnBhY2thZ2UpKS5kYXRhO1xuXG4gICAgICAvLyBjbGVhbiBvdXQgYWxsIGZhbHNlbHkgY2xvbmVkIGFwcGxpY2F0aW9uVmVyc2lvbnMsIHdlIGRvbid0IG5lZWQgdGhlbVxuICAgICAgZm9yIChjb25zdCBhcHBWZXJzaW9uIG9mIGNsb25lZFBrZy5hcHBsaWNhdGlvblZlcnNpb25zIGFzIElBcHBsaWNhdGlvblZlcnNpb25bXSkge1xuICAgICAgICBpZiAoYXBwVmVyc2lvbi50YWdzLmluY2x1ZGVzKCdsYXRlc3QnKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5zZXRQYWNrYWdlVmVyc2lvblRhZyhjbG9uZWRQa2csIGFwcFZlcnNpb24udmVyc2lvbiwgW10pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5kZWxldGVQYWNrYWdlVmVyc2lvbihjbG9uZWRQa2csIHtcbiAgICAgICAgICB2ZXJzaW9uOiBhcHBWZXJzaW9uLnZlcnNpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkZWxldGUgY29uZmlnLnR5cGU7XG4gICAgICBjb25maWcuaXNQYWNrYWdlID0gZmFsc2U7XG4gICAgICBjb25zdCB7IGRhdGE6IG5ld0FwcCB9ID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcChcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBjbG9uZWRQa2cuaWQsXG4gICAgICAgICAgYWN0aXZlVmVyc2lvbklkOiBjbG9uZWRQa2cuYWN0aXZlVmVyc2lvbklkLFxuICAgICAgICAgIC4uLmNvbmZpZ1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGRhdGVBcHBNYW5pZmVzdChuZXdBcHAsIHRoaXMucGFja2FnZSk7XG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgdGhpcy5hcHBsaWNhdGlvbkhyZWYgPSB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRIcmVmKG5ld0FwcCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5kZWxldGVBcHAoY2xvbmVkUGtnLmlkLCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5tYXJrQXNEZXBsb3llZCgpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMud2l6YXJkQ29tcG9uZW50LmNsb3NlKCk7XG4gIH1cblxuICBvbkFwcFZlcnNpb25TZWxlY3QoYXBwVmVyc2lvbjogSUFwcGxpY2F0aW9uVmVyc2lvbikge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwge1xuICAgICAgc2VsZWN0ZWQ6IGFwcFZlcnNpb25cbiAgICB9KTtcbiAgICB0aGlzLmNhbkRlcGxveSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIG1hcmtBc0RlcGxveWVkKCkge1xuICAgIHRoaXMuaXNEZXBsb3llZCA9IHRydWU7XG4gICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldEhlYWRlclRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5kZXNjcmlwdGlvblRlbXBsYXRlLCB7XG4gICAgICBwYWNrYWdlTmFtZTogdGhpcy5wYWNrYWdlLm5hbWVcbiAgICB9KTtcbiAgfVxufVxuIiwiPGM4eS13aXphcmQtaGVhZGVyPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGRpYWxvZy1oZWFkZXJcIj5cbiAgICA8aSBjOHlJY29uPVwib3V0cHV0XCI+PC9pPlxuICAgIDxoNCBpZD1cIm1vZGFsLXRpdGxlXCI+e3sgJ0RlcGxveSBhcHBsaWNhdGlvbicgfCB0cmFuc2xhdGUgfX08L2g0PlxuICA8L2Rpdj5cbjwvYzh5LXdpemFyZC1oZWFkZXI+XG5cbjxjOHktd2l6YXJkLWJvZHkgaWQ9XCJtb2RhbC1ib2R5XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNEZXBsb3llZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmYWRlSW4gYW5pbWF0ZWQgZC1mbGV4IGEtaS1jZW50ZXIgai1jLWNlbnRlciBkLWNvbFwiIHN0eWxlPVwibWluLWhlaWdodDogMzA5cHhcIj5cbiAgICAgIDxwXG4gICAgICAgIGNsYXNzPVwiYmctbGV2ZWwtMCBmaXQtdyBwLTE2IHRleHQtY2VudGVyIHRleHQtbWVkaXVtIHN0aWNreS10b3AgYmctbGV2ZWwtMCBzZXBhcmF0b3ItYm90dG9tXCJcbiAgICAgICAgKm5nSWY9XCIhaW5Qcm9ncmVzc1wiXG4gICAgICA+XG4gICAgICAgIHt7IGhlYWRlclRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxjOHktYXBwbGljYXRpb24tcHJvcGVydGllcy1mb3JtXG4gICAgICAgICpuZ0lmPVwiIWluUHJvZ3Jlc3NcIlxuICAgICAgICBbYXBwbGljYXRpb25dPVwibmV3QXBwQ29uZmlnXCJcbiAgICAgICAgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWxldmVsLTFcIlxuICAgICAgPjwvYzh5LWFwcGxpY2F0aW9uLXByb3BlcnRpZXMtZm9ybT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpblByb2dyZXNzXCI+XG4gICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBwYWRkaW5nOiAnMCAxNnB4JyB9XCIgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWdyYXktd2hpdGVcIj5cbiAgICAgICAgICA8Yzh5LXBhY2thZ2UtdmVyc2lvbi1zZWxlY3RcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm1vZGVsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQXBwVmVyc2lvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtwYWNrYWdlSWRdPVwicGFja2FnZT8uaWRcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidVc2UgZXh0ZW5zaW9uIHBhY2thZ2UgdmVyc2lvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID48L2M4eS1wYWNrYWdlLXZlcnNpb24tc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8Yzh5LXByb2dyZXNzLWJhclxuICAgICAgICAqbmdJZj1cImluUHJvZ3Jlc3NcIlxuICAgICAgICBbbWVzc2FnZV09XCInRGVwbG95aW5n4oCmJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXJcIlxuICAgICAgPjwvYzh5LXByb2dyZXNzLWJhcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVwbG95ZWRcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImRlcGxveWVkV2l0aFN1Y2Nlc3M7IGVsc2UgZmFpbGVkRGVwbG95XCJcbiAgICAgIGNsYXNzPVwibW9kYWwtYm9keSBmYWRlSW4gYW5pbWF0ZWRcIlxuICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAzMDlweFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXIgZC1jb2xcIj5cbiAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgW3RleHRdPVwic3VjY2Vzc01lc3NhZ2VUZW1wbGF0ZSB8IHRyYW5zbGF0ZTogeyBwYWNrYWdlTmFtZTogcGFja2FnZS5uYW1lIH1cIlxuICAgICAgICAgIGNsYXNzPVwibGVhZCBkLWJsb2NrIG0tYi0xNlwiXG4gICAgICAgID48L2M4eS1vcGVyYXRpb24tcmVzdWx0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNmYWlsZWREZXBsb3k+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBmYWRlSW4gYW5pbWF0ZWQgdGV4dC1jZW50ZXJcIiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDI1N3B4XCI+XG4gICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgIHR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgICB0ZXh0PVwie3sgJ0FwcGxpY2F0aW9uIGNyZWF0aW9uIGZhaWxlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgID48L2M4eS1vcGVyYXRpb24tcmVzdWx0PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG48L2M4eS13aXphcmQtYm9keT5cblxuPGM4eS13aXphcmQtZm9vdGVyPlxuICA8YnV0dG9uXG4gICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgdGl0bGU9XCJ7eyAoaXNEZXBsb3llZCAmJiBkZXBsb3llZFdpdGhTdWNjZXNzID8gZG9uZUxhYmVsIDogY2FuY2VsTGFiZWwpIHwgdHJhbnNsYXRlIH19XCJcbiAgPlxuICAgIHt7IChpc0RlcGxveWVkICYmIGRlcGxveWVkV2l0aFN1Y2Nlc3MgPyBkb25lTGFiZWwgOiBjYW5jZWxMYWJlbCkgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIChjbGljayk9XCJkZXBsb3lBcHAoKVwiXG4gICAgKm5nSWY9XCIhaXNEZXBsb3llZFwiXG4gICAgW2Rpc2FibGVkXT1cImluUHJvZ3Jlc3MgfHwgIWNhbkRlcGxveVwiXG4gICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBpblByb2dyZXNzIH1cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cInt7ICdEZXBsb3knIHwgdHJhbnNsYXRlIH19XCJcbiAgPlxuICAgIHt7ICdEZXBsb3knIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuXG4gIDxhXG4gICAgKm5nSWY9XCJpc0RlcGxveWVkICYmIGFwcGxpY2F0aW9uSHJlZlwiXG4gICAgW2hyZWZdPVwiYXBwbGljYXRpb25IcmVmXCJcbiAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICB0aXRsZT1cInt7ICdPcGVuJyB8IHRyYW5zbGF0ZSB9fVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwiZXh0ZXJuYWwtbGlua1wiIGNsYXNzPVwibS1yLTRcIj48L2k+XG4gICAge3sgJ09wZW4nIHwgdHJhbnNsYXRlIH19XG4gIDwvYT5cbjwvYzh5LXdpemFyZC1mb290ZXI+XG4iXX0=
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9kZXBsb3ktYXBwbGljYXRpb24vZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9kZXBsb3ktYXBwbGljYXRpb24vZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxXQUFXLEVBQ1gsZUFBZSxFQUNmLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxrQ0FBa0MsRUFDbEMsZ0JBQWdCLEVBRWhCLGtCQUFrQixFQUNuQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7OztBQU12RCxNQUFNLE9BQU8sMEJBQTBCO0lBOEJyQyxZQUNVLGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxTQUEyQixFQUMzQixhQUE2QixFQUM3QixnQkFBa0MsRUFDbEMsTUFBYztRQUxkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQUM3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFuQ3hCLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFF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VUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRU8sYUFBYTtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUN0RCxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1NBQy9CLENBQUMsQ0FBQztJQUNMLENBQUM7O3VIQTlIVSwwQkFBMEI7MkdBQTFCLDBCQUEwQix5SEFtQjFCLGtDQUFrQyxnREN6Qy9DLGl3R0F3R0E7MkZEbEZhLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx3QkFBd0I7cVBBdUJsQyx5QkFBeUI7c0JBRHhCLFNBQVM7dUJBQUMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElBcHBsaWNhdGlvbiwgSUFwcGxpY2F0aW9uVmVyc2lvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIFBsdWdpbnNTZXJ2aWNlLFxuICBWaWV3Q29udGV4dCxcbiAgV2l6YXJkQ29tcG9uZW50LFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25Qcm9wZXJ0aWVzRm9ybUNvbXBvbmVudCxcbiAgRWNvc3lzdGVtU2VydmljZSxcbiAgTGljZW5zZWRBcHBsaWNhdGlvblBsdWdpbixcbiAgUFJPRFVDVF9FWFBFUklFTkNFXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kZXBsb3ktYXBwbGljYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEZXBsb3lBcHBsaWNhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIENVUlJFTlRfTE9DQVRJT04gPSBsb2NhdGlvbi5ocmVmO1xuXG4gIGluUHJvZ3Jlc3MgPSB0cnVlO1xuICBwYWNrYWdlOiBJQXBwbGljYXRpb247XG4gIGlzRGVwbG95ZWQgPSBmYWxzZTtcbiAgZGVwbG95ZWRXaXRoU3VjY2VzcyA9IGZhbHNlO1xuICBuZXdBcHBDb25maWc6IElBcHBsaWNhdGlvbjtcbiAgZGVwbG95ZWRBcHA6IElBcHBsaWNhdGlvbjtcbiAgYXBwbGljYXRpb25IcmVmOiBzdHJpbmc7XG5cbiAgbW9kZWwgPSB7XG4gICAgc2VsZWN0ZWQ6IHVuZGVmaW5lZCxcbiAgICBiaW5hcnk6IHtcbiAgICAgIGlkOiB1bmRlZmluZWRcbiAgICB9XG4gIH07XG4gIGNhbkRlcGxveSA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoQXBwbGljYXRpb25Qcm9wZXJ0aWVzRm9ybUNvbXBvbmVudClcbiAgYXBwbGljYXRpb25Qcm9wZXJ0aWVzRm9ybTogQXBwbGljYXRpb25Qcm9wZXJ0aWVzRm9ybUNvbXBvbmVudDtcblxuICByZWFkb25seSBkZXNjcmlwdGlvblRlbXBsYXRlOiBzdHJpbmcgPSBnZXR0ZXh0KFxuICAgICdEZXBsb3kgYXBwbGljYXRpb24gdXNpbmcgXCJ7eyBwYWNrYWdlTmFtZSB9fVwiIHBhY2thZ2UnXG4gICk7XG4gIHJlYWRvbmx5IHN1Y2Nlc3NNZXNzYWdlVGVtcGxhdGUgPSBnZXR0ZXh0KCdBcHBsaWNhdGlvbiBcInt7IHBhY2thZ2VOYW1lIH19XCIgY3JlYXRlZCcpO1xuICByZWFkb25seSBkb25lTGFiZWwgPSBnZXR0ZXh0KCdEb25lJyk7XG4gIHJlYWRvbmx5IGNhbmNlbExhYmVsID0gZ2V0dGV4dCgnQ2FuY2VsJyk7XG4gIGhlYWRlclRleHQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aXphcmRDb21wb25lbnQ6IFdpemFyZENvbXBvbmVudCxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpblNlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge1xuICAgIHRoaXMucGFja2FnZSA9ICh0aGlzLndpemFyZENvbXBvbmVudCBhcyBhbnkpLnBhY2thZ2U7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEhvc3RlZEFuZFBhY2thZ2VBcHBsaWNhdGlvbnMoKTtcbiAgICB0aGlzLm5ld0FwcENvbmZpZyA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRVbmlxdWVBcHBDb25maWcodGhpcy5wYWNrYWdlLCBhcHBzKTtcbiAgICB0aGlzLmhlYWRlclRleHQgPSB0aGlzLmdldEhlYWRlclRleHQoKTtcbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRlcGxveUFwcCgpIHtcbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIGNvbnN0IGZvcm1Hcm91cFZhbHVlID0gdGhpcy5hcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgIHRoaXMucGFja2FnZS5tYW5pZmVzdC52ZXJzaW9uID0gdGhpcy5tb2RlbC5zZWxlY3RlZC52ZXJzaW9uO1xuXG4gICAgY29uc3QgeyBjb250ZXh0UGF0aCwgbGljZW5zZSwgbmFtZSwgbWFuaWZlc3QgfSA9IHRoaXMucGFja2FnZTtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5wbHVnaW5TZXJ2aWNlLmdldFBhY2thZ2VUeXBlKHRoaXMucGFja2FnZSk7XG4gICAgY29uc3QgbGljZW5zZWRBcHA6IExpY2Vuc2VkQXBwbGljYXRpb25QbHVnaW4gPSB7XG4gICAgICBjb250ZXh0UGF0aCxcbiAgICAgIGxpY2Vuc2U6IGxpY2Vuc2UgfHwgbWFuaWZlc3QubGljZW5zZSxcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlLFxuICAgICAgdmVyc2lvbjogdGhpcy5tb2RlbC5zZWxlY3RlZC52ZXJzaW9uXG4gICAgfTtcblxuICAgIGNvbnN0IGxpY2Vuc2VzVmVyaWZpZWRCeVVzZXIgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudmVyaWZ5TGljZW5zZXMoW2xpY2Vuc2VkQXBwXSk7XG4gICAgaWYgKCFsaWNlbnNlc1ZlcmlmaWVkQnlVc2VyKSB7XG4gICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlcGxveWVkQXBwID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmRlcGxveUFwcChcbiAgICAgICAgdGhpcy5wYWNrYWdlLFxuICAgICAgICBmb3JtR3JvdXBWYWx1ZSxcbiAgICAgICAgdGhpcy5tb2RlbFxuICAgICAgKTtcbiAgICAgIHRoaXMuZGVwbG95ZWRXaXRoU3VjY2VzcyA9IHRydWU7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5ERVBMT1lfQVBQTElDQVRJT04sXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5ERVBMT1lfQVBQTElDQVRJT04sXG4gICAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuREVQTE9ZX0FQUExJQ0FUSU9OLFxuICAgICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLkRFUExPWUVELFxuICAgICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZWNvc3lzdGVtU2VydmljZS5hbGVydEVycm9yKGVycm9yKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLkRFUExPWV9BUFBMSUNBVElPTixcbiAgICAgICAge1xuICAgICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkRFUExPWV9BUFBMSUNBVElPTixcbiAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5ERVBMT1lfQVBQTElDQVRJT04sXG4gICAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuU0VSVkVSX0ZBSUxVUkUsXG4gICAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5tYXJrQXNEZXBsb3llZCgpO1xuICAgIH1cbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLndpemFyZENvbXBvbmVudC5jbG9zZSgpO1xuICB9XG5cbiAgb25BcHBWZXJzaW9uU2VsZWN0KGFwcFZlcnNpb246IElBcHBsaWNhdGlvblZlcnNpb24pIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsIHtcbiAgICAgIHNlbGVjdGVkOiBhcHBWZXJzaW9uXG4gICAgfSk7XG4gICAgdGhpcy5jYW5EZXBsb3kgPSB0cnVlO1xuICB9XG5cbiAgb3BlbigpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFZpZXdDb250ZXh0LkFwcGxpY2F0aW9uLnJlcGxhY2UoJzppZCcsIGAke3RoaXMuZGVwbG95ZWRBcHAuaWR9YCkpO1xuICAgIHRoaXMuY2FuY2VsKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtBc0RlcGxveWVkKCkge1xuICAgIHRoaXMuaXNEZXBsb3llZCA9IHRydWU7XG4gICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldEhlYWRlclRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5kZXNjcmlwdGlvblRlbXBsYXRlLCB7XG4gICAgICBwYWNrYWdlTmFtZTogdGhpcy5wYWNrYWdlLm5hbWVcbiAgICB9KTtcbiAgfVxufVxuIiwiPGM4eS13aXphcmQtaGVhZGVyPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGRpYWxvZy1oZWFkZXJcIj5cbiAgICA8aSBjOHlJY29uPVwib3V0cHV0XCI+PC9pPlxuICAgIDxoNCBpZD1cIm1vZGFsLXRpdGxlXCI+e3sgJ0RlcGxveSBhcHBsaWNhdGlvbicgfCB0cmFuc2xhdGUgfX08L2g0PlxuICA8L2Rpdj5cbjwvYzh5LXdpemFyZC1oZWFkZXI+XG5cbjxjOHktd2l6YXJkLWJvZHkgaWQ9XCJtb2RhbC1ib2R5XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNEZXBsb3llZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmYWRlSW4gYW5pbWF0ZWQgZC1mbGV4IGEtaS1jZW50ZXIgai1jLWNlbnRlciBkLWNvbFwiIHN0eWxlPVwibWluLWhlaWdodDogMzA5cHhcIj5cbiAgICAgIDxwXG4gICAgICAgIGNsYXNzPVwiYmctbGV2ZWwtMCBmaXQtdyBwLTE2IHRleHQtY2VudGVyIHRleHQtbWVkaXVtIHN0aWNreS10b3AgYmctbGV2ZWwtMCBzZXBhcmF0b3ItYm90dG9tXCJcbiAgICAgICAgKm5nSWY9XCIhaW5Qcm9ncmVzc1wiXG4gICAgICA+XG4gICAgICAgIHt7IGhlYWRlclRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxjOHktYXBwbGljYXRpb24tcHJvcGVydGllcy1mb3JtXG4gICAgICAgICpuZ0lmPVwiIWluUHJvZ3Jlc3NcIlxuICAgICAgICBbYXBwbGljYXRpb25dPVwibmV3QXBwQ29uZmlnXCJcbiAgICAgICAgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWxldmVsLTFcIlxuICAgICAgPjwvYzh5LWFwcGxpY2F0aW9uLXByb3BlcnRpZXMtZm9ybT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpblByb2dyZXNzXCI+XG4gICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBwYWRkaW5nOiAnMCAxNnB4JyB9XCIgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWdyYXktd2hpdGVcIj5cbiAgICAgICAgICA8Yzh5LXBhY2thZ2UtdmVyc2lvbi1zZWxlY3RcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cIm1vZGVsLnNlbGVjdGVkXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQXBwVmVyc2lvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtwYWNrYWdlSWRdPVwicGFja2FnZT8uaWRcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidVc2UgZXh0ZW5zaW9uIHBhY2thZ2UgdmVyc2lvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID48L2M4eS1wYWNrYWdlLXZlcnNpb24tc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8Yzh5LXByb2dyZXNzLWJhclxuICAgICAgICAqbmdJZj1cImluUHJvZ3Jlc3NcIlxuICAgICAgICBbbWVzc2FnZV09XCInRGVwbG95aW5n4oCmJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXJcIlxuICAgICAgPjwvYzh5LXByb2dyZXNzLWJhcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVwbG95ZWRcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImRlcGxveWVkV2l0aFN1Y2Nlc3M7IGVsc2UgZmFpbGVkRGVwbG95XCJcbiAgICAgIGNsYXNzPVwibW9kYWwtYm9keSBmYWRlSW4gYW5pbWF0ZWRcIlxuICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAzMDlweFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGotYy1jZW50ZXIgZC1jb2xcIj5cbiAgICAgICAgPGM4eS1vcGVyYXRpb24tcmVzdWx0XG4gICAgICAgICAgdHlwZT1cInN1Y2Nlc3NcIlxuICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgW3RleHRdPVwic3VjY2Vzc01lc3NhZ2VUZW1wbGF0ZSB8IHRyYW5zbGF0ZTogeyBwYWNrYWdlTmFtZTogcGFja2FnZS5uYW1lIH1cIlxuICAgICAgICAgIGNsYXNzPVwibGVhZCBkLWJsb2NrIG0tYi0xNlwiXG4gICAgICAgID48L2M4eS1vcGVyYXRpb24tcmVzdWx0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNmYWlsZWREZXBsb3k+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBmYWRlSW4gYW5pbWF0ZWQgdGV4dC1jZW50ZXJcIiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDI1N3B4XCI+XG4gICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgIHR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgW3NpemVdPVwiODRcIlxuICAgICAgICAgIFt2ZXJ0aWNhbF09XCJ0cnVlXCJcbiAgICAgICAgICB0ZXh0PVwie3sgJ0FwcGxpY2F0aW9uIGNyZWF0aW9uIGZhaWxlZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIGNsYXNzPVwibGVhZFwiXG4gICAgICAgID48L2M4eS1vcGVyYXRpb24tcmVzdWx0PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG48L2M4eS13aXphcmQtYm9keT5cblxuPGM4eS13aXphcmQtZm9vdGVyPlxuICA8YnV0dG9uXG4gICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgdGl0bGU9XCJ7eyAoaXNEZXBsb3llZCAmJiBkZXBsb3llZFdpdGhTdWNjZXNzID8gZG9uZUxhYmVsIDogY2FuY2VsTGFiZWwpIHwgdHJhbnNsYXRlIH19XCJcbiAgPlxuICAgIHt7IChpc0RlcGxveWVkICYmIGRlcGxveWVkV2l0aFN1Y2Nlc3MgPyBkb25lTGFiZWwgOiBjYW5jZWxMYWJlbCkgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIChjbGljayk9XCJkZXBsb3lBcHAoKVwiXG4gICAgKm5nSWY9XCIhaXNEZXBsb3llZFwiXG4gICAgW2Rpc2FibGVkXT1cImluUHJvZ3Jlc3MgfHwgIWNhbkRlcGxveVwiXG4gICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBpblByb2dyZXNzIH1cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cInt7ICdEZXBsb3knIHwgdHJhbnNsYXRlIH19XCJcbiAgPlxuICAgIHt7ICdEZXBsb3knIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICAoY2xpY2spPVwib3BlbigpXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgKm5nSWY9XCJpc0RlcGxveWVkICYmIGRlcGxveWVkV2l0aFN1Y2Nlc3NcIlxuICAgIHRpdGxlPVwie3sgJ09wZW4gdGhlIGFwcGxpY2F0aW9uIGRldGFpbHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0cmFuc2xhdGVcbiAgPlxuICAgIE9wZW5cbiAgPC9idXR0b24+XG48L2M4eS13aXphcmQtZm9vdGVyPlxuIl19