ngx-techlify-core 16.1.0 → 16.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/esm2022/lib/core/authentication.service.mjs +11 -6
  2. package/esm2022/lib/login/login.component.mjs +22 -9
  3. package/esm2022/lib/note/note-list/note-list.component.mjs +33 -41
  4. package/esm2022/lib/note/note.module.mjs +9 -5
  5. package/esm2022/lib/signup/signup.component.mjs +2 -2
  6. package/esm2022/lib/user/index.mjs +4 -1
  7. package/esm2022/lib/user/user-form.component.mjs +5 -5
  8. package/esm2022/lib/user/user-sessions/user-session.service.mjs +18 -0
  9. package/esm2022/lib/user/user-sessions/user-sessions/user-sessions.component.mjs +49 -0
  10. package/esm2022/lib/user/user-view.component.mjs +9 -5
  11. package/esm2022/lib/user/user.model.mjs +3 -1
  12. package/esm2022/lib/user/user.module.mjs +16 -3
  13. package/esm2022/lib/user-client-enable-disable-button/user-client-enable-disable-button.component.mjs +59 -0
  14. package/esm2022/lib/user-clients-list/user-client.service.mjs +24 -0
  15. package/esm2022/lib/user-clients-list/user-clients-list.component.mjs +52 -0
  16. package/fesm2022/ngx-techlify-core.mjs +264 -71
  17. package/fesm2022/ngx-techlify-core.mjs.map +1 -1
  18. package/lib/core/authentication.service.d.ts +1 -1
  19. package/lib/login/login.component.d.ts +2 -0
  20. package/lib/note/note-list/note-list.component.d.ts +3 -7
  21. package/lib/note/note.module.d.ts +2 -1
  22. package/lib/user/index.d.ts +3 -0
  23. package/lib/user/user-sessions/user-session.service.d.ts +8 -0
  24. package/lib/user/user-sessions/user-sessions/user-sessions.component.d.ts +15 -0
  25. package/lib/user/user-view.component.d.ts +3 -1
  26. package/lib/user/user.model.d.ts +1 -0
  27. package/lib/user/user.module.d.ts +20 -17
  28. package/lib/user-client-enable-disable-button/user-client-enable-disable-button.component.d.ts +22 -0
  29. package/lib/user-clients-list/user-client.service.d.ts +11 -0
  30. package/lib/user-clients-list/user-clients-list.component.d.ts +15 -0
  31. package/package.json +1 -1
@@ -1,6 +1,5 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { NoteListComponent } from './note-list/note-list.component';
4
3
  import { NoteFormComponent } from './note-form/note-form.component';
5
4
  import { InfiniteScrollModule } from 'ngx-infinite-scroll';
6
5
  import { ReactiveFormsModule } from '@angular/forms';
@@ -9,6 +8,8 @@ import { ActionPopupModule } from '../action-popup/action-popup.module';
9
8
  import { MaterialModule } from '../material.module';
10
9
  import { CommentFormComponent } from './comment-form/comment-form.component';
11
10
  import { ReadMoreModule } from '../read-more/read-more.module';
11
+ import { NoteListComponent } from './note-list/note-list.component';
12
+ import { MatProgressBarModule } from "@angular/material/progress-bar";
12
13
  import * as i0 from "@angular/core";
13
14
  export class NoteModule {
14
15
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NoteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -20,14 +21,16 @@ export class NoteModule {
20
21
  FlexLayoutModule,
21
22
  ActionPopupModule,
22
23
  MaterialModule,
23
- ReadMoreModule], exports: [NoteListComponent] });
24
+ ReadMoreModule,
25
+ MatProgressBarModule], exports: [NoteListComponent] });
24
26
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NoteModule, imports: [CommonModule,
25
27
  ReactiveFormsModule,
26
28
  InfiniteScrollModule,
27
29
  FlexLayoutModule,
28
30
  ActionPopupModule,
29
31
  MaterialModule,
30
- ReadMoreModule] });
32
+ ReadMoreModule,
33
+ MatProgressBarModule] });
31
34
  }
32
35
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NoteModule, decorators: [{
33
36
  type: NgModule,
@@ -44,11 +47,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
44
47
  FlexLayoutModule,
45
48
  ActionPopupModule,
46
49
  MaterialModule,
47
- ReadMoreModule
50
+ ReadMoreModule,
51
+ MatProgressBarModule
48
52
  ],
49
53
  exports: [
50
54
  NoteListComponent
51
55
  ]
52
56
  }]
53
57
  }] });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL25vdGUvbm90ZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFxQi9ELE1BQU0sT0FBTyxVQUFVO3dHQUFWLFVBQVU7eUdBQVYsVUFBVSxpQkFqQmYsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQixvQkFBb0IsYUFHcEIsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2QsY0FBYyxhQUdkLGlCQUFpQjt5R0FHWixVQUFVLFlBWmYsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2QsY0FBYzs7NEZBTVQsVUFBVTtrQkFuQnRCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFO3dCQUNWLGlCQUFpQjt3QkFDakIsaUJBQWlCO3dCQUNqQixvQkFBb0I7cUJBQ3ZCO29CQUNELE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxjQUFjO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsaUJBQWlCO3FCQUNwQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTm90ZUxpc3RDb21wb25lbnQgfSBmcm9tICcuL25vdGUtbGlzdC9ub3RlLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IE5vdGVGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9ub3RlLWZvcm0vbm90ZS1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbmZpbml0ZVNjcm9sbE1vZHVsZSB9IGZyb20gJ25neC1pbmZpbml0ZS1zY3JvbGwnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7XG5pbXBvcnQgeyBBY3Rpb25Qb3B1cE1vZHVsZSB9IGZyb20gJy4uL2FjdGlvbi1wb3B1cC9hY3Rpb24tcG9wdXAubW9kdWxlJztcbmltcG9ydCB7IE1hdGVyaWFsTW9kdWxlIH0gZnJvbSAnLi4vbWF0ZXJpYWwubW9kdWxlJztcbmltcG9ydCB7IENvbW1lbnRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21tZW50LWZvcm0vY29tbWVudC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWFkTW9yZU1vZHVsZSB9IGZyb20gJy4uL3JlYWQtbW9yZS9yZWFkLW1vcmUubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgTm90ZUxpc3RDb21wb25lbnQsXG4gICAgICAgIE5vdGVGb3JtQ29tcG9uZW50LFxuICAgICAgICBDb21tZW50Rm9ybUNvbXBvbmVudCxcbiAgICBdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBJbmZpbml0ZVNjcm9sbE1vZHVsZSxcbiAgICAgICAgRmxleExheW91dE1vZHVsZSxcbiAgICAgICAgQWN0aW9uUG9wdXBNb2R1bGUsXG4gICAgICAgIE1hdGVyaWFsTW9kdWxlLFxuICAgICAgICBSZWFkTW9yZU1vZHVsZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBOb3RlTGlzdENvbXBvbmVudFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTm90ZU1vZHVsZSB7IH1cbiJdfQ==
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL25vdGUvbm90ZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFzQnBFLE1BQU0sT0FBTyxVQUFVO3dHQUFWLFVBQVU7eUdBQVYsVUFBVSxpQkFsQmYsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQixvQkFBb0IsYUFHeEIsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2QsY0FBYztZQUNkLG9CQUFvQixhQUdoQixpQkFBaUI7eUdBR1osVUFBVSxZQWJuQixZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQixnQkFBZ0I7WUFDaEIsaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxjQUFjO1lBQ2Qsb0JBQW9COzs0RkFNWCxVQUFVO2tCQXBCdEIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUU7d0JBQ1YsaUJBQWlCO3dCQUNqQixpQkFBaUI7d0JBQ2pCLG9CQUFvQjtxQkFDdkI7b0JBQ0gsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGNBQWM7d0JBQ2Qsb0JBQW9CO3FCQUNyQjtvQkFDQyxPQUFPLEVBQUU7d0JBQ0wsaUJBQWlCO3FCQUNwQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTm90ZUZvcm1Db21wb25lbnQgfSBmcm9tICcuL25vdGUtZm9ybS9ub3RlLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEluZmluaXRlU2Nyb2xsTW9kdWxlIH0gZnJvbSAnbmd4LWluZmluaXRlLXNjcm9sbCc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0JztcbmltcG9ydCB7IEFjdGlvblBvcHVwTW9kdWxlIH0gZnJvbSAnLi4vYWN0aW9uLXBvcHVwL2FjdGlvbi1wb3B1cC5tb2R1bGUnO1xuaW1wb3J0IHsgTWF0ZXJpYWxNb2R1bGUgfSBmcm9tICcuLi9tYXRlcmlhbC5tb2R1bGUnO1xuaW1wb3J0IHsgQ29tbWVudEZvcm1Db21wb25lbnQgfSBmcm9tICcuL2NvbW1lbnQtZm9ybS9jb21tZW50LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFJlYWRNb3JlTW9kdWxlIH0gZnJvbSAnLi4vcmVhZC1tb3JlL3JlYWQtbW9yZS5tb2R1bGUnO1xuaW1wb3J0IHsgTm90ZUxpc3RDb21wb25lbnQgfSBmcm9tICcuL25vdGUtbGlzdC9ub3RlLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7TWF0UHJvZ3Jlc3NCYXJNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXJcIjtcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgTm90ZUxpc3RDb21wb25lbnQsXG4gICAgICAgIE5vdGVGb3JtQ29tcG9uZW50LFxuICAgICAgICBDb21tZW50Rm9ybUNvbXBvbmVudCxcbiAgICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgSW5maW5pdGVTY3JvbGxNb2R1bGUsXG4gICAgRmxleExheW91dE1vZHVsZSxcbiAgICBBY3Rpb25Qb3B1cE1vZHVsZSxcbiAgICBNYXRlcmlhbE1vZHVsZSxcbiAgICBSZWFkTW9yZU1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZVxuICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgTm90ZUxpc3RDb21wb25lbnRcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5vdGVNb2R1bGUgeyB9XG4iXX0=
@@ -78,10 +78,10 @@ export class SignUpComponent {
78
78
  return this.formValidatorService.getErrorMessage(field, this.signUpForm, errorMessages);
79
79
  }
80
80
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SignUpComponent, deps: [{ token: i1.HttpService }, { token: i1.AlertService }, { token: i2.Router }, { token: i1.ErrorHandlerService }, { token: i3.UntypedFormBuilder }, { token: i1.FormValidatorService }, { token: i4.UserConfigService }], target: i0.ɵɵFactoryTarget.Component });
81
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SignUpComponent, selector: "signup", ngImport: i0, template: "<div class=\"h-100 row align-items-center mx-0\">\n <div class=\"col\">\n <header class=\"branding-block mb-0 mt-4\">\n <div class=\"branding text-center\">\n <a *ngIf=\"userConfig.appLogoUrl\" href=\"{{userConfig.appUrl}}\" target=\"_blank\">\n <img class=\"techlify-logo d-inline-block\" [src]=\"userConfig.appLogoUrl\" />\n </a>\n </div>\n <div class=\"product-info text-center mt-2\">\n <h3 class=\"product-name\">{{ userConfig.appName }}</h3>\n </div>\n </header>\n\n <div id=\"login-form-wrapper\"\n class=\"form-bordered mx-auto form-medium form-bordered form-centered form-horizontal mt-3 white-box\"\n style=\"width:550px\">\n\n <h4 class=\"section-title text-center\">REGISTER</h4>\n\n <form [formGroup]=\"signUpForm\" (ngSubmit)=\"signUp()\" class=\"pt-4 pr-4 pl-4 pb-1 mt-4 ml-4 mr-4 mb-1\">\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"business_name\" placeholder=\"Business / Company Name\"\n type=\"text\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('business_name')\">{{getErrorMessage('business_name')}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"business_email\" placeholder=\"Business / Company Email\"\n type=\"email\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('business_email')\">{{getErrorMessage('business_email')}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"user_name\" placeholder=\"User Name\" type=\"text\"\n autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('user_name')\">{{getErrorMessage('user_name')}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"user_email\" placeholder=\"User Email\" type=\"email\"\n autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('user_email')\">{{getErrorMessage('user_email')}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"row mt-4\">\n <div class=\"col-12 text-center\">\n <button mat-button type=\"submit\" class=\"btn btn-sm btn-primary w-100\"\n [disabled]=\"isWorking\">Register</button>\n </div>\n </div>\n <div class=\"row mt-2\" *ngIf=\"userConfig.showSocialLogin\">\n <div class=\"col-6\">\n <button class=\"col-12 google-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('google')\">Google</button>\n </div>\n <div class=\"col-6\">\n <button class=\"col-12 facebook-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('facebook')\">Facebook</button>\n </div>\n </div>\n </form>\n </div>\n <div class=\"row mt-3 mr-0 ml-0\">\n <div class=\"col-12 text-center\">\n <p>Already an {{ userConfig.appName }} member?</p>\n <button mat-button class=\"btn btn-sm btn-secondary text-white\" style=\"width: 550px;\" type=\"button\"\n [routerLink]=\"['/login']\">\n Continue with login\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["#login-form-wrapper{margin-top:40px}#login-form-wrapper .branding-block{margin-bottom:60px}#login-form-wrapper .techlify-logo{height:40px;padding-right:10px;bottom:10px;position:relative}#login-form-wrapper .company-name{margin-bottom:0}#login-form-wrapper .google-button{background:#ce1d1d;color:#fff}#login-form-wrapper .facebook-button{background:#38388e;color:#fff}:host{width:100%}.white-box{background-color:#fff;padding:10px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.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: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
81
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SignUpComponent, selector: "signup", ngImport: i0, template: "<div class=\"h-100 row align-items-center mx-0\">\n <div class=\"col\">\n <header class=\"branding-block mb-0 mt-4\">\n <div class=\"branding text-center\">\n <a *ngIf=\"userConfig.appLogoUrl\" href=\"{{userConfig.appUrl}}\" target=\"_blank\">\n <img class=\"techlify-logo d-inline-block\" [src]=\"userConfig.appLogoUrl\" />\n </a>\n </div>\n <div class=\"product-info text-center mt-2\">\n <h3 class=\"product-name\">{{ userConfig.appName }}</h3>\n </div>\n </header>\n\n <div id=\"login-form-wrapper\"\n class=\"form-bordered mx-auto form-medium form-bordered form-centered form-horizontal mt-3 white-box\"\n style=\"width:550px\">\n\n <h4 class=\"section-title text-center\">REGISTER</h4>\n\n <form [formGroup]=\"signUpForm\" (ngSubmit)=\"signUp()\" class=\"pt-4 pr-4 pl-4 pb-1 mt-4 ml-4 mr-4 mb-1\">\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"business_name\" placeholder=\"Business / Company Name\"\n type=\"text\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('business_name')\">{{getErrorMessage('business_name')}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"business_email\" placeholder=\"Business / Company Email\"\n type=\"email\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('business_email')\">{{getErrorMessage('business_email')}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"user_name\" placeholder=\"User Name\" type=\"text\"\n autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('user_name')\">{{getErrorMessage('user_name')}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"user_email\" placeholder=\"User Email\" type=\"email\"\n autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('user_email')\">{{getErrorMessage('user_email')}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"row mt-4\">\n <div class=\"col-12 text-center\">\n <button mat-button type=\"submit\" class=\"btn btn-sm btn-primary w-100\"\n [disabled]=\"isWorking\">Register</button>\n </div>\n </div>\n <div class=\"row mt-2\" *ngIf=\"userConfig.showSocialLogin\">\n <div class=\"col-6\">\n <button class=\"col-12 google-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('google')\">Google</button>\n </div>\n <div class=\"col-6\">\n <button class=\"col-12 facebook-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('facebook')\">Facebook</button>\n </div>\n </div>\n </form>\n </div>\n <div class=\"row mt-3 mr-0 ml-0\">\n <div class=\"col-12 text-center\">\n <p>Already an {{ userConfig.appName }} member?</p>\n <button mat-button class=\"btn btn-sm btn-secondary text-white\" style=\"width: 550px;\" type=\"button\"\n [routerLink]=\"['/login']\">\n Continue with login\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["#login-form-wrapper{margin-top:40px}#login-form-wrapper .branding-block{margin-bottom:60px}#login-form-wrapper .techlify-logo{height:40px;padding-right:10px;bottom:10px;position:relative}#login-form-wrapper .company-name{margin-bottom:0}#login-form-wrapper .google-button{background:#ce1d1d;color:#fff}#login-form-wrapper .facebook-button{background:#38388e;color:#fff}:host{width:100%}.white-box{background-color:#fff;padding:10px}mat-selection-list{width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}mat-list-option{border:1px solid #ccc;text-align:center;border-radius:4px;padding:10px;cursor:pointer}mat-list-option:hover{background-color:#f0f0f0}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.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: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
82
82
  }
83
83
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SignUpComponent, decorators: [{
84
84
  type: Component,
85
- args: [{ selector: 'signup', template: "<div class=\"h-100 row align-items-center mx-0\">\n <div class=\"col\">\n <header class=\"branding-block mb-0 mt-4\">\n <div class=\"branding text-center\">\n <a *ngIf=\"userConfig.appLogoUrl\" href=\"{{userConfig.appUrl}}\" target=\"_blank\">\n <img class=\"techlify-logo d-inline-block\" [src]=\"userConfig.appLogoUrl\" />\n </a>\n </div>\n <div class=\"product-info text-center mt-2\">\n <h3 class=\"product-name\">{{ userConfig.appName }}</h3>\n </div>\n </header>\n\n <div id=\"login-form-wrapper\"\n class=\"form-bordered mx-auto form-medium form-bordered form-centered form-horizontal mt-3 white-box\"\n style=\"width:550px\">\n\n <h4 class=\"section-title text-center\">REGISTER</h4>\n\n <form [formGroup]=\"signUpForm\" (ngSubmit)=\"signUp()\" class=\"pt-4 pr-4 pl-4 pb-1 mt-4 ml-4 mr-4 mb-1\">\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"business_name\" placeholder=\"Business / Company Name\"\n type=\"text\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('business_name')\">{{getErrorMessage('business_name')}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"business_email\" placeholder=\"Business / Company Email\"\n type=\"email\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('business_email')\">{{getErrorMessage('business_email')}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"user_name\" placeholder=\"User Name\" type=\"text\"\n autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('user_name')\">{{getErrorMessage('user_name')}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"user_email\" placeholder=\"User Email\" type=\"email\"\n autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('user_email')\">{{getErrorMessage('user_email')}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"row mt-4\">\n <div class=\"col-12 text-center\">\n <button mat-button type=\"submit\" class=\"btn btn-sm btn-primary w-100\"\n [disabled]=\"isWorking\">Register</button>\n </div>\n </div>\n <div class=\"row mt-2\" *ngIf=\"userConfig.showSocialLogin\">\n <div class=\"col-6\">\n <button class=\"col-12 google-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('google')\">Google</button>\n </div>\n <div class=\"col-6\">\n <button class=\"col-12 facebook-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('facebook')\">Facebook</button>\n </div>\n </div>\n </form>\n </div>\n <div class=\"row mt-3 mr-0 ml-0\">\n <div class=\"col-12 text-center\">\n <p>Already an {{ userConfig.appName }} member?</p>\n <button mat-button class=\"btn btn-sm btn-secondary text-white\" style=\"width: 550px;\" type=\"button\"\n [routerLink]=\"['/login']\">\n Continue with login\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["#login-form-wrapper{margin-top:40px}#login-form-wrapper .branding-block{margin-bottom:60px}#login-form-wrapper .techlify-logo{height:40px;padding-right:10px;bottom:10px;position:relative}#login-form-wrapper .company-name{margin-bottom:0}#login-form-wrapper .google-button{background:#ce1d1d;color:#fff}#login-form-wrapper .facebook-button{background:#38388e;color:#fff}:host{width:100%}.white-box{background-color:#fff;padding:10px}\n"] }]
85
+ args: [{ selector: 'signup', template: "<div class=\"h-100 row align-items-center mx-0\">\n <div class=\"col\">\n <header class=\"branding-block mb-0 mt-4\">\n <div class=\"branding text-center\">\n <a *ngIf=\"userConfig.appLogoUrl\" href=\"{{userConfig.appUrl}}\" target=\"_blank\">\n <img class=\"techlify-logo d-inline-block\" [src]=\"userConfig.appLogoUrl\" />\n </a>\n </div>\n <div class=\"product-info text-center mt-2\">\n <h3 class=\"product-name\">{{ userConfig.appName }}</h3>\n </div>\n </header>\n\n <div id=\"login-form-wrapper\"\n class=\"form-bordered mx-auto form-medium form-bordered form-centered form-horizontal mt-3 white-box\"\n style=\"width:550px\">\n\n <h4 class=\"section-title text-center\">REGISTER</h4>\n\n <form [formGroup]=\"signUpForm\" (ngSubmit)=\"signUp()\" class=\"pt-4 pr-4 pl-4 pb-1 mt-4 ml-4 mr-4 mb-1\">\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"business_name\" placeholder=\"Business / Company Name\"\n type=\"text\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('business_name')\">{{getErrorMessage('business_name')}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"business_email\" placeholder=\"Business / Company Email\"\n type=\"email\" autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('business_email')\">{{getErrorMessage('business_email')}}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"user_name\" placeholder=\"User Name\" type=\"text\"\n autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('user_name')\">{{getErrorMessage('user_name')}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"form-group row\">\n <mat-form-field class=\"col-12\">\n <input matInput formControlName=\"user_email\" placeholder=\"User Email\" type=\"email\"\n autocomplete=\"off\" required />\n <mat-error *ngIf=\"isFieldValid('user_email')\">{{getErrorMessage('user_email')}}</mat-error>\n </mat-form-field>\n </div>\n <div class=\"row mt-4\">\n <div class=\"col-12 text-center\">\n <button mat-button type=\"submit\" class=\"btn btn-sm btn-primary w-100\"\n [disabled]=\"isWorking\">Register</button>\n </div>\n </div>\n <div class=\"row mt-2\" *ngIf=\"userConfig.showSocialLogin\">\n <div class=\"col-6\">\n <button class=\"col-12 google-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('google')\">Google</button>\n </div>\n <div class=\"col-6\">\n <button class=\"col-12 facebook-button\" mat-raised-button type=\"button\"\n (click)=\"redirect('facebook')\">Facebook</button>\n </div>\n </div>\n </form>\n </div>\n <div class=\"row mt-3 mr-0 ml-0\">\n <div class=\"col-12 text-center\">\n <p>Already an {{ userConfig.appName }} member?</p>\n <button mat-button class=\"btn btn-sm btn-secondary text-white\" style=\"width: 550px;\" type=\"button\"\n [routerLink]=\"['/login']\">\n Continue with login\n </button>\n </div>\n </div>\n </div>\n</div>", styles: ["#login-form-wrapper{margin-top:40px}#login-form-wrapper .branding-block{margin-bottom:60px}#login-form-wrapper .techlify-logo{height:40px;padding-right:10px;bottom:10px;position:relative}#login-form-wrapper .company-name{margin-bottom:0}#login-form-wrapper .google-button{background:#ce1d1d;color:#fff}#login-form-wrapper .facebook-button{background:#38388e;color:#fff}:host{width:100%}.white-box{background-color:#fff;padding:10px}mat-selection-list{width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}mat-list-option{border:1px solid #ccc;text-align:center;border-radius:4px;padding:10px;cursor:pointer}mat-list-option:hover{background-color:#f0f0f0}\n"] }]
86
86
  }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i1.AlertService }, { type: i2.Router }, { type: i1.ErrorHandlerService }, { type: i3.UntypedFormBuilder }, { type: i1.FormValidatorService }, { type: i4.UserConfigService }]; } });
87
87
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbnVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvc2lnbnVwL3NpZ251cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3NpZ251cC9zaWdudXAuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBd0MsVUFBVSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFPdEcsTUFBTSxhQUFhLEdBQVE7SUFDdkIsY0FBYyxFQUFFO1FBQ1osUUFBUSxFQUFFLDRCQUE0QjtRQUN0QyxLQUFLLEVBQUUsZUFBZTtLQUN6QjtJQUNELGFBQWEsRUFBRTtRQUNYLFFBQVEsRUFBRSwyQkFBMkI7S0FDeEM7SUFDRCxVQUFVLEVBQUU7UUFDUixRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLEtBQUssRUFBRSxlQUFlO0tBQ3pCO0lBQ0QsU0FBUyxFQUFFO1FBQ1AsUUFBUSxFQUFFLHVCQUF1QjtLQUNwQztDQUNKLENBQUM7QUFPRixNQUFNLE9BQU8sZUFBZTtJQUtKO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBVm5CLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsVUFBVSxDQUFtQjtJQUM3QixVQUFVLENBQWtCO0lBRTVCLFlBQW9CLElBQWlCLEVBQ2pCLFlBQTBCLEVBQzFCLE1BQWMsRUFDZCxZQUFpQyxFQUNqQyxFQUFzQixFQUN0QixvQkFBMEMsRUFDM0MsaUJBQW9DO1FBTm5DLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzNDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFbkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLGFBQWEsRUFBRSxJQUFJLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDcEYsY0FBYyxFQUFFLElBQUksa0JBQWtCLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3ZHLFNBQVMsRUFBRSxJQUFJLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDaEYsVUFBVSxFQUFFLElBQUksa0JBQWtCLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3RHLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELFFBQVEsS0FBSyxDQUFDO0lBRWQsTUFBTTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUN4QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDekUsR0FBRyxDQUFDLEVBQUU7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxFQUNELEtBQUssQ0FBQyxFQUFFO1lBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMseUJBQXlCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQVE7UUFDYixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztJQUM3RSxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLFlBQVksQ0FBQyxLQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsZUFBZSxDQUFDLEtBQWE7UUFDekIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzVGLENBQUM7d0dBckRRLGVBQWU7NEZBQWYsZUFBZSw4Q0NoQzVCLDZ1SUE4RU07OzRGRDlDTyxlQUFlO2tCQUwzQixTQUFTOytCQUNJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgRXJyb3JIYW5kbGVyU2VydmljZSwgRm9ybVZhbGlkYXRvclNlcnZpY2UsIEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZSc7XG5cbmltcG9ydCB7IFVzZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci1jb25maWcnO1xuaW1wb3J0IHsgTXVsdGlVc2VyQ29uZmlnIH0gZnJvbSAnLi4vdXNlci1jb25maWcnO1xuXG5jb25zdCBlcnJvck1lc3NhZ2VzOiBhbnkgPSB7XG4gICAgYnVzaW5lc3NfZW1haWw6IHtcbiAgICAgICAgcmVxdWlyZWQ6ICdCdXNpbmVzcyBlbWFpbCBpcyByZXF1aXJlZCcsXG4gICAgICAgIGVtYWlsOiAnSW52YWxpZCBlbWFpbCdcbiAgICB9LFxuICAgIGJ1c2luZXNzX25hbWU6IHtcbiAgICAgICAgcmVxdWlyZWQ6ICdCdXNpbmVzcyBuYW1lIGlzIHJlcXVpcmVkJ1xuICAgIH0sXG4gICAgdXNlcl9lbWFpbDoge1xuICAgICAgICByZXF1aXJlZDogJ1VzZXIgZW1haWwgaXMgcmVxdWlyZWQnLFxuICAgICAgICBlbWFpbDogJ0ludmFsaWQgZW1haWwnXG4gICAgfSxcbiAgICB1c2VyX25hbWU6IHtcbiAgICAgICAgcmVxdWlyZWQ6ICdVc2VyIG5hbWUgaXMgcmVxdWlyZWQnXG4gICAgfVxufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzaWdudXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaWdudXAuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4uL2xvZ2luL2xvZ2luLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTaWduVXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGlzV29ya2luZyA9IGZhbHNlO1xuICAgIHNpZ25VcEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gICAgdXNlckNvbmZpZzogTXVsdGlVc2VyQ29uZmlnO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBlcnJvclNlcnZpY2U6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgZm9ybVZhbGlkYXRvclNlcnZpY2U6IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHB1YmxpYyB1c2VyQ29uZmlnU2VydmljZTogVXNlckNvbmZpZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5zaWduVXBGb3JtID0gZmIuZ3JvdXAoe1xuICAgICAgICAgICAgYnVzaW5lc3NfbmFtZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgICAgICAgYnVzaW5lc3NfZW1haWw6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5lbWFpbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcbiAgICAgICAgICAgIHVzZXJfbmFtZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgICAgICAgdXNlcl9lbWFpbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLmVtYWlsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51c2VyQ29uZmlnID0gdXNlckNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7IH1cblxuICAgIHNpZ25VcCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNpZ25VcEZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuaHR0cC5wb3N0KCdhcGkvY29tcGFueS1zaWduLXVwJywgdGhpcy5zaWduVXBGb3JtLnZhbHVlKS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnU3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgYW4gYWNjb3VudCcsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvdXNlci9sb2dpbiddKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnQWNjb3VudCBBbHJlYWR5IGV4aXN0cy4nLCAnd2FybmluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJlZGlyZWN0KHByb3ZpZGVyKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy51c2VyQ29uZmlnLnNvY2lhbExvZ2luUmVkaXJlY3RVcmwgKyBwcm92aWRlcjtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRvIGV2YWx1YXRlIGZvcm0gZmllbGRzKi9cbiAgICBpc0ZpZWxkVmFsaWQoZmllbGQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWRhdG9yU2VydmljZS5pc0ZpZWxkVmFsaWQoZmllbGQsIHRoaXMuc2lnblVwRm9ybSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0byBmaW5kIGVycm9yIGluIGZvcm0gZmllbGRzKi9cbiAgICBnZXRFcnJvck1lc3NhZ2UoZmllbGQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWRhdG9yU2VydmljZS5nZXRFcnJvck1lc3NhZ2UoZmllbGQsIHRoaXMuc2lnblVwRm9ybSwgZXJyb3JNZXNzYWdlcyk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImgtMTAwICByb3cgYWxpZ24taXRlbXMtY2VudGVyIG14LTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgIDxoZWFkZXIgY2xhc3M9XCJicmFuZGluZy1ibG9jayBtYi0wIG10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJicmFuZGluZyB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwidXNlckNvbmZpZy5hcHBMb2dvVXJsXCIgaHJlZj1cInt7dXNlckNvbmZpZy5hcHBVcmx9fVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidGVjaGxpZnktbG9nbyBkLWlubGluZS1ibG9ja1wiIFtzcmNdPVwidXNlckNvbmZpZy5hcHBMb2dvVXJsXCIgLz5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LWluZm8gdGV4dC1jZW50ZXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInByb2R1Y3QtbmFtZVwiPnt7IHVzZXJDb25maWcuYXBwTmFtZSB9fTwvaDM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgPGRpdiBpZD1cImxvZ2luLWZvcm0td3JhcHBlclwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tYm9yZGVyZWQgbXgtYXV0byBmb3JtLW1lZGl1bSBmb3JtLWJvcmRlcmVkIGZvcm0tY2VudGVyZWQgZm9ybS1ob3Jpem9udGFsIG10LTMgd2hpdGUtYm94XCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NTUwcHhcIj5cblxuICAgICAgICAgICAgPGg0IGNsYXNzPVwic2VjdGlvbi10aXRsZSB0ZXh0LWNlbnRlclwiPlJFR0lTVEVSPC9oND5cblxuICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzaWduVXBGb3JtXCIgKG5nU3VibWl0KT1cInNpZ25VcCgpXCIgY2xhc3M9XCJwdC00IHByLTQgcGwtNCBwYi0xIG10LTQgbWwtNCBtci00IG1iLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYnVzaW5lc3NfbmFtZVwiIHBsYWNlaG9sZGVyPVwiQnVzaW5lc3MgLyBDb21wYW55IE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ2J1c2luZXNzX25hbWUnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKCdidXNpbmVzc19uYW1lJyl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImJ1c2luZXNzX2VtYWlsXCIgcGxhY2Vob2xkZXI9XCJCdXNpbmVzcyAvIENvbXBhbnkgRW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHJlcXVpcmVkIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdidXNpbmVzc19lbWFpbCcpXCI+e3tnZXRFcnJvck1lc3NhZ2UoJ2J1c2luZXNzX2VtYWlsJyl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInVzZXJfbmFtZVwiIHBsYWNlaG9sZGVyPVwiVXNlciBOYW1lXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHJlcXVpcmVkIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCd1c2VyX25hbWUnKVwiPnt7Z2V0RXJyb3JNZXNzYWdlKCd1c2VyX25hbWUnKX19PC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInVzZXJfZW1haWxcIiBwbGFjZWhvbGRlcj1cIlVzZXIgRW1haWxcIiB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHJlcXVpcmVkIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCd1c2VyX2VtYWlsJylcIj57e2dldEVycm9yTWVzc2FnZSgndXNlcl9lbWFpbCcpfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgdy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIj5SZWdpc3RlcjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIiAqbmdJZj1cInVzZXJDb25maWcuc2hvd1NvY2lhbExvZ2luXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbC0xMiBnb29nbGUtYnV0dG9uXCIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlZGlyZWN0KCdnb29nbGUnKVwiPkdvb2dsZTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29sLTEyIGZhY2Vib29rLWJ1dHRvblwiIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZWRpcmVjdCgnZmFjZWJvb2snKVwiPkZhY2Vib29rPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0zIG1yLTAgbWwtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxwPkFscmVhZHkgYW4ge3sgdXNlckNvbmZpZy5hcHBOYW1lIH19IG1lbWJlcj88L3A+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5IHRleHQtd2hpdGVcIiBzdHlsZT1cIndpZHRoOiA1NTBweDtcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbG9naW4nXVwiPlxuICAgICAgICAgICAgICAgICAgICBDb250aW51ZSB3aXRoIGxvZ2luXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
@@ -5,4 +5,7 @@ export * from './user.model';
5
5
  export * from './user.service';
6
6
  export * from './users-view-all.component';
7
7
  export * from './user.routes';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3VzZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jdXJyZW50LXVzZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItZXhwbG9yZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXJzLXZpZXctYWxsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXIucm91dGVzJztcbiJdfQ==
8
+ export * from '../user-clients-list/user-clients-list.component';
9
+ export * from '../user-client-enable-disable-button/user-client-enable-disable-button.component';
10
+ export * from './user-sessions/user-sessions/user-sessions.component';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3VzZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxrRkFBa0YsQ0FBQztBQUNqRyxjQUFjLHVEQUF1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jdXJyZW50LXVzZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItZXhwbG9yZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXJzLXZpZXctYWxsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXIucm91dGVzJztcbmV4cG9ydCAqIGZyb20gJy4uL3VzZXItY2xpZW50cy1saXN0L3VzZXItY2xpZW50cy1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuLi91c2VyLWNsaWVudC1lbmFibGUtZGlzYWJsZS1idXR0b24vdXNlci1jbGllbnQtZW5hYmxlLWRpc2FibGUtYnV0dG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItc2Vzc2lvbnMvdXNlci1zZXNzaW9ucy91c2VyLXNlc3Npb25zLmNvbXBvbmVudCc7XG4iXX0=
@@ -92,9 +92,9 @@ export class UserFormComponent {
92
92
  roles_exists: [[]],
93
93
  client_id: [''],
94
94
  signature_url: [''],
95
- signature: ['']
95
+ signature: [''],
96
+ is_temporary_password: [true],
96
97
  });
97
- console.log(this.userForm.controls);
98
98
  this.userForm.patchValue(this.user);
99
99
  if (this.user.hasOwnProperty('id')) {
100
100
  this.updateMode = true;
@@ -218,11 +218,11 @@ export class UserFormComponent {
218
218
  .post('api/entity-files-upload', formData).toPromise();
219
219
  }
220
220
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", 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 });
221
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserFormComponent, selector: "user-form", inputs: { userId: "userId" }, outputs: { onSave: "onSave" }, ngImport: i0, template: "<form [formGroup]=\"userForm\" (ngSubmit)=\"save()\">\n <div fxLayout=\"column\">\n <div mat-dialog-title class=\"text-center\">\n <div>User Management</div>\n </div>\n\n <div mat-dialog-content fxLayout=\"row wrap\" fxLayoutAlign=\"center\">\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"name\" placeholder=\"Full Name\" type=\"text\"\n [required]=\"!!userForm.get('name').validator\" autocomplete=\"off\" />\n <mat-error *ngIf=\"isFieldValid('name') && !!userForm.get('name').validator\">{{getErrorMessage('name')}}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\"\n [required]=\"!!userForm.get('email').validator\" />\n <mat-error *ngIf=\"isFieldValid('email') && !!userForm.get('email').validator\">\n {{getErrorMessage('email')}}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\" *ngIf=\"this.config.userConfig.showPhone\">\n <input matInput formControlName=\"phone\" placeholder=\"Phone\" type=\"text\" autocomplete=\"off\" />\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"password\" placeholder=\"Password\" type=\"password\"\n [required]=\"isPasswordRequired && !!userForm.get('password').validator\" autocomplete=\"off\" />\n <mat-error *ngIf=\"isFieldValid('password') && !!userForm.get('password').validator\">\n {{getErrorMessage('password')}}</mat-error>\n </mat-form-field>\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 [config]=\"fileConfig\" (fileChanged)=\"fileChanged($event)\"\n [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </ng-template>\n <div class=\"col-12\" *ngIf=\"userForm.get('signature').value;else fileUpload;\">\n <app-document-viewer [file]=\"userForm.get('signature').value\"\n [fileUrl]=\"userForm.get('signature_url').value\" [config]=\"this.viewerConfig\"\n (remove)=\"removeFile()\">\n </app-document-viewer>\n </div>\n </div>\n <mat-form-field fxFlex=\"100%\" *ngIf=\"this.config.userConfig.showUserTypes\">\n <mat-label>User Type</mat-label>\n <mat-select formControlName=\"user_type_id\" autocomplete=\"off\" 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 <mat-card fxFlex=\"100%\"\n *ngIf=\"(this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) && this.userForm.get('user_type_id').value == 3\">\n <mat-card-title>\n <small class=\"form-text text-muted\">\n Roles\n </small>\n </mat-card-title>\n <mat-card-content style=\"overflow:auto; min-height:150px; max-height:260px;\" fxLayout=\"column\">\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;\" fxLayout=\"column\"\n [ngClass]=\"{ 'ml-4': role.value[0].module_id }\">\n <mat-checkbox [checked]=\"roleValue.selected\" (change)=\"roleSelected($event, roleValue.id)\">\n {{roleValue.label}}\n </mat-checkbox>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div fxFlex=\"100%\" fxLayout=\"row\" fxLayoutGap=\"1.5rem\" fxLayoutAlign=\"end\" class=\"my-4\">\n <button mat-raised-button (click)=\"closeDialog()\" type=\"button\">\n Cancel\n </button>\n <button mat-raised-button color=\"primary\" type=\"submit\">\n Save\n </button>\n </div>\n\n </div>\n\n </div>\n</form>", 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] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { 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", exportAs: ["matOption"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i13.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i13.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i13.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i14.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.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: i14.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i14.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: i15.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: i16.FileDropperComponent, selector: "app-file-dropper", inputs: ["fileArray", "config", "styles"], outputs: ["fileChanged"] }, { kind: "component", type: i17.DocumentViewerComponent, selector: "app-document-viewer", inputs: ["config", "file", "fileUrl", "disableEdit"], outputs: ["remove"] }, { kind: "pipe", type: i6.KeyValuePipe, name: "keyvalue" }] });
221
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserFormComponent, selector: "user-form", inputs: { userId: "userId" }, outputs: { onSave: "onSave" }, ngImport: i0, template: "<form [formGroup]=\"userForm\" (ngSubmit)=\"save()\">\n <div fxLayout=\"column\">\n <div mat-dialog-title class=\"text-center\">\n <div>User Management</div>\n </div>\n\n <div mat-dialog-content fxLayout=\"row wrap\" fxLayoutAlign=\"start center\">\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"name\" placeholder=\"Full Name\" type=\"text\"\n [required]=\"!!userForm.get('name').validator\" autocomplete=\"off\" />\n <mat-error *ngIf=\"isFieldValid('name') && !!userForm.get('name').validator\">{{getErrorMessage('name')}}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\"\n [required]=\"!!userForm.get('email').validator\" />\n <mat-error *ngIf=\"isFieldValid('email') && !!userForm.get('email').validator\">\n {{getErrorMessage('email')}}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\" *ngIf=\"this.config.userConfig.showPhone\">\n <input matInput formControlName=\"phone\" placeholder=\"Phone\" type=\"text\" autocomplete=\"off\" />\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"password\" placeholder=\"Password\" type=\"password\"\n [required]=\"isPasswordRequired && !!userForm.get('password').validator\" autocomplete=\"off\" />\n <mat-error *ngIf=\"isFieldValid('password') && !!userForm.get('password').validator\">\n {{getErrorMessage('password')}}</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 [config]=\"fileConfig\" (fileChanged)=\"fileChanged($event)\"\n [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </ng-template>\n <div class=\"col-12\" *ngIf=\"userForm.get('signature').value;else fileUpload;\">\n <app-document-viewer [file]=\"userForm.get('signature').value\"\n [fileUrl]=\"userForm.get('signature_url').value\" [config]=\"this.viewerConfig\"\n (remove)=\"removeFile()\">\n </app-document-viewer>\n </div>\n </div>\n <mat-form-field fxFlex=\"100%\" *ngIf=\"this.config.userConfig.showUserTypes\">\n <mat-label>User Type</mat-label>\n <mat-select formControlName=\"user_type_id\" autocomplete=\"off\" 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 <mat-card fxFlex=\"100%\"\n *ngIf=\"(this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) && this.userForm.get('user_type_id').value == 3\">\n <mat-card-title>\n <small class=\"form-text text-muted\">\n Roles\n </small>\n </mat-card-title>\n <mat-card-content style=\"overflow:auto; min-height:150px; max-height:260px;\" fxLayout=\"column\">\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;\" fxLayout=\"column\"\n [ngClass]=\"{ 'ml-4': role.value[0].module_id }\">\n <mat-checkbox [checked]=\"roleValue.selected\" (change)=\"roleSelected($event, roleValue.id)\">\n {{roleValue.label}}\n </mat-checkbox>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div fxFlex=\"100%\" fxLayout=\"row\" fxLayoutGap=\"1.5rem\" fxLayoutAlign=\"end\" class=\"my-4\">\n <button [disabled]=\"isWorking\" mat-raised-button color=\"primary\" type=\"submit\">\n Save\n </button>\n <button [disabled]=\"isWorking\" mat-flat-button (click)=\"closeDialog()\" type=\"button\">\n Cancel\n </button>\n </div>\n\n </div>\n\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] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { 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", exportAs: ["matOption"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i13.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i13.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i13.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i14.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.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: i14.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i14.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: i15.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: i16.FileDropperComponent, selector: "app-file-dropper", inputs: ["fileArray", "config", "styles"], outputs: ["fileChanged"] }, { kind: "component", type: i17.DocumentViewerComponent, selector: "app-document-viewer", inputs: ["config", "file", "fileUrl", "disableEdit"], outputs: ["remove"] }, { kind: "pipe", type: i6.KeyValuePipe, name: "keyvalue" }] });
222
222
  }
223
223
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserFormComponent, decorators: [{
224
224
  type: Component,
225
- args: [{ selector: 'user-form', template: "<form [formGroup]=\"userForm\" (ngSubmit)=\"save()\">\n <div fxLayout=\"column\">\n <div mat-dialog-title class=\"text-center\">\n <div>User Management</div>\n </div>\n\n <div mat-dialog-content fxLayout=\"row wrap\" fxLayoutAlign=\"center\">\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"name\" placeholder=\"Full Name\" type=\"text\"\n [required]=\"!!userForm.get('name').validator\" autocomplete=\"off\" />\n <mat-error *ngIf=\"isFieldValid('name') && !!userForm.get('name').validator\">{{getErrorMessage('name')}}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\"\n [required]=\"!!userForm.get('email').validator\" />\n <mat-error *ngIf=\"isFieldValid('email') && !!userForm.get('email').validator\">\n {{getErrorMessage('email')}}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\" *ngIf=\"this.config.userConfig.showPhone\">\n <input matInput formControlName=\"phone\" placeholder=\"Phone\" type=\"text\" autocomplete=\"off\" />\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"password\" placeholder=\"Password\" type=\"password\"\n [required]=\"isPasswordRequired && !!userForm.get('password').validator\" autocomplete=\"off\" />\n <mat-error *ngIf=\"isFieldValid('password') && !!userForm.get('password').validator\">\n {{getErrorMessage('password')}}</mat-error>\n </mat-form-field>\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 [config]=\"fileConfig\" (fileChanged)=\"fileChanged($event)\"\n [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </ng-template>\n <div class=\"col-12\" *ngIf=\"userForm.get('signature').value;else fileUpload;\">\n <app-document-viewer [file]=\"userForm.get('signature').value\"\n [fileUrl]=\"userForm.get('signature_url').value\" [config]=\"this.viewerConfig\"\n (remove)=\"removeFile()\">\n </app-document-viewer>\n </div>\n </div>\n <mat-form-field fxFlex=\"100%\" *ngIf=\"this.config.userConfig.showUserTypes\">\n <mat-label>User Type</mat-label>\n <mat-select formControlName=\"user_type_id\" autocomplete=\"off\" 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 <mat-card fxFlex=\"100%\"\n *ngIf=\"(this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) && this.userForm.get('user_type_id').value == 3\">\n <mat-card-title>\n <small class=\"form-text text-muted\">\n Roles\n </small>\n </mat-card-title>\n <mat-card-content style=\"overflow:auto; min-height:150px; max-height:260px;\" fxLayout=\"column\">\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;\" fxLayout=\"column\"\n [ngClass]=\"{ 'ml-4': role.value[0].module_id }\">\n <mat-checkbox [checked]=\"roleValue.selected\" (change)=\"roleSelected($event, roleValue.id)\">\n {{roleValue.label}}\n </mat-checkbox>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div fxFlex=\"100%\" fxLayout=\"row\" fxLayoutGap=\"1.5rem\" fxLayoutAlign=\"end\" class=\"my-4\">\n <button mat-raised-button (click)=\"closeDialog()\" type=\"button\">\n Cancel\n </button>\n <button mat-raised-button color=\"primary\" type=\"submit\">\n Save\n </button>\n </div>\n\n </div>\n\n </div>\n</form>" }]
225
+ args: [{ selector: 'user-form', template: "<form [formGroup]=\"userForm\" (ngSubmit)=\"save()\">\n <div fxLayout=\"column\">\n <div mat-dialog-title class=\"text-center\">\n <div>User Management</div>\n </div>\n\n <div mat-dialog-content fxLayout=\"row wrap\" fxLayoutAlign=\"start center\">\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"name\" placeholder=\"Full Name\" type=\"text\"\n [required]=\"!!userForm.get('name').validator\" autocomplete=\"off\" />\n <mat-error *ngIf=\"isFieldValid('name') && !!userForm.get('name').validator\">{{getErrorMessage('name')}}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\"\n [required]=\"!!userForm.get('email').validator\" />\n <mat-error *ngIf=\"isFieldValid('email') && !!userForm.get('email').validator\">\n {{getErrorMessage('email')}}\n </mat-error>\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\" *ngIf=\"this.config.userConfig.showPhone\">\n <input matInput formControlName=\"phone\" placeholder=\"Phone\" type=\"text\" autocomplete=\"off\" />\n </mat-form-field>\n <mat-form-field fxFlex=\"100%\">\n <input matInput formControlName=\"password\" placeholder=\"Password\" type=\"password\"\n [required]=\"isPasswordRequired && !!userForm.get('password').validator\" autocomplete=\"off\" />\n <mat-error *ngIf=\"isFieldValid('password') && !!userForm.get('password').validator\">\n {{getErrorMessage('password')}}</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 [config]=\"fileConfig\" (fileChanged)=\"fileChanged($event)\"\n [fileArray]=\"fileList\">\n </app-file-dropper>\n </section>\n </ng-template>\n <div class=\"col-12\" *ngIf=\"userForm.get('signature').value;else fileUpload;\">\n <app-document-viewer [file]=\"userForm.get('signature').value\"\n [fileUrl]=\"userForm.get('signature_url').value\" [config]=\"this.viewerConfig\"\n (remove)=\"removeFile()\">\n </app-document-viewer>\n </div>\n </div>\n <mat-form-field fxFlex=\"100%\" *ngIf=\"this.config.userConfig.showUserTypes\">\n <mat-label>User Type</mat-label>\n <mat-select formControlName=\"user_type_id\" autocomplete=\"off\" 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 <mat-card fxFlex=\"100%\"\n *ngIf=\"(this.config.userConfig.showRoles || this.config.userConfig.showFormRoles) && this.userForm.get('user_type_id').value == 3\">\n <mat-card-title>\n <small class=\"form-text text-muted\">\n Roles\n </small>\n </mat-card-title>\n <mat-card-content style=\"overflow:auto; min-height:150px; max-height:260px;\" fxLayout=\"column\">\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;\" fxLayout=\"column\"\n [ngClass]=\"{ 'ml-4': role.value[0].module_id }\">\n <mat-checkbox [checked]=\"roleValue.selected\" (change)=\"roleSelected($event, roleValue.id)\">\n {{roleValue.label}}\n </mat-checkbox>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div fxFlex=\"100%\" fxLayout=\"row\" fxLayoutGap=\"1.5rem\" fxLayoutAlign=\"end\" class=\"my-4\">\n <button [disabled]=\"isWorking\" mat-raised-button color=\"primary\" type=\"submit\">\n Save\n </button>\n <button [disabled]=\"isWorking\" mat-flat-button (click)=\"closeDialog()\" type=\"button\">\n Cancel\n </button>\n </div>\n\n </div>\n\n </div>\n</form>\n" }]
226
226
  }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
227
227
  type: Inject,
228
228
  args: [MAT_DIALOG_DATA]
@@ -231,4 +231,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
231
231
  }], onSave: [{
232
232
  type: Output
233
233
  }] } });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdXNlci91c2VyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi91c2VyL3VzZXItZm9ybS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBd0MsVUFBVSxFQUFFLGtCQUFrQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBS3hILE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPekUsTUFBTSxhQUFhLEdBQVE7SUFDekIsSUFBSSxFQUFFO1FBQ0osUUFBUSxFQUFFLGtCQUFrQjtLQUM3QjtJQUNELEtBQUssRUFBRTtRQUNMLFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsS0FBSyxFQUFFLGVBQWU7S0FDdkI7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsc0JBQXNCO0tBQ2pDO0lBQ0QsWUFBWSxFQUFFO1FBQ1osUUFBUSxFQUFFLHVCQUF1QjtLQUNsQztDQUNGLENBQUM7QUFNRixNQUFNLE9BQU8saUJBQWlCO0lBbUJUO0lBQ3lCO0lBQ3hCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBMUJWLE1BQU0sQ0FBUztJQUNkLE1BQU0sQ0FBcUI7SUFDckMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixRQUFRLENBQW1CO0lBQzNCLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUMzQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE1BQU0sQ0FBa0I7SUFDeEIsU0FBUyxH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LFlBQVksQ0FBQyxRQUFRLENBQUMsa0NBQWtDLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDeEU7U0FDRjtJQUNILENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ3pCLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsVUFBVSxFQUFFO2FBQ1osSUFBSSxDQUNILHlCQUF5QixFQUN6QixRQUFRLENBQ1QsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQixDQUFDO3dHQW5NVSxpQkFBaUIsOENBb0JSLGVBQWU7NEZBcEJ4QixpQkFBaUIsOEdDakM5Qix5N0pBMEZPOzs0RkR6RE0saUJBQWlCO2tCQUo3QixTQUFTOytCQUNFLFdBQVc7OzBCQXVCUixNQUFNOzJCQUFDLGVBQWU7aVFBbkIxQixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBFcnJvckhhbmRsZXJTZXJ2aWNlLCBGb3JtVmFsaWRhdG9yU2VydmljZSwgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlJztcblxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IE11bHRpVXNlckNvbmZpZyB9IGZyb20gJy4uL3VzZXItY29uZmlnJztcbmltcG9ydCB7IFVzZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci1jb25maWcnO1xuaW1wb3J0IHtGaWxlRHJvcHBlckNvbmZpZ30gZnJvbSBcIi4uL2ZpbGUtZHJvcHBlclwiO1xuaW1wb3J0IHtWaWV3ZXJDb25maWd9IGZyb20gXCIuLi9kb2N1bWVudC12aWV3ZXJcIjtcblxuY29uc3QgZXJyb3JNZXNzYWdlczogYW55ID0ge1xuICBuYW1lOiB7XG4gICAgcmVxdWlyZWQ6ICdOYW1lIGlzIHJlcXVpcmVkJ1xuICB9LFxuICBlbWFpbDoge1xuICAgIHJlcXVpcmVkOiAnRW1haWwgaXMgcmVxdWlyZWQnLFxuICAgIGVtYWlsOiAnSW52YWxpZCBlbWFpbCcsXG4gIH0sXG4gIHBhc3N3b3JkOiB7XG4gICAgcmVxdWlyZWQ6ICdQYXNzd29yZCBpcyByZXF1aXJlZCdcbiAgfSxcbiAgdXNlcl90eXBlX2lkOiB7XG4gICAgcmVxdWlyZWQ6ICdVc2VyIFR5cGUgaXMgcmVxdWlyZWQnXG4gIH1cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VzZXItZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWZvcm0uaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB1c2VySWQ6IG51bWJlcjtcbiAgQE91dHB1dCgpIG9uU2F2ZTogRXZlbnRFbWl0dGVyPFVzZXI+O1xuICBpc1dvcmtpbmcgPSBmYWxzZTtcbiAgdXNlckZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIGlzUGFzc3dvcmRSZXF1aXJlZCA9IGZhbHNlO1xuICB1cGRhdGVNb2RlID0gZmFsc2U7XG4gIGNvbmZpZzogTXVsdGlVc2VyQ29uZmlnO1xuICB1c2VyVHlwZXM6IGFueSA9IFtcbiAgICB7IHRpdGxlOiAnQWRtaW4nLCB2YWx1ZTogMiB9LFxuICAgIHsgdGl0bGU6ICdOb3JtYWwgVXNlcicsIHZhbHVlOiAzIH0sXG4gIF07XG4gIHVzZXJzOiBVc2VyW10gPSBbXTtcbiAgdXNlclJvbGVzOiBhbnlbXSA9IFtdO1xuICByb2xlczogYW55W10gPSBbXTtcbiAgZmlsZUNvbmZpZzogRmlsZURyb3BwZXJDb25maWc7XG4gIHZpZXdlckNvbmZpZzogVmlld2VyQ29uZmlnO1xuICBmaWxlTGlzdDogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8VXNlckZvcm1Db21wb25lbnQ+LFxuICAgICAgICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIHVzZXI6IGFueSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBodHRwOiBIdHRwU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBmb3JtVmFsaWRhdG9yU2VydmljZTogRm9ybVZhbGlkYXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwdWJsaWMgdXNlckNvbmZpZ1NlcnZpY2U6IFVzZXJDb25maWdTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLm9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXNlcj4oKTtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMudXNlckNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gIH1cblxuICBnZXQgcm9sZUZvcm1zKCkge1xuICAgIHJldHVybiB0aGlzLnVzZXJGb3JtLmdldCgncm9sZXMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51c2VyVHlwZXMgPSB0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dVc2VyVHlwZXNcbiAgICAgID8gdGhpcy5jb25maWcudXNlckNvbmZpZy51c2VyVHlwZXNcbiAgICAgIDogdGhpcy51c2VyVHlwZXM7XG4gICAgdGhpcy51c2VyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgaWQ6IFsnJ10sXG4gICAgICBuYW1lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICBlbWFpbDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSkpLFxuICAgICAgcGFzc3dvcmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycpLFxuICAgICAgcGhvbmU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycpLFxuICAgICAgdXNlcl90eXBlX2lkOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIHJvbGVzOiB0aGlzLmZiLmFycmF5KFtdKSxcbiAgICAgIHJvbGVzX2V4aXN0czogW1tdXSxcbiAgICAgIGNsaWVudF9pZDogWycnXSxcbiAgICAgIHNpZ25hdHVyZV91cmw6IFsnJ10sXG4gICAgICBzaWduYXR1cmU6IFsnJ11cbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnVzZXJGb3JtLmNvbnRyb2xzKTtcbiAgICB0aGlzLnVzZXJGb3JtLnBhdGNoVmFsdWUodGhpcy51c2VyKTtcbiAgICBpZiAodGhpcy51c2VyLmhhc093blByb3BlcnR5KCdpZCcpKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGUgPSB0cnVlO1xuICAgICAgdGhpcy51c2VyRm9ybS5jb250cm9scy51c2VyX3R5cGVfaWQuc2V0VmFsdWUodGhpcy51c2VyLnVzZXJfdHlwZV9pZCk7XG4gICAgICB0aGlzLnVzZXJGb3JtLmNvbnRyb2xzLnJvbGVzX2V4aXN0cy5zZXRWYWx1ZSh0aGlzLnVzZXIucm9sZXMgfHwgW10pO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcudXNlckNvbmZpZy5zaG93Um9sZXMgfHwgdGhpcy5jb25maWcudXNlckNvbmZpZy5zaG93Rm9ybVJvbGVzKSB7XG4gICAgICB0aGlzLmxvYWRSb2xlcygpO1xuICAgIH1cbiAgICB0aGlzLmZpbGVDb25maWcgPSB7XG4gICAgICBmaWxlSWQ6ICdzdWJqZWN0RmlsZScsXG4gICAgICBjb250YWluZXJJZDogJ3N1YmplY3RGaWxlQ29udGFpbmVyJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBoZWlnaHQ6ICcyMDBweCdcbiAgICAgIH0sXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBhY2NlcHRGaWxlOiAnKicsXG4gICAgICBtYXhTaXplOiAxMCxcbiAgICAgIGFjY2VwdEZpbGVUZXh0OiAnUE5HIGFuZCBKUEVHIG9ubHknXG4gICAgfTtcblxuICAgIHRoaXMudmlld2VyQ29uZmlnID0ge1xuICAgICAgdmlld2VyU3R5bGU6IHtcbiAgICAgICAgaGVpZ2h0OiAnMjAwcHgnLFxuICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxvYWRSb2xlcygpIHtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgbGV0IGZpbHRlciA9IHt9O1xuICAgIGZpbHRlciA9IHsgY2xpZW50X2lkOiB0aGlzLnVzZXI/LmNsaWVudF9pZCB8fCAnJyB9O1xuICAgIHRoaXMuaHR0cC5nZXQoJ2FwaS9yb2xlcycsIHsgcGFyYW1zOiBmaWx0ZXIgfSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgcm9sZXMgPSByZXMuZGF0YTtcbiAgICAgICAgLyogTGV0cyBzZXQgdGhlIHJvbGVzIHRoaXMgdXNlciBoYXMgKi9cbiAgICAgICAgZm9yIChsZXQgcm9sZSBvZiByb2xlcykge1xuICAgICAgICAgIHJvbGUuc2VsZWN0ZWQgPSB0aGlzLnVzZXJGb3JtLnZhbHVlLnJvbGVzX2V4aXN0cy5maW5kKHJvbGVEYXRhID0+IHJvbGVEYXRhLmlkID09IHJvbGUuaWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9sZXMgPSByb2xlcztcbiAgICAgICAgdGhpcy51c2VyUm9sZXMgPSByb2xlcy5yZWR1Y2UoKHIsIGEpID0+IHtcbiAgICAgICAgICByW2EubW9kdWxlX2lkXSA9IFsuLi5yW2EubW9kdWxlX2lkXSB8fCBbXSwgYV07XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpIHtcbiAgICBpZiAoIXRoaXMudXNlckZvcm0udmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNXb3JraW5nID0gdHJ1ZTtcbiAgICAgIGxldCBkYXRhOiBhbnkgPSB0aGlzLnVzZXJGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgICBsZXQgcm9sZXMgPSBbXTtcblxuICAgICAgdGhpcy5yb2xlcy5mb3JFYWNoKChyb2xlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJvbGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICByb2xlc1tyb2xlLmlkXSA9IHJvbGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZGF0YS5yb2xlcyA9IHJvbGVzO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnVwZGF0ZU1vZGUgPyBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVVzZXIoZGF0YSlcbiAgICAgICAgOiBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZVVzZXIoZGF0YSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnU3VjY2Vzc2Z1bGx5IHNhdmVkIHRoZSB1c2VyLiAnLCAnc3VjY2VzcycpO1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocmVzdWx0KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByb2xlU2VsZWN0ZWQoZXZlbnQ6IGFueSwgcm9sZUlkOiBudW1iZXIpIHtcbiAgICB0aGlzLnJvbGVzLmZvckVhY2goKHJvbGU6IGFueSkgPT4ge1xuICAgICAgaWYgKHJvbGUuaWQgPT0gcm9sZUlkKSB7XG4gICAgICAgIHJvbGUuc2VsZWN0ZWQgPSBldmVudC5jaGVja2VkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIE1ldGhvZCB0byBldmFsdWF0ZSBmb3JtIGZpZWxkcyovXG4gIGlzRmllbGRWYWxpZChmaWVsZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVZhbGlkYXRvclNlcnZpY2UuaXNGaWVsZFZhbGlkKGZpZWxkLCB0aGlzLnVzZXJGb3JtKTtcbiAgfVxuXG4gIC8qKiBNZXRob2QgdG8gZmluZCBlcnJvciBpbiBmb3JtIGZpZWxkcyovXG4gIGdldEVycm9yTWVzc2FnZShmaWVsZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVZhbGlkYXRvclNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKGZpZWxkLCB0aGlzLnVzZXJGb3JtLCBlcnJvck1lc3NhZ2VzKTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgYXN5bmMgZmlsZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsZUxpc3QgPSBldmVudDtcblxuICAgIGlmICh0aGlzLmZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcblxuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBhd2FpdCB0aGlzLnVwbG9hZEVudGl0eUZpbGUoXG4gICAgICAgIHRoaXMuZmlsZUxpc3RbMF1cbiAgICAgICk7XG4gICAgICB0aGlzLnVzZXJGb3JtXG4gICAgICAgIC5nZXQoJ3NpZ25hdHVyZScpXG4gICAgICAgIC5zZXRWYWx1ZShyZXN1bHQuaXRlbS5maWxlKTtcbiAgICAgIHRoaXMudXNlckZvcm1cbiAgICAgICAgLmdldCgnc2lnbmF0dXJlX3VybCcpXG4gICAgICAgIC5zZXRWYWx1ZShyZXN1bHQuaXRlbS51cmwpO1xuICAgICAgdGhpcy5maWxlTGlzdCA9IFtdO1xuICAgIH1cbiAgfVxuXG5cbiAgYXN5bmMgcmVtb3ZlRmlsZSgpIHtcbiAgICBpZiAodGhpcy51c2VyRm9ybS52YWx1ZS5zaWduYXR1cmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMudXNlckZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgc2lnbmF0dXJlOiAnJyxcbiAgICAgICAgICBzaWduYXR1cmVfdXJsOiAnJ1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdVbmFibGUgdG8gcmVtb3ZlIGZpbGUsIHRyeSBsYXRlcicsICd3YXJuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHVwbG9hZEVudGl0eUZpbGUoZmlsZTogRmlsZSkge1xuICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZURhdGEnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5za2lwSGVhZGVyKClcbiAgICAgIC5wb3N0KFxuICAgICAgICAnYXBpL2VudGl0eS1maWxlcy11cGxvYWQnLFxuICAgICAgICBmb3JtRGF0YSxcbiAgICAgICkudG9Qcm9taXNlKCk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwidXNlckZvcm1cIiAobmdTdWJtaXQpPVwic2F2ZSgpXCI+XG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdj5Vc2VyIE1hbmFnZW1lbnQ8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIxMDAlXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiBwbGFjZWhvbGRlcj1cIkZ1bGwgTmFtZVwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIiEhdXNlckZvcm0uZ2V0KCduYW1lJykudmFsaWRhdG9yXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCduYW1lJykgJiYgISF1c2VyRm9ybS5nZXQoJ25hbWUnKS52YWxpZGF0b3JcIj57e2dldEVycm9yTWVzc2FnZSgnbmFtZScpfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTAwJVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiRW1haWxcIiB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiISF1c2VyRm9ybS5nZXQoJ2VtYWlsJykudmFsaWRhdG9yXCIgLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdlbWFpbCcpICYmICEhdXNlckZvcm0uZ2V0KCdlbWFpbCcpLnZhbGlkYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICB7e2dldEVycm9yTWVzc2FnZSgnZW1haWwnKX19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMCVcIiAqbmdJZj1cInRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd1Bob25lXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInBob25lXCIgcGxhY2Vob2xkZXI9XCJQaG9uZVwiIHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTAwJVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNQYXNzd29yZFJlcXVpcmVkICYmICEhdXNlckZvcm0uZ2V0KCdwYXNzd29yZCcpLnZhbGlkYXRvclwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgncGFzc3dvcmQnKSAmJiAhIXVzZXJGb3JtLmdldCgncGFzc3dvcmQnKS52YWxpZGF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAge3tnZXRFcnJvck1lc3NhZ2UoJ3Bhc3N3b3JkJyl9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd1NpZ25hdHVyZVwiPiBcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbGVVcGxvYWQ+XG4gICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlVzZXIgU2lnbmF0dXJlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWZpbGUtZHJvcHBlciBbY29uZmlnXT1cImZpbGVDb25maWdcIiAoZmlsZUNoYW5nZWQpPVwiZmlsZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVBcnJheV09XCJmaWxlTGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtZmlsZS1kcm9wcGVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJ1c2VyRm9ybS5nZXQoJ3NpZ25hdHVyZScpLnZhbHVlO2Vsc2UgZmlsZVVwbG9hZDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1kb2N1bWVudC12aWV3ZXIgW2ZpbGVdPVwidXNlckZvcm0uZ2V0KCdzaWduYXR1cmUnKS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZVVybF09XCJ1c2VyRm9ybS5nZXQoJ3NpZ25hdHVyZV91cmwnKS52YWx1ZVwiIFtjb25maWddPVwidGhpcy52aWV3ZXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVGaWxlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtZG9jdW1lbnQtdmlld2VyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTAwJVwiICpuZ0lmPVwidGhpcy5jb25maWcudXNlckNvbmZpZy5zaG93VXNlclR5cGVzXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Vc2VyIFR5cGU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJ1c2VyX3R5cGVfaWRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHVzZXJUeXBlIG9mIHVzZXJUeXBlc1wiIFt2YWx1ZV09XCJ1c2VyVHlwZS52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3t1c2VyVHlwZS50aXRsZX19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgndXNlcl90eXBlX2lkJylcIj57e2dldEVycm9yTWVzc2FnZSgndXNlcl90eXBlX2lkJyl9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPG1hdC1jYXJkIGZ4RmxleD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKHRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd1JvbGVzIHx8IHRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd0Zvcm1Sb2xlcykgJiYgdGhpcy51c2VyRm9ybS5nZXQoJ3VzZXJfdHlwZV9pZCcpLnZhbHVlID09IDNcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBSb2xlc1xuICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgc3R5bGU9XCJvdmVyZmxvdzphdXRvOyBtaW4taGVpZ2h0OjE1MHB4OyBtYXgtaGVpZ2h0OjI2MHB4O1wiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvbGUgb2YgdXNlclJvbGVzIHwga2V5dmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cInJvbGUudmFsdWVbMF0ubW9kdWxlX2lkXCIgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyb2xlPy52YWx1ZVswXT8ubW9kdWxlPy5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb2xlVmFsdWUgb2Ygcm9sZS52YWx1ZTtcIiBmeExheW91dD1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnbWwtNCc6IHJvbGUudmFsdWVbMF0ubW9kdWxlX2lkIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT1cInJvbGVWYWx1ZS5zZWxlY3RlZFwiIChjaGFuZ2UpPVwicm9sZVNlbGVjdGVkKCRldmVudCwgcm9sZVZhbHVlLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JvbGVWYWx1ZS5sYWJlbH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgPC9tYXQtY2FyZD5cblxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIxMDAlXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEuNXJlbVwiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIiBjbGFzcz1cIm15LTRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJjbG9zZURpYWxvZygpXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbjwvZm9ybT4iXX0=
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jb3JlL3NyYy9saWIvdXNlci91c2VyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi91c2VyL3VzZXItZm9ybS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBd0MsVUFBVSxFQUFFLGtCQUFrQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBS3hILE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPekUsTUFBTSxhQUFhLEdBQVE7SUFDekIsSUFBSSxFQUFFO1FBQ0osUUFBUSxFQUFFLGtCQUFrQjtLQUM3QjtJQUNELEtBQUssRUFBRTtRQUNMLFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsS0FBSyxFQUFFLGVBQWU7S0FDdkI7SUFDRCxRQUFRLEVBQUU7UUFDUixRQUFRLEVBQUUsc0JBQXNCO0tBQ2pDO0lBQ0QsWUFBWSxFQUFFO1FBQ1osUUFBUSxFQUFFLHVCQUF1QjtLQUNsQztDQUNGLENBQUM7QUFNRixNQUFNLE9BQU8saUJBQWlCO0lBbUJUO0lBQ3lCO0lBQ3hCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBMUJWLE1BQU0sQ0FBUztJQUNkLE1BQU0sQ0FBcUI7SUFDckMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixRQUFRLENBQW1CO0lBQzNCLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUMzQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE1BQU0sQ0FBa0I7SUFDeEIsU0FBUyxH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QUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3hFO1NBQ0Y7SUFDSCxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsSUFBVTtRQUN6QixNQUFNLFFBQVEsR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLFVBQVUsRUFBRTthQUNaLElBQUksQ0FDSCx5QkFBeUIsRUFDekIsUUFBUSxDQUNULENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbEIsQ0FBQzt3R0FwTVUsaUJBQWlCLDhDQW9CUixlQUFlOzRGQXBCeEIsaUJBQWlCLDhHQ2pDOUIsMHhLQWdHQTs7NEZEL0RhLGlCQUFpQjtrQkFKN0IsU0FBUzsrQkFDRSxXQUFXOzswQkF1QlIsTUFBTTsyQkFBQyxlQUFlO2lRQW5CMUIsTUFBTTtzQkFBZCxLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXkgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgRXJyb3JIYW5kbGVyU2VydmljZSwgRm9ybVZhbGlkYXRvclNlcnZpY2UsIEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZSc7XG5cbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNdWx0aVVzZXJDb25maWcgfSBmcm9tICcuLi91c2VyLWNvbmZpZyc7XG5pbXBvcnQgeyBVc2VyQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3VzZXItY29uZmlnJztcbmltcG9ydCB7RmlsZURyb3BwZXJDb25maWd9IGZyb20gXCIuLi9maWxlLWRyb3BwZXJcIjtcbmltcG9ydCB7Vmlld2VyQ29uZmlnfSBmcm9tIFwiLi4vZG9jdW1lbnQtdmlld2VyXCI7XG5cbmNvbnN0IGVycm9yTWVzc2FnZXM6IGFueSA9IHtcbiAgbmFtZToge1xuICAgIHJlcXVpcmVkOiAnTmFtZSBpcyByZXF1aXJlZCdcbiAgfSxcbiAgZW1haWw6IHtcbiAgICByZXF1aXJlZDogJ0VtYWlsIGlzIHJlcXVpcmVkJyxcbiAgICBlbWFpbDogJ0ludmFsaWQgZW1haWwnLFxuICB9LFxuICBwYXNzd29yZDoge1xuICAgIHJlcXVpcmVkOiAnUGFzc3dvcmQgaXMgcmVxdWlyZWQnXG4gIH0sXG4gIHVzZXJfdHlwZV9pZDoge1xuICAgIHJlcXVpcmVkOiAnVXNlciBUeXBlIGlzIHJlcXVpcmVkJ1xuICB9XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1c2VyLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1mb3JtLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdXNlcklkOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBvblNhdmU6IEV2ZW50RW1pdHRlcjxVc2VyPjtcbiAgaXNXb3JraW5nID0gZmFsc2U7XG4gIHVzZXJGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBpc1Bhc3N3b3JkUmVxdWlyZWQgPSBmYWxzZTtcbiAgdXBkYXRlTW9kZSA9IGZhbHNlO1xuICBjb25maWc6IE11bHRpVXNlckNvbmZpZztcbiAgdXNlclR5cGVzOiBhbnkgPSBbXG4gICAgeyB0aXRsZTogJ0FkbWluJywgdmFsdWU6IDIgfSxcbiAgICB7IHRpdGxlOiAnTm9ybWFsIFVzZXInLCB2YWx1ZTogMyB9LFxuICBdO1xuICB1c2VyczogVXNlcltdID0gW107XG4gIHVzZXJSb2xlczogYW55W10gPSBbXTtcbiAgcm9sZXM6IGFueVtdID0gW107XG4gIGZpbGVDb25maWc6IEZpbGVEcm9wcGVyQ29uZmlnO1xuICB2aWV3ZXJDb25maWc6IFZpZXdlckNvbmZpZztcbiAgZmlsZUxpc3Q6IGFueVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFVzZXJGb3JtQ29tcG9uZW50PixcbiAgICAgICAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyB1c2VyOiBhbnksXG4gICAgICAgICAgICAgIHByaXZhdGUgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgZm9ybVZhbGlkYXRvclNlcnZpY2U6IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIHVzZXJDb25maWdTZXJ2aWNlOiBVc2VyQ29uZmlnU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5vblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFVzZXI+KCk7XG4gICAgdGhpcy5jb25maWcgPSB0aGlzLnVzZXJDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICB9XG5cbiAgZ2V0IHJvbGVGb3JtcygpIHtcbiAgICByZXR1cm4gdGhpcy51c2VyRm9ybS5nZXQoJ3JvbGVzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXNlclR5cGVzID0gdGhpcy5jb25maWcudXNlckNvbmZpZy5zaG93VXNlclR5cGVzXG4gICAgICA/IHRoaXMuY29uZmlnLnVzZXJDb25maWcudXNlclR5cGVzXG4gICAgICA6IHRoaXMudXNlclR5cGVzO1xuICAgIHRoaXMudXNlckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGlkOiBbJyddLFxuICAgICAgbmFtZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgZW1haWw6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF0pKSxcbiAgICAgIHBhc3N3b3JkOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHBob25lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHVzZXJfdHlwZV9pZDogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICByb2xlczogdGhpcy5mYi5hcnJheShbXSksXG4gICAgICByb2xlc19leGlzdHM6IFtbXV0sXG4gICAgICBjbGllbnRfaWQ6IFsnJ10sXG4gICAgICBzaWduYXR1cmVfdXJsOiBbJyddLFxuICAgICAgc2lnbmF0dXJlOiBbJyddLFxuICAgICAgaXNfdGVtcG9yYXJ5X3Bhc3N3b3JkOiBbdHJ1ZV0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnVzZXJGb3JtLnBhdGNoVmFsdWUodGhpcy51c2VyKTtcbiAgICBpZiAodGhpcy51c2VyLmhhc093blByb3BlcnR5KCdpZCcpKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGUgPSB0cnVlO1xuICAgICAgdGhpcy51c2VyRm9ybS5jb250cm9scy51c2VyX3R5cGVfaWQuc2V0VmFsdWUodGhpcy51c2VyLnVzZXJfdHlwZV9pZCk7XG4gICAgICB0aGlzLnVzZXJGb3JtLmNvbnRyb2xzLnJvbGVzX2V4aXN0cy5zZXRWYWx1ZSh0aGlzLnVzZXIucm9sZXMgfHwgW10pO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcudXNlckNvbmZpZy5zaG93Um9sZXMgfHwgdGhpcy5jb25maWcudXNlckNvbmZpZy5zaG93Rm9ybVJvbGVzKSB7XG4gICAgICB0aGlzLmxvYWRSb2xlcygpO1xuICAgIH1cbiAgICB0aGlzLmZpbGVDb25maWcgPSB7XG4gICAgICBmaWxlSWQ6ICdzdWJqZWN0RmlsZScsXG4gICAgICBjb250YWluZXJJZDogJ3N1YmplY3RGaWxlQ29udGFpbmVyJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBoZWlnaHQ6ICcyMDBweCdcbiAgICAgIH0sXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBhY2NlcHRGaWxlOiAnKicsXG4gICAgICBtYXhTaXplOiAxMCxcbiAgICAgIGFjY2VwdEZpbGVUZXh0OiAnUE5HIGFuZCBKUEVHIG9ubHknXG4gICAgfTtcblxuICAgIHRoaXMudmlld2VyQ29uZmlnID0ge1xuICAgICAgdmlld2VyU3R5bGU6IHtcbiAgICAgICAgaGVpZ2h0OiAnMjAwcHgnLFxuICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxvYWRSb2xlcygpIHtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgbGV0IGZpbHRlciA9IHt9O1xuICAgIGZpbHRlciA9IHsgY2xpZW50X2lkOiB0aGlzLnVzZXI/LmNsaWVudF9pZCB8fCAnJyB9O1xuICAgIHRoaXMuaHR0cC5nZXQoJ2FwaS9yb2xlcycsIHsgcGFyYW1zOiBmaWx0ZXIgfSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgcm9sZXMgPSByZXMuZGF0YTtcbiAgICAgICAgLyogTGV0cyBzZXQgdGhlIHJvbGVzIHRoaXMgdXNlciBoYXMgKi9cbiAgICAgICAgZm9yIChsZXQgcm9sZSBvZiByb2xlcykge1xuICAgICAgICAgIHJvbGUuc2VsZWN0ZWQgPSB0aGlzLnVzZXJGb3JtLnZhbHVlLnJvbGVzX2V4aXN0cy5maW5kKHJvbGVEYXRhID0+IHJvbGVEYXRhLmlkID09IHJvbGUuaWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9sZXMgPSByb2xlcztcbiAgICAgICAgdGhpcy51c2VyUm9sZXMgPSByb2xlcy5yZWR1Y2UoKHIsIGEpID0+IHtcbiAgICAgICAgICByW2EubW9kdWxlX2lkXSA9IFsuLi5yW2EubW9kdWxlX2lkXSB8fCBbXSwgYV07XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpIHtcbiAgICBpZiAoIXRoaXMudXNlckZvcm0udmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNXb3JraW5nID0gdHJ1ZTtcbiAgICAgIGxldCBkYXRhOiBhbnkgPSB0aGlzLnVzZXJGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgICBsZXQgcm9sZXMgPSBbXTtcblxuICAgICAgdGhpcy5yb2xlcy5mb3JFYWNoKChyb2xlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJvbGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICByb2xlc1tyb2xlLmlkXSA9IHJvbGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZGF0YS5yb2xlcyA9IHJvbGVzO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnVwZGF0ZU1vZGUgPyBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVVzZXIoZGF0YSlcbiAgICAgICAgOiBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZVVzZXIoZGF0YSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnU3VjY2Vzc2Z1bGx5IHNhdmVkIHRoZSB1c2VyLiAnLCAnc3VjY2VzcycpO1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocmVzdWx0KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByb2xlU2VsZWN0ZWQoZXZlbnQ6IGFueSwgcm9sZUlkOiBudW1iZXIpIHtcbiAgICB0aGlzLnJvbGVzLmZvckVhY2goKHJvbGU6IGFueSkgPT4ge1xuICAgICAgaWYgKHJvbGUuaWQgPT0gcm9sZUlkKSB7XG4gICAgICAgIHJvbGUuc2VsZWN0ZWQgPSBldmVudC5jaGVja2VkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIE1ldGhvZCB0byBldmFsdWF0ZSBmb3JtIGZpZWxkcyovXG4gIGlzRmllbGRWYWxpZChmaWVsZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVZhbGlkYXRvclNlcnZpY2UuaXNGaWVsZFZhbGlkKGZpZWxkLCB0aGlzLnVzZXJGb3JtKTtcbiAgfVxuXG4gIC8qKiBNZXRob2QgdG8gZmluZCBlcnJvciBpbiBmb3JtIGZpZWxkcyovXG4gIGdldEVycm9yTWVzc2FnZShmaWVsZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVZhbGlkYXRvclNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKGZpZWxkLCB0aGlzLnVzZXJGb3JtLCBlcnJvck1lc3NhZ2VzKTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgYXN5bmMgZmlsZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsZUxpc3QgPSBldmVudDtcblxuICAgIGlmICh0aGlzLmZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcblxuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBhd2FpdCB0aGlzLnVwbG9hZEVudGl0eUZpbGUoXG4gICAgICAgIHRoaXMuZmlsZUxpc3RbMF1cbiAgICAgICk7XG4gICAgICB0aGlzLnVzZXJGb3JtXG4gICAgICAgIC5nZXQoJ3NpZ25hdHVyZScpXG4gICAgICAgIC5zZXRWYWx1ZShyZXN1bHQuaXRlbS5maWxlKTtcbiAgICAgIHRoaXMudXNlckZvcm1cbiAgICAgICAgLmdldCgnc2lnbmF0dXJlX3VybCcpXG4gICAgICAgIC5zZXRWYWx1ZShyZXN1bHQuaXRlbS51cmwpO1xuICAgICAgdGhpcy5maWxlTGlzdCA9IFtdO1xuICAgIH1cbiAgfVxuXG5cbiAgYXN5bmMgcmVtb3ZlRmlsZSgpIHtcbiAgICBpZiAodGhpcy51c2VyRm9ybS52YWx1ZS5zaWduYXR1cmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMudXNlckZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgc2lnbmF0dXJlOiAnJyxcbiAgICAgICAgICBzaWduYXR1cmVfdXJsOiAnJ1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdVbmFibGUgdG8gcmVtb3ZlIGZpbGUsIHRyeSBsYXRlcicsICd3YXJuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHVwbG9hZEVudGl0eUZpbGUoZmlsZTogRmlsZSkge1xuICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZURhdGEnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5za2lwSGVhZGVyKClcbiAgICAgIC5wb3N0KFxuICAgICAgICAnYXBpL2VudGl0eS1maWxlcy11cGxvYWQnLFxuICAgICAgICBmb3JtRGF0YSxcbiAgICAgICkudG9Qcm9taXNlKCk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwidXNlckZvcm1cIiAobmdTdWJtaXQpPVwic2F2ZSgpXCI+XG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdj5Vc2VyIE1hbmFnZW1lbnQ8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIxMDAlXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiBwbGFjZWhvbGRlcj1cIkZ1bGwgTmFtZVwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIiEhdXNlckZvcm0uZ2V0KCduYW1lJykudmFsaWRhdG9yXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCduYW1lJykgJiYgISF1c2VyRm9ybS5nZXQoJ25hbWUnKS52YWxpZGF0b3JcIj57e2dldEVycm9yTWVzc2FnZSgnbmFtZScpfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTAwJVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiRW1haWxcIiB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiISF1c2VyRm9ybS5nZXQoJ2VtYWlsJykudmFsaWRhdG9yXCIgLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdlbWFpbCcpICYmICEhdXNlckZvcm0uZ2V0KCdlbWFpbCcpLnZhbGlkYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICB7e2dldEVycm9yTWVzc2FnZSgnZW1haWwnKX19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMCVcIiAqbmdJZj1cInRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd1Bob25lXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInBob25lXCIgcGxhY2Vob2xkZXI9XCJQaG9uZVwiIHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTAwJVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNQYXNzd29yZFJlcXVpcmVkICYmICEhdXNlckZvcm0uZ2V0KCdwYXNzd29yZCcpLnZhbGlkYXRvclwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgncGFzc3dvcmQnKSAmJiAhIXVzZXJGb3JtLmdldCgncGFzc3dvcmQnKS52YWxpZGF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAge3tnZXRFcnJvck1lc3NhZ2UoJ3Bhc3N3b3JkJyl9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJpc190ZW1wb3JhcnlfcGFzc3dvcmRcIj5JcyBUZW1wb3JhcnkgUGFzc3dvcmQ/PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+U2hvdWxkIHRoaXMgdXNlciB0byB1cGRhdGUgcGFzc3dvcmQgb24gZmlyc3QgbG9naW4/PC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGhpcy5jb25maWcudXNlckNvbmZpZy5zaG93U2lnbmF0dXJlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmaWxlVXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5Vc2VyIFNpZ25hdHVyZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1maWxlLWRyb3BwZXIgW2NvbmZpZ109XCJmaWxlQ29uZmlnXCIgKGZpbGVDaGFuZ2VkKT1cImZpbGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlQXJyYXldPVwiZmlsZUxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWZpbGUtZHJvcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwidXNlckZvcm0uZ2V0KCdzaWduYXR1cmUnKS52YWx1ZTtlbHNlIGZpbGVVcGxvYWQ7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtZG9jdW1lbnQtdmlld2VyIFtmaWxlXT1cInVzZXJGb3JtLmdldCgnc2lnbmF0dXJlJykudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVVcmxdPVwidXNlckZvcm0uZ2V0KCdzaWduYXR1cmVfdXJsJykudmFsdWVcIiBbY29uZmlnXT1cInRoaXMudmlld2VyQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlRmlsZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWRvY3VtZW50LXZpZXdlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMCVcIiAqbmdJZj1cInRoaXMuY29uZmlnLnVzZXJDb25maWcuc2hvd1VzZXJUeXBlc1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VXNlciBUeXBlPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidXNlcl90eXBlX2lkXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB1c2VyVHlwZSBvZiB1c2VyVHlwZXNcIiBbdmFsdWVdPVwidXNlclR5cGUudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dXNlclR5cGUudGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ3VzZXJfdHlwZV9pZCcpXCI+e3tnZXRFcnJvck1lc3NhZ2UoJ3VzZXJfdHlwZV9pZCcpfX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxtYXQtY2FyZCBmeEZsZXg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIih0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dSb2xlcyB8fCB0aGlzLmNvbmZpZy51c2VyQ29uZmlnLnNob3dGb3JtUm9sZXMpICYmIHRoaXMudXNlckZvcm0uZ2V0KCd1c2VyX3R5cGVfaWQnKS52YWx1ZSA9PSAzXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUm9sZXNcbiAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50IHN0eWxlPVwib3ZlcmZsb3c6YXV0bzsgbWluLWhlaWdodDoxNTBweDsgbWF4LWhlaWdodDoyNjBweDtcIiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb2xlIG9mIHVzZXJSb2xlcyB8IGtleXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJyb2xlLnZhbHVlWzBdLm1vZHVsZV9pZFwiIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cm9sZT8udmFsdWVbMF0/Lm1vZHVsZT8ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm9sZVZhbHVlIG9mIHJvbGUudmFsdWU7XCIgZnhMYXlvdXQ9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ21sLTQnOiByb2xlLnZhbHVlWzBdLm1vZHVsZV9pZCB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09XCJyb2xlVmFsdWUuc2VsZWN0ZWRcIiAoY2hhbmdlKT1cInJvbGVTZWxlY3RlZCgkZXZlbnQsIHJvbGVWYWx1ZS5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyb2xlVmFsdWUubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQ+XG5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMTAwJVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxLjVyZW1cIiBmeExheW91dEFsaWduPVwiZW5kXCIgY2xhc3M9XCJteS00XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzV29ya2luZ1wiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJzdWJtaXRcIj5cbiAgICAgICAgICAgICAgICBTYXZlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1dvcmtpbmdcIiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { TechlifyServiceBaseClass } from '../../base-model';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../core";
5
+ export class UserSessionService extends TechlifyServiceBaseClass {
6
+ constructor(httpService) {
7
+ super(httpService, 'user-sessions');
8
+ }
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserSessionService, deps: [{ token: i1.HttpService }], target: i0.ɵɵFactoryTarget.Injectable });
10
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserSessionService, providedIn: 'root' });
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserSessionService, decorators: [{
13
+ type: Injectable,
14
+ args: [{
15
+ providedIn: 'root'
16
+ }]
17
+ }], ctorParameters: function () { return [{ type: i1.HttpService }]; } });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zZXNzaW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3VzZXIvdXNlci1zZXNzaW9ucy91c2VyLXNlc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7QUFNMUQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLHdCQUF3QjtJQUU5RCxZQUNFLFdBQXdCO1FBRXhCLEtBQUssQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDdEMsQ0FBQzt3R0FOVSxrQkFBa0I7NEdBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUZWNobGlmeVNlcnZpY2VCYXNlQ2xhc3N9IGZyb20gJy4uLy4uL2Jhc2UtbW9kZWwnO1xuaW1wb3J0IHtIdHRwU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJTZXNzaW9uU2VydmljZSBleHRlbmRzIFRlY2hsaWZ5U2VydmljZUJhc2VDbGFzcyB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlLFxuICApIHtcbiAgICBzdXBlcihodHRwU2VydmljZSwgJ3VzZXItc2Vzc2lvbnMnKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,49 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { TechlifyListingControllerInterface } from '../../../base-model';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../user-session.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/material/table";
7
+ import * as i4 from "@angular/material/card";
8
+ import * as i5 from "@angular/material/progress-bar";
9
+ export class UserSessionsComponent extends TechlifyListingControllerInterface {
10
+ service;
11
+ user;
12
+ displayedColumns = [
13
+ '#',
14
+ 'Started On',
15
+ 'Expires At',
16
+ ];
17
+ constructor(service) {
18
+ super();
19
+ this.service = service;
20
+ }
21
+ ngOnInit() {
22
+ this.loadData();
23
+ }
24
+ loadData() {
25
+ if (!this.user) {
26
+ return;
27
+ }
28
+ this.isWorking = true;
29
+ const params = {
30
+ user_ids: this.user?.id,
31
+ };
32
+ this.service.index(params).subscribe({
33
+ next: (response) => {
34
+ this.models = this.models.concat(response?.data);
35
+ this.isWorking = false;
36
+ },
37
+ error: () => (this.isWorking = false)
38
+ });
39
+ }
40
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserSessionsComponent, deps: [{ token: i1.UserSessionService }], target: i0.ɵɵFactoryTarget.Component });
41
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserSessionsComponent, selector: "app-user-sessions", inputs: { user: "user" }, usesInheritance: true, ngImport: i0, template: "<mat-card>\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Started On Column -->\n <ng-container matColumnDef=\"Started On\">\n <th mat-header-cell *matHeaderCellDef> Started On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <!-- Expires At Column -->\n <ng-container matColumnDef=\"Expires At\">\n <th mat-header-cell *matHeaderCellDef> Expires At </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.expires_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserSessionsComponent, decorators: [{
44
+ type: Component,
45
+ args: [{ selector: 'app-user-sessions', template: "<mat-card>\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let element; let i = index\"> {{ i + 1 }} </td>\n </ng-container>\n\n <!-- Started On Column -->\n <ng-container matColumnDef=\"Started On\">\n <th mat-header-cell *matHeaderCellDef> Started On </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.created_at | date:'medium' }}\n </td>\n </ng-container>\n\n <!-- Expires At Column -->\n <ng-container matColumnDef=\"Expires At\">\n <th mat-header-cell *matHeaderCellDef> Expires At </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.expires_at | date:'medium' }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n\n </mat-card-content>\n</mat-card>\n" }]
46
+ }], ctorParameters: function () { return [{ type: i1.UserSessionService }]; }, propDecorators: { user: [{
47
+ type: Input
48
+ }] } });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zZXNzaW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3VzZXIvdXNlci1zZXNzaW9ucy91c2VyLXNlc3Npb25zL3VzZXItc2Vzc2lvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi91c2VyL3VzZXItc2Vzc2lvbnMvdXNlci1zZXNzaW9ucy91c2VyLXNlc3Npb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7O0FBU3ZFLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxrQ0FBa0M7SUFXakU7SUFURCxJQUFJLENBQU87SUFFcEIsZ0JBQWdCLEdBQWE7UUFDM0IsR0FBRztRQUNILFlBQVk7UUFDWixZQUFZO0tBQ2IsQ0FBQztJQUVGLFlBQ1UsT0FBMkI7UUFFbkMsS0FBSyxFQUFFLENBQUM7UUFGQSxZQUFPLEdBQVAsT0FBTyxDQUFvQjtJQUdyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsTUFBTSxNQUFNLEdBQVE7WUFDbEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRTtTQUN4QixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ25DLElBQUksRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDekIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBcENVLHFCQUFxQjs0RkFBckIscUJBQXFCLDBHQ1ZsQyxvckNBa0NBOzs0RkR4QmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjt5R0FNcEIsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlfSBmcm9tICcuLi8uLi8uLi9iYXNlLW1vZGVsJztcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vLi4vdXNlci5tb2RlbCc7XG5pbXBvcnQge1VzZXJTZXNzaW9uU2VydmljZX0gZnJvbSBcIi4uL3VzZXItc2Vzc2lvbi5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC11c2VyLXNlc3Npb25zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItc2Vzc2lvbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91c2VyLXNlc3Npb25zLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBVc2VyU2Vzc2lvbnNDb21wb25lbnQgZXh0ZW5kcyBUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSB1c2VyOiBVc2VyO1xuXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gW1xuICAgICcjJyxcbiAgICAnU3RhcnRlZCBPbicsXG4gICAgJ0V4cGlyZXMgQXQnLFxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VydmljZTogVXNlclNlc3Npb25TZXJ2aWNlLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnVzZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICB1c2VyX2lkczogdGhpcy51c2VyPy5pZCxcbiAgICB9O1xuICAgIHRoaXMuc2VydmljZS5pbmRleChwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVscyA9IHRoaXMubW9kZWxzLmNvbmNhdChyZXNwb25zZT8uZGF0YSk7XG4gICAgICAgIHRoaXMuaXNXb3JraW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+ICh0aGlzLmlzV29ya2luZyA9IGZhbHNlKVxuICAgIH0pO1xuICB9XG5cbn1cbiIsIjxtYXQtY2FyZD5cbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJtb2RlbHNcIiBjbGFzcz1cInctMTAwXCI+XG5cbiAgICAgIDwhLS0gIyBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIiNcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gIyA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDsgbGV0IGkgPSBpbmRleFwiPiB7eyBpICsgMSB9fSA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gU3RhcnRlZCBPbiBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIlN0YXJ0ZWQgT25cIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gU3RhcnRlZCBPbiA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIHt7IGVsZW1lbnQ/LmNyZWF0ZWRfYXQgfCBkYXRlOidtZWRpdW0nIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBFeHBpcmVzIEF0IENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiRXhwaXJlcyBBdFwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBFeHBpcmVzIEF0IDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAge3sgZWxlbWVudD8uZXhwaXJlc19hdCB8IGRhdGU6J21lZGl1bScgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+PC90cj5cbiAgICA8L3RhYmxlPlxuXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAqbmdJZj1cImlzV29ya2luZ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cblxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPlxuIl19