@pega/angular-sdk-components 0.23.1 → 0.23.2

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 (48) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +2 -23
  3. package/SECURITY.md +10 -0
  4. package/esm2022/lib/_components/designSystemExtension/alert/alert.component.mjs +3 -3
  5. package/esm2022/lib/_components/designSystemExtension/banner/banner.component.mjs +3 -3
  6. package/esm2022/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.mjs +3 -3
  7. package/esm2022/lib/_components/designSystemExtension/material-details/material-details.component.mjs +3 -3
  8. package/esm2022/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.mjs +3 -3
  9. package/esm2022/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.mjs +3 -3
  10. package/esm2022/lib/_components/designSystemExtension/material-utility/material-utility.component.mjs +2 -2
  11. package/esm2022/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.mjs +3 -3
  12. package/esm2022/lib/_components/designSystemExtension/operator/operator.component.mjs +3 -3
  13. package/esm2022/lib/_components/designSystemExtension/pulse/pulse.component.mjs +3 -3
  14. package/esm2022/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.mjs +3 -3
  15. package/esm2022/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.mjs +3 -3
  16. package/esm2022/lib/_components/field/cancel-alert/cancel-alert.component.mjs +3 -3
  17. package/esm2022/lib/_components/field/date-time/date-time.component.mjs +3 -1
  18. package/esm2022/lib/_components/field/dropdown/dropdown.component.mjs +2 -2
  19. package/esm2022/lib/_components/field/semantic-link/semantic-link.component.mjs +3 -3
  20. package/esm2022/lib/_components/field/text/text.component.mjs +3 -3
  21. package/esm2022/lib/_components/field/user-reference/user-reference.component.mjs +3 -3
  22. package/esm2022/lib/_components/infra/Containers/flow-container/flow-container.component.mjs +3 -3
  23. package/esm2022/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.mjs +3 -3
  24. package/esm2022/lib/_components/infra/Containers/view-container/view-container.component.mjs +3 -3
  25. package/esm2022/lib/_components/infra/assignment-card/assignment-card.component.mjs +3 -3
  26. package/esm2022/lib/_components/infra/multi-step/multi-step.component.mjs +3 -3
  27. package/esm2022/lib/_components/infra/navbar/navbar.component.mjs +3 -3
  28. package/esm2022/lib/_components/infra/root-container/root-container.component.mjs +3 -3
  29. package/esm2022/lib/_components/infra/stages/stages.component.mjs +3 -3
  30. package/esm2022/lib/_components/template/app-shell/app-shell.component.mjs +3 -3
  31. package/esm2022/lib/_components/template/case-summary/case-summary.component.mjs +3 -3
  32. package/esm2022/lib/_components/template/case-view/case-view.component.mjs +3 -3
  33. package/esm2022/lib/_components/template/field-group-list/field-group-list.component.mjs +3 -3
  34. package/esm2022/lib/_components/template/list-view/list-view.component.mjs +3 -3
  35. package/esm2022/lib/_components/template/one-column-tab/one-column-tab.component.mjs +3 -3
  36. package/esm2022/lib/_components/template/simple-table-manual/simple-table-manual.component.mjs +3 -3
  37. package/esm2022/lib/_components/template/wss-nav-bar/wss-nav-bar.component.mjs +3 -3
  38. package/esm2022/lib/_components/widget/app-announcement/app-announcement.component.mjs +3 -3
  39. package/esm2022/lib/_components/widget/attachment/attachment.component.mjs +3 -3
  40. package/esm2022/lib/_components/widget/feed-container/feed-container.component.mjs +3 -3
  41. package/esm2022/lib/_components/widget/file-utility/file-utility.component.mjs +11 -4
  42. package/esm2022/lib/_components/widget/list-utility/list-utility.component.mjs +3 -3
  43. package/esm2022/lib/_components/widget/todo/todo.component.mjs +3 -3
  44. package/fesm2022/pega-angular-sdk-components.mjs +87 -78
  45. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  46. package/lib/_components/field/date-time/date-time.component.d.ts +1 -1
  47. package/package.json +4 -7
  48. package/_shared/styles.scss +0 -28
@@ -184,11 +184,11 @@ export class TodoComponent {
184
184
  });
185
185
  }
186
186
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TodoComponent, deps: [{ token: i1.ProgressSpinnerService }, { token: i2.ErrorMessagesService }, { token: i0.NgZone }, { token: i3.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
187
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TodoComponent, isStandalone: true, selector: "app-todo", inputs: { pConn$: "pConn$", caseInfoID$: "caseInfoID$", datasource$: "datasource$", headerText$: "headerText$", showTodoList$: "showTodoList$", target$: "target$", type$: "type$", context$: "context$", myWorkList$: "myWorkList$", isConfirm: "isConfirm" }, providers: [Utils], usesOnChanges: true, ngImport: i0, template: "<div class=\"psdk-todo\">\n <div class=\"psdk-todo-header\">\n <div *ngIf=\"showTodoList$\" class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <div id=\"worklist\" class=\"psdk-todo-text\">{{ headerText$ }}</div>\n <div *ngIf=\"showTodoList$\" class=\"psdk-assignment-count\">{{ assignmentCount$ }}</div>\n </div>\n <br /><br />\n <div *ngIf=\"showTodoList$\" class=\"psdk-display-divider\"></div>\n\n <div class=\"psdk-todo-assignments\">\n <div *ngFor=\"let assignment of arAssignments$\">\n <div class=\"psdk-todo-assignment\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <div class=\"psdk-todo-card\">\n <div class=\"psdk-todo-assignment-title\">{{ getAssignmentName(assignment) }}</div>\n <div class=\"psdk-todo-assignment-data\">\n <div class=\"psdk-todo-assignment-task\">\n Task in\n <button class=\"psdk-todo-id\" style=\"cursor: pointer\" (click)=\"clickGo(assignment)\">\n {{ assignment.name }} {{ getID(assignment) }}\n </button>\n <span *ngIf=\"assignment.status != undefined\">\n &bull; <span class=\"psdk-todo-assignment-status\">{{ assignment?.status }}</span>\n </span>\n &bull; {{ localizedVal('Urgency', localeCategory) }} {{ getPriority(assignment) }}\n </div>\n </div>\n </div>\n <div class=\"psdk-todo-assignment-action\">\n <button mat-flat-button color=\"primary\" (click)=\"clickGo(assignment)\">{{ localizedVal('Go', localeCategory) }}</button>\n </div>\n </div>\n <div class=\"psdk-display-divider\"></div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"assignmentCount$ > 3\">\n <div *ngIf=\"bShowMore$; else showLess\" class=\"psdk-todo-show-more\">\n <button mat-stroked-button (click)=\"_showMore()\">Show more</button>\n </div>\n <ng-template #showLess>\n <div class=\"psdk-todo-show-more\">\n <button mat-stroked-button (click)=\"_showLess()\">Show less</button>\n </div>\n </ng-template>\n</div>\n", styles: [".psdk-display-divider{border-bottom:.0625rem solid lightgrey}.psdk-todo{padding:1rem;background-color:#fff;border-radius:.6125rem;border-left:6px solid;border-left-color:#7986cb}.psdk-todo-header{display:inline-flex}.psdk-todo-text{padding:.5rem .625rem;font-size:1.1rem;font-weight:700}.psdk-assignment-count{background-color:#b499fc;margin:.5rem;border-radius:45%;padding:.15rem .4rem}.psdk-todo-id{color:#673ab7;padding:0;cursor:pointer;border:0;background-color:transparent;align-items:center}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:#673ab7;color:#fff;font-weight:700;font-size:1.25rem}.psdk-todo-assignment{display:inline-flex;width:100%;padding:.625rem 0rem}.psdk-todo-assignment-data{display:inline-flex}.psdk-todo-assignment-status{background-color:#d3d3d3;border-radius:.125rem;color:#2f4f4f;font-size:.75rem;font-weight:700;line-height:1.25rem;height:1.25rem;padding:0 .5rem;text-transform:uppercase}.psdk-todo-assignment-task{color:gray}.psdk-todo-assignment-action{display:inline-flex}.psdk-todo-card{width:100%;padding-left:.625rem}.psdk-todo-show-more{width:100%;text-align:center;margin-top:.625rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] }); }
187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TodoComponent, isStandalone: true, selector: "app-todo", inputs: { pConn$: "pConn$", caseInfoID$: "caseInfoID$", datasource$: "datasource$", headerText$: "headerText$", showTodoList$: "showTodoList$", target$: "target$", type$: "type$", context$: "context$", myWorkList$: "myWorkList$", isConfirm: "isConfirm" }, providers: [Utils], usesOnChanges: true, ngImport: i0, template: "<div class=\"psdk-todo\">\n <div class=\"psdk-todo-header\">\n <div *ngIf=\"showTodoList$\" class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <div id=\"worklist\" class=\"psdk-todo-text\">{{ headerText$ }}</div>\n <div *ngIf=\"showTodoList$\" class=\"psdk-assignment-count\">{{ assignmentCount$ }}</div>\n </div>\n <br /><br />\n <div *ngIf=\"showTodoList$\" class=\"psdk-display-divider\"></div>\n\n <div class=\"psdk-todo-assignments\">\n <div *ngFor=\"let assignment of arAssignments$\">\n <div class=\"psdk-todo-assignment\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <div class=\"psdk-todo-card\">\n <div class=\"psdk-todo-assignment-title\">{{ getAssignmentName(assignment) }}</div>\n <div class=\"psdk-todo-assignment-data\">\n <div class=\"psdk-todo-assignment-task\">\n Task in\n <button class=\"psdk-todo-id\" style=\"cursor: pointer\" (click)=\"clickGo(assignment)\">\n {{ assignment.name }} {{ getID(assignment) }}\n </button>\n <span *ngIf=\"assignment.status != undefined\">\n &bull; <span class=\"psdk-todo-assignment-status\">{{ assignment?.status }}</span>\n </span>\n &bull; {{ localizedVal('Urgency', localeCategory) }} {{ getPriority(assignment) }}\n </div>\n </div>\n </div>\n <div class=\"psdk-todo-assignment-action\">\n <button mat-flat-button color=\"primary\" (click)=\"clickGo(assignment)\">{{ localizedVal('Go', localeCategory) }}</button>\n </div>\n </div>\n <div class=\"psdk-display-divider\"></div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"assignmentCount$ > 3\">\n <div *ngIf=\"bShowMore$; else showLess\" class=\"psdk-todo-show-more\">\n <button mat-stroked-button (click)=\"_showMore()\">Show more</button>\n </div>\n <ng-template #showLess>\n <div class=\"psdk-todo-show-more\">\n <button mat-stroked-button (click)=\"_showLess()\">Show less</button>\n </div>\n </ng-template>\n</div>\n", styles: [".psdk-display-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-todo{padding:1rem;background-color:var(--app-form-color);border-radius:.6125rem;border-left:6px solid;border-left-color:var(--app-primary-color)}.psdk-todo-header{display:inline-flex}.psdk-todo-text{padding:.5rem .625rem;font-size:1.1rem;font-weight:700}.psdk-assignment-count{background-color:var(--app-primary-light-color);margin:.5rem;border-radius:45%;padding:.15rem .4rem}.psdk-todo-id{color:var(--app-primary-color);padding:0;cursor:pointer;border:0;background-color:transparent;align-items:center}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.25rem}.psdk-todo-assignment{display:inline-flex;width:100%;padding:.625rem 0rem}.psdk-todo-assignment-data{display:inline-flex}.psdk-todo-assignment-status{background-color:var(--app-neutral-light-color);border-radius:.125rem;color:var(--app-assignment-status-color);font-size:.75rem;font-weight:700;line-height:1.25rem;height:1.25rem;padding:0 .5rem;text-transform:uppercase}.psdk-todo-assignment-task{color:var(--app-neutral-color)}.psdk-todo-assignment-action{display:inline-flex}.psdk-todo-card{width:100%;padding-left:.625rem}.psdk-todo-show-more{width:100%;text-align:center;margin-top:.625rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] }); }
188
188
  }
189
189
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TodoComponent, decorators: [{
190
190
  type: Component,
191
- args: [{ selector: 'app-todo', providers: [Utils], standalone: true, imports: [CommonModule, MatButtonModule], template: "<div class=\"psdk-todo\">\n <div class=\"psdk-todo-header\">\n <div *ngIf=\"showTodoList$\" class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <div id=\"worklist\" class=\"psdk-todo-text\">{{ headerText$ }}</div>\n <div *ngIf=\"showTodoList$\" class=\"psdk-assignment-count\">{{ assignmentCount$ }}</div>\n </div>\n <br /><br />\n <div *ngIf=\"showTodoList$\" class=\"psdk-display-divider\"></div>\n\n <div class=\"psdk-todo-assignments\">\n <div *ngFor=\"let assignment of arAssignments$\">\n <div class=\"psdk-todo-assignment\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <div class=\"psdk-todo-card\">\n <div class=\"psdk-todo-assignment-title\">{{ getAssignmentName(assignment) }}</div>\n <div class=\"psdk-todo-assignment-data\">\n <div class=\"psdk-todo-assignment-task\">\n Task in\n <button class=\"psdk-todo-id\" style=\"cursor: pointer\" (click)=\"clickGo(assignment)\">\n {{ assignment.name }} {{ getID(assignment) }}\n </button>\n <span *ngIf=\"assignment.status != undefined\">\n &bull; <span class=\"psdk-todo-assignment-status\">{{ assignment?.status }}</span>\n </span>\n &bull; {{ localizedVal('Urgency', localeCategory) }} {{ getPriority(assignment) }}\n </div>\n </div>\n </div>\n <div class=\"psdk-todo-assignment-action\">\n <button mat-flat-button color=\"primary\" (click)=\"clickGo(assignment)\">{{ localizedVal('Go', localeCategory) }}</button>\n </div>\n </div>\n <div class=\"psdk-display-divider\"></div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"assignmentCount$ > 3\">\n <div *ngIf=\"bShowMore$; else showLess\" class=\"psdk-todo-show-more\">\n <button mat-stroked-button (click)=\"_showMore()\">Show more</button>\n </div>\n <ng-template #showLess>\n <div class=\"psdk-todo-show-more\">\n <button mat-stroked-button (click)=\"_showLess()\">Show less</button>\n </div>\n </ng-template>\n</div>\n", styles: [".psdk-display-divider{border-bottom:.0625rem solid lightgrey}.psdk-todo{padding:1rem;background-color:#fff;border-radius:.6125rem;border-left:6px solid;border-left-color:#7986cb}.psdk-todo-header{display:inline-flex}.psdk-todo-text{padding:.5rem .625rem;font-size:1.1rem;font-weight:700}.psdk-assignment-count{background-color:#b499fc;margin:.5rem;border-radius:45%;padding:.15rem .4rem}.psdk-todo-id{color:#673ab7;padding:0;cursor:pointer;border:0;background-color:transparent;align-items:center}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:#673ab7;color:#fff;font-weight:700;font-size:1.25rem}.psdk-todo-assignment{display:inline-flex;width:100%;padding:.625rem 0rem}.psdk-todo-assignment-data{display:inline-flex}.psdk-todo-assignment-status{background-color:#d3d3d3;border-radius:.125rem;color:#2f4f4f;font-size:.75rem;font-weight:700;line-height:1.25rem;height:1.25rem;padding:0 .5rem;text-transform:uppercase}.psdk-todo-assignment-task{color:gray}.psdk-todo-assignment-action{display:inline-flex}.psdk-todo-card{width:100%;padding-left:.625rem}.psdk-todo-show-more{width:100%;text-align:center;margin-top:.625rem}\n"] }]
191
+ args: [{ selector: 'app-todo', providers: [Utils], standalone: true, imports: [CommonModule, MatButtonModule], template: "<div class=\"psdk-todo\">\n <div class=\"psdk-todo-header\">\n <div *ngIf=\"showTodoList$\" class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <div id=\"worklist\" class=\"psdk-todo-text\">{{ headerText$ }}</div>\n <div *ngIf=\"showTodoList$\" class=\"psdk-assignment-count\">{{ assignmentCount$ }}</div>\n </div>\n <br /><br />\n <div *ngIf=\"showTodoList$\" class=\"psdk-display-divider\"></div>\n\n <div class=\"psdk-todo-assignments\">\n <div *ngFor=\"let assignment of arAssignments$\">\n <div class=\"psdk-todo-assignment\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <div class=\"psdk-todo-card\">\n <div class=\"psdk-todo-assignment-title\">{{ getAssignmentName(assignment) }}</div>\n <div class=\"psdk-todo-assignment-data\">\n <div class=\"psdk-todo-assignment-task\">\n Task in\n <button class=\"psdk-todo-id\" style=\"cursor: pointer\" (click)=\"clickGo(assignment)\">\n {{ assignment.name }} {{ getID(assignment) }}\n </button>\n <span *ngIf=\"assignment.status != undefined\">\n &bull; <span class=\"psdk-todo-assignment-status\">{{ assignment?.status }}</span>\n </span>\n &bull; {{ localizedVal('Urgency', localeCategory) }} {{ getPriority(assignment) }}\n </div>\n </div>\n </div>\n <div class=\"psdk-todo-assignment-action\">\n <button mat-flat-button color=\"primary\" (click)=\"clickGo(assignment)\">{{ localizedVal('Go', localeCategory) }}</button>\n </div>\n </div>\n <div class=\"psdk-display-divider\"></div>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"assignmentCount$ > 3\">\n <div *ngIf=\"bShowMore$; else showLess\" class=\"psdk-todo-show-more\">\n <button mat-stroked-button (click)=\"_showMore()\">Show more</button>\n </div>\n <ng-template #showLess>\n <div class=\"psdk-todo-show-more\">\n <button mat-stroked-button (click)=\"_showLess()\">Show less</button>\n </div>\n </ng-template>\n</div>\n", styles: [".psdk-display-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-todo{padding:1rem;background-color:var(--app-form-color);border-radius:.6125rem;border-left:6px solid;border-left-color:var(--app-primary-color)}.psdk-todo-header{display:inline-flex}.psdk-todo-text{padding:.5rem .625rem;font-size:1.1rem;font-weight:700}.psdk-assignment-count{background-color:var(--app-primary-light-color);margin:.5rem;border-radius:45%;padding:.15rem .4rem}.psdk-todo-id{color:var(--app-primary-color);padding:0;cursor:pointer;border:0;background-color:transparent;align-items:center}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.25rem}.psdk-todo-assignment{display:inline-flex;width:100%;padding:.625rem 0rem}.psdk-todo-assignment-data{display:inline-flex}.psdk-todo-assignment-status{background-color:var(--app-neutral-light-color);border-radius:.125rem;color:var(--app-assignment-status-color);font-size:.75rem;font-weight:700;line-height:1.25rem;height:1.25rem;padding:0 .5rem;text-transform:uppercase}.psdk-todo-assignment-task{color:var(--app-neutral-color)}.psdk-todo-assignment-action{display:inline-flex}.psdk-todo-card{width:100%;padding-left:.625rem}.psdk-todo-show-more{width:100%;text-align:center;margin-top:.625rem}\n"] }]
192
192
  }], ctorParameters: function () { return [{ type: i1.ProgressSpinnerService }, { type: i2.ErrorMessagesService }, { type: i0.NgZone }, { type: i3.Utils }]; }, propDecorators: { pConn$: [{
193
193
  type: Input
194
194
  }], caseInfoID$: [{
@@ -210,4 +210,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
210
210
  }], isConfirm: [{
211
211
  type: Input
212
212
  }] } });
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9kby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvd2lkZ2V0L3RvZG8vdG9kby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvd2lkZ2V0L3RvZG8vdG9kby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUkzRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7QUFtQmhELE1BQU0sT0FBTyxhQUFhO0lBMEJ4QixZQUNVLFNBQWlDLEVBQ2pDLFNBQStCLEVBQy9CLE1BQWMsRUFDZCxLQUFZO1FBSFosY0FBUyxHQUFULFNBQVMsQ0FBd0I7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBc0I7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQU87UUF6QmIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFckIsVUFBSyxHQUFHLFVBQVUsQ0FBQztRQU81Qix5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFFNUIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUlsQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLGlCQUFZLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUNyRCxtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQUN4QiwyQkFBc0IsR0FBRyxJQUFJ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Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IHB1YmxpY0NvbnN0YW50cyB9IGZyb20gJ0BwZWdhL3Bjb3JlLXBjb25uZWN0LXR5cGVkZWZzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21lc3NhZ2VzL3Byb2dyZXNzLXNwaW5uZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2VzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXNzYWdlcy9lcnJvci1tZXNzYWdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vX2hlbHBlcnMvdXRpbHMnO1xuXG5pbnRlcmZhY2UgVG9Eb1Byb3BzIHtcbiAgLy8gSWYgYW55LCBlbnRlciBhZGRpdGlvbmFsIHByb3BzIHRoYXQgb25seSBleGlzdCBvbiB0aGlzIGNvbXBvbmVudFxuICBkYXRhc291cmNlPzogYW55O1xuICBoZWFkZXJUZXh0Pzogc3RyaW5nO1xuICBteVdvcmtMaXN0PzogYW55O1xuICBsYWJlbD86IHN0cmluZztcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdG9kbycsXG4gIHRlbXBsYXRlVXJsOiAnLi90b2RvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdG9kby5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtVdGlsc10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgVG9kb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcbiAgQElucHV0KCkgY2FzZUluZm9JRCQ6IHN0cmluZztcbiAgQElucHV0KCkgZGF0YXNvdXJjZSQ6IGFueTtcbiAgQElucHV0KCkgaGVhZGVyVGV4dCQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dUb2RvTGlzdCQgPSB0cnVlO1xuICBASW5wdXQoKSB0YXJnZXQkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHR5cGUkID0gJ3dvcmtsaXN0JztcbiAgQElucHV0KCkgY29udGV4dCQ6IHN0cmluZztcbiAgQElucHV0KCkgbXlXb3JrTGlzdCQ6IGFueTtcbiAgQElucHV0KCkgaXNDb25maXJtO1xuXG4gIGNvbmZpZ1Byb3BzJDogVG9Eb1Byb3BzO1xuICBjdXJyZW50VXNlciQ6IHN0cmluZztcbiAgY3VycmVudFVzZXJJbml0aWFscyQgPSAnLS0nO1xuICBhc3NpZ25tZW50Q291bnQkOiBudW1iZXI7XG4gIGJTaG93TW9yZSQgPSB0cnVlO1xuICBhckFzc2lnbm1lbnRzJDogYW55W107XG4gIGFzc2lnbm1lbnRzU291cmNlJDogYW55O1xuICBDT05TVFM6IHR5cGVvZiBwdWJsaWNDb25zdGFudHM7XG4gIGJMb2dnaW5nID0gdHJ1ZTtcbiAgbG9jYWxpemVkVmFsID0gUENvcmUuZ2V0TG9jYWxlVXRpbHMoKS5nZXRMb2NhbGVWYWx1ZTtcbiAgbG9jYWxlQ2F0ZWdvcnkgPSAnVG9kbyc7XG4gIHNob3dsZXNzTG9jYWxpemVkVmFsdWUgPSB0aGlzLmxvY2FsaXplZFZhbCgnc2hvd19sZXNzJywgJ0Nvc21vc0ZpZWxkcycpO1xuICBzaG93TW9yZUxvY2FsaXplZFZhbHVlID0gdGhpcy5sb2NhbGl6ZWRWYWwoJ3Nob3dfbW9yZScsICdDb3Ntb3NGaWVsZHMnKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBzU2VydmljZTogUHJvZ3Jlc3NTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIGVyU2VydmljZTogRXJyb3JNZXNzYWdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHV0aWxzOiBVdGlsc1xuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5DT05TVFMgPSBQQ29yZS5nZXRDb25zdGFudHMoKTtcbiAgICBjb25zdCB7IENSRUFURV9TVEFHRV9TQVZFRCwgQ1JFQVRFX1NUQUdFX0RFTEVURUQgfTogYW55ID0gUENvcmUuZ2V0RXZlbnRzKCkuZ2V0Q2FzZUV2ZW50KCk7XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnN1YnNjcmliZShcbiAgICAgIFBDb3JlLmdldENvbnN0YW50cygpLlBVQl9TVUJfRVZFTlRTLkVWRU5UX0NBTkNFTCxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVUb0RvKCk7XG4gICAgICB9LFxuICAgICAgJ3VwZGF0ZVRvRG8nXG4gICAgKTtcblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkuc3Vic2NyaWJlKFxuICAgICAgQ1JFQVRFX1NUQUdFX1NBVkVELFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUxpc3QoKTtcbiAgICAgIH0sXG4gICAgICBDUkVBVEVfU1RBR0VfU0FWRURcbiAgICApO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS5zdWJzY3JpYmUoXG4gICAgICBDUkVBVEVfU1RBR0VfREVMRVRFRCxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0KCk7XG4gICAgICB9LFxuICAgICAgQ1JFQVRFX1NUQUdFX0RFTEVURURcbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVUb0RvKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjb25zdCB7IENSRUFURV9TVEFHRV9TQVZFRCwgQ1JFQVRFX1NUQUdFX0RFTEVURUQgfTogYW55ID0gUENvcmUuZ2V0RXZlbnRzKCkuZ2V0Q2FzZUV2ZW50KCk7XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnVuc3Vic2NyaWJlKFBDb3JlLmdldENvbnN0YW50cygpLlBVQl9TVUJfRVZFTlRTLkVWRU5UX0NBTkNFTCwgJ3VwZGF0ZVRvRG8nKTtcblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkudW5zdWJzY3JpYmUoQ1JFQVRFX1NUQUdFX1NBVkVELCBDUkVBVEVfU1RBR0VfU0FWRUQpO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS51bnN1YnNjcmliZShDUkVBVEVfU1RBR0VfREVMRVRFRCwgQ1JFQVRFX1NUQUdFX0RFTEVURUQpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgLy8gZG9uJ3QgdXBkYXRlIHVudGlsIHdlJ3ZhIGhhZCBhbiBpbml0XG4gICAgaWYgKFBDb3JlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRvRG8oKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVXb3JrTGlzdChrZXkpIHtcbiAgICAoXG4gICAgICBQQ29yZS5nZXREYXRhQXBpVXRpbHMoKVxuICAgICAgICAvLyBAdHMtaWdub3JlIC0gMm5kIHBhcmFtZXRlciBcInBheWxvYWRcIiBhbmQgM3JkIHBhcmFtZXRlciBcImNvbnRleHRcIiBzaG91bGQgYmUgb3B0aW9uYWwgaW4gZ2V0RGF0YSBtZXRob2RcbiAgICAgICAgLmdldERhdGEoa2V5KSBhcyBQcm9taXNlPGFueT5cbiAgICApXG4gICAgICAudGhlbihyZXNwb25zZURhdGEgPT4ge1xuICAgICAgICBjb25zdCBkYXRhT2JqZWN0ID0ge307XG4gICAgICAgIGRhdGFPYmplY3Rba2V5XSA9IHtcbiAgICAgICAgICBweFJlc3VsdHM6IHJlc3BvbnNlRGF0YS5kYXRhLmRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnBDb25uJC51cGRhdGVTdGF0ZShkYXRhT2JqZWN0KTtcbiAgICAgICAgdGhpcy51cGRhdGVUb0RvKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyPy5zdGFjayk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUxpc3QoKSB7XG4gICAgdGhpcy51cGRhdGVXb3JrTGlzdCgnRF9weU15V29ya0xpc3QnKTtcbiAgfVxuXG4gIHVwZGF0ZVRvRG8oKSB7XG4gICAgdGhpcy5jb25maWdQcm9wcyQgPSB0aGlzLnBDb25uJC5yZXNvbHZlQ29uZmlnUHJvcHModGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKSkgYXMgVG9Eb1Byb3BzO1xuXG4gICAgaWYgKHRoaXMuaGVhZGVyVGV4dCQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhlYWRlclRleHQkID0gdGhpcy5jb25maWdQcm9wcyQuaGVhZGVyVGV4dDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFzb3VyY2UkID0gdGhpcy5jb25maWdQcm9wcyQuZGF0YXNvdXJjZSA/IHRoaXMuY29uZmlnUHJvcHMkLmRhdGFzb3VyY2UgOiB0aGlzLmRhdGFzb3VyY2UkO1xuICAgIHRoaXMubXlXb3JrTGlzdCQgPSB0aGlzLmNvbmZpZ1Byb3BzJC5teVdvcmtMaXN0ID8gdGhpcy5jb25maWdQcm9wcyQubXlXb3JrTGlzdCA6IHRoaXMubXlXb3JrTGlzdCQ7XG5cbiAgICB0aGlzLmFzc2lnbm1lbnRzU291cmNlJCA9IHRoaXMuZGF0YXNvdXJjZSQ/LnNvdXJjZSB8fCB0aGlzLm15V29ya0xpc3QkPy5zb3VyY2U7XG5cbiAgICBpZiAodGhpcy5zaG93VG9kb0xpc3QkKSB7XG4gICAgICB0aGlzLmFzc2lnbm1lbnRDb3VudCQgPSB0aGlzLmFzc2lnbm1lbnRzU291cmNlJCAhPSBudWxsID8gdGhpcy5hc3NpZ25tZW50c1NvdXJjZSQubGVuZ3RoIDogMDtcbiAgICAgIHRoaXMuYXJBc3NpZ25tZW50cyQgPSB0aGlzLnRvcFRocmVlQXNzaWdubWVudHModGhpcy5hc3NpZ25tZW50c1NvdXJjZSQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQgY2FzZUluZm9JZCBhc3NpZ25tZW50LlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvbmVseS1pZlxuICAgICAgaWYgKHRoaXMuY2FzZUluZm9JRCQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYXJBc3NpZ25tZW50cyQgPSB0aGlzLmdldENhc2VJbmZvQXNzaWdubWVudCh0aGlzLmFzc2lnbm1lbnRzU291cmNlJCwgdGhpcy5jYXNlSW5mb0lEJCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50VXNlciQgPSBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvck5hbWUoKTtcbiAgICB0aGlzLmN1cnJlbnRVc2VySW5pdGlhbHMkID0gdGhpcy51dGlscy5nZXRJbml0aWFscyh0aGlzLmN1cnJlbnRVc2VyJCk7XG4gIH1cblxuICBnZXRJRChhc3NpZ25tZW50OiBhbnkpIHtcbiAgICBpZiAoYXNzaWdubWVudC52YWx1ZSkge1xuICAgICAgY29uc3QgcmVmS2V5ID0gYXNzaWdubWVudC52YWx1ZTtcbiAgICAgIHJldHVybiByZWZLZXkuc3Vic3RyaW5nKHJlZktleS5sYXN0SW5kZXhPZignICcpICsgMSk7XG4gICAgfVxuICAgIGNvbnN0IHJlZktleSA9IGFzc2lnbm1lbnQuSUQ7XG4gICAgY29uc3QgYXJLZXlzID0gcmVmS2V5LnNwbGl0KCchJylbMF0uc3BsaXQoJyAnKTtcbiAgICByZXR1cm4gYXJLZXlzWzJdO1xuICB9XG5cbiAgdG9wVGhyZWVBc3NpZ25tZW50cyhhc3NpZ25tZW50c1NvdXJjZTogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXNzaWdubWVudHNTb3VyY2UpID8gYXNzaWdubWVudHNTb3VyY2Uuc2xpY2UoMCwgMykgOiBbXTtcbiAgfVxuXG4gIGdldEFzc2lnbm1lbnRJZChhc3NpZ25tZW50KSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSQgPT09IHRoaXMuQ09OU1RTLlRPRE8gPyBhc3NpZ25tZW50LklEIDogYXNzaWdubWVudC5pZDtcbiAgfVxuXG4gIGdldFByaW9yaXR5KGFzc2lnbm1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlJCA9PT0gdGhpcy5DT05TVFMuVE9ETyA/IGFzc2lnbm1lbnQudXJnZW5jeSA6IGFzc2lnbm1lbnQucHJpb3JpdHk7XG4gIH1cblxuICBnZXRBc3NpZ25tZW50TmFtZShhc3NpZ25tZW50KSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSQgPT09IHRoaXMuQ09OU1RTLlRPRE8gPyBhc3NpZ25tZW50Lm5hbWUgOiBhc3NpZ25tZW50LnN0ZXBOYW1lO1xuICB9XG5cbiAgaW5pdEFzc2lnbm1lbnRzKCk6IGFueVtdIHtcbiAgICBpZiAodGhpcy5hc3NpZ25tZW50c1NvdXJjZSQpIHtcbiAgICAgIHRoaXMuYXNzaWdubWVudENvdW50JCA9IHRoaXMuYXNzaWdubWVudHNTb3VyY2UkLmxlbmd0aDtcbiAgICAgIHJldHVybiB0aGlzLnRvcFRocmVlQXNzaWdubWVudHModGhpcy5hc3NpZ25tZW50c1NvdXJjZSQpO1xuICAgIH1cbiAgICAvLyB0dXJuIG9mZiB0b2RvbGlzdFxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldENhc2VJbmZvQXNzaWdubWVudChhc3NpZ25tZW50c1NvdXJjZTogYW55W10sIGNhc2VJbmZvSUQ6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBhc3NpZ25tZW50c1NvdXJjZSkge1xuICAgICAgaWYgKHNvdXJjZS5JRC5pbmRleE9mKGNhc2VJbmZvSUQpID49IDApIHtcbiAgICAgICAgY29uc3QgbGlzdFJvdyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc291cmNlKSk7XG4gICAgICAgIC8vIHVyZ2VuY3kgYmVjb21lcyBwcmlvcml0eVxuICAgICAgICBsaXN0Um93LnByaW9yaXR5ID0gbGlzdFJvdy51cmdlbmN5IHx8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gbWltaWMgcmVndWxhciBsaXN0XG4gICAgICAgIGxpc3RSb3cuaWQgPSBsaXN0Um93LklEIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgcmVzdWx0LnB1c2gobGlzdFJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBfc2hvd01vcmUoKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuYlNob3dNb3JlJCA9IGZhbHNlO1xuICAgICAgdGhpcy5hckFzc2lnbm1lbnRzJCA9IHRoaXMuYXNzaWdubWVudHNTb3VyY2UkO1xuICAgIH0pO1xuICB9XG5cbiAgX3Nob3dMZXNzKCkge1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLmJTaG93TW9yZSQgPSB0cnVlO1xuXG4gICAgICB0aGlzLmFyQXNzaWdubWVudHMkID0gdGhpcy50b3BUaHJlZUFzc2lnbm1lbnRzKHRoaXMuYXNzaWdubWVudHNTb3VyY2UkKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQ2hpbGRDYXNlKGFzc2lnbm1lbnQpIHtcbiAgICByZXR1cm4gYXNzaWdubWVudC5pc0NoaWxkO1xuICB9XG5cbiAgY2xpY2tHbyhhc3NpZ25tZW50KSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldEFzc2lnbm1lbnRJZChhc3NpZ25tZW50KTtcbiAgICBsZXQgeyBjbGFzc25hbWUgPSAnJyB9ID0gYXNzaWdubWVudDtcbiAgICBjb25zdCBzVGFyZ2V0ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGFpbmVyTmFtZSgpO1xuICAgIGNvbnN0IHNUYXJnZXRDb250YWluZXJOYW1lID0gc1RhcmdldDtcblxuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHsgY29udGFpbmVyTmFtZTogc1RhcmdldENvbnRhaW5lck5hbWUgfTtcblxuICAgIGlmIChjbGFzc25hbWUgPT09IG51bGwgfHwgY2xhc3NuYW1lID09PSAnJykge1xuICAgICAgY2xhc3NuYW1lID0gdGhpcy5wQ29ubiQuZ2V0Q2FzZUluZm8oKS5nZXRDbGFzc05hbWUoKTtcbiAgICB9XG5cbiAgICBpZiAoc1RhcmdldCA9PT0gJ3dvcmthcmVhJykge1xuICAgICAgb3B0aW9ucy5pc0FjdGlvbkZyb21Ub0RvTGlzdCA9IHRydWU7XG4gICAgICBvcHRpb25zLnRhcmdldCA9ICcnO1xuICAgICAgb3B0aW9ucy5jb250ZXh0ID0gbnVsbDtcbiAgICAgIG9wdGlvbnMuaXNDaGlsZCA9IHRoaXMuaXNDaGlsZENhc2UoYXNzaWdubWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaXNBY3Rpb25Gcm9tVG9Eb0xpc3QgPSBmYWxzZTtcbiAgICAgIG9wdGlvbnMudGFyZ2V0ID0gc1RhcmdldDtcbiAgICB9XG5cbiAgICB0aGlzLnBzU2VydmljZS5zZW5kTWVzc2FnZSh0cnVlKTtcblxuICAgIHRoaXMucENvbm4kXG4gICAgICAuZ2V0QWN0aW9uc0FwaSgpXG4gICAgICAub3BlbkFzc2lnbm1lbnQoaWQsIGNsYXNzbmFtZSwgb3B0aW9ucylcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5iTG9nZ2luZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBvcGVuQXNzaWdubWVudCBjb21wbGV0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHRoaXMucHNTZXJ2aWNlLnNlbmRNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5lclNlcnZpY2Uuc2VuZE1lc3NhZ2UoJ3Nob3cnLCAnRmFpbGVkIHRvIG9wZW4nKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHNkay10b2RvXCI+XG4gIDxkaXYgY2xhc3M9XCJwc2RrLXRvZG8taGVhZGVyXCI+XG4gICAgPGRpdiAqbmdJZj1cInNob3dUb2RvTGlzdCRcIiBjbGFzcz1cInBzZGstYXZhdGFyXCI+e3sgdGhpcy5jdXJyZW50VXNlckluaXRpYWxzJCB9fTwvZGl2PlxuICAgIDxkaXYgaWQ9XCJ3b3JrbGlzdFwiIGNsYXNzPVwicHNkay10b2RvLXRleHRcIj57eyBoZWFkZXJUZXh0JCB9fTwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzaG93VG9kb0xpc3QkXCIgY2xhc3M9XCJwc2RrLWFzc2lnbm1lbnQtY291bnRcIj57eyBhc3NpZ25tZW50Q291bnQkIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8YnIgLz48YnIgLz5cbiAgPGRpdiAqbmdJZj1cInNob3dUb2RvTGlzdCRcIiBjbGFzcz1cInBzZGstZGlzcGxheS1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBzZGstdG9kby1hc3NpZ25tZW50c1wiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGFzc2lnbm1lbnQgb2YgYXJBc3NpZ25tZW50cyRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXRvZG8tYXNzaWdubWVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXJcIj57eyB0aGlzLmN1cnJlbnRVc2VySW5pdGlhbHMkIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXRvZG8tY2FyZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXRvZG8tYXNzaWdubWVudC10aXRsZVwiPnt7IGdldEFzc2lnbm1lbnROYW1lKGFzc2lnbm1lbnQpIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstdG9kby1hc3NpZ25tZW50LWRhdGFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXRvZG8tYXNzaWdubWVudC10YXNrXCI+XG4gICAgICAgICAgICAgIFRhc2sgaW5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInBzZGstdG9kby1pZFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgKGNsaWNrKT1cImNsaWNrR28oYXNzaWdubWVudClcIj5cbiAgICAgICAgICAgICAgICB7eyBhc3NpZ25tZW50Lm5hbWUgfX0ge3sgZ2V0SUQoYXNzaWdubWVudCkgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYXNzaWdubWVudC5zdGF0dXMgIT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICAgICAgJmJ1bGw7IDxzcGFuIGNsYXNzPVwicHNkay10b2RvLWFzc2lnbm1lbnQtc3RhdHVzXCI+e3sgYXNzaWdubWVudD8uc3RhdHVzIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICZidWxsOyB7eyBsb2NhbGl6ZWRWYWwoJ1VyZ2VuY3knLCBsb2NhbGVDYXRlZ29yeSkgfX0ge3sgZ2V0UHJpb3JpdHkoYXNzaWdubWVudCkgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstdG9kby1hc3NpZ25tZW50LWFjdGlvblwiPlxuICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjbGlja0dvKGFzc2lnbm1lbnQpXCI+e3sgbG9jYWxpemVkVmFsKCdHbycsIGxvY2FsZUNhdGVnb3J5KSB9fTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstZGlzcGxheS1kaXZpZGVyXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJhc3NpZ25tZW50Q291bnQkID4gM1wiPlxuICA8ZGl2ICpuZ0lmPVwiYlNob3dNb3JlJDsgZWxzZSBzaG93TGVzc1wiIGNsYXNzPVwicHNkay10b2RvLXNob3ctbW9yZVwiPlxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJfc2hvd01vcmUoKVwiPlNob3cgbW9yZTwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICNzaG93TGVzcz5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay10b2RvLXNob3ctbW9yZVwiPlxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cIl9zaG93TGVzcygpXCI+U2hvdyBsZXNzPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9kby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvd2lkZ2V0L3RvZG8vdG9kby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvd2lkZ2V0L3RvZG8vdG9kby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUkzRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7QUFtQmhELE1BQU0sT0FBTyxhQUFhO0lBMEJ4QixZQUNVLFNBQWlDLEVBQ2pDLFNBQStCLEVBQy9CLE1BQWMsRUFDZCxLQUFZO1FBSFosY0FBUyxHQUFULFNBQVMsQ0FBd0I7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBc0I7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQU87UUF6QmIsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFckIsVUFBSyxHQUFHLFVBQVUsQ0FBQztRQU81Qix5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFFNUIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUlsQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLGlCQUFZLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLGNBQWMsQ0FBQztRQUNyRCxtQkFBYyxHQUFHLE1BQU0sQ0FBQztRQUN4QiwyQkFBc0IsR0FBRyxJQUFJ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Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IHB1YmxpY0NvbnN0YW50cyB9IGZyb20gJ0BwZWdhL3Bjb3JlLXBjb25uZWN0LXR5cGVkZWZzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQcm9ncmVzc1NwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21lc3NhZ2VzL3Byb2dyZXNzLXNwaW5uZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2VzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXNzYWdlcy9lcnJvci1tZXNzYWdlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vX2hlbHBlcnMvdXRpbHMnO1xuXG5pbnRlcmZhY2UgVG9Eb1Byb3BzIHtcbiAgLy8gSWYgYW55LCBlbnRlciBhZGRpdGlvbmFsIHByb3BzIHRoYXQgb25seSBleGlzdCBvbiB0aGlzIGNvbXBvbmVudFxuICBkYXRhc291cmNlPzogYW55O1xuICBoZWFkZXJUZXh0Pzogc3RyaW5nO1xuICBteVdvcmtMaXN0PzogYW55O1xuICBsYWJlbD86IHN0cmluZztcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdG9kbycsXG4gIHRlbXBsYXRlVXJsOiAnLi90b2RvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdG9kby5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtVdGlsc10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgVG9kb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcbiAgQElucHV0KCkgY2FzZUluZm9JRCQ6IHN0cmluZztcbiAgQElucHV0KCkgZGF0YXNvdXJjZSQ6IGFueTtcbiAgQElucHV0KCkgaGVhZGVyVGV4dCQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dUb2RvTGlzdCQgPSB0cnVlO1xuICBASW5wdXQoKSB0YXJnZXQkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHR5cGUkID0gJ3dvcmtsaXN0JztcbiAgQElucHV0KCkgY29udGV4dCQ6IHN0cmluZztcbiAgQElucHV0KCkgbXlXb3JrTGlzdCQ6IGFueTtcbiAgQElucHV0KCkgaXNDb25maXJtO1xuXG4gIGNvbmZpZ1Byb3BzJDogVG9Eb1Byb3BzO1xuICBjdXJyZW50VXNlciQ6IHN0cmluZztcbiAgY3VycmVudFVzZXJJbml0aWFscyQgPSAnLS0nO1xuICBhc3NpZ25tZW50Q291bnQkOiBudW1iZXI7XG4gIGJTaG93TW9yZSQgPSB0cnVlO1xuICBhckFzc2lnbm1lbnRzJDogYW55W107XG4gIGFzc2lnbm1lbnRzU291cmNlJDogYW55O1xuICBDT05TVFM6IHR5cGVvZiBwdWJsaWNDb25zdGFudHM7XG4gIGJMb2dnaW5nID0gdHJ1ZTtcbiAgbG9jYWxpemVkVmFsID0gUENvcmUuZ2V0TG9jYWxlVXRpbHMoKS5nZXRMb2NhbGVWYWx1ZTtcbiAgbG9jYWxlQ2F0ZWdvcnkgPSAnVG9kbyc7XG4gIHNob3dsZXNzTG9jYWxpemVkVmFsdWUgPSB0aGlzLmxvY2FsaXplZFZhbCgnc2hvd19sZXNzJywgJ0Nvc21vc0ZpZWxkcycpO1xuICBzaG93TW9yZUxvY2FsaXplZFZhbHVlID0gdGhpcy5sb2NhbGl6ZWRWYWwoJ3Nob3dfbW9yZScsICdDb3Ntb3NGaWVsZHMnKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBzU2VydmljZTogUHJvZ3Jlc3NTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIGVyU2VydmljZTogRXJyb3JNZXNzYWdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHV0aWxzOiBVdGlsc1xuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5DT05TVFMgPSBQQ29yZS5nZXRDb25zdGFudHMoKTtcbiAgICBjb25zdCB7IENSRUFURV9TVEFHRV9TQVZFRCwgQ1JFQVRFX1NUQUdFX0RFTEVURUQgfTogYW55ID0gUENvcmUuZ2V0RXZlbnRzKCkuZ2V0Q2FzZUV2ZW50KCk7XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnN1YnNjcmliZShcbiAgICAgIFBDb3JlLmdldENvbnN0YW50cygpLlBVQl9TVUJfRVZFTlRTLkVWRU5UX0NBTkNFTCxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVUb0RvKCk7XG4gICAgICB9LFxuICAgICAgJ3VwZGF0ZVRvRG8nXG4gICAgKTtcblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkuc3Vic2NyaWJlKFxuICAgICAgQ1JFQVRFX1NUQUdFX1NBVkVELFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUxpc3QoKTtcbiAgICAgIH0sXG4gICAgICBDUkVBVEVfU1RBR0VfU0FWRURcbiAgICApO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS5zdWJzY3JpYmUoXG4gICAgICBDUkVBVEVfU1RBR0VfREVMRVRFRCxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVMaXN0KCk7XG4gICAgICB9LFxuICAgICAgQ1JFQVRFX1NUQUdFX0RFTEVURURcbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVUb0RvKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjb25zdCB7IENSRUFURV9TVEFHRV9TQVZFRCwgQ1JFQVRFX1NUQUdFX0RFTEVURUQgfTogYW55ID0gUENvcmUuZ2V0RXZlbnRzKCkuZ2V0Q2FzZUV2ZW50KCk7XG5cbiAgICBQQ29yZS5nZXRQdWJTdWJVdGlscygpLnVuc3Vic2NyaWJlKFBDb3JlLmdldENvbnN0YW50cygpLlBVQl9TVUJfRVZFTlRTLkVWRU5UX0NBTkNFTCwgJ3VwZGF0ZVRvRG8nKTtcblxuICAgIFBDb3JlLmdldFB1YlN1YlV0aWxzKCkudW5zdWJzY3JpYmUoQ1JFQVRFX1NUQUdFX1NBVkVELCBDUkVBVEVfU1RBR0VfU0FWRUQpO1xuXG4gICAgUENvcmUuZ2V0UHViU3ViVXRpbHMoKS51bnN1YnNjcmliZShDUkVBVEVfU1RBR0VfREVMRVRFRCwgQ1JFQVRFX1NUQUdFX0RFTEVURUQpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgLy8gZG9uJ3QgdXBkYXRlIHVudGlsIHdlJ3ZhIGhhZCBhbiBpbml0XG4gICAgaWYgKFBDb3JlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRvRG8oKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVXb3JrTGlzdChrZXkpIHtcbiAgICAoXG4gICAgICBQQ29yZS5nZXREYXRhQXBpVXRpbHMoKVxuICAgICAgICAvLyBAdHMtaWdub3JlIC0gMm5kIHBhcmFtZXRlciBcInBheWxvYWRcIiBhbmQgM3JkIHBhcmFtZXRlciBcImNvbnRleHRcIiBzaG91bGQgYmUgb3B0aW9uYWwgaW4gZ2V0RGF0YSBtZXRob2RcbiAgICAgICAgLmdldERhdGEoa2V5KSBhcyBQcm9taXNlPGFueT5cbiAgICApXG4gICAgICAudGhlbihyZXNwb25zZURhdGEgPT4ge1xuICAgICAgICBjb25zdCBkYXRhT2JqZWN0ID0ge307XG4gICAgICAgIGRhdGFPYmplY3Rba2V5XSA9IHtcbiAgICAgICAgICBweFJlc3VsdHM6IHJlc3BvbnNlRGF0YS5kYXRhLmRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnBDb25uJC51cGRhdGVTdGF0ZShkYXRhT2JqZWN0KTtcbiAgICAgICAgdGhpcy51cGRhdGVUb0RvKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyPy5zdGFjayk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUxpc3QoKSB7XG4gICAgdGhpcy51cGRhdGVXb3JrTGlzdCgnRF9weU15V29ya0xpc3QnKTtcbiAgfVxuXG4gIHVwZGF0ZVRvRG8oKSB7XG4gICAgdGhpcy5jb25maWdQcm9wcyQgPSB0aGlzLnBDb25uJC5yZXNvbHZlQ29uZmlnUHJvcHModGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKSkgYXMgVG9Eb1Byb3BzO1xuXG4gICAgaWYgKHRoaXMuaGVhZGVyVGV4dCQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhlYWRlclRleHQkID0gdGhpcy5jb25maWdQcm9wcyQuaGVhZGVyVGV4dDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFzb3VyY2UkID0gdGhpcy5jb25maWdQcm9wcyQuZGF0YXNvdXJjZSA/IHRoaXMuY29uZmlnUHJvcHMkLmRhdGFzb3VyY2UgOiB0aGlzLmRhdGFzb3VyY2UkO1xuICAgIHRoaXMubXlXb3JrTGlzdCQgPSB0aGlzLmNvbmZpZ1Byb3BzJC5teVdvcmtMaXN0ID8gdGhpcy5jb25maWdQcm9wcyQubXlXb3JrTGlzdCA6IHRoaXMubXlXb3JrTGlzdCQ7XG5cbiAgICB0aGlzLmFzc2lnbm1lbnRzU291cmNlJCA9IHRoaXMuZGF0YXNvdXJjZSQ/LnNvdXJjZSB8fCB0aGlzLm15V29ya0xpc3QkPy5zb3VyY2U7XG5cbiAgICBpZiAodGhpcy5zaG93VG9kb0xpc3QkKSB7XG4gICAgICB0aGlzLmFzc2lnbm1lbnRDb3VudCQgPSB0aGlzLmFzc2lnbm1lbnRzU291cmNlJCAhPSBudWxsID8gdGhpcy5hc3NpZ25tZW50c1NvdXJjZSQubGVuZ3RoIDogMDtcbiAgICAgIHRoaXMuYXJBc3NpZ25tZW50cyQgPSB0aGlzLnRvcFRocmVlQXNzaWdubWVudHModGhpcy5hc3NpZ25tZW50c1NvdXJjZSQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQgY2FzZUluZm9JZCBhc3NpZ25tZW50LlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvbmVseS1pZlxuICAgICAgaWYgKHRoaXMuY2FzZUluZm9JRCQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYXJBc3NpZ25tZW50cyQgPSB0aGlzLmdldENhc2VJbmZvQXNzaWdubWVudCh0aGlzLmFzc2lnbm1lbnRzU291cmNlJCwgdGhpcy5jYXNlSW5mb0lEJCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50VXNlciQgPSBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvck5hbWUoKTtcbiAgICB0aGlzLmN1cnJlbnRVc2VySW5pdGlhbHMkID0gdGhpcy51dGlscy5nZXRJbml0aWFscyh0aGlzLmN1cnJlbnRVc2VyJCk7XG4gIH1cblxuICBnZXRJRChhc3NpZ25tZW50OiBhbnkpIHtcbiAgICBpZiAoYXNzaWdubWVudC52YWx1ZSkge1xuICAgICAgY29uc3QgcmVmS2V5ID0gYXNzaWdubWVudC52YWx1ZTtcbiAgICAgIHJldHVybiByZWZLZXkuc3Vic3RyaW5nKHJlZktleS5sYXN0SW5kZXhPZignICcpICsgMSk7XG4gICAgfVxuICAgIGNvbnN0IHJlZktleSA9IGFzc2lnbm1lbnQuSUQ7XG4gICAgY29uc3QgYXJLZXlzID0gcmVmS2V5LnNwbGl0KCchJylbMF0uc3BsaXQoJyAnKTtcbiAgICByZXR1cm4gYXJLZXlzWzJdO1xuICB9XG5cbiAgdG9wVGhyZWVBc3NpZ25tZW50cyhhc3NpZ25tZW50c1NvdXJjZTogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXNzaWdubWVudHNTb3VyY2UpID8gYXNzaWdubWVudHNTb3VyY2Uuc2xpY2UoMCwgMykgOiBbXTtcbiAgfVxuXG4gIGdldEFzc2lnbm1lbnRJZChhc3NpZ25tZW50KSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSQgPT09IHRoaXMuQ09OU1RTLlRPRE8gPyBhc3NpZ25tZW50LklEIDogYXNzaWdubWVudC5pZDtcbiAgfVxuXG4gIGdldFByaW9yaXR5KGFzc2lnbm1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlJCA9PT0gdGhpcy5DT05TVFMuVE9ETyA/IGFzc2lnbm1lbnQudXJnZW5jeSA6IGFzc2lnbm1lbnQucHJpb3JpdHk7XG4gIH1cblxuICBnZXRBc3NpZ25tZW50TmFtZShhc3NpZ25tZW50KSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSQgPT09IHRoaXMuQ09OU1RTLlRPRE8gPyBhc3NpZ25tZW50Lm5hbWUgOiBhc3NpZ25tZW50LnN0ZXBOYW1lO1xuICB9XG5cbiAgaW5pdEFzc2lnbm1lbnRzKCk6IGFueVtdIHtcbiAgICBpZiAodGhpcy5hc3NpZ25tZW50c1NvdXJjZSQpIHtcbiAgICAgIHRoaXMuYXNzaWdubWVudENvdW50JCA9IHRoaXMuYXNzaWdubWVudHNTb3VyY2UkLmxlbmd0aDtcbiAgICAgIHJldHVybiB0aGlzLnRvcFRocmVlQXNzaWdubWVudHModGhpcy5hc3NpZ25tZW50c1NvdXJjZSQpO1xuICAgIH1cbiAgICAvLyB0dXJuIG9mZiB0b2RvbGlzdFxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldENhc2VJbmZvQXNzaWdubWVudChhc3NpZ25tZW50c1NvdXJjZTogYW55W10sIGNhc2VJbmZvSUQ6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBhc3NpZ25tZW50c1NvdXJjZSkge1xuICAgICAgaWYgKHNvdXJjZS5JRC5pbmRleE9mKGNhc2VJbmZvSUQpID49IDApIHtcbiAgICAgICAgY29uc3QgbGlzdFJvdyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc291cmNlKSk7XG4gICAgICAgIC8vIHVyZ2VuY3kgYmVjb21lcyBwcmlvcml0eVxuICAgICAgICBsaXN0Um93LnByaW9yaXR5ID0gbGlzdFJvdy51cmdlbmN5IHx8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gbWltaWMgcmVndWxhciBsaXN0XG4gICAgICAgIGxpc3RSb3cuaWQgPSBsaXN0Um93LklEIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgcmVzdWx0LnB1c2gobGlzdFJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBfc2hvd01vcmUoKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuYlNob3dNb3JlJCA9IGZhbHNlO1xuICAgICAgdGhpcy5hckFzc2lnbm1lbnRzJCA9IHRoaXMuYXNzaWdubWVudHNTb3VyY2UkO1xuICAgIH0pO1xuICB9XG5cbiAgX3Nob3dMZXNzKCkge1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLmJTaG93TW9yZSQgPSB0cnVlO1xuXG4gICAgICB0aGlzLmFyQXNzaWdubWVudHMkID0gdGhpcy50b3BUaHJlZUFzc2lnbm1lbnRzKHRoaXMuYXNzaWdubWVudHNTb3VyY2UkKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQ2hpbGRDYXNlKGFzc2lnbm1lbnQpIHtcbiAgICByZXR1cm4gYXNzaWdubWVudC5pc0NoaWxkO1xuICB9XG5cbiAgY2xpY2tHbyhhc3NpZ25tZW50KSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldEFzc2lnbm1lbnRJZChhc3NpZ25tZW50KTtcbiAgICBsZXQgeyBjbGFzc25hbWUgPSAnJyB9ID0gYXNzaWdubWVudDtcbiAgICBjb25zdCBzVGFyZ2V0ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGFpbmVyTmFtZSgpO1xuICAgIGNvbnN0IHNUYXJnZXRDb250YWluZXJOYW1lID0gc1RhcmdldDtcblxuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHsgY29udGFpbmVyTmFtZTogc1RhcmdldENvbnRhaW5lck5hbWUgfTtcblxuICAgIGlmIChjbGFzc25hbWUgPT09IG51bGwgfHwgY2xhc3NuYW1lID09PSAnJykge1xuICAgICAgY2xhc3NuYW1lID0gdGhpcy5wQ29ubiQuZ2V0Q2FzZUluZm8oKS5nZXRDbGFzc05hbWUoKTtcbiAgICB9XG5cbiAgICBpZiAoc1RhcmdldCA9PT0gJ3dvcmthcmVhJykge1xuICAgICAgb3B0aW9ucy5pc0FjdGlvbkZyb21Ub0RvTGlzdCA9IHRydWU7XG4gICAgICBvcHRpb25zLnRhcmdldCA9ICcnO1xuICAgICAgb3B0aW9ucy5jb250ZXh0ID0gbnVsbDtcbiAgICAgIG9wdGlvbnMuaXNDaGlsZCA9IHRoaXMuaXNDaGlsZENhc2UoYXNzaWdubWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaXNBY3Rpb25Gcm9tVG9Eb0xpc3QgPSBmYWxzZTtcbiAgICAgIG9wdGlvbnMudGFyZ2V0ID0gc1RhcmdldDtcbiAgICB9XG5cbiAgICB0aGlzLnBzU2VydmljZS5zZW5kTWVzc2FnZSh0cnVlKTtcblxuICAgIHRoaXMucENvbm4kXG4gICAgICAuZ2V0QWN0aW9uc0FwaSgpXG4gICAgICAub3BlbkFzc2lnbm1lbnQoaWQsIGNsYXNzbmFtZSwgb3B0aW9ucylcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5wc1NlcnZpY2Uuc2VuZE1lc3NhZ2UoZmFsc2UpO1xuICAgICAgICBpZiAodGhpcy5iTG9nZ2luZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBvcGVuQXNzaWdubWVudCBjb21wbGV0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHRoaXMucHNTZXJ2aWNlLnNlbmRNZXNzYWdlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5lclNlcnZpY2Uuc2VuZE1lc3NhZ2UoJ3Nob3cnLCAnRmFpbGVkIHRvIG9wZW4nKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHNkay10b2RvXCI+XG4gIDxkaXYgY2xhc3M9XCJwc2RrLXRvZG8taGVhZGVyXCI+XG4gICAgPGRpdiAqbmdJZj1cInNob3dUb2RvTGlzdCRcIiBjbGFzcz1cInBzZGstYXZhdGFyXCI+e3sgdGhpcy5jdXJyZW50VXNlckluaXRpYWxzJCB9fTwvZGl2PlxuICAgIDxkaXYgaWQ9XCJ3b3JrbGlzdFwiIGNsYXNzPVwicHNkay10b2RvLXRleHRcIj57eyBoZWFkZXJUZXh0JCB9fTwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzaG93VG9kb0xpc3QkXCIgY2xhc3M9XCJwc2RrLWFzc2lnbm1lbnQtY291bnRcIj57eyBhc3NpZ25tZW50Q291bnQkIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8YnIgLz48YnIgLz5cbiAgPGRpdiAqbmdJZj1cInNob3dUb2RvTGlzdCRcIiBjbGFzcz1cInBzZGstZGlzcGxheS1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBzZGstdG9kby1hc3NpZ25tZW50c1wiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGFzc2lnbm1lbnQgb2YgYXJBc3NpZ25tZW50cyRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXRvZG8tYXNzaWdubWVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXJcIj57eyB0aGlzLmN1cnJlbnRVc2VySW5pdGlhbHMkIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXRvZG8tY2FyZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXRvZG8tYXNzaWdubWVudC10aXRsZVwiPnt7IGdldEFzc2lnbm1lbnROYW1lKGFzc2lnbm1lbnQpIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstdG9kby1hc3NpZ25tZW50LWRhdGFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXRvZG8tYXNzaWdubWVudC10YXNrXCI+XG4gICAgICAgICAgICAgIFRhc2sgaW5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInBzZGstdG9kby1pZFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgKGNsaWNrKT1cImNsaWNrR28oYXNzaWdubWVudClcIj5cbiAgICAgICAgICAgICAgICB7eyBhc3NpZ25tZW50Lm5hbWUgfX0ge3sgZ2V0SUQoYXNzaWdubWVudCkgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYXNzaWdubWVudC5zdGF0dXMgIT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICAgICAgJmJ1bGw7IDxzcGFuIGNsYXNzPVwicHNkay10b2RvLWFzc2lnbm1lbnQtc3RhdHVzXCI+e3sgYXNzaWdubWVudD8uc3RhdHVzIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICZidWxsOyB7eyBsb2NhbGl6ZWRWYWwoJ1VyZ2VuY3knLCBsb2NhbGVDYXRlZ29yeSkgfX0ge3sgZ2V0UHJpb3JpdHkoYXNzaWdubWVudCkgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstdG9kby1hc3NpZ25tZW50LWFjdGlvblwiPlxuICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjbGlja0dvKGFzc2lnbm1lbnQpXCI+e3sgbG9jYWxpemVkVmFsKCdHbycsIGxvY2FsZUNhdGVnb3J5KSB9fTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstZGlzcGxheS1kaXZpZGVyXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJhc3NpZ25tZW50Q291bnQkID4gM1wiPlxuICA8ZGl2ICpuZ0lmPVwiYlNob3dNb3JlJDsgZWxzZSBzaG93TGVzc1wiIGNsYXNzPVwicHNkay10b2RvLXNob3ctbW9yZVwiPlxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJfc2hvd01vcmUoKVwiPlNob3cgbW9yZTwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICNzaG93TGVzcz5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay10b2RvLXNob3ctbW9yZVwiPlxuICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cIl9zaG93TGVzcygpXCI+U2hvdyBsZXNzPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==