ngx-techlify-core 18.31.0 → 18.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/esm2022/lib/audit-log/audit-log-for-model/audit-log-for-model.component.mjs +4 -3
  2. package/esm2022/lib/audit-log/audit-log-for-model/audit-log-for-model.module.mjs +7 -3
  3. package/esm2022/lib/export-excel/export-excel-button/export-excel-button.component.mjs +2 -2
  4. package/esm2022/lib/role/permission/permissions-management.component.mjs +2 -8
  5. package/esm2022/lib/role/role-form.component.mjs +4 -10
  6. package/esm2022/lib/role/role.model.mjs +1 -1
  7. package/esm2022/lib/role/roles-view-all.component.mjs +3 -10
  8. package/esm2022/lib/searchable-selector/searchable-selector.component.mjs +3 -3
  9. package/esm2022/lib/subscription/subscription-package-listing/subscription-package-listing.component.mjs +48 -26
  10. package/esm2022/lib/subscription/subscription-package-listing/subscription-package-listing.module.mjs +8 -4
  11. package/esm2022/lib/subscription/subscription.service.mjs +6 -2
  12. package/esm2022/lib/subscription/techlify-subscription.directive.mjs +11 -10
  13. package/esm2022/lib/techlify-icon/techlify-icon.component.mjs +2 -1
  14. package/esm2022/lib/timeline-filter/timeline-filter.component.mjs +6 -6
  15. package/esm2022/lib/user/user-form.component.mjs +10 -13
  16. package/esm2022/lib/user-selector/user-selector.component.mjs +2 -7
  17. package/fesm2022/ngx-techlify-core.mjs +81 -74
  18. package/fesm2022/ngx-techlify-core.mjs.map +1 -1
  19. package/lib/audit-log/audit-log-for-model/audit-log-for-model.module.d.ts +2 -1
  20. package/lib/role/permission/permissions-management.component.d.ts +0 -1
  21. package/lib/role/role.model.d.ts +0 -2
  22. package/lib/role/roles-view-all.component.d.ts +0 -1
  23. package/lib/subscription/subscription-package-listing/subscription-package-listing.component.d.ts +4 -2
  24. package/lib/subscription/subscription-package-listing/subscription-package-listing.module.d.ts +2 -1
  25. package/lib/subscription/techlify-subscription.directive.d.ts +5 -4
  26. package/lib/timeline-filter/timeline-filter.component.d.ts +1 -1
  27. package/lib/user/user-form.component.d.ts +0 -2
  28. package/lib/user-selector/user-selector.component.d.ts +1 -2
  29. package/package.json +1 -1
  30. package/styles/style.scss +6 -0
@@ -2,8 +2,9 @@ import { Directive, Input } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "./subscription.service";
4
4
  export class TechlifySubscriptionDirective {
5
- constructor(el, subscriptionService) {
6
- this.el = el;
5
+ constructor(templateRef, viewContainer, subscriptionService) {
6
+ this.templateRef = templateRef;
7
+ this.viewContainer = viewContainer;
7
8
  this.subscriptionService = subscriptionService;
8
9
  }
9
10
  ngOnInit() {
@@ -11,22 +12,22 @@ export class TechlifySubscriptionDirective {
11
12
  }
12
13
  checkForSubscriptionsEnabled() {
13
14
  if (this.subscriptionService.isSubscriptionsExists(this.subscriptions)) {
14
- this.el.nativeElement.style.display = "show";
15
+ this.viewContainer.createEmbeddedView(this.templateRef);
15
16
  }
16
17
  else {
17
- this.el.nativeElement.style.display = "none";
18
+ this.viewContainer.clear();
18
19
  }
19
20
  }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TechlifySubscriptionDirective, deps: [{ token: i0.ElementRef }, { token: i1.SubscriptionService }], target: i0.ɵɵFactoryTarget.Directive }); }
21
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TechlifySubscriptionDirective, selector: "[techlifyFeatureEnabled]", inputs: { subscriptions: ["techlifyFeatureEnabled", "subscriptions"] }, ngImport: i0 }); }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TechlifySubscriptionDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.SubscriptionService }], target: i0.ɵɵFactoryTarget.Directive }); }
22
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TechlifySubscriptionDirective, selector: "[ngxHasTechlifySubcription]", inputs: { subscriptions: ["ngxHasTechlifySubcription", "subscriptions"] }, ngImport: i0 }); }
22
23
  }
23
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TechlifySubscriptionDirective, decorators: [{
24
25
  type: Directive,
25
26
  args: [{
26
- selector: '[techlifyFeatureEnabled]'
27
+ selector: '[ngxHasTechlifySubcription]'
27
28
  }]
28
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.SubscriptionService }], propDecorators: { subscriptions: [{
29
+ }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.SubscriptionService }], propDecorators: { subscriptions: [{
29
30
  type: Input,
30
- args: ['techlifyFeatureEnabled']
31
+ args: ['ngxHasTechlifySubcription']
31
32
  }] } });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktc3Vic2NyaXB0aW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvc3Vic2NyaXB0aW9uL3RlY2hsaWZ5LXN1YnNjcmlwdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU03RCxNQUFNLE9BQU8sNkJBQTZCO0lBSXhDLFlBQ1UsRUFBYyxFQUNkLG1CQUF3QztRQUR4QyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2Qsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtJQUVsRCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDdkUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDL0MsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQzsrR0FwQlUsNkJBQTZCO21HQUE3Qiw2QkFBNkI7OzRGQUE3Qiw2QkFBNkI7a0JBSHpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtpQkFDckM7aUhBR2tDLGFBQWE7c0JBQTdDLEtBQUs7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uU2VydmljZSB9IGZyb20gJy4vc3Vic2NyaXB0aW9uLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGVjaGxpZnlGZWF0dXJlRW5hYmxlZF0nXG59KVxuZXhwb3J0IGNsYXNzIFRlY2hsaWZ5U3Vic2NyaXB0aW9uRGlyZWN0aXZlIHtcblxuICBASW5wdXQoJ3RlY2hsaWZ5RmVhdHVyZUVuYWJsZWQnKSBzdWJzY3JpcHRpb25zOiBhbnlbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uU2VydmljZTogU3Vic2NyaXB0aW9uU2VydmljZVxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tGb3JTdWJzY3JpcHRpb25zRW5hYmxlZCgpO1xuICB9XG5cbiAgY2hlY2tGb3JTdWJzY3JpcHRpb25zRW5hYmxlZCgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25TZXJ2aWNlLmlzU3Vic2NyaXB0aW9uc0V4aXN0cyh0aGlzLnN1YnNjcmlwdGlvbnMpKSB7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwic2hvd1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktc3Vic2NyaXB0aW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvc3Vic2NyaXB0aW9uL3RlY2hsaWZ5LXN1YnNjcmlwdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWlDLE1BQU0sZUFBZSxDQUFDOzs7QUFNaEYsTUFBTSxPQUFPLDZCQUE2QjtJQUd4QyxZQUNVLFdBQTZCLEVBQzdCLGFBQStCLEVBQy9CLG1CQUF3QztRQUZ4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7SUFDOUMsQ0FBQztJQUVMLFFBQVE7UUFDTixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsNEJBQTRCO1FBQzFCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQzsrR0FuQlUsNkJBQTZCO21HQUE3Qiw2QkFBNkI7OzRGQUE3Qiw2QkFBNkI7a0JBSHpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtpQkFDeEM7aUpBRXFDLGFBQWE7c0JBQWhELEtBQUs7dUJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICcuL3N1YnNjcmlwdGlvbi5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25neEhhc1RlY2hsaWZ5U3ViY3JpcHRpb25dJ1xufSlcbmV4cG9ydCBjbGFzcyBUZWNobGlmeVN1YnNjcmlwdGlvbkRpcmVjdGl2ZSB7XG4gIEBJbnB1dCgnbmd4SGFzVGVjaGxpZnlTdWJjcmlwdGlvbicpIHN1YnNjcmlwdGlvbnM6IGFueVtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uU2VydmljZTogU3Vic2NyaXB0aW9uU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tGb3JTdWJzY3JpcHRpb25zRW5hYmxlZCgpO1xuICB9XG5cbiAgY2hlY2tGb3JTdWJzY3JpcHRpb25zRW5hYmxlZCgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25TZXJ2aWNlLmlzU3Vic2NyaXB0aW9uc0V4aXN0cyh0aGlzLnN1YnNjcmlwdGlvbnMpKSB7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -17,6 +17,7 @@ export class TechlifyIconComponent {
17
17
  import: 'fas fa-file-import',
18
18
  export: 'fas fa-file-excel',
19
19
  pdf: 'fas fa-file-pdf',
20
+ history: 'fas fa-clock'
20
21
  };
21
22
  // Map size input to CSS classes
22
23
  this.sizeMap = {
@@ -47,4 +48,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
47
48
  }], size: [{
48
49
  type: Input
49
50
  }] } });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RlY2hsaWZ5LWljb24vdGVjaGxpZnktaWNvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RlY2hsaWZ5LWljb24vdGVjaGxpZnktaWNvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQU9qRCxNQUFNLE9BQU8scUJBQXFCO0lBTGxDO1FBTVcsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixTQUFJLEdBQXFDLElBQUksQ0FBQztRQVF2RCxrQkFBa0I7UUFDbEIsbUJBQWMsR0FBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBT3pDLG1DQUFtQztRQUMzQixZQUFPLEdBQTJCO1lBQ3hDLEdBQUcsRUFBRSxhQUFhO1lBQ2xCLElBQUksRUFBRSxZQUFZO1lBQ2xCLElBQUksRUFBRSxZQUFZO1lBQ2xCLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLE1BQU0sRUFBRSxvQkFBb0I7WUFDNUIsTUFBTSxFQUFFLG1CQUFtQjtZQUMzQixHQUFHLEVBQUUsaUJBQWlCO1NBQ3ZCLENBQUM7UUFFRixnQ0FBZ0M7UUFDeEIsWUFBTyxHQUEyQjtZQUN4QyxFQUFFLEVBQUUsT0FBTztZQUNYLEVBQUUsRUFBRSxPQUFPO1lBQ1gsRUFBRSxFQUFFLE9BQU87WUFDWCxFQUFFLEVBQUUsT0FBTztZQUNYLEVBQUUsRUFBRSxPQUFPO1NBQ1osQ0FBQztLQUNIO0lBakNDLElBQUksU0FBUztRQUNYLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDO1FBQ3JFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFLRCw4QkFBOEI7SUFDOUIsWUFBWSxDQUFDLElBQVk7UUFDdkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDOytHQWhCVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixpR0NQbEMsZ1FBUWM7OzRGRERELHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxtQkFBbUI7OEJBS3BCLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10ZWNobGlmeS1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlY2hsaWZ5LWljb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZWNobGlmeS1pY29uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGVjaGxpZnlJY29uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnID0gJ21kJztcblxuICBnZXQgaWNvbkNsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBiYXNlQ2xhc3MgPSB0aGlzLmljb25NYXBbdGhpcy5uYW1lXSB8fCAnZmEgZmEtcXVlc3Rpb24tY2lyY2xlJztcbiAgICBjb25zdCBzaXplQ2xhc3MgPSB0aGlzLnNpemVNYXBbdGhpcy5zaXplXSB8fCAnJztcbiAgICByZXR1cm4gW2Jhc2VDbGFzcywgc2l6ZUNsYXNzXTtcbiAgfVxuXG4gIC8vQ3VzdG9tIGljb24gbGlzdFxuICBjdXN0b21JY29uTGlzdDogc3RyaW5nW10gPSBbJ2JhdGNoLWFkZCddO1xuXG4gIC8vTWV0aG9kIHRvIGNoZWNrIGN1c3RvbSBpY29uc1xuICBpc0N1c3RvbUljb24obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tSWNvbkxpc3QuaW5jbHVkZXMobmFtZSk7XG4gIH1cblxuICAvLyBNYXAgbG9naWNhbCBuYW1lcyB0byBDU1MgY2xhc3Nlc1xuICBwcml2YXRlIGljb25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgYWRkOiAnZmFzIGZhLXBsdXMnLFxuICAgIHZpZXc6ICdmYXMgZmEtZXllJyxcbiAgICBlZGl0OiAnZmFzIGZhLXBlbicsXG4gICAgZGVsZXRlOiAnZmFzIGZhLXRyYXNoJyxcbiAgICBpbXBvcnQ6ICdmYXMgZmEtZmlsZS1pbXBvcnQnLFxuICAgIGV4cG9ydDogJ2ZhcyBmYS1maWxlLWV4Y2VsJyxcbiAgICBwZGY6ICdmYXMgZmEtZmlsZS1wZGYnLFxuICB9O1xuXG4gIC8vIE1hcCBzaXplIGlucHV0IHRvIENTUyBjbGFzc2VzXG4gIHByaXZhdGUgc2l6ZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICB4czogJ2ZhLXhzJyxcbiAgICBzbTogJ2ZhLXNtJyxcbiAgICBtZDogJ2ZhLW1kJyxcbiAgICBsZzogJ2ZhLWxnJyxcbiAgICB4bDogJ2ZhLTJ4J1xuICB9O1xufSIsIjwhLS0gIEN1c3RvbSBpY29uIC0tPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ3VzdG9tSWNvbihuYW1lKTsgZWxzZSBmYUljb25cIj5cbiAgICA8YXBwLWN1c3RvbS1pY29uIFtuYW1lXT1cIm5hbWVcIj48L2FwcC1jdXN0b20taWNvbj5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIEZvbnQgQXdlc29tZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZmFJY29uPlxuICAgIDxpIFtuZ0NsYXNzXT1cImljb25DbGFzc1wiPjwvaT5cbjwvbmctdGVtcGxhdGU+Il19
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RlY2hsaWZ5LWljb24vdGVjaGxpZnktaWNvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RlY2hsaWZ5LWljb24vdGVjaGxpZnktaWNvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQU9qRCxNQUFNLE9BQU8scUJBQXFCO0lBTGxDO1FBTVcsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixTQUFJLEdBQXFDLElBQUksQ0FBQztRQVF2RCxrQkFBa0I7UUFDbEIsbUJBQWMsR0FBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBT3pDLG1DQUFtQztRQUMzQixZQUFPLEdBQTJCO1lBQ3hDLEdBQUcsRUFBRSxhQUFhO1lBQ2xCLElBQUksRUFBRSxZQUFZO1lBQ2xCLElBQUksRUFBRSxZQUFZO1lBQ2xCLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLE1BQU0sRUFBRSxvQkFBb0I7WUFDNUIsTUFBTSxFQUFFLG1CQUFtQjtZQUMzQixHQUFHLEVBQUUsaUJBQWlCO1lBQ3RCLE9BQU8sRUFBRSxjQUFjO1NBQ3hCLENBQUM7UUFFRixnQ0FBZ0M7UUFDeEIsWUFBTyxHQUEyQjtZQUN4QyxFQUFFLEVBQUUsT0FBTztZQUNYLEVBQUUsRUFBRSxPQUFPO1lBQ1gsRUFBRSxFQUFFLE9BQU87WUFDWCxFQUFFLEVBQUUsT0FBTztZQUNYLEVBQUUsRUFBRSxPQUFPO1NBQ1osQ0FBQztLQUNIO0lBbENDLElBQUksU0FBUztRQUNYLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDO1FBQ3JFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFLRCw4QkFBOEI7SUFDOUIsWUFBWSxDQUFDLElBQVk7UUFDdkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDOytHQWhCVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixpR0NQbEMsZ1FBUWM7OzRGRERELHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxtQkFBbUI7OEJBS3BCLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10ZWNobGlmeS1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlY2hsaWZ5LWljb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZWNobGlmeS1pY29uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGVjaGxpZnlJY29uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnID0gJ21kJztcblxuICBnZXQgaWNvbkNsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBiYXNlQ2xhc3MgPSB0aGlzLmljb25NYXBbdGhpcy5uYW1lXSB8fCAnZmEgZmEtcXVlc3Rpb24tY2lyY2xlJztcbiAgICBjb25zdCBzaXplQ2xhc3MgPSB0aGlzLnNpemVNYXBbdGhpcy5zaXplXSB8fCAnJztcbiAgICByZXR1cm4gW2Jhc2VDbGFzcywgc2l6ZUNsYXNzXTtcbiAgfVxuXG4gIC8vQ3VzdG9tIGljb24gbGlzdFxuICBjdXN0b21JY29uTGlzdDogc3RyaW5nW10gPSBbJ2JhdGNoLWFkZCddO1xuXG4gIC8vTWV0aG9kIHRvIGNoZWNrIGN1c3RvbSBpY29uc1xuICBpc0N1c3RvbUljb24obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tSWNvbkxpc3QuaW5jbHVkZXMobmFtZSk7XG4gIH1cblxuICAvLyBNYXAgbG9naWNhbCBuYW1lcyB0byBDU1MgY2xhc3Nlc1xuICBwcml2YXRlIGljb25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgYWRkOiAnZmFzIGZhLXBsdXMnLFxuICAgIHZpZXc6ICdmYXMgZmEtZXllJyxcbiAgICBlZGl0OiAnZmFzIGZhLXBlbicsXG4gICAgZGVsZXRlOiAnZmFzIGZhLXRyYXNoJyxcbiAgICBpbXBvcnQ6ICdmYXMgZmEtZmlsZS1pbXBvcnQnLFxuICAgIGV4cG9ydDogJ2ZhcyBmYS1maWxlLWV4Y2VsJyxcbiAgICBwZGY6ICdmYXMgZmEtZmlsZS1wZGYnLFxuICAgIGhpc3Rvcnk6ICdmYXMgZmEtY2xvY2snXG4gIH07XG5cbiAgLy8gTWFwIHNpemUgaW5wdXQgdG8gQ1NTIGNsYXNzZXNcbiAgcHJpdmF0ZSBzaXplTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHhzOiAnZmEteHMnLFxuICAgIHNtOiAnZmEtc20nLFxuICAgIG1kOiAnZmEtbWQnLFxuICAgIGxnOiAnZmEtbGcnLFxuICAgIHhsOiAnZmEtMngnXG4gIH07XG59IiwiPCEtLSAgQ3VzdG9tIGljb24gLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNDdXN0b21JY29uKG5hbWUpOyBlbHNlIGZhSWNvblwiPlxuICAgIDxhcHAtY3VzdG9tLWljb24gW25hbWVdPVwibmFtZVwiPjwvYXBwLWN1c3RvbS1pY29uPlxuPC9uZy1jb250YWluZXI+XG5cbjwhLS0gRm9udCBBd2Vzb21lIC0tPlxuPG5nLXRlbXBsYXRlICNmYUljb24+XG4gICAgPGkgW25nQ2xhc3NdPVwiaWNvbkNsYXNzXCI+PC9pPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -73,6 +73,9 @@ let TimelineFilterComponent = class TimelineFilterComponent {
73
73
  get timelineValue() {
74
74
  return this.selectorForm.get('select_value');
75
75
  }
76
+ get isCustomSelected() {
77
+ return this.value == Timeline.CUSTOM;
78
+ }
76
79
  get customDateFrom() {
77
80
  return this.selectorForm.get('custom_date_from');
78
81
  }
@@ -111,7 +114,6 @@ let TimelineFilterComponent = class TimelineFilterComponent {
111
114
  this.id = `timeline-filter-${TimelineFilterComponent_1.nextId++}`;
112
115
  this.describedBy = '';
113
116
  this.focused = false;
114
- this.isCustomSelected = false;
115
117
  this._required = false;
116
118
  this._disabled = false;
117
119
  this.onChange = () => { };
@@ -149,7 +151,6 @@ let TimelineFilterComponent = class TimelineFilterComponent {
149
151
  changeTimeline(value) {
150
152
  value = parseInt(value);
151
153
  this.selectedRangeLabel = '';
152
- this.isCustomSelected = false;
153
154
  const timeline = calculateTimeline(value, this.dateFrom, this.dateTo);
154
155
  if (timeline) {
155
156
  this.setCustomDates('', '');
@@ -166,7 +167,6 @@ let TimelineFilterComponent = class TimelineFilterComponent {
166
167
  const from = defaultFrom ?? this.selectorForm.get('custom_date_from')?.value;
167
168
  const to = defaultTo ?? this.selectorForm.get('custom_date_to')?.value;
168
169
  if (from && to) {
169
- this.isCustomSelected = true;
170
170
  this.selectedRangeLabel = `<b>${this.datePipe.transform(from, 'yyyy-MM-dd')}</b>:<b>${this.datePipe.transform(to, 'yyyy-MM-dd')}</b`;
171
171
  this.setFieldValue(this.dateFrom, this.datePipe.transform(from, 'yyyy-MM-dd'));
172
172
  this.setFieldValue(this.dateTo, this.datePipe.transform(to, 'yyyy-MM-dd'));
@@ -210,7 +210,7 @@ let TimelineFilterComponent = class TimelineFilterComponent {
210
210
  provide: MatFormFieldControl,
211
211
  useExisting: TimelineFilterComponent
212
212
  }
213
- ], viewQueries: [{ propertyName: "picker", first: true, predicate: ["picker"], descendants: true }], ngImport: i0, template: "<ng-container [formGroup]=\"selectorForm\">\n <mat-form-field [appearance]=\"appearance\" class=\"fl-sm\">\n <mat-label>{{labelText}}</mat-label>\n <mat-select formControlName=\"select_value\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n <button *ngIf=\"showClearButton && timelineValue.value\" matSuffix mat-icon-button\n (click)=\"timelineValue.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-hint *ngIf=\"isCustomSelected && selectedRangeLabel\" (click)=\"openCalendar()\" class=\"clickable\" fxLayout>\n <span [innerHTML]=\"selectedRangeLabel\" style=\"font-size: 10px;\"></span>\n <app-techlify-icon name=\"edit\" class=\"clickable\" size=\"xs\" style=\"margin-left:2px\"></app-techlify-icon>\n </mat-hint>\n <mat-date-range-input class=\"offscreen-range-input\" [rangePicker]=\"picker\">\n <input matStartDate formControlName=\"custom_date_from\" placeholder=\"From date\" readonly />\n <input matEndDate formControlName=\"custom_date_to\" placeholder=\"To date\" readonly />\n </mat-date-range-input>\n <mat-date-range-picker #picker></mat-date-range-picker>\n </mat-form-field>\n</ng-container>", styles: [".icon-md{height:24px!important;width:24px!important;font-size:24px!important;margin:0 1px}.icon-sm{height:20px!important;width:20px!important;font-size:20px!important}.icon-xs{height:16px!important;width:16px!important;font-size:16px!important}.fl-md{width:200px!important}.fl-md .mat-mdc-form-field{width:100%!important}.fl-sm{width:150px!important}.fl-sm .mat-mdc-form-field{width:100%!important}.mat-btn-md{height:25px!important;padding:0 8px!important}.fs-12{font-size:12px!important}.fs-16{font-size:16px!important}.fs-13{font-size:13px!important}.fs-18{font-size:18px!important}.clickable:hover{cursor:pointer}.mat-mdc-form-field-hint-wrapper{padding:0 4px!important}.offscreen-range-input{position:absolute;opacity:0;pointer-events:none;display:flex!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i9.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i9.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i9.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: i10.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }] }); }
213
+ ], viewQueries: [{ propertyName: "picker", first: true, predicate: ["picker"], descendants: true }], ngImport: i0, template: "<ng-container [formGroup]=\"selectorForm\">\n <mat-form-field [appearance]=\"appearance\" class=\"fl-sm\">\n <mat-label>{{labelText}}</mat-label>\n <mat-select formControlName=\"select_value\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n <button *ngIf=\"showClearButton && timelineValue.value\" matSuffix mat-icon-button\n (click)=\"timelineValue.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-hint *ngIf=\"isCustomSelected && selectedRangeLabel\" (click)=\"openCalendar()\" class=\"clickable\" fxLayout>\n <span [innerHTML]=\"selectedRangeLabel\" style=\"font-size: 10px;\"></span>\n <app-techlify-icon name=\"edit\" class=\"clickable\" size=\"xs\" style=\"margin-left:2px\"></app-techlify-icon>\n </mat-hint>\n <mat-hint *ngIf=\"isCustomSelected && !selectedRangeLabel\" (click)=\"openCalendar()\" class=\"clickable\" fxLayout>\n <span style=\"font-size: 10px;\">Select Range</span>\n <app-techlify-icon name=\"edit\" class=\"clickable\" size=\"xs\" style=\"margin-left:2px\"></app-techlify-icon>\n </mat-hint>\n <mat-date-range-input class=\"offscreen-range-input\" [rangePicker]=\"picker\">\n <input matStartDate formControlName=\"custom_date_from\" placeholder=\"From date\" readonly />\n <input matEndDate formControlName=\"custom_date_to\" placeholder=\"To date\" readonly />\n </mat-date-range-input>\n <mat-date-range-picker #picker></mat-date-range-picker>\n </mat-form-field>\n</ng-container>", styles: [".icon-md{height:24px!important;width:24px!important;font-size:24px!important;margin:0 1px}.icon-sm{height:20px!important;width:20px!important;font-size:20px!important}.icon-xs{height:16px!important;width:16px!important;font-size:16px!important}.fl-md{width:200px!important}.fl-md .mat-mdc-form-field{width:100%!important}.fl-sm{width:150px!important}.fl-sm .mat-mdc-form-field{width:100%!important}.mat-btn-md{height:25px!important;padding:0 8px!important}.fs-12{font-size:12px!important}.fs-16{font-size:16px!important}.fs-13{font-size:13px!important}.fs-18{font-size:18px!important}.clickable:hover{cursor:pointer}.mat-mdc-form-field-hint-wrapper{padding:0 4px!important}.nil-subscript-wrapper .mat-mdc-form-field-subscript-wrapper{height:0!important}.offscreen-range-input{position:absolute;opacity:0;pointer-events:none;display:flex!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i9.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i9.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i9.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: i10.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }] }); }
214
214
  };
215
215
  TimelineFilterComponent = TimelineFilterComponent_1 = __decorate([
216
216
  UntilDestroy()
@@ -224,7 +224,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
224
224
  provide: MatFormFieldControl,
225
225
  useExisting: TimelineFilterComponent
226
226
  }
227
- ], template: "<ng-container [formGroup]=\"selectorForm\">\n <mat-form-field [appearance]=\"appearance\" class=\"fl-sm\">\n <mat-label>{{labelText}}</mat-label>\n <mat-select formControlName=\"select_value\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n <button *ngIf=\"showClearButton && timelineValue.value\" matSuffix mat-icon-button\n (click)=\"timelineValue.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-hint *ngIf=\"isCustomSelected && selectedRangeLabel\" (click)=\"openCalendar()\" class=\"clickable\" fxLayout>\n <span [innerHTML]=\"selectedRangeLabel\" style=\"font-size: 10px;\"></span>\n <app-techlify-icon name=\"edit\" class=\"clickable\" size=\"xs\" style=\"margin-left:2px\"></app-techlify-icon>\n </mat-hint>\n <mat-date-range-input class=\"offscreen-range-input\" [rangePicker]=\"picker\">\n <input matStartDate formControlName=\"custom_date_from\" placeholder=\"From date\" readonly />\n <input matEndDate formControlName=\"custom_date_to\" placeholder=\"To date\" readonly />\n </mat-date-range-input>\n <mat-date-range-picker #picker></mat-date-range-picker>\n </mat-form-field>\n</ng-container>", styles: [".icon-md{height:24px!important;width:24px!important;font-size:24px!important;margin:0 1px}.icon-sm{height:20px!important;width:20px!important;font-size:20px!important}.icon-xs{height:16px!important;width:16px!important;font-size:16px!important}.fl-md{width:200px!important}.fl-md .mat-mdc-form-field{width:100%!important}.fl-sm{width:150px!important}.fl-sm .mat-mdc-form-field{width:100%!important}.mat-btn-md{height:25px!important;padding:0 8px!important}.fs-12{font-size:12px!important}.fs-16{font-size:16px!important}.fs-13{font-size:13px!important}.fs-18{font-size:18px!important}.clickable:hover{cursor:pointer}.mat-mdc-form-field-hint-wrapper{padding:0 4px!important}.offscreen-range-input{position:absolute;opacity:0;pointer-events:none;display:flex!important}\n"] }]
227
+ ], template: "<ng-container [formGroup]=\"selectorForm\">\n <mat-form-field [appearance]=\"appearance\" class=\"fl-sm\">\n <mat-label>{{labelText}}</mat-label>\n <mat-select formControlName=\"select_value\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n <button *ngIf=\"showClearButton && timelineValue.value\" matSuffix mat-icon-button\n (click)=\"timelineValue.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-hint *ngIf=\"isCustomSelected && selectedRangeLabel\" (click)=\"openCalendar()\" class=\"clickable\" fxLayout>\n <span [innerHTML]=\"selectedRangeLabel\" style=\"font-size: 10px;\"></span>\n <app-techlify-icon name=\"edit\" class=\"clickable\" size=\"xs\" style=\"margin-left:2px\"></app-techlify-icon>\n </mat-hint>\n <mat-hint *ngIf=\"isCustomSelected && !selectedRangeLabel\" (click)=\"openCalendar()\" class=\"clickable\" fxLayout>\n <span style=\"font-size: 10px;\">Select Range</span>\n <app-techlify-icon name=\"edit\" class=\"clickable\" size=\"xs\" style=\"margin-left:2px\"></app-techlify-icon>\n </mat-hint>\n <mat-date-range-input class=\"offscreen-range-input\" [rangePicker]=\"picker\">\n <input matStartDate formControlName=\"custom_date_from\" placeholder=\"From date\" readonly />\n <input matEndDate formControlName=\"custom_date_to\" placeholder=\"To date\" readonly />\n </mat-date-range-input>\n <mat-date-range-picker #picker></mat-date-range-picker>\n </mat-form-field>\n</ng-container>", styles: [".icon-md{height:24px!important;width:24px!important;font-size:24px!important;margin:0 1px}.icon-sm{height:20px!important;width:20px!important;font-size:20px!important}.icon-xs{height:16px!important;width:16px!important;font-size:16px!important}.fl-md{width:200px!important}.fl-md .mat-mdc-form-field{width:100%!important}.fl-sm{width:150px!important}.fl-sm .mat-mdc-form-field{width:100%!important}.mat-btn-md{height:25px!important;padding:0 8px!important}.fs-12{font-size:12px!important}.fs-16{font-size:16px!important}.fs-13{font-size:13px!important}.fs-18{font-size:18px!important}.clickable:hover{cursor:pointer}.mat-mdc-form-field-hint-wrapper{padding:0 4px!important}.nil-subscript-wrapper .mat-mdc-form-field-subscript-wrapper{height:0!important}.offscreen-range-input{position:absolute;opacity:0;pointer-events:none;display:flex!important}\n"] }]
228
228
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i1.NgControl, decorators: [{
229
229
  type: Optional
230
230
  }, {
@@ -257,4 +257,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
257
257
  }], selectionChange: [{
258
258
  type: Output
259
259
  }] } });
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdGltZWxpbmUtZmlsdGVyL3RpbWVsaW5lLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RpbWVsaW5lLWZpbHRlci90aW1lbGluZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBMEI7QUFDMUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBS0wsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7QUFlcEMsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBdUI7O0lBR2xDLElBQWEsWUFBWSxDQUFDLEtBQVU7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Ozs0RkFoT1ksdUJBQXVCO2tCQVpuQyxTQUFTOytCQUNFLHFCQUFxQixhQUdwQjt3QkFDVCxRQUFRO3dCQUNSOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcseUJBQXlCO3lCQUNyQztxQkFDRjs7MEJBaUhFLFFBQVE7OzBCQUFJLElBQUk7Z0VBNUdOLFlBQVk7c0JBQXhCLEtBQUs7Z0JBWUYsUUFBUTtzQkFEWCxLQUFLO2dCQVNGLFFBQVE7c0JBRFgsS0FBSztnQkFTRixLQUFLO3NCQURSLEtBQUs7Z0JBMEJlLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDVixTQUFTO3NCQUFqQixLQUFLO2dCQWlCRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRzbGludDpkaXNhYmxlOnJhZGl4ICovXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFNlbGYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcbiAgVW50eXBlZEZvcm1Hcm91cCxcbiAgTmdDb250cm9sLFxuICBWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgY2FsY3VsYXRlVGltZWxpbmUgfSBmcm9tICcuL2NhbGN1bGF0ZS10aW1lbGluZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGltZWxpbmUgfSBmcm9tICcuL3RpbWVsaW5lLm1vZGVsJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdGltZWxpbmUtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWVsaW5lLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RpbWVsaW5lLWZpbHRlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBEYXRlUGlwZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLFxuICAgICAgdXNlRXhpc3Rpbmc6IFRpbWVsaW5lRmlsdGVyQ29tcG9uZW50XG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVsaW5lRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIGlzSW5pdGlhbGlzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDdXN0b21EYXRlUGF0Y2hpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNldCBkZWZhdWx0VmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBlbXB0eSgpIHtcbiAgICBjb25zdCB7IHZhbHVlOiB7IHNlbGVjdF92YWx1ZSB9IH0gPSB0aGlzLnNlbGVjdG9yRm9ybTtcbiAgICByZXR1cm4gIXNlbGVjdF92YWx1ZTtcbiAgfVxuXG4gIGdldCBzaG91bGRMYWJlbEZsb2F0KCkgeyByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5OyB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7IH1cbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZWxlY3RvckZvcm0/LmdldCgnc2VsZWN0X3ZhbHVlJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2Rpc2FibGVkOyB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9kaXNhYmxlZCA/IHRoaXMuc2VsZWN0b3JGb3JtLmRpc2FibGUoKSA6IHRoaXMuc2VsZWN0b3JGb3JtLmVuYWJsZSgpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIGlmICh0aGlzLnNlbGVjdG9yRm9ybS52YWxpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JGb3JtLnZhbHVlLnNlbGVjdF92YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHNldCB2YWx1ZShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdG9yRm9ybS5wYXRjaFZhbHVlKHsgc2VsZWN0X3ZhbHVlOiBwYXJzZUludChkYXRhKSB8fCAnJyB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIC8vSWYgdGhlIHNlbGVjdGlvbiBpcyBjdXN0b20sIHZhbGlkYXRlIGlmIGRhdGUgaXMgc2VsZWN0ZWRcbiAgICBpZiAodGhpcy52YWx1ZSA9PSBUaW1lbGluZS5DVVNUT00pIHtcbiAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGlzZWQpIHtcbiAgICAgICAgLy9JZiBpbml0aWFsaXNlZCBhbHJlYWR5LCBvcGVuIHRoZSBjYWxlbmRhclxuICAgICAgICB0aGlzLm9wZW5DYWxlbmRhcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9BcHBseSBkZWZhdWx0IHJhbmdlcyBmcm9tIGZvcm0gaWYgZXhpc3RcbiAgICAgICAgdGhpcy5hcHBseVJhbmdlKCh0aGlzLmdldEZpZWxkVmFsdWUodGhpcy5kYXRlRnJvbSkgPz8gbnVsbCksICh0aGlzLmdldEZpZWxkVmFsdWUodGhpcy5kYXRlVG8pID8/IG51bGwpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGFuZ2VUaW1lbGluZShwYXJzZUludChkYXRhKSB8fCAnJyk7XG4gICAgfVxuICAgIHRoaXMuaXNJbml0aWFsaXNlZCA9IHRydWU7XG4gIH1cbiAgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgQFZpZXdDaGlsZCgncGlja2VyJykgcGlja2VyOiBNYXREYXRlcGlja2VyPGFueT47XG4gIEBJbnB1dCgpIHRpbWVsaW5lczogYW55W10gPSBbXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuQ1VTVE9NLCB2aWV3VmFsdWU6ICdDdXN0b20nIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuVE9EQVksIHZpZXdWYWx1ZTogJ1RvZGF5JyB9LFxuICAgIHsgdmFsdWU6IFRpbWVsaW5lLllFU1RFUkRBWSwgdmlld1ZhbHVlOiAnWWVzdGVyZGF5JyB9LFxuICAgIHsgdmFsdWU6IFRpbWVsaW5lLlRPTU1PUk9XLCB2aWV3VmFsdWU6ICdUb21vcnJvdycgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5USElTX1dFRUssIHZpZXdWYWx1ZTogJ1RoaXMgV2VlaycgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5MQVNUX1dFRUssIHZpZXdWYWx1ZTogJ0xhc3QgV2VlaycgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5ORVhUX1dFRUssIHZpZXdWYWx1ZTogJ05leHQgV2VlaycgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5USElTX01PTlRILCB2aWV3VmFsdWU6ICdUaGlzIE1vbnRoJyB9LFxuICAgIHsgdmFsdWU6IFRpbWVsaW5lLkxBU1RfTU9OVEgsIHZpZXdWYWx1ZTogJ0xhc3QgTW9udGgnIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuTkVYVF9NT05USCwgdmlld1ZhbHVlOiAnTmV4dCBNb250aCcgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5USElTX1FVQVJURVIsIHZpZXdWYWx1ZTogJ1RoaXMgUXVhcnRlcicgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5MQVNUX1FVQVJURVIsIHZpZXdWYWx1ZTogJ0xhc3QgUXVhcnRlcicgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5USElTX1lFQVIsIHZpZXdWYWx1ZTogJ1RoaXMgWWVhcicgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5MQVNUX1lFQVIsIHZpZXdWYWx1ZTogJ0xhc3QgWWVhcicgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5BTEwsIHZpZXdWYWx1ZTogJ0FsbCBkYXRlcycgfSxcbiAgXTtcbiAgQElucHV0KCkgZGF0ZUZyb20gPSAnZGF0ZV9mcm9tJztcbiAgQElucHV0KCkgZGF0ZVRvID0gJ2RhdGVfdG8nO1xuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBhbnkgPSAnZmlsbCc7XG4gIEBJbnB1dCgpIHNob3dDbGVhckJ1dHRvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBASW5wdXQoKSBsYWJlbFRleHQgPSAnU2VsZWN0IFRpbWVsaW5lJztcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBzZWxlY3RvckZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbnRyb2xUeXBlID0gJ3RpbWVsaW5lLWZpbHRlcic7XG4gIGlkID0gYHRpbWVsaW5lLWZpbHRlci0ke1RpbWVsaW5lRmlsdGVyQ29tcG9uZW50Lm5leHRJZCsrfWA7XG4gIGRlc2NyaWJlZEJ5ID0gJyc7XG4gIGZvY3VzZWQgPSBmYWxzZTtcbiAgaXNDdXN0b21TZWxlY3RlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcblxuICAvL0N1c3RvbSByYW5nZVxuICBzZWxlY3RlZFJhbmdlTGFiZWwgPSAnJztcblxuICBnZXQgdGltZWxpbmVWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdzZWxlY3RfdmFsdWUnKTtcbiAgfVxuXG4gIGdldCBjdXN0b21EYXRlRnJvbSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdjdXN0b21fZGF0ZV9mcm9tJyk7XG4gIH1cblxuICBnZXQgY3VzdG9tRGF0ZVRvKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ2N1c3RvbV9kYXRlX3RvJyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICApIHtcbiAgICB0aGlzLnNlbGVjdG9yRm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHNlbGVjdF92YWx1ZTogWycnXSxcbiAgICAgIGN1c3RvbV9kYXRlX2Zyb206IFsnJ10sXG4gICAgICBjdXN0b21fZGF0ZV90bzogWycnXSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVsaW5lVmFsdWUudmFsdWVDaGFuZ2VzLlxuICAgICAgcGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnZhbHVlID0gdmFsdWUpO1xuXG4gICAgLy9MaXN0ZW4gb25seSB0byBjdXN0b20gZGF0ZSB0bywgc2luY2UgaXQgaXMgcmFuZ2Ugc2VsZWN0b3IgaXQgYWx3YXlzIHNhZmUgdG8gbGlzdGVuIGRhdGUgdG9cbiAgICB0aGlzLmN1c3RvbURhdGVUby52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICkuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICBpZiAodmFsICYmICF0aGlzLmlzQ3VzdG9tRGF0ZVBhdGNoaW5nKSB7XG4gICAgICAgIHRoaXMuYXBwbHlSYW5nZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRGaWVsZFZhbHVlKGZpZWxkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZvcm0/LmdldChmaWVsZCk/LnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIGdldEZpZWxkVmFsdWUoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm0/LmdldChmaWVsZCk/LnZhbHVlO1xuICB9XG5cbiAgc2V0RmllbGRWYWx1ZShmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55LCBlbWl0RXZlbnQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5mb3JtPy5nZXQoZmllbGQpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGVtaXRFdmVudCB9KTtcbiAgfVxuXG4gIGNoYW5nZVRpbWVsaW5lKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICB0aGlzLnNlbGVjdGVkUmFuZ2VMYWJlbCA9ICcnO1xuICAgIHRoaXMuaXNDdXN0b21TZWxlY3RlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHRpbWVsaW5lID0gY2FsY3VsYXRlVGltZWxpbmUodmFsdWUsIHRoaXMuZGF0ZUZyb20sIHRoaXMuZGF0ZVRvKTtcbiAgICBpZiAodGltZWxpbmUpIHtcbiAgICAgIHRoaXMuc2V0Q3VzdG9tRGF0ZXMoJycsICcnKTtcbiAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZSh0aGlzLmRhdGVGcm9tLCB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aW1lbGluZS5kYXRlX2Zyb20sICd5eXl5LU1NLWRkJykpO1xuICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKHRoaXMuZGF0ZVRvLCB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aW1lbGluZS5kYXRlX3RvLCAneXl5eS1NTS1kZCcpKTtcbiAgICB9XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRpbWVsaW5lKTtcbiAgfVxuXG4gIG9wZW5DYWxlbmRhcigpIHtcbiAgICB0aGlzLnBpY2tlci5vcGVuKCk7XG4gIH1cblxuICBhcHBseVJhbmdlKGRlZmF1bHRGcm9tPzogYW55LCBkZWZhdWx0VG8/OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmcm9tID0gZGVmYXVsdEZyb20gPz8gdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdjdXN0b21fZGF0ZV9mcm9tJyk/LnZhbHVlO1xuICAgIGNvbnN0IHRvID0gZGVmYXVsdFRvID8/IHRoaXMuc2VsZWN0b3JGb3JtLmdldCgnY3VzdG9tX2RhdGVfdG8nKT8udmFsdWU7XG4gICAgaWYgKGZyb20gJiYgdG8pIHtcbiAgICAgIHRoaXMuaXNDdXN0b21TZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VMYWJlbCA9IGA8Yj4ke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZyb20sICd5eXl5LU1NLWRkJyl9PC9iPjo8Yj4ke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRvLCAneXl5eS1NTS1kZCcpfTwvYmA7XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUodGhpcy5kYXRlRnJvbSwgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZnJvbSwgJ3l5eXktTU0tZGQnKSk7XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUodGhpcy5kYXRlVG8sIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRvLCAneXl5eS1NTS1kZCcpKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5zZXRDdXN0b21EYXRlcyhmcm9tLCB0byk7XG4gICAgfVxuICB9XG5cbiAgc2V0Q3VzdG9tRGF0ZXMoZnJvbTogYW55LCB0bzogYW55KSB7XG4gICAgLy8gdXBkYXRlIGZvcm0gZmllbGRzIHNpbGVudGx5XG4gICAgdGhpcy5pc0N1c3RvbURhdGVQYXRjaGluZyA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdjdXN0b21fZGF0ZV9mcm9tJyk/LnNldFZhbHVlKGZyb20sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ2N1c3RvbV9kYXRlX3RvJyk/LnNldFZhbHVlKHRvLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5pc0N1c3RvbURhdGVQYXRjaGluZyA9IGZhbHNlO1xuICB9XG5cbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xuICB9XG5cbiAgb25Db250YWluZXJDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gZGF0YTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJzZWxlY3RvckZvcm1cIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiIGNsYXNzPVwiZmwtc21cIj5cbiAgICAgICAgPG1hdC1sYWJlbD57e2xhYmVsVGV4dH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNlbGVjdF92YWx1ZVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHRpbWVsaW5lIG9mIHRpbWVsaW5lc1wiIFt2YWx1ZV09XCJ0aW1lbGluZS52YWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7dGltZWxpbmUudmlld1ZhbHVlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0NsZWFyQnV0dG9uICYmIHRpbWVsaW5lVmFsdWUudmFsdWVcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwidGltZWxpbmVWYWx1ZS5zZXRWYWx1ZSgnJylcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJpc0N1c3RvbVNlbGVjdGVkICYmIHNlbGVjdGVkUmFuZ2VMYWJlbFwiIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiIGNsYXNzPVwiY2xpY2thYmxlXCIgZnhMYXlvdXQ+XG4gICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cInNlbGVjdGVkUmFuZ2VMYWJlbFwiIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4O1wiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxhcHAtdGVjaGxpZnktaWNvbiBuYW1lPVwiZWRpdFwiIGNsYXNzPVwiY2xpY2thYmxlXCIgc2l6ZT1cInhzXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDoycHhcIj48L2FwcC10ZWNobGlmeS1pY29uPlxuICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgY2xhc3M9XCJvZmZzY3JlZW4tcmFuZ2UtaW5wdXRcIiBbcmFuZ2VQaWNrZXJdPVwicGlja2VyXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cImN1c3RvbV9kYXRlX2Zyb21cIiBwbGFjZWhvbGRlcj1cIkZyb20gZGF0ZVwiIHJlYWRvbmx5IC8+XG4gICAgICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJjdXN0b21fZGF0ZV90b1wiIHBsYWNlaG9sZGVyPVwiVG8gZGF0ZVwiIHJlYWRvbmx5IC8+XG4gICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy1jb250YWluZXI+Il19
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdGltZWxpbmUtZmlsdGVyL3RpbWVsaW5lLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RpbWVsaW5lLWZpbHRlci90aW1lbGluZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBMEI7QUFDMUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBS0wsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7QUFlcEMsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBdUI7O0lBR2xDLElBQWEsWUFBWSxDQUFDLEtBQVU7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UzsrQkFDRSxxQkFBcUIsYUFHcEI7d0JBQ1QsUUFBUTt3QkFDUjs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLHlCQUF5Qjt5QkFDckM7cUJBQ0Y7OzBCQW9IRSxRQUFROzswQkFBSSxJQUFJO2dFQS9HTixZQUFZO3NCQUF4QixLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkFTRixRQUFRO3NCQURYLEtBQUs7Z0JBU0YsS0FBSztzQkFEUixLQUFLO2dCQTBCZSxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ1YsU0FBUztzQkFBakIsS0FBSztnQkFpQkcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiB0c2xpbnQ6ZGlzYWJsZTpyYWRpeCAqL1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBTZWxmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gIFVudHlwZWRGb3JtR3JvdXAsXG4gIE5nQ29udHJvbCxcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IGNhbGN1bGF0ZVRpbWVsaW5lIH0gZnJvbSAnLi9jYWxjdWxhdGUtdGltZWxpbmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRpbWVsaW5lIH0gZnJvbSAnLi90aW1lbGluZS5tb2RlbCc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRpbWVsaW5lLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90aW1lbGluZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aW1lbGluZS1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRGF0ZVBpcGUsXG4gICAge1xuICAgICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcbiAgICAgIHVzZUV4aXN0aW5nOiBUaW1lbGluZUZpbHRlckNvbXBvbmVudFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lbGluZUZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBpc0luaXRpYWxpc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQ3VzdG9tRGF0ZVBhdGNoaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBzZXQgZGVmYXVsdFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZW1wdHkoKSB7XG4gICAgY29uc3QgeyB2YWx1ZTogeyBzZWxlY3RfdmFsdWUgfSB9ID0gdGhpcy5zZWxlY3RvckZvcm07XG4gICAgcmV0dXJuICFzZWxlY3RfdmFsdWU7XG4gIH1cblxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpIHsgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTsgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3JlcXVpcmVkOyB9XG4gIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2VsZWN0b3JGb3JtPy5nZXQoJ3NlbGVjdF92YWx1ZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kaXNhYmxlZDsgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnNlbGVjdG9yRm9ybS5kaXNhYmxlKCkgOiB0aGlzLnNlbGVjdG9yRm9ybS5lbmFibGUoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5zZWxlY3RvckZvcm0udmFsaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yRm9ybS52YWx1ZS5zZWxlY3RfdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuICBzZXQgdmFsdWUoZGF0YTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RvckZvcm0ucGF0Y2hWYWx1ZSh7IHNlbGVjdF92YWx1ZTogcGFyc2VJbnQoZGF0YSkgfHwgJycgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICAvL0lmIHRoZSBzZWxlY3Rpb24gaXMgY3VzdG9tLCB2YWxpZGF0ZSBpZiBkYXRlIGlzIHNlbGVjdGVkXG4gICAgaWYgKHRoaXMudmFsdWUgPT0gVGltZWxpbmUuQ1VTVE9NKSB7XG4gICAgICBpZiAodGhpcy5pc0luaXRpYWxpc2VkKSB7XG4gICAgICAgIC8vSWYgaW5pdGlhbGlzZWQgYWxyZWFkeSwgb3BlbiB0aGUgY2FsZW5kYXJcbiAgICAgICAgdGhpcy5vcGVuQ2FsZW5kYXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vQXBwbHkgZGVmYXVsdCByYW5nZXMgZnJvbSBmb3JtIGlmIGV4aXN0XG4gICAgICAgIHRoaXMuYXBwbHlSYW5nZSgodGhpcy5nZXRGaWVsZFZhbHVlKHRoaXMuZGF0ZUZyb20pID8/IG51bGwpLCAodGhpcy5nZXRGaWVsZFZhbHVlKHRoaXMuZGF0ZVRvKSA/PyBudWxsKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhbmdlVGltZWxpbmUocGFyc2VJbnQoZGF0YSkgfHwgJycpO1xuICAgIH1cbiAgICB0aGlzLmlzSW5pdGlhbGlzZWQgPSB0cnVlO1xuICB9XG4gIHN0YXRpYyBuZXh0SWQgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoJ3BpY2tlcicpIHBpY2tlcjogTWF0RGF0ZXBpY2tlcjxhbnk+O1xuICBASW5wdXQoKSB0aW1lbGluZXM6IGFueVtdID0gW1xuICAgIHsgdmFsdWU6IFRpbWVsaW5lLkNVU1RPTSwgdmlld1ZhbHVlOiAnQ3VzdG9tJyB9LFxuICAgIHsgdmFsdWU6IFRpbWVsaW5lLlRPREFZLCB2aWV3VmFsdWU6ICdUb2RheScgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5ZRVNURVJEQVksIHZpZXdWYWx1ZTogJ1llc3RlcmRheScgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5UT01NT1JPVywgdmlld1ZhbHVlOiAnVG9tb3Jyb3cnIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuVEhJU19XRUVLLCB2aWV3VmFsdWU6ICdUaGlzIFdlZWsnIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuTEFTVF9XRUVLLCB2aWV3VmFsdWU6ICdMYXN0IFdlZWsnIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuTkVYVF9XRUVLLCB2aWV3VmFsdWU6ICdOZXh0IFdlZWsnIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuVEhJU19NT05USCwgdmlld1ZhbHVlOiAnVGhpcyBNb250aCcgfSxcbiAgICB7IHZhbHVlOiBUaW1lbGluZS5MQVNUX01PTlRILCB2aWV3VmFsdWU6ICdMYXN0IE1vbnRoJyB9LFxuICAgIHsgdmFsdWU6IFRpbWVsaW5lLk5FWFRfTU9OVEgsIHZpZXdWYWx1ZTogJ05leHQgTW9udGgnIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuVEhJU19RVUFSVEVSLCB2aWV3VmFsdWU6ICdUaGlzIFF1YXJ0ZXInIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuTEFTVF9RVUFSVEVSLCB2aWV3VmFsdWU6ICdMYXN0IFF1YXJ0ZXInIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuVEhJU19ZRUFSLCB2aWV3VmFsdWU6ICdUaGlzIFllYXInIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuTEFTVF9ZRUFSLCB2aWV3VmFsdWU6ICdMYXN0IFllYXInIH0sXG4gICAgeyB2YWx1ZTogVGltZWxpbmUuQUxMLCB2aWV3VmFsdWU6ICdBbGwgZGF0ZXMnIH0sXG4gIF07XG4gIEBJbnB1dCgpIGRhdGVGcm9tID0gJ2RhdGVfZnJvbSc7XG4gIEBJbnB1dCgpIGRhdGVUbyA9ICdkYXRlX3RvJztcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogYW55ID0gJ2ZpbGwnO1xuICBASW5wdXQoKSBzaG93Q2xlYXJCdXR0b24gPSBmYWxzZTtcbiAgQElucHV0KCkgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgQElucHV0KCkgbGFiZWxUZXh0ID0gJ1NlbGVjdCBUaW1lbGluZSc7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgc2VsZWN0b3JGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBjb250cm9sVHlwZSA9ICd0aW1lbGluZS1maWx0ZXInO1xuICBpZCA9IGB0aW1lbGluZS1maWx0ZXItJHtUaW1lbGluZUZpbHRlckNvbXBvbmVudC5uZXh0SWQrK31gO1xuICBkZXNjcmliZWRCeSA9ICcnO1xuICBmb2N1c2VkID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuXG4gIC8vQ3VzdG9tIHJhbmdlXG4gIHNlbGVjdGVkUmFuZ2VMYWJlbCA9ICcnO1xuXG4gIGdldCB0aW1lbGluZVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ3NlbGVjdF92YWx1ZScpO1xuICB9XG5cbiAgZ2V0IGlzQ3VzdG9tU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT0gVGltZWxpbmUuQ1VTVE9NO1xuICB9XG5cbiAgZ2V0IGN1c3RvbURhdGVGcm9tKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ2N1c3RvbV9kYXRlX2Zyb20nKTtcbiAgfVxuXG4gIGdldCBjdXN0b21EYXRlVG8oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JGb3JtLmdldCgnY3VzdG9tX2RhdGVfdG8nKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICkge1xuICAgIHRoaXMuc2VsZWN0b3JGb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgc2VsZWN0X3ZhbHVlOiBbJyddLFxuICAgICAgY3VzdG9tX2RhdGVfZnJvbTogWycnXSxcbiAgICAgIGN1c3RvbV9kYXRlX3RvOiBbJyddLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudGltZWxpbmVWYWx1ZS52YWx1ZUNoYW5nZXMuXG4gICAgICBwaXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICkuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudmFsdWUgPSB2YWx1ZSk7XG5cbiAgICAvL0xpc3RlbiBvbmx5IHRvIGN1c3RvbSBkYXRlIHRvLCBzaW5jZSBpdCBpcyByYW5nZSBzZWxlY3RvciBpdCBhbHdheXMgc2FmZSB0byBsaXN0ZW4gZGF0ZSB0b1xuICAgIHRoaXMuY3VzdG9tRGF0ZVRvLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgKS5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgIGlmICh2YWwgJiYgIXRoaXMuaXNDdXN0b21EYXRlUGF0Y2hpbmcpIHtcbiAgICAgICAgdGhpcy5hcHBseVJhbmdlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXNldEZpZWxkVmFsdWUoZmllbGQ6IHN0cmluZykge1xuICAgIHRoaXMuZm9ybT8uZ2V0KGZpZWxkKT8uc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgZ2V0RmllbGRWYWx1ZShmaWVsZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybT8uZ2V0KGZpZWxkKT8udmFsdWU7XG4gIH1cblxuICBzZXRGaWVsZFZhbHVlKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnksIGVtaXRFdmVudDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLmZvcm0/LmdldChmaWVsZCk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZW1pdEV2ZW50IH0pO1xuICB9XG5cbiAgY2hhbmdlVGltZWxpbmUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0ZWRSYW5nZUxhYmVsID0gJyc7XG4gICAgY29uc3QgdGltZWxpbmUgPSBjYWxjdWxhdGVUaW1lbGluZSh2YWx1ZSwgdGhpcy5kYXRlRnJvbSwgdGhpcy5kYXRlVG8pO1xuICAgIGlmICh0aW1lbGluZSkge1xuICAgICAgdGhpcy5zZXRDdXN0b21EYXRlcygnJywgJycpO1xuICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKHRoaXMuZGF0ZUZyb20sIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRpbWVsaW5lLmRhdGVfZnJvbSwgJ3l5eXktTU0tZGQnKSk7XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUodGhpcy5kYXRlVG8sIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRpbWVsaW5lLmRhdGVfdG8sICd5eXl5LU1NLWRkJykpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGltZWxpbmUpO1xuICB9XG5cbiAgb3BlbkNhbGVuZGFyKCkge1xuICAgIHRoaXMucGlja2VyLm9wZW4oKTtcbiAgfVxuXG4gIGFwcGx5UmFuZ2UoZGVmYXVsdEZyb20/OiBhbnksIGRlZmF1bHRUbz86IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZyb20gPSBkZWZhdWx0RnJvbSA/PyB0aGlzLnNlbGVjdG9yRm9ybS5nZXQoJ2N1c3RvbV9kYXRlX2Zyb20nKT8udmFsdWU7XG4gICAgY29uc3QgdG8gPSBkZWZhdWx0VG8gPz8gdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdjdXN0b21fZGF0ZV90bycpPy52YWx1ZTtcbiAgICBpZiAoZnJvbSAmJiB0bykge1xuICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlTGFiZWwgPSBgPGI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmcm9tLCAneXl5eS1NTS1kZCcpfTwvYj46PGI+JHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0bywgJ3l5eXktTU0tZGQnKX08L2JgO1xuICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKHRoaXMuZGF0ZUZyb20sIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZyb20sICd5eXl5LU1NLWRkJykpO1xuICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKHRoaXMuZGF0ZVRvLCB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0bywgJ3l5eXktTU0tZGQnKSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuc2V0Q3VzdG9tRGF0ZXMoZnJvbSwgdG8pO1xuICAgIH1cbiAgfVxuXG4gIHNldEN1c3RvbURhdGVzKGZyb206IGFueSwgdG86IGFueSkge1xuICAgIC8vIHVwZGF0ZSBmb3JtIGZpZWxkcyBzaWxlbnRseVxuICAgIHRoaXMuaXNDdXN0b21EYXRlUGF0Y2hpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0b3JGb3JtLmdldCgnY3VzdG9tX2RhdGVfZnJvbScpPy5zZXRWYWx1ZShmcm9tLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5zZWxlY3RvckZvcm0uZ2V0KCdjdXN0b21fZGF0ZV90bycpPy5zZXRWYWx1ZSh0bywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuaXNDdXN0b21EYXRlUGF0Y2hpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIG9uQ29udGFpbmVyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUoZGF0YTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IGRhdGE7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgfVxuXG59XG4iLCI8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwic2VsZWN0b3JGb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIiBjbGFzcz1cImZsLXNtXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3tsYWJlbFRleHR9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RfdmFsdWVcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB0aW1lbGluZSBvZiB0aW1lbGluZXNcIiBbdmFsdWVdPVwidGltZWxpbmUudmFsdWVcIj5cbiAgICAgICAgICAgICAgICB7e3RpbWVsaW5lLnZpZXdWYWx1ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dDbGVhckJ1dHRvbiAmJiB0aW1lbGluZVZhbHVlLnZhbHVlXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInRpbWVsaW5lVmFsdWUuc2V0VmFsdWUoJycpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwiaXNDdXN0b21TZWxlY3RlZCAmJiBzZWxlY3RlZFJhbmdlTGFiZWxcIiAoY2xpY2spPVwib3BlbkNhbGVuZGFyKClcIiBjbGFzcz1cImNsaWNrYWJsZVwiIGZ4TGF5b3V0PlxuICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJzZWxlY3RlZFJhbmdlTGFiZWxcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTBweDtcIj48L3NwYW4+XG4gICAgICAgICAgICA8YXBwLXRlY2hsaWZ5LWljb24gbmFtZT1cImVkaXRcIiBjbGFzcz1cImNsaWNrYWJsZVwiIHNpemU9XCJ4c1wiIHN0eWxlPVwibWFyZ2luLWxlZnQ6MnB4XCI+PC9hcHAtdGVjaGxpZnktaWNvbj5cbiAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwiaXNDdXN0b21TZWxlY3RlZCAmJiAhc2VsZWN0ZWRSYW5nZUxhYmVsXCIgKGNsaWNrKT1cIm9wZW5DYWxlbmRhcigpXCIgY2xhc3M9XCJjbGlja2FibGVcIiBmeExheW91dD5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4O1wiPlNlbGVjdCBSYW5nZTwvc3Bhbj5cbiAgICAgICAgICAgIDxhcHAtdGVjaGxpZnktaWNvbiBuYW1lPVwiZWRpdFwiIGNsYXNzPVwiY2xpY2thYmxlXCIgc2l6ZT1cInhzXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDoycHhcIj48L2FwcC10ZWNobGlmeS1pY29uPlxuICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgY2xhc3M9XCJvZmZzY3JlZW4tcmFuZ2UtaW5wdXRcIiBbcmFuZ2VQaWNrZXJdPVwicGlja2VyXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cImN1c3RvbV9kYXRlX2Zyb21cIiBwbGFjZWhvbGRlcj1cIkZyb20gZGF0ZVwiIHJlYWRvbmx5IC8+XG4gICAgICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJjdXN0b21fZGF0ZV90b1wiIHBsYWNlaG9sZGVyPVwiVG8gZGF0ZVwiIHJlYWRvbmx5IC8+XG4gICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy1jb250YWluZXI+Il19
@@ -15,9 +15,8 @@ import * as i10 from "@angular/material/input";
15
15
  import * as i11 from "@angular/material/core";
16
16
  import * as i12 from "@angular/material/select";
17
17
  import * as i13 from "@angular/flex-layout/flex";
18
- import * as i14 from "@angular/flex-layout/extended";
19
- import * as i15 from "../file-dropper/file-dropper.component";
20
- import * as i16 from "../document-viewer/document-viewer.component";
18
+ import * as i14 from "../file-dropper/file-dropper.component";
19
+ import * as i15 from "../document-viewer/document-viewer.component";
21
20
  const errorMessages = {
22
21
  name: {
23
22
  required: 'Name is required'
@@ -51,8 +50,6 @@ export class UserFormComponent {
51
50
  { title: 'Admin', value: 2 },
52
51
  { title: 'Normal User', value: 3 },
53
52
  ];
54
- this.users = [];
55
- this.userRoles = [];
56
53
  this.roles = [];
57
54
  this.fileList = [];
58
55
  this.onSave = new EventEmitter();
@@ -109,7 +106,11 @@ export class UserFormComponent {
109
106
  loadRoles() {
110
107
  this.isWorking = true;
111
108
  let filter = {};
112
- filter = { client_id: this.user?.client_id || '' };
109
+ filter = {
110
+ client_id: this.user?.client_id || '',
111
+ is_subscribed: true,
112
+ sort_by: 'label|asc'
113
+ };
113
114
  this.http.get('api/roles', { params: filter }).toPromise().then((res) => {
114
115
  let roles = res.data;
115
116
  /* Lets set the roles this user has */
@@ -117,10 +118,6 @@ export class UserFormComponent {
117
118
  role.selected = this.userForm.value.roles_exists.find(roleData => roleData.id == role.id) ? true : false;
118
119
  }
119
120
  this.roles = roles;
120
- this.userRoles = roles.reduce((r, a) => {
121
- r[a.module_id] = [...r[a.module_id] || [], a];
122
- return r;
123
- }, {});
124
121
  this.isWorking = false;
125
122
  });
126
123
  }
@@ -202,11 +199,11 @@ export class UserFormComponent {
202
199
  .post('api/entity-files-upload', formData).toPromise();
203
200
  }
204
201
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserFormComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.HttpService }, { token: i2.AlertService }, { token: i2.ErrorHandlerService }, { token: i3.UntypedFormBuilder }, { token: i2.FormValidatorService }, { token: i4.UserService }, { token: i5.UserConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
205
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserFormComponent, selector: "user-form", inputs: { userId: "userId" }, outputs: { onSave: "onSave" }, ngImport: i0, template: "<form [formGroup]=\"userForm\" (ngSubmit)=\"save()\">\n <div class=\"d-flex flex-column justify-content-start align-items center gap-1\" mat-dialog-content>\n <h3 class=\"fw-bold\">{{ updateMode ? 'Edit' : 'Create ' }} User</h3>\n <mat-form-field>\n <mat-label>Full name</mat-label>\n <input [required]=\"!!userForm.get('name').validator\" autocomplete=\"off\" formControlName=\"name\" matInput\n placeholder=\"Full Name\" type=\"text\"/>\n <mat-error *ngIf=\"isFieldValid('name') && !!userForm.get('name').validator\">{{ getErrorMessage('name') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input [required]=\"!!userForm.get('email').validator\" formControlName=\"email\" matInput placeholder=\"Email\"\n type=\"email\"/>\n <mat-error *ngIf=\"isFieldValid('email') && !!userForm.get('email').validator\">\n {{ getErrorMessage('email') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field *ngIf=\"this.config.userConfig.showPhone\">\n <mat-label>Phone</mat-label>\n <input autocomplete=\"off\" formControlName=\"phone\" matInput placeholder=\"Phone\" type=\"text\"/>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Password</mat-label>\n <input [required]=\"isPasswordRequired && !!userForm.get('password').validator\" autocomplete=\"off\" formControlName=\"password\" matInput\n placeholder=\"Password\" type=\"password\"/>\n <mat-error *ngIf=\"isFieldValid('password') && !!userForm.get('password').validator\">\n {{ getErrorMessage('password') }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"d-flex flex-column justify-content-start gap-1\">\n <mat-checkbox formControlName=\"is_temporary_password\">Is Temporary Password?</mat-checkbox>\n <small class=\"text-secondary\">Should this user to update password on first login?</small>\n </div>\n\n <div *ngIf=\"this.config.userConfig.showSignature\">\n <ng-template #fileUpload>\n <section class=\"col-12\">\n <div>User Signature</div>\n <app-file-dropper (fileChanged)=\"fileChanged($event)\" [config]=\"fileConfig\"\n [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </ng-template>\n <div *ngIf=\"userForm.get('signature').value;else fileUpload;\" class=\"col-12\">\n <app-document-viewer (remove)=\"removeFile()\"\n [config]=\"this.viewerConfig\" [fileUrl]=\"userForm.get('signature_url').value\"\n [file]=\"userForm.get('signature').value\">\n </app-document-viewer>\n </div>\n </div>\n <mat-form-field *ngIf=\"this.config.userConfig.showUserTypes\">\n <mat-label>User Type</mat-label>\n <mat-select autocomplete=\"off\" formControlName=\"user_type_id\" required>\n <mat-option *ngFor=\"let userType of userTypes\" [value]=\"userType.value\">\n {{ userType.title }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('user_type_id')\">{{ getErrorMessage('user_type_id') }}</mat-error>\n </mat-form-field>\n\n <div\n *ngIf=\"(this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) && this.userForm.get('user_type_id').value == 3\">\n <p class=\"mb-0 fw-bold\">\n Roles\n </p>\n <div *ngFor=\"let role of userRoles | keyvalue\">\n <label *ngIf=\"role.value[0].module_id\" class=\"text-muted\">\n {{ role?.value[0]?.module?.name }}\n </label>\n <div *ngFor=\"let roleValue of role.value;\" [ngClass]=\"{ 'ml-4': role.value[0].module_id }\"\n fxLayout=\"column\">\n <mat-checkbox (change)=\"roleSelected($event, roleValue.id)\" [checked]=\"roleValue.selected\">\n {{ roleValue.label }}\n </mat-checkbox>\n </div>\n </div>\n </div>\n\n <div class=\"d-flex justify-content-end align-items-center gap-3\">\n <button [disabled]=\"isWorking\" color=\"primary\" mat-raised-button type=\"submit\">\n Save\n </button>\n <button (click)=\"closeDialog()\" [disabled]=\"isWorking\" mat-flat-button type=\"button\">\n Cancel\n </button>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i13.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i14.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i15.FileDropperComponent, selector: "app-file-dropper", inputs: ["fileArray", "config", "styles"], outputs: ["fileChanged"] }, { kind: "component", type: i16.DocumentViewerComponent, selector: "app-document-viewer", inputs: ["config", "file", "fileUrl", "disableEdit"], outputs: ["remove"] }, { kind: "pipe", type: i6.KeyValuePipe, name: "keyvalue" }] }); }
202
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserFormComponent, selector: "user-form", inputs: { userId: "userId" }, outputs: { onSave: "onSave" }, ngImport: i0, template: "<form [formGroup]=\"userForm\" (ngSubmit)=\"save()\">\n <div class=\"d-flex flex-column justify-content-start align-items center gap-1\" mat-dialog-content>\n <h5 class=\"fw-bold text-center\">{{ updateMode ? 'Edit' : 'Create ' }} User</h5>\n <div fxLayout>\n <div fxLayout=\"column\" fxFlex fxLayoutGap=\"0.25rem\">\n <mat-form-field>\n <mat-label>Full name</mat-label>\n <input [required]=\"!!userForm.get('name').validator\" autocomplete=\"off\" formControlName=\"name\" matInput\n placeholder=\"Full Name\" type=\"text\" />\n <mat-error *ngIf=\"isFieldValid('name') && !!userForm.get('name').validator\">{{ getErrorMessage('name') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input [required]=\"!!userForm.get('email').validator\" formControlName=\"email\" matInput placeholder=\"Email\"\n type=\"email\" />\n <mat-error *ngIf=\"isFieldValid('email') && !!userForm.get('email').validator\">\n {{ getErrorMessage('email') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field *ngIf=\"this.config.userConfig.showPhone\">\n <mat-label>Phone</mat-label>\n <input autocomplete=\"off\" formControlName=\"phone\" matInput placeholder=\"Phone\" type=\"text\" />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Password</mat-label>\n <input [required]=\"isPasswordRequired && !!userForm.get('password').validator\" autocomplete=\"off\"\n formControlName=\"password\" matInput placeholder=\"Password\" type=\"password\" />\n <mat-error *ngIf=\"isFieldValid('password') && !!userForm.get('password').validator\">\n {{ getErrorMessage('password') }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"d-flex flex-column justify-content-start gap-1\">\n <mat-checkbox formControlName=\"is_temporary_password\">Is Temporary Password?</mat-checkbox>\n <small class=\"text-secondary\">Should this user to update password on first login?</small>\n </div>\n\n <div *ngIf=\"this.config.userConfig.showSignature\">\n <ng-template #fileUpload>\n <section class=\"col-12\">\n <div>User Signature</div>\n <app-file-dropper (fileChanged)=\"fileChanged($event)\" [config]=\"fileConfig\" [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </ng-template>\n <div *ngIf=\"userForm.get('signature').value;else fileUpload;\" class=\"col-12\">\n <app-document-viewer (remove)=\"removeFile()\" [config]=\"this.viewerConfig\"\n [fileUrl]=\"userForm.get('signature_url').value\" [file]=\"userForm.get('signature').value\">\n </app-document-viewer>\n </div>\n </div>\n <mat-form-field *ngIf=\"this.config.userConfig.showUserTypes\">\n <mat-label>User Type</mat-label>\n <mat-select autocomplete=\"off\" formControlName=\"user_type_id\" required>\n <mat-option *ngFor=\"let userType of userTypes\" [value]=\"userType.value\">\n {{ userType.title }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('user_type_id')\">{{ getErrorMessage('user_type_id') }}</mat-error>\n </mat-form-field>\n </div>\n\n <div\n *ngIf=\"(this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) && this.userForm.get('user_type_id').value == 3\"\n fxFlex class=\"ml-4\">\n <p class=\"mb-0 fw-bold\">\n Roles\n </p>\n <div *ngFor=\"let role of roles\" fxLayout=\"column\">\n <mat-checkbox (change)=\"roleSelected($event, role.id)\" [checked]=\"role.selected\">\n {{ role.label }}\n </mat-checkbox>\n </div>\n </div>\n\n </div>\n <div class=\"d-flex justify-content-end align-items-center gap-3\">\n <button [disabled]=\"isWorking\" color=\"primary\" mat-raised-button type=\"submit\">\n Save\n </button>\n <button (click)=\"closeDialog()\" [disabled]=\"isWorking\" mat-flat-button type=\"button\">\n Cancel\n </button>\n </div>\n </div>\n</form>", dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i13.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i13.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i13.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i14.FileDropperComponent, selector: "app-file-dropper", inputs: ["fileArray", "config", "styles"], outputs: ["fileChanged"] }, { kind: "component", type: i15.DocumentViewerComponent, selector: "app-document-viewer", inputs: ["config", "file", "fileUrl", "disableEdit"], outputs: ["remove"] }] }); }
206
203
  }
207
204
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserFormComponent, decorators: [{
208
205
  type: Component,
209
- args: [{ selector: 'user-form', template: "<form [formGroup]=\"userForm\" (ngSubmit)=\"save()\">\n <div class=\"d-flex flex-column justify-content-start align-items center gap-1\" mat-dialog-content>\n <h3 class=\"fw-bold\">{{ updateMode ? 'Edit' : 'Create ' }} User</h3>\n <mat-form-field>\n <mat-label>Full name</mat-label>\n <input [required]=\"!!userForm.get('name').validator\" autocomplete=\"off\" formControlName=\"name\" matInput\n placeholder=\"Full Name\" type=\"text\"/>\n <mat-error *ngIf=\"isFieldValid('name') && !!userForm.get('name').validator\">{{ getErrorMessage('name') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input [required]=\"!!userForm.get('email').validator\" formControlName=\"email\" matInput placeholder=\"Email\"\n type=\"email\"/>\n <mat-error *ngIf=\"isFieldValid('email') && !!userForm.get('email').validator\">\n {{ getErrorMessage('email') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field *ngIf=\"this.config.userConfig.showPhone\">\n <mat-label>Phone</mat-label>\n <input autocomplete=\"off\" formControlName=\"phone\" matInput placeholder=\"Phone\" type=\"text\"/>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Password</mat-label>\n <input [required]=\"isPasswordRequired && !!userForm.get('password').validator\" autocomplete=\"off\" formControlName=\"password\" matInput\n placeholder=\"Password\" type=\"password\"/>\n <mat-error *ngIf=\"isFieldValid('password') && !!userForm.get('password').validator\">\n {{ getErrorMessage('password') }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"d-flex flex-column justify-content-start gap-1\">\n <mat-checkbox formControlName=\"is_temporary_password\">Is Temporary Password?</mat-checkbox>\n <small class=\"text-secondary\">Should this user to update password on first login?</small>\n </div>\n\n <div *ngIf=\"this.config.userConfig.showSignature\">\n <ng-template #fileUpload>\n <section class=\"col-12\">\n <div>User Signature</div>\n <app-file-dropper (fileChanged)=\"fileChanged($event)\" [config]=\"fileConfig\"\n [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </ng-template>\n <div *ngIf=\"userForm.get('signature').value;else fileUpload;\" class=\"col-12\">\n <app-document-viewer (remove)=\"removeFile()\"\n [config]=\"this.viewerConfig\" [fileUrl]=\"userForm.get('signature_url').value\"\n [file]=\"userForm.get('signature').value\">\n </app-document-viewer>\n </div>\n </div>\n <mat-form-field *ngIf=\"this.config.userConfig.showUserTypes\">\n <mat-label>User Type</mat-label>\n <mat-select autocomplete=\"off\" formControlName=\"user_type_id\" required>\n <mat-option *ngFor=\"let userType of userTypes\" [value]=\"userType.value\">\n {{ userType.title }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('user_type_id')\">{{ getErrorMessage('user_type_id') }}</mat-error>\n </mat-form-field>\n\n <div\n *ngIf=\"(this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) && this.userForm.get('user_type_id').value == 3\">\n <p class=\"mb-0 fw-bold\">\n Roles\n </p>\n <div *ngFor=\"let role of userRoles | keyvalue\">\n <label *ngIf=\"role.value[0].module_id\" class=\"text-muted\">\n {{ role?.value[0]?.module?.name }}\n </label>\n <div *ngFor=\"let roleValue of role.value;\" [ngClass]=\"{ 'ml-4': role.value[0].module_id }\"\n fxLayout=\"column\">\n <mat-checkbox (change)=\"roleSelected($event, roleValue.id)\" [checked]=\"roleValue.selected\">\n {{ roleValue.label }}\n </mat-checkbox>\n </div>\n </div>\n </div>\n\n <div class=\"d-flex justify-content-end align-items-center gap-3\">\n <button [disabled]=\"isWorking\" color=\"primary\" mat-raised-button type=\"submit\">\n Save\n </button>\n <button (click)=\"closeDialog()\" [disabled]=\"isWorking\" mat-flat-button type=\"button\">\n Cancel\n </button>\n </div>\n </div>\n</form>\n" }]
206
+ args: [{ selector: 'user-form', template: "<form [formGroup]=\"userForm\" (ngSubmit)=\"save()\">\n <div class=\"d-flex flex-column justify-content-start align-items center gap-1\" mat-dialog-content>\n <h5 class=\"fw-bold text-center\">{{ updateMode ? 'Edit' : 'Create ' }} User</h5>\n <div fxLayout>\n <div fxLayout=\"column\" fxFlex fxLayoutGap=\"0.25rem\">\n <mat-form-field>\n <mat-label>Full name</mat-label>\n <input [required]=\"!!userForm.get('name').validator\" autocomplete=\"off\" formControlName=\"name\" matInput\n placeholder=\"Full Name\" type=\"text\" />\n <mat-error *ngIf=\"isFieldValid('name') && !!userForm.get('name').validator\">{{ getErrorMessage('name') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>Email</mat-label>\n <input [required]=\"!!userForm.get('email').validator\" formControlName=\"email\" matInput placeholder=\"Email\"\n type=\"email\" />\n <mat-error *ngIf=\"isFieldValid('email') && !!userForm.get('email').validator\">\n {{ getErrorMessage('email') }}\n </mat-error>\n </mat-form-field>\n <mat-form-field *ngIf=\"this.config.userConfig.showPhone\">\n <mat-label>Phone</mat-label>\n <input autocomplete=\"off\" formControlName=\"phone\" matInput placeholder=\"Phone\" type=\"text\" />\n </mat-form-field>\n <mat-form-field>\n <mat-label>Password</mat-label>\n <input [required]=\"isPasswordRequired && !!userForm.get('password').validator\" autocomplete=\"off\"\n formControlName=\"password\" matInput placeholder=\"Password\" type=\"password\" />\n <mat-error *ngIf=\"isFieldValid('password') && !!userForm.get('password').validator\">\n {{ getErrorMessage('password') }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"d-flex flex-column justify-content-start gap-1\">\n <mat-checkbox formControlName=\"is_temporary_password\">Is Temporary Password?</mat-checkbox>\n <small class=\"text-secondary\">Should this user to update password on first login?</small>\n </div>\n\n <div *ngIf=\"this.config.userConfig.showSignature\">\n <ng-template #fileUpload>\n <section class=\"col-12\">\n <div>User Signature</div>\n <app-file-dropper (fileChanged)=\"fileChanged($event)\" [config]=\"fileConfig\" [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </ng-template>\n <div *ngIf=\"userForm.get('signature').value;else fileUpload;\" class=\"col-12\">\n <app-document-viewer (remove)=\"removeFile()\" [config]=\"this.viewerConfig\"\n [fileUrl]=\"userForm.get('signature_url').value\" [file]=\"userForm.get('signature').value\">\n </app-document-viewer>\n </div>\n </div>\n <mat-form-field *ngIf=\"this.config.userConfig.showUserTypes\">\n <mat-label>User Type</mat-label>\n <mat-select autocomplete=\"off\" formControlName=\"user_type_id\" required>\n <mat-option *ngFor=\"let userType of userTypes\" [value]=\"userType.value\">\n {{ userType.title }}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('user_type_id')\">{{ getErrorMessage('user_type_id') }}</mat-error>\n </mat-form-field>\n </div>\n\n <div\n *ngIf=\"(this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) && this.userForm.get('user_type_id').value == 3\"\n fxFlex class=\"ml-4\">\n <p class=\"mb-0 fw-bold\">\n Roles\n </p>\n <div *ngFor=\"let role of roles\" fxLayout=\"column\">\n <mat-checkbox (change)=\"roleSelected($event, role.id)\" [checked]=\"role.selected\">\n {{ role.label }}\n </mat-checkbox>\n </div>\n </div>\n\n </div>\n <div class=\"d-flex justify-content-end align-items-center gap-3\">\n <button [disabled]=\"isWorking\" color=\"primary\" mat-raised-button type=\"submit\">\n Save\n </button>\n <button (click)=\"closeDialog()\" [disabled]=\"isWorking\" mat-flat-button type=\"button\">\n Cancel\n </button>\n </div>\n </div>\n</form>" }]
210
207
  }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
211
208
  type: Inject,
212
209
  args: [MAT_DIALOG_DATA]
@@ -215,4 +212,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
215
212
  }], onSave: [{
216
213
  type: Output
217
214
  }] } });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdXNlci91c2VyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi91c2VyL3VzZXItZm9ybS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBd0MsVUFBVSxFQUFFLGtCQUFrQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBS3hILE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU96RSxNQUFNLGFBQWEsR0FBUTtJQUN6QixJQUFJLEVBQUU7UUFDSixRQUFRLEVBQUUsa0JBQWtCO0tBQzdCO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QixLQUFLLEVBQUUsZUFBZTtLQUN2QjtJQUNELFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxzQkFBc0I7S0FDakM7SUFDRCxZQUFZLEVBQUU7UUFDWixRQUFRLEVBQUUsdUJBQXVCO0tBQ2xDO0NBQ0YsQ0FBQztBQU1GLE1BQU0sT0FBTyxpQkFBaUI7SUFtQjVCLFlBQW1CLFNBQTBDLEVBQzNCLElBQVMsRUFDakMsSUFBaUIsRUFDakIsWUFBMEIsRUFDMUIsWUFBaUMsRUFDakMsRUFBc0IsRUFDdEIsb0JBQTBDLEVBQzFDLFdBQXdCLEVBQ3pCLGlCQUFvQztRQVIxQixjQUFTLEdBQVQsU0FBUyxDQUFpQztRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsaUJBQVks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QUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ3pCLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsVUFBVSxFQUFFO2FBQ1osSUFBSSxDQUNILHlCQUF5QixFQUN6QixRQUFRLENBQ1QsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQixDQUFDOytHQXBNVSxpQkFBaUIsOENBb0JsQixlQUFlO21HQXBCZCxpQkFBaUIsOEdDakM5QiwwdklBMEZBOzs0RkR6RGEsaUJBQWlCO2tCQUo3QixTQUFTOytCQUNFLFdBQVc7OzBCQXVCbEIsTUFBTTsyQkFBQyxlQUFlOzhQQW5CaEIsTUFBTTtzQkFBZCxLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXkgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgRXJyb3JIYW5kbGVyU2VydmljZSwgRm9ybVZhbGlkYXRvclNlcnZpY2UsIEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZSc7XG5cbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNdWx0aVVzZXJDb25maWcgfSBmcm9tICcuLi91c2VyLWNvbmZpZy91c2VyLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBVc2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3VzZXItY29uZmlnL3VzZXItY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZURyb3BwZXJDb25maWcgfSBmcm9tIFwiLi4vZmlsZS1kcm9wcGVyXCI7XG5pbXBvcnQgeyBWaWV3ZXJDb25maWcgfSBmcm9tIFwiLi4vZG9jdW1lbnQtdmlld2VyXCI7XG5cbmNvbnN0IGVycm9yTWVzc2FnZXM6IGFueSA9IHtcbiAgbmFtZToge1xuICAgIHJlcXVpcmVkOiAnTmFtZSBpcyByZXF1aXJlZCdcbiAgfSxcbiAgZW1haWw6IHtcbiAgICByZXF1aXJlZDogJ0VtYWlsIGlzIHJlcXVpcmVkJyxcbiAgICBlbWFpbDogJ0ludmFsaWQgZW1haWwnLFxuICB9LFxuICBwYXNzd29yZDoge1xuICAgIHJlcXVpcmVkOiAnUGFzc3dvcmQgaXMgcmVxdWlyZWQnXG4gIH0sXG4gIHVzZXJfdHlwZV9pZDoge1xuICAgIHJlcXVpcmVkOiAnVXNlciBUeXBlIGlzIHJlcXVpcmVkJ1xuICB9XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1c2VyLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1mb3JtLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdXNlcklkOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBvblNhdmU6IEV2ZW50RW1pdHRlcjxVc2VyPjtcbiAgaXNXb3JraW5nID0gZmFsc2U7XG4gIHVzZXJGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBpc1Bhc3N3b3JkUmVxdWlyZWQgPSBmYWxzZTtcbiAgdXBkYXRlTW9kZSA9IGZhbHNlO1xuICBjb25maWc6IE11bHRpVXNlckNvbmZpZztcbiAgdXNlclR5cGVzOiBhbnkgPSBbXG4gICAgeyB0aXRsZTogJ0FkbWluJywgdmFsdWU6IDIgfSxcbiAgICB7IHRpdGxlOiAnTm9ybWFsIFVzZXInLCB2YWx1ZTogMyB9LFxuICBdO1xuICB1c2VyczogVXNlcltdID0gW107XG4gIHVzZXJSb2xlczogYW55W10gPSBbXTtcbiAgcm9sZXM6IGFueVtdID0gW107XG4gIGZpbGVDb25maWc6IEZpbGVEcm9wcGVyQ29uZmlnO1xuICB2aWV3ZXJDb25maWc6IFZpZXdlckNvbmZpZztcbiAgZmlsZUxpc3Q6IGFueVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFVzZXJGb3JtQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIHVzZXI6IGFueSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZm9ybVZhbGlkYXRvclNlcnZpY2U6IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyB1c2VyQ29uZmlnU2VydmljZTogVXNlckNvbmZpZ1NlcnZpY2UsXG4gICkge1xuICAgIHRoaXMub25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxVc2VyPigpO1xuICAgIHRoaXMuY29uZmlnID0gdGhpcy51c2VyQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgfVxuXG4gIGdldCByb2xlRm9ybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlckZvcm0uZ2V0KCdyb2xlcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVzZXJUeXBlcyA9IHRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd1VzZXJUeXBlc1xuICAgICAgPyB0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnVzZXJUeXBlc1xuICAgICAgOiB0aGlzLnVzZXJUeXBlcztcbiAgICB0aGlzLnVzZXJGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBpZDogWycnXSxcbiAgICAgIG5hbWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcbiAgICAgIGVtYWlsOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKSksXG4gICAgICBwYXNzd29yZDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyksXG4gICAgICBwaG9uZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyksXG4gICAgICB1c2VyX3R5cGVfaWQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgcm9sZXM6IHRoaXMuZmIuYXJyYXkoW10pLFxuICAgICAgcm9sZXNfZXhpc3RzOiBbW11dLFxuICAgICAgY2xpZW50X2lkOiBbJyddLFxuICAgICAgc2lnbmF0dXJlX3VybDogWycnXSxcbiAgICAgIHNpZ25hdHVyZTogWycnXSxcbiAgICAgIGlzX3RlbXBvcmFyeV9wYXNzd29yZDogW3RydWVdLFxuICAgIH0pO1xuXG4gICAgdGhpcy51c2VyRm9ybS5wYXRjaFZhbHVlKHRoaXMudXNlcik7XG4gICAgaWYgKHRoaXMudXNlci5oYXNPd25Qcm9wZXJ0eSgnaWQnKSkge1xuICAgICAgdGhpcy51cGRhdGVNb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMudXNlckZvcm0uY29udHJvbHMudXNlcl90eXBlX2lkLnNldFZhbHVlKHRoaXMudXNlci51c2VyX3R5cGVfaWQpO1xuICAgICAgdGhpcy51c2VyRm9ybS5jb250cm9scy5yb2xlc19leGlzdHMuc2V0VmFsdWUodGhpcy51c2VyLnJvbGVzIHx8IFtdKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd1JvbGVzIHx8IHRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd0Zvcm1Sb2xlcykge1xuICAgICAgdGhpcy5sb2FkUm9sZXMoKTtcbiAgICB9XG4gICAgdGhpcy5maWxlQ29uZmlnID0ge1xuICAgICAgZmlsZUlkOiAnc3ViamVjdEZpbGUnLFxuICAgICAgY29udGFpbmVySWQ6ICdzdWJqZWN0RmlsZUNvbnRhaW5lcicsXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgaGVpZ2h0OiAnMjAwcHgnXG4gICAgICB9LFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgYWNjZXB0RmlsZTogJyonLFxuICAgICAgbWF4U2l6ZTogMTAsXG4gICAgICBhY2NlcHRGaWxlVGV4dDogJ1BORyBhbmQgSlBFRyBvbmx5J1xuICAgIH07XG5cbiAgICB0aGlzLnZpZXdlckNvbmZpZyA9IHtcbiAgICAgIHZpZXdlclN0eWxlOiB7XG4gICAgICAgIGhlaWdodDogJzIwMHB4JyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJ1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsb2FkUm9sZXMoKSB7XG4gICAgdGhpcy5pc1dvcmtpbmcgPSB0cnVlO1xuICAgIGxldCBmaWx0ZXIgPSB7fTtcbiAgICBmaWx0ZXIgPSB7IGNsaWVudF9pZDogdGhpcy51c2VyPy5jbGllbnRfaWQgfHwgJycgfTtcbiAgICB0aGlzLmh0dHAuZ2V0KCdhcGkvcm9sZXMnLCB7IHBhcmFtczogZmlsdGVyIH0pLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHJvbGVzID0gcmVzLmRhdGE7XG4gICAgICAgIC8qIExldHMgc2V0IHRoZSByb2xlcyB0aGlzIHVzZXIgaGFzICovXG4gICAgICAgIGZvciAobGV0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgICByb2xlLnNlbGVjdGVkID0gdGhpcy51c2VyRm9ybS52YWx1ZS5yb2xlc19leGlzdHMuZmluZChyb2xlRGF0YSA9PiByb2xlRGF0YS5pZCA9PSByb2xlLmlkKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvbGVzID0gcm9sZXM7XG4gICAgICAgIHRoaXMudXNlclJvbGVzID0gcm9sZXMucmVkdWNlKChyLCBhKSA9PiB7XG4gICAgICAgICAgclthLm1vZHVsZV9pZF0gPSBbLi4uclthLm1vZHVsZV9pZF0gfHwgW10sIGFdO1xuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIHRoaXMuaXNXb3JraW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgaWYgKCF0aGlzLnVzZXJGb3JtLnZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgICBsZXQgZGF0YTogYW55ID0gdGhpcy51c2VyRm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgICAgbGV0IHJvbGVzID0gW107XG5cbiAgICAgIHRoaXMucm9sZXMuZm9yRWFjaCgocm9sZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyb2xlLnNlbGVjdGVkKSB7XG4gICAgICAgICAgcm9sZXNbcm9sZS5pZF0gPSByb2xlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGRhdGEucm9sZXMgPSByb2xlcztcblxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy51cGRhdGVNb2RlID8gYXdhaXQgdGhpcy51c2VyU2VydmljZS51cGRhdGVVc2VyKGRhdGEpXG4gICAgICAgIDogYXdhaXQgdGhpcy51c2VyU2VydmljZS5jcmVhdGVVc2VyKGRhdGEpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoJ1N1Y2Nlc3NmdWxseSBzYXZlZCB0aGUgdXNlci4gJywgJ3N1Y2Nlc3MnKTtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHJlc3VsdCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNXb3JraW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcm9sZVNlbGVjdGVkKGV2ZW50OiBhbnksIHJvbGVJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5yb2xlcy5mb3JFYWNoKChyb2xlOiBhbnkpID0+IHtcbiAgICAgIGlmIChyb2xlLmlkID09IHJvbGVJZCkge1xuICAgICAgICByb2xlLnNlbGVjdGVkID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBNZXRob2QgdG8gZXZhbHVhdGUgZm9ybSBmaWVsZHMqL1xuICBpc0ZpZWxkVmFsaWQoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmlzRmllbGRWYWxpZChmaWVsZCwgdGhpcy51c2VyRm9ybSk7XG4gIH1cblxuICAvKiogTWV0aG9kIHRvIGZpbmQgZXJyb3IgaW4gZm9ybSBmaWVsZHMqL1xuICBnZXRFcnJvck1lc3NhZ2UoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmdldEVycm9yTWVzc2FnZShmaWVsZCwgdGhpcy51c2VyRm9ybSwgZXJyb3JNZXNzYWdlcyk7XG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG4gIGFzeW5jIGZpbGVDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbGVMaXN0ID0gZXZlbnQ7XG5cbiAgICBpZiAodGhpcy5maWxlTGlzdC5sZW5ndGggPiAwKSB7XG5cbiAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gYXdhaXQgdGhpcy51cGxvYWRFbnRpdHlGaWxlKFxuICAgICAgICB0aGlzLmZpbGVMaXN0WzBdXG4gICAgICApO1xuICAgICAgdGhpcy51c2VyRm9ybVxuICAgICAgICAuZ2V0KCdzaWduYXR1cmUnKVxuICAgICAgICAuc2V0VmFsdWUocmVzdWx0Lml0ZW0uZmlsZSk7XG4gICAgICB0aGlzLnVzZXJGb3JtXG4gICAgICAgIC5nZXQoJ3NpZ25hdHVyZV91cmwnKVxuICAgICAgICAuc2V0VmFsdWUocmVzdWx0Lml0ZW0udXJsKTtcbiAgICAgIHRoaXMuZmlsZUxpc3QgPSBbXTtcbiAgICB9XG4gIH1cblxuXG4gIGFzeW5jIHJlbW92ZUZpbGUoKSB7XG4gICAgaWYgKHRoaXMudXNlckZvcm0udmFsdWUuc2lnbmF0dXJlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnVzZXJGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIHNpZ25hdHVyZTogJycsXG4gICAgICAgICAgc2lnbmF0dXJlX3VybDogJydcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnVW5hYmxlIHRvIHJlbW92ZSBmaWxlLCB0cnkgbGF0ZXInLCAnd2FybicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1cGxvYWRFbnRpdHlGaWxlKGZpbGU6IEZpbGUpIHtcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGVEYXRhJywgZmlsZSwgZmlsZS5uYW1lKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuc2tpcEhlYWRlcigpXG4gICAgICAucG9zdChcbiAgICAgICAgJ2FwaS9lbnRpdHktZmlsZXMtdXBsb2FkJyxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICApLnRvUHJvbWlzZSgpO1xuICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cInVzZXJGb3JtXCIgKG5nU3VibWl0KT1cInNhdmUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcyBjZW50ZXIgZ2FwLTFcIiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGgzIGNsYXNzPVwiZnctYm9sZFwiPnt7IHVwZGF0ZU1vZGUgPyAnRWRpdCcgOiAnQ3JlYXRlICcgfX0gVXNlcjwvaDM+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD5GdWxsIG5hbWU8L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dCBbcmVxdWlyZWRdPVwiISF1c2VyRm9ybS5nZXQoJ25hbWUnKS52YWxpZGF0b3JcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgbWF0SW5wdXRcbiAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZ1bGwgTmFtZVwiIHR5cGU9XCJ0ZXh0XCIvPlxuICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnbmFtZScpICYmICEhdXNlckZvcm0uZ2V0KCduYW1lJykudmFsaWRhdG9yXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCduYW1lJykgfX1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD5FbWFpbDwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IFtyZXF1aXJlZF09XCIhIXVzZXJGb3JtLmdldCgnZW1haWwnKS52YWxpZGF0b3JcIiBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRW1haWxcIlxuICAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiLz5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ2VtYWlsJykgJiYgISF1c2VyRm9ybS5nZXQoJ2VtYWlsJykudmFsaWRhdG9yXCI+XG4gICAgICAgIHt7IGdldEVycm9yTWVzc2FnZSgnZW1haWwnKSB9fVxuICAgICAgPC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJ0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dQaG9uZVwiPlxuICAgICAgPG1hdC1sYWJlbD5QaG9uZTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cInBob25lXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJQaG9uZVwiIHR5cGU9XCJ0ZXh0XCIvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD5QYXNzd29yZDwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IFtyZXF1aXJlZF09XCJpc1Bhc3N3b3JkUmVxdWlyZWQgJiYgISF1c2VyRm9ybS5nZXQoJ3Bhc3N3b3JkJykudmFsaWRhdG9yXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgZm9ybUNvbnRyb2xOYW1lPVwicGFzc3dvcmRcIiBtYXRJbnB1dFxuICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiB0eXBlPVwicGFzc3dvcmRcIi8+XG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdwYXNzd29yZCcpICYmICEhdXNlckZvcm0uZ2V0KCdwYXNzd29yZCcpLnZhbGlkYXRvclwiPlxuICAgICAgICB7eyBnZXRFcnJvck1lc3NhZ2UoJ3Bhc3N3b3JkJykgfX1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtMVwiPlxuICAgICAgPG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJpc190ZW1wb3JhcnlfcGFzc3dvcmRcIj5JcyBUZW1wb3JhcnkgUGFzc3dvcmQ/PC9tYXQtY2hlY2tib3g+XG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPlNob3VsZCB0aGlzIHVzZXIgdG8gdXBkYXRlIHBhc3N3b3JkIG9uIGZpcnN0IGxvZ2luPzwvc21hbGw+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwidGhpcy5jb25maWcudXNlckNvbmZpZy5zaG93U2lnbmF0dXJlXCI+XG4gICAgICA8bmctdGVtcGxhdGUgI2ZpbGVVcGxvYWQ+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgPGRpdj5Vc2VyIFNpZ25hdHVyZTwvZGl2PlxuICAgICAgICAgIDxhcHAtZmlsZS1kcm9wcGVyIChmaWxlQ2hhbmdlZCk9XCJmaWxlQ2hhbmdlZCgkZXZlbnQpXCIgW2NvbmZpZ109XCJmaWxlQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsZUFycmF5XT1cImZpbGVMaXN0XCI+XG4gICAgICAgICAgPC9hcHAtZmlsZS1kcm9wcGVyPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiAqbmdJZj1cInVzZXJGb3JtLmdldCgnc2lnbmF0dXJlJykudmFsdWU7ZWxzZSBmaWxlVXBsb2FkO1wiIGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgIDxhcHAtZG9jdW1lbnQtdmlld2VyIChyZW1vdmUpPVwicmVtb3ZlRmlsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ0aGlzLnZpZXdlckNvbmZpZ1wiIFtmaWxlVXJsXT1cInVzZXJGb3JtLmdldCgnc2lnbmF0dXJlX3VybCcpLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVdPVwidXNlckZvcm0uZ2V0KCdzaWduYXR1cmUnKS52YWx1ZVwiPlxuICAgICAgICA8L2FwcC1kb2N1bWVudC12aWV3ZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJ0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dVc2VyVHlwZXNcIj5cbiAgICAgIDxtYXQtbGFiZWw+VXNlciBUeXBlPC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBhdXRvY29tcGxldGU9XCJvZmZcIiBmb3JtQ29udHJvbE5hbWU9XCJ1c2VyX3R5cGVfaWRcIiByZXF1aXJlZD5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHVzZXJUeXBlIG9mIHVzZXJUeXBlc1wiIFt2YWx1ZV09XCJ1c2VyVHlwZS52YWx1ZVwiPlxuICAgICAgICAgIHt7IHVzZXJUeXBlLnRpdGxlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3VzZXJfdHlwZV9pZCcpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCd1c2VyX3R5cGVfaWQnKSB9fTwvbWF0LWVycm9yPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIih0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dSb2xlcyB8fCB0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dGb3JtUm9sZXMpICYmIHRoaXMudXNlckZvcm0uZ2V0KCd1c2VyX3R5cGVfaWQnKS52YWx1ZSA9PSAzXCI+XG4gICAgICA8cCBjbGFzcz1cIm1iLTAgZnctYm9sZFwiPlxuICAgICAgICBSb2xlc1xuICAgICAgPC9wPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm9sZSBvZiB1c2VyUm9sZXMgfCBrZXl2YWx1ZVwiPlxuICAgICAgICA8bGFiZWwgKm5nSWY9XCJyb2xlLnZhbHVlWzBdLm1vZHVsZV9pZFwiIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxuICAgICAgICAgIHt7IHJvbGU/LnZhbHVlWzBdPy5tb2R1bGU/Lm5hbWUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm9sZVZhbHVlIG9mIHJvbGUudmFsdWU7XCIgW25nQ2xhc3NdPVwieyAnbWwtNCc6IHJvbGUudmFsdWVbMF0ubW9kdWxlX2lkIH1cIlxuICAgICAgICAgICAgIGZ4TGF5b3V0PVwiY29sdW1uXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cInJvbGVTZWxlY3RlZCgkZXZlbnQsIHJvbGVWYWx1ZS5pZClcIiBbY2hlY2tlZF09XCJyb2xlVmFsdWUuc2VsZWN0ZWRcIj5cbiAgICAgICAgICAgIHt7IHJvbGVWYWx1ZS5sYWJlbCB9fVxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNXb3JraW5nXCIgY29sb3I9XCJwcmltYXJ5XCIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cInN1Ym1pdFwiPlxuICAgICAgICBTYXZlXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIiBbZGlzYWJsZWRdPVwiaXNXb3JraW5nXCIgbWF0LWZsYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdXNlci91c2VyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi91c2VyL3VzZXItZm9ybS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBd0MsVUFBVSxFQUFFLGtCQUFrQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBS3hILE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3pFLE1BQU0sYUFBYSxHQUFRO0lBQ3pCLElBQUksRUFBRTtRQUNKLFFBQVEsRUFBRSxrQkFBa0I7S0FDN0I7SUFDRCxLQUFLLEVBQUU7UUFDTCxRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLEtBQUssRUFBRSxlQUFlO0tBQ3ZCO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLHNCQUFzQjtLQUNqQztJQUNELFlBQVksRUFBRTtRQUNaLFFBQVEsRUFBRSx1QkFBdUI7S0FDbEM7Q0FDRixDQUFDO0FBTUYsTUFBTSxPQUFPLGlCQUFpQjtJQWlCNUIsWUFBbUIsU0FBMEMsRUFDM0IsSUFBUyxFQUNqQyxJQUFpQixFQUNqQixZQUEwQixFQUMxQixZQUFpQyxFQUNqQyxFQUFzQixFQUN0QixvQkFBMEMsRUFDMUMsV0FBd0IsRUFDekIsaUJBQW9DO1FBUjFCLGNBQVMsR0FBVCxTQUFTLENBQWlDO1FBQzNCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDakMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixpQkFBWSxH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RSxDQUFDO0lBQ2xCLENBQUM7K0dBbE1VLGlCQUFpQiw4Q0FrQmxCLGVBQWU7bUdBbEJkLGlCQUFpQiw4R0NqQzlCLG12SUFzRk87OzRGRHJETSxpQkFBaUI7a0JBSjdCLFNBQVM7K0JBQ0UsV0FBVzs7MEJBcUJsQixNQUFNOzJCQUFDLGVBQWU7OFBBakJoQixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBFcnJvckhhbmRsZXJTZXJ2aWNlLCBGb3JtVmFsaWRhdG9yU2VydmljZSwgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlJztcblxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IE11bHRpVXNlckNvbmZpZyB9IGZyb20gJy4uL3VzZXItY29uZmlnL3VzZXItY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IFVzZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci1jb25maWcvdXNlci1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRHJvcHBlckNvbmZpZyB9IGZyb20gXCIuLi9maWxlLWRyb3BwZXJcIjtcbmltcG9ydCB7IFZpZXdlckNvbmZpZyB9IGZyb20gXCIuLi9kb2N1bWVudC12aWV3ZXJcIjtcblxuY29uc3QgZXJyb3JNZXNzYWdlczogYW55ID0ge1xuICBuYW1lOiB7XG4gICAgcmVxdWlyZWQ6ICdOYW1lIGlzIHJlcXVpcmVkJ1xuICB9LFxuICBlbWFpbDoge1xuICAgIHJlcXVpcmVkOiAnRW1haWwgaXMgcmVxdWlyZWQnLFxuICAgIGVtYWlsOiAnSW52YWxpZCBlbWFpbCcsXG4gIH0sXG4gIHBhc3N3b3JkOiB7XG4gICAgcmVxdWlyZWQ6ICdQYXNzd29yZCBpcyByZXF1aXJlZCdcbiAgfSxcbiAgdXNlcl90eXBlX2lkOiB7XG4gICAgcmVxdWlyZWQ6ICdVc2VyIFR5cGUgaXMgcmVxdWlyZWQnXG4gIH1cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VzZXItZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWZvcm0uaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB1c2VySWQ6IG51bWJlcjtcbiAgQE91dHB1dCgpIG9uU2F2ZTogRXZlbnRFbWl0dGVyPFVzZXI+O1xuICBpc1dvcmtpbmcgPSBmYWxzZTtcbiAgdXNlckZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIGlzUGFzc3dvcmRSZXF1aXJlZCA9IGZhbHNlO1xuICB1cGRhdGVNb2RlID0gZmFsc2U7XG4gIGNvbmZpZzogTXVsdGlVc2VyQ29uZmlnO1xuICB1c2VyVHlwZXM6IGFueSA9IFtcbiAgICB7IHRpdGxlOiAnQWRtaW4nLCB2YWx1ZTogMiB9LFxuICAgIHsgdGl0bGU6ICdOb3JtYWwgVXNlcicsIHZhbHVlOiAzIH0sXG4gIF07XG4gIHJvbGVzOiBhbnlbXSA9IFtdO1xuICBmaWxlQ29uZmlnOiBGaWxlRHJvcHBlckNvbmZpZztcbiAgdmlld2VyQ29uZmlnOiBWaWV3ZXJDb25maWc7XG4gIGZpbGVMaXN0OiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxVc2VyRm9ybUNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyB1c2VyOiBhbnksXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGZvcm1WYWxpZGF0b3JTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwdWJsaWMgdXNlckNvbmZpZ1NlcnZpY2U6IFVzZXJDb25maWdTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLm9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXNlcj4oKTtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMudXNlckNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gIH1cblxuICBnZXQgcm9sZUZvcm1zKCkge1xuICAgIHJldHVybiB0aGlzLnVzZXJGb3JtLmdldCgncm9sZXMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51c2VyVHlwZXMgPSB0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dVc2VyVHlwZXNcbiAgICAgID8gdGhpcy5jb25maWcudXNlckNvbmZpZy51c2VyVHlwZXNcbiAgICAgIDogdGhpcy51c2VyVHlwZXM7XG4gICAgdGhpcy51c2VyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgaWQ6IFsnJ10sXG4gICAgICBuYW1lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICBlbWFpbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSkpLFxuICAgICAgcGFzc3dvcmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycpLFxuICAgICAgcGhvbmU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycpLFxuICAgICAgdXNlcl90eXBlX2lkOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIHJvbGVzOiB0aGlzLmZiLmFycmF5KFtdKSxcbiAgICAgIHJvbGVzX2V4aXN0czogW1tdXSxcbiAgICAgIGNsaWVudF9pZDogWycnXSxcbiAgICAgIHNpZ25hdHVyZV91cmw6IFsnJ10sXG4gICAgICBzaWduYXR1cmU6IFsnJ10sXG4gICAgICBpc190ZW1wb3JhcnlfcGFzc3dvcmQ6IFt0cnVlXSxcbiAgICB9KTtcblxuICAgIHRoaXMudXNlckZvcm0ucGF0Y2hWYWx1ZSh0aGlzLnVzZXIpO1xuICAgIGlmICh0aGlzLnVzZXIuaGFzT3duUHJvcGVydHkoJ2lkJykpIHtcbiAgICAgIHRoaXMudXBkYXRlTW9kZSA9IHRydWU7XG4gICAgICB0aGlzLnVzZXJGb3JtLmNvbnRyb2xzLnVzZXJfdHlwZV9pZC5zZXRWYWx1ZSh0aGlzLnVzZXIudXNlcl90eXBlX2lkKTtcbiAgICAgIHRoaXMudXNlckZvcm0uY29udHJvbHMucm9sZXNfZXhpc3RzLnNldFZhbHVlKHRoaXMudXNlci5yb2xlcyB8fCBbXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dSb2xlcyB8fCB0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dGb3JtUm9sZXMpIHtcbiAgICAgIHRoaXMubG9hZFJvbGVzKCk7XG4gICAgfVxuICAgIHRoaXMuZmlsZUNvbmZpZyA9IHtcbiAgICAgIGZpbGVJZDogJ3N1YmplY3RGaWxlJyxcbiAgICAgIGNvbnRhaW5lcklkOiAnc3ViamVjdEZpbGVDb250YWluZXInLFxuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIGhlaWdodDogJzIwMHB4J1xuICAgICAgfSxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIGFjY2VwdEZpbGU6ICcqJyxcbiAgICAgIG1heFNpemU6IDEwLFxuICAgICAgYWNjZXB0RmlsZVRleHQ6ICdQTkcgYW5kIEpQRUcgb25seSdcbiAgICB9O1xuXG4gICAgdGhpcy52aWV3ZXJDb25maWcgPSB7XG4gICAgICB2aWV3ZXJTdHlsZToge1xuICAgICAgICBoZWlnaHQ6ICcyMDBweCcsXG4gICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbG9hZFJvbGVzKCkge1xuICAgIHRoaXMuaXNXb3JraW5nID0gdHJ1ZTtcbiAgICBsZXQgZmlsdGVyID0ge307XG4gICAgZmlsdGVyID0ge1xuICAgICAgY2xpZW50X2lkOiB0aGlzLnVzZXI/LmNsaWVudF9pZCB8fCAnJyxcbiAgICAgIGlzX3N1YnNjcmliZWQ6IHRydWUsXG4gICAgICBzb3J0X2J5OiAnbGFiZWx8YXNjJ1xuICAgIH07XG4gICAgdGhpcy5odHRwLmdldCgnYXBpL3JvbGVzJywgeyBwYXJhbXM6IGZpbHRlciB9KS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIGxldCByb2xlcyA9IHJlcy5kYXRhO1xuICAgICAgICAvKiBMZXRzIHNldCB0aGUgcm9sZXMgdGhpcyB1c2VyIGhhcyAqL1xuICAgICAgICBmb3IgKGxldCByb2xlIG9mIHJvbGVzKSB7XG4gICAgICAgICAgcm9sZS5zZWxlY3RlZCA9IHRoaXMudXNlckZvcm0udmFsdWUucm9sZXNfZXhpc3RzLmZpbmQocm9sZURhdGEgPT4gcm9sZURhdGEuaWQgPT0gcm9sZS5pZCkgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb2xlcyA9IHJvbGVzO1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhc3luYyBzYXZlKCkge1xuICAgIGlmICghdGhpcy51c2VyRm9ybS52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5pc1dvcmtpbmcgPSB0cnVlO1xuICAgICAgbGV0IGRhdGE6IGFueSA9IHRoaXMudXNlckZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICAgIGxldCByb2xlcyA9IFtdO1xuXG4gICAgICB0aGlzLnJvbGVzLmZvckVhY2goKHJvbGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAocm9sZS5zZWxlY3RlZCkge1xuICAgICAgICAgIHJvbGVzW3JvbGUuaWRdID0gcm9sZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBkYXRhLnJvbGVzID0gcm9sZXM7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudXBkYXRlTW9kZSA/IGF3YWl0IHRoaXMudXNlclNlcnZpY2UudXBkYXRlVXNlcihkYXRhKVxuICAgICAgICA6IGF3YWl0IHRoaXMudXNlclNlcnZpY2UuY3JlYXRlVXNlcihkYXRhKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdTdWNjZXNzZnVsbHkgc2F2ZWQgdGhlIHVzZXIuICcsICdzdWNjZXNzJyk7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJvbGVTZWxlY3RlZChldmVudDogYW55LCByb2xlSWQ6IG51bWJlcikge1xuICAgIHRoaXMucm9sZXMuZm9yRWFjaCgocm9sZTogYW55KSA9PiB7XG4gICAgICBpZiAocm9sZS5pZCA9PSByb2xlSWQpIHtcbiAgICAgICAgcm9sZS5zZWxlY3RlZCA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogTWV0aG9kIHRvIGV2YWx1YXRlIGZvcm0gZmllbGRzKi9cbiAgaXNGaWVsZFZhbGlkKGZpZWxkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWRhdG9yU2VydmljZS5pc0ZpZWxkVmFsaWQoZmllbGQsIHRoaXMudXNlckZvcm0pO1xuICB9XG5cbiAgLyoqIE1ldGhvZCB0byBmaW5kIGVycm9yIGluIGZvcm0gZmllbGRzKi9cbiAgZ2V0RXJyb3JNZXNzYWdlKGZpZWxkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWRhdG9yU2VydmljZS5nZXRFcnJvck1lc3NhZ2UoZmllbGQsIHRoaXMudXNlckZvcm0sIGVycm9yTWVzc2FnZXMpO1xuICB9XG5cbiAgY2xvc2VEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuICBhc3luYyBmaWxlQ2hhbmdlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5maWxlTGlzdCA9IGV2ZW50O1xuXG4gICAgaWYgKHRoaXMuZmlsZUxpc3QubGVuZ3RoID4gMCkge1xuXG4gICAgICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IHRoaXMudXBsb2FkRW50aXR5RmlsZShcbiAgICAgICAgdGhpcy5maWxlTGlzdFswXVxuICAgICAgKTtcbiAgICAgIHRoaXMudXNlckZvcm1cbiAgICAgICAgLmdldCgnc2lnbmF0dXJlJylcbiAgICAgICAgLnNldFZhbHVlKHJlc3VsdC5pdGVtLmZpbGUpO1xuICAgICAgdGhpcy51c2VyRm9ybVxuICAgICAgICAuZ2V0KCdzaWduYXR1cmVfdXJsJylcbiAgICAgICAgLnNldFZhbHVlKHJlc3VsdC5pdGVtLnVybCk7XG4gICAgICB0aGlzLmZpbGVMaXN0ID0gW107XG4gICAgfVxuICB9XG5cblxuICBhc3luYyByZW1vdmVGaWxlKCkge1xuICAgIGlmICh0aGlzLnVzZXJGb3JtLnZhbHVlLnNpZ25hdHVyZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy51c2VyRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICBzaWduYXR1cmU6ICcnLFxuICAgICAgICAgIHNpZ25hdHVyZV91cmw6ICcnXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoJ1VuYWJsZSB0byByZW1vdmUgZmlsZSwgdHJ5IGxhdGVyJywgJ3dhcm4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdXBsb2FkRW50aXR5RmlsZShmaWxlOiBGaWxlKSB7XG4gICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlRGF0YScsIGZpbGUsIGZpbGUubmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnNraXBIZWFkZXIoKVxuICAgICAgLnBvc3QoXG4gICAgICAgICdhcGkvZW50aXR5LWZpbGVzLXVwbG9hZCcsXG4gICAgICAgIGZvcm1EYXRhLFxuICAgICAgKS50b1Byb21pc2UoKTtcbiAgfVxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJ1c2VyRm9ybVwiIChuZ1N1Ym1pdCk9XCJzYXZlKClcIj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMgY2VudGVyIGdhcC0xXCIgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxoNSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1jZW50ZXJcIj57eyB1cGRhdGVNb2RlID8gJ0VkaXQnIDogJ0NyZWF0ZSAnIH19IFVzZXI8L2g1PlxuICAgIDxkaXYgZnhMYXlvdXQ+XG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGbGV4IGZ4TGF5b3V0R2FwPVwiMC4yNXJlbVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5GdWxsIG5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgW3JlcXVpcmVkXT1cIiEhdXNlckZvcm0uZ2V0KCduYW1lJykudmFsaWRhdG9yXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIG1hdElucHV0XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZ1bGwgTmFtZVwiIHR5cGU9XCJ0ZXh0XCIgLz5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCduYW1lJykgJiYgISF1c2VyRm9ybS5nZXQoJ25hbWUnKS52YWxpZGF0b3JcIj57eyBnZXRFcnJvck1lc3NhZ2UoJ25hbWUnKSB9fVxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5FbWFpbDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBbcmVxdWlyZWRdPVwiISF1c2VyRm9ybS5nZXQoJ2VtYWlsJykudmFsaWRhdG9yXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkVtYWlsXCJcbiAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiIC8+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgnZW1haWwnKSAmJiAhIXVzZXJGb3JtLmdldCgnZW1haWwnKS52YWxpZGF0b3JcIj5cbiAgICAgICAgICAgIHt7IGdldEVycm9yTWVzc2FnZSgnZW1haWwnKSB9fVxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJ0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dQaG9uZVwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+UGhvbmU8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlBob25lXCIgdHlwZT1cInRleHRcIiAvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5QYXNzd29yZDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBbcmVxdWlyZWRdPVwiaXNQYXNzd29yZFJlcXVpcmVkICYmICEhdXNlckZvcm0uZ2V0KCdwYXNzd29yZCcpLnZhbGlkYXRvclwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiB0eXBlPVwicGFzc3dvcmRcIiAvPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3Bhc3N3b3JkJykgJiYgISF1c2VyRm9ybS5nZXQoJ3Bhc3N3b3JkJykudmFsaWRhdG9yXCI+XG4gICAgICAgICAgICB7eyBnZXRFcnJvck1lc3NhZ2UoJ3Bhc3N3b3JkJykgfX1cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtMVwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwiaXNfdGVtcG9yYXJ5X3Bhc3N3b3JkXCI+SXMgVGVtcG9yYXJ5IFBhc3N3b3JkPzwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+U2hvdWxkIHRoaXMgdXNlciB0byB1cGRhdGUgcGFzc3dvcmQgb24gZmlyc3QgbG9naW4/PC9zbWFsbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd1NpZ25hdHVyZVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZmlsZVVwbG9hZD5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgIDxkaXY+VXNlciBTaWduYXR1cmU8L2Rpdj5cbiAgICAgICAgICAgICAgPGFwcC1maWxlLWRyb3BwZXIgKGZpbGVDaGFuZ2VkKT1cImZpbGVDaGFuZ2VkKCRldmVudClcIiBbY29uZmlnXT1cImZpbGVDb25maWdcIiBbZmlsZUFycmF5XT1cImZpbGVMaXN0XCI+XG4gICAgICAgICAgICAgIDwvYXBwLWZpbGUtZHJvcHBlcj5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyRm9ybS5nZXQoJ3NpZ25hdHVyZScpLnZhbHVlO2Vsc2UgZmlsZVVwbG9hZDtcIiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgPGFwcC1kb2N1bWVudC12aWV3ZXIgKHJlbW92ZSk9XCJyZW1vdmVGaWxlKClcIiBbY29uZmlnXT1cInRoaXMudmlld2VyQ29uZmlnXCJcbiAgICAgICAgICAgICAgW2ZpbGVVcmxdPVwidXNlckZvcm0uZ2V0KCdzaWduYXR1cmVfdXJsJykudmFsdWVcIiBbZmlsZV09XCJ1c2VyRm9ybS5nZXQoJ3NpZ25hdHVyZScpLnZhbHVlXCI+XG4gICAgICAgICAgICA8L2FwcC1kb2N1bWVudC12aWV3ZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJ0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dVc2VyVHlwZXNcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlVzZXIgVHlwZTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cInVzZXJfdHlwZV9pZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHVzZXJUeXBlIG9mIHVzZXJUeXBlc1wiIFt2YWx1ZV09XCJ1c2VyVHlwZS52YWx1ZVwiPlxuICAgICAgICAgICAgICB7eyB1c2VyVHlwZS50aXRsZSB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCd1c2VyX3R5cGVfaWQnKVwiPnt7IGdldEVycm9yTWVzc2FnZSgndXNlcl90eXBlX2lkJykgfX08L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiKHRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd1JvbGVzIHx8IHRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd0Zvcm1Sb2xlcykgJiYgdGhpcy51c2VyRm9ybS5nZXQoJ3VzZXJfdHlwZV9pZCcpLnZhbHVlID09IDNcIlxuICAgICAgICBmeEZsZXggY2xhc3M9XCJtbC00XCI+XG4gICAgICAgIDxwIGNsYXNzPVwibWItMCBmdy1ib2xkXCI+XG4gICAgICAgICAgUm9sZXNcbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb2xlIG9mIHJvbGVzXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwicm9sZVNlbGVjdGVkKCRldmVudCwgcm9sZS5pZClcIiBbY2hlY2tlZF09XCJyb2xlLnNlbGVjdGVkXCI+XG4gICAgICAgICAgICB7eyByb2xlLmxhYmVsIH19XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIiBjb2xvcj1cInByaW1hcnlcIiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwic3VibWl0XCI+XG4gICAgICAgIFNhdmVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIiBtYXQtZmxhdC1idXR0b24gdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICBDYW5jZWxcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZm9ybT4iXX0=