@messaia/cdk-cms 0.0.1-rc01

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 (70) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/cms-routing.module.mjs +52 -0
  3. package/esm2020/lib/cms.module.mjs +134 -0
  4. package/esm2020/lib/comnponents/content-form/content-form.component.mjs +237 -0
  5. package/esm2020/lib/comnponents/document-dialog/document-dialog.component.mjs +91 -0
  6. package/esm2020/lib/comnponents/template-form/template-form.component.mjs +177 -0
  7. package/esm2020/lib/comnponents/template-preview-dialog/template-preview-dialog.component.mjs +126 -0
  8. package/esm2020/lib/enums/content-type.mjs +6 -0
  9. package/esm2020/lib/enums/document-type.mjs +8 -0
  10. package/esm2020/lib/enums/faq-scope.mjs +6 -0
  11. package/esm2020/lib/enums/template-type.mjs +6 -0
  12. package/esm2020/lib/enums/wrap-tag.mjs +9 -0
  13. package/esm2020/lib/models/cms-settings.mjs +12 -0
  14. package/esm2020/lib/models/content-variable.mjs +48 -0
  15. package/esm2020/lib/models/content.mjs +89 -0
  16. package/esm2020/lib/models/document.mjs +102 -0
  17. package/esm2020/lib/models/faq.mjs +71 -0
  18. package/esm2020/lib/models/template-preview.mjs +10 -0
  19. package/esm2020/lib/models/template.mjs +80 -0
  20. package/esm2020/lib/public-api.mjs +25 -0
  21. package/esm2020/lib/resolvers/excluded-columns.resolve.mjs +22 -0
  22. package/esm2020/lib/resolvers/excluded-fields.resolve.mjs +22 -0
  23. package/esm2020/lib/resolvers/includes.resolve.mjs +22 -0
  24. package/esm2020/lib/resolvers/settings.resolve.mjs +26 -0
  25. package/esm2020/lib/services/content-variable.service.mjs +27 -0
  26. package/esm2020/lib/services/content.service.mjs +34 -0
  27. package/esm2020/lib/services/document.generic-service.mjs +11 -0
  28. package/esm2020/lib/services/document.service`.mjs +25 -0
  29. package/esm2020/lib/services/faq.service.mjs +18 -0
  30. package/esm2020/lib/services/template-preview.service.mjs +18 -0
  31. package/esm2020/lib/services/template.service.mjs +18 -0
  32. package/esm2020/messaia-cdk-cms.mjs +5 -0
  33. package/esm2020/public_api.mjs +5 -0
  34. package/fesm2015/messaia-cdk-cms.mjs +1380 -0
  35. package/fesm2015/messaia-cdk-cms.mjs.map +1 -0
  36. package/fesm2020/messaia-cdk-cms.mjs +1367 -0
  37. package/fesm2020/messaia-cdk-cms.mjs.map +1 -0
  38. package/lib/cms-routing.module.d.ts +7 -0
  39. package/lib/cms.module.d.ts +40 -0
  40. package/lib/comnponents/content-form/content-form.component.d.ts +109 -0
  41. package/lib/comnponents/document-dialog/document-dialog.component.d.ts +47 -0
  42. package/lib/comnponents/template-form/template-form.component.d.ts +74 -0
  43. package/lib/comnponents/template-preview-dialog/template-preview-dialog.component.d.ts +68 -0
  44. package/lib/enums/content-type.d.ts +4 -0
  45. package/lib/enums/document-type.d.ts +6 -0
  46. package/lib/enums/faq-scope.d.ts +4 -0
  47. package/lib/enums/template-type.d.ts +4 -0
  48. package/lib/enums/wrap-tag.d.ts +7 -0
  49. package/lib/models/cms-settings.d.ts +10 -0
  50. package/lib/models/content-variable.d.ts +9 -0
  51. package/lib/models/content.d.ts +19 -0
  52. package/lib/models/document.d.ts +26 -0
  53. package/lib/models/faq.d.ts +14 -0
  54. package/lib/models/template-preview.d.ts +17 -0
  55. package/lib/models/template.d.ts +16 -0
  56. package/lib/public-api.d.ts +21 -0
  57. package/lib/resolvers/excluded-columns.resolve.d.ts +14 -0
  58. package/lib/resolvers/excluded-fields.resolve.d.ts +14 -0
  59. package/lib/resolvers/includes.resolve.d.ts +14 -0
  60. package/lib/resolvers/settings.resolve.d.ts +15 -0
  61. package/lib/services/content-variable.service.d.ts +17 -0
  62. package/lib/services/content.service.d.ts +23 -0
  63. package/lib/services/document.generic-service.d.ts +9 -0
  64. package/lib/services/document.service`.d.ts +17 -0
  65. package/lib/services/faq.service.d.ts +11 -0
  66. package/lib/services/template-preview.service.d.ts +11 -0
  67. package/lib/services/template.service.d.ts +11 -0
  68. package/messaia-cdk-cms.d.ts +5 -0
  69. package/package.json +33 -0
  70. package/public_api.d.ts +1 -0
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # CdkCms
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.1.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project cdk-cms` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project cdk-cms`.
8
+ > Note: Don't forget to add `--project cdk-cms` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build cdk-cms` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build cdk-cms`, go to the dist folder `cd dist/cdk-cms` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test cdk-cms` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,52 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { RouterModule } from '@angular/router';
3
+ import { AuthHelper } from '@messaia/cdk';
4
+ import { VdDynamicFormComponent, VdDynamicListComponent } from '@messaia/cdk-base';
5
+ import { ContentFormComponent } from './comnponents/content-form/content-form.component';
6
+ import { DocumentDialogComponent } from './comnponents/document-dialog/document-dialog.component';
7
+ import { TemplateFormComponent } from './comnponents/template-form/template-form.component';
8
+ import { ContentType } from './enums/content-type';
9
+ import { DocumentType } from "./enums/document-type";
10
+ import { Content } from './models/content';
11
+ import { ContentVariable } from './models/content-variable';
12
+ import { Document } from './models/document';
13
+ import { Faq } from './models/faq';
14
+ import { Template } from './models/template';
15
+ import { ExcludedColumnsResolve } from './resolvers/excluded-columns.resolve';
16
+ import { ExcludedFieldsResolve } from './resolvers/excluded-fields.resolve';
17
+ import { IncludesResolve } from './resolvers/includes.resolve';
18
+ import { SettingsResolve } from './resolvers/settings.resolve';
19
+ import * as i0 from "@angular/core";
20
+ import * as i1 from "@angular/router";
21
+ const routes = [
22
+ { path: '', redirectTo: '/cms/contents/page', pathMatch: 'full' },
23
+ { path: 'contents/page', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Page } }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
24
+ { path: 'contents/block', component: VdDynamicListComponent, data: { classType: Content, query: { type: ContentType.Block } }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
25
+ { path: 'contents/:type/add', component: ContentFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
26
+ { path: 'contents/:type/edit/:id', component: ContentFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
27
+ //
28
+ { path: 'variables', component: VdDynamicListComponent, data: { classType: ContentVariable }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
29
+ { path: 'variables/edit/:id', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize `:@@variables:Variables` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
30
+ { path: 'variables/add', component: VdDynamicFormComponent, data: { classType: ContentVariable, subtitle: $localize `:@@variables:Variables` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
31
+ { path: 'templates', component: VdDynamicListComponent, data: { classType: Template, includes: 'Client' }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
32
+ { path: 'templates/edit/:id', component: TemplateFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
33
+ { path: 'templates/add', component: TemplateFormComponent, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
34
+ { path: 'faqs', component: VdDynamicListComponent, data: { classType: Faq }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
35
+ { path: 'faqs/edit/:id', component: VdDynamicFormComponent, data: { classType: Faq, subtitle: $localize `:@@faq:FAQ` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
36
+ { path: 'faqs/add', component: VdDynamicFormComponent, data: { classType: Faq, query: { clientId: AuthHelper.user.clientId }, subtitle: $localize `:@@faq:FAQ` }, resolve: { settings: SettingsResolve, excludedFields: ExcludedFieldsResolve } },
37
+ { path: 'documents', component: VdDynamicListComponent, data: { classType: Document, addDialogType: DocumentDialogComponent, query: { type: DocumentType.Document } }, resolve: { settings: SettingsResolve, includes: IncludesResolve, excludedColumns: ExcludedColumnsResolve } },
38
+ ];
39
+ export class VdCmsRoutingModule {
40
+ }
41
+ VdCmsRoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
42
+ VdCmsRoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] });
43
+ VdCmsRoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsRoutingModule, providers: [SettingsResolve, IncludesResolve, ExcludedColumnsResolve, ExcludedFieldsResolve], imports: [[RouterModule.forChild(routes)], RouterModule] });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsRoutingModule, decorators: [{
45
+ type: NgModule,
46
+ args: [{
47
+ imports: [RouterModule.forChild(routes)],
48
+ exports: [RouterModule],
49
+ providers: [SettingsResolve, IncludesResolve, ExcludedColumnsResolve, ExcludedFieldsResolve]
50
+ }]
51
+ }] });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLXJvdXRpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrLWNtcy9zcmMvbGliL2Ntcy1yb3V0aW5nLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixD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Qjs7K0dBQWxCLGtCQUFrQjtnSEFBbEIsa0JBQWtCLHdDQUhqQixZQUFZO2dIQUdiLGtCQUFrQixhQUZoQixDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLENBQUMsWUFGbkYsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQzlCLFlBQVk7MkZBR2Isa0JBQWtCO2tCQUw5QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsU0FBUyxFQUFFLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsQ0FBQztpQkFDL0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUsIFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEF1dGhIZWxwZXIgfSBmcm9tICdAbWVzc2FpYS9jZGsnO1xyXG5pbXBvcnQgeyBWZER5bmFtaWNGb3JtQ29tcG9uZW50LCBWZER5bmFtaWNMaXN0Q29tcG9uZW50IH0gZnJvbSAnQG1lc3NhaWEvY2RrLWJhc2UnO1xyXG5pbXBvcnQgeyBDb250ZW50Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4vY29tbnBvbmVudHMvY29udGVudC1mb3JtL2NvbnRlbnQtZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEb2N1bWVudERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tbnBvbmVudHMvZG9jdW1lbnQtZGlhbG9nL2RvY3VtZW50LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZUZvcm1Db21wb25lbnQgfSBmcm9tICcuL2NvbW5wb25lbnRzL3RlbXBsYXRlLWZvcm0vdGVtcGxhdGUtZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb250ZW50VHlwZSB9IGZyb20gJy4vZW51bXMvY29udGVudC10eXBlJztcclxuaW1wb3J0IHsgRG9jdW1lbnRUeXBlIH0gZnJvbSBcIi4vZW51bXMvZG9jdW1lbnQtdHlwZVwiO1xyXG5pbXBvcnQgeyBDb250ZW50IH0gZnJvbSAnLi9tb2RlbHMvY29udGVudCc7XHJcbmltcG9ydCB7IENvbnRlbnRWYXJpYWJsZSB9IGZyb20gJy4vbW9kZWxzL2NvbnRlbnQtdmFyaWFibGUnO1xyXG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJy4vbW9kZWxzL2RvY3VtZW50JztcclxuaW1wb3J0IHsgRmFxIH0gZnJvbSAnLi9tb2RlbHMvZmFxJztcclxuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL21vZGVscy90ZW1wbGF0ZSc7XHJcbmltcG9ydCB7IEV4Y2x1ZGVkQ29sdW1uc1Jlc29sdmUgfSBmcm9tICcuL3Jlc29sdmVycy9leGNsdWRlZC1jb2x1bW5zLnJlc29sdmUnO1xyXG5pbXBvcnQgeyBFeGNsdWRlZEZpZWxkc1Jlc29sdmUgfSBmcm9tICcuL3Jlc29sdmVycy9leGNsdWRlZC1maWVsZHMucmVzb2x2ZSc7XHJcbmltcG9ydCB7IEluY2x1ZGVzUmVzb2x2ZSB9IGZyb20gJy4vcmVzb2x2ZXJzL2luY2x1ZGVzLnJlc29sdmUnO1xyXG5pbXBvcnQgeyBTZXR0aW5nc1Jlc29sdmUgfSBmcm9tICcuL3Jlc29sdmVycy9zZXR0aW5ncy5yZXNvbHZlJztcclxuXHJcbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xyXG4gICAgeyBwYXRoOiAnJywgcmVkaXJlY3RUbzogJy9jbXMvY29udGVudHMvcGFnZScsIHBhdGhNYXRjaDogJ2Z1bGwnIH0sXHJcblxyXG4gICAgeyBwYXRoOiAnY29udGVudHMvcGFnZScsIGNvbXBvbmVudDogVmREeW5hbWljTGlzdENvbXBvbmVudCwgZGF0YTogeyBjbGFzc1R5cGU6IENvbnRlbnQsIHF1ZXJ5OiB7IHR5cGU6IENvbnRlbnRUeXBlLlBhZ2UgfSB9LCByZXNvbHZlOiB7IHNldHRpbmdzOiBTZXR0aW5nc1Jlc29sdmUsIGluY2x1ZGVzOiBJbmNsdWRlc1Jlc29sdmUsIGV4Y2x1ZGVkQ29sdW1uczogRXhjbHVkZWRDb2x1bW5zUmVzb2x2ZSB9IH0sXHJcbiAgICB7IHBhdGg6ICdjb250ZW50cy9ibG9jaycsIGNvbXBvbmVudDogVmREeW5hbWljTGlzdENvbXBvbmVudCwgZGF0YTogeyBjbGFzc1R5cGU6IENvbnRlbnQsIHF1ZXJ5OiB7IHR5cGU6IENvbnRlbnRUeXBlLkJsb2NrIH0gfSwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBpbmNsdWRlczogSW5jbHVkZXNSZXNvbHZlLCBleGNsdWRlZENvbHVtbnM6IEV4Y2x1ZGVkQ29sdW1uc1Jlc29sdmUgfSB9LFxyXG4gICAgeyBwYXRoOiAnY29udGVudHMvOnR5cGUvYWRkJywgY29tcG9uZW50OiBDb250ZW50Rm9ybUNvbXBvbmVudCwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuICAgIHsgcGF0aDogJ2NvbnRlbnRzLzp0eXBlL2VkaXQvOmlkJywgY29tcG9uZW50OiBDb250ZW50Rm9ybUNvbXBvbmVudCwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuICAgIC8vXHJcbiAgICB7IHBhdGg6ICd2YXJpYWJsZXMnLCBjb21wb25lbnQ6IFZkRHluYW1pY0xpc3RDb21wb25lbnQsIGRhdGE6IHsgY2xhc3NUeXBlOiBDb250ZW50VmFyaWFibGUgfSwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBpbmNsdWRlczogSW5jbHVkZXNSZXNvbHZlLCBleGNsdWRlZENvbHVtbnM6IEV4Y2x1ZGVkQ29sdW1uc1Jlc29sdmUgfSB9LFxyXG4gICAgeyBwYXRoOiAndmFyaWFibGVzL2VkaXQvOmlkJywgY29tcG9uZW50OiBWZER5bmFtaWNGb3JtQ29tcG9uZW50LCBkYXRhOiB7IGNsYXNzVHlwZTogQ29udGVudFZhcmlhYmxlLCBzdWJ0aXRsZTogJGxvY2FsaXplYDpAQHZhcmlhYmxlczpWYXJpYWJsZXNgIH0sIHJlc29sdmU6IHsgc2V0dGluZ3M6IFNldHRpbmdzUmVzb2x2ZSwgZXhjbHVkZWRGaWVsZHM6IEV4Y2x1ZGVkRmllbGRzUmVzb2x2ZSB9IH0sXHJcbiAgICB7IHBhdGg6ICd2YXJpYWJsZXMvYWRkJywgY29tcG9uZW50OiBWZER5bmFtaWNGb3JtQ29tcG9uZW50LCBkYXRhOiB7IGNsYXNzVHlwZTogQ29udGVudFZhcmlhYmxlLCBzdWJ0aXRsZTogJGxvY2FsaXplYDpAQHZhcmlhYmxlczpWYXJpYWJsZXNgIH0sIHJlc29sdmU6IHsgc2V0dGluZ3M6IFNldHRpbmdzUmVzb2x2ZSwgZXhjbHVkZWRGaWVsZHM6IEV4Y2x1ZGVkRmllbGRzUmVzb2x2ZSB9IH0sXHJcblxyXG4gICAgeyBwYXRoOiAndGVtcGxhdGVzJywgY29tcG9uZW50OiBWZER5bmFtaWNMaXN0Q29tcG9uZW50LCBkYXRhOiB7IGNsYXNzVHlwZTogVGVtcGxhdGUsIGluY2x1ZGVzOiAnQ2xpZW50JyB9LCByZXNvbHZlOiB7IHNldHRpbmdzOiBTZXR0aW5nc1Jlc29sdmUsIGluY2x1ZGVzOiBJbmNsdWRlc1Jlc29sdmUsIGV4Y2x1ZGVkQ29sdW1uczogRXhjbHVkZWRDb2x1bW5zUmVzb2x2ZSB9IH0sXHJcbiAgICB7IHBhdGg6ICd0ZW1wbGF0ZXMvZWRpdC86aWQnLCBjb21wb25lbnQ6IFRlbXBsYXRlRm9ybUNvbXBvbmVudCwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuICAgIHsgcGF0aDogJ3RlbXBsYXRlcy9hZGQnLCBjb21wb25lbnQ6IFRlbXBsYXRlRm9ybUNvbXBvbmVudCwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuXHJcbiAgICB7IHBhdGg6ICdmYXFzJywgY29tcG9uZW50OiBWZER5bmFtaWNMaXN0Q29tcG9uZW50LCBkYXRhOiB7IGNsYXNzVHlwZTogRmFxIH0sIHJlc29sdmU6IHsgc2V0dGluZ3M6IFNldHRpbmdzUmVzb2x2ZSwgaW5jbHVkZXM6IEluY2x1ZGVzUmVzb2x2ZSwgZXhjbHVkZWRDb2x1bW5zOiBFeGNsdWRlZENvbHVtbnNSZXNvbHZlIH0gfSxcclxuICAgIHsgcGF0aDogJ2ZhcXMvZWRpdC86aWQnLCBjb21wb25lbnQ6IFZkRHluYW1pY0Zvcm1Db21wb25lbnQsIGRhdGE6IHsgY2xhc3NUeXBlOiBGYXEsIHN1YnRpdGxlOiAkbG9jYWxpemVgOkBAZmFxOkZBUWAgfSwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuICAgIHsgcGF0aDogJ2ZhcXMvYWRkJywgY29tcG9uZW50OiBWZER5bmFtaWNGb3JtQ29tcG9uZW50LCBkYXRhOiB7IGNsYXNzVHlwZTogRmFxLCBxdWVyeTogeyBjbGllbnRJZDogQXV0aEhlbHBlci51c2VyLmNsaWVudElkIH0sIHN1YnRpdGxlOiAkbG9jYWxpemVgOkBAZmFxOkZBUWAgfSwgcmVzb2x2ZTogeyBzZXR0aW5nczogU2V0dGluZ3NSZXNvbHZlLCBleGNsdWRlZEZpZWxkczogRXhjbHVkZWRGaWVsZHNSZXNvbHZlIH0gfSxcclxuXHJcbiAgICB7IHBhdGg6ICdkb2N1bWVudHMnLCBjb21wb25lbnQ6IFZkRHluYW1pY0xpc3RDb21wb25lbnQsIGRhdGE6IHsgY2xhc3NUeXBlOiBEb2N1bWVudCwgYWRkRGlhbG9nVHlwZTogRG9jdW1lbnREaWFsb2dDb21wb25lbnQsIHF1ZXJ5OiB7IHR5cGU6IERvY3VtZW50VHlwZS5Eb2N1bWVudCB9IH0sIHJlc29sdmU6IHsgc2V0dGluZ3M6IFNldHRpbmdzUmVzb2x2ZSwgaW5jbHVkZXM6IEluY2x1ZGVzUmVzb2x2ZSwgZXhjbHVkZWRDb2x1bW5zOiBFeGNsdWRlZENvbHVtbnNSZXNvbHZlIH0gfSxcclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLmZvckNoaWxkKHJvdXRlcyldLFxyXG4gICAgZXhwb3J0czogW1JvdXRlck1vZHVsZV0sXHJcbiAgICBwcm92aWRlcnM6IFtTZXR0aW5nc1Jlc29sdmUsIEluY2x1ZGVzUmVzb2x2ZSwgRXhjbHVkZWRDb2x1bW5zUmVzb2x2ZSwgRXhjbHVkZWRGaWVsZHNSZXNvbHZlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmRDbXNSb3V0aW5nTW9kdWxlIHsgfSJdfQ==
@@ -0,0 +1,134 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import { MatCardModule } from '@angular/material/card';
6
+ import { MatCheckboxModule } from '@angular/material/checkbox';
7
+ import { MatChipsModule } from '@angular/material/chips';
8
+ import { MatExpansionModule } from '@angular/material/expansion';
9
+ import { MatIconModule } from '@angular/material/icon';
10
+ import { MatInputModule } from '@angular/material/input';
11
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
12
+ import { CodemirrorModule } from '@ctrl/ngx-codemirror';
13
+ import { VdCommonModule, VdFormsModule, VdLayoutModule, VdMediaModule, VdSelectModule } from '@messaia/cdk';
14
+ import { VdCdkBaseModule } from '@messaia/cdk-base';
15
+ import { EditorModule } from '@tinymce/tinymce-angular';
16
+ import { VdCmsRoutingModule } from './cms-routing.module';
17
+ import { ContentFormComponent } from './comnponents/content-form/content-form.component';
18
+ import { DocumentDialogComponent } from './comnponents/document-dialog/document-dialog.component';
19
+ import { TemplateFormComponent } from './comnponents/template-form/template-form.component';
20
+ import { TemplatePreviewDialogComponent } from './comnponents/template-preview-dialog/template-preview-dialog.component';
21
+ import * as i0 from "@angular/core";
22
+ export { ContentFormComponent, DocumentDialogComponent, TemplateFormComponent, TemplatePreviewDialogComponent };
23
+ export class MaterialModule {
24
+ }
25
+ MaterialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
26
+ MaterialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MaterialModule, exports: [MatCardModule,
27
+ MatExpansionModule,
28
+ MatButtonModule,
29
+ MatIconModule,
30
+ MatChipsModule,
31
+ MatAutocompleteModule,
32
+ MatCheckboxModule,
33
+ MatInputModule,
34
+ MatProgressBarModule] });
35
+ MaterialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MaterialModule, imports: [MatCardModule,
36
+ MatExpansionModule,
37
+ MatButtonModule,
38
+ MatIconModule,
39
+ MatChipsModule,
40
+ MatAutocompleteModule,
41
+ MatCheckboxModule,
42
+ MatInputModule,
43
+ MatProgressBarModule] });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: MaterialModule, decorators: [{
45
+ type: NgModule,
46
+ args: [{
47
+ exports: [
48
+ MatCardModule,
49
+ MatExpansionModule,
50
+ MatButtonModule,
51
+ MatIconModule,
52
+ MatChipsModule,
53
+ MatAutocompleteModule,
54
+ MatCheckboxModule,
55
+ MatInputModule,
56
+ MatProgressBarModule
57
+ ]
58
+ }]
59
+ }] });
60
+ export class VdModule {
61
+ }
62
+ VdModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
63
+ VdModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdModule, exports: [VdCommonModule,
64
+ VdLayoutModule,
65
+ VdMediaModule,
66
+ VdFormsModule,
67
+ VdSelectModule] });
68
+ VdModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdModule, imports: [VdCommonModule,
69
+ VdLayoutModule,
70
+ VdMediaModule,
71
+ VdFormsModule,
72
+ VdSelectModule] });
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdModule, decorators: [{
74
+ type: NgModule,
75
+ args: [{
76
+ exports: [
77
+ VdCommonModule,
78
+ VdLayoutModule,
79
+ VdMediaModule,
80
+ VdFormsModule,
81
+ VdSelectModule
82
+ ]
83
+ }]
84
+ }] });
85
+ const DECLARATION = [
86
+ ContentFormComponent,
87
+ TemplateFormComponent,
88
+ TemplatePreviewDialogComponent,
89
+ DocumentDialogComponent
90
+ ];
91
+ export class VdCmsModule {
92
+ }
93
+ VdCmsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
94
+ VdCmsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsModule, declarations: [ContentFormComponent,
95
+ TemplateFormComponent,
96
+ TemplatePreviewDialogComponent,
97
+ DocumentDialogComponent], imports: [CommonModule,
98
+ CodemirrorModule,
99
+ VdCdkBaseModule, VdModule, MaterialModule, VdCmsRoutingModule,
100
+ EditorModule], exports: [VdModule, MaterialModule, EditorModule, ContentFormComponent,
101
+ TemplateFormComponent,
102
+ TemplatePreviewDialogComponent,
103
+ DocumentDialogComponent] });
104
+ VdCmsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsModule, imports: [[
105
+ CommonModule,
106
+ CodemirrorModule,
107
+ VdCdkBaseModule,
108
+ VdModule,
109
+ MaterialModule,
110
+ VdCmsRoutingModule,
111
+ EditorModule,
112
+ ], VdModule, MaterialModule, EditorModule] });
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: VdCmsModule, decorators: [{
114
+ type: NgModule,
115
+ args: [{
116
+ imports: [
117
+ CommonModule,
118
+ CodemirrorModule,
119
+ VdCdkBaseModule,
120
+ VdModule,
121
+ MaterialModule,
122
+ VdCmsRoutingModule,
123
+ EditorModule,
124
+ ],
125
+ declarations: [DECLARATION],
126
+ exports: [
127
+ VdModule,
128
+ MaterialModule,
129
+ EditorModule,
130
+ DECLARATION
131
+ ]
132
+ }]
133
+ }] });
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay1jbXMvc3JjL2xpYi9jbXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQzs7QUFFekgsT0FBTyxFQUNILG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLDhCQUE4QixFQUNqQyxDQUFDO0FBZUYsTUFBTSxPQUFPLGNBQWM7OzJHQUFkLGNBQWM7NEdBQWQsY0FBYyxZQVhuQixhQUFhO1FBQ2Isa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixhQUFhO1FBQ2IsY0FBYztRQUNkLHFCQUFxQjtRQUNyQixpQkFBaUI7UUFDakIsY0FBYztRQUNkLG9CQUFvQjs0R0FHZixjQUFjLFlBWG5CLGFBQWE7UUFDYixrQkFBa0I7UUFDbEIsZUFBZTtRQUNmLGFBQWE7UUFDYixjQUFjO1FBQ2QscUJBQXFCO1FBQ3JCLGlCQUFpQjtRQUNqQixjQUFjO1FBQ2Qsb0JBQW9COzJGQUdmLGNBQWM7a0JBYjFCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxxQkFBcUI7d0JBQ3JCLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxvQkFBb0I7cUJBQ3ZCO2lCQUNKOztBQVlELE1BQU0sT0FBTyxRQUFROztxR0FBUixRQUFRO3NHQUFSLFFBQVEsWUFQYixjQUFjO1FBQ2QsY0FBYztRQUNkLGFBQWE7UUFDYixhQUFhO1FBQ2IsY0FBYztzR0FHVCxRQUFRLFlBUGIsY0FBYztRQUNkLGNBQWM7UUFDZCxhQUFhO1FBQ2IsYUFBYTtRQUNiLGNBQWM7MkZBR1QsUUFBUTtrQkFUcEIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixjQUFjO3FCQUNqQjtpQkFDSjs7QUFHRCxNQUFNLFdBQVcsR0FBRztJQUNoQixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLDhCQUE4QjtJQUM5Qix1QkFBdUI7Q0FDMUIsQ0FBQztBQW9CRixNQUFNLE9BQU8sV0FBVzs7d0dBQVgsV0FBVzt5R0FBWCxXQUFXLGlCQXhCcEIsb0JBQW9CO1FBQ3BCLHFCQUFxQjtRQUNyQiw4QkFBOEI7UUFDOUIsdUJBQXVCLGFBS25CLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsZUFBZSxFQWJWLFFBQVEsRUFYUixjQUFjLEVBMkJuQixrQkFBa0I7UUFDbEIsWUFBWSxhQWpCUCxRQUFRLEVBWFIsY0FBYyxFQWtDbkIsWUFBWSxFQXBCaEIsb0JBQW9CO1FBQ3BCLHFCQUFxQjtRQUNyQiw4QkFBOEI7UUFDOUIsdUJBQXVCO3lHQXFCZCxXQUFXLFlBakJYO1lBQ0wsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsUUFBUTtZQUNSLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsWUFBWTtTQUNmLEVBbEJRLFFBQVEsRUFYUixjQUFjLEVBa0NuQixZQUFZOzJGQUlQLFdBQVc7a0JBbEJ2QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixRQUFRO3dCQUNSLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixZQUFZO3FCQUNmO29CQUNELFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDM0IsT0FBTyxFQUFFO3dCQUNMLFFBQVE7d0JBQ1IsY0FBYzt3QkFDZCxZQUFZO3dCQUNaLFdBQVc7cUJBQ2Q7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xyXG5pbXBvcnQgeyBDb2RlbWlycm9yTW9kdWxlIH0gZnJvbSAnQGN0cmwvbmd4LWNvZGVtaXJyb3InO1xyXG5pbXBvcnQgeyBWZENvbW1vbk1vZHVsZSwgVmRGb3Jtc01vZHVsZSwgVmRMYXlvdXRNb2R1bGUsIFZkTWVkaWFNb2R1bGUsIFZkU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG1lc3NhaWEvY2RrJztcclxuaW1wb3J0IHsgVmRDZGtCYXNlTW9kdWxlIH0gZnJvbSAnQG1lc3NhaWEvY2RrLWJhc2UnO1xyXG5pbXBvcnQgeyBFZGl0b3JNb2R1bGUgfSBmcm9tICdAdGlueW1jZS90aW55bWNlLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBWZENtc1JvdXRpbmdNb2R1bGUgfSBmcm9tICcuL2Ntcy1yb3V0aW5nLm1vZHVsZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21ucG9uZW50cy9jb250ZW50LWZvcm0vY29udGVudC1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERvY3VtZW50RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb21ucG9uZW50cy9kb2N1bWVudC1kaWFsb2cvZG9jdW1lbnQtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRlbXBsYXRlRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vY29tbnBvbmVudHMvdGVtcGxhdGUtZm9ybS90ZW1wbGF0ZS1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUHJldmlld0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tbnBvbmVudHMvdGVtcGxhdGUtcHJldmlldy1kaWFsb2cvdGVtcGxhdGUtcHJldmlldy1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBDb250ZW50Rm9ybUNvbXBvbmVudCxcclxuICAgIERvY3VtZW50RGlhbG9nQ29tcG9uZW50LFxyXG4gICAgVGVtcGxhdGVGb3JtQ29tcG9uZW50LFxyXG4gICAgVGVtcGxhdGVQcmV2aWV3RGlhbG9nQ29tcG9uZW50XHJcbn07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIE1hdENhcmRNb2R1bGUsXHJcbiAgICAgICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxyXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgICAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgICAgIE1hdENoaXBzTW9kdWxlLFxyXG4gICAgICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcclxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgICAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxNb2R1bGUgeyB9XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIFZkQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIFZkTGF5b3V0TW9kdWxlLFxyXG4gICAgICAgIFZkTWVkaWFNb2R1bGUsXHJcbiAgICAgICAgVmRGb3Jtc01vZHVsZSxcclxuICAgICAgICBWZFNlbGVjdE1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmRNb2R1bGUgeyB9XHJcblxyXG5jb25zdCBERUNMQVJBVElPTiA9IFtcclxuICAgIENvbnRlbnRGb3JtQ29tcG9uZW50LFxyXG4gICAgVGVtcGxhdGVGb3JtQ29tcG9uZW50LFxyXG4gICAgVGVtcGxhdGVQcmV2aWV3RGlhbG9nQ29tcG9uZW50LFxyXG4gICAgRG9jdW1lbnREaWFsb2dDb21wb25lbnRcclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIENvZGVtaXJyb3JNb2R1bGUsXHJcbiAgICAgICAgVmRDZGtCYXNlTW9kdWxlLFxyXG4gICAgICAgIFZkTW9kdWxlLFxyXG4gICAgICAgIE1hdGVyaWFsTW9kdWxlLFxyXG4gICAgICAgIFZkQ21zUm91dGluZ01vZHVsZSxcclxuICAgICAgICBFZGl0b3JNb2R1bGUsXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbREVDTEFSQVRJT05dLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIFZkTW9kdWxlLFxyXG4gICAgICAgIE1hdGVyaWFsTW9kdWxlLFxyXG4gICAgICAgIEVkaXRvck1vZHVsZSxcclxuICAgICAgICBERUNMQVJBVElPTlxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmRDbXNNb2R1bGUgeyB9Il19
@@ -0,0 +1,237 @@
1
+ import { COMMA, ENTER } from '@angular/cdk/keycodes';
2
+ import { HttpClient, HttpEventType, HttpResponse } from '@angular/common/http';
3
+ import { ChangeDetectorRef, Component, ViewChild } from '@angular/core';
4
+ import { ActivatedRoute } from '@angular/router';
5
+ import { AuthHelper, EnumService, FileService, GenericReactiveFormComponent, ServiceLocator } from '@messaia/cdk';
6
+ import { EditorComponent } from '@tinymce/tinymce-angular';
7
+ import { ContentType } from '../../enums/content-type';
8
+ import { WrapTag } from '../../enums/wrap-tag';
9
+ import { CmsSettings } from '../../models/cms-settings';
10
+ import { Content } from '../../models/content';
11
+ import { ContentService } from '../../services/content.service';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "../../services/content.service";
14
+ import * as i2 from "@messaia/cdk";
15
+ import * as i3 from "@angular/common/http";
16
+ import * as i4 from "@angular/router";
17
+ import * as i5 from "@angular/material/expansion";
18
+ import * as i6 from "@angular/material/form-field";
19
+ import * as i7 from "@angular/material/chips";
20
+ import * as i8 from "@angular/material/icon";
21
+ import * as i9 from "@angular/material/autocomplete";
22
+ import * as i10 from "@angular/material/core";
23
+ import * as i11 from "@tinymce/tinymce-angular";
24
+ import * as i12 from "@angular/material/checkbox";
25
+ import * as i13 from "@angular/material/button";
26
+ import * as i14 from "@messaia/cdk-base";
27
+ import * as i15 from "@angular/common";
28
+ import * as i16 from "@angular/forms";
29
+ import * as i17 from "@angular/material/input";
30
+ export class ContentFormComponent extends GenericReactiveFormComponent {
31
+ /**
32
+ * Constructor
33
+ */
34
+ constructor(service, fileService, httpClient, route, changeDetectorRef) {
35
+ super(Content, service, route, changeDetectorRef);
36
+ this.service = service;
37
+ this.fileService = fileService;
38
+ this.httpClient = httpClient;
39
+ this.route = route;
40
+ this.changeDetectorRef = changeDetectorRef;
41
+ /**
42
+ * Used to disable some properties for client manager
43
+ */
44
+ this.isClientAdmin = AuthHelper.hasRole('ClientAdministrator') || AuthHelper.hasRole('ClientManager');
45
+ /**
46
+ * Content status
47
+ */
48
+ this.ContentType = ContentType;
49
+ /**
50
+ * Wrap tag enum
51
+ */
52
+ this.wrapTags = EnumService.toArray(WrapTag);
53
+ /**
54
+ * Separator keys codes
55
+ */
56
+ this.separatorKeysCodes = [ENTER, COMMA];
57
+ this.settings = ServiceLocator.getService(CmsSettings);
58
+ }
59
+ /**
60
+ * Gets the aliases control
61
+ */
62
+ get aliasesControl() { return this.form.controls.aliases; }
63
+ /**
64
+ * Lifecycle hook that is called after data-bound properties
65
+ * of a directive are initialized.
66
+ */
67
+ ngOnInit() {
68
+ /* Filter by status, if any */
69
+ this.routeSubscription = this.route.params.subscribe((params) => {
70
+ this.type = EnumService.parse(ContentType, params.type);
71
+ });
72
+ super.ngOnInit();
73
+ }
74
+ /**
75
+ * Checks if the specified alias is available.
76
+ */
77
+ isAliasAvailable() {
78
+ this.service.isAliasAvailable(this.item).subscribe((x) => {
79
+ this.formElement.form.controls['alias'].setErrors(x ? null : { 'inUse': true });
80
+ });
81
+ }
82
+ /**
83
+ * Set client
84
+ */
85
+ setClient() {
86
+ this.isEditorInitialzed = false;
87
+ this.configEditor();
88
+ this.editorComponent?.editor?.setContent(this.item.body);
89
+ }
90
+ /**
91
+ * Add a aliases to the current field
92
+ * @param event
93
+ */
94
+ addAliases(event) {
95
+ /* Add our aliass */
96
+ if ((event.value || '').trim()) {
97
+ this.aliasesControl.setValue([...this.aliasesControl.value, event.value.trim()]);
98
+ this.aliasesControl.updateValueAndValidity();
99
+ this.aliasesControl.markAsDirty();
100
+ }
101
+ /* Reset the input value */
102
+ if (event.input) {
103
+ event.input.value = '';
104
+ }
105
+ }
106
+ /**
107
+ * Removes a aliases
108
+ * @param aliass
109
+ */
110
+ removeAliases(aliass) {
111
+ const index = this.aliasesControl.value.indexOf(aliass);
112
+ if (index >= 0) {
113
+ this.aliasesControl.value.splice(index, 1);
114
+ this.aliasesControl.updateValueAndValidity();
115
+ this.aliasesControl.markAsDirty();
116
+ }
117
+ }
118
+ /**
119
+ * Creates a new instance of the Template
120
+ */
121
+ newInstance() {
122
+ let item = Object.assign(new Content(), {
123
+ type: this.type,
124
+ wrapTag: this.type == ContentType.Block ? '' : WrapTag.Section,
125
+ showTitle: this.type == ContentType.Block ? false : true
126
+ });
127
+ /* Get clientId */
128
+ if (!this.isEditMode && this.isClientAdmin) {
129
+ item.clientId = this.currentUser.clientId;
130
+ }
131
+ /* Init the tinymce editor */
132
+ this.isEditorInitialzed = false;
133
+ return item;
134
+ }
135
+ /**
136
+ * Event emitted when the form has built.
137
+ */
138
+ onAfterFormBuild() {
139
+ super.onAfterFormBuild();
140
+ this.configEditor();
141
+ }
142
+ /**
143
+ * Configures the tinymce editor
144
+ */
145
+ configEditor() {
146
+ if (this.settings?.multitenantable && this.formValue?.clientId && this.settings?.styleUrlEndpoint) {
147
+ this.httpClient.get(this.settings.styleUrlEndpoint(this.formValue.clientId)).subscribe((x) => {
148
+ super.initEditor(Object.assign(this.getEditorConfig(), { content_css: x.value }));
149
+ });
150
+ }
151
+ else {
152
+ super.initEditor(this.getEditorConfig());
153
+ }
154
+ }
155
+ /**
156
+ * Creates config for the editor
157
+ * @returns
158
+ */
159
+ getEditorConfig() {
160
+ return {
161
+ toolbar: `${this.editorToolbar} snippetsButton`,
162
+ force_p_newlines: false,
163
+ forced_root_block: '',
164
+ height: this.settings?.editorHeight || '700px',
165
+ file_picker_types: 'file image media',
166
+ image_advtab: true,
167
+ images_upload_base_path: `${this.appSetting.apiUrl}file/`,
168
+ images_upload_url: 'backend/api/files',
169
+ allow_html_in_named_anchor: true,
170
+ valid_children: '+a[div|span|img|h1|h2|h3|h4|h5|h6|br|hr|video],+span[i]',
171
+ valid_elements: '*[*]',
172
+ images_upload_handler: (blobInfo, success, failure) => {
173
+ this.fileService.upload(blobInfo.blob(), `upload`, {
174
+ clientId: this.form?.value?.clientId,
175
+ path: 'images',
176
+ isPublic: true
177
+ }).subscribe(event => {
178
+ if (event.type === HttpEventType.UploadProgress) {
179
+ /* Calculate the progress percentage */
180
+ const percentDone = Math.round(100 * event.loaded / event.total);
181
+ /* Pass the percentage into the progress-stream */
182
+ console.info(percentDone);
183
+ }
184
+ else if (event instanceof HttpResponse) {
185
+ success(event.body.publicLink);
186
+ }
187
+ });
188
+ },
189
+ setup: function (editor) {
190
+ /* Add snippets button to the toolbar */
191
+ editor.ui.registry.addMenuButton('snippetsButton', {
192
+ text: 'Snippets',
193
+ fetch: function (callback) {
194
+ callback([
195
+ {
196
+ type: 'menuitem',
197
+ text: 'Variable',
198
+ onAction: () => editor.insertContent('{{var name}}')
199
+ },
200
+ {
201
+ type: 'menuitem',
202
+ text: 'Block',
203
+ onAction: () => editor.insertContent('{{block name="..."}}')
204
+ },
205
+ {
206
+ type: 'menuitem',
207
+ text: 'View Component',
208
+ onAction: () => editor.insertContent('{{vc name="..."}}')
209
+ },
210
+ ]);
211
+ }
212
+ });
213
+ }
214
+ };
215
+ }
216
+ /**
217
+ * Cleanup subscriptions when this component is destroyed.
218
+ */
219
+ ngOnDestroy() {
220
+ if (this.routeSubscription) {
221
+ this.routeSubscription.unsubscribe();
222
+ }
223
+ }
224
+ }
225
+ ContentFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ContentFormComponent, deps: [{ token: i1.ContentService }, { token: i2.FileService }, { token: i3.HttpClient }, { token: i4.ActivatedRoute }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
226
+ ContentFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: ContentFormComponent, selector: "app-content-form", viewQueries: [{ propertyName: "formElement", first: true, predicate: ["form"], descendants: true }, { propertyName: "editorComponent", first: true, predicate: ["editor"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<vd-layout-nav color=\"primary\" [backNavigationRoute]=\"listRoute\" toolbarTitle=\"Content\" i18n-toolbarTitle [editMode]=\"isEditMode\" [menuItems]=\"toolbarMenuItems\" (reload)=\"reloadPage()\">\r\n\t<form *ngIf=\"form\" [formGroup]=\"form\" novalidate (ngSubmit)=\"save()\">\r\n\t\t<vd-layout-card-over class=\"accordion\" cardWidth=\"70\" color=\"primary\" flex>\r\n\t\t\t<mat-accordion [multi]=\"!isEditMode\">\r\n\t\t\t\t<!-- #region Details -->\r\n\t\t\t\t<mat-expansion-panel expanded=\"true\" id=\"details\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title i18n>Details</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\r\n\t\t\t\t\t<!-- #region Client-->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"settings?.multitenantable && !isClientAdmin\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Client</mat-label>\r\n\t\t\t\t\t\t\t<vd-select formControlName=\"clientId\" endpoint=\"client?enabled=true\" layout=\"column\" (change)=\"setClient()\" [required]=\"!item.default\" flex></vd-select>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.clientId['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Title -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Title</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"title\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.title['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Name & Alias -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Name</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"name\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.name['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Aliases -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Aliases</mat-label>\r\n\t\t\t\t\t\t\t<mat-chip-list #chipList formControlName=\"aliases\">\r\n\t\t\t\t\t\t\t\t<mat-chip *ngFor=\"let alias of form.controls.aliases.value\" (removed)=\"removeAliases(alias)\">\r\n\t\t\t\t\t\t\t\t\t<span>{{alias}}</span>\r\n\t\t\t\t\t\t\t\t\t<mat-icon matChipRemove>cancel</mat-icon>\r\n\t\t\t\t\t\t\t\t</mat-chip>\r\n\t\t\t\t\t\t\t\t<input type=\"text\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" matChipInputAddOnBlur=\"true\" (matChipInputTokenEnd)=\"addAliases($event)\">\r\n\t\t\t\t\t\t\t</mat-chip-list>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region wrap tag and layout -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\" *ngIf=\"type != ContentType.Block\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Wrap</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"wrapTag\">\r\n\t\t\t\t\t\t\t<mat-autocomplete #wrapTagsAutocomplete=\"matAutocomplete\">\r\n\t\t\t\t\t\t\t\t<mat-option *ngFor=\"let option of wrapTags\" [value]=\"option.name\">{{option.name}}</mat-option>\r\n\t\t\t\t\t\t\t</mat-autocomplete>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.wrapTag['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Layout</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"layout\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.layout['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t<!-- *ngIf=\"item.clientId && isEditorInitialzed\" -->\r\n\t\t\t\t\t<!-- #region Body -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"isEditorInitialzed\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin>\r\n\t\t\t\t\t\t\t<mat-label i18n>Content</mat-label>\r\n\t\t\t\t\t\t\t<editor #editor formControlName=\"body\" tinyMatFormControl [(init)]=\"editorConfig\" required></editor>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.body['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Script -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Script</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"script\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.script['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Style -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Style</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"style\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.style['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Show title -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-top\">\r\n\t\t\t\t\t\t\t<mat-checkbox formControlName=\"showTitle\" i18n>Show title</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Default -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"!isClientAdmin\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-checkbox name=\"default\" formControlName=\"default\" (change)=\"item.clientId = item.default ? null : item.clientId\">Default</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Enabled -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-bottom\">\r\n\t\t\t\t\t\t\t<mat-checkbox name=\"enabled\" formControlName=\"enabled\" i18n>Active</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"submit\" mat-flat-button color=\"primary\" [disabled]=\"isSaving\" i18n>Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button *ngIf=\"isEditMode\" (click)=\"apply()\" [disabled]=\"isSaving\" i18n>Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n>Cancel</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t<!-- #region Audit -->\r\n\t\t\t\t<mat-expansion-panel id=\"audit\" *ngIf=\"isEditMode\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t\t\t<span i18n>Audit</span>\r\n\t\t\t\t\t\t</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\t\t\t\t\t<vd-audit [item]=\"item\"> </vd-audit>\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"button\" mat-flat-button color=\"accent\" (click)=\"back()\" i18n>Close</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\t\t\t</mat-accordion>\r\n\t\t</vd-layout-card-over>\r\n\t</form>\r\n</vd-layout-nav>", components: [{ type: i2.VdLayoutNavComponent, selector: "vd-layout-nav", inputs: ["toolbarTitle", "editMode", "menuItems", "icon", "logo", "color", "hideToggle", "backNavigationRoute", "navigationRoute"], outputs: ["reload"] }, { type: i2.VdLayoutCardOverComponent, selector: "vd-layout-card-over", inputs: ["cardTitle", "cardSubtitle", "cardWidth", "color"] }, { type: i5.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i5.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.VdSelectComponent, selector: "vd-select", inputs: ["multiple", "disabled", "sorted", "textPrefix", "endpoint", "params", "projection", "enum", "key", "text", "prefix", "options", "filteredOptions", "filterable", "cache", "sortBy", "searchField"], outputs: ["change", "itemChange", "selected", "itemSelected", "launch"] }, { type: i7.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i9.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i11.EditorComponent, selector: "editor", inputs: ["cloudChannel", "apiKey", "id", "modelEvents", "disabled", "initialValue", "init", "inline", "outputFormat", "tagName", "plugins", "toolbar", "allowedEvents", "ignoreEvents"] }, { type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i13.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i14.VdAuditComponent, selector: "vd-audit", inputs: ["item"] }], directives: [{ type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i16.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i16.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i16.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.RxwebFormDirective, selector: "[formGroup],[rxwebForm]", inputs: ["formGroup", "rxwebForm"] }, { type: i5.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { type: i5.MatExpansionPanelTitle, selector: "mat-panel-title" }, { type: i2.MatFormFieldReadonlyDirective, selector: "mat-form-field" }, { type: i6.MatLabel, selector: "mat-label" }, { type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i16.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.AsyncValidationDirective, selector: "[ngModel],[formControlName],[formControl]", inputs: ["async"] }, { type: i2.RxFormControlDirective, selector: "[ngModel],[formControlName],[formControl]", inputs: ["rxalpha", "rxalphaNumeric", "rxascii", "rxcompare", "rxcompose", "rxcontains", "rxcreditCard", "rxdataUri", "rxdifferent", "rxdigit", "rxemail", "rxendsWith", "rxeven", "rxextension", "rxfactor", "rxfileSize", "rxgreaterThanEqualTo", "rxgreaterThan", "rxhexColor", "rxjson", "rxlatitude", "rxlatLong", "rxleapYear", "rxlessThan", "rxlessThanEqualTo", "rxlongitude", "rxlowerCase", "rxmac", "rxmaxDate", "rxmaxLength", "rxmaxNumber", "rxminDate", "rxminLength", "rxminNumber", "rxnumeric", "rxodd", "rxpassword", "rxport", "rxprimeNumber", "rxrequired", "rxrange", "rxrule", "rxstartsWith", "rxtime", "rxupperCase", "rxurl", "rxunique", "rxnotEmpty", "rxcusip", "rxgrid", "rxdate"] }, { type: i16.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i15.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { type: i17.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"] }, { type: i16.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i7.MatChipRemove, selector: "[matChipRemove]" }, { type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i2.MatFormFieldEditorDirective, selector: "[tinyMatFormControl]", inputs: ["disabled", "id", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["editorChange"] }, { type: i5.MatExpansionPanelActionRow, selector: "mat-action-row" }] });
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ContentFormComponent, decorators: [{
228
+ type: Component,
229
+ args: [{ selector: 'app-content-form', template: "<vd-layout-nav color=\"primary\" [backNavigationRoute]=\"listRoute\" toolbarTitle=\"Content\" i18n-toolbarTitle [editMode]=\"isEditMode\" [menuItems]=\"toolbarMenuItems\" (reload)=\"reloadPage()\">\r\n\t<form *ngIf=\"form\" [formGroup]=\"form\" novalidate (ngSubmit)=\"save()\">\r\n\t\t<vd-layout-card-over class=\"accordion\" cardWidth=\"70\" color=\"primary\" flex>\r\n\t\t\t<mat-accordion [multi]=\"!isEditMode\">\r\n\t\t\t\t<!-- #region Details -->\r\n\t\t\t\t<mat-expansion-panel expanded=\"true\" id=\"details\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title i18n>Details</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\r\n\t\t\t\t\t<!-- #region Client-->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"settings?.multitenantable && !isClientAdmin\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Client</mat-label>\r\n\t\t\t\t\t\t\t<vd-select formControlName=\"clientId\" endpoint=\"client?enabled=true\" layout=\"column\" (change)=\"setClient()\" [required]=\"!item.default\" flex></vd-select>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.clientId['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Title -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Title</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"title\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.title['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Name & Alias -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Name</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"name\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.name['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Aliases -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Aliases</mat-label>\r\n\t\t\t\t\t\t\t<mat-chip-list #chipList formControlName=\"aliases\">\r\n\t\t\t\t\t\t\t\t<mat-chip *ngFor=\"let alias of form.controls.aliases.value\" (removed)=\"removeAliases(alias)\">\r\n\t\t\t\t\t\t\t\t\t<span>{{alias}}</span>\r\n\t\t\t\t\t\t\t\t\t<mat-icon matChipRemove>cancel</mat-icon>\r\n\t\t\t\t\t\t\t\t</mat-chip>\r\n\t\t\t\t\t\t\t\t<input type=\"text\" [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" matChipInputAddOnBlur=\"true\" (matChipInputTokenEnd)=\"addAliases($event)\">\r\n\t\t\t\t\t\t\t</mat-chip-list>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region wrap tag and layout -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\" *ngIf=\"type != ContentType.Block\">\r\n\t\t\t\t\t\t\t<mat-label i18n>Wrap</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"wrapTag\">\r\n\t\t\t\t\t\t\t<mat-autocomplete #wrapTagsAutocomplete=\"matAutocomplete\">\r\n\t\t\t\t\t\t\t\t<mat-option *ngFor=\"let option of wrapTags\" [value]=\"option.name\">{{option.name}}</mat-option>\r\n\t\t\t\t\t\t\t</mat-autocomplete>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.wrapTag['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Layout</mat-label>\r\n\t\t\t\t\t\t\t<input matInput formControlName=\"layout\">\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.layout['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t<!-- *ngIf=\"item.clientId && isEditorInitialzed\" -->\r\n\t\t\t\t\t<!-- #region Body -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"isEditorInitialzed\">\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin>\r\n\t\t\t\t\t\t\t<mat-label i18n>Content</mat-label>\r\n\t\t\t\t\t\t\t<editor #editor formControlName=\"body\" tinyMatFormControl [(init)]=\"editorConfig\" required></editor>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.body['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Script -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Script</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"script\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.script['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Style -->\r\n\t\t\t\t\t<div layout=\"row\" flex>\r\n\t\t\t\t\t\t<mat-form-field flex layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-label>Style</mat-label>\r\n\t\t\t\t\t\t\t<textarea matInput autocomplete=\"off\" formControlName=\"style\"></textarea>\r\n\t\t\t\t\t\t\t<mat-error *ngFor=\"let errorMessage of form.controls.style['errorMessages']\">{{errorMessage}}</mat-error>\r\n\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Show title -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-top\">\r\n\t\t\t\t\t\t\t<mat-checkbox formControlName=\"showTitle\" i18n>Show title</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Default -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\" *ngIf=\"!isClientAdmin\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\">\r\n\t\t\t\t\t\t\t<mat-checkbox name=\"default\" formControlName=\"default\" (change)=\"item.clientId = item.default ? null : item.clientId\">Default</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<!-- #region Enabled -->\r\n\t\t\t\t\t<div layout-gt-sm=\"row\" layout=\"column\">\r\n\t\t\t\t\t\t<div layout-margin appearance=\"outline\" class=\"push-bottom\">\r\n\t\t\t\t\t\t\t<mat-checkbox name=\"enabled\" formControlName=\"enabled\" i18n>Active</mat-checkbox>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"submit\" mat-flat-button color=\"primary\" [disabled]=\"isSaving\" i18n>Save</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button *ngIf=\"isEditMode\" (click)=\"apply()\" [disabled]=\"isSaving\" i18n>Apply</button>\r\n\t\t\t\t\t\t<button type=\"button\" mat-button (click)=\"back()\" i18n>Cancel</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t<!-- #region Audit -->\r\n\t\t\t\t<mat-expansion-panel id=\"audit\" *ngIf=\"isEditMode\">\r\n\t\t\t\t\t<mat-expansion-panel-header>\r\n\t\t\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t\t\t<span i18n>Audit</span>\r\n\t\t\t\t\t\t</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\t\t\t\t\t<vd-audit [item]=\"item\"> </vd-audit>\r\n\t\t\t\t\t<mat-action-row>\r\n\t\t\t\t\t\t<button type=\"button\" mat-flat-button color=\"accent\" (click)=\"back()\" i18n>Close</button>\r\n\t\t\t\t\t\t<span flex></span>\r\n\t\t\t\t\t</mat-action-row>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t\t<!-- #endregion -->\r\n\t\t\t</mat-accordion>\r\n\t\t</vd-layout-card-over>\r\n\t</form>\r\n</vd-layout-nav>" }]
230
+ }], ctorParameters: function () { return [{ type: i1.ContentService }, { type: i2.FileService }, { type: i3.HttpClient }, { type: i4.ActivatedRoute }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { formElement: [{
231
+ type: ViewChild,
232
+ args: ['form', { static: false }]
233
+ }], editorComponent: [{
234
+ type: ViewChild,
235
+ args: ['editor', { static: false }]
236
+ }] } });
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay1jbXMvc3JjL2xpYi9jb21ucG9uZW50cy9jb250ZW50LWZvcm0vY29udGVudC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay1jbXMvc3JjL2xpYi9jb21ucG9uZW50cy9jb250ZW50LWZvcm0vY29udGVudC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSw0QkFBNEIsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNaEUsTUFBTSxPQUFPLG9CQUFxQixTQUFR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UUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDOzZCQUNwRDs0QkFDRDtnQ0FDQyxJQUFJLEVBQUUsVUFBVTtnQ0FDaEIsSUFBSSxFQUFFLE9BQU87Z0NBQ2IsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUM7NkJBQzVEOzRCQUNEO2dDQUNDLElBQUksRUFBRSxVQUFVO2dDQUNoQixJQUFJLEVBQUUsZ0JBQWdCO2dDQUN0QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQzs2QkFDekQ7eUJBQ0QsQ0FBQyxDQUFDO29CQUNKLENBQUM7aUJBQ0QsQ0FBQyxDQUFDO1lBQ0osQ0FBQztTQUNELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1YsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3JDO0lBQ0YsQ0FBQzs7aUhBL09XLG9CQUFvQjtxR0FBcEIsb0JBQW9CLGdSQ2xCakMsMmlRQTBKZ0I7MkZEeElILG9CQUFvQjtrQkFKaEMsU0FBUzsrQkFDQyxrQkFBa0I7cU5BZ0RVLFdBQVc7c0JBQWhELFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLSSxlQUFlO3NCQUF0RCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDT01NQSwgRU5URVIgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRDaGlwSW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBdXRoSGVscGVyLCBFbnVtU2VydmljZSwgRmlsZVNlcnZpY2UsIEdlbmVyaWNSZWFjdGl2ZUZvcm1Db21wb25lbnQsIFNlcnZpY2VMb2NhdG9yIH0gZnJvbSAnQG1lc3NhaWEvY2RrJztcclxuaW1wb3J0IHsgRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnQHRpbnltY2UvdGlueW1jZS1hbmd1bGFyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnRlbnRUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvY29udGVudC10eXBlJztcclxuaW1wb3J0IHsgV3JhcFRhZyB9IGZyb20gJy4uLy4uL2VudW1zL3dyYXAtdGFnJztcclxuaW1wb3J0IHsgQ21zU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvY21zLXNldHRpbmdzJztcclxuaW1wb3J0IHsgQ29udGVudCB9IGZyb20gJy4uLy4uL21vZGVscy9jb250ZW50JztcclxuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb250ZW50LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcHAtY29udGVudC1mb3JtJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vY29udGVudC1mb3JtLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGVudEZvcm1Db21wb25lbnQgZXh0ZW5kcyBHZW5lcmljUmVhY3RpdmVGb3JtQ29tcG9uZW50PENvbnRlbnQsIENvbnRlbnRTZXJ2aWNlPiB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVzZWQgdG8gZGlzYWJsZSBzb21lIHByb3BlcnRpZXMgZm9yIGNsaWVudCBtYW5hZ2VyXHJcblx0ICovXHJcblx0cHVibGljIGlzQ2xpZW50QWRtaW4gPSBBdXRoSGVscGVyLmhhc1JvbGUoJ0NsaWVudEFkbWluaXN0cmF0b3InKSB8fCBBdXRoSGVscGVyLmhhc1JvbGUoJ0NsaWVudE1hbmFnZXInKTtcclxuXHJcblx0LyoqXHJcblx0ICogUm91dGVyIFN1YnNjcmlwdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3V0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgc3RhdHVzIG9mIHRoZSBpc3N1ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0eXBlOiBDb250ZW50VHlwZTtcclxuXHJcblx0LyoqXHJcblx0ICogQ29udGVudCBzdGF0dXNcclxuXHQgKi9cclxuXHRwdWJsaWMgQ29udGVudFR5cGU6IHR5cGVvZiBDb250ZW50VHlwZSA9IENvbnRlbnRUeXBlO1xyXG5cclxuXHQvKipcclxuXHQgKiBXcmFwIHRhZyBlbnVtXHJcblx0ICovXHJcblx0cHVibGljIHdyYXBUYWdzOiBhbnlbXSA9IEVudW1TZXJ2aWNlLnRvQXJyYXkoV3JhcFRhZyk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlcGFyYXRvciBrZXlzIGNvZGVzXHJcblx0ICovXHJcblx0cHVibGljIHNlcGFyYXRvcktleXNDb2RlczogbnVtYmVyW10gPSBbRU5URVIsIENPTU1BXTtcclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyB0aGUgYWxpYXNlcyBjb250cm9sXHJcblx0ICovXHJcblx0Z2V0IGFsaWFzZXNDb250cm9sKCkgeyByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzLmFsaWFzZXM7IH1cclxuXHJcblx0LyoqXHJcblx0ICogc2V0dGluZ3M6IENtc1NldHRpbmdzXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldHRpbmdzOiBDbXNTZXR0aW5ncztcclxuXHJcblx0LyoqXHJcblx0ICogQSByZWYgdG8gZm9ybSBodG1sIGVsZW1lbnRcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKCdmb3JtJywgeyBzdGF0aWM6IGZhbHNlIH0pIGZvcm1FbGVtZW50OiBIVE1MRm9ybUVsZW1lbnQ7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgcmVmIHRvIHRpbnltY2UgZWRpdG9yXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZCgnZWRpdG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRvckNvbXBvbmVudDogRWRpdG9yQ29tcG9uZW50O1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJvdGVjdGVkIHNlcnZpY2U6IENvbnRlbnRTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIGZpbGVTZXJ2aWNlOiBGaWxlU2VydmljZSxcclxuXHRcdHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG5cdFx0cHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuXHRcdHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuXHQpIHtcclxuXHRcdHN1cGVyKENvbnRlbnQsIHNlcnZpY2UsIHJvdXRlLCBjaGFuZ2VEZXRlY3RvclJlZilcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBTZXJ2aWNlTG9jYXRvci5nZXRTZXJ2aWNlKENtc1NldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGRhdGEtYm91bmQgcHJvcGVydGllcyBcclxuXHQgKiBvZiBhIGRpcmVjdGl2ZSBhcmUgaW5pdGlhbGl6ZWQuXHJcblx0ICovXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHQvKiBGaWx0ZXIgYnkgc3RhdHVzLCBpZiBhbnkgKi9cclxuXHRcdHRoaXMucm91dGVTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogeyB0eXBlOiBzdHJpbmcgfSkgPT4ge1xyXG5cdFx0XHR0aGlzLnR5cGUgPSBFbnVtU2VydmljZS5wYXJzZShDb250ZW50VHlwZSwgcGFyYW1zLnR5cGUpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0c3VwZXIubmdPbkluaXQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIGFsaWFzIGlzIGF2YWlsYWJsZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNBbGlhc0F2YWlsYWJsZSgpIHtcclxuXHRcdHRoaXMuc2VydmljZS5pc0FsaWFzQXZhaWxhYmxlKHRoaXMuaXRlbSkuc3Vic2NyaWJlKCh4OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdHRoaXMuZm9ybUVsZW1lbnQuZm9ybS5jb250cm9sc1snYWxpYXMnXS5zZXRFcnJvcnMoeCA/IG51bGwgOiB7ICdpblVzZSc6IHRydWUgfSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBjbGllbnRcclxuXHQgKi9cclxuXHRwdWJsaWMgc2V0Q2xpZW50KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc0VkaXRvckluaXRpYWx6ZWQgPSBmYWxzZTtcclxuXHRcdHRoaXMuY29uZmlnRWRpdG9yKCk7XHJcblx0XHR0aGlzLmVkaXRvckNvbXBvbmVudD8uZWRpdG9yPy5zZXRDb250ZW50KHRoaXMuaXRlbS5ib2R5KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZCBhIGFsaWFzZXMgdG8gdGhlIGN1cnJlbnQgZmllbGRcclxuXHQgKiBAcGFyYW0gZXZlbnQgXHJcblx0ICovXHJcblx0cHVibGljIGFkZEFsaWFzZXMoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KTogdm9pZCB7XHJcblx0XHQvKiBBZGQgb3VyIGFsaWFzcyAqL1xyXG5cdFx0aWYgKChldmVudC52YWx1ZSB8fCAnJykudHJpbSgpKSB7XHJcblx0XHRcdHRoaXMuYWxpYXNlc0NvbnRyb2wuc2V0VmFsdWUoWy4uLnRoaXMuYWxpYXNlc0NvbnRyb2wudmFsdWUsIGV2ZW50LnZhbHVlLnRyaW0oKV0pO1xyXG5cdFx0XHR0aGlzLmFsaWFzZXNDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0dGhpcy5hbGlhc2VzQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJlc2V0IHRoZSBpbnB1dCB2YWx1ZSAqL1xyXG5cdFx0aWYgKGV2ZW50LmlucHV0KSB7XHJcblx0XHRcdGV2ZW50LmlucHV0LnZhbHVlID0gJyc7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmVzIGEgYWxpYXNlc1xyXG5cdCAqIEBwYXJhbSBhbGlhc3MgXHJcblx0ICovXHJcblx0cHVibGljIHJlbW92ZUFsaWFzZXMoYWxpYXNzOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5hbGlhc2VzQ29udHJvbC52YWx1ZS5pbmRleE9mKGFsaWFzcyk7XHJcblx0XHRpZiAoaW5kZXggPj0gMCkge1xyXG5cdFx0XHR0aGlzLmFsaWFzZXNDb250cm9sLnZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcblx0XHRcdHRoaXMuYWxpYXNlc0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHR0aGlzLmFsaWFzZXNDb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBUZW1wbGF0ZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBuZXdJbnN0YW5jZSgpOiBDb250ZW50IHtcclxuXHRcdGxldCBpdGVtID0gT2JqZWN0LmFzc2lnbihuZXcgQ29udGVudCgpLCA8Q29udGVudD57XHJcblx0XHRcdHR5cGU6IHRoaXMudHlwZSxcclxuXHRcdFx0d3JhcFRhZzogdGhpcy50eXBlID09IENvbnRlbnRUeXBlLkJsb2NrID8gJycgOiBXcmFwVGFnLlNlY3Rpb24sXHJcblx0XHRcdHNob3dUaXRsZTogdGhpcy50eXBlID09IENvbnRlbnRUeXBlLkJsb2NrID8gZmFsc2UgOiB0cnVlXHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBHZXQgY2xpZW50SWQgKi9cclxuXHRcdGlmICghdGhpcy5pc0VkaXRNb2RlICYmIHRoaXMuaXNDbGllbnRBZG1pbikge1xyXG5cdFx0XHRpdGVtLmNsaWVudElkID0gdGhpcy5jdXJyZW50VXNlci5jbGllbnRJZDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBJbml0IHRoZSB0aW55bWNlIGVkaXRvciAqL1xyXG5cdFx0dGhpcy5pc0VkaXRvckluaXRpYWx6ZWQgPSBmYWxzZTtcclxuXHRcdHJldHVybiBpdGVtO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBmb3JtIGhhcyBidWlsdC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckZvcm1CdWlsZCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm9uQWZ0ZXJGb3JtQnVpbGQoKTtcclxuXHRcdHRoaXMuY29uZmlnRWRpdG9yKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb25maWd1cmVzIHRoZSB0aW55bWNlIGVkaXRvclxyXG5cdCAqL1xyXG5cdHByaXZhdGUgY29uZmlnRWRpdG9yKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3M/Lm11bHRpdGVuYW50YWJsZSAmJiB0aGlzLmZvcm1WYWx1ZT8uY2xpZW50SWQgJiYgdGhpcy5zZXR0aW5ncz8uc3R5bGVVcmxFbmRwb2ludCkge1xyXG5cdFx0XHR0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuc2V0dGluZ3Muc3R5bGVVcmxFbmRwb2ludCh0aGlzLmZvcm1WYWx1ZS5jbGllbnRJZCkpLnN1YnNjcmliZSgoeDogeyB2YWx1ZTogc3RyaW5nIH0pID0+IHtcclxuXHRcdFx0XHRzdXBlci5pbml0RWRpdG9yKE9iamVjdC5hc3NpZ24odGhpcy5nZXRFZGl0b3JDb25maWcoKSwgeyBjb250ZW50X2NzczogeC52YWx1ZSB9KSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0c3VwZXIuaW5pdEVkaXRvcih0aGlzLmdldEVkaXRvckNvbmZpZygpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgY29uZmlnIGZvciB0aGUgZWRpdG9yXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJpdmF0ZSBnZXRFZGl0b3JDb25maWcoKTogYW55IHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHRvb2xiYXI6IGAke3RoaXMuZWRpdG9yVG9vbGJhcn0gc25pcHBldHNCdXR0b25gLFxyXG5cdFx0XHRmb3JjZV9wX25ld2xpbmVzOiBmYWxzZSxcclxuXHRcdFx0Zm9yY2VkX3Jvb3RfYmxvY2s6ICcnLFxyXG5cdFx0XHRoZWlnaHQ6IHRoaXMuc2V0dGluZ3M/LmVkaXRvckhlaWdodCB8fCAnNzAwcHgnLFxyXG5cdFx0XHRmaWxlX3BpY2tlcl90eXBlczogJ2ZpbGUgaW1hZ2UgbWVkaWEnLFxyXG5cdFx0XHRpbWFnZV9hZHZ0YWI6IHRydWUsXHJcblx0XHRcdGltYWdlc191cGxvYWRfYmFzZV9wYXRoOiBgJHt0aGlzLmFwcFNldHRpbmcuYXBpVXJsfWZpbGUvYCxcclxuXHRcdFx0aW1hZ2VzX3VwbG9hZF91cmw6ICdiYWNrZW5kL2FwaS9maWxlcycsXHJcblx0XHRcdGFsbG93X2h0bWxfaW5fbmFtZWRfYW5jaG9yOiB0cnVlLFxyXG5cdFx0XHR2YWxpZF9jaGlsZHJlbjogJythW2RpdnxzcGFufGltZ3xoMXxoMnxoM3xoNHxoNXxoNnxicnxocnx2aWRlb10sK3NwYW5baV0nLFxyXG5cdFx0XHR2YWxpZF9lbGVtZW50czogJypbKl0nLFxyXG5cdFx0XHRpbWFnZXNfdXBsb2FkX2hhbmRsZXI6IChibG9iSW5mbzogYW55LCBzdWNjZXNzOiBhbnksIGZhaWx1cmU6IGFueSkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuZmlsZVNlcnZpY2UudXBsb2FkKGJsb2JJbmZvLmJsb2IoKSwgYHVwbG9hZGAsIHtcclxuXHRcdFx0XHRcdGNsaWVudElkOiB0aGlzLmZvcm0/LnZhbHVlPy5jbGllbnRJZCxcclxuXHRcdFx0XHRcdHBhdGg6ICdpbWFnZXMnLFxyXG5cdFx0XHRcdFx0aXNQdWJsaWM6IHRydWVcclxuXHRcdFx0XHR9KS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcclxuXHJcblx0XHRcdFx0XHRcdC8qIENhbGN1bGF0ZSB0aGUgcHJvZ3Jlc3MgcGVyY2VudGFnZSAqL1xyXG5cdFx0XHRcdFx0XHRjb25zdCBwZXJjZW50RG9uZSA9IE1hdGgucm91bmQoMTAwICogZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogUGFzcyB0aGUgcGVyY2VudGFnZSBpbnRvIHRoZSBwcm9ncmVzcy1zdHJlYW0gKi9cclxuXHRcdFx0XHRcdFx0Y29uc29sZS5pbmZvKHBlcmNlbnREb25lKTtcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuXHRcdFx0XHRcdFx0c3VjY2VzcyhldmVudC5ib2R5LnB1YmxpY0xpbmspO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24gKGVkaXRvcjogYW55KSB7XHJcblx0XHRcdFx0LyogQWRkIHNuaXBwZXRzIGJ1dHRvbiB0byB0aGUgdG9vbGJhciAqL1xyXG5cdFx0XHRcdGVkaXRvci51aS5yZWdpc3RyeS5hZGRNZW51QnV0dG9uKCdzbmlwcGV0c0J1dHRvbicsIHtcclxuXHRcdFx0XHRcdHRleHQ6ICdTbmlwcGV0cycsXHJcblx0XHRcdFx0XHRmZXRjaDogZnVuY3Rpb24gKGNhbGxiYWNrOiBhbnkpIHtcclxuXHRcdFx0XHRcdFx0Y2FsbGJhY2soW1xyXG5cdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdtZW51aXRlbScsXHJcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiAnVmFyaWFibGUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0b25BY3Rpb246ICgpID0+IGVkaXRvci5pbnNlcnRDb250ZW50KCd7e3ZhciBuYW1lfX0nKVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ21lbnVpdGVtJyxcclxuXHRcdFx0XHRcdFx0XHRcdHRleHQ6ICdCbG9jaycsXHJcblx0XHRcdFx0XHRcdFx0XHRvbkFjdGlvbjogKCkgPT4gZWRpdG9yLmluc2VydENvbnRlbnQoJ3t7YmxvY2sgbmFtZT1cIi4uLlwifX0nKVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ21lbnVpdGVtJyxcclxuXHRcdFx0XHRcdFx0XHRcdHRleHQ6ICdWaWV3IENvbXBvbmVudCcsXHJcblx0XHRcdFx0XHRcdFx0XHRvbkFjdGlvbjogKCkgPT4gZWRpdG9yLmluc2VydENvbnRlbnQoJ3t7dmMgbmFtZT1cIi4uLlwifX0nKVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdF0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2xlYW51cCBzdWJzY3JpcHRpb25zIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxyXG5cdCAqL1xyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMucm91dGVTdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0dGhpcy5yb3V0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxufSIsIjx2ZC1sYXlvdXQtbmF2IGNvbG9yPVwicHJpbWFyeVwiIFtiYWNrTmF2aWdhdGlvblJvdXRlXT1cImxpc3RSb3V0ZVwiIHRvb2xiYXJUaXRsZT1cIkNvbnRlbnRcIiBpMThuLXRvb2xiYXJUaXRsZSBbZWRpdE1vZGVdPVwiaXNFZGl0TW9kZVwiIFttZW51SXRlbXNdPVwidG9vbGJhck1lbnVJdGVtc1wiIChyZWxvYWQpPVwicmVsb2FkUGFnZSgpXCI+XHJcblx0PGZvcm0gKm5nSWY9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgbm92YWxpZGF0ZSAobmdTdWJtaXQpPVwic2F2ZSgpXCI+XHJcblx0XHQ8dmQtbGF5b3V0LWNhcmQtb3ZlciBjbGFzcz1cImFjY29yZGlvblwiIGNhcmRXaWR0aD1cIjcwXCIgY29sb3I9XCJwcmltYXJ5XCIgZmxleD5cclxuXHRcdFx0PG1hdC1hY2NvcmRpb24gW211bHRpXT1cIiFpc0VkaXRNb2RlXCI+XHJcblx0XHRcdFx0PCEtLSAjcmVnaW9uIERldGFpbHMgLS0+XHJcblx0XHRcdFx0PG1hdC1leHBhbnNpb24tcGFuZWwgZXhwYW5kZWQ9XCJ0cnVlXCIgaWQ9XCJkZXRhaWxzXCI+XHJcblx0XHRcdFx0XHQ8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblx0XHRcdFx0XHRcdDxtYXQtcGFuZWwtdGl0bGUgaTE4bj5EZXRhaWxzPC9tYXQtcGFuZWwtdGl0bGU+XHJcblx0XHRcdFx0XHQ8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuXHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBDbGllbnQtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0LWd0LXNtPVwicm93XCIgbGF5b3V0PVwiY29sdW1uXCIgKm5nSWY9XCJzZXR0aW5ncz8ubXVsdGl0ZW5hbnRhYmxlICYmICFpc0NsaWVudEFkbWluXCI+XHJcblx0XHRcdFx0XHRcdDxtYXQtZm9ybS1maWVsZCBmbGV4IGxheW91dC1tYXJnaW4gYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWxhYmVsIGkxOG4+Q2xpZW50PC9tYXQtbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PHZkLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjbGllbnRJZFwiIGVuZHBvaW50PVwiY2xpZW50P2VuYWJsZWQ9dHJ1ZVwiIGxheW91dD1cImNvbHVtblwiIChjaGFuZ2UpPVwic2V0Q2xpZW50KClcIiBbcmVxdWlyZWRdPVwiIWl0ZW0uZGVmYXVsdFwiIGZsZXg+PC92ZC1zZWxlY3Q+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGZvcm0uY29udHJvbHMuY2xpZW50SWRbJ2Vycm9yTWVzc2FnZXMnXVwiPnt7ZXJyb3JNZXNzYWdlfX08L21hdC1lcnJvcj5cclxuXHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBUaXRsZSAtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0PVwicm93XCIgZmxleD5cclxuXHRcdFx0XHRcdFx0PG1hdC1mb3JtLWZpZWxkIGZsZXggbGF5b3V0LW1hcmdpbiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtbGFiZWwgaTE4bj5UaXRsZTwvbWF0LWxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtZXJyb3IgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBmb3JtLmNvbnRyb2xzLnRpdGxlWydlcnJvck1lc3NhZ2VzJ11cIj57e2Vycm9yTWVzc2FnZX19PC9tYXQtZXJyb3I+XHJcblx0XHRcdFx0XHRcdDwvbWF0LWZvcm0tZmllbGQ+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHQ8IS0tICNyZWdpb24gTmFtZSAmIEFsaWFzIC0tPlxyXG5cdFx0XHRcdFx0PGRpdiBsYXlvdXQ9XCJyb3dcIiBmbGV4PlxyXG5cdFx0XHRcdFx0XHQ8bWF0LWZvcm0tZmllbGQgZmxleCBsYXlvdXQtbWFyZ2luIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1sYWJlbCBpMThuPk5hbWU8L21hdC1sYWJlbD5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtZXJyb3IgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBmb3JtLmNvbnRyb2xzLm5hbWVbJ2Vycm9yTWVzc2FnZXMnXVwiPnt7ZXJyb3JNZXNzYWdlfX08L21hdC1lcnJvcj5cclxuXHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBBbGlhc2VzIC0tPlxyXG5cdFx0XHRcdFx0PGRpdiBsYXlvdXQ9XCJyb3dcIiBmbGV4PlxyXG5cdFx0XHRcdFx0XHQ8bWF0LWZvcm0tZmllbGQgZmxleCBsYXlvdXQtbWFyZ2luIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1sYWJlbD5BbGlhc2VzPC9tYXQtbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1jaGlwLWxpc3QgI2NoaXBMaXN0IGZvcm1Db250cm9sTmFtZT1cImFsaWFzZXNcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgYWxpYXMgb2YgZm9ybS5jb250cm9scy5hbGlhc2VzLnZhbHVlXCIgKHJlbW92ZWQpPVwicmVtb3ZlQWxpYXNlcyhhbGlhcylcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+e3thbGlhc319PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9tYXQtY2hpcD5cclxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIiBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yS2V5c0NvZGVzXCIgbWF0Q2hpcElucHV0QWRkT25CbHVyPVwidHJ1ZVwiIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJhZGRBbGlhc2VzKCRldmVudClcIj5cclxuXHRcdFx0XHRcdFx0XHQ8L21hdC1jaGlwLWxpc3Q+XHJcblx0XHRcdFx0XHRcdDwvbWF0LWZvcm0tZmllbGQ+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHQ8IS0tICNyZWdpb24gd3JhcCB0YWcgYW5kIGxheW91dCAtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0PVwicm93XCIgZmxleD5cclxuXHRcdFx0XHRcdFx0PG1hdC1mb3JtLWZpZWxkIGZsZXggbGF5b3V0LW1hcmdpbiBhcHBlYXJhbmNlPVwib3V0bGluZVwiICpuZ0lmPVwidHlwZSAhPSBDb250ZW50VHlwZS5CbG9ja1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtbGFiZWwgaTE4bj5XcmFwPC9tYXQtbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIndyYXBUYWdcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWF1dG9jb21wbGV0ZSAjd3JhcFRhZ3NBdXRvY29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygd3JhcFRhZ3NcIiBbdmFsdWVdPVwib3B0aW9uLm5hbWVcIj57e29wdGlvbi5uYW1lfX08L21hdC1vcHRpb24+XHJcblx0XHRcdFx0XHRcdFx0PC9tYXQtYXV0b2NvbXBsZXRlPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtZXJyb3IgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBmb3JtLmNvbnRyb2xzLndyYXBUYWdbJ2Vycm9yTWVzc2FnZXMnXVwiPnt7ZXJyb3JNZXNzYWdlfX08L21hdC1lcnJvcj5cclxuXHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHJcblx0XHRcdFx0XHRcdDxtYXQtZm9ybS1maWVsZCBmbGV4IGxheW91dC1tYXJnaW4gYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWxhYmVsPkxheW91dDwvbWF0LWxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJsYXlvdXRcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWVycm9yICpuZ0Zvcj1cImxldCBlcnJvck1lc3NhZ2Ugb2YgZm9ybS5jb250cm9scy5sYXlvdXRbJ2Vycm9yTWVzc2FnZXMnXVwiPnt7ZXJyb3JNZXNzYWdlfX08L21hdC1lcnJvcj5cclxuXHRcdFx0XHRcdFx0PC9tYXQtZm9ybS1maWVsZD5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cdFx0XHRcdFx0PCEtLSAqbmdJZj1cIml0ZW0uY2xpZW50SWQgJiYgaXNFZGl0b3JJbml0aWFsemVkXCIgLS0+XHJcblx0XHRcdFx0XHQ8IS0tICNyZWdpb24gQm9keSAtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0LWd0LXNtPVwicm93XCIgbGF5b3V0PVwiY29sdW1uXCIgKm5nSWY9XCJpc0VkaXRvckluaXRpYWx6ZWRcIj5cclxuXHRcdFx0XHRcdFx0PG1hdC1mb3JtLWZpZWxkIGZsZXggbGF5b3V0LW1hcmdpbj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWxhYmVsIGkxOG4+Q29udGVudDwvbWF0LWxhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDxlZGl0b3IgI2VkaXRvciBmb3JtQ29udHJvbE5hbWU9XCJib2R5XCIgdGlueU1hdEZvcm1Db250cm9sIFsoaW5pdCldPVwiZWRpdG9yQ29uZmlnXCIgcmVxdWlyZWQ+PC9lZGl0b3I+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGZvcm0uY29udHJvbHMuYm9keVsnZXJyb3JNZXNzYWdlcyddXCI+e3tlcnJvck1lc3NhZ2V9fTwvbWF0LWVycm9yPlxyXG5cdFx0XHRcdFx0XHQ8L21hdC1mb3JtLWZpZWxkPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0PCEtLSAjcmVnaW9uIFNjcmlwdCAtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0PVwicm93XCIgZmxleD5cclxuXHRcdFx0XHRcdFx0PG1hdC1mb3JtLWZpZWxkIGZsZXggbGF5b3V0LW1hcmdpbiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtbGFiZWw+U2NyaXB0PC9tYXQtbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PHRleHRhcmVhIG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cInNjcmlwdFwiPjwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGZvcm0uY29udHJvbHMuc2NyaXB0WydlcnJvck1lc3NhZ2VzJ11cIj57e2Vycm9yTWVzc2FnZX19PC9tYXQtZXJyb3I+XHJcblx0XHRcdFx0XHRcdDwvbWF0LWZvcm0tZmllbGQ+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHQ8IS0tICNyZWdpb24gU3R5bGUgLS0+XHJcblx0XHRcdFx0XHQ8ZGl2IGxheW91dD1cInJvd1wiIGZsZXg+XHJcblx0XHRcdFx0XHRcdDxtYXQtZm9ybS1maWVsZCBmbGV4IGxheW91dC1tYXJnaW4gYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWxhYmVsPlN0eWxlPC9tYXQtbGFiZWw+XHJcblx0XHRcdFx0XHRcdFx0PHRleHRhcmVhIG1hdElucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cInN0eWxlXCI+PC90ZXh0YXJlYT5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWVycm9yICpuZ0Zvcj1cImxldCBlcnJvck1lc3NhZ2Ugb2YgZm9ybS5jb250cm9scy5zdHlsZVsnZXJyb3JNZXNzYWdlcyddXCI+e3tlcnJvck1lc3NhZ2V9fTwvbWF0LWVycm9yPlxyXG5cdFx0XHRcdFx0XHQ8L21hdC1mb3JtLWZpZWxkPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdFx0PCEtLSAjcmVnaW9uIFNob3cgdGl0bGUgLS0+XHJcblx0XHRcdFx0XHQ8ZGl2IGxheW91dC1ndC1zbT1cInJvd1wiIGxheW91dD1cImNvbHVtblwiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGxheW91dC1tYXJnaW4gYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInB1c2gtdG9wXCI+XHJcblx0XHRcdFx0XHRcdFx0PG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJzaG93VGl0bGVcIiBpMThuPlNob3cgdGl0bGU8L21hdC1jaGVja2JveD5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHQ8IS0tICNyZWdpb24gRGVmYXVsdCAtLT5cclxuXHRcdFx0XHRcdDxkaXYgbGF5b3V0LWd0LXNtPVwicm93XCIgbGF5b3V0PVwiY29sdW1uXCIgKm5nSWY9XCIhaXNDbGllbnRBZG1pblwiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGxheW91dC1tYXJnaW4gYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8bWF0LWNoZWNrYm94IG5hbWU9XCJkZWZhdWx0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVmYXVsdFwiIChjaGFuZ2UpPVwiaXRlbS5jbGllbnRJZCA9IGl0ZW0uZGVmYXVsdCA/IG51bGwgOiBpdGVtLmNsaWVudElkXCI+RGVmYXVsdDwvbWF0LWNoZWNrYm94PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuXHRcdFx0XHRcdDwhLS0gI3JlZ2lvbiBFbmFibGVkIC0tPlxyXG5cdFx0XHRcdFx0PGRpdiBsYXlvdXQtZ3Qtc209XCJyb3dcIiBsYXlvdXQ9XCJjb2x1bW5cIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBsYXlvdXQtbWFyZ2luIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwdXNoLWJvdHRvbVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtY2hlY2tib3ggbmFtZT1cImVuYWJsZWRcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkXCIgaTE4bj5BY3RpdmU8L21hdC1jaGVja2JveD5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcblx0XHRcdFx0XHQ8bWF0LWFjdGlvbi1yb3c+XHJcblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiaXNTYXZpbmdcIiBpMThuPlNhdmU8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiAqbmdJZj1cImlzRWRpdE1vZGVcIiAoY2xpY2spPVwiYXBwbHkoKVwiIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiIGkxOG4+QXBwbHk8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwiYmFjaygpXCIgaTE4bj5DYW5jZWw8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PHNwYW4gZmxleD48L3NwYW4+XHJcblx0XHRcdFx0XHQ8L21hdC1hY3Rpb24tcm93PlxyXG5cdFx0XHRcdDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuXHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG5cdFx0XHRcdDwhLS0gI3JlZ2lvbiBBdWRpdCAtLT5cclxuXHRcdFx0XHQ8bWF0LWV4cGFuc2lvbi1wYW5lbCBpZD1cImF1ZGl0XCIgKm5nSWY9XCJpc0VkaXRNb2RlXCI+XHJcblx0XHRcdFx0XHQ8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcblx0XHRcdFx0XHRcdDxtYXQtcGFuZWwtdGl0bGU+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gaTE4bj5BdWRpdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9tYXQtcGFuZWwtdGl0bGU+XHJcblx0XHRcdFx0XHQ8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cdFx0XHRcdFx0PHZkLWF1ZGl0IFtpdGVtXT1cIml0ZW1cIj4gPC92ZC1hdWRpdD5cclxuXHRcdFx0XHRcdDxtYXQtYWN0aW9uLXJvdz5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cImJhY2soKVwiIGkxOG4+Q2xvc2U8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PHNwYW4gZmxleD48L3NwYW4+XHJcblx0XHRcdFx0XHQ8L21hdC1hY3Rpb24tcm93PlxyXG5cdFx0XHRcdDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuXHRcdFx0XHQ8IS0tICNlbmRyZWdpb24gLS0+XHJcblx0XHRcdDwvbWF0LWFjY29yZGlvbj5cclxuXHRcdDwvdmQtbGF5b3V0LWNhcmQtb3Zlcj5cclxuXHQ8L2Zvcm0+XHJcbjwvdmQtbGF5b3V0LW5hdj4iXX0=