@firestitch/app-message 15.0.0 → 16.0.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 (69) hide show
  1. package/app/modules/message-queues/components/queues/queues.component.d.ts +1 -1
  2. package/app/modules/message-queues/components/recipient/recipient.component.d.ts +1 -1
  3. package/app/modules/messages/components/attachments/attachments.component.d.ts +1 -1
  4. package/{esm2020 → esm2022}/app/modules/app-message/app-message.module.mjs +5 -5
  5. package/esm2022/app/modules/message-preview/components/preview/preview.component.mjs +29 -0
  6. package/{esm2020 → esm2022}/app/modules/message-preview/message-preview.module.mjs +11 -11
  7. package/esm2022/app/modules/message-queues/components/queue/queue.component.mjs +225 -0
  8. package/esm2022/app/modules/message-queues/components/queues/queues.component.mjs +203 -0
  9. package/esm2022/app/modules/message-queues/components/recipient/recipient.component.mjs +29 -0
  10. package/{esm2020 → esm2022}/app/modules/message-queues/message-queues.module.mjs +46 -46
  11. package/{esm2020 → esm2022}/app/modules/message-queues/pipes/linkify.pipe.mjs +4 -4
  12. package/{esm2020 → esm2022}/app/modules/message-queues/pipes/truncate.pipe.mjs +4 -4
  13. package/esm2022/app/modules/message-queues/services/message-queue.service.mjs +30 -0
  14. package/esm2022/app/modules/message-templates/components/template/template.component.mjs +87 -0
  15. package/esm2022/app/modules/message-templates/components/templates/templates.component.mjs +83 -0
  16. package/{esm2020 → esm2022}/app/modules/message-templates/message-templates.module.mjs +39 -39
  17. package/esm2022/app/modules/messages/components/attachments/attachments.component.mjs +84 -0
  18. package/esm2022/app/modules/messages/components/message/message.component.mjs +136 -0
  19. package/esm2022/app/modules/messages/components/messages/messages.component.mjs +74 -0
  20. package/{esm2020 → esm2022}/app/modules/messages/messages.module.mjs +52 -52
  21. package/esm2022/app/modules/webhooks/components/webhooks/webhooks.component.mjs +67 -0
  22. package/{esm2020 → esm2022}/app/modules/webhooks/webhooks.module.mjs +7 -7
  23. package/{fesm2020 → fesm2022}/firestitch-app-message.mjs +296 -245
  24. package/{fesm2020 → fesm2022}/firestitch-app-message.mjs.map +1 -1
  25. package/package.json +5 -11
  26. package/esm2020/app/modules/message-preview/components/preview/preview.component.mjs +0 -26
  27. package/esm2020/app/modules/message-queues/components/queue/queue.component.mjs +0 -210
  28. package/esm2020/app/modules/message-queues/components/queues/queues.component.mjs +0 -198
  29. package/esm2020/app/modules/message-queues/components/recipient/recipient.component.mjs +0 -26
  30. package/esm2020/app/modules/message-queues/services/message-queue.service.mjs +0 -29
  31. package/esm2020/app/modules/message-templates/components/template/template.component.mjs +0 -81
  32. package/esm2020/app/modules/message-templates/components/templates/templates.component.mjs +0 -81
  33. package/esm2020/app/modules/messages/components/attachments/attachments.component.mjs +0 -81
  34. package/esm2020/app/modules/messages/components/message/message.component.mjs +0 -129
  35. package/esm2020/app/modules/messages/components/messages/messages.component.mjs +0 -72
  36. package/esm2020/app/modules/webhooks/components/webhooks/webhooks.component.mjs +0 -63
  37. package/fesm2015/firestitch-app-message.mjs +0 -1317
  38. package/fesm2015/firestitch-app-message.mjs.map +0 -1
  39. /package/{esm2020 → esm2022}/app/helpers/index-name-value.mjs +0 -0
  40. /package/{esm2020 → esm2022}/app/helpers/index.mjs +0 -0
  41. /package/{esm2020 → esm2022}/app/modules/app-message/injectors/app-message-config.injector.mjs +0 -0
  42. /package/{esm2020 → esm2022}/app/modules/app-message/injectors/index.mjs +0 -0
  43. /package/{esm2020 → esm2022}/app/modules/app-message/interfaces/app-message-config.mjs +0 -0
  44. /package/{esm2020 → esm2022}/app/modules/app-message/interfaces/index.mjs +0 -0
  45. /package/{esm2020 → esm2022}/app/modules/app-message/types/index.mjs +0 -0
  46. /package/{esm2020 → esm2022}/app/modules/app-message/types/types.type.mjs +0 -0
  47. /package/{esm2020 → esm2022}/app/modules/message-preview/components/index.mjs +0 -0
  48. /package/{esm2020 → esm2022}/app/modules/message-preview/components/preview/index.mjs +0 -0
  49. /package/{esm2020 → esm2022}/app/modules/message-queues/consts/index.mjs +0 -0
  50. /package/{esm2020 → esm2022}/app/modules/message-queues/consts/message-queue-event-type.const.mjs +0 -0
  51. /package/{esm2020 → esm2022}/app/modules/message-queues/consts/message-queue-states.const.mjs +0 -0
  52. /package/{esm2020 → esm2022}/app/modules/message-queues/enums/email-message-queue-format.enum.mjs +0 -0
  53. /package/{esm2020 → esm2022}/app/modules/message-queues/enums/index.mjs +0 -0
  54. /package/{esm2020 → esm2022}/app/modules/message-queues/enums/message-queue-event-type.enum.mjs +0 -0
  55. /package/{esm2020 → esm2022}/app/modules/message-queues/enums/message-queue-state.enum.mjs +0 -0
  56. /package/{esm2020 → esm2022}/app/modules/message-queues/enums/message-queue-type.enum.mjs +0 -0
  57. /package/{esm2020 → esm2022}/app/modules/message-templates/components/index.mjs +0 -0
  58. /package/{esm2020 → esm2022}/app/modules/message-templates/components/template/index.mjs +0 -0
  59. /package/{esm2020 → esm2022}/app/modules/message-templates/components/templates/index.mjs +0 -0
  60. /package/{esm2020 → esm2022}/app/modules/messages/components/attachments/index.mjs +0 -0
  61. /package/{esm2020 → esm2022}/app/modules/messages/components/index.mjs +0 -0
  62. /package/{esm2020 → esm2022}/app/modules/messages/components/message/index.mjs +0 -0
  63. /package/{esm2020 → esm2022}/app/modules/messages/components/messages/index.mjs +0 -0
  64. /package/{esm2020 → esm2022}/app/modules/messages/consts/email-message-formats.const.mjs +0 -0
  65. /package/{esm2020 → esm2022}/app/modules/messages/consts/index.mjs +0 -0
  66. /package/{esm2020 → esm2022}/app/modules/messages/enums/email-message-format.enum.mjs +0 -0
  67. /package/{esm2020 → esm2022}/app/modules/messages/enums/index.mjs +0 -0
  68. /package/{esm2020 → esm2022}/firestitch-app-message.mjs +0 -0
  69. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -27,5 +27,5 @@ export declare class QueuesComponent implements OnInit, OnDestroy {
27
27
  open(messageQueue: any): void;
28
28
  ngOnDestroy(): void;
29
29
  static ɵfac: i0.ɵɵFactoryDeclaration<QueuesComponent, never>;
30
- static ɵcmp: i0.ɵɵComponentDeclaration<QueuesComponent, "fs-app-message-queues", never, { "query": "query"; "type": "type"; }, {}, never, never, false, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<QueuesComponent, "fs-app-message-queues", never, { "query": { "alias": "query"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, {}, never, never, false, never>;
31
31
  }
@@ -6,5 +6,5 @@ export declare class RecipientComponent implements OnInit {
6
6
  icon: any;
7
7
  ngOnInit(): void;
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<RecipientComponent, never>;
9
- static ɵcmp: i0.ɵɵComponentDeclaration<RecipientComponent, "app-recipient", never, { "name": "name"; "state": "state"; }, {}, never, never, false, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<RecipientComponent, "app-recipient", never, { "name": { "alias": "name"; "required": false; }; "state": { "alias": "state"; "required": false; }; }, {}, never, never, false, never>;
10
10
  }
@@ -14,5 +14,5 @@ export declare class AttachmentsComponent implements OnInit, OnDestroy {
14
14
  ngOnInit(): void;
15
15
  ngOnDestroy(): void;
16
16
  static ɵfac: i0.ɵɵFactoryDeclaration<AttachmentsComponent, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<AttachmentsComponent, "fs-app-message-attachments", never, { "message": "message"; }, {}, never, never, false, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<AttachmentsComponent, "fs-app-message-attachments", never, { "message": { "alias": "message"; "required": false; }; }, {}, never, never, false, never>;
18
18
  }
@@ -6,12 +6,12 @@ export class FsAppMessageModule {
6
6
  ngModule: FsAppMessageModule,
7
7
  };
8
8
  }
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAppMessageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: FsAppMessageModule });
11
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAppMessageModule });
9
12
  }
10
- FsAppMessageModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsAppMessageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
- FsAppMessageModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: FsAppMessageModule });
12
- FsAppMessageModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsAppMessageModule });
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsAppMessageModule, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAppMessageModule, decorators: [{
14
14
  type: NgModule,
15
15
  args: [{}]
16
16
  }] });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLW1lc3NhZ2UubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2FwcC1tZXNzYWdlL2FwcC1tZXNzYWdlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGVBQWUsQ0FBQzs7QUFLOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixNQUFNLENBQUMsT0FBTztRQUNaLE9BQU87WUFDTCxRQUFRLEVBQUUsa0JBQWtCO1NBQzdCLENBQUM7SUFDSixDQUFDOztnSEFMVSxrQkFBa0I7aUhBQWxCLGtCQUFrQjtpSEFBbEIsa0JBQWtCOzRGQUFsQixrQkFBa0I7a0JBRjlCLFFBQVE7bUJBQUMsRUFDVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuQE5nTW9kdWxlKHtcbn0pXG5leHBvcnQgY2xhc3MgRnNBcHBNZXNzYWdlTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxGc0FwcE1lc3NhZ2VNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEZzQXBwTWVzc2FnZU1vZHVsZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLW1lc3NhZ2UubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL2FwcC1tZXNzYWdlL2FwcC1tZXNzYWdlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGVBQWUsQ0FBQzs7QUFLOUQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixNQUFNLENBQUMsT0FBTztRQUNaLE9BQU87WUFDTCxRQUFRLEVBQUUsa0JBQWtCO1NBQzdCLENBQUM7SUFDSixDQUFDO3dHQUxVLGtCQUFrQjt5R0FBbEIsa0JBQWtCO3lHQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRjlCLFFBQVE7bUJBQUMsRUFDVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuQE5nTW9kdWxlKHtcbn0pXG5leHBvcnQgY2xhc3MgRnNBcHBNZXNzYWdlTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxGc0FwcE1lc3NhZ2VNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEZzQXBwTWVzc2FnZU1vZHVsZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/dialog";
5
+ import * as i2 from "@angular/material/button";
6
+ import * as i3 from "@firestitch/dialog";
7
+ import * as i4 from "@firestitch/iframe";
8
+ export class PreviewComponent {
9
+ _data;
10
+ html;
11
+ styles;
12
+ constructor(_data) {
13
+ this._data = _data;
14
+ this.html = _data.html;
15
+ this.styles = _data.styles;
16
+ }
17
+ ngOnInit() {
18
+ }
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PreviewComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
20
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PreviewComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <div mat-dialog-title>Preview</div>\n <mat-dialog-content>\n <fs-iframe\n [html]=\"html\"\n [width]=\"'100%'\"\n [styles]=\"styles\">\n </fs-iframe>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button [mat-dialog-close]=\"null\" color=\"primary\" type=\"button\">Done</button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { 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: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i2.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: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "component", type: i4.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "src", "styles", "width", "height"], outputs: ["loaded"] }] });
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PreviewComponent, decorators: [{
23
+ type: Component,
24
+ args: [{ template: "<fs-dialog>\n <div mat-dialog-title>Preview</div>\n <mat-dialog-content>\n <fs-iframe\n [html]=\"html\"\n [width]=\"'100%'\"\n [styles]=\"styles\">\n </fs-iframe>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button [mat-dialog-close]=\"null\" color=\"primary\" type=\"button\">Done</button>\n </mat-dialog-actions>\n</fs-dialog>\n" }]
25
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
26
+ type: Inject,
27
+ args: [MAT_DIALOG_DATA]
28
+ }] }]; } });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvbWVzc2FnZS1wcmV2aWV3L2NvbXBvbmVudHMvcHJldmlldy9wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tZXNzYWdlLXByZXZpZXcvY29tcG9uZW50cy9wcmV2aWV3L3ByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7QUFPM0QsTUFBTSxPQUFPLGdCQUFnQjtJQU1RO0lBSjVCLElBQUksQ0FBQztJQUNMLE1BQU0sQ0FBQztJQUVkLFlBQ21DLEtBQUs7UUFBTCxVQUFLLEdBQUwsS0FBSyxDQUFBO1FBRXRDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQztJQUVNLFFBQVE7SUFFZixDQUFDO3dHQWRVLGdCQUFnQixrQkFNakIsZUFBZTs0RkFOZCxnQkFBZ0Isb0RDVDdCLHlYQWFBOzs0RkRKYSxnQkFBZ0I7a0JBSjVCLFNBQVM7OzswQkFVTCxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9wcmV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJldmlldy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByZXZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBodG1sO1xuICBwdWJsaWMgc3R5bGVzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhLFxuICApIHtcbiAgICB0aGlzLmh0bWwgPSBfZGF0YS5odG1sO1xuICAgIHRoaXMuc3R5bGVzID0gX2RhdGEuc3R5bGVzO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuXG4gIH1cbn1cbiIsIjxmcy1kaWFsb2c+XG4gIDxkaXYgbWF0LWRpYWxvZy10aXRsZT5QcmV2aWV3PC9kaXY+XG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGZzLWlmcmFtZVxuICAgICAgW2h0bWxdPVwiaHRtbFwiXG4gICAgICBbd2lkdGhdPVwiJzEwMCUnXCJcbiAgICAgIFtzdHlsZXNdPVwic3R5bGVzXCI+XG4gICAgPC9mcy1pZnJhbWU+XG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCIgY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiPkRvbmU8L2J1dHRvbj5cbiAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG48L2ZzLWRpYWxvZz5cbiJdfQ==
@@ -6,17 +6,17 @@ import { FsDialogModule } from '@firestitch/dialog';
6
6
  import { PreviewComponent } from './components/preview';
7
7
  import * as i0 from "@angular/core";
8
8
  export class FsAppMessagePreviewModule {
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAppMessagePreviewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: FsAppMessagePreviewModule, declarations: [PreviewComponent], imports: [MatDialogModule,
11
+ MatButtonModule,
12
+ FsDialogModule,
13
+ FsIFrameModule], exports: [PreviewComponent] });
14
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAppMessagePreviewModule, imports: [MatDialogModule,
15
+ MatButtonModule,
16
+ FsDialogModule,
17
+ FsIFrameModule] });
9
18
  }
10
- FsAppMessagePreviewModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsAppMessagePreviewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
- FsAppMessagePreviewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: FsAppMessagePreviewModule, declarations: [PreviewComponent], imports: [MatDialogModule,
12
- MatButtonModule,
13
- FsDialogModule,
14
- FsIFrameModule], exports: [PreviewComponent] });
15
- FsAppMessagePreviewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsAppMessagePreviewModule, imports: [MatDialogModule,
16
- MatButtonModule,
17
- FsDialogModule,
18
- FsIFrameModule] });
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsAppMessagePreviewModule, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FsAppMessagePreviewModule, decorators: [{
20
20
  type: NgModule,
21
21
  args: [{
22
22
  imports: [
@@ -33,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
33
33
  ]
34
34
  }]
35
35
  }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1wcmV2aWV3Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tZXNzYWdlLXByZXZpZXcvbWVzc2FnZS1wcmV2aWV3Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFrQnhELE1BQU0sT0FBTyx5QkFBeUI7O3VIQUF6Qix5QkFBeUI7d0hBQXpCLHlCQUF5QixpQkFObEMsZ0JBQWdCLGFBUGhCLGVBQWU7UUFDZixlQUFlO1FBRWYsY0FBYztRQUNkLGNBQWMsYUFNZCxnQkFBZ0I7d0hBR1AseUJBQXlCLFlBYmxDLGVBQWU7UUFDZixlQUFlO1FBRWYsY0FBYztRQUNkLGNBQWM7NEZBU0wseUJBQXlCO2tCQWZyQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxlQUFlO3dCQUNmLGVBQWU7d0JBRWYsY0FBYzt3QkFDZCxjQUFjO3FCQUNmO29CQUNELFlBQVksRUFBRTt3QkFDWixnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxnQkFBZ0I7cUJBQ2pCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzSUZyYW1lTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvaWZyYW1lJztcbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcblxuaW1wb3J0IHsgUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcmV2aWV3JztcblxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcblxuICAgIEZzRGlhbG9nTW9kdWxlLFxuICAgIEZzSUZyYW1lTW9kdWxlLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBQcmV2aWV3Q29tcG9uZW50LFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgUHJldmlld0NvbXBvbmVudCxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGc0FwcE1lc3NhZ2VQcmV2aWV3TW9kdWxlIHtcbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1wcmV2aWV3Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tZXNzYWdlLXByZXZpZXcvbWVzc2FnZS1wcmV2aWV3Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFrQnhELE1BQU0sT0FBTyx5QkFBeUI7d0dBQXpCLHlCQUF5Qjt5R0FBekIseUJBQXlCLGlCQU5sQyxnQkFBZ0IsYUFQaEIsZUFBZTtZQUNmLGVBQWU7WUFFZixjQUFjO1lBQ2QsY0FBYyxhQU1kLGdCQUFnQjt5R0FHUCx5QkFBeUIsWUFibEMsZUFBZTtZQUNmLGVBQWU7WUFFZixjQUFjO1lBQ2QsY0FBYzs7NEZBU0wseUJBQXlCO2tCQWZyQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxlQUFlO3dCQUNmLGVBQWU7d0JBRWYsY0FBYzt3QkFDZCxjQUFjO3FCQUNmO29CQUNELFlBQVksRUFBRTt3QkFDWixnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxnQkFBZ0I7cUJBQ2pCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzSUZyYW1lTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvaWZyYW1lJztcbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcblxuaW1wb3J0IHsgUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcmV2aWV3JztcblxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcblxuICAgIEZzRGlhbG9nTW9kdWxlLFxuICAgIEZzSUZyYW1lTW9kdWxlLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBQcmV2aWV3Q29tcG9uZW50LFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgUHJldmlld0NvbXBvbmVudCxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGc0FwcE1lc3NhZ2VQcmV2aWV3TW9kdWxlIHtcbn1cbiJdfQ==
@@ -0,0 +1,225 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, ViewChild, } from '@angular/core';
2
+ import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
3
+ import { FsListComponent } from '@firestitch/list';
4
+ import { FsMessage } from '@firestitch/message';
5
+ import { FsPrompt } from '@firestitch/prompt';
6
+ import { Subject } from 'rxjs';
7
+ import { map } from 'rxjs/operators';
8
+ import anchorme from 'anchorme';
9
+ import { indexNameValue } from '../../../../helpers';
10
+ import { MessageComponent } from '../../../../modules/messages/components';
11
+ import { FS_APP_MESSAGE_CONFIG } from '../../../app-message/injectors';
12
+ import { MessageQueueStates } from '../../consts';
13
+ import { MessageQueueEventTypes } from '../../consts/message-queue-event-type.const';
14
+ import { EmailMessageQueueFormat, MessageQueueEventType, MessageQueueType } from '../../enums';
15
+ import * as i0 from "@angular/core";
16
+ import * as i1 from "@firestitch/message";
17
+ import * as i2 from "@firestitch/prompt";
18
+ import * as i3 from "@angular/material/dialog";
19
+ import * as i4 from "@angular/common";
20
+ import * as i5 from "@angular/material/button";
21
+ import * as i6 from "@angular/material/tabs";
22
+ import * as i7 from "@firestitch/list";
23
+ import * as i8 from "@firestitch/dialog";
24
+ import * as i9 from "@firestitch/label";
25
+ import * as i10 from "@firestitch/date";
26
+ import * as i11 from "@firestitch/skeleton";
27
+ import * as i12 from "@firestitch/form";
28
+ import * as i13 from "@firestitch/iframe";
29
+ import * as i14 from "../recipient/recipient.component";
30
+ export class QueueComponent {
31
+ _config;
32
+ _data;
33
+ _message;
34
+ _prompt;
35
+ _dialog;
36
+ _cdRef;
37
+ logList;
38
+ messageQueue;
39
+ loadMessage;
40
+ resendMessageQueue;
41
+ forwardMessageQueue;
42
+ messageQueueRecipients = {};
43
+ emailMessageQueueFormat = EmailMessageQueueFormat;
44
+ messageQueueStates;
45
+ logConfig;
46
+ attachmentConfig;
47
+ eventConfig;
48
+ MessageQueueEventTypes = indexNameValue(MessageQueueEventTypes);
49
+ MessageQueueEventType = MessageQueueEventType;
50
+ _destroy$ = new Subject();
51
+ constructor(_config, _data, _message, _prompt, _dialog, _cdRef) {
52
+ this._config = _config;
53
+ this._data = _data;
54
+ this._message = _message;
55
+ this._prompt = _prompt;
56
+ this._dialog = _dialog;
57
+ this._cdRef = _cdRef;
58
+ }
59
+ ngOnInit() {
60
+ this.messageQueueStates = indexNameValue(MessageQueueStates);
61
+ this.resendMessageQueue = this._config.resendMessageQueue;
62
+ this.forwardMessageQueue = this._config.forwardMessageQueue;
63
+ this._config.loadMessageQueue(this._data.messageQueueId)
64
+ .subscribe((messageQueue) => {
65
+ this.messageQueue = messageQueue;
66
+ if (this.messageQueue.emailMessageQueue) {
67
+ let body = this.messageQueue.emailMessageQueue.body;
68
+ if (this.messageQueue.emailMessageQueue.format === EmailMessageQueueFormat.HTML) {
69
+ try {
70
+ const doc = new DOMParser().parseFromString(body, 'text/html');
71
+ doc.querySelectorAll('a').forEach((el) => {
72
+ el.setAttribute('target', '_blank');
73
+ });
74
+ body = doc.documentElement.innerHTML;
75
+ }
76
+ catch (e) {
77
+ }
78
+ }
79
+ else {
80
+ body = this.anchorMe(body);
81
+ }
82
+ this.messageQueue.emailMessageQueue.body = body;
83
+ }
84
+ if (this.messageQueue.smsMessageQueue) {
85
+ this.messageQueue.smsMessageQueue.body = this.anchorMe(this.messageQueue.smsMessageQueue.body);
86
+ }
87
+ this.messageQueueRecipients = this.messageQueue.messageQueueRecipients
88
+ .reduce((accum, messageQueueRecipient) => {
89
+ accum[messageQueueRecipient.recipient] = messageQueueRecipient.state;
90
+ return accum;
91
+ }, {});
92
+ this._setLogsConfig(messageQueue);
93
+ this._setAttachmentsConfig(messageQueue);
94
+ this._setEventsConfig(messageQueue);
95
+ this._cdRef.markForCheck();
96
+ });
97
+ }
98
+ anchorMe(input) {
99
+ return anchorme({
100
+ input,
101
+ options: {
102
+ attributes: {
103
+ target: "_blank",
104
+ }
105
+ }
106
+ });
107
+ }
108
+ openMessage(message) {
109
+ this._dialog.open(MessageComponent, {
110
+ data: {
111
+ message: message,
112
+ },
113
+ width: '85%'
114
+ });
115
+ }
116
+ resend() {
117
+ this._prompt.confirm({
118
+ title: 'Confirm',
119
+ template: 'Are you sure you would like to resend this message?'
120
+ }).subscribe(() => {
121
+ this.resendMessageQueue(this.messageQueue)
122
+ .subscribe(messageQueue => {
123
+ Object.assign(this.messageQueue, messageQueue);
124
+ this._cdRef.markForCheck();
125
+ this._message.success('Successfully resent');
126
+ if (this.logList) {
127
+ this.logList.reload();
128
+ }
129
+ });
130
+ });
131
+ }
132
+ forward() {
133
+ const typeName = this.messageQueue.type === MessageQueueType.Email ? 'an email' : 'a phone number';
134
+ this._prompt.input({
135
+ label: `Please enter ${typeName} to forward to`,
136
+ title: 'Forward Message',
137
+ commitLabel: 'Forward',
138
+ required: true
139
+ }).subscribe((value) => {
140
+ if (value) {
141
+ this.forwardMessageQueue(this.messageQueue, value)
142
+ .subscribe(messageQueue => {
143
+ this.messageQueue = {
144
+ ...this.messageQueue,
145
+ messageQueue,
146
+ };
147
+ this._message.success('Successfully forwarded');
148
+ this._cdRef.markForCheck();
149
+ if (this.logList) {
150
+ this.logList.reload();
151
+ }
152
+ });
153
+ }
154
+ });
155
+ }
156
+ ngOnDestroy() {
157
+ this._destroy$.next();
158
+ this._destroy$.complete();
159
+ }
160
+ _setLogsConfig(messageQueue) {
161
+ this.logConfig = {
162
+ loadMore: true,
163
+ queryParam: false,
164
+ fetch: query => {
165
+ return this._config.loadLogs(messageQueue, query);
166
+ }
167
+ };
168
+ }
169
+ _setEventsConfig(messageQueue) {
170
+ this.eventConfig = {
171
+ loadMore: true,
172
+ queryParam: false,
173
+ fetch: (query) => {
174
+ return this._config.loadMessageQueueEvents(messageQueue, query);
175
+ }
176
+ };
177
+ }
178
+ _setAttachmentsConfig(messageQueue) {
179
+ this.attachmentConfig = {
180
+ queryParam: false,
181
+ fetch: query => {
182
+ return this._config.loadMessageQueueAttachments(messageQueue, query)
183
+ .pipe(map(response => ({
184
+ data: response.data.map(value => {
185
+ value.prettyFilesize = this._prettyFilesize(value.filesize);
186
+ return value;
187
+ }), paging: response.paging
188
+ })));
189
+ }
190
+ };
191
+ if (this._config.downloadMessageQueueAttachment) {
192
+ this.attachmentConfig.rowActions = [
193
+ {
194
+ click: (messageAttachment) => {
195
+ this._config.downloadMessageQueueAttachment(messageAttachment, this.messageQueue);
196
+ },
197
+ label: 'Download',
198
+ }
199
+ ];
200
+ }
201
+ }
202
+ _prettyFilesize(bytes) {
203
+ if (bytes === 0) {
204
+ return '0.00 B';
205
+ }
206
+ const e = Math.floor(Math.log(bytes) / Math.log(1024));
207
+ return (bytes / Math.pow(1024, e)).toFixed(2) + ' ' + ' KMGTP'.charAt(e) + 'B';
208
+ }
209
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QueueComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: MAT_DIALOG_DATA }, { token: i1.FsMessage }, { token: i2.FsPrompt }, { token: i3.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
210
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: QueueComponent, selector: "ng-component", viewQueries: [{ propertyName: "logList", first: true, predicate: ["logList"], descendants: true }], ngImport: i0, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title>Message Queue</div>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-large.wrap\">\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n <app-recipient \n *ngFor=\"let recipient of messageQueue.emailMessageQueue.toRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.ccRecipients.length\">\n <fs-label>\n CC\n </fs-label>\n <app-recipient \n *ngFor=\"let recipient of messageQueue.emailMessageQueue.ccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient> \n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.bccRecipients.length\">\n <fs-label>\n BCC\n </fs-label>\n <app-recipient \n *ngFor=\"let recipient of messageQueue.emailMessageQueue.bccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient> \n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail\">\n <fs-label>\n From\n </fs-label>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail; else fromEmailName\">\n {{messageQueue.emailMessageQueue.fromName}}\n </ng-container>\n\n <ng-template #fromEmailName>\n {{messageQueue.emailMessageQueue.fromName}}\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromEmail\">\n ({{messageQueue.emailMessageQueue.fromEmail}})\n </ng-container>\n </ng-template>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length\">\n <fs-label>\n Reply To\n </fs-label>\n {{messageQueue.emailMessageQueue.replyEmail.join(', ')}}\n </fs-label-field>\n </ng-container>\n\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient \n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient> \n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.smsMessageQueue.fromNumber\">\n <fs-label>\n From Number\n </fs-label>\n {{messageQueue.smsMessageQueue.fromNumber}}\n </fs-label-field>\n </ng-container>\n \n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{messageQueue.scheduledDate | fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{messageQueueStates[messageQueue.state]}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.message\">\n <fs-label>\n Message Type\n </fs-label>\n <a\n (click)=\"openMessage(messageQueue.message)\"\n *ngIf=\"loadMessage; else elseMessage\">\n {{messageQueue.message.name}}\n </a>\n <ng-template #elseMessage>\n {{messageQueue.message.name}}\n </ng-template>\n </fs-label-field>\n </div>\n\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{messageQueue.emailMessageQueue.subject}}\n </fs-label-field>\n\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n <div\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text\"\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n <fs-iframe\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText\"\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n </fs-label-field>\n </ng-container>\n\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n </ng-container>\n\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list [config]=\"logConfig\" #logList>\n <fs-list-column title=\"Message\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.filename}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.prettyFilesize}}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.messageQueueRecipient.recipient}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template fs-list-cell let-row=\"row\">\n {{MessageQueueEventTypes[row.type]}}\n <div class=\"small\" *ngIf=\"row.type === MessageQueueEventType.Click\">\n <a [href]=\"row.meta?.url\" target=\"_blank\">{{row.meta?.url}}</a>\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.createDate | fsDateFormat: 'date-time-yearless'}}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n <button\n mat-button\n *ngIf=\"resendMessageQueue\"\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n *ngIf=\"forwardMessageQueue\"\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: i7.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i7.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i7.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: i8.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "component", type: i9.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i9.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { kind: "component", type: i10.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "directive", type: i11.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "directive", type: i12.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i13.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "src", "styles", "width", "height"], outputs: ["loaded"] }, { kind: "component", type: i14.RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { kind: "pipe", type: i10.FsDateFormatPipe, name: "fsDateFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
211
+ }
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QueueComponent, decorators: [{
213
+ type: Component,
214
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title>Message Queue</div>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-large.wrap\">\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n <app-recipient \n *ngFor=\"let recipient of messageQueue.emailMessageQueue.toRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.ccRecipients.length\">\n <fs-label>\n CC\n </fs-label>\n <app-recipient \n *ngFor=\"let recipient of messageQueue.emailMessageQueue.ccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient> \n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.bccRecipients.length\">\n <fs-label>\n BCC\n </fs-label>\n <app-recipient \n *ngFor=\"let recipient of messageQueue.emailMessageQueue.bccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient> \n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail\">\n <fs-label>\n From\n </fs-label>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail; else fromEmailName\">\n {{messageQueue.emailMessageQueue.fromName}}\n </ng-container>\n\n <ng-template #fromEmailName>\n {{messageQueue.emailMessageQueue.fromName}}\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromEmail\">\n ({{messageQueue.emailMessageQueue.fromEmail}})\n </ng-container>\n </ng-template>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length\">\n <fs-label>\n Reply To\n </fs-label>\n {{messageQueue.emailMessageQueue.replyEmail.join(', ')}}\n </fs-label-field>\n </ng-container>\n\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient \n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient> \n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.smsMessageQueue.fromNumber\">\n <fs-label>\n From Number\n </fs-label>\n {{messageQueue.smsMessageQueue.fromNumber}}\n </fs-label-field>\n </ng-container>\n \n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{messageQueue.scheduledDate | fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{messageQueueStates[messageQueue.state]}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.message\">\n <fs-label>\n Message Type\n </fs-label>\n <a\n (click)=\"openMessage(messageQueue.message)\"\n *ngIf=\"loadMessage; else elseMessage\">\n {{messageQueue.message.name}}\n </a>\n <ng-template #elseMessage>\n {{messageQueue.message.name}}\n </ng-template>\n </fs-label-field>\n </div>\n\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{messageQueue.emailMessageQueue.subject}}\n </fs-label-field>\n\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n <div\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text\"\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n <fs-iframe\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText\"\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n </fs-label-field>\n </ng-container>\n\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n </ng-container>\n\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list [config]=\"logConfig\" #logList>\n <fs-list-column title=\"Message\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.filename}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.prettyFilesize}}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.messageQueueRecipient.recipient}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template fs-list-cell let-row=\"row\">\n {{MessageQueueEventTypes[row.type]}}\n <div class=\"small\" *ngIf=\"row.type === MessageQueueEventType.Click\">\n <a [href]=\"row.meta?.url\" target=\"_blank\">{{row.meta?.url}}</a>\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.createDate | fsDateFormat: 'date-time-yearless'}}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n <button\n mat-button\n *ngIf=\"resendMessageQueue\"\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n *ngIf=\"forwardMessageQueue\"\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"] }]
215
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
216
+ type: Inject,
217
+ args: [FS_APP_MESSAGE_CONFIG]
218
+ }] }, { type: undefined, decorators: [{
219
+ type: Inject,
220
+ args: [MAT_DIALOG_DATA]
221
+ }] }, { type: i1.FsMessage }, { type: i2.FsPrompt }, { type: i3.MatDialog }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { logList: [{
222
+ type: ViewChild,
223
+ args: ['logList']
224
+ }] } });
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBQ1QsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVC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RkF0QmQsY0FBYyx3SkNsQzNCLDhzUkEyT0E7OzRGRHpNYSxjQUFjO2tCQUwxQixTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU07OzBCQXVCNUMsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUM1QixNQUFNOzJCQUFDLGVBQWU7bUpBbkJsQixPQUFPO3NCQURiLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzTGlzdENvbXBvbmVudCwgRnNMaXN0Q29uZmlnIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgYW5jaG9ybWUgZnJvbSAnYW5jaG9ybWUnO1xuXG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3J3YXJkTWVzc2FnZVF1ZXVlLCBMb2FkTWVzc2FnZSwgUmVzZW5kTWVzc2FnZVF1ZXVlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZVF1ZXVlU3RhdGVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbWVzc2FnZS1xdWV1ZS1ldmVudC10eXBlLmNvbnN0JztcbmltcG9ydCB7IEVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LCBNZXNzYWdlUXVldWVFdmVudFR5cGUsIE1lc3NhZ2VRdWV1ZVR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9xdWV1ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBRdWV1ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKCdsb2dMaXN0JylcbiAgcHVibGljIGxvZ0xpc3Q6IEZzTGlzdENvbXBvbmVudDtcblxuICBwdWJsaWMgbWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgbG9hZE1lc3NhZ2U6IExvYWRNZXNzYWdlO1xuICBwdWJsaWMgcmVzZW5kTWVzc2FnZVF1ZXVlOiBSZXNlbmRNZXNzYWdlUXVldWU7XG4gIHB1YmxpYyBmb3J3YXJkTWVzc2FnZVF1ZXVlOiBGb3J3YXJkTWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgbWVzc2FnZVF1ZXVlUmVjaXBpZW50cyA9IHt9O1xuICBwdWJsaWMgZW1haWxNZXNzYWdlUXVldWVGb3JtYXQgPSBFbWFpbE1lc3NhZ2VRdWV1ZUZvcm1hdDtcbiAgcHVibGljIG1lc3NhZ2VRdWV1ZVN0YXRlcztcbiAgcHVibGljIGxvZ0NvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgYXR0YWNobWVudENvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgZXZlbnRDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVFdmVudFR5cGVzKTtcbiAgcHVibGljIE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZSA9IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChGU19BUFBfTUVTU0FHRV9DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogRnNBcHBNZXNzYWdlQ29uZmlnLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhLFxuICAgIHByaXZhdGUgX21lc3NhZ2U6IEZzTWVzc2FnZSxcbiAgICBwcml2YXRlIF9wcm9tcHQ6IEZzUHJvbXB0LFxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tZXNzYWdlUXVldWVTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVTdGF0ZXMpO1xuICAgIHRoaXMucmVzZW5kTWVzc2FnZVF1ZXVlID0gdGhpcy5fY29uZmlnLnJlc2VuZE1lc3NhZ2VRdWV1ZTtcbiAgICB0aGlzLmZvcndhcmRNZXNzYWdlUXVldWUgPSB0aGlzLl9jb25maWcuZm9yd2FyZE1lc3NhZ2VRdWV1ZTtcblxuICAgIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlKHRoaXMuX2RhdGEubWVzc2FnZVF1ZXVlSWQpXG4gICAgLnN1YnNjcmliZSgobWVzc2FnZVF1ZXVlKSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IG1lc3NhZ2VRdWV1ZTtcblxuICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keTtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdCA9PT0gRW1haWxNZXNzYWdlUXVldWVGb3JtYXQuSFRNTCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGJvZHksICd0ZXh0L2h0bWwnKTtcblxuICAgICAgICAgICAgZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBib2R5ID0gZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSB0aGlzLmFuY2hvck1lKGJvZHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keSA9IGJvZHk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLmJvZHkgPSB0aGlzLmFuY2hvck1lKHRoaXMubWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5ib2R5KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlUXVldWVSZWNpcGllbnRzID0gdGhpcy5tZXNzYWdlUXVldWUubWVzc2FnZVF1ZXVlUmVjaXBpZW50c1xuICAgICAgICAucmVkdWNlKChhY2N1bSwgbWVzc2FnZVF1ZXVlUmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgYWNjdW1bbWVzc2FnZVF1ZXVlUmVjaXBpZW50LnJlY2lwaWVudF0gPSBtZXNzYWdlUXVldWVSZWNpcGllbnQuc3RhdGU7XG5cbiAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgdGhpcy5fc2V0TG9nc0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgICAgdGhpcy5fc2V0QXR0YWNobWVudHNDb25maWcobWVzc2FnZVF1ZXVlKTtcbiAgICAgIHRoaXMuX3NldEV2ZW50c0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYW5jaG9yTWUoaW5wdXQpIHtcbiAgICByZXR1cm4gYW5jaG9ybWUoe1xuICAgICAgaW5wdXQsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oTWVzc2FnZUNvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnODUlJ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZCgpIHtcbiAgICB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ0NvbmZpcm0nLFxuICAgICAgdGVtcGxhdGU6ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gcmVzZW5kIHRoaXMgbWVzc2FnZT8nXG4gICAgfSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kTWVzc2FnZVF1ZXVlKHRoaXMubWVzc2FnZVF1ZXVlKVxuICAgICAgLnN1YnNjcmliZShtZXNzYWdlUXVldWUgPT4ge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubWVzc2FnZVF1ZXVlLCBtZXNzYWdlUXVldWUpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgcmVzZW50Jyk7XG5cbiAgICAgICAgaWYgKHRoaXMubG9nTGlzdCkge1xuICAgICAgICAgIHRoaXMubG9nTGlzdC5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZm9yd2FyZCgpIHtcbiAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMubWVzc2FnZVF1ZXVlLnR5cGUgPT09IE1lc3NhZ2VRdWV1ZVR5cGUuRW1haWwgPyAnYW4gZW1haWwnIDogJ2EgcGhvbmUgbnVtYmVyJztcblxuICAgIHRoaXMuX3Byb21wdC5pbnB1dCh7XG4gICAgICBsYWJlbDogYFBsZWFzZSBlbnRlciAke3R5cGVOYW1lfSB0byBmb3J3YXJkIHRvYCxcbiAgICAgIHRpdGxlOiAnRm9yd2FyZCBNZXNzYWdlJyxcbiAgICAgIGNvbW1pdExhYmVsOiAnRm9yd2FyZCcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9yd2FyZE1lc3NhZ2VRdWV1ZSh0aGlzLm1lc3NhZ2VRdWV1ZSwgdmFsdWUpXG4gICAgICAgIC5zdWJzY3JpYmUobWVzc2FnZVF1ZXVlID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMubWVzc2FnZVF1ZXVlLFxuICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgZm9yd2FyZGVkJyk7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHRoaXMubG9nTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5sb2dMaXN0LnJlbG9hZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRMb2dzQ29uZmlnKG1lc3NhZ2VRdWV1ZSkge1xuICAgIHRoaXMubG9nQ29uZmlnID0ge1xuICAgICAgbG9hZE1vcmU6IHRydWUsXG4gICAgICBxdWVyeVBhcmFtOiBmYWxzZSxcbiAgICAgIGZldGNoOiBxdWVyeSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcubG9hZExvZ3MobWVzc2FnZVF1ZXVlLCBxdWVyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RXZlbnRzQ29uZmlnKG1lc3NhZ2VRdWV1ZSkge1xuICAgIHRoaXMuZXZlbnRDb25maWcgPSB7XG4gICAgICBsb2FkTW9yZTogdHJ1ZSxcbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlUXVldWVFdmVudHMobWVzc2FnZVF1ZXVlLCBxdWVyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0QXR0YWNobWVudHNDb25maWcobWVzc2FnZVF1ZXVlKSB7XG4gICAgdGhpcy5hdHRhY2htZW50Q29uZmlnID0ge1xuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBmZXRjaDogcXVlcnkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlUXVldWVBdHRhY2htZW50cyhtZXNzYWdlUXVldWUsIHF1ZXJ5KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKHJlc3BvbnNlID0+ICh7XG4gICAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEubWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5wcmV0dHlGaWxlc2l6ZSA9IHRoaXMuX3ByZXR0eUZpbGVzaXplKHZhbHVlLmZpbGVzaXplKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgIH0pLCBwYWdpbmc6IHJlc3BvbnNlLnBhZ2luZ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5kb3dubG9hZE1lc3NhZ2VRdWV1ZUF0dGFjaG1lbnQpIHtcbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZy5yb3dBY3Rpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY2xpY2s6IChtZXNzYWdlQXR0YWNobWVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnLmRvd25sb2FkTWVzc2FnZVF1ZXVlQXR0YWNobWVudChtZXNzYWdlQXR0YWNobWVudCwgdGhpcy5tZXNzYWdlUXVldWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbGFiZWw6ICdEb3dubG9hZCcsXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcHJldHR5RmlsZXNpemUoYnl0ZXMpIHtcbiAgICBpZiAoYnl0ZXMgPT09IDApIHsgcmV0dXJuICcwLjAwIEInOyB9XG4gICAgY29uc3QgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coMTAyNCkpO1xuICAgIHJldHVybiAoYnl0ZXMgLyBNYXRoLnBvdygxMDI0LCBlKSkudG9GaXhlZCgyKSArICcgJyArICcgS01HVFAnLmNoYXJBdChlKSArICdCJztcbiAgfVxufVxuIiwiPGZzLWRpYWxvZyAqZnNTa2VsZXRvbj1cIm1lc3NhZ2VRdWV1ZVwiPlxuICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGU+TWVzc2FnZSBRdWV1ZTwvZGl2PlxuICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxtYXQtdGFiLWdyb3VwPlxuICAgICAgPG1hdC10YWIgbGFiZWw9XCJPdmVydmlld1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1sYXJnZS53cmFwXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICBUbyBSZWNpcGllbnRzXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8YXBwLXJlY2lwaWVudCBcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2YgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLnRvUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICBbc3RhdGVdPVwibWVzc2FnZVF1ZXVlUmVjaXBpZW50c1tyZWNpcGllbnRdXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInJlY2lwaWVudFwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuY2NSZWNpcGllbnRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIENDXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8YXBwLXJlY2lwaWVudCBcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2YgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmNjUmVjaXBpZW50c1wiXG4gICAgICAgICAgICAgICAgICBbc3RhdGVdPVwibWVzc2FnZVF1ZXVlUmVjaXBpZW50c1tyZWNpcGllbnRdXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInJlY2lwaWVudFwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmJjY1JlY2lwaWVudHMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgQkNDXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8YXBwLXJlY2lwaWVudCBcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2YgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmJjY1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZSB8fCBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgRnJvbVxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZSA9PT0gbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21FbWFpbDsgZWxzZSBmcm9tRW1haWxOYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7e21lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZX19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Zyb21FbWFpbE5hbWU+XG4gICAgICAgICAgICAgICAgICB7e21lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZX19XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21FbWFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAoe3ttZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsfX0pXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5yZXBseUVtYWlsICYmIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5yZXBseUVtYWlsLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIFJlcGx5IFRvXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICB7e21lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5yZXBseUVtYWlsLmpvaW4oJywgJyl9fVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICBUbyBOdW1iZXJcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxhcHAtcmVjaXBpZW50IFxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZS5zdGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJtZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLnRvTnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtcmVjaXBpZW50PiAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5mcm9tTnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgRnJvbSBOdW1iZXJcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7bWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5mcm9tTnVtYmVyfX1cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICBcbiAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIERhdGVcbiAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAge3ttZXNzYWdlUXVldWUuc2NoZWR1bGVkRGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2Z1bGwtZGF0ZS10aW1lJ319XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBTdGF0dXNcbiAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAge3ttZXNzYWdlUXVldWVTdGF0ZXNbbWVzc2FnZVF1ZXVlLnN0YXRlXX19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJtZXNzYWdlUXVldWUubWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgTWVzc2FnZSBUeXBlXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5NZXNzYWdlKG1lc3NhZ2VRdWV1ZS5tZXNzYWdlKVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsb2FkTWVzc2FnZTsgZWxzZSBlbHNlTWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgIHt7bWVzc2FnZVF1ZXVlLm1lc3NhZ2UubmFtZX19XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlTWVzc2FnZT5cbiAgICAgICAgICAgICAgICB7e21lc3NhZ2VRdWV1ZS5tZXNzYWdlLm5hbWV9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWVcIj5cbiAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCBjbGFzcz1cInN1YmplY3RcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIFN1YmplY3RcbiAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAge3ttZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuc3ViamVjdH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgY2xhc3M9XCJib2R5XCI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBCb2R5XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdD09PWVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LlRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtdGV4dFwiXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5ib2R5XCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZnMtaWZyYW1lXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZm9ybWF0PT09ZW1haWxNZXNzYWdlUXVldWVGb3JtYXQuSFRNTCB8fCBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZm9ybWF0PT09ZW1haWxNZXNzYWdlUXVldWVGb3JtYXQuUmljaFRleHRcIlxuICAgICAgICAgICAgICAgIFtodG1sXT1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5ib2R5XCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiJzEwMCUnXCI+XG4gICAgICAgICAgICAgIDwvZnMtaWZyYW1lPlxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBNZXNzYWdlXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm1hdC10ZXh0XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUuYm9keVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTG9nc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICA8ZnMtbGlzdCBbY29uZmlnXT1cImxvZ0NvbmZpZ1wiICNsb2dMaXN0PlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiTWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7e3Jvdy5tZXNzYWdlfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJEYXRlXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlZERhdGVcIj48L2ZzLWRhdGUtYWdvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8L2ZzLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkF0dGFjaG1lbnRzXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgIDxmcy1saXN0IFtjb25maWddPVwiYXR0YWNobWVudENvbmZpZ1wiPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRmlsZSBOYW1lXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7cm93LmZpbGVuYW1lfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJGaWxlIFNpemVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3tyb3cucHJldHR5RmlsZXNpemV9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8L2ZzLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkV2ZW50c1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICA8ZnMtbGlzdCBbY29uZmlnXT1cImV2ZW50Q29uZmlnXCI+XG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJSZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3tyb3cubWVzc2FnZVF1ZXVlUmVjaXBpZW50LnJlY2lwaWVudH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRXZlbnRcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3tNZXNzYWdlUXVldWVFdmVudFR5cGVzW3Jvdy50eXBlXX19XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCIgKm5nSWY9XCJyb3cudHlwZSA9PT0gTWVzc2FnZVF1ZXVlRXZlbnRUeXBlLkNsaWNrXCI+XG4gICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJyb3cubWV0YT8udXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3tyb3cubWV0YT8udXJsfX08L2E+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7e3Jvdy5jcmVhdGVEYXRlIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lLXllYXJsZXNzJ319XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgIDwvZnMtbGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICA8L21hdC10YWItZ3JvdXA+XG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICBEb25lXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwicmVzZW5kTWVzc2FnZVF1ZXVlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJyZXNlbmQoKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgIFJlc2VuZFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAqbmdJZj1cImZvcndhcmRNZXNzYWdlUXVldWVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImZvcndhcmQoKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgIEZvcndhcmRcbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG48L2ZzLWRpYWxvZz5cbiJdfQ==