@acorex/platform 20.6.0-next.5 → 20.6.0-next.6

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 (87) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +19 -19
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-common-common-settings.provider-CGVarshJ.mjs → acorex-platform-common-common-settings.provider-zhqNP3xb.mjs} +4 -4
  4. package/fesm2022/{acorex-platform-common-common-settings.provider-CGVarshJ.mjs.map → acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map} +1 -1
  5. package/fesm2022/acorex-platform-common.mjs +103 -103
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +54 -54
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +16 -16
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +17 -17
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-components.mjs +147 -147
  14. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-layout-designer.mjs +72 -72
  16. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  17. package/fesm2022/{acorex-platform-layout-entity-create-entity.command-BsLbiAdA.mjs → acorex-platform-layout-entity-create-entity.command-DGeylNSY.mjs} +4 -4
  18. package/fesm2022/{acorex-platform-layout-entity-create-entity.command-BsLbiAdA.mjs.map → acorex-platform-layout-entity-create-entity.command-DGeylNSY.mjs.map} +1 -1
  19. package/fesm2022/acorex-platform-layout-entity.mjs +141 -141
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +16 -16
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +74 -73
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-lHfg4JFJ.mjs → acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs} +4 -4
  26. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-lHfg4JFJ.mjs.map → acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map} +1 -1
  27. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-CMSnecnD.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-fhhZOWul.mjs} +4 -4
  28. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-CMSnecnD.mjs.map → acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-fhhZOWul.mjs.map} +1 -1
  29. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-DN-sIFYe.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-C3Qbs0fz.mjs} +4 -4
  30. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-DN-sIFYe.mjs.map → acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-C3Qbs0fz.mjs.map} +1 -1
  31. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-Bn9w0SEz.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-CngQBUlN.mjs} +4 -4
  32. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-Bn9w0SEz.mjs.map → acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-CngQBUlN.mjs.map} +1 -1
  33. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-view.component-B8mgcvoX.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-view.component-DSNo9e4W.mjs} +4 -4
  34. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-view.component-B8mgcvoX.mjs.map → acorex-platform-layout-widgets-extra-properties-values-widget-view.component-DSNo9e4W.mjs.map} +1 -1
  35. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-edit.component-Bhof2SY8.mjs → acorex-platform-layout-widgets-extra-properties-widget-edit.component-CL0CwEHX.mjs} +4 -4
  36. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-edit.component-Bhof2SY8.mjs.map → acorex-platform-layout-widgets-extra-properties-widget-edit.component-CL0CwEHX.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-view.component-CeQIvKVV.mjs → acorex-platform-layout-widgets-extra-properties-widget-view.component-B6Fi0xTw.mjs} +4 -4
  38. package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-view.component-CeQIvKVV.mjs.map → acorex-platform-layout-widgets-extra-properties-widget-view.component-B6Fi0xTw.mjs.map} +1 -1
  39. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-2q4whXBx.mjs → acorex-platform-layout-widgets-file-list-popup.component-D0y-9nE5.mjs} +4 -4
  40. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-2q4whXBx.mjs.map → acorex-platform-layout-widgets-file-list-popup.component-D0y-9nE5.mjs.map} +1 -1
  41. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-C57lyBs3.mjs → acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs} +4 -4
  42. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-C57lyBs3.mjs.map → acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map} +1 -1
  43. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-DGDLHbaR.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-C1l2KSDa.mjs} +5 -5
  44. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-C1l2KSDa.mjs.map +1 -0
  45. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-CvZTRhct.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-D-31ej0C.mjs} +4 -4
  46. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-CvZTRhct.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-D-31ej0C.mjs.map} +1 -1
  47. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-DHES_0ot.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs} +4 -4
  48. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-DHES_0ot.mjs.map → acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map} +1 -1
  49. package/fesm2022/acorex-platform-layout-widgets.mjs +800 -548
  50. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  51. package/fesm2022/acorex-platform-native.mjs +7 -7
  52. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  53. package/fesm2022/acorex-platform-runtime.mjs +40 -40
  54. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  55. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-C_XmJV7Y.mjs → acorex-platform-themes-default-entity-master-create-view.component-g-EOvXP_.mjs} +4 -4
  56. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-g-EOvXP_.mjs.map +1 -0
  57. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-Beba9db5.mjs → acorex-platform-themes-default-entity-master-list-view.component-CD3dS3z9.mjs} +10 -10
  58. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-Beba9db5.mjs.map → acorex-platform-themes-default-entity-master-list-view.component-CD3dS3z9.mjs.map} +1 -1
  59. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-DJPDil7w.mjs → acorex-platform-themes-default-entity-master-modify-view.component-Cwntcjyy.mjs} +4 -4
  60. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Cwntcjyy.mjs.map +1 -0
  61. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BArdGNfr.mjs → acorex-platform-themes-default-entity-master-single-view.component-B_P0a5KW.mjs} +7 -7
  62. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-B_P0a5KW.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-themes-default-error-401.component-D7rEInHg.mjs → acorex-platform-themes-default-error-401.component-cfREo88K.mjs} +4 -4
  64. package/fesm2022/{acorex-platform-themes-default-error-401.component-D7rEInHg.mjs.map → acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map} +1 -1
  65. package/fesm2022/{acorex-platform-themes-default-error-404.component-BTZlVrd8.mjs → acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs} +4 -4
  66. package/fesm2022/{acorex-platform-themes-default-error-404.component-BTZlVrd8.mjs.map → acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map} +1 -1
  67. package/fesm2022/{acorex-platform-themes-default-error-offline.component-BhvEi6nX.mjs → acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs} +4 -4
  68. package/fesm2022/{acorex-platform-themes-default-error-offline.component-BhvEi6nX.mjs.map → acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map} +1 -1
  69. package/fesm2022/acorex-platform-themes-default.mjs +39 -39
  70. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  71. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-BXV40gay.mjs → acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs} +4 -4
  72. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-BXV40gay.mjs.map → acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map} +1 -1
  73. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-BpIf4s53.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs} +4 -4
  74. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-BpIf4s53.mjs.map → acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map} +1 -1
  75. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-C9gvfQfX.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs} +4 -4
  76. package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-C9gvfQfX.mjs.map → acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map} +1 -1
  77. package/fesm2022/acorex-platform-themes-shared.mjs +42 -42
  78. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  79. package/fesm2022/acorex-platform-workflow.mjs +37 -37
  80. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  81. package/layout/widget-core/index.d.ts +1 -0
  82. package/layout/widgets/index.d.ts +65 -3
  83. package/package.json +1 -1
  84. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DGDLHbaR.mjs.map +0 -1
  85. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-C_XmJV7Y.mjs.map +0 -1
  86. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DJPDil7w.mjs.map +0 -1
  87. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BArdGNfr.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-auth.mjs","sources":["../tmp-esm2022/auth/lib/application/application.loader.js","../tmp-esm2022/auth/lib/tenant/tenant.loader.js","../tmp-esm2022/auth/lib/auth-registry.service.js","../tmp-esm2022/auth/lib/feature/feature.loader.js","../tmp-esm2022/auth/lib/feature/feature.directive.js","../tmp-esm2022/auth/lib/errors.types.js","../tmp-esm2022/auth/lib/feature/feature.guard.js","../tmp-esm2022/auth/lib/permission/permission.loader.js","../tmp-esm2022/auth/lib/session.types.js","../tmp-esm2022/auth/lib/session.service.js","../tmp-esm2022/auth/lib/permission/permission.directive.js","../tmp-esm2022/auth/lib/permission/permission.guard.js","../tmp-esm2022/auth/lib/permission/permission-definition.builder.js","../tmp-esm2022/auth/lib/permission/permission-definition.service.js","../tmp-esm2022/auth/lib/permission/permission-evaluator-scope.provider.js","../tmp-esm2022/auth/lib/auth.guard.js","../tmp-esm2022/auth/lib/auth.module.js","../tmp-esm2022/auth/lib/auth.strategy.js","../tmp-esm2022/auth/lib/auth.utils.js","../tmp-esm2022/auth/acorex-platform-auth.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { of } from 'rxjs';\nexport const AXP_APPLICATION_LOADER = new InjectionToken('AXP_APPLICATION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPApplicationDefaultLoader();\n },\n});\nclass AXPApplicationDefaultLoader {\n getList(context) {\n return of([\n {\n id: '1',\n name: 'default-app',\n title: 'Default Application',\n version: '1.0.0',\n editionName: 'Standard',\n features: [],\n },\n {\n id: '2',\n name: 'default-app',\n title: 'Default Application',\n version: '1.0.0',\n editionName: 'Standard',\n features: [],\n },\n ]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24ubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9hdXRoL3NyYy9saWIvYXBwbGljYXRpb24vYXBwbGljYXRpb24ubG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBdUIsd0JBQXdCLEVBQUU7SUFDdkcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLE9BQU8sSUFBSSwyQkFBMkIsRUFBRSxDQUFDO0lBQzNDLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLDJCQUEyQjtJQUMvQixPQUFPLENBQUMsT0FBMEI7UUFDaEMsT0FBTyxFQUFFLENBQUM7WUFDUjtnQkFDRSxFQUFFLEVBQUUsR0FBRztnQkFDUCxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsS0FBSyxFQUFFLHFCQUFxQjtnQkFDNUIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFdBQVcsRUFBRSxVQUFVO2dCQUN2QixRQUFRLEVBQUUsRUFBRTthQUNiO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLEdBQUc7Z0JBQ1AsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEtBQUssRUFBRSxxQkFBcUI7Z0JBQzVCLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixXQUFXLEVBQUUsVUFBVTtnQkFDdkIsUUFBUSxFQUFFLEVBQUU7YUFDYjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhQU2Vzc2lvbkNvbnRleHQgfSBmcm9tICcuLi9zZXNzaW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9hcHBsaWNhdGlvbi50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQXBwbGljYXRpb25Mb2FkZXIge1xuICBnZXRMaXN0KGNvbnRleHQ6IEFYUFNlc3Npb25Db250ZXh0KTogT2JzZXJ2YWJsZTxBWFBBcHBsaWNhdGlvbltdPjtcbn1cblxuZXhwb3J0IGNvbnN0IEFYUF9BUFBMSUNBVElPTl9MT0FERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQQXBwbGljYXRpb25Mb2FkZXI+KCdBWFBfQVBQTElDQVRJT05fTE9BREVSJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IEFYUEFwcGxpY2F0aW9uRGVmYXVsdExvYWRlcigpO1xuICB9LFxufSk7XG5cbmNsYXNzIEFYUEFwcGxpY2F0aW9uRGVmYXVsdExvYWRlciBpbXBsZW1lbnRzIEFYUEFwcGxpY2F0aW9uTG9hZGVyIHtcbiAgZ2V0TGlzdChjb250ZXh0OiBBWFBTZXNzaW9uQ29udGV4dCk6IE9ic2VydmFibGU8QVhQQXBwbGljYXRpb25bXT4ge1xuICAgIHJldHVybiBvZihbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIG5hbWU6ICdkZWZhdWx0LWFwcCcsXG4gICAgICAgIHRpdGxlOiAnRGVmYXVsdCBBcHBsaWNhdGlvbicsXG4gICAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICAgIGVkaXRpb25OYW1lOiAnU3RhbmRhcmQnLFxuICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzInLFxuICAgICAgICBuYW1lOiAnZGVmYXVsdC1hcHAnLFxuICAgICAgICB0aXRsZTogJ0RlZmF1bHQgQXBwbGljYXRpb24nLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgICBlZGl0aW9uTmFtZTogJ1N0YW5kYXJkJyxcbiAgICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxufVxuIl19","import { InjectionToken } from '@angular/core';\nimport { of } from 'rxjs';\nexport const AXP_TENANT_LOADER = new InjectionToken('AXP_TENANT_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPTenantDefaultLoader();\n },\n});\nclass AXPTenantDefaultLoader {\n getList(context) {\n return of([\n {\n id: '1',\n name: 'default-tenant',\n title: 'Default Tenant',\n },\n ]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LmxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL3RlbmFudC90ZW5hbnQubG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBa0IsbUJBQW1CLEVBQUU7SUFDeEYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLE9BQU8sSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RDLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLHNCQUFzQjtJQUUxQixPQUFPLENBQUMsT0FBMEI7UUFDaEMsT0FBTyxFQUFFLENBQUM7WUFDUjtnQkFDRSxFQUFFLEVBQUUsR0FBRztnQkFDUCxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsZ0JBQWdCO2FBQ3hCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBUZW5hbnQgfSBmcm9tICcuL3RlbmFudC50eXBlcyc7XG5pbXBvcnQgeyBBWFBTZXNzaW9uQ29udGV4dCB9IGZyb20gJy4uL3Nlc3Npb24udHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFRlbmFudExvYWRlciB7XG4gIGdldExpc3QoY29udGV4dDogQVhQU2Vzc2lvbkNvbnRleHQpOiBPYnNlcnZhYmxlPEFYUFRlbmFudFtdPjtcbn1cblxuZXhwb3J0IGNvbnN0IEFYUF9URU5BTlRfTE9BREVSID0gbmV3IEluamVjdGlvblRva2VuPEFYUFRlbmFudExvYWRlcj4oJ0FYUF9URU5BTlRfTE9BREVSJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IEFYUFRlbmFudERlZmF1bHRMb2FkZXIoKTtcbiAgfSxcbn0pO1xuXG5jbGFzcyBBWFBUZW5hbnREZWZhdWx0TG9hZGVyIGltcGxlbWVudHMgQVhQVGVuYW50TG9hZGVyIHtcblxuICBnZXRMaXN0KGNvbnRleHQ6IEFYUFNlc3Npb25Db250ZXh0KTogT2JzZXJ2YWJsZTxBWFBUZW5hbnRbXT4ge1xuICAgIHJldHVybiBvZihbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIG5hbWU6ICdkZWZhdWx0LXRlbmFudCcsXG4gICAgICAgIHRpdGxlOiAnRGVmYXVsdCBUZW5hbnQnLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxufVxuIl19","import { Injectable, Injector } from \"@angular/core\";\nimport * as i0 from \"@angular/core\";\nexport class AXPAuthStrategyRegistryService {\n constructor(injector) {\n this.strategies = new Map();\n this.injector = injector;\n }\n register(...plugins) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const strategy = childInjector.get(t);\n if (strategy) {\n this.strategies.set(strategy.name, strategy);\n }\n });\n }\n get(strategyKey) {\n return this.strategies.get(strategyKey);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPAuthStrategyRegistryService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPAuthStrategyRegistryService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPAuthStrategyRegistryService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [{ type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1yZWdpc3RyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9hdXRoL3NyYy9saWIvYXV0aC1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU1yRCxNQUFNLE9BQU8sOEJBQThCO0lBS3pDLFlBQVksUUFBa0I7UUFKdEIsZUFBVSxHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO1FBS3RELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBRyxPQUFzQztRQUNoRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDckgsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEdBQUcsQ0FBQyxXQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7K0dBckJVLDhCQUE4QjttSEFBOUIsOEJBQThCLGNBRjdCLE1BQU07OzRGQUVQLDhCQUE4QjtrQkFIMUMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBWFBBdXRoU3RyYXRlZ3kgfSBmcm9tIFwiLi9hdXRoLnN0cmF0ZWd5XCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFYUEF1dGhTdHJhdGVneVJlZ2lzdHJ5U2VydmljZSB7XG4gIHByaXZhdGUgc3RyYXRlZ2llcyA9IG5ldyBNYXA8c3RyaW5nLCBBWFBBdXRoU3RyYXRlZ3k+KCk7XG5cbiAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3I7XG5cbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICB9XG5cbiAgcmVnaXN0ZXIoLi4ucGx1Z2luczogKG5ldyAoKSA9PiBBWFBBdXRoU3RyYXRlZ3kpW10pIHtcbiAgICBwbHVnaW5zLmZvckVhY2godCA9PiB7XG4gICAgICBjb25zdCBjaGlsZEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiB0LCB1c2VDbGFzczogdCwgZGVwczogW10gfV0sIHBhcmVudDogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gY2hpbGRJbmplY3Rvci5nZXQodCk7XG4gICAgICBpZiAoc3RyYXRlZ3kpIHtcbiAgICAgICAgdGhpcy5zdHJhdGVnaWVzLnNldChzdHJhdGVneS5uYW1lLCBzdHJhdGVneSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldChzdHJhdGVneUtleTogc3RyaW5nKTogQVhQQXV0aFN0cmF0ZWd5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdHJhdGVnaWVzLmdldChzdHJhdGVneUtleSk7XG4gIH1cbn0iXX0=","import { InjectionToken } from '@angular/core';\nimport { of } from 'rxjs';\nexport const AXP_FEATURE_LOADER = new InjectionToken('AXP_FEATURE_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPFeatureDefaultLoader();\n },\n});\nclass AXPFeatureDefaultLoader {\n getList(context) {\n return of([]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9mZWF0dXJlL2ZlYXR1cmUubG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBbUIsb0JBQW9CLEVBQUU7SUFDM0YsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLE9BQU8sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLHVCQUF1QjtJQUMzQixPQUFPLENBQUMsT0FBMEI7UUFDaEMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBGZWF0dXJlIH0gZnJvbSAnLi9mZWF0dXJlLnR5cGVzJztcbmltcG9ydCB7IEFYUFNlc3Npb25Db250ZXh0IH0gZnJvbSAnLi4vc2Vzc2lvbi50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRmVhdHVyZUxvYWRlciB7XG4gIGdldExpc3QoY29udGV4dDogQVhQU2Vzc2lvbkNvbnRleHQpOiBPYnNlcnZhYmxlPEFYUEZlYXR1cmVbXT47XG59XG5cbmV4cG9ydCBjb25zdCBBWFBfRkVBVFVSRV9MT0FERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQRmVhdHVyZUxvYWRlcj4oJ0FYUF9GRUFUVVJFX0xPQURFUicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBBWFBGZWF0dXJlRGVmYXVsdExvYWRlcigpO1xuICB9LFxufSk7XG5cbmNsYXNzIEFYUEZlYXR1cmVEZWZhdWx0TG9hZGVyIGltcGxlbWVudHMgQVhQRmVhdHVyZUxvYWRlciB7XG4gIGdldExpc3QoY29udGV4dDogQVhQU2Vzc2lvbkNvbnRleHQpOiBPYnNlcnZhYmxlPEFYUEZlYXR1cmVbXT4ge1xuICAgIHJldHVybiBvZihbXSk7XG4gIH1cbn1cbiJdfQ==","import { Directive, Input, TemplateRef, ViewContainerRef, inject, signal } from '@angular/core';\nimport { AXPSessionService } from '../session.service';\nimport * as i0 from \"@angular/core\";\nexport class AXPFeatureDirective {\n constructor(templateRef, viewContainer) {\n this.templateRef = templateRef;\n this.viewContainer = viewContainer;\n this.hasView = signal(false, ...(ngDevMode ? [{ debugName: \"hasView\" }] : []));\n this.sessionService = inject(AXPSessionService);\n }\n set feature(featureKeys) {\n const keys = !featureKeys ? [] : (Array.isArray(featureKeys) ? featureKeys : [featureKeys]);\n if (keys.length == 0) {\n // If featureKey is null or empty, decide the default behavior here\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n return;\n }\n this.subscription = this.sessionService.features$\n //.pipe(first())\n .subscribe(() => {\n if (this.sessionService.isFeatureEnabled(...keys)) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n }\n }\n else {\n this.viewContainer.clear();\n this.hasView.set(false);\n }\n });\n }\n set featureElse(elseTemplateRef) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(elseTemplateRef);\n }\n }\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPFeatureDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.10\", type: AXPFeatureDirective, isStandalone: false, selector: \"[feature]\", inputs: { feature: \"feature\", featureElse: \"featureElse\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPFeatureDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[feature]',\n standalone: false\n }]\n }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }], propDecorators: { feature: [{\n type: Input\n }], featureElse: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9mZWF0dXJlL2ZlYXR1cmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQU12RCxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQ1UsV0FBNkIsRUFDN0IsYUFBK0I7UUFEL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQU5qQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssbURBQUMsQ0FBQztRQUV4QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBSy9DLENBQUM7SUFFTCxJQUNXLE9BQU8sQ0FBQyxXQUFxQztRQUN0RCxNQUFNLElBQUksR0FBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQixtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUztZQUMvQyxnQkFBZ0I7YUFDZixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQ1csV0FBVyxDQUFDLGVBQWlDO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzsrR0EzQ1UsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFVBQVUsRUFBRSxLQUFLO2lCQUNwQjs7c0JBV0UsS0FBSzs7c0JBd0JMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZmlyc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbi5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZmVhdHVyZV0nLFxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIEFYUEZlYXR1cmVEaXJlY3RpdmUge1xuICBwcml2YXRlIGhhc1ZpZXcgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBzZXNzaW9uU2VydmljZSA9IGluamVjdChBWFBTZXNzaW9uU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWZcbiAgKSB7IH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZlYXR1cmUoZmVhdHVyZUtleXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCkge1xuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gIWZlYXR1cmVLZXlzID8gW10gOiAoQXJyYXkuaXNBcnJheShmZWF0dXJlS2V5cykgPyBmZWF0dXJlS2V5cyA6IFtmZWF0dXJlS2V5c10pO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAvLyBJZiBmZWF0dXJlS2V5IGlzIG51bGwgb3IgZW1wdHksIGRlY2lkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBoZXJlXG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgICAgdGhpcy5oYXNWaWV3LnNldCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmZlYXR1cmVzJFxuICAgICAgLy8ucGlwZShmaXJzdCgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb25TZXJ2aWNlLmlzRmVhdHVyZUVuYWJsZWQoLi4ua2V5cykpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzVmlldygpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgICAgICAgICAgdGhpcy5oYXNWaWV3LnNldCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgICAgdGhpcy5oYXNWaWV3LnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmZWF0dXJlRWxzZShlbHNlVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAoIXRoaXMuaGFzVmlldygpKSB7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGVsc2VUZW1wbGF0ZVJlZik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==","export class AXPUnauthorizedError extends Error {\n constructor(message, data) {\n super(message);\n this.data = data;\n this.name = 'AXPUnauthorizedError';\n }\n}\nexport class AXPUnauthenticatedError extends Error {\n constructor(message, data) {\n super(message);\n this.data = data;\n this.name = 'AXPUnauthenticatedError';\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9hdXRoL3NyYy9saWIvZXJyb3JzLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxLQUFLO0lBQzNDLFlBQVksT0FBZ0IsRUFBUyxJQUErQjtRQUNoRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEa0IsU0FBSSxHQUFKLElBQUksQ0FBMkI7UUFFaEUsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztJQUN2QyxDQUFDO0NBQ0o7QUFHRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsS0FBSztJQUM5QyxZQUFZLE9BQWdCLEVBQVMsSUFBK0I7UUFDaEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRGtCLFNBQUksR0FBSixJQUFJLENBQTJCO1FBRWhFLElBQUksQ0FBQyxJQUFJLEdBQUcseUJBQXlCLENBQUM7SUFDMUMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEFYUFVuYXV0aG9yaXplZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcsIHB1YmxpYyBkYXRhPzogeyByZWRpcmVjdFVybD86IHN0cmluZyB9KSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnQVhQVW5hdXRob3JpemVkRXJyb3InO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgQVhQVW5hdXRoZW50aWNhdGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZywgcHVibGljIGRhdGE/OiB7IHJlZGlyZWN0VXJsPzogc3RyaW5nIH0pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdBWFBVbmF1dGhlbnRpY2F0ZWRFcnJvcic7XG4gICAgfVxufSJdfQ==","import { inject } from \"@angular/core\";\nimport { AXPSessionService } from \"../session.service\";\nimport { map } from \"rxjs\";\nimport { AXPUnauthorizedError } from \"../errors.types\";\nexport const AXPFeatureGuard = (route, state) => {\n const sessionService = inject(AXPSessionService);\n const requiredFeatures = route.data['requiredFeature'];\n return sessionService.features$.pipe(map(() => {\n const keys = !requiredFeatures ? [] : (Array.isArray(requiredFeatures) ? requiredFeatures : [requiredFeatures]);\n const hasFeature = keys.length == 0 || sessionService.isFeatureEnabled(...keys);\n if (!hasFeature) {\n throw new AXPUnauthorizedError(`Access Denied. You do not have access to this feature. Required feature(s): ${keys.join(', ')}. Please contact support if you need access.`, {\n redirectUrl: state.url\n });\n }\n return true;\n }));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL2ZlYXR1cmUvZmVhdHVyZS5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBcUIsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FDMUIsQ0FBQyxLQUE2QixFQUFFLEtBQTBCLEVBQWlDLEVBQUU7SUFDM0YsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUErQixDQUFDO0lBRXJGLE9BQU8sY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2xDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDUCxNQUFNLElBQUksR0FBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDMUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsK0VBQStFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxFQUM1STtnQkFDRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEdBQUc7YUFDdkIsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlRm4sIFJvdXRlclN0YXRlU25hcHNob3QsIFVybFRyZWUgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2Vzc2lvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmaXJzdCwgbWFwIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEFYUFVuYXV0aG9yaXplZEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy50eXBlc1wiO1xuXG5cbmV4cG9ydCBjb25zdCBBWFBGZWF0dXJlR3VhcmQ6IENhbkFjdGl2YXRlRm4gPVxuICAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4gPT4ge1xuICAgIGNvbnN0IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcbiAgICBjb25zdCByZXF1aXJlZEZlYXR1cmVzID0gcm91dGUuZGF0YVsncmVxdWlyZWRGZWF0dXJlJ10gYXMgKHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCk7XG5cbiAgICByZXR1cm4gc2Vzc2lvblNlcnZpY2UuZmVhdHVyZXMkLnBpcGUoXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9ICFyZXF1aXJlZEZlYXR1cmVzID8gW10gOiAoQXJyYXkuaXNBcnJheShyZXF1aXJlZEZlYXR1cmVzKSA/IHJlcXVpcmVkRmVhdHVyZXMgOiBbcmVxdWlyZWRGZWF0dXJlc10pO1xuICAgICAgICBjb25zdCBoYXNGZWF0dXJlID0ga2V5cy5sZW5ndGggPT0gMCB8fCBzZXNzaW9uU2VydmljZS5pc0ZlYXR1cmVFbmFibGVkKC4uLmtleXMpO1xuICAgICAgICBpZiAoIWhhc0ZlYXR1cmUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQVhQVW5hdXRob3JpemVkRXJyb3IoXG4gICAgICAgICAgICBgQWNjZXNzIERlbmllZC4gWW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGlzIGZlYXR1cmUuIFJlcXVpcmVkIGZlYXR1cmUocyk6ICR7a2V5cy5qb2luKCcsICcpfS4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBpZiB5b3UgbmVlZCBhY2Nlc3MuYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVkaXJlY3RVcmw6IHN0YXRlLnVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICk7XG4gIH07XG4iXX0=","import { InjectionToken } from \"@angular/core\";\nimport { of } from \"rxjs\";\nexport const AXP_PERMISSION_LOADER = new InjectionToken('AXP_PERMISSION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPPermissionDefaultLoader();\n }\n});\nclass AXPPermissionDefaultLoader {\n getList(context) {\n return of([]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9wZXJtaXNzaW9uL3Blcm1pc3Npb24ubG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsdUJBQXVCLEVBQUU7SUFDbEcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNWLE9BQU8sSUFBSSwwQkFBMEIsRUFBRSxDQUFDO0lBQzVDLENBQUM7Q0FDSixDQUFDLENBQUM7QUFHSCxNQUFNLDBCQUEwQjtJQUM1QixPQUFPLENBQUMsT0FBMEI7UUFDOUIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQVhQUGVybWlzc2lvbiB9IGZyb20gXCIuL3Blcm1pc3Npb24udHlwZXNcIjtcbmltcG9ydCB7IEFYUFNlc3Npb25Db250ZXh0IH0gZnJvbSBcIi4uL3Nlc3Npb24udHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBWFBQZXJtaXNzaW9uTG9hZGVyIHtcbiAgICBnZXRMaXN0KGNvbnRleHQ6IEFYUFNlc3Npb25Db250ZXh0KTogT2JzZXJ2YWJsZTxBWFBQZXJtaXNzaW9uW10+O1xufVxuXG5leHBvcnQgY29uc3QgQVhQX1BFUk1JU1NJT05fTE9BREVSID0gbmV3IEluamVjdGlvblRva2VuPEFYUFBlcm1pc3Npb25Mb2FkZXI+KCdBWFBfUEVSTUlTU0lPTl9MT0FERVInLCB7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAgIGZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBWFBQZXJtaXNzaW9uRGVmYXVsdExvYWRlcigpO1xuICAgIH1cbn0pO1xuXG5cbmNsYXNzIEFYUFBlcm1pc3Npb25EZWZhdWx0TG9hZGVyIGltcGxlbWVudHMgQVhQUGVybWlzc2lvbkxvYWRlciB7XG4gICAgZ2V0TGlzdChjb250ZXh0OiBBWFBTZXNzaW9uQ29udGV4dCk6IE9ic2VydmFibGU8QVhQUGVybWlzc2lvbltdPiB7XG4gICAgICAgIHJldHVybiBvZihbXSlcbiAgICB9XG59Il19","export class AXPSessionContext {\n get user() {\n return this._user;\n }\n get tenant() {\n return this._tenant;\n }\n get application() {\n return this._application;\n }\n constructor(context) {\n this._user = null;\n this._tenant = null;\n this._application = null;\n this._user = context.user;\n this._tenant = context.tenant;\n this._application = context.application;\n }\n}\nexport var AXPSessionStatus;\n(function (AXPSessionStatus) {\n AXPSessionStatus[\"Authenticated\"] = \"authenticated\";\n AXPSessionStatus[\"Unauthenticated\"] = \"unauthenticated\";\n AXPSessionStatus[\"Unauthorized\"] = \"unauthorized\";\n AXPSessionStatus[\"Authorized\"] = \"authorized\";\n AXPSessionStatus[\"Expired\"] = \"expired\";\n AXPSessionStatus[\"SignedOut\"] = \"signedOut\";\n})(AXPSessionStatus || (AXPSessionStatus = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL3Nlc3Npb24udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxPQUFPLGlCQUFpQjtJQUcxQixJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUdELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBR0QsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWSxPQUlYO1FBbkJPLFVBQUssR0FBbUIsSUFBSSxDQUFDO1FBSzdCLFlBQU8sR0FBcUIsSUFBSSxDQUFDO1FBS2pDLGlCQUFZLEdBQTBCLElBQUksQ0FBQztRQVUvQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM1QyxDQUFDO0NBQ0o7QUFHRCxNQUFNLENBQU4sSUFBWSxnQkFPWDtBQVBELFdBQVksZ0JBQWdCO0lBQ3hCLG1EQUErQixDQUFBO0lBQy9CLHVEQUFtQyxDQUFBO0lBQ25DLGlEQUE2QixDQUFBO0lBQzdCLDZDQUF5QixDQUFBO0lBQ3pCLHVDQUFtQixDQUFBO0lBQ25CLDJDQUF1QixDQUFBO0FBQzNCLENBQUMsRUFQVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQQXBwbGljYXRpb24gfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9hcHBsaWNhdGlvbi50eXBlc1wiO1xuaW1wb3J0IHsgQVhQVGVuYW50IH0gZnJvbSBcIi4vdGVuYW50L3RlbmFudC50eXBlc1wiO1xuaW1wb3J0IHsgQVhQVXNlciB9IGZyb20gXCIuL3VzZXIvdXNlci50eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgQVhQU2Vzc2lvbkNvbnRleHQge1xuXG4gICAgcHJpdmF0ZSBfdXNlcjogQVhQVXNlciB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBnZXQgdXNlcigpOiBBWFBVc2VyIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RlbmFudDogQVhQVGVuYW50IHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGdldCB0ZW5hbnQoKTogQVhQVGVuYW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW5hbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXBwbGljYXRpb246IEFYUEFwcGxpY2F0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGdldCBhcHBsaWNhdGlvbigpOiBBWFBBcHBsaWNhdGlvbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb247XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDoge1xuICAgICAgICB1c2VyOiBBWFBVc2VyIHwgbnVsbCxcbiAgICAgICAgdGVuYW50OiBBWFBUZW5hbnQgfCBudWxsLFxuICAgICAgICBhcHBsaWNhdGlvbjogQVhQQXBwbGljYXRpb24gfCBudWxsLFxuICAgIH0pIHtcbiAgICAgICAgdGhpcy5fdXNlciA9IGNvbnRleHQudXNlcjtcbiAgICAgICAgdGhpcy5fdGVuYW50ID0gY29udGV4dC50ZW5hbnQ7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gY29udGV4dC5hcHBsaWNhdGlvbjtcbiAgICB9XG59XG5cblxuZXhwb3J0IGVudW0gQVhQU2Vzc2lvblN0YXR1cyB7XG4gICAgQXV0aGVudGljYXRlZCA9IFwiYXV0aGVudGljYXRlZFwiLFxuICAgIFVuYXV0aGVudGljYXRlZCA9IFwidW5hdXRoZW50aWNhdGVkXCIsXG4gICAgVW5hdXRob3JpemVkID0gXCJ1bmF1dGhvcml6ZWRcIixcbiAgICBBdXRob3JpemVkID0gXCJhdXRob3JpemVkXCIsXG4gICAgRXhwaXJlZCA9IFwiZXhwaXJlZFwiLFxuICAgIFNpZ25lZE91dCA9IFwic2lnbmVkT3V0XCJcbn0iXX0=","import { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { Injectable, inject } from '@angular/core';\nimport { isEmpty } from 'lodash-es';\nimport { BehaviorSubject, defaultIfEmpty, filter, firstValueFrom, map, shareReplay, switchMap } from 'rxjs';\nimport { AXP_APPLICATION_LOADER } from './application/application.loader';\nimport { AXPAuthStrategyRegistryService } from './auth-registry.service';\nimport { AXP_FEATURE_LOADER } from './feature';\nimport { AXP_PERMISSION_LOADER } from './permission/permission.loader';\nimport { AXPSessionContext, AXPSessionStatus } from './session.types';\nimport { AXP_TENANT_LOADER } from './tenant/tenant.loader';\nimport * as i0 from \"@angular/core\";\nexport class AXPSessionService {\n constructor() {\n this.eventService = inject(AXPBroadcastEventService);\n this.authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\n this.permissionLoader = inject(AXP_PERMISSION_LOADER);\n this.featureLoader = inject(AXP_FEATURE_LOADER);\n this.tenantLoader = inject(AXP_TENANT_LOADER);\n this.applicationLoader = inject(AXP_APPLICATION_LOADER);\n this.status = new BehaviorSubject(AXPSessionStatus.Unauthenticated);\n this.status$ = this.status.asObservable().pipe(shareReplay(1));\n // Add loading state to prevent premature redirects\n this.isLoading = new BehaviorSubject(true);\n this.isLoading$ = this.isLoading.asObservable().pipe(shareReplay(1));\n this.currentUserSubject = new BehaviorSubject(null);\n this.user$ = this.currentUserSubject.asObservable().pipe(shareReplay(1));\n this.currentTenantSubject = new BehaviorSubject(null);\n this.tenant$ = this.currentTenantSubject.asObservable().pipe(shareReplay(1));\n this.currentApplicationSubject = new BehaviorSubject(null);\n this.application$ = this.currentApplicationSubject.asObservable().pipe(shareReplay(1));\n this.permissionsSubject = new BehaviorSubject([]);\n this.permissions$ = this.permissionsSubject.asObservable().pipe(shareReplay(1), defaultIfEmpty([]));\n this.featuresSubject = new BehaviorSubject([]);\n this.features$ = this.featuresSubject.asObservable().pipe(shareReplay(1), defaultIfEmpty([]));\n this.isAuthenticated$ = this.status$.pipe(map((status) => {\n const isAuth = status === AXPSessionStatus.Authenticated || status === AXPSessionStatus.Authorized;\n return isAuth;\n }), shareReplay(1));\n // Add a new observable that considers loading state\n this.isAuthenticatedWithLoading$ = this.isLoading$.pipe(switchMap((loading) => {\n if (loading) {\n return this.isLoading$.pipe(filter((isLoading) => !isLoading), switchMap(() => this.isAuthenticated$));\n }\n return this.isAuthenticated$;\n }), shareReplay(1));\n this.isAuthorized$ = this.status$.pipe(map((status) => status === AXPSessionStatus.Authorized), shareReplay(1));\n }\n static { this.SESSION_KEY = 'AXP_SESSION'; }\n get user() {\n const session = this.getSessionData();\n if (session?.user && !this.currentUserSubject.value) {\n this.currentUserSubject.next(session.user);\n }\n return this.currentUserSubject.value;\n }\n get tenant() {\n const session = this.getSessionData();\n if (session?.tenant && !this.currentTenantSubject.value) {\n this.currentTenantSubject.next(session.tenant);\n }\n return this.currentTenantSubject.value;\n }\n get tenants$() {\n return this.tenantLoader.getList(this.getContext());\n }\n get application() {\n const session = this.getSessionData();\n if (session?.application && !this.currentApplicationSubject.value) {\n this.currentApplicationSubject.next(session.application);\n }\n return this.currentApplicationSubject.value;\n }\n get applications$() {\n return this.applicationLoader.getList(this.getContext());\n }\n get permissions() {\n return this.permissionsSubject.value ?? [];\n }\n get features() {\n return this.featuresSubject.value ?? [];\n }\n async restoreSession() {\n this.isLoading.next(true);\n try {\n const sessionData = this.getSessionData();\n if (sessionData) {\n if (sessionData.user) {\n this.currentUserSubject.next(sessionData.user);\n this.status.next(AXPSessionStatus.Authenticated);\n await this.loadPermissions();\n await this.loadFeatures();\n await this.signInComplete();\n }\n }\n else {\n this.status.next(AXPSessionStatus.Unauthorized);\n }\n }\n catch (error) {\n this.status.next(AXPSessionStatus.Unauthorized);\n }\n finally {\n this.isLoading.next(false);\n }\n }\n async signin(credentials) {\n this.isLoading.next(true);\n try {\n //\n // this.clearSession();\n //\n const strategy = this.authStrategyRegistry.get(credentials.strategy);\n if (!strategy) {\n throw new Error(`Authentication strategy '${credentials.strategy}' is not supported`);\n }\n const result = await strategy.signin(credentials);\n if (!result)\n return;\n if (result?.succeed) {\n this.currentUserSubject.next(result.data.user);\n this.setSession({\n accessToken: result.data.accessToken,\n refreshToken: result.data.refreshToken,\n strategy: credentials.strategy,\n user: result.data.user,\n application: result.data?.application,\n tenant: result.data?.tenant,\n expiresIn: result.data?.expiresIn,\n idToken: result.data?.idToken ?? null,\n });\n }\n else {\n this.status.next(AXPSessionStatus.Unauthenticated);\n throw new Error(`Invalid Username or Password`);\n }\n }\n catch (error) {\n console.error('Signin error:', error);\n this.status.next(AXPSessionStatus.Unauthenticated);\n throw error;\n }\n finally {\n this.isLoading.next(false);\n console.log('Signin process completed');\n }\n }\n async updateToken(params) {\n this.isLoading.next(true);\n try {\n const strategyName = this.getSessionData()?.strategy;\n if (!strategyName) {\n throw new Error('Strategy not found');\n }\n const strategy = this.authStrategyRegistry.get(strategyName);\n if (!strategy) {\n throw new Error(`Authentication strategy '${this.getSessionData()?.strategy}' is not supported`);\n }\n const result = await strategy.updateToken(params);\n if (result?.succeed) {\n this.currentUserSubject.next(result.data.user);\n this.setSession({\n accessToken: result.data.accessToken,\n refreshToken: result.data.refreshToken,\n strategy: strategyName,\n user: result.data.user,\n application: result.data?.application,\n tenant: result.data?.tenant,\n expiresIn: result.data?.expiresIn,\n idToken: result.data?.idToken ?? null,\n });\n this.status.next(AXPSessionStatus.Authenticated);\n // If we have both tenant and application, complete the sign-in\n if (this.application && this.tenant) {\n await this.restoreSession();\n }\n }\n else {\n this.status.next(AXPSessionStatus.Unauthenticated);\n throw new Error(`Invalid Username or Password`);\n }\n }\n catch (error) {\n console.error('Update token error:', error);\n throw error;\n }\n finally {\n this.isLoading.next(false);\n console.log('Update token process completed');\n }\n }\n async signout() {\n console.log('Signing out...');\n this.isLoading.next(true);\n try {\n const sessionData = this.getSessionData();\n if (sessionData?.strategy) {\n const strategy = this.authStrategyRegistry.get(sessionData?.strategy);\n if (strategy) {\n try {\n await strategy.signout();\n }\n catch (error) { }\n }\n }\n //\n const userId = this.user?.id;\n this.clearSession();\n this.eventService.publish(AXPSessionStatus.SignedOut, { id: userId });\n this.isLoading.next(false);\n this.status.next(AXPSessionStatus.SignedOut);\n }\n finally {\n this.isLoading.next(false);\n }\n }\n async refreshToken() {\n console.log('Refreshing token...');\n return new Promise(async (resolve, reject) => {\n const sessionData = this.getSessionData();\n if (!sessionData || !sessionData?.refreshToken) {\n console.log('No session data or refresh token found');\n reject(new Error('No refresh token available'));\n return;\n }\n const strategy = this.authStrategyRegistry.get(sessionData.strategy);\n if (!strategy) {\n console.error('Authentication strategy not found:', sessionData.strategy);\n reject(new Error(`Authentication strategy '${sessionData.strategy}' is not found`));\n return;\n }\n try {\n const result = await strategy.refreshToken(this.getContext());\n if (result.succeed) {\n console.log('Token refresh successful');\n this.setSession(result.data);\n resolve(result.data?.accessToken);\n }\n else {\n console.error('Token refresh failed');\n this.clearSession();\n this.status.next(AXPSessionStatus.Expired);\n reject(new Error('Token refresh failed'));\n }\n }\n catch (error) {\n console.error('Error during token refresh:', error);\n this.clearSession();\n this.status.next(AXPSessionStatus.Expired);\n reject(error);\n }\n });\n }\n async loadPermissions() {\n try {\n const permissions = await firstValueFrom(this.permissionLoader.getList(this.getContext()));\n this.permissionsSubject.next(permissions ?? []);\n }\n catch (error) {\n console.error('Error loading permissions:', error);\n this.permissionsSubject.next([]);\n }\n }\n async loadFeatures() {\n try {\n const features = await firstValueFrom(this.featureLoader.getList(this.getContext()));\n this.featuresSubject.next(features ?? []);\n }\n catch (error) {\n console.error('Error loading features:', error);\n this.featuresSubject.next([]);\n }\n }\n async signInComplete() {\n // Ensure we have the required data\n if (!this.user) {\n this.status.next(AXPSessionStatus.Unauthenticated);\n return;\n }\n // Set status to Authorized\n this.status.next(AXPSessionStatus.Authorized);\n // Double-check the status was set correctly\n setTimeout(() => {\n console.log('Status after timeout:', this.status.value);\n }, 100);\n }\n setSession(tokens) {\n const sessionData = {\n accessToken: tokens.accessToken,\n refreshToken: tokens.refreshToken,\n strategy: tokens.strategy,\n user: tokens.user,\n application: tokens.application,\n tenant: tokens.tenant,\n expiresIn: tokens.expiresIn,\n idToken: tokens.idToken,\n };\n // Update subjects\n if (tokens.user) {\n this.currentUserSubject.next(tokens.user);\n }\n if (tokens.tenant) {\n this.currentTenantSubject.next(tokens.tenant);\n }\n if (tokens.application) {\n this.currentApplicationSubject.next(tokens.application);\n }\n localStorage.setItem(AXPSessionService.SESSION_KEY, JSON.stringify(sessionData));\n }\n setStrategy(strategy) {\n const sessionData = this.getSessionData();\n const newSessionData = { ...sessionData, strategy };\n this.setSession(newSessionData);\n }\n getSessionData() {\n try {\n const sessionDataString = localStorage.getItem(AXPSessionService.SESSION_KEY);\n if (sessionDataString) {\n const sessionData = JSON.parse(sessionDataString);\n return sessionData;\n }\n else {\n return null;\n }\n }\n catch (error) {\n localStorage.removeItem(AXPSessionService.SESSION_KEY);\n return null;\n }\n }\n clearSession() {\n //\n this.currentUserSubject.next(null);\n //\n this.currentTenantSubject.next(null);\n //\n this.currentApplicationSubject.next(null);\n //\n this.permissionsSubject.next([]);\n //\n this.featuresSubject.next([]);\n //\n localStorage.removeItem(AXPSessionService.SESSION_KEY);\n }\n authorize(...keys) {\n return keys.every((k) => isEmpty(k) || this.permissions.indexOf(k) > -1 || this.user?.name == 'root');\n }\n isFeatureEnabled(...keys) {\n return keys.every((k) => isEmpty(k) || this.features.some((c) => c.name == k && c.value == true));\n }\n getToken() {\n const sessionData = this.getSessionData();\n return sessionData?.accessToken;\n }\n checkTokenValidation() {\n let sessionData = this.getSessionData();\n if (sessionData && sessionData?.accessToken && sessionData.expiresIn) {\n const expiresInDate = new Date(sessionData.expiresIn);\n if (expiresInDate > new Date()) {\n // Token is still valid\n return true;\n }\n }\n return false;\n }\n getContext() {\n return new AXPSessionContext({\n user: this.user,\n tenant: this.tenant,\n application: this.application,\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPSessionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPSessionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPSessionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9hdXRoL3NyYy9saWIvc2Vzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBYyxjQUFjLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RSxPQUFPLEVBQWMsa0JBQWtCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBTzNELE1BQU0sT0FBTyxpQkFBaUI7SUFIOUI7UUFJVSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRWhELHlCQUFvQixHQUFHLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBR3JELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2pELGtCQUFhLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0MsaUJBQVksR0FBRyxN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QUFJLENBQUMsSUFBSTtZQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDOUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F4WVUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEJyb2FkY2FzdEV2ZW50U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBkZWZhdWx0SWZFbXB0eSwgZmlsdGVyLCBmaXJzdFZhbHVlRnJvbSwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBfQVBQTElDQVRJT05fTE9BREVSIH0gZnJvbSAnLi9hcHBsaWNhdGlvbi9hcHBsaWNhdGlvbi5sb2FkZXInO1xuaW1wb3J0IHsgQVhQQXBwbGljYXRpb24gfSBmcm9tICcuL2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUEF1dGhTdHJhdGVneVJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4vYXV0aC1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUEJhc2VDcmVkZW50aWFscywgQVhQU2Vzc2lvbkRhdGEgfSBmcm9tICcuL2F1dGguc3RyYXRlZ3knO1xuaW1wb3J0IHsgQVhQRmVhdHVyZSwgQVhQX0ZFQVRVUkVfTE9BREVSIH0gZnJvbSAnLi9mZWF0dXJlJztcbmltcG9ydCB7IEFYUF9QRVJNSVNTSU9OX0xPQURFUiB9IGZyb20gJy4vcGVybWlzc2lvbi9wZXJtaXNzaW9uLmxvYWRlcic7XG5pbXBvcnQgeyBBWFBQZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9uL3Blcm1pc3Npb24udHlwZXMnO1xuaW1wb3J0IHsgQVhQU2Vzc2lvbkNvbnRleHQsIEFYUFNlc3Npb25TdGF0dXMgfSBmcm9tICcuL3Nlc3Npb24udHlwZXMnO1xuaW1wb3J0IHsgQVhQX1RFTkFOVF9MT0FERVIgfSBmcm9tICcuL3RlbmFudC90ZW5hbnQubG9hZGVyJztcbmltcG9ydCB7IEFYUFRlbmFudCB9IGZyb20gJy4vdGVuYW50L3RlbmFudC50eXBlcyc7XG5pbXBvcnQgeyBBWFBVc2VyIH0gZnJvbSAnLi91c2VyL3VzZXIudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQU2Vzc2lvblNlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U2VydmljZSA9IGluamVjdChBWFBCcm9hZGNhc3RFdmVudFNlcnZpY2UpO1xuXG4gIHByaXZhdGUgYXV0aFN0cmF0ZWd5UmVnaXN0cnkgPSBpbmplY3QoQVhQQXV0aFN0cmF0ZWd5UmVnaXN0cnlTZXJ2aWNlKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVNTSU9OX0tFWSA9ICdBWFBfU0VTU0lPTic7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uTG9hZGVyID0gaW5qZWN0KEFYUF9QRVJNSVNTSU9OX0xPQURFUik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmVhdHVyZUxvYWRlciA9IGluamVjdChBWFBfRkVBVFVSRV9MT0FERVIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRlbmFudExvYWRlciA9IGluamVjdChBWFBfVEVOQU5UX0xPQURFUik7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwbGljYXRpb25Mb2FkZXIgPSBpbmplY3QoQVhQX0FQUExJQ0FUSU9OX0xPQURFUik7XG5cbiAgcHJpdmF0ZSBzdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFYUFNlc3Npb25TdGF0dXM+KEFYUFNlc3Npb25TdGF0dXMuVW5hdXRoZW50aWNhdGVkKTtcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyQgPSB0aGlzLnN0YXR1cy5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcblxuICAvLyBBZGQgbG9hZGluZyBzdGF0ZSB0byBwcmV2ZW50IHByZW1hdHVyZSByZWRpcmVjdHNcbiAgcHJpdmF0ZSBpc0xvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNMb2FkaW5nJCA9IHRoaXMuaXNMb2FkaW5nLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHByaXZhdGUgY3VycmVudFVzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBWFBVc2VyIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyJCA9IHRoaXMuY3VycmVudFVzZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICBwdWJsaWMgZ2V0IHVzZXIoKTogQVhQVXNlciB8IG51bGwge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb25EYXRhKCk7XG4gICAgaWYgKHNlc3Npb24/LnVzZXIgJiYgIXRoaXMuY3VycmVudFVzZXJTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRVc2VyU3ViamVjdC5uZXh0KHNlc3Npb24udXNlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY3VycmVudFRlbmFudFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFYUFRlbmFudCB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGVuYW50JCA9IHRoaXMuY3VycmVudFRlbmFudFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIHB1YmxpYyBnZXQgdGVuYW50KCk6IEFYUFRlbmFudCB8IG51bGwge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb25EYXRhKCk7XG4gICAgaWYgKHNlc3Npb24/LnRlbmFudCAmJiAhdGhpcy5jdXJyZW50VGVuYW50U3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy5jdXJyZW50VGVuYW50U3ViamVjdC5uZXh0KHNlc3Npb24udGVuYW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFRlbmFudFN1YmplY3QudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRlbmFudHMkKCk6IE9ic2VydmFibGU8QVhQVGVuYW50W10+IHtcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRMb2FkZXIuZ2V0TGlzdCh0aGlzLmdldENvbnRleHQoKSk7XG4gIH1cblxuICBwcml2YXRlIGN1cnJlbnRBcHBsaWNhdGlvblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFYUEFwcGxpY2F0aW9uIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBhcHBsaWNhdGlvbiQgPSB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIHB1YmxpYyBnZXQgYXBwbGljYXRpb24oKTogQVhQQXBwbGljYXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uRGF0YSgpO1xuICAgIGlmIChzZXNzaW9uPy5hcHBsaWNhdGlvbiAmJiAhdGhpcy5jdXJyZW50QXBwbGljYXRpb25TdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvblN1YmplY3QubmV4dChzZXNzaW9uLmFwcGxpY2F0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEFwcGxpY2F0aW9uU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXBwbGljYXRpb25zJCgpOiBPYnNlcnZhYmxlPEFYUEFwcGxpY2F0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbkxvYWRlci5nZXRMaXN0KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGVybWlzc2lvbnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBWFBQZXJtaXNzaW9uW10+KFtdKTtcbiAgcHVibGljIHJlYWRvbmx5IHBlcm1pc3Npb25zJCA9IHRoaXMucGVybWlzc2lvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoMSksIGRlZmF1bHRJZkVtcHR5KFtdKSk7XG4gIHB1YmxpYyBnZXQgcGVybWlzc2lvbnMoKTogQVhQUGVybWlzc2lvbltdIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1N1YmplY3QudmFsdWUgPz8gW107XG4gIH1cblxuICBwcml2YXRlIGZlYXR1cmVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QVhQRmVhdHVyZVtdPihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBmZWF0dXJlcyQgPSB0aGlzLmZlYXR1cmVzU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpLCBkZWZhdWx0SWZFbXB0eShbXSkpO1xuICBwdWJsaWMgZ2V0IGZlYXR1cmVzKCk6IEFYUEZlYXR1cmVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmVhdHVyZXNTdWJqZWN0LnZhbHVlID8/IFtdO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLnN0YXR1cyQucGlwZShcbiAgICBtYXAoKHN0YXR1cykgPT4ge1xuICAgICAgY29uc3QgaXNBdXRoID0gc3RhdHVzID09PSBBWFBTZXNzaW9uU3RhdHVzLkF1dGhlbnRpY2F0ZWQgfHwgc3RhdHVzID09PSBBWFBTZXNzaW9uU3RhdHVzLkF1dGhvcml6ZWQ7XG4gICAgICByZXR1cm4gaXNBdXRoO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpLFxuICApO1xuXG4gIC8vIEFkZCBhIG5ldyBvYnNlcnZhYmxlIHRoYXQgY29uc2lkZXJzIGxvYWRpbmcgc3RhdGVcbiAgcHVibGljIHJlYWRvbmx5IGlzQXV0aGVudGljYXRlZFdpdGhMb2FkaW5nJCA9IHRoaXMuaXNMb2FkaW5nJC5waXBlKFxuICAgIHN3aXRjaE1hcCgobG9hZGluZykgPT4ge1xuICAgICAgaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nJC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoaXNMb2FkaW5nKSA9PiAhaXNMb2FkaW5nKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQkKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCQ7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSksXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzQXV0aG9yaXplZCQgPSB0aGlzLnN0YXR1cyQucGlwZShcbiAgICBtYXAoKHN0YXR1cykgPT4gc3RhdHVzID09PSBBWFBTZXNzaW9uU3RhdHVzLkF1dGhvcml6ZWQpLFxuICAgIHNoYXJlUmVwbGF5KDEpLFxuICApO1xuXG4gIHB1YmxpYyBhc3luYyByZXN0b3JlU2Vzc2lvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzTG9hZGluZy5uZXh0KHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gdGhpcy5nZXRTZXNzaW9uRGF0YSgpO1xuICAgICAgaWYgKHNlc3Npb25EYXRhKSB7XG4gICAgICAgIGlmIChzZXNzaW9uRGF0YS51c2VyKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VXNlclN1YmplY3QubmV4dChzZXNzaW9uRGF0YS51c2VyKTtcbiAgICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuQXV0aGVudGljYXRlZCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGVybWlzc2lvbnMoKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRGZWF0dXJlcygpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2lnbkluQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dChBWFBTZXNzaW9uU3RhdHVzLlVuYXV0aG9yaXplZCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc3RhdHVzLm5leHQoQVhQU2Vzc2lvblN0YXR1cy5VbmF1dGhvcml6ZWQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZy5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzaWduaW4oY3JlZGVudGlhbHM6IEFYUEJhc2VDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNMb2FkaW5nLm5leHQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vXG4gICAgICAvLyB0aGlzLmNsZWFyU2Vzc2lvbigpO1xuICAgICAgLy9cbiAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5hdXRoU3RyYXRlZ3lSZWdpc3RyeS5nZXQoY3JlZGVudGlhbHMuc3RyYXRlZ3kpO1xuICAgICAgaWYgKCFzdHJhdGVneSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5ICcke2NyZWRlbnRpYWxzLnN0cmF0ZWd5fScgaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyYXRlZ3kuc2lnbmluKGNyZWRlbnRpYWxzKTtcbiAgICAgIGlmICghcmVzdWx0KSByZXR1cm47XG4gICAgICBpZiAocmVzdWx0Py5zdWNjZWVkKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFVzZXJTdWJqZWN0Lm5leHQocmVzdWx0LmRhdGEhLnVzZXIpO1xuICAgICAgICB0aGlzLnNldFNlc3Npb24oe1xuICAgICAgICAgIGFjY2Vzc1Rva2VuOiByZXN1bHQuZGF0YSEuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgcmVmcmVzaFRva2VuOiByZXN1bHQuZGF0YSEucmVmcmVzaFRva2VuLFxuICAgICAgICAgIHN0cmF0ZWd5OiBjcmVkZW50aWFscy5zdHJhdGVneSxcbiAgICAgICAgICB1c2VyOiByZXN1bHQuZGF0YSEudXNlcixcbiAgICAgICAgICBhcHBsaWNhdGlvbjogcmVzdWx0LmRhdGE/LmFwcGxpY2F0aW9uLFxuICAgICAgICAgIHRlbmFudDogcmVzdWx0LmRhdGE/LnRlbmFudCxcbiAgICAgICAgICBleHBpcmVzSW46IHJlc3VsdC5kYXRhPy5leHBpcmVzSW4sXG4gICAgICAgICAgaWRUb2tlbjogcmVzdWx0LmRhdGE/LmlkVG9rZW4gPz8gbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuVW5hdXRoZW50aWNhdGVkKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVzZXJuYW1lIG9yIFBhc3N3b3JkYCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1NpZ25pbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuVW5hdXRoZW50aWNhdGVkKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZy5uZXh0KGZhbHNlKTtcbiAgICAgIGNvbnNvbGUubG9nKCdTaWduaW4gcHJvY2VzcyBjb21wbGV0ZWQnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVUb2tlbihwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc0xvYWRpbmcubmV4dCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyYXRlZ3lOYW1lID0gdGhpcy5nZXRTZXNzaW9uRGF0YSgpPy5zdHJhdGVneSE7XG4gICAgICBpZiAoIXN0cmF0ZWd5TmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmF0ZWd5IG5vdCBmb3VuZCcpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLmF1dGhTdHJhdGVneVJlZ2lzdHJ5LmdldChzdHJhdGVneU5hbWUpO1xuICAgICAgaWYgKCFzdHJhdGVneSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5ICcke3RoaXMuZ2V0U2Vzc2lvbkRhdGEoKT8uc3RyYXRlZ3l9JyBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJhdGVneS51cGRhdGVUb2tlbihwYXJhbXMpO1xuICAgICAgaWYgKHJlc3VsdD8uc3VjY2VlZCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRVc2VyU3ViamVjdC5uZXh0KHJlc3VsdC5kYXRhIS51c2VyKTtcbiAgICAgICAgdGhpcy5zZXRTZXNzaW9uKHtcbiAgICAgICAgICBhY2Nlc3NUb2tlbjogcmVzdWx0LmRhdGEhLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogcmVzdWx0LmRhdGEhLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBzdHJhdGVneTogc3RyYXRlZ3lOYW1lLFxuICAgICAgICAgIHVzZXI6IHJlc3VsdC5kYXRhIS51c2VyLFxuICAgICAgICAgIGFwcGxpY2F0aW9uOiByZXN1bHQuZGF0YT8uYXBwbGljYXRpb24sXG4gICAgICAgICAgdGVuYW50OiByZXN1bHQuZGF0YT8udGVuYW50LFxuICAgICAgICAgIGV4cGlyZXNJbjogcmVzdWx0LmRhdGE/LmV4cGlyZXNJbixcbiAgICAgICAgICBpZFRva2VuOiByZXN1bHQuZGF0YT8uaWRUb2tlbiA/PyBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dChBWFBTZXNzaW9uU3RhdHVzLkF1dGhlbnRpY2F0ZWQpO1xuXG4gICAgICAgIC8vIElmIHdlIGhhdmUgYm90aCB0ZW5hbnQgYW5kIGFwcGxpY2F0aW9uLCBjb21wbGV0ZSB0aGUgc2lnbi1pblxuICAgICAgICBpZiAodGhpcy5hcHBsaWNhdGlvbiAmJiB0aGlzLnRlbmFudCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVzdG9yZVNlc3Npb24oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dChBWFBTZXNzaW9uU3RhdHVzLlVuYXV0aGVudGljYXRlZCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVc2VybmFtZSBvciBQYXNzd29yZGApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVcGRhdGUgdG9rZW4gZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgY29uc29sZS5sb2coJ1VwZGF0ZSB0b2tlbiBwcm9jZXNzIGNvbXBsZXRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNpZ25vdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coJ1NpZ25pbmcgb3V0Li4uJyk7XG4gICAgdGhpcy5pc0xvYWRpbmcubmV4dCh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IHRoaXMuZ2V0U2Vzc2lvbkRhdGEoKTtcblxuICAgICAgaWYgKHNlc3Npb25EYXRhPy5zdHJhdGVneSkge1xuICAgICAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuYXV0aFN0cmF0ZWd5UmVnaXN0cnkuZ2V0KHNlc3Npb25EYXRhPy5zdHJhdGVneSk7XG4gICAgICAgIGlmIChzdHJhdGVneSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBzdHJhdGVneS5zaWdub3V0KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL1xuXG4gICAgICBjb25zdCB1c2VySWQgPSB0aGlzLnVzZXI/LmlkO1xuICAgICAgdGhpcy5jbGVhclNlc3Npb24oKTtcbiAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnB1Ymxpc2goQVhQU2Vzc2lvblN0YXR1cy5TaWduZWRPdXQsIHsgaWQ6IHVzZXJJZCB9KTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5zdGF0dXMubmV4dChBWFBTZXNzaW9uU3RhdHVzLlNpZ25lZE91dCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hUb2tlbigpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnNvbGUubG9nKCdSZWZyZXNoaW5nIHRva2VuLi4uJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gdGhpcy5nZXRTZXNzaW9uRGF0YSgpO1xuICAgICAgaWYgKCFzZXNzaW9uRGF0YSB8fCAhc2Vzc2lvbkRhdGE/LnJlZnJlc2hUb2tlbikge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gc2Vzc2lvbiBkYXRhIG9yIHJlZnJlc2ggdG9rZW4gZm91bmQnKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTm8gcmVmcmVzaCB0b2tlbiBhdmFpbGFibGUnKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5hdXRoU3RyYXRlZ3lSZWdpc3RyeS5nZXQoc2Vzc2lvbkRhdGEuc3RyYXRlZ3kpO1xuICAgICAgaWYgKCFzdHJhdGVneSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBdXRoZW50aWNhdGlvbiBzdHJhdGVneSBub3QgZm91bmQ6Jywgc2Vzc2lvbkRhdGEuc3RyYXRlZ3kpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBBdXRoZW50aWNhdGlvbiBzdHJhdGVneSAnJHtzZXNzaW9uRGF0YS5zdHJhdGVneX0nIGlzIG5vdCBmb3VuZGApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyYXRlZ3kucmVmcmVzaFRva2VuKHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZWVkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1Rva2VuIHJlZnJlc2ggc3VjY2Vzc2Z1bCcpO1xuICAgICAgICAgIHRoaXMuc2V0U2Vzc2lvbihyZXN1bHQuZGF0YSBhcyBBWFBTZXNzaW9uRGF0YSk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YT8uYWNjZXNzVG9rZW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Rva2VuIHJlZnJlc2ggZmFpbGVkJyk7XG4gICAgICAgICAgdGhpcy5jbGVhclNlc3Npb24oKTtcbiAgICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuRXhwaXJlZCk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVG9rZW4gcmVmcmVzaCBmYWlsZWQnKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyB0b2tlbiByZWZyZXNoOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5jbGVhclNlc3Npb24oKTtcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dChBWFBTZXNzaW9uU3RhdHVzLkV4cGlyZWQpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUGVybWlzc2lvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5wZXJtaXNzaW9uTG9hZGVyLmdldExpc3QodGhpcy5nZXRDb250ZXh0KCkpKTtcbiAgICAgIHRoaXMucGVybWlzc2lvbnNTdWJqZWN0Lm5leHQocGVybWlzc2lvbnMgPz8gW10pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHBlcm1pc3Npb25zOicsIGVycm9yKTtcbiAgICAgIHRoaXMucGVybWlzc2lvbnNTdWJqZWN0Lm5leHQoW10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZlYXR1cmVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZmVhdHVyZUxvYWRlci5nZXRMaXN0KHRoaXMuZ2V0Q29udGV4dCgpKSk7XG4gICAgICB0aGlzLmZlYXR1cmVzU3ViamVjdC5uZXh0KGZlYXR1cmVzID8/IFtdKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmZWF0dXJlczonLCBlcnJvcik7XG4gICAgICB0aGlzLmZlYXR1cmVzU3ViamVjdC5uZXh0KFtdKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzaWduSW5Db21wbGV0ZSgpIHtcbiAgICAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmVxdWlyZWQgZGF0YVxuICAgIGlmICghdGhpcy51c2VyKSB7XG4gICAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuVW5hdXRoZW50aWNhdGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZXQgc3RhdHVzIHRvIEF1dGhvcml6ZWRcbiAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuQXV0aG9yaXplZCk7XG5cbiAgICAvLyBEb3VibGUtY2hlY2sgdGhlIHN0YXR1cyB3YXMgc2V0IGNvcnJlY3RseVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1N0YXR1cyBhZnRlciB0aW1lb3V0OicsIHRoaXMuc3RhdHVzLnZhbHVlKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHVibGljIHNldFNlc3Npb24odG9rZW5zOiBQYXJ0aWFsPEFYUFNlc3Npb25EYXRhPik6IHZvaWQge1xuICAgIGNvbnN0IHNlc3Npb25EYXRhOiBQYXJ0aWFsPEFYUFNlc3Npb25EYXRhPiA9IHtcbiAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbnMuYWNjZXNzVG9rZW4sXG4gICAgICByZWZyZXNoVG9rZW46IHRva2Vucy5yZWZyZXNoVG9rZW4sXG4gICAgICBzdHJhdGVneTogdG9rZW5zLnN0cmF0ZWd5LFxuICAgICAgdXNlcjogdG9rZW5zLnVzZXIsXG4gICAgICBhcHBsaWNhdGlvbjogdG9rZW5zLmFwcGxpY2F0aW9uLFxuICAgICAgdGVuYW50OiB0b2tlbnMudGVuYW50LFxuICAgICAgZXhwaXJlc0luOiB0b2tlbnMuZXhwaXJlc0luLFxuICAgICAgaWRUb2tlbjogdG9rZW5zLmlkVG9rZW4sXG4gICAgfTtcbiAgICAvLyBVcGRhdGUgc3ViamVjdHNcbiAgICBpZiAodG9rZW5zLnVzZXIpIHtcbiAgICAgIHRoaXMuY3VycmVudFVzZXJTdWJqZWN0Lm5leHQodG9rZW5zLnVzZXIpO1xuICAgIH1cbiAgICBpZiAodG9rZW5zLnRlbmFudCkge1xuICAgICAgdGhpcy5jdXJyZW50VGVuYW50U3ViamVjdC5uZXh0KHRva2Vucy50ZW5hbnQpO1xuICAgIH1cbiAgICBpZiAodG9rZW5zLmFwcGxpY2F0aW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvblN1YmplY3QubmV4dCh0b2tlbnMuYXBwbGljYXRpb24pO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShBWFBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0tFWSwgSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkRhdGEpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHJhdGVneShzdHJhdGVneTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSB0aGlzLmdldFNlc3Npb25EYXRhKCk7XG4gICAgY29uc3QgbmV3U2Vzc2lvbkRhdGEgPSB7IC4uLnNlc3Npb25EYXRhLCBzdHJhdGVneSB9O1xuICAgIHRoaXMuc2V0U2Vzc2lvbihuZXdTZXNzaW9uRGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2Vzc2lvbkRhdGEoKTogQVhQU2Vzc2lvbkRhdGEgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2Vzc2lvbkRhdGFTdHJpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShBWFBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0tFWSk7XG4gICAgICBpZiAoc2Vzc2lvbkRhdGFTdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25EYXRhU3RyaW5nKTtcblxuICAgICAgICByZXR1cm4gc2Vzc2lvbkRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oQVhQU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9LRVkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNlc3Npb24oKTogdm9pZCB7XG4gICAgLy9cbiAgICB0aGlzLmN1cnJlbnRVc2VyU3ViamVjdC5uZXh0KG51bGwpO1xuICAgIC8vXG4gICAgdGhpcy5jdXJyZW50VGVuYW50U3ViamVjdC5uZXh0KG51bGwpO1xuICAgIC8vXG4gICAgdGhpcy5jdXJyZW50QXBwbGljYXRpb25TdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgLy9cbiAgICB0aGlzLnBlcm1pc3Npb25zU3ViamVjdC5uZXh0KFtdKTtcbiAgICAvL1xuICAgIHRoaXMuZmVhdHVyZXNTdWJqZWN0Lm5leHQoW10pO1xuICAgIC8vXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oQVhQU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9LRVkpO1xuICB9XG5cbiAgcHVibGljIGF1dGhvcml6ZSguLi5rZXlzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBrZXlzLmV2ZXJ5KChrKSA9PiBpc0VtcHR5KGspIHx8IHRoaXMucGVybWlzc2lvbnMuaW5kZXhPZihrKSA+IC0xIHx8IHRoaXMudXNlcj8ubmFtZSA9PSAncm9vdCcpO1xuICB9XG5cbiAgcHVibGljIGlzRmVhdHVyZUVuYWJsZWQoLi4ua2V5czogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4ga2V5cy5ldmVyeSgoaykgPT4gaXNFbXB0eShrKSB8fCB0aGlzLmZlYXR1cmVzLnNvbWUoKGMpID0+IGMubmFtZSA9PSBrICYmIGMudmFsdWUgPT0gdHJ1ZSkpO1xuICB9XG5cbiAgcHVibGljIGdldFRva2VuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSB0aGlzLmdldFNlc3Npb25EYXRhKCk7XG5cbiAgICByZXR1cm4gc2Vzc2lvbkRhdGE/LmFjY2Vzc1Rva2VuO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1Rva2VuVmFsaWRhdGlvbigpOiBib29sZWFuIHtcbiAgICBsZXQgc2Vzc2lvbkRhdGEgPSB0aGlzLmdldFNlc3Npb25EYXRhKCk7XG5cbiAgICBpZiAoc2Vzc2lvbkRhdGEgJiYgc2Vzc2lvbkRhdGE/LmFjY2Vzc1Rva2VuICYmIHNlc3Npb25EYXRhLmV4cGlyZXNJbikge1xuICAgICAgY29uc3QgZXhwaXJlc0luRGF0ZSA9IG5ldyBEYXRlKHNlc3Npb25EYXRhLmV4cGlyZXNJbik7XG4gICAgICBpZiAoZXhwaXJlc0luRGF0ZSA+IG5ldyBEYXRlKCkpIHtcbiAgICAgICAgLy8gVG9rZW4gaXMgc3RpbGwgdmFsaWRcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZXh0KCk6IEFYUFNlc3Npb25Db250ZXh0IHtcbiAgICByZXR1cm4gbmV3IEFYUFNlc3Npb25Db250ZXh0KHtcbiAgICAgIHVzZXI6IHRoaXMudXNlcixcbiAgICAgIHRlbmFudDogdGhpcy50ZW5hbnQsXG4gICAgICBhcHBsaWNhdGlvbjogdGhpcy5hcHBsaWNhdGlvbixcbiAgICB9KTtcbiAgfVxufVxuIl19","import { Directive, Input, TemplateRef, ViewContainerRef, inject, signal } from '@angular/core';\nimport { AXPSessionService } from '../session.service';\nimport * as i0 from \"@angular/core\";\nexport class AXPPermissionDirective {\n constructor(templateRef, viewContainer) {\n this.templateRef = templateRef;\n this.viewContainer = viewContainer;\n this.hasView = signal(false, ...(ngDevMode ? [{ debugName: \"hasView\" }] : []));\n this.sessionService = inject(AXPSessionService);\n }\n set permission(permissionKeys) {\n const keys = !permissionKeys ? [] : (Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys]);\n if (keys.length == 0) {\n // If permissionKey is null or empty, decide the default behavior here\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n return;\n }\n this.subscription = this.sessionService.isAuthorized$\n .subscribe((isAuthorized) => {\n if (isAuthorized && this.sessionService.authorize(...keys)) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n }\n }\n else {\n this.viewContainer.clear();\n this.hasView.set(false);\n }\n });\n }\n set permissionElse(elseTemplateRef) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(elseTemplateRef);\n }\n }\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPPermissionDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.10\", type: AXPPermissionDirective, isStandalone: false, selector: \"[permission]\", inputs: { permission: \"permission\", permissionElse: \"permissionElse\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPPermissionDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[permission]',\n standalone: false\n }]\n }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }], propDecorators: { permission: [{\n type: Input\n }], permissionElse: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9wZXJtaXNzaW9uL3Blcm1pc3Npb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQU12RCxNQUFNLE9BQU8sc0JBQXNCO0lBS2pDLFlBQ1UsV0FBNkIsRUFDN0IsYUFBK0I7UUFEL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQU5qQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssbURBQUMsQ0FBQztRQUV4QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBSy9DLENBQUM7SUFFTCxJQUNXLFVBQVUsQ0FBQyxjQUF3QztRQUM1RCxNQUFNLElBQUksR0FBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2xILElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQixzRUFBc0U7WUFDdEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYTthQUNsRCxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUMxQixJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxJQUNXLGNBQWMsQ0FBQyxlQUFpQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7K0dBMUNVLHNCQUFzQjttR0FBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsS0FBSztpQkFDcEI7O3NCQVdFLEtBQUs7O3NCQXVCTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpcnN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Nlc3Npb24uc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3Blcm1pc3Npb25dJyxcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBBWFBQZXJtaXNzaW9uRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBoYXNWaWV3ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXG4gICkgeyB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwZXJtaXNzaW9uKHBlcm1pc3Npb25LZXlzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwpIHtcbiAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9ICFwZXJtaXNzaW9uS2V5cyA/IFtdIDogKEFycmF5LmlzQXJyYXkocGVybWlzc2lvbktleXMpID8gcGVybWlzc2lvbktleXMgOiBbcGVybWlzc2lvbktleXNdKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkge1xuICAgICAgLy8gSWYgcGVybWlzc2lvbktleSBpcyBudWxsIG9yIGVtcHR5LCBkZWNpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaGVyZVxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmKTtcbiAgICAgIHRoaXMuaGFzVmlldy5zZXQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5zZXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQkXG4gICAgICAuc3Vic2NyaWJlKChpc0F1dGhvcml6ZWQpID0+IHtcbiAgICAgICAgaWYgKGlzQXV0aG9yaXplZCAmJiB0aGlzLnNlc3Npb25TZXJ2aWNlLmF1dGhvcml6ZSguLi5rZXlzKSkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXNWaWV3KCkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XG4gICAgICAgICAgICB0aGlzLmhhc1ZpZXcuc2V0KHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLmhhc1ZpZXcuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHBlcm1pc3Npb25FbHNlKGVsc2VUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICghdGhpcy5oYXNWaWV3KCkpIHtcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZWxzZVRlbXBsYXRlUmVmKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19","import { inject } from '@angular/core';\nimport { first, map } from 'rxjs';\nimport { AXPUnauthorizedError } from '../errors.types';\nimport { AXPSessionService } from '../session.service';\nexport const AXPPermissionGuard = (route, state) => {\n const sessionService = inject(AXPSessionService);\n const permissionKeys = route.data['requiredPermission'];\n return sessionService.isAuthorized$.pipe(first(), map((value) => {\n const keys = !permissionKeys ? [] : Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys];\n const hasPermission = keys.length == 0 || sessionService.authorize(...keys);\n if (!hasPermission) {\n throw new AXPUnauthorizedError(`Access denied. Required permissions: ${keys.join(', ')}. Please contact your administrator if you believe this is an error.`, {\n redirectUrl: state.url\n });\n }\n return true;\n }));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL3Blcm1pc3Npb24vcGVybWlzc2lvbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFPLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFrQixDQUFDLEtBQTZCLEVBQUUsS0FBMEIsRUFBRSxFQUFFO0lBRTdHLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWpELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQTZCLENBQUM7SUFFcEYsT0FBTyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDdEMsS0FBSyxFQUFFLEVBQ1AsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDWixNQUFNLElBQUksR0FBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEgsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksb0JBQW9CLENBQzVCLHdDQUF3QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzRUFBc0UsRUFDN0g7Z0JBQ0UsV0FBVyxFQUFFLEtBQUssQ0FBQyxHQUFHO2FBQ3ZCLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlRm4sIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBVbmF1dGhvcml6ZWRFcnJvciB9IGZyb20gJy4uL2Vycm9ycy50eXBlcyc7XG5pbXBvcnQgeyBBWFBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Nlc3Npb24uc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBBWFBQZXJtaXNzaW9uR3VhcmQ6IENhbkFjdGl2YXRlRm4gPSAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSA9PiB7XG5cbiAgY29uc3Qgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuXG4gIGNvbnN0IHBlcm1pc3Npb25LZXlzID0gcm91dGUuZGF0YVsncmVxdWlyZWRQZXJtaXNzaW9uJ10gYXMgc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuXG4gIHJldHVybiBzZXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQkLnBpcGUoXG4gICAgZmlyc3QoKSxcbiAgICBtYXAoKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9ICFwZXJtaXNzaW9uS2V5cyA/IFtdIDogQXJyYXkuaXNBcnJheShwZXJtaXNzaW9uS2V5cykgPyBwZXJtaXNzaW9uS2V5cyA6IFtwZXJtaXNzaW9uS2V5c107XG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0ga2V5cy5sZW5ndGggPT0gMCB8fCBzZXNzaW9uU2VydmljZS5hdXRob3JpemUoLi4ua2V5cyk7XG4gICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEFYUFVuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgIGBBY2Nlc3MgZGVuaWVkLiBSZXF1aXJlZCBwZXJtaXNzaW9uczogJHtrZXlzLmpvaW4oJywgJyl9LiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IgaWYgeW91IGJlbGlldmUgdGhpcyBpcyBhbiBlcnJvci5gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXJsOiBzdGF0ZS51cmxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICApO1xufTtcbiJdfQ==","export class AXPPermissionDefinitionProviderContext {\n constructor() {\n this.builders = new Map();\n }\n addGroup(name, title, description) {\n if (this.isGroupDefined(name)) {\n return this.findGroup(name);\n }\n const group = {\n name,\n title,\n description,\n permissions: []\n };\n const builder = new AXPPermissionDefinitionGroupBuilder(this, group);\n this.builders.set(name, builder);\n return builder;\n }\n getGroupDefinitions() {\n return Array.from(this.builders.values()).map(b => b.group);\n }\n findGroup(name) {\n return this.builders.get(name);\n }\n isGroupDefined(name) {\n return this.builders.has(name);\n }\n}\nexport class AXPPermissionDefinitionGroupBuilder {\n get group() {\n return this._group;\n }\n constructor(context, group) {\n this.context = context;\n this._group = group;\n }\n addPermission(name, title, description) {\n const permission = {\n name,\n title,\n description,\n children: []\n };\n this._group.permissions.push(permission);\n return new AXPPermissionDefinitionBuilder(this, permission);\n }\n endGroup() {\n return this.context;\n }\n findPermission(path) {\n return undefined;\n }\n findGroup(name) {\n return undefined;\n }\n}\nexport class AXPPermissionDefinitionBuilder {\n constructor(groupBuilder, permission) {\n this.groupBuilder = groupBuilder;\n this.permission = permission;\n }\n addChild(name, title, description) {\n const permission = {\n name,\n title,\n description,\n children: []\n };\n this.permission.children.push(permission);\n return this;\n }\n endPermission() {\n return this.groupBuilder;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1kZWZpbml0aW9uLmJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9wZXJtaXNzaW9uL3Blcm1pc3Npb24tZGVmaW5pdGlvbi5idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxzQ0FBc0M7SUFBbkQ7UUFDWSxhQUFRLEdBQXFELElBQUksR0FBRyxFQUFFLENBQUM7SUE0Qm5GLENBQUM7SUExQkcsUUFBUSxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsV0FBb0I7UUFDdEQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBRSxDQUFBO1FBQ2hDLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBaUM7WUFDeEMsSUFBSTtZQUNKLEtBQUs7WUFDTCxXQUFXO1lBQ1gsV0FBVyxFQUFFLEVBQUU7U0FDbEIsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksbUNBQW1DLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNKO0FBSUQsTUFBTSxPQUFPLG1DQUFtQztJQUk1QyxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELFlBQVksT0FBK0MsRUFBRSxLQUFtQztRQUM1RixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsV0FBb0I7UUFDM0QsTUFBTSxVQUFVLEdBQTRCO1lBQ3hDLElBQUk7WUFDSixLQUFLO1lBQ0wsV0FBVztZQUNYLFFBQVEsRUFBRSxFQUFFO1NBQ2YsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksOEJBQThCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFLRCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWTtRQUN2QixPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVk7UUFDbEIsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztDQUVKO0FBRUQsTUFBTSxPQUFPLDhCQUE4QjtJQUl2QyxZQUFZLFlBQWlELEVBQUUsVUFBbUM7UUFDOUYsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLFdBQW9CO1FBQ3RELE1BQU0sVUFBVSxHQUE0QjtZQUN4QyxJQUFJO1lBQ0osS0FBSztZQUNMLFdBQVc7WUFDWCxRQUFRLEVBQUUsRUFBRTtTQUNmLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUdELGFBQWE7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQUGVybWlzc2lvbkRlZmluaXRpb24sIEFYUFBlcm1pc3Npb25Hcm91cERlZmluaXRpb24gfSBmcm9tIFwiLi9wZXJtaXNzaW9uLnR5cGVzXCI7XG5cblxuZXhwb3J0IGNsYXNzIEFYUFBlcm1pc3Npb25EZWZpbml0aW9uUHJvdmlkZXJDb250ZXh0IHtcbiAgICBwcml2YXRlIGJ1aWxkZXJzOiBNYXA8c3RyaW5nLCBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbkdyb3VwQnVpbGRlcj4gPSBuZXcgTWFwKCk7XG5cbiAgICBhZGRHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogQVhQUGVybWlzc2lvbkRlZmluaXRpb25Hcm91cEJ1aWxkZXIge1xuICAgICAgICBpZiAodGhpcy5pc0dyb3VwRGVmaW5lZChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEdyb3VwKG5hbWUpIVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyb3VwOiBBWFBQZXJtaXNzaW9uR3JvdXBEZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBwZXJtaXNzaW9uczogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbkdyb3VwQnVpbGRlcih0aGlzLCBncm91cCk7XG4gICAgICAgIHRoaXMuYnVpbGRlcnMuc2V0KG5hbWUsIGJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICB9XG5cbiAgICBnZXRHcm91cERlZmluaXRpb25zKCk6IEFYUFBlcm1pc3Npb25Hcm91cERlZmluaXRpb25bXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuYnVpbGRlcnMudmFsdWVzKCkpLm1hcChiID0+IGIuZ3JvdXApO1xuICAgIH1cblxuICAgIGZpbmRHcm91cChuYW1lOiBzdHJpbmcpOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbkdyb3VwQnVpbGRlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkZXJzLmdldChuYW1lKTtcbiAgICB9XG5cbiAgICBpc0dyb3VwRGVmaW5lZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRlcnMuaGFzKG5hbWUpO1xuICAgIH1cbn1cblxuXG5cbmV4cG9ydCBjbGFzcyBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbkdyb3VwQnVpbGRlciB7XG4gICAgcHJpdmF0ZSBjb250ZXh0OiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyQ29udGV4dDtcbiAgICBwcml2YXRlIF9ncm91cDogQVhQUGVybWlzc2lvbkdyb3VwRGVmaW5pdGlvbjtcblxuICAgIHB1YmxpYyBnZXQgZ3JvdXAoKTogQVhQUGVybWlzc2lvbkdyb3VwRGVmaW5pdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyQ29udGV4dCwgZ3JvdXA6IEFYUFBlcm1pc3Npb25Hcm91cERlZmluaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5fZ3JvdXAgPSBncm91cDtcbiAgICB9XG5cbiAgICBhZGRQZXJtaXNzaW9uKG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbkJ1aWxkZXIge1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9uOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2dyb3VwLnBlcm1pc3Npb25zLnB1c2gocGVybWlzc2lvbik7XG4gICAgICAgIHJldHVybiBuZXcgQVhQUGVybWlzc2lvbkRlZmluaXRpb25CdWlsZGVyKHRoaXMsIHBlcm1pc3Npb24pO1xuICAgIH1cblxuXG5cblxuICAgIGVuZEdyb3VwKCk6IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uUHJvdmlkZXJDb250ZXh0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgICB9XG5cbiAgICBmaW5kUGVybWlzc2lvbihwYXRoOiBzdHJpbmcpOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZmluZEdyb3VwKG5hbWU6IHN0cmluZyk6IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uR3JvdXBCdWlsZGVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIEFYUFBlcm1pc3Npb25EZWZpbml0aW9uQnVpbGRlciB7XG4gICAgcHJpdmF0ZSBncm91cEJ1aWxkZXI6IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uR3JvdXBCdWlsZGVyO1xuICAgIHByaXZhdGUgcGVybWlzc2lvbjogQVhQUGVybWlzc2lvbkRlZmluaXRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihncm91cEJ1aWxkZXI6IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uR3JvdXBCdWlsZGVyLCBwZXJtaXNzaW9uOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbikge1xuICAgICAgICB0aGlzLmdyb3VwQnVpbGRlciA9IGdyb3VwQnVpbGRlcjtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uID0gcGVybWlzc2lvbjtcbiAgICB9XG5cbiAgICBhZGRDaGlsZChuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogQVhQUGVybWlzc2lvbkRlZmluaXRpb25CdWlsZGVyIHtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbjogQVhQUGVybWlzc2lvbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBlcm1pc3Npb24uY2hpbGRyZW4ucHVzaChwZXJtaXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG5cbiAgICBlbmRQZXJtaXNzaW9uKCk6IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uR3JvdXBCdWlsZGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCdWlsZGVyO1xuICAgIH1cbn0iXX0=","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPPermissionDefinitionProviderContext } from './permission-definition.builder';\nimport * as i0 from \"@angular/core\";\nexport const AXP_PERMISSION_DEFINITION_PROVIDER = new InjectionToken('AXP_PERMISSION_DEFINITION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n return [];\n }\n});\nexport class AXPPermissionDefinitionService {\n constructor() {\n this.providers = inject(AXP_PERMISSION_DEFINITION_PROVIDER, { optional: true });\n this.cache = null;\n }\n async load() {\n if (this.cache) {\n return;\n }\n const context = new AXPPermissionDefinitionProviderContext();\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.define(context);\n }\n else {\n // If provider is a direct instance, use it directly\n await provider.define(context);\n }\n }\n }\n this.cache = context.getGroupDefinitions();\n }\n async reload() {\n this.cache = null;\n await this.load();\n }\n async getGroups() {\n await this.load();\n return this.cache ?? [];\n }\n async getPermissions() {\n await this.load();\n return this.cache?.flatMap(g => g.permissions) ?? [];\n }\n async getGroup(name) {\n await this.load();\n return this.cache?.find(g => g.name === name) ?? null;\n }\n async getPermission(name) {\n await this.load();\n return this.cache?.find(g => g.permissions.find(p => p.name === name))?.permissions.find(p => p.name === name) ?? null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPPermissionDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPPermissionDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPPermissionDefinitionService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1kZWZpbml0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9wZXJtaXNzaW9uL3Blcm1pc3Npb24tZGVmaW5pdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFRekYsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxjQUFjLENBQW9DLG9DQUFvQyxFQUFFO0lBQzVJLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUU7UUFDWixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Q0FDRixDQUFDLENBQUM7QUFJSCxNQUFNLE9BQU8sOEJBQThCO0lBRDNDO1FBRVUsY0FBUyxHQUFHLE1BQU0sQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLFVBQUssR0FBMEMsSUFBSSxDQUFDO0tBZ0Q3RDtJQTdDUyxLQUFLLENBQUMsSUFBSTtRQUNoQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxzQ0FBc0MsRUFBRSxDQUFDO1FBQzdELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxRQUFRLFlBQVksT0FBTyxFQUFFLENBQUM7b0JBQ2hDLHVDQUF1QztvQkFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFFBQVEsQ0FBQztvQkFDeEMsTUFBTSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixvREFBb0Q7b0JBQ3BELE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU07UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjO1FBQ3pCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQVk7UUFDaEMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3hELENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQVk7UUFDckMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN6SCxDQUFDOytHQWhEVSw4QkFBOEI7bUhBQTlCLDhCQUE4QixjQURqQixNQUFNOzs0RkFDbkIsOEJBQThCO2tCQUQxQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uLCBBWFBQZXJtaXNzaW9uR3JvdXBEZWZpbml0aW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uUHJvdmlkZXJDb250ZXh0IH0gZnJvbSAnLi9wZXJtaXNzaW9uLWRlZmluaXRpb24uYnVpbGRlcic7XG5cblxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFBlcm1pc3Npb25EZWZpbml0aW9uUHJvdmlkZXIge1xuICBkZWZpbmUoY29udGV4dDogQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlckNvbnRleHQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgY29uc3QgQVhQX1BFUk1JU1NJT05fREVGSU5JVElPTl9QUk9WSURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWFBQZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyW10+KCdBWFBfUEVSTUlTU0lPTl9ERUZJTklUSU9OX1BST1ZJREVSJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbn0pO1xuXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQVhQUGVybWlzc2lvbkRlZmluaXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwcm92aWRlcnMgPSBpbmplY3QoQVhQX1BFUk1JU1NJT05fREVGSU5JVElPTl9QUk9WSURFUiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBjYWNoZTogQVhQUGVybWlzc2lvbkdyb3VwRGVmaW5pdGlvbltdIHwgbnVsbCA9IG51bGw7XG5cblxuICBwcml2YXRlIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBjb250ZXh0ID0gbmV3IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uUHJvdmlkZXJDb250ZXh0KCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm92aWRlcnMpKSB7XG4gICAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIHRoaXMucHJvdmlkZXJzKSB7XG4gICAgICAgIGlmIChwcm92aWRlciBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAvLyBJZiBwcm92aWRlciBpcyBhIHByb21pc2UsIHJlc29sdmUgaXRcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXI7XG4gICAgICAgICAgYXdhaXQgcmVzb2x2ZWRQcm92aWRlci5kZWZpbmUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgcHJvdmlkZXIgaXMgYSBkaXJlY3QgaW5zdGFuY2UsIHVzZSBpdCBkaXJlY3RseVxuICAgICAgICAgIGF3YWl0IHByb3ZpZGVyLmRlZmluZShjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhY2hlID0gY29udGV4dC5nZXRHcm91cERlZmluaXRpb25zKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2FjaGUgPSBudWxsO1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEdyb3VwcygpOiBQcm9taXNlPEFYUFBlcm1pc3Npb25Hcm91cERlZmluaXRpb25bXT4ge1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlID8/IFtdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFBlcm1pc3Npb25zKCk6IFByb21pc2U8QVhQUGVybWlzc2lvbkRlZmluaXRpb25bXT4ge1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlPy5mbGF0TWFwKGcgPT4gZy5wZXJtaXNzaW9ucykgPz8gW107XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R3JvdXAobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBQZXJtaXNzaW9uR3JvdXBEZWZpbml0aW9uIHwgbnVsbD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlPy5maW5kKGcgPT4gZy5uYW1lID09PSBuYW1lKSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFBlcm1pc3Npb24obmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbiB8IG51bGw+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWQoKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZT8uZmluZChnID0+IGcucGVybWlzc2lvbnMuZmluZChwID0+IHAubmFtZSA9PT0gbmFtZSkpPy5wZXJtaXNzaW9ucy5maW5kKHAgPT4gcC5uYW1lID09PSBuYW1lKSA/PyBudWxsO1xuICB9XG5cbn1cbiJdfQ==","import { inject } from \"@angular/core\";\nimport { AXPSessionService } from \"../session.service\";\nexport class AXPPermissionEvaluatorScopeProvider {\n constructor() {\n this.sessionService = inject(AXPSessionService);\n }\n async provide(context) {\n context.addScope('permission', {\n /**\n * Check if the current user has all specified permissions\n * @param permissions - Single permission string or array of permission strings\n * @returns boolean - true if user has all permissions, false otherwise\n */\n check: (...permissions) => {\n return this.sessionService.authorize(...permissions);\n },\n /**\n * Check if the current user has any of the specified permissions\n * @param permissions - Array of permission strings\n * @returns boolean - true if user has any of the permissions, false otherwise\n */\n checkAny: (...permissions) => {\n return permissions.some(p => this.sessionService.authorize(p));\n },\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1ldmFsdWF0b3Itc2NvcGUucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9wZXJtaXNzaW9uL3Blcm1pc3Npb24tZXZhbHVhdG9yLXNjb3BlLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkQsTUFBTSxPQUFPLG1DQUFtQztJQUFoRDtRQUVjLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUF1QnpELENBQUM7SUFyQkcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFtRDtRQUM3RCxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtZQUMzQjs7OztlQUlHO1lBQ0gsS0FBSyxFQUFFLENBQUMsR0FBRyxXQUFxQixFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN6RCxDQUFDO1lBRUQ7Ozs7ZUFJRztZQUNILFFBQVEsRUFBRSxDQUFDLEdBQUcsV0FBcUIsRUFBRSxFQUFFO2dCQUNuQyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGVQcm92aWRlciwgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlUHJvdmlkZXJDb250ZXh0IH0gZnJvbSBcIkBhY29yZXgvcGxhdGZvcm0vY29yZVwiO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3Nlc3Npb24uc2VydmljZVwiO1xuXG5leHBvcnQgY2xhc3MgQVhQUGVybWlzc2lvbkV2YWx1YXRvclNjb3BlUHJvdmlkZXIgaW1wbGVtZW50cyBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGVQcm92aWRlciB7XG5cbiAgICBwcm90ZWN0ZWQgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuXG4gICAgYXN5bmMgcHJvdmlkZShjb250ZXh0OiBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGVQcm92aWRlckNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29udGV4dC5hZGRTY29wZSgncGVybWlzc2lvbicsIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgYWxsIHNwZWNpZmllZCBwZXJtaXNzaW9uc1xuICAgICAgICAgICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC0gU2luZ2xlIHBlcm1pc3Npb24gc3RyaW5nIG9yIGFycmF5IG9mIHBlcm1pc3Npb24gc3RyaW5nc1xuICAgICAgICAgICAgICogQHJldHVybnMgYm9vbGVhbiAtIHRydWUgaWYgdXNlciBoYXMgYWxsIHBlcm1pc3Npb25zLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY2hlY2s6ICguLi5wZXJtaXNzaW9uczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uU2VydmljZS5hdXRob3JpemUoLi4ucGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBhbnkgb2YgdGhlIHNwZWNpZmllZCBwZXJtaXNzaW9uc1xuICAgICAgICAgICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC0gQXJyYXkgb2YgcGVybWlzc2lvbiBzdHJpbmdzXG4gICAgICAgICAgICAgKiBAcmV0dXJucyBib29sZWFuIC0gdHJ1ZSBpZiB1c2VyIGhhcyBhbnkgb2YgdGhlIHBlcm1pc3Npb25zLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY2hlY2tBbnk6ICguLi5wZXJtaXNzaW9uczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuc29tZShwID0+IHRoaXMuc2Vzc2lvblNlcnZpY2UuYXV0aG9yaXplKHApKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbn0gIl19","import { inject } from '@angular/core';\nimport { first, map } from 'rxjs';\nimport { AXPUnauthenticatedError } from './errors.types';\nimport { AXPSessionService } from './session.service';\nexport const AXPAuthGuard = (route, state) => {\n const sessionService = inject(AXPSessionService);\n return sessionService.isAuthenticatedWithLoading$.pipe(first(), map((value) => {\n if (value) {\n return true;\n }\n throw new AXPUnauthenticatedError(`Access denied. You are not currently logged in. Please log in to access this page. If you continue to see this message after logging in, please contact support.`, {\n redirectUrl: state.url,\n });\n }));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL2F1dGguZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWtCLENBQUMsS0FBNkIsRUFBRSxLQUEwQixFQUFFLEVBQUU7SUFDdkcsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDakQsT0FBTyxjQUFjLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUNwRCxLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNaLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLElBQUksdUJBQXVCLENBQy9CLGtLQUFrSyxFQUNsSztZQUNFLFdBQVcsRUFBRSxLQUFLLENBQUMsR0FBRztTQUN2QixDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpcnN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUFVuYXV0aGVudGljYXRlZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMudHlwZXMnO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBBWFBBdXRoR3VhcmQ6IENhbkFjdGl2YXRlRm4gPSAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSA9PiB7XG4gIGNvbnN0IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcbiAgcmV0dXJuIHNlc3Npb25TZXJ2aWNlLmlzQXV0aGVudGljYXRlZFdpdGhMb2FkaW5nJC5waXBlKFxuICAgIGZpcnN0KCksXG4gICAgbWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEFYUFVuYXV0aGVudGljYXRlZEVycm9yKFxuICAgICAgICBgQWNjZXNzIGRlbmllZC4gWW91IGFyZSBub3QgY3VycmVudGx5IGxvZ2dlZCBpbi4gUGxlYXNlIGxvZyBpbiB0byBhY2Nlc3MgdGhpcyBwYWdlLiBJZiB5b3UgY29udGludWUgdG8gc2VlIHRoaXMgbWVzc2FnZSBhZnRlciBsb2dnaW5nIGluLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0LmAsXG4gICAgICAgIHtcbiAgICAgICAgICByZWRpcmVjdFVybDogc3RhdGUudXJsLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KSxcbiAgKTtcbn07XG4iXX0=","import { Inject, NgModule, Optional, inject, provideAppInitializer } from '@angular/core';\nimport { AXPAuthStrategyRegistryService } from './auth-registry.service';\nimport { AXPFeatureDirective } from './feature';\nimport { AXPPermissionDirective } from './permission/permission.directive';\nimport { AXPSessionService } from './session.service';\nimport * as i0 from \"@angular/core\";\nexport function initializeAppState(service) {\n return async () => {\n try {\n await service.restoreSession();\n }\n catch (error) {\n console.error(error);\n }\n };\n}\nexport class AXPAuthModule {\n static forRoot(configs) {\n return {\n ngModule: AXPAuthModule,\n providers: [\n ...(configs?.strategies || []),\n {\n provide: 'AXPAuthModuleFactory',\n useFactory: (registry) => () => {\n registry.register(...(configs?.strategies || []));\n },\n deps: [AXPAuthStrategyRegistryService],\n multi: true,\n },\n ],\n };\n }\n static forChild(configs) {\n return {\n ngModule: AXPAuthModule,\n providers: [\n ...(configs?.strategies || []),\n {\n provide: 'AXPAuthModuleFactory',\n useFactory: (registry) => () => {\n registry.register(...(configs?.strategies || []));\n },\n deps: [AXPAuthStrategyRegistryService],\n multi: true,\n },\n ],\n };\n }\n /**\n * @ignore\n */\n constructor(instances) {\n instances?.forEach((f) => {\n f();\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPAuthModule, deps: [{ token: 'AXPAuthModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPAuthModule, declarations: [AXPPermissionDirective, AXPFeatureDirective], exports: [AXPPermissionDirective, AXPFeatureDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPAuthModule, providers: [\n provideAppInitializer(() => {\n const initializerFn = initializeAppState(inject(AXPSessionService));\n return initializerFn();\n }),\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.10\", ngImport: i0, type: AXPAuthModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [AXPPermissionDirective, AXPFeatureDirective],\n declarations: [AXPPermissionDirective, AXPFeatureDirective],\n providers: [\n provideAppInitializer(() => {\n const initializerFn = initializeAppState(inject(AXPSessionService));\n return initializerFn();\n }),\n ],\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: ['AXPAuthModuleFactory']\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUF1QixRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBTXRELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUEwQjtJQUMzRCxPQUFPLEtBQUssSUFBSSxFQUFFO1FBQ2hCLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWFELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBOEI7UUFDM0MsT0FBTztZQUNMLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLFNBQVMsRUFBRTtnQkFDVCxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUM7Z0JBQzlCO29CQUNFLE9BQU8sRUFBRSxzQkFBc0I7b0JBQy9CLFVBQVUsRUFBRSxDQUFDLFFBQXdDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTt3QkFDN0QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNwRCxDQUFDO29CQUNELElBQUksRUFBRSxDQUFDLDhCQUE4QixDQUFDO29CQUN0QyxLQUFLLEVBQUUsSUFBSTtpQkFDWjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQThCO1FBQzVDLE9BQU87WUFDTCxRQUFRLEVBQUUsYUFBYTtZQUN2QixTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO2dCQUM5QjtvQkFDRSxPQUFPLEVBQUUsc0JBQXNCO29CQUMvQixVQUFVLEVBQUUsQ0FBQyxRQUF3QyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUU7d0JBQzdELFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDcEQsQ0FBQztvQkFDRCxJQUFJLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztvQkFDdEMsS0FBSyxFQUFFLElBQUk7aUJBQ1o7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUF3RCxTQUFnQjtRQUN0RSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsQ0FBQyxFQUFFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBMUNVLGFBQWEsa0JBc0NRLHNCQUFzQjtnSEF0QzNDLGFBQWEsaUJBUlQsc0JBQXNCLEVBQUUsbUJBQW1CLGFBRGhELHNCQUFzQixFQUFFLG1CQUFtQjtnSEFTMUMsYUFBYSxhQVBiO1lBQ1QscUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUN6QixNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxPQUFPLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQztTQUNIOzs0RkFFVSxhQUFhO2tCQVh6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxFQUFFO29CQUNYLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLG1CQUFtQixDQUFDO29CQUN0RCxZQUFZLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQztvQkFDM0QsU0FBUyxFQUFFO3dCQUNULHFCQUFxQixDQUFDLEdBQUcsRUFBRTs0QkFDekIsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzs0QkFDcEUsT0FBTyxhQUFhLEVBQUUsQ0FBQzt3QkFDekIsQ0FBQyxDQUFDO3FCQUNIO2lCQUNGOzswQkF1Q2MsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBPcHRpb25hbCwgaW5qZWN0LCBwcm92aWRlQXBwSW5pdGlhbGl6ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUF9FWFBSRVNTSU9OX0VWQUxVQVRPUl9TQ09QRV9QUk9WSURFUiB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBBdXRoU3RyYXRlZ3lSZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuL2F1dGgtcmVnaXN0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBBWFBBdXRoU3RyYXRlZ3kgfSBmcm9tICcuL2F1dGguc3RyYXRlZ3knO1xuaW1wb3J0IHsgQVhQRmVhdHVyZURpcmVjdGl2ZSB9IGZyb20gJy4vZmVhdHVyZSc7XG5pbXBvcnQgeyBBWFBQZXJtaXNzaW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9wZXJtaXNzaW9uL3Blcm1pc3Npb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEFYUFBlcm1pc3Npb25FdmFsdWF0b3JTY29wZVByb3ZpZGVyIH0gZnJvbSAnLi9wZXJtaXNzaW9uL3Blcm1pc3Npb24tZXZhbHVhdG9yLXNjb3BlLnByb3ZpZGVyJztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXNzaW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUEF1dGhNb2R1bGVDb25maWdzIHtcbiAgc3RyYXRlZ2llczogKG5ldyAoKSA9PiBBWFBBdXRoU3RyYXRlZ3kpW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQXBwU3RhdGUoc2VydmljZTogQVhQU2Vzc2lvblNlcnZpY2UpIHtcbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VydmljZS5yZXN0b3JlU2Vzc2lvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH07XG59XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtdLFxuICBleHBvcnRzOiBbQVhQUGVybWlzc2lvbkRpcmVjdGl2ZSwgQVhQRmVhdHVyZURpcmVjdGl2ZV0sXG4gIGRlY2xhcmF0aW9uczogW0FYUFBlcm1pc3Npb25EaXJlY3RpdmUsIEFYUEZlYXR1cmVEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFtcbiAgICBwcm92aWRlQXBwSW5pdGlhbGl6ZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaW5pdGlhbGl6ZXJGbiA9IGluaXRpYWxpemVBcHBTdGF0ZShpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpKTtcbiAgICAgIHJldHVybiBpbml0aWFsaXplckZuKCk7XG4gICAgfSksXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYUEF1dGhNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChjb25maWdzPzogQVhQQXV0aE1vZHVsZUNvbmZpZ3MpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFYUEF1dGhNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYUEF1dGhNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgLi4uKGNvbmZpZ3M/LnN0cmF0ZWdpZXMgfHwgW10pLFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogJ0FYUEF1dGhNb2R1bGVGYWN0b3J5JyxcbiAgICAgICAgICB1c2VGYWN0b3J5OiAocmVnaXN0cnk6IEFYUEF1dGhTdHJhdGVneVJlZ2lzdHJ5U2VydmljZSkgPT4gKCkgPT4ge1xuICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXIoLi4uKGNvbmZpZ3M/LnN0cmF0ZWdpZXMgfHwgW10pKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcHM6IFtBWFBBdXRoU3RyYXRlZ3lSZWdpc3RyeVNlcnZpY2VdLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZvckNoaWxkKGNvbmZpZ3M/OiBBWFBBdXRoTW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhQQXV0aE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQVhQQXV0aE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAuLi4oY29uZmlncz8uc3RyYXRlZ2llcyB8fCBbXSksXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiAnQVhQQXV0aE1vZHVsZUZhY3RvcnknLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IChyZWdpc3RyeTogQVhQQXV0aFN0cmF0ZWd5UmVnaXN0cnlTZXJ2aWNlKSA9PiAoKSA9PiB7XG4gICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlciguLi4oY29uZmlncz8uc3RyYXRlZ2llcyB8fCBbXSkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVwczogW0FYUEF1dGhTdHJhdGVneVJlZ2lzdHJ5U2VydmljZV0sXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdCgnQVhQQXV0aE1vZHVsZUZhY3RvcnknKSBpbnN0YW5jZXM6IGFueVtdKSB7XG4gICAgaW5zdGFuY2VzPy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBmKCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==","export class AXPAuthStrategy {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL2F1dGguc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0NBLE1BQU0sT0FBZ0IsZUFBZTtDQU1wQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9hcHBsaWNhdGlvbi9hcHBsaWNhdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBBWFBTZXNzaW9uQ29udGV4dCB9IGZyb20gJy4vc2Vzc2lvbi50eXBlcyc7XG5pbXBvcnQgeyBBWFBUZW5hbnQgfSBmcm9tICcuL3RlbmFudC90ZW5hbnQudHlwZXMnO1xuaW1wb3J0IHsgQVhQVXNlciB9IGZyb20gJy4vdXNlci91c2VyLnR5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBCYXNlQ3JlZGVudGlhbHMge1xuICBzdHJhdGVneTogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQVG9rZW5SZXN1bHQge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBleHBpcmVzSW4/OiBzdHJpbmcgfCBudWxsO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGlkVG9rZW4/OiBzdHJpbmc7XG4gIHRlbmFudD86IEFYUFRlbmFudCB8IG51bGw7XG4gIGFwcGxpY2F0aW9uPzogQVhQQXBwbGljYXRpb24gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFNpZ25JblJlc3VsdCB7XG4gIHN1Y2NlZWQ6IGJvb2xlYW47XG4gIGRhdGE/OiB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICBpZFRva2VuPzogc3RyaW5nIHwgbnVsbDtcbiAgICBleHBpcmVzSW4/OiBzdHJpbmcgfCBudWxsO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICAgIHVzZXI6IEFYUFVzZXI7XG4gICAgdGVuYW50PzogQVhQVGVuYW50IHwgbnVsbDtcbiAgICBhcHBsaWNhdGlvbj86IEFYUEFwcGxpY2F0aW9uIHwgbnVsbDtcbiAgfTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYUEF1dGhTdHJhdGVneSB7XG4gIGFic3RyYWN0IGdldCBuYW1lKCk6IHN0cmluZztcbiAgYWJzdHJhY3Qgc2lnbmluKGNyZWRlbnRpYWxzOiBBWFBCYXNlQ3JlZGVudGlhbHMpOiBQcm9taXNlPEFYUFNpZ25JblJlc3VsdCB8IHZvaWQ+O1xuICBhYnN0cmFjdCBzaWdub3V0KCk6IFByb21pc2U8dm9pZD47XG4gIGFic3RyYWN0IHJlZnJlc2hUb2tlbihjb250ZXh0OiBBWFBTZXNzaW9uQ29udGV4dCk6IFByb21pc2U8QVhQU2lnbkluUmVzdWx0PjtcbiAgYWJzdHJhY3QgdXBkYXRlVG9rZW4ocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IFByb21pc2U8QVhQU2lnbkluUmVzdWx0IHwgdm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQU2Vzc2lvbkRhdGEge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgaWRUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgc3RyYXRlZ3k6IHN0cmluZztcbiAgdXNlcj86IEFYUFVzZXIgfCBudWxsO1xuICB0ZW5hbnQ/OiBBWFBUZW5hbnQgfCBudWxsO1xuICBhcHBsaWNhdGlvbj86IEFYUEFwcGxpY2F0aW9uIHwgbnVsbDtcbiAgZXhwaXJlc0luPzogc3RyaW5nIHwgbnVsbDtcbn1cbiJdfQ==","//#region ---- JWT Utility ----\n/**\n * Utility class for JWT token operations\n */\nexport class JwtUtil {\n /**\n * Parses a JWT token and returns the payload\n */\n static parseJwt(token) {\n try {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(atob(base64)\n .split('')\n .map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''));\n return JSON.parse(jsonPayload);\n }\n catch (error) {\n throw new Error('Invalid JWT token');\n }\n }\n}\n//#endregion\n//#region ---- PKCE Utility ----\n/**\n * Utility class for PKCE (Proof Key for Code Exchange) operations\n */\nexport class PkceUtil {\n /**\n * Generates a random string for PKCE code verifier\n */\n static generateRandomString(length) {\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n return this.base64UrlEncode(array);\n }\n /**\n * Generates PKCE code challenge from verifier\n */\n static async generateCodeChallenge(codeVerifier) {\n const encoder = new TextEncoder();\n const data = encoder.encode(codeVerifier);\n const digest = await crypto.subtle.digest('SHA-256', data);\n return this.base64UrlEncode(new Uint8Array(digest));\n }\n /**\n * Base64 URL encoding for PKCE\n */\n static base64UrlEncode(array) {\n return btoa(String.fromCharCode(...array))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n }\n}\n//#endregion\n//#region ---- Time Utility ----\n/**\n * Utility class for time and date operations\n */\nexport class TimeUtil {\n /**\n * Calculates the time difference in milliseconds between a future date and now\n */\n static expiresInMilliseconds(expiresInDate) {\n return new Date(expiresInDate).getTime() - new Date().getTime();\n }\n /**\n * Calculates expiration date from seconds\n */\n static calculateExpireInDate(expireInSeconds) {\n return new Date(Date.now() + expireInSeconds * 1000).toISOString();\n }\n}\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL2F1dGgudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxPQUFPLE9BQU87SUFDbEI7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDO2lCQUNULEtBQUssQ0FBQyxFQUFFLENBQUM7aUJBQ1QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQy9ELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDWixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxZQUFZO0FBRVosb0NBQW9DO0FBRXBDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDbkI7O09BRUc7SUFDSCxNQUFNLENBQUMsb0JBQW9CLENBQUMsTUFBYztRQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFlBQW9CO1FBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQWlCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQzthQUN2QyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUNuQixPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUNuQixPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQUVELFlBQVk7QUFFWixvQ0FBb0M7QUFFcEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNuQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxhQUFxQjtRQUNoRCxPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHFCQUFxQixDQUFDLGVBQXVCO1FBQ2xELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFFRCxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBKV1QgVXRpbGl0eSAgIC0tLS1cblxuLyoqXG4gKiBVdGlsaXR5IGNsYXNzIGZvciBKV1QgdG9rZW4gb3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgSnd0VXRpbCB7XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBKV1QgdG9rZW4gYW5kIHJldHVybnMgdGhlIHBheWxvYWRcbiAgICovXG4gIHN0YXRpYyBwYXJzZUp3dCh0b2tlbjogc3RyaW5nKTogYW55IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZTY0VXJsID0gdG9rZW4uc3BsaXQoJy4nKVsxXTtcbiAgICAgIGNvbnN0IGJhc2U2NCA9IGJhc2U2NFVybC5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpO1xuICAgICAgY29uc3QganNvblBheWxvYWQgPSBkZWNvZGVVUklDb21wb25lbnQoXG4gICAgICAgIGF0b2IoYmFzZTY0KVxuICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAubWFwKGMgPT4gJyUnICsgKCcwMCcgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMikpXG4gICAgICAgICAgLmpvaW4oJycpXG4gICAgICApO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblBheWxvYWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSldUIHRva2VuJyk7XG4gICAgfVxuICB9XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIFBLQ0UgVXRpbGl0eSAgIC0tLS1cblxuLyoqXG4gKiBVdGlsaXR5IGNsYXNzIGZvciBQS0NFIChQcm9vZiBLZXkgZm9yIENvZGUgRXhjaGFuZ2UpIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFBrY2VVdGlsIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBzdHJpbmcgZm9yIFBLQ0UgY29kZSB2ZXJpZmllclxuICAgKi9cbiAgc3RhdGljIGdlbmVyYXRlUmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XG4gICAgcmV0dXJuIHRoaXMuYmFzZTY0VXJsRW5jb2RlKGFycmF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgUEtDRSBjb2RlIGNoYWxsZW5nZSBmcm9tIHZlcmlmaWVyXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVDb2RlQ2hhbGxlbmdlKGNvZGVWZXJpZmllcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKGNvZGVWZXJpZmllcik7XG4gICAgY29uc3QgZGlnZXN0ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5iYXNlNjRVcmxFbmNvZGUobmV3IFVpbnQ4QXJyYXkoZGlnZXN0KSk7XG4gIH1cblxuICAvKipcbiAgICogQmFzZTY0IFVSTCBlbmNvZGluZyBmb3IgUEtDRVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYmFzZTY0VXJsRW5jb2RlKGFycmF5OiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmFycmF5KSlcbiAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICAucmVwbGFjZSgvPS9nLCAnJyk7XG4gIH1cbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgVGltZSBVdGlsaXR5ICAgLS0tLVxuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIHRpbWUgYW5kIGRhdGUgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgVGltZVV0aWwge1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgdGltZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGEgZnV0dXJlIGRhdGUgYW5kIG5vd1xuICAgKi9cbiAgc3RhdGljIGV4cGlyZXNJbk1pbGxpc2Vjb25kcyhleHBpcmVzSW5EYXRlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZShleHBpcmVzSW5EYXRlKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGV4cGlyYXRpb24gZGF0ZSBmcm9tIHNlY29uZHNcbiAgICovXG4gIHN0YXRpYyBjYWxjdWxhdGVFeHBpcmVJbkRhdGUoZXhwaXJlSW5TZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLm5vdygpICsgZXhwaXJlSW5TZWNvbmRzICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgfVxufVxuXG4vLyNlbmRyZWdpb24gIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LXBsYXRmb3JtLWF1dGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2Fjb3JleC1wbGF0Zm9ybS1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":";;;;;;AAEY,MAAC,sBAAsB,GAAG,IAAI,cAAc,CAAC,wBAAwB,EAAE;AACnF,IAAI,UAAU,EAAE,MAAM;AACtB,IAAI,OAAO,EAAE,MAAM;AACnB,QAAQ,OAAO,IAAI,2BAA2B,EAAE;AAChD,IAAI,CAAC;AACL,CAAC;AACD,MAAM,2BAA2B,CAAC;AAClC,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB,QAAQ,OAAO,EAAE,CAAC;AAClB,YAAY;AACZ,gBAAgB,EAAE,EAAE,GAAG;AACvB,gBAAgB,IAAI,EAAE,aAAa;AACnC,gBAAgB,KAAK,EAAE,qBAAqB;AAC5C,gBAAgB,OAAO,EAAE,OAAO;AAChC,gBAAgB,WAAW,EAAE,UAAU;AACvC,gBAAgB,QAAQ,EAAE,EAAE;AAC5B,aAAa;AACb,YAAY;AACZ,gBAAgB,EAAE,EAAE,GAAG;AACvB,gBAAgB,IAAI,EAAE,aAAa;AACnC,gBAAgB,KAAK,EAAE,qBAAqB;AAC5C,gBAAgB,OAAO,EAAE,OAAO;AAChC,gBAAgB,WAAW,EAAE,UAAU;AACvC,gBAAgB,QAAQ,EAAE,EAAE;AAC5B,aAAa;AACb,SAAS,CAAC;AACV,IAAI;AACJ;;AC3BY,MAAC,iBAAiB,GAAG,IAAI,cAAc,CAAC,mBAAmB,EAAE;AACzE,IAAI,UAAU,EAAE,MAAM;AACtB,IAAI,OAAO,EAAE,MAAM;AACnB,QAAQ,OAAO,IAAI,sBAAsB,EAAE;AAC3C,IAAI,CAAC;AACL,CAAC;AACD,MAAM,sBAAsB,CAAC;AAC7B,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB,QAAQ,OAAO,EAAE,CAAC;AAClB,YAAY;AACZ,gBAAgB,EAAE,EAAE,GAAG;AACvB,gBAAgB,IAAI,EAAE,gBAAgB;AACtC,gBAAgB,KAAK,EAAE,gBAAgB;AACvC,aAAa;AACb,SAAS,CAAC;AACV,IAAI;AACJ;;AChBO,MAAM,8BAA8B,CAAC;AAC5C,IAAI,WAAW,CAAC,QAAQ,EAAE;AAC1B,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE;AACnC,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;AAChC,IAAI;AACJ,IAAI,QAAQ,CAAC,GAAG,OAAO,EAAE;AACzB,QAAQ,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI;AAC7B,YAAY,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChI,YAAY,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,YAAY,IAAI,QAAQ,EAAE;AAC1B,gBAAgB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC5D,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,GAAG,CAAC,WAAW,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;AAC/C,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACxN,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AACzK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,UAAU,EAAE,CAAC;AACzI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;;ACzBhD,MAAC,kBAAkB,GAAG,IAAI,cAAc,CAAC,oBAAoB,EAAE;AAC3E,IAAI,UAAU,EAAE,MAAM;AACtB,IAAI,OAAO,EAAE,MAAM;AACnB,QAAQ,OAAO,IAAI,uBAAuB,EAAE;AAC5C,IAAI,CAAC;AACL,CAAC;AACD,MAAM,uBAAuB,CAAC;AAC9B,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB,QAAQ,OAAO,EAAE,CAAC,EAAE,CAAC;AACrB,IAAI;AACJ;;ACTO,MAAM,mBAAmB,CAAC;AACjC,IAAI,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE;AAC5C,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;AACtC,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa;AAC1C,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtF,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACvD,IAAI;AACJ,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE;AAC7B,QAAQ,MAAM,IAAI,GAAG,CAAC,WAAW,GAAG,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,CAAC,WAAW,CAAC,CAAC;AACnG,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AAC9B;AACA,YAAY,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACnE,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;AAChD;AACA,aAAa,SAAS,CAAC,MAAM;AAC7B,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE;AAC/D,gBAAgB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACrC,oBAAoB,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3E,oBAAoB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1C,gBAAgB;AAChB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1C,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,IAAI,WAAW,CAAC,eAAe,EAAE;AACrC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7B,YAAY,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,eAAe,CAAC;AAClE,QAAQ;AACR,IAAI;AACJ,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;AACxC,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/O,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAChP;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,WAAW;AACzC,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC;AACzH,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACtDZ,MAAM,oBAAoB,SAAS,KAAK,CAAC;AAChD,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;AAC/B,QAAQ,KAAK,CAAC,OAAO,CAAC;AACtB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,IAAI,GAAG,sBAAsB;AAC1C,IAAI;AACJ;AACO,MAAM,uBAAuB,SAAS,KAAK,CAAC;AACnD,IAAI,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;AAC/B,QAAQ,KAAK,CAAC,OAAO,CAAC;AACtB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,IAAI,CAAC,IAAI,GAAG,yBAAyB;AAC7C,IAAI;AACJ;;ACTY,MAAC,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK;AACjD,IAAI,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACpD,IAAI,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC1D,IAAI,OAAO,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;AACnD,QAAQ,MAAM,IAAI,GAAG,CAAC,gBAAgB,GAAG,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACvH,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,cAAc,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;AACvF,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,YAAY,MAAM,IAAI,oBAAoB,CAAC,CAAC,4EAA4E,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,4CAA4C,CAAC,EAAE;AACzL,gBAAgB,WAAW,EAAE,KAAK,CAAC;AACnC,aAAa,CAAC;AACd,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI,CAAC,CAAC,CAAC;AACP;;ACfY,MAAC,qBAAqB,GAAG,IAAI,cAAc,CAAC,uBAAuB,EAAE;AACjF,IAAI,UAAU,EAAE,MAAM;AACtB,IAAI,OAAO,EAAE,MAAM;AACnB,QAAQ,OAAO,IAAI,0BAA0B,EAAE;AAC/C,IAAI;AACJ,CAAC;AACD,MAAM,0BAA0B,CAAC;AACjC,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB,QAAQ,OAAO,EAAE,CAAC,EAAE,CAAC;AACrB,IAAI;AACJ;;ACZO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,IAAI,IAAI,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,KAAK;AACzB,IAAI;AACJ,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,OAAO;AAC3B,IAAI;AACJ,IAAI,IAAI,WAAW,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,YAAY;AAChC,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;AACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI;AAC3B,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC,QAAQ,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI;AACjC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM;AACrC,QAAQ,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW;AAC/C,IAAI;AACJ;AACU,IAAC;AACX,CAAC,UAAU,gBAAgB,EAAE;AAC7B,IAAI,gBAAgB,CAAC,eAAe,CAAC,GAAG,eAAe;AACvD,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,iBAAiB;AAC3D,IAAI,gBAAgB,CAAC,cAAc,CAAC,GAAG,cAAc;AACrD,IAAI,gBAAgB,CAAC,YAAY,CAAC,GAAG,YAAY;AACjD,IAAI,gBAAgB,CAAC,SAAS,CAAC,GAAG,SAAS;AAC3C,IAAI,gBAAgB,CAAC,WAAW,CAAC,GAAG,WAAW;AAC/C,CAAC,EAAE,gBAAgB,KAAK,gBAAgB,GAAG,EAAE,CAAC,CAAC;;AChBxC,MAAM,iBAAiB,CAAC;AAC/B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC5D,QAAQ,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,8BAA8B,CAAC;AAC1E,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC7D,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACvD,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACrD,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC/D,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,gBAAgB,CAAC,eAAe,CAAC;AAC3E,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACtE;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC;AAClD,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5E,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC;AAC3D,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAChF,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC;AAC7D,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACpF,QAAQ,IAAI,CAAC,yBAAyB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC;AAClE,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC9F,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC;AACzD,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;AAC3G,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC;AACtD,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;AACrG,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AAClE,YAAY,MAAM,MAAM,GAAG,MAAM,KAAK,gBAAgB,CAAC,aAAa,IAAI,MAAM,KAAK,gBAAgB,CAAC,UAAU;AAC9G,YAAY,OAAO,MAAM;AACzB,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3B;AACA,QAAQ,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,KAAK;AACvF,YAAY,IAAI,OAAO,EAAE;AACzB,gBAAgB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACtH,YAAY;AACZ,YAAY,OAAO,IAAI,CAAC,gBAAgB;AACxC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,gBAAgB,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACvH,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC;AAC9C,IAAI,IAAI,IAAI,GAAG;AACf,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AAC7C,QAAQ,IAAI,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC7D,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACtD,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK;AAC5C,IAAI;AACJ,IAAI,IAAI,MAAM,GAAG;AACjB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AAC7C,QAAQ,IAAI,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACjE,YAAY,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC1D,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK;AAC9C,IAAI;AACJ,IAAI,IAAI,QAAQ,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAC3D,IAAI;AACJ,IAAI,IAAI,WAAW,GAAG;AACtB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AAC7C,QAAQ,IAAI,OAAO,EAAE,WAAW,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE;AAC3E,YAAY,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACpE,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK;AACnD,IAAI;AACJ,IAAI,IAAI,aAAa,GAAG;AACxB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAChE,IAAI;AACJ,IAAI,IAAI,WAAW,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;AAClD,IAAI;AACJ,IAAI,IAAI,QAAQ,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;AAC/C,IAAI;AACJ,IAAI,MAAM,cAAc,GAAG;AAC3B,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI;AACZ,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACrD,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,IAAI,WAAW,CAAC,IAAI,EAAE;AACtC,oBAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAClE,oBAAoB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACpE,oBAAoB,MAAM,IAAI,CAAC,eAAe,EAAE;AAChD,oBAAoB,MAAM,IAAI,CAAC,YAAY,EAAE;AAC7C,oBAAoB,MAAM,IAAI,CAAC,cAAc,EAAE;AAC/C,gBAAgB;AAChB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AAC/D,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AAC3D,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,MAAM,CAAC,WAAW,EAAE;AAC9B,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI;AACZ;AACA;AACA;AACA,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC;AAChF,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,yBAAyB,EAAE,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AACrG,YAAY;AACZ,YAAY,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC;AAC7D,YAAY,IAAI,CAAC,MAAM;AACvB,gBAAgB;AAChB,YAAY,IAAI,MAAM,EAAE,OAAO,EAAE;AACjC,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9D,gBAAgB,IAAI,CAAC,UAAU,CAAC;AAChC,oBAAoB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;AACxD,oBAAoB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;AAC1D,oBAAoB,QAAQ,EAAE,WAAW,CAAC,QAAQ;AAClD,oBAAoB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;AAC1C,oBAAoB,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW;AACzD,oBAAoB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM;AAC/C,oBAAoB,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS;AACrD,oBAAoB,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI;AACzD,iBAAiB,CAAC;AAClB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC;AAClE,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,4BAA4B,CAAC,CAAC;AAC/D,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC;AACjD,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC;AAC9D,YAAY,MAAM,KAAK;AACvB,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,YAAY,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACnD,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,WAAW,CAAC,MAAM,EAAE;AAC9B,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI;AACZ,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ;AAChE,YAAY,IAAI,CAAC,YAAY,EAAE;AAC/B,gBAAgB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;AACrD,YAAY;AACZ,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC;AACxE,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAChH,YAAY;AACZ,YAAY,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;AAC7D,YAAY,IAAI,MAAM,EAAE,OAAO,EAAE;AACjC,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9D,gBAAgB,IAAI,CAAC,UAAU,CAAC;AAChC,oBAAoB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;AACxD,oBAAoB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;AAC1D,oBAAoB,QAAQ,EAAE,YAAY;AAC1C,oBAAoB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;AAC1C,oBAAoB,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW;AACzD,oBAAoB,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM;AAC/C,oBAAoB,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS;AACrD,oBAAoB,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI;AACzD,iBAAiB,CAAC;AAClB,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAChE;AACA,gBAAgB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE;AACrD,oBAAoB,MAAM,IAAI,CAAC,cAAc,EAAE;AAC/C,gBAAgB;AAChB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC;AAClE,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,4BAA4B,CAAC,CAAC;AAC/D,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC;AACvD,YAAY,MAAM,KAAK;AACvB,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,YAAY,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;AACzD,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACrC,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAQ,IAAI;AACZ,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACrD,YAAY,IAAI,WAAW,EAAE,QAAQ,EAAE;AACvC,gBAAgB,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;AACrF,gBAAgB,IAAI,QAAQ,EAAE;AAC9B,oBAAoB,IAAI;AACxB,wBAAwB,MAAM,QAAQ,CAAC,OAAO,EAAE;AAChD,oBAAoB;AACpB,oBAAoB,OAAO,KAAK,EAAE,EAAE;AACpC,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE;AACxC,YAAY,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACjF,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AACxD,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,YAAY,GAAG;AACzB,QAAQ,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC1C,QAAQ,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAK;AACtD,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACrD,YAAY,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE;AAC5D,gBAAgB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC;AACrE,gBAAgB,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC/D,gBAAgB;AAChB,YAAY;AACZ,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC;AAChF,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,gBAAgB,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,WAAW,CAAC,QAAQ,CAAC;AACzF,gBAAgB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,yBAAyB,EAAE,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;AACnG,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI;AAChB,gBAAgB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7E,gBAAgB,IAAI,MAAM,CAAC,OAAO,EAAE;AACpC,oBAAoB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;AAC3D,oBAAoB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;AAChD,oBAAoB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC;AACrD,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC;AACzD,oBAAoB,IAAI,CAAC,YAAY,EAAE;AACvC,oBAAoB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9D,oBAAoB,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC7D,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,KAAK,EAAE;AAC1B,gBAAgB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;AACnE,gBAAgB,IAAI,CAAC,YAAY,EAAE;AACnC,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC1D,gBAAgB,MAAM,CAAC,KAAK,CAAC;AAC7B,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,MAAM,eAAe,GAAG;AAC5B,QAAQ,IAAI;AACZ,YAAY,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACtG,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;AAC3D,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC;AAC9D,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5C,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,YAAY,GAAG;AACzB,QAAQ,IAAI;AACZ,YAAY,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AAChG,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;AACrD,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAC3D,YAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;AACzC,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,cAAc,GAAG;AAC3B;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACxB,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC;AAC9D,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACrD;AACA,QAAQ,UAAU,CAAC,MAAM;AACzB,YAAY,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACnE,QAAQ,CAAC,EAAE,GAAG,CAAC;AACf,IAAI;AACJ,IAAI,UAAU,CAAC,MAAM,EAAE;AACvB,QAAQ,MAAM,WAAW,GAAG;AAC5B,YAAY,WAAW,EAAE,MAAM,CAAC,WAAW;AAC3C,YAAY,YAAY,EAAE,MAAM,CAAC,YAAY;AAC7C,YAAY,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACrC,YAAY,IAAI,EAAE,MAAM,CAAC,IAAI;AAC7B,YAAY,WAAW,EAAE,MAAM,CAAC,WAAW;AAC3C,YAAY,MAAM,EAAE,MAAM,CAAC,MAAM;AACjC,YAAY,SAAS,EAAE,MAAM,CAAC,SAAS;AACvC,YAAY,OAAO,EAAE,MAAM,CAAC,OAAO;AACnC,SAAS;AACT;AACA,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;AACzB,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACrD,QAAQ;AACR,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE;AAC3B,YAAY,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACzD,QAAQ;AACR,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE;AAChC,YAAY,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACnE,QAAQ;AACR,QAAQ,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACxF,IAAI;AACJ,IAAI,WAAW,CAAC,QAAQ,EAAE;AAC1B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACjD,QAAQ,MAAM,cAAc,GAAG,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE;AAC3D,QAAQ,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;AACvC,IAAI;AACJ,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI;AACZ,YAAY,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC;AACzF,YAAY,IAAI,iBAAiB,EAAE;AACnC,gBAAgB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACjE,gBAAgB,OAAO,WAAW;AAClC,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,WAAW,CAAC;AAClE,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,YAAY,GAAG;AACnB;AACA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C;AACA,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5C;AACA,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD;AACA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AACxC;AACA,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;AACrC;AACA,QAAQ,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,WAAW,CAAC;AAC9D,IAAI;AACJ,IAAI,SAAS,CAAC,GAAG,IAAI,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC;AAC7G,IAAI;AACJ,IAAI,gBAAgB,CAAC,GAAG,IAAI,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AACzG,IAAI;AACJ,IAAI,QAAQ,GAAG;AACf,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACjD,QAAQ,OAAO,WAAW,EAAE,WAAW;AACvC,IAAI;AACJ,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AAC/C,QAAQ,IAAI,WAAW,IAAI,WAAW,EAAE,WAAW,IAAI,WAAW,CAAC,SAAS,EAAE;AAC9E,YAAY,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;AACjE,YAAY,IAAI,aAAa,GAAG,IAAI,IAAI,EAAE,EAAE;AAC5C;AACA,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,iBAAiB,CAAC;AACrC,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;AAC/B,YAAY,WAAW,EAAE,IAAI,CAAC,WAAW;AACzC,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACrL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AAC5H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACxXN,MAAM,sBAAsB,CAAC;AACpC,IAAI,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE;AAC5C,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;AACtC,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa;AAC1C,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtF,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACvD,IAAI;AACJ,IAAI,IAAI,UAAU,CAAC,cAAc,EAAE;AACnC,QAAQ,MAAM,IAAI,GAAG,CAAC,cAAc,GAAG,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG,CAAC,cAAc,CAAC,CAAC;AAC/G,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AAC9B;AACA,YAAY,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACnE,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;AAChD,aAAa,SAAS,CAAC,CAAC,YAAY,KAAK;AACzC,YAAY,IAAI,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,EAAE;AACxE,gBAAgB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACrC,oBAAoB,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3E,oBAAoB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1C,gBAAgB;AAChB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1C,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,IAAI,cAAc,CAAC,eAAe,EAAE;AACxC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AAC7B,YAAY,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,eAAe,CAAC;AAClE,QAAQ;AACR,IAAI;AACJ,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;AACxC,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAClP,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,sBAAsB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAClQ;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAE,CAAC;AACjI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,cAAc;AAC5C,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC;AAC5H,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACjDP,MAAC,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK;AACpD,IAAI,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACpD,IAAI,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAC3D,IAAI,OAAO,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK;AACrE,QAAQ,MAAM,IAAI,GAAG,CAAC,cAAc,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG,CAAC,cAAc,CAAC;AAC7G,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,cAAc,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;AACnF,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,YAAY,MAAM,IAAI,oBAAoB,CAAC,CAAC,qCAAqC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,oEAAoE,CAAC,EAAE;AAC1K,gBAAgB,WAAW,EAAE,KAAK,CAAC;AACnC,aAAa,CAAC;AACd,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI,CAAC,CAAC,CAAC;AACP;;ACjBO,MAAM,sCAAsC,CAAC;AACpD,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE;AACjC,IAAI;AACJ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;AACvC,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AACvC,YAAY,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACvC,QAAQ;AACR,QAAQ,MAAM,KAAK,GAAG;AACtB,YAAY,IAAI;AAChB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW,EAAE;AACzB,SAAS;AACT,QAAQ,MAAM,OAAO,GAAG,IAAI,mCAAmC,CAAC,IAAI,EAAE,KAAK,CAAC;AAC5E,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AACxC,QAAQ,OAAO,OAAO;AACtB,IAAI;AACJ,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AACnE,IAAI;AACJ,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,IAAI;AACJ,IAAI,cAAc,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC,IAAI;AACJ;AACO,MAAM,mCAAmC,CAAC;AACjD,IAAI,IAAI,KAAK,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE;AAChC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK;AAC3B,IAAI;AACJ,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;AAC5C,QAAQ,MAAM,UAAU,GAAG;AAC3B,YAAY,IAAI;AAChB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,QAAQ,EAAE;AACtB,SAAS;AACT,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAChD,QAAQ,OAAO,IAAI,8BAA8B,CAAC,IAAI,EAAE,UAAU,CAAC;AACnE,IAAI;AACJ,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,OAAO;AAC3B,IAAI;AACJ,IAAI,cAAc,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACO,MAAM,8BAA8B,CAAC;AAC5C,IAAI,WAAW,CAAC,YAAY,EAAE,UAAU,EAAE;AAC1C,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY;AACxC,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,IAAI;AACJ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;AACvC,QAAQ,MAAM,UAAU,GAAG;AAC3B,YAAY,IAAI;AAChB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,QAAQ,EAAE;AACtB,SAAS;AACT,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACjD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,YAAY;AAChC,IAAI;AACJ;;ACvEY,MAAC,kCAAkC,GAAG,IAAI,cAAc,CAAC,oCAAoC,EAAE;AAC3G,IAAI,UAAU,EAAE,MAAM;AACtB,IAAI,OAAO,EAAE,MAAM;AACnB,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ,CAAC;AACM,MAAM,8BAA8B,CAAC;AAC5C,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,kCAAkC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvF,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;AACzB,IAAI;AACJ,IAAI,MAAM,IAAI,GAAG;AACjB,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;AACxB,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,OAAO,GAAG,IAAI,sCAAsC,EAAE;AACpE,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC3C,YAAY,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AACnD,gBAAgB,IAAI,QAAQ,YAAY,OAAO,EAAE;AACjD;AACA,oBAAoB,MAAM,gBAAgB,GAAG,MAAM,QAAQ;AAC3D,oBAAoB,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1D,gBAAgB;AAChB,qBAAqB;AACrB;AACA,oBAAoB,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;AAClD,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,mBAAmB,EAAE;AAClD,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;AACzB,QAAQ,MAAM,IAAI,CAAC,IAAI,EAAE;AACzB,IAAI;AACJ,IAAI,MAAM,SAAS,GAAG;AACtB,QAAQ,MAAM,IAAI,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE;AAC/B,IAAI;AACJ,IAAI,MAAM,cAAc,GAAG;AAC3B,QAAQ,MAAM,IAAI,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE;AAC5D,IAAI;AACJ,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE;AACzB,QAAQ,MAAM,IAAI,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI;AAC7D,IAAI;AACJ,IAAI,MAAM,aAAa,CAAC,IAAI,EAAE;AAC9B,QAAQ,MAAM,IAAI,CAAC,IAAI,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI;AAC9H,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAClM,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AACzK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,UAAU,EAAE,CAAC;AACzI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;AACzC,SAAS,CAAC,EAAE,CAAC;;AC1DN,MAAM,mCAAmC,CAAC;AACjD,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACvD,IAAI;AACJ,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;AAC3B,QAAQ,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE;AACvC;AACA;AACA;AACA;AACA;AACA,YAAY,KAAK,EAAE,CAAC,GAAG,WAAW,KAAK;AACvC,gBAAgB,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;AACpE,YAAY,CAAC;AACb;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ,EAAE,CAAC,GAAG,WAAW,KAAK;AAC1C,gBAAgB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC9E,YAAY,CAAC;AACb,SAAS,CAAC;AACV,IAAI;AACJ;;ACtBY,MAAC,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK;AAC9C,IAAI,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACpD,IAAI,OAAO,cAAc,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK;AACnF,QAAQ,IAAI,KAAK,EAAE;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,MAAM,IAAI,uBAAuB,CAAC,CAAC,gKAAgK,CAAC,EAAE;AAC9M,YAAY,WAAW,EAAE,KAAK,CAAC,GAAG;AAClC,SAAS,CAAC;AACV,IAAI,CAAC,CAAC,CAAC;AACP;;ACRO,SAAS,kBAAkB,CAAC,OAAO,EAAE;AAC5C,IAAI,OAAO,YAAY;AACvB,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,CAAC,cAAc,EAAE;AAC1C,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AAChC,QAAQ;AACR,IAAI,CAAC;AACL;AACO,MAAM,aAAa,CAAC;AAC3B,IAAI,OAAO,OAAO,CAAC,OAAO,EAAE;AAC5B,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,aAAa;AACnC,YAAY,SAAS,EAAE;AACvB,gBAAgB,IAAI,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC;AAC9C,gBAAgB;AAChB,oBAAoB,OAAO,EAAE,sBAAsB;AACnD,oBAAoB,UAAU,EAAE,CAAC,QAAQ,KAAK,MAAM;AACpD,wBAAwB,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;AACzE,oBAAoB,CAAC;AACrB,oBAAoB,IAAI,EAAE,CAAC,8BAA8B,CAAC;AAC1D,oBAAoB,KAAK,EAAE,IAAI;AAC/B,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,IAAI;AACJ,IAAI,OAAO,QAAQ,CAAC,OAAO,EAAE;AAC7B,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,aAAa;AACnC,YAAY,SAAS,EAAE;AACvB,gBAAgB,IAAI,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC;AAC9C,gBAAgB;AAChB,oBAAoB,OAAO,EAAE,sBAAsB;AACnD,oBAAoB,UAAU,EAAE,CAAC,QAAQ,KAAK,MAAM;AACpD,wBAAwB,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;AACzE,oBAAoB,CAAC;AACrB,oBAAoB,IAAI,EAAE,CAAC,8BAA8B,CAAC;AAC1D,oBAAoB,KAAK,EAAE,IAAI;AAC/B,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,WAAW,CAAC,SAAS,EAAE;AAC3B,QAAQ,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK;AAClC,YAAY,CAAC,EAAE;AACf,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChO,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;AACtP,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE;AAC1I,YAAY,qBAAqB,CAAC,MAAM;AACxC,gBAAgB,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACnF,gBAAgB,OAAO,aAAa,EAAE;AACtC,YAAY,CAAC,CAAC;AACd,SAAS,EAAE,CAAC,CAAC;AACb;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACxH,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE,EAAE;AAC/B,oBAAoB,OAAO,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,CAAC;AAC1E,oBAAoB,YAAY,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,CAAC;AAC/E,oBAAoB,SAAS,EAAE;AAC/B,wBAAwB,qBAAqB,CAAC,MAAM;AACpD,4BAA4B,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC/F,4BAA4B,OAAO,aAAa,EAAE;AAClD,wBAAwB,CAAC,CAAC;AAC1B,qBAAqB;AACrB,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnE,oBAAoB,IAAI,EAAE;AAC1B,iBAAiB,EAAE;AACnB,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,sBAAsB;AACjD,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;;ACpFjB,MAAM,eAAe,CAAC;AAC7B;;ACDA;AACA;AACA;AACA;AACO,MAAM,OAAO,CAAC;AACrB;AACA;AACA;AACA,IAAI,OAAO,QAAQ,CAAC,KAAK,EAAE;AAC3B,QAAQ,IAAI;AACZ,YAAY,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjD,YAAY,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAC1E,YAAY,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM;AAC9D,iBAAiB,KAAK,CAAC,EAAE;AACzB,iBAAiB,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/E,iBAAiB,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,YAAY,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAC1C,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;AAChD,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,QAAQ,CAAC;AACtB;AACA;AACA;AACA,IAAI,OAAO,oBAAoB,CAAC,MAAM,EAAE;AACxC,QAAQ,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC;AAC5C,QAAQ,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC;AACrC,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC1C,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,qBAAqB,CAAC,YAAY,EAAE;AACrD,QAAQ,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;AACzC,QAAQ,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;AACjD,QAAQ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;AAClE,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3D,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,eAAe,CAAC,KAAK,EAAE;AAClC,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;AACjD,aAAa,OAAO,CAAC,KAAK,EAAE,GAAG;AAC/B,aAAa,OAAO,CAAC,KAAK,EAAE,GAAG;AAC/B,aAAa,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AAC9B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,QAAQ,CAAC;AACtB;AACA;AACA;AACA,IAAI,OAAO,qBAAqB,CAAC,aAAa,EAAE;AAChD,QAAQ,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AACvE,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,qBAAqB,CAAC,eAAe,EAAE;AAClD,QAAQ,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;AAC1E,IAAI;AACJ;AACA;;AC3EA;AACA;AACA;;;;"}
1
+ {"version":3,"file":"acorex-platform-auth.mjs","sources":["../tmp-esm2022/auth/lib/application/application.loader.js","../tmp-esm2022/auth/lib/tenant/tenant.loader.js","../tmp-esm2022/auth/lib/auth-registry.service.js","../tmp-esm2022/auth/lib/feature/feature.loader.js","../tmp-esm2022/auth/lib/feature/feature.directive.js","../tmp-esm2022/auth/lib/errors.types.js","../tmp-esm2022/auth/lib/feature/feature.guard.js","../tmp-esm2022/auth/lib/permission/permission.loader.js","../tmp-esm2022/auth/lib/session.types.js","../tmp-esm2022/auth/lib/session.service.js","../tmp-esm2022/auth/lib/permission/permission.directive.js","../tmp-esm2022/auth/lib/permission/permission.guard.js","../tmp-esm2022/auth/lib/permission/permission-definition.builder.js","../tmp-esm2022/auth/lib/permission/permission-definition.service.js","../tmp-esm2022/auth/lib/permission/permission-evaluator-scope.provider.js","../tmp-esm2022/auth/lib/auth.guard.js","../tmp-esm2022/auth/lib/auth.module.js","../tmp-esm2022/auth/lib/auth.strategy.js","../tmp-esm2022/auth/lib/auth.utils.js","../tmp-esm2022/auth/acorex-platform-auth.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { of } from 'rxjs';\nexport const AXP_APPLICATION_LOADER = new InjectionToken('AXP_APPLICATION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPApplicationDefaultLoader();\n },\n});\nclass AXPApplicationDefaultLoader {\n getList(context) {\n return of([\n {\n id: '1',\n name: 'default-app',\n title: 'Default Application',\n version: '1.0.0',\n editionName: 'Standard',\n features: [],\n },\n {\n id: '2',\n name: 'default-app',\n title: 'Default Application',\n version: '1.0.0',\n editionName: 'Standard',\n features: [],\n },\n ]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24ubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9hdXRoL3NyYy9saWIvYXBwbGljYXRpb24vYXBwbGljYXRpb24ubG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBdUIsd0JBQXdCLEVBQUU7SUFDdkcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLE9BQU8sSUFBSSwyQkFBMkIsRUFBRSxDQUFDO0lBQzNDLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLDJCQUEyQjtJQUMvQixPQUFPLENBQUMsT0FBMEI7UUFDaEMsT0FBTyxFQUFFLENBQUM7WUFDUjtnQkFDRSxFQUFFLEVBQUUsR0FBRztnQkFDUCxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsS0FBSyxFQUFFLHFCQUFxQjtnQkFDNUIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLFdBQVcsRUFBRSxVQUFVO2dCQUN2QixRQUFRLEVBQUUsRUFBRTthQUNiO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLEdBQUc7Z0JBQ1AsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEtBQUssRUFBRSxxQkFBcUI7Z0JBQzVCLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixXQUFXLEVBQUUsVUFBVTtnQkFDdkIsUUFBUSxFQUFFLEVBQUU7YUFDYjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhQU2Vzc2lvbkNvbnRleHQgfSBmcm9tICcuLi9zZXNzaW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9hcHBsaWNhdGlvbi50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQXBwbGljYXRpb25Mb2FkZXIge1xuICBnZXRMaXN0KGNvbnRleHQ6IEFYUFNlc3Npb25Db250ZXh0KTogT2JzZXJ2YWJsZTxBWFBBcHBsaWNhdGlvbltdPjtcbn1cblxuZXhwb3J0IGNvbnN0IEFYUF9BUFBMSUNBVElPTl9MT0FERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQQXBwbGljYXRpb25Mb2FkZXI+KCdBWFBfQVBQTElDQVRJT05fTE9BREVSJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IEFYUEFwcGxpY2F0aW9uRGVmYXVsdExvYWRlcigpO1xuICB9LFxufSk7XG5cbmNsYXNzIEFYUEFwcGxpY2F0aW9uRGVmYXVsdExvYWRlciBpbXBsZW1lbnRzIEFYUEFwcGxpY2F0aW9uTG9hZGVyIHtcbiAgZ2V0TGlzdChjb250ZXh0OiBBWFBTZXNzaW9uQ29udGV4dCk6IE9ic2VydmFibGU8QVhQQXBwbGljYXRpb25bXT4ge1xuICAgIHJldHVybiBvZihbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIG5hbWU6ICdkZWZhdWx0LWFwcCcsXG4gICAgICAgIHRpdGxlOiAnRGVmYXVsdCBBcHBsaWNhdGlvbicsXG4gICAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICAgIGVkaXRpb25OYW1lOiAnU3RhbmRhcmQnLFxuICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJzInLFxuICAgICAgICBuYW1lOiAnZGVmYXVsdC1hcHAnLFxuICAgICAgICB0aXRsZTogJ0RlZmF1bHQgQXBwbGljYXRpb24nLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgICBlZGl0aW9uTmFtZTogJ1N0YW5kYXJkJyxcbiAgICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxufVxuIl19","import { InjectionToken } from '@angular/core';\nimport { of } from 'rxjs';\nexport const AXP_TENANT_LOADER = new InjectionToken('AXP_TENANT_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPTenantDefaultLoader();\n },\n});\nclass AXPTenantDefaultLoader {\n getList(context) {\n return of([\n {\n id: '1',\n name: 'default-tenant',\n title: 'Default Tenant',\n },\n ]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LmxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL3RlbmFudC90ZW5hbnQubG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBa0IsbUJBQW1CLEVBQUU7SUFDeEYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLE9BQU8sSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RDLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLHNCQUFzQjtJQUUxQixPQUFPLENBQUMsT0FBMEI7UUFDaEMsT0FBTyxFQUFFLENBQUM7WUFDUjtnQkFDRSxFQUFFLEVBQUUsR0FBRztnQkFDUCxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsZ0JBQWdCO2FBQ3hCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBUZW5hbnQgfSBmcm9tICcuL3RlbmFudC50eXBlcyc7XG5pbXBvcnQgeyBBWFBTZXNzaW9uQ29udGV4dCB9IGZyb20gJy4uL3Nlc3Npb24udHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFRlbmFudExvYWRlciB7XG4gIGdldExpc3QoY29udGV4dDogQVhQU2Vzc2lvbkNvbnRleHQpOiBPYnNlcnZhYmxlPEFYUFRlbmFudFtdPjtcbn1cblxuZXhwb3J0IGNvbnN0IEFYUF9URU5BTlRfTE9BREVSID0gbmV3IEluamVjdGlvblRva2VuPEFYUFRlbmFudExvYWRlcj4oJ0FYUF9URU5BTlRfTE9BREVSJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICByZXR1cm4gbmV3IEFYUFRlbmFudERlZmF1bHRMb2FkZXIoKTtcbiAgfSxcbn0pO1xuXG5jbGFzcyBBWFBUZW5hbnREZWZhdWx0TG9hZGVyIGltcGxlbWVudHMgQVhQVGVuYW50TG9hZGVyIHtcblxuICBnZXRMaXN0KGNvbnRleHQ6IEFYUFNlc3Npb25Db250ZXh0KTogT2JzZXJ2YWJsZTxBWFBUZW5hbnRbXT4ge1xuICAgIHJldHVybiBvZihbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIG5hbWU6ICdkZWZhdWx0LXRlbmFudCcsXG4gICAgICAgIHRpdGxlOiAnRGVmYXVsdCBUZW5hbnQnLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxufVxuIl19","import { Injectable, Injector } from \"@angular/core\";\nimport * as i0 from \"@angular/core\";\nexport class AXPAuthStrategyRegistryService {\n constructor(injector) {\n this.strategies = new Map();\n this.injector = injector;\n }\n register(...plugins) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const strategy = childInjector.get(t);\n if (strategy) {\n this.strategies.set(strategy.name, strategy);\n }\n });\n }\n get(strategyKey) {\n return this.strategies.get(strategyKey);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPAuthStrategyRegistryService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPAuthStrategyRegistryService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPAuthStrategyRegistryService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [{ type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1yZWdpc3RyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9hdXRoL3NyYy9saWIvYXV0aC1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU1yRCxNQUFNLE9BQU8sOEJBQThCO0lBS3pDLFlBQVksUUFBa0I7UUFKdEIsZUFBVSxHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO1FBS3RELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBRyxPQUFzQztRQUNoRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDckgsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEdBQUcsQ0FBQyxXQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7K0dBckJVLDhCQUE4QjttSEFBOUIsOEJBQThCLGNBRjdCLE1BQU07OzRGQUVQLDhCQUE4QjtrQkFIMUMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBWFBBdXRoU3RyYXRlZ3kgfSBmcm9tIFwiLi9hdXRoLnN0cmF0ZWd5XCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFYUEF1dGhTdHJhdGVneVJlZ2lzdHJ5U2VydmljZSB7XG4gIHByaXZhdGUgc3RyYXRlZ2llcyA9IG5ldyBNYXA8c3RyaW5nLCBBWFBBdXRoU3RyYXRlZ3k+KCk7XG5cbiAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3I7XG5cbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICB9XG5cbiAgcmVnaXN0ZXIoLi4ucGx1Z2luczogKG5ldyAoKSA9PiBBWFBBdXRoU3RyYXRlZ3kpW10pIHtcbiAgICBwbHVnaW5zLmZvckVhY2godCA9PiB7XG4gICAgICBjb25zdCBjaGlsZEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiB0LCB1c2VDbGFzczogdCwgZGVwczogW10gfV0sIHBhcmVudDogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gY2hpbGRJbmplY3Rvci5nZXQodCk7XG4gICAgICBpZiAoc3RyYXRlZ3kpIHtcbiAgICAgICAgdGhpcy5zdHJhdGVnaWVzLnNldChzdHJhdGVneS5uYW1lLCBzdHJhdGVneSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldChzdHJhdGVneUtleTogc3RyaW5nKTogQVhQQXV0aFN0cmF0ZWd5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdHJhdGVnaWVzLmdldChzdHJhdGVneUtleSk7XG4gIH1cbn0iXX0=","import { InjectionToken } from '@angular/core';\nimport { of } from 'rxjs';\nexport const AXP_FEATURE_LOADER = new InjectionToken('AXP_FEATURE_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPFeatureDefaultLoader();\n },\n});\nclass AXPFeatureDefaultLoader {\n getList(context) {\n return of([]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9mZWF0dXJlL2ZlYXR1cmUubG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBbUIsb0JBQW9CLEVBQUU7SUFDM0YsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLE9BQU8sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLHVCQUF1QjtJQUMzQixPQUFPLENBQUMsT0FBMEI7UUFDaEMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBGZWF0dXJlIH0gZnJvbSAnLi9mZWF0dXJlLnR5cGVzJztcbmltcG9ydCB7IEFYUFNlc3Npb25Db250ZXh0IH0gZnJvbSAnLi4vc2Vzc2lvbi50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRmVhdHVyZUxvYWRlciB7XG4gIGdldExpc3QoY29udGV4dDogQVhQU2Vzc2lvbkNvbnRleHQpOiBPYnNlcnZhYmxlPEFYUEZlYXR1cmVbXT47XG59XG5cbmV4cG9ydCBjb25zdCBBWFBfRkVBVFVSRV9MT0FERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhQRmVhdHVyZUxvYWRlcj4oJ0FYUF9GRUFUVVJFX0xPQURFUicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBBWFBGZWF0dXJlRGVmYXVsdExvYWRlcigpO1xuICB9LFxufSk7XG5cbmNsYXNzIEFYUEZlYXR1cmVEZWZhdWx0TG9hZGVyIGltcGxlbWVudHMgQVhQRmVhdHVyZUxvYWRlciB7XG4gIGdldExpc3QoY29udGV4dDogQVhQU2Vzc2lvbkNvbnRleHQpOiBPYnNlcnZhYmxlPEFYUEZlYXR1cmVbXT4ge1xuICAgIHJldHVybiBvZihbXSk7XG4gIH1cbn1cbiJdfQ==","import { Directive, Input, TemplateRef, ViewContainerRef, inject, signal } from '@angular/core';\nimport { AXPSessionService } from '../session.service';\nimport * as i0 from \"@angular/core\";\nexport class AXPFeatureDirective {\n constructor(templateRef, viewContainer) {\n this.templateRef = templateRef;\n this.viewContainer = viewContainer;\n this.hasView = signal(false, ...(ngDevMode ? [{ debugName: \"hasView\" }] : []));\n this.sessionService = inject(AXPSessionService);\n }\n set feature(featureKeys) {\n const keys = !featureKeys ? [] : (Array.isArray(featureKeys) ? featureKeys : [featureKeys]);\n if (keys.length == 0) {\n // If featureKey is null or empty, decide the default behavior here\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n return;\n }\n this.subscription = this.sessionService.features$\n //.pipe(first())\n .subscribe(() => {\n if (this.sessionService.isFeatureEnabled(...keys)) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n }\n }\n else {\n this.viewContainer.clear();\n this.hasView.set(false);\n }\n });\n }\n set featureElse(elseTemplateRef) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(elseTemplateRef);\n }\n }\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPFeatureDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.12\", type: AXPFeatureDirective, isStandalone: false, selector: \"[feature]\", inputs: { feature: \"feature\", featureElse: \"featureElse\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPFeatureDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[feature]',\n standalone: false\n }]\n }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }], propDecorators: { feature: [{\n type: Input\n }], featureElse: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9mZWF0dXJlL2ZlYXR1cmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQU12RCxNQUFNLE9BQU8sbUJBQW1CO0lBSzlCLFlBQ1UsV0FBNkIsRUFDN0IsYUFBK0I7UUFEL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQU5qQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssbURBQUMsQ0FBQztRQUV4QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBSy9DLENBQUM7SUFFTCxJQUNXLE9BQU8sQ0FBQyxXQUFxQztRQUN0RCxNQUFNLElBQUksR0FBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQixtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUztZQUMvQyxnQkFBZ0I7YUFDZixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQ1csV0FBVyxDQUFDLGVBQWlDO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzsrR0EzQ1UsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSi9CLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFVBQVUsRUFBRSxLQUFLO2lCQUNwQjs7c0JBV0UsS0FBSzs7c0JBd0JMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZmlyc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbi5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZmVhdHVyZV0nLFxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIEFYUEZlYXR1cmVEaXJlY3RpdmUge1xuICBwcml2YXRlIGhhc1ZpZXcgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBzZXNzaW9uU2VydmljZSA9IGluamVjdChBWFBTZXNzaW9uU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWZcbiAgKSB7IH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGZlYXR1cmUoZmVhdHVyZUtleXM6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCkge1xuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gIWZlYXR1cmVLZXlzID8gW10gOiAoQXJyYXkuaXNBcnJheShmZWF0dXJlS2V5cykgPyBmZWF0dXJlS2V5cyA6IFtmZWF0dXJlS2V5c10pO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAvLyBJZiBmZWF0dXJlS2V5IGlzIG51bGwgb3IgZW1wdHksIGRlY2lkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBoZXJlXG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgICAgdGhpcy5oYXNWaWV3LnNldCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmZlYXR1cmVzJFxuICAgICAgLy8ucGlwZShmaXJzdCgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb25TZXJ2aWNlLmlzRmVhdHVyZUVuYWJsZWQoLi4ua2V5cykpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzVmlldygpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xuICAgICAgICAgICAgdGhpcy5oYXNWaWV3LnNldCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgICAgdGhpcy5oYXNWaWV3LnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmZWF0dXJlRWxzZShlbHNlVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAoIXRoaXMuaGFzVmlldygpKSB7XG4gICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGVsc2VUZW1wbGF0ZVJlZik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==","export class AXPUnauthorizedError extends Error {\n constructor(message, data) {\n super(message);\n this.data = data;\n this.name = 'AXPUnauthorizedError';\n }\n}\nexport class AXPUnauthenticatedError extends Error {\n constructor(message, data) {\n super(message);\n this.data = data;\n this.name = 'AXPUnauthenticatedError';\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9hdXRoL3NyYy9saWIvZXJyb3JzLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxLQUFLO0lBQzNDLFlBQVksT0FBZ0IsRUFBUyxJQUErQjtRQUNoRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEa0IsU0FBSSxHQUFKLElBQUksQ0FBMkI7UUFFaEUsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztJQUN2QyxDQUFDO0NBQ0o7QUFHRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsS0FBSztJQUM5QyxZQUFZLE9BQWdCLEVBQVMsSUFBK0I7UUFDaEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRGtCLFNBQUksR0FBSixJQUFJLENBQTJCO1FBRWhFLElBQUksQ0FBQyxJQUFJLEdBQUcseUJBQXlCLENBQUM7SUFDMUMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEFYUFVuYXV0aG9yaXplZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcsIHB1YmxpYyBkYXRhPzogeyByZWRpcmVjdFVybD86IHN0cmluZyB9KSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnQVhQVW5hdXRob3JpemVkRXJyb3InO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgQVhQVW5hdXRoZW50aWNhdGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZywgcHVibGljIGRhdGE/OiB7IHJlZGlyZWN0VXJsPzogc3RyaW5nIH0pIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdBWFBVbmF1dGhlbnRpY2F0ZWRFcnJvcic7XG4gICAgfVxufSJdfQ==","import { inject } from \"@angular/core\";\nimport { AXPSessionService } from \"../session.service\";\nimport { map } from \"rxjs\";\nimport { AXPUnauthorizedError } from \"../errors.types\";\nexport const AXPFeatureGuard = (route, state) => {\n const sessionService = inject(AXPSessionService);\n const requiredFeatures = route.data['requiredFeature'];\n return sessionService.features$.pipe(map(() => {\n const keys = !requiredFeatures ? [] : (Array.isArray(requiredFeatures) ? requiredFeatures : [requiredFeatures]);\n const hasFeature = keys.length == 0 || sessionService.isFeatureEnabled(...keys);\n if (!hasFeature) {\n throw new AXPUnauthorizedError(`Access Denied. You do not have access to this feature. Required feature(s): ${keys.join(', ')}. Please contact support if you need access.`, {\n redirectUrl: state.url\n });\n }\n return true;\n }));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL2ZlYXR1cmUvZmVhdHVyZS5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBcUIsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3ZELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FDMUIsQ0FBQyxLQUE2QixFQUFFLEtBQTBCLEVBQWlDLEVBQUU7SUFDM0YsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUErQixDQUFDO0lBRXJGLE9BQU8sY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2xDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDUCxNQUFNLElBQUksR0FBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDMUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsK0VBQStFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxFQUM1STtnQkFDRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEdBQUc7YUFDdkIsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlRm4sIFJvdXRlclN0YXRlU25hcHNob3QsIFVybFRyZWUgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2Vzc2lvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmaXJzdCwgbWFwIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEFYUFVuYXV0aG9yaXplZEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy50eXBlc1wiO1xuXG5cbmV4cG9ydCBjb25zdCBBWFBGZWF0dXJlR3VhcmQ6IENhbkFjdGl2YXRlRm4gPVxuICAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVXJsVHJlZT4gPT4ge1xuICAgIGNvbnN0IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcbiAgICBjb25zdCByZXF1aXJlZEZlYXR1cmVzID0gcm91dGUuZGF0YVsncmVxdWlyZWRGZWF0dXJlJ10gYXMgKHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCk7XG5cbiAgICByZXR1cm4gc2Vzc2lvblNlcnZpY2UuZmVhdHVyZXMkLnBpcGUoXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9ICFyZXF1aXJlZEZlYXR1cmVzID8gW10gOiAoQXJyYXkuaXNBcnJheShyZXF1aXJlZEZlYXR1cmVzKSA/IHJlcXVpcmVkRmVhdHVyZXMgOiBbcmVxdWlyZWRGZWF0dXJlc10pO1xuICAgICAgICBjb25zdCBoYXNGZWF0dXJlID0ga2V5cy5sZW5ndGggPT0gMCB8fCBzZXNzaW9uU2VydmljZS5pc0ZlYXR1cmVFbmFibGVkKC4uLmtleXMpO1xuICAgICAgICBpZiAoIWhhc0ZlYXR1cmUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQVhQVW5hdXRob3JpemVkRXJyb3IoXG4gICAgICAgICAgICBgQWNjZXNzIERlbmllZC4gWW91IGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGlzIGZlYXR1cmUuIFJlcXVpcmVkIGZlYXR1cmUocyk6ICR7a2V5cy5qb2luKCcsICcpfS4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBpZiB5b3UgbmVlZCBhY2Nlc3MuYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVkaXJlY3RVcmw6IHN0YXRlLnVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICk7XG4gIH07XG4iXX0=","import { InjectionToken } from \"@angular/core\";\nimport { of } from \"rxjs\";\nexport const AXP_PERMISSION_LOADER = new InjectionToken('AXP_PERMISSION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXPPermissionDefaultLoader();\n }\n});\nclass AXPPermissionDefaultLoader {\n getList(context) {\n return of([]);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9wZXJtaXNzaW9uL3Blcm1pc3Npb24ubG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsdUJBQXVCLEVBQUU7SUFDbEcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNWLE9BQU8sSUFBSSwwQkFBMEIsRUFBRSxDQUFDO0lBQzVDLENBQUM7Q0FDSixDQUFDLENBQUM7QUFHSCxNQUFNLDBCQUEwQjtJQUM1QixPQUFPLENBQUMsT0FBMEI7UUFDOUIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQVhQUGVybWlzc2lvbiB9IGZyb20gXCIuL3Blcm1pc3Npb24udHlwZXNcIjtcbmltcG9ydCB7IEFYUFNlc3Npb25Db250ZXh0IH0gZnJvbSBcIi4uL3Nlc3Npb24udHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBWFBQZXJtaXNzaW9uTG9hZGVyIHtcbiAgICBnZXRMaXN0KGNvbnRleHQ6IEFYUFNlc3Npb25Db250ZXh0KTogT2JzZXJ2YWJsZTxBWFBQZXJtaXNzaW9uW10+O1xufVxuXG5leHBvcnQgY29uc3QgQVhQX1BFUk1JU1NJT05fTE9BREVSID0gbmV3IEluamVjdGlvblRva2VuPEFYUFBlcm1pc3Npb25Mb2FkZXI+KCdBWFBfUEVSTUlTU0lPTl9MT0FERVInLCB7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAgIGZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBWFBQZXJtaXNzaW9uRGVmYXVsdExvYWRlcigpO1xuICAgIH1cbn0pO1xuXG5cbmNsYXNzIEFYUFBlcm1pc3Npb25EZWZhdWx0TG9hZGVyIGltcGxlbWVudHMgQVhQUGVybWlzc2lvbkxvYWRlciB7XG4gICAgZ2V0TGlzdChjb250ZXh0OiBBWFBTZXNzaW9uQ29udGV4dCk6IE9ic2VydmFibGU8QVhQUGVybWlzc2lvbltdPiB7XG4gICAgICAgIHJldHVybiBvZihbXSlcbiAgICB9XG59Il19","export class AXPSessionContext {\n get user() {\n return this._user;\n }\n get tenant() {\n return this._tenant;\n }\n get application() {\n return this._application;\n }\n constructor(context) {\n this._user = null;\n this._tenant = null;\n this._application = null;\n this._user = context.user;\n this._tenant = context.tenant;\n this._application = context.application;\n }\n}\nexport var AXPSessionStatus;\n(function (AXPSessionStatus) {\n AXPSessionStatus[\"Authenticated\"] = \"authenticated\";\n AXPSessionStatus[\"Unauthenticated\"] = \"unauthenticated\";\n AXPSessionStatus[\"Unauthorized\"] = \"unauthorized\";\n AXPSessionStatus[\"Authorized\"] = \"authorized\";\n AXPSessionStatus[\"Expired\"] = \"expired\";\n AXPSessionStatus[\"SignedOut\"] = \"signedOut\";\n})(AXPSessionStatus || (AXPSessionStatus = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL3Nlc3Npb24udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxPQUFPLGlCQUFpQjtJQUcxQixJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUdELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBR0QsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWSxPQUlYO1FBbkJPLFVBQUssR0FBbUIsSUFBSSxDQUFDO1FBSzdCLFlBQU8sR0FBcUIsSUFBSSxDQUFDO1FBS2pDLGlCQUFZLEdBQTBCLElBQUksQ0FBQztRQVUvQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM1QyxDQUFDO0NBQ0o7QUFHRCxNQUFNLENBQU4sSUFBWSxnQkFPWDtBQVBELFdBQVksZ0JBQWdCO0lBQ3hCLG1EQUErQixDQUFBO0lBQy9CLHVEQUFtQyxDQUFBO0lBQ25DLGlEQUE2QixDQUFBO0lBQzdCLDZDQUF5QixDQUFBO0lBQ3pCLHVDQUFtQixDQUFBO0lBQ25CLDJDQUF1QixDQUFBO0FBQzNCLENBQUMsRUFQVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQQXBwbGljYXRpb24gfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9hcHBsaWNhdGlvbi50eXBlc1wiO1xuaW1wb3J0IHsgQVhQVGVuYW50IH0gZnJvbSBcIi4vdGVuYW50L3RlbmFudC50eXBlc1wiO1xuaW1wb3J0IHsgQVhQVXNlciB9IGZyb20gXCIuL3VzZXIvdXNlci50eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgQVhQU2Vzc2lvbkNvbnRleHQge1xuXG4gICAgcHJpdmF0ZSBfdXNlcjogQVhQVXNlciB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBnZXQgdXNlcigpOiBBWFBVc2VyIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RlbmFudDogQVhQVGVuYW50IHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGdldCB0ZW5hbnQoKTogQVhQVGVuYW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW5hbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXBwbGljYXRpb246IEFYUEFwcGxpY2F0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGdldCBhcHBsaWNhdGlvbigpOiBBWFBBcHBsaWNhdGlvbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb247XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDoge1xuICAgICAgICB1c2VyOiBBWFBVc2VyIHwgbnVsbCxcbiAgICAgICAgdGVuYW50OiBBWFBUZW5hbnQgfCBudWxsLFxuICAgICAgICBhcHBsaWNhdGlvbjogQVhQQXBwbGljYXRpb24gfCBudWxsLFxuICAgIH0pIHtcbiAgICAgICAgdGhpcy5fdXNlciA9IGNvbnRleHQudXNlcjtcbiAgICAgICAgdGhpcy5fdGVuYW50ID0gY29udGV4dC50ZW5hbnQ7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gY29udGV4dC5hcHBsaWNhdGlvbjtcbiAgICB9XG59XG5cblxuZXhwb3J0IGVudW0gQVhQU2Vzc2lvblN0YXR1cyB7XG4gICAgQXV0aGVudGljYXRlZCA9IFwiYXV0aGVudGljYXRlZFwiLFxuICAgIFVuYXV0aGVudGljYXRlZCA9IFwidW5hdXRoZW50aWNhdGVkXCIsXG4gICAgVW5hdXRob3JpemVkID0gXCJ1bmF1dGhvcml6ZWRcIixcbiAgICBBdXRob3JpemVkID0gXCJhdXRob3JpemVkXCIsXG4gICAgRXhwaXJlZCA9IFwiZXhwaXJlZFwiLFxuICAgIFNpZ25lZE91dCA9IFwic2lnbmVkT3V0XCJcbn0iXX0=","import { AXPBroadcastEventService } from '@acorex/platform/core';\nimport { Injectable, inject } from '@angular/core';\nimport { isEmpty } from 'lodash-es';\nimport { BehaviorSubject, defaultIfEmpty, filter, firstValueFrom, map, shareReplay, switchMap } from 'rxjs';\nimport { AXP_APPLICATION_LOADER } from './application/application.loader';\nimport { AXPAuthStrategyRegistryService } from './auth-registry.service';\nimport { AXP_FEATURE_LOADER } from './feature';\nimport { AXP_PERMISSION_LOADER } from './permission/permission.loader';\nimport { AXPSessionContext, AXPSessionStatus } from './session.types';\nimport { AXP_TENANT_LOADER } from './tenant/tenant.loader';\nimport * as i0 from \"@angular/core\";\nexport class AXPSessionService {\n constructor() {\n this.eventService = inject(AXPBroadcastEventService);\n this.authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\n this.permissionLoader = inject(AXP_PERMISSION_LOADER);\n this.featureLoader = inject(AXP_FEATURE_LOADER);\n this.tenantLoader = inject(AXP_TENANT_LOADER);\n this.applicationLoader = inject(AXP_APPLICATION_LOADER);\n this.status = new BehaviorSubject(AXPSessionStatus.Unauthenticated);\n this.status$ = this.status.asObservable().pipe(shareReplay(1));\n // Add loading state to prevent premature redirects\n this.isLoading = new BehaviorSubject(true);\n this.isLoading$ = this.isLoading.asObservable().pipe(shareReplay(1));\n this.currentUserSubject = new BehaviorSubject(null);\n this.user$ = this.currentUserSubject.asObservable().pipe(shareReplay(1));\n this.currentTenantSubject = new BehaviorSubject(null);\n this.tenant$ = this.currentTenantSubject.asObservable().pipe(shareReplay(1));\n this.currentApplicationSubject = new BehaviorSubject(null);\n this.application$ = this.currentApplicationSubject.asObservable().pipe(shareReplay(1));\n this.permissionsSubject = new BehaviorSubject([]);\n this.permissions$ = this.permissionsSubject.asObservable().pipe(shareReplay(1), defaultIfEmpty([]));\n this.featuresSubject = new BehaviorSubject([]);\n this.features$ = this.featuresSubject.asObservable().pipe(shareReplay(1), defaultIfEmpty([]));\n this.isAuthenticated$ = this.status$.pipe(map((status) => {\n const isAuth = status === AXPSessionStatus.Authenticated || status === AXPSessionStatus.Authorized;\n return isAuth;\n }), shareReplay(1));\n // Add a new observable that considers loading state\n this.isAuthenticatedWithLoading$ = this.isLoading$.pipe(switchMap((loading) => {\n if (loading) {\n return this.isLoading$.pipe(filter((isLoading) => !isLoading), switchMap(() => this.isAuthenticated$));\n }\n return this.isAuthenticated$;\n }), shareReplay(1));\n this.isAuthorized$ = this.status$.pipe(map((status) => status === AXPSessionStatus.Authorized), shareReplay(1));\n }\n static { this.SESSION_KEY = 'AXP_SESSION'; }\n get user() {\n const session = this.getSessionData();\n if (session?.user && !this.currentUserSubject.value) {\n this.currentUserSubject.next(session.user);\n }\n return this.currentUserSubject.value;\n }\n get tenant() {\n const session = this.getSessionData();\n if (session?.tenant && !this.currentTenantSubject.value) {\n this.currentTenantSubject.next(session.tenant);\n }\n return this.currentTenantSubject.value;\n }\n get tenants$() {\n return this.tenantLoader.getList(this.getContext());\n }\n get application() {\n const session = this.getSessionData();\n if (session?.application && !this.currentApplicationSubject.value) {\n this.currentApplicationSubject.next(session.application);\n }\n return this.currentApplicationSubject.value;\n }\n get applications$() {\n return this.applicationLoader.getList(this.getContext());\n }\n get permissions() {\n return this.permissionsSubject.value ?? [];\n }\n get features() {\n return this.featuresSubject.value ?? [];\n }\n async restoreSession() {\n this.isLoading.next(true);\n try {\n const sessionData = this.getSessionData();\n if (sessionData) {\n if (sessionData.user) {\n this.currentUserSubject.next(sessionData.user);\n this.status.next(AXPSessionStatus.Authenticated);\n await this.loadPermissions();\n await this.loadFeatures();\n await this.signInComplete();\n }\n }\n else {\n this.status.next(AXPSessionStatus.Unauthorized);\n }\n }\n catch (error) {\n this.status.next(AXPSessionStatus.Unauthorized);\n }\n finally {\n this.isLoading.next(false);\n }\n }\n async signin(credentials) {\n this.isLoading.next(true);\n try {\n //\n // this.clearSession();\n //\n const strategy = this.authStrategyRegistry.get(credentials.strategy);\n if (!strategy) {\n throw new Error(`Authentication strategy '${credentials.strategy}' is not supported`);\n }\n const result = await strategy.signin(credentials);\n if (!result)\n return;\n if (result?.succeed) {\n this.currentUserSubject.next(result.data.user);\n this.setSession({\n accessToken: result.data.accessToken,\n refreshToken: result.data.refreshToken,\n strategy: credentials.strategy,\n user: result.data.user,\n application: result.data?.application,\n tenant: result.data?.tenant,\n expiresIn: result.data?.expiresIn,\n idToken: result.data?.idToken ?? null,\n });\n }\n else {\n this.status.next(AXPSessionStatus.Unauthenticated);\n throw new Error(`Invalid Username or Password`);\n }\n }\n catch (error) {\n console.error('Signin error:', error);\n this.status.next(AXPSessionStatus.Unauthenticated);\n throw error;\n }\n finally {\n this.isLoading.next(false);\n console.log('Signin process completed');\n }\n }\n async updateToken(params) {\n this.isLoading.next(true);\n try {\n const strategyName = this.getSessionData()?.strategy;\n if (!strategyName) {\n throw new Error('Strategy not found');\n }\n const strategy = this.authStrategyRegistry.get(strategyName);\n if (!strategy) {\n throw new Error(`Authentication strategy '${this.getSessionData()?.strategy}' is not supported`);\n }\n const result = await strategy.updateToken(params);\n if (result?.succeed) {\n this.currentUserSubject.next(result.data.user);\n this.setSession({\n accessToken: result.data.accessToken,\n refreshToken: result.data.refreshToken,\n strategy: strategyName,\n user: result.data.user,\n application: result.data?.application,\n tenant: result.data?.tenant,\n expiresIn: result.data?.expiresIn,\n idToken: result.data?.idToken ?? null,\n });\n this.status.next(AXPSessionStatus.Authenticated);\n // If we have both tenant and application, complete the sign-in\n if (this.application && this.tenant) {\n await this.restoreSession();\n }\n }\n else {\n this.status.next(AXPSessionStatus.Unauthenticated);\n throw new Error(`Invalid Username or Password`);\n }\n }\n catch (error) {\n console.error('Update token error:', error);\n throw error;\n }\n finally {\n this.isLoading.next(false);\n console.log('Update token process completed');\n }\n }\n async signout() {\n console.log('Signing out...');\n this.isLoading.next(true);\n try {\n const sessionData = this.getSessionData();\n if (sessionData?.strategy) {\n const strategy = this.authStrategyRegistry.get(sessionData?.strategy);\n if (strategy) {\n try {\n await strategy.signout();\n }\n catch (error) { }\n }\n }\n //\n const userId = this.user?.id;\n this.clearSession();\n this.eventService.publish(AXPSessionStatus.SignedOut, { id: userId });\n this.isLoading.next(false);\n this.status.next(AXPSessionStatus.SignedOut);\n }\n finally {\n this.isLoading.next(false);\n }\n }\n async refreshToken() {\n console.log('Refreshing token...');\n return new Promise(async (resolve, reject) => {\n const sessionData = this.getSessionData();\n if (!sessionData || !sessionData?.refreshToken) {\n console.log('No session data or refresh token found');\n reject(new Error('No refresh token available'));\n return;\n }\n const strategy = this.authStrategyRegistry.get(sessionData.strategy);\n if (!strategy) {\n console.error('Authentication strategy not found:', sessionData.strategy);\n reject(new Error(`Authentication strategy '${sessionData.strategy}' is not found`));\n return;\n }\n try {\n const result = await strategy.refreshToken(this.getContext());\n if (result.succeed) {\n console.log('Token refresh successful');\n this.setSession(result.data);\n resolve(result.data?.accessToken);\n }\n else {\n console.error('Token refresh failed');\n this.clearSession();\n this.status.next(AXPSessionStatus.Expired);\n reject(new Error('Token refresh failed'));\n }\n }\n catch (error) {\n console.error('Error during token refresh:', error);\n this.clearSession();\n this.status.next(AXPSessionStatus.Expired);\n reject(error);\n }\n });\n }\n async loadPermissions() {\n try {\n const permissions = await firstValueFrom(this.permissionLoader.getList(this.getContext()));\n this.permissionsSubject.next(permissions ?? []);\n }\n catch (error) {\n console.error('Error loading permissions:', error);\n this.permissionsSubject.next([]);\n }\n }\n async loadFeatures() {\n try {\n const features = await firstValueFrom(this.featureLoader.getList(this.getContext()));\n this.featuresSubject.next(features ?? []);\n }\n catch (error) {\n console.error('Error loading features:', error);\n this.featuresSubject.next([]);\n }\n }\n async signInComplete() {\n // Ensure we have the required data\n if (!this.user) {\n this.status.next(AXPSessionStatus.Unauthenticated);\n return;\n }\n // Set status to Authorized\n this.status.next(AXPSessionStatus.Authorized);\n // Double-check the status was set correctly\n setTimeout(() => {\n console.log('Status after timeout:', this.status.value);\n }, 100);\n }\n setSession(tokens) {\n const sessionData = {\n accessToken: tokens.accessToken,\n refreshToken: tokens.refreshToken,\n strategy: tokens.strategy,\n user: tokens.user,\n application: tokens.application,\n tenant: tokens.tenant,\n expiresIn: tokens.expiresIn,\n idToken: tokens.idToken,\n };\n // Update subjects\n if (tokens.user) {\n this.currentUserSubject.next(tokens.user);\n }\n if (tokens.tenant) {\n this.currentTenantSubject.next(tokens.tenant);\n }\n if (tokens.application) {\n this.currentApplicationSubject.next(tokens.application);\n }\n localStorage.setItem(AXPSessionService.SESSION_KEY, JSON.stringify(sessionData));\n }\n setStrategy(strategy) {\n const sessionData = this.getSessionData();\n const newSessionData = { ...sessionData, strategy };\n this.setSession(newSessionData);\n }\n getSessionData() {\n try {\n const sessionDataString = localStorage.getItem(AXPSessionService.SESSION_KEY);\n if (sessionDataString) {\n const sessionData = JSON.parse(sessionDataString);\n return sessionData;\n }\n else {\n return null;\n }\n }\n catch (error) {\n localStorage.removeItem(AXPSessionService.SESSION_KEY);\n return null;\n }\n }\n clearSession() {\n //\n this.currentUserSubject.next(null);\n //\n this.currentTenantSubject.next(null);\n //\n this.currentApplicationSubject.next(null);\n //\n this.permissionsSubject.next([]);\n //\n this.featuresSubject.next([]);\n //\n localStorage.removeItem(AXPSessionService.SESSION_KEY);\n }\n authorize(...keys) {\n return keys.every((k) => isEmpty(k) || this.permissions.indexOf(k) > -1 || this.user?.name == 'root');\n }\n isFeatureEnabled(...keys) {\n return keys.every((k) => isEmpty(k) || this.features.some((c) => c.name == k && c.value == true));\n }\n getToken() {\n const sessionData = this.getSessionData();\n return sessionData?.accessToken;\n }\n checkTokenValidation() {\n let sessionData = this.getSessionData();\n if (sessionData && sessionData?.accessToken && sessionData.expiresIn) {\n const expiresInDate = new Date(sessionData.expiresIn);\n if (expiresInDate > new Date()) {\n // Token is still valid\n return true;\n }\n }\n return false;\n }\n getContext() {\n return new AXPSessionContext({\n user: this.user,\n tenant: this.tenant,\n application: this.application,\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPSessionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPSessionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPSessionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9hdXRoL3NyYy9saWIvc2Vzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBYyxjQUFjLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RSxPQUFPLEVBQWMsa0JBQWtCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBTzNELE1BQU0sT0FBTyxpQkFBaUI7SUFIOUI7UUFJVSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRWhELHlCQUFvQixHQUFHLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBR3JELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2pELGtCQUFhLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0MsaUJBQVksR0FBRyxN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QUFJLENBQUMsSUFBSTtZQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDOUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F4WVUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEJyb2FkY2FzdEV2ZW50U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBkZWZhdWx0SWZFbXB0eSwgZmlsdGVyLCBmaXJzdFZhbHVlRnJvbSwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBfQVBQTElDQVRJT05fTE9BREVSIH0gZnJvbSAnLi9hcHBsaWNhdGlvbi9hcHBsaWNhdGlvbi5sb2FkZXInO1xuaW1wb3J0IHsgQVhQQXBwbGljYXRpb24gfSBmcm9tICcuL2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUEF1dGhTdHJhdGVneVJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4vYXV0aC1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYUEJhc2VDcmVkZW50aWFscywgQVhQU2Vzc2lvbkRhdGEgfSBmcm9tICcuL2F1dGguc3RyYXRlZ3knO1xuaW1wb3J0IHsgQVhQRmVhdHVyZSwgQVhQX0ZFQVRVUkVfTE9BREVSIH0gZnJvbSAnLi9mZWF0dXJlJztcbmltcG9ydCB7IEFYUF9QRVJNSVNTSU9OX0xPQURFUiB9IGZyb20gJy4vcGVybWlzc2lvbi9wZXJtaXNzaW9uLmxvYWRlcic7XG5pbXBvcnQgeyBBWFBQZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9uL3Blcm1pc3Npb24udHlwZXMnO1xuaW1wb3J0IHsgQVhQU2Vzc2lvbkNvbnRleHQsIEFYUFNlc3Npb25TdGF0dXMgfSBmcm9tICcuL3Nlc3Npb24udHlwZXMnO1xuaW1wb3J0IHsgQVhQX1RFTkFOVF9MT0FERVIgfSBmcm9tICcuL3RlbmFudC90ZW5hbnQubG9hZGVyJztcbmltcG9ydCB7IEFYUFRlbmFudCB9IGZyb20gJy4vdGVuYW50L3RlbmFudC50eXBlcyc7XG5pbXBvcnQgeyBBWFBVc2VyIH0gZnJvbSAnLi91c2VyL3VzZXIudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQU2Vzc2lvblNlcnZpY2Uge1xuICBwcml2YXRlIGV2ZW50U2VydmljZSA9IGluamVjdChBWFBCcm9hZGNhc3RFdmVudFNlcnZpY2UpO1xuXG4gIHByaXZhdGUgYXV0aFN0cmF0ZWd5UmVnaXN0cnkgPSBpbmplY3QoQVhQQXV0aFN0cmF0ZWd5UmVnaXN0cnlTZXJ2aWNlKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVNTSU9OX0tFWSA9ICdBWFBfU0VTU0lPTic7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwZXJtaXNzaW9uTG9hZGVyID0gaW5qZWN0KEFYUF9QRVJNSVNTSU9OX0xPQURFUik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmVhdHVyZUxvYWRlciA9IGluamVjdChBWFBfRkVBVFVSRV9MT0FERVIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRlbmFudExvYWRlciA9IGluamVjdChBWFBfVEVOQU5UX0xPQURFUik7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwbGljYXRpb25Mb2FkZXIgPSBpbmplY3QoQVhQX0FQUExJQ0FUSU9OX0xPQURFUik7XG5cbiAgcHJpdmF0ZSBzdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFYUFNlc3Npb25TdGF0dXM+KEFYUFNlc3Npb25TdGF0dXMuVW5hdXRoZW50aWNhdGVkKTtcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyQgPSB0aGlzLnN0YXR1cy5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcblxuICAvLyBBZGQgbG9hZGluZyBzdGF0ZSB0byBwcmV2ZW50IHByZW1hdHVyZSByZWRpcmVjdHNcbiAgcHJpdmF0ZSBpc0xvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNMb2FkaW5nJCA9IHRoaXMuaXNMb2FkaW5nLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHByaXZhdGUgY3VycmVudFVzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBWFBVc2VyIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyJCA9IHRoaXMuY3VycmVudFVzZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICBwdWJsaWMgZ2V0IHVzZXIoKTogQVhQVXNlciB8IG51bGwge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb25EYXRhKCk7XG4gICAgaWYgKHNlc3Npb24/LnVzZXIgJiYgIXRoaXMuY3VycmVudFVzZXJTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRVc2VyU3ViamVjdC5uZXh0KHNlc3Npb24udXNlcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY3VycmVudFRlbmFudFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFYUFRlbmFudCB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgdGVuYW50JCA9IHRoaXMuY3VycmVudFRlbmFudFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIHB1YmxpYyBnZXQgdGVuYW50KCk6IEFYUFRlbmFudCB8IG51bGwge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb25EYXRhKCk7XG4gICAgaWYgKHNlc3Npb24/LnRlbmFudCAmJiAhdGhpcy5jdXJyZW50VGVuYW50U3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy5jdXJyZW50VGVuYW50U3ViamVjdC5uZXh0KHNlc3Npb24udGVuYW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFRlbmFudFN1YmplY3QudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRlbmFudHMkKCk6IE9ic2VydmFibGU8QVhQVGVuYW50W10+IHtcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRMb2FkZXIuZ2V0TGlzdCh0aGlzLmdldENvbnRleHQoKSk7XG4gIH1cblxuICBwcml2YXRlIGN1cnJlbnRBcHBsaWNhdGlvblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFYUEFwcGxpY2F0aW9uIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBhcHBsaWNhdGlvbiQgPSB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIHB1YmxpYyBnZXQgYXBwbGljYXRpb24oKTogQVhQQXBwbGljYXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uRGF0YSgpO1xuICAgIGlmIChzZXNzaW9uPy5hcHBsaWNhdGlvbiAmJiAhdGhpcy5jdXJyZW50QXBwbGljYXRpb25TdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvblN1YmplY3QubmV4dChzZXNzaW9uLmFwcGxpY2F0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEFwcGxpY2F0aW9uU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXBwbGljYXRpb25zJCgpOiBPYnNlcnZhYmxlPEFYUEFwcGxpY2F0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbkxvYWRlci5nZXRMaXN0KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGVybWlzc2lvbnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBWFBQZXJtaXNzaW9uW10+KFtdKTtcbiAgcHVibGljIHJlYWRvbmx5IHBlcm1pc3Npb25zJCA9IHRoaXMucGVybWlzc2lvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoMSksIGRlZmF1bHRJZkVtcHR5KFtdKSk7XG4gIHB1YmxpYyBnZXQgcGVybWlzc2lvbnMoKTogQVhQUGVybWlzc2lvbltdIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1N1YmplY3QudmFsdWUgPz8gW107XG4gIH1cblxuICBwcml2YXRlIGZlYXR1cmVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QVhQRmVhdHVyZVtdPihbXSk7XG4gIHB1YmxpYyByZWFkb25seSBmZWF0dXJlcyQgPSB0aGlzLmZlYXR1cmVzU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpLCBkZWZhdWx0SWZFbXB0eShbXSkpO1xuICBwdWJsaWMgZ2V0IGZlYXR1cmVzKCk6IEFYUEZlYXR1cmVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmVhdHVyZXNTdWJqZWN0LnZhbHVlID8/IFtdO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLnN0YXR1cyQucGlwZShcbiAgICBtYXAoKHN0YXR1cykgPT4ge1xuICAgICAgY29uc3QgaXNBdXRoID0gc3RhdHVzID09PSBBWFBTZXNzaW9uU3RhdHVzLkF1dGhlbnRpY2F0ZWQgfHwgc3RhdHVzID09PSBBWFBTZXNzaW9uU3RhdHVzLkF1dGhvcml6ZWQ7XG4gICAgICByZXR1cm4gaXNBdXRoO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpLFxuICApO1xuXG4gIC8vIEFkZCBhIG5ldyBvYnNlcnZhYmxlIHRoYXQgY29uc2lkZXJzIGxvYWRpbmcgc3RhdGVcbiAgcHVibGljIHJlYWRvbmx5IGlzQXV0aGVudGljYXRlZFdpdGhMb2FkaW5nJCA9IHRoaXMuaXNMb2FkaW5nJC5waXBlKFxuICAgIHN3aXRjaE1hcCgobG9hZGluZykgPT4ge1xuICAgICAgaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nJC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoaXNMb2FkaW5nKSA9PiAhaXNMb2FkaW5nKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQkKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCQ7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSksXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzQXV0aG9yaXplZCQgPSB0aGlzLnN0YXR1cyQucGlwZShcbiAgICBtYXAoKHN0YXR1cykgPT4gc3RhdHVzID09PSBBWFBTZXNzaW9uU3RhdHVzLkF1dGhvcml6ZWQpLFxuICAgIHNoYXJlUmVwbGF5KDEpLFxuICApO1xuXG4gIHB1YmxpYyBhc3luYyByZXN0b3JlU2Vzc2lvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzTG9hZGluZy5uZXh0KHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gdGhpcy5nZXRTZXNzaW9uRGF0YSgpO1xuICAgICAgaWYgKHNlc3Npb25EYXRhKSB7XG4gICAgICAgIGlmIChzZXNzaW9uRGF0YS51c2VyKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VXNlclN1YmplY3QubmV4dChzZXNzaW9uRGF0YS51c2VyKTtcbiAgICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuQXV0aGVudGljYXRlZCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGVybWlzc2lvbnMoKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRGZWF0dXJlcygpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2lnbkluQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dChBWFBTZXNzaW9uU3RhdHVzLlVuYXV0aG9yaXplZCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc3RhdHVzLm5leHQoQVhQU2Vzc2lvblN0YXR1cy5VbmF1dGhvcml6ZWQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZy5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzaWduaW4oY3JlZGVudGlhbHM6IEFYUEJhc2VDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNMb2FkaW5nLm5leHQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vXG4gICAgICAvLyB0aGlzLmNsZWFyU2Vzc2lvbigpO1xuICAgICAgLy9cbiAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5hdXRoU3RyYXRlZ3lSZWdpc3RyeS5nZXQoY3JlZGVudGlhbHMuc3RyYXRlZ3kpO1xuICAgICAgaWYgKCFzdHJhdGVneSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5ICcke2NyZWRlbnRpYWxzLnN0cmF0ZWd5fScgaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyYXRlZ3kuc2lnbmluKGNyZWRlbnRpYWxzKTtcbiAgICAgIGlmICghcmVzdWx0KSByZXR1cm47XG4gICAgICBpZiAocmVzdWx0Py5zdWNjZWVkKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFVzZXJTdWJqZWN0Lm5leHQocmVzdWx0LmRhdGEhLnVzZXIpO1xuICAgICAgICB0aGlzLnNldFNlc3Npb24oe1xuICAgICAgICAgIGFjY2Vzc1Rva2VuOiByZXN1bHQuZGF0YSEuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgcmVmcmVzaFRva2VuOiByZXN1bHQuZGF0YSEucmVmcmVzaFRva2VuLFxuICAgICAgICAgIHN0cmF0ZWd5OiBjcmVkZW50aWFscy5zdHJhdGVneSxcbiAgICAgICAgICB1c2VyOiByZXN1bHQuZGF0YSEudXNlcixcbiAgICAgICAgICBhcHBsaWNhdGlvbjogcmVzdWx0LmRhdGE/LmFwcGxpY2F0aW9uLFxuICAgICAgICAgIHRlbmFudDogcmVzdWx0LmRhdGE/LnRlbmFudCxcbiAgICAgICAgICBleHBpcmVzSW46IHJlc3VsdC5kYXRhPy5leHBpcmVzSW4sXG4gICAgICAgICAgaWRUb2tlbjogcmVzdWx0LmRhdGE/LmlkVG9rZW4gPz8gbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuVW5hdXRoZW50aWNhdGVkKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVzZXJuYW1lIG9yIFBhc3N3b3JkYCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1NpZ25pbiBlcnJvcjonLCBlcnJvcik7XG4gICAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuVW5hdXRoZW50aWNhdGVkKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZy5uZXh0KGZhbHNlKTtcbiAgICAgIGNvbnNvbGUubG9nKCdTaWduaW4gcHJvY2VzcyBjb21wbGV0ZWQnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVUb2tlbihwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc0xvYWRpbmcubmV4dCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyYXRlZ3lOYW1lID0gdGhpcy5nZXRTZXNzaW9uRGF0YSgpPy5zdHJhdGVneSE7XG4gICAgICBpZiAoIXN0cmF0ZWd5TmFtZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmF0ZWd5IG5vdCBmb3VuZCcpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLmF1dGhTdHJhdGVneVJlZ2lzdHJ5LmdldChzdHJhdGVneU5hbWUpO1xuICAgICAgaWYgKCFzdHJhdGVneSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5ICcke3RoaXMuZ2V0U2Vzc2lvbkRhdGEoKT8uc3RyYXRlZ3l9JyBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJhdGVneS51cGRhdGVUb2tlbihwYXJhbXMpO1xuICAgICAgaWYgKHJlc3VsdD8uc3VjY2VlZCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRVc2VyU3ViamVjdC5uZXh0KHJlc3VsdC5kYXRhIS51c2VyKTtcbiAgICAgICAgdGhpcy5zZXRTZXNzaW9uKHtcbiAgICAgICAgICBhY2Nlc3NUb2tlbjogcmVzdWx0LmRhdGEhLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogcmVzdWx0LmRhdGEhLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBzdHJhdGVneTogc3RyYXRlZ3lOYW1lLFxuICAgICAgICAgIHVzZXI6IHJlc3VsdC5kYXRhIS51c2VyLFxuICAgICAgICAgIGFwcGxpY2F0aW9uOiByZXN1bHQuZGF0YT8uYXBwbGljYXRpb24sXG4gICAgICAgICAgdGVuYW50OiByZXN1bHQuZGF0YT8udGVuYW50LFxuICAgICAgICAgIGV4cGlyZXNJbjogcmVzdWx0LmRhdGE/LmV4cGlyZXNJbixcbiAgICAgICAgICBpZFRva2VuOiByZXN1bHQuZGF0YT8uaWRUb2tlbiA/PyBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dChBWFBTZXNzaW9uU3RhdHVzLkF1dGhlbnRpY2F0ZWQpO1xuXG4gICAgICAgIC8vIElmIHdlIGhhdmUgYm90aCB0ZW5hbnQgYW5kIGFwcGxpY2F0aW9uLCBjb21wbGV0ZSB0aGUgc2lnbi1pblxuICAgICAgICBpZiAodGhpcy5hcHBsaWNhdGlvbiAmJiB0aGlzLnRlbmFudCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVzdG9yZVNlc3Npb24oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dChBWFBTZXNzaW9uU3RhdHVzLlVuYXV0aGVudGljYXRlZCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVc2VybmFtZSBvciBQYXNzd29yZGApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVcGRhdGUgdG9rZW4gZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgY29uc29sZS5sb2coJ1VwZGF0ZSB0b2tlbiBwcm9jZXNzIGNvbXBsZXRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNpZ25vdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coJ1NpZ25pbmcgb3V0Li4uJyk7XG4gICAgdGhpcy5pc0xvYWRpbmcubmV4dCh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IHRoaXMuZ2V0U2Vzc2lvbkRhdGEoKTtcblxuICAgICAgaWYgKHNlc3Npb25EYXRhPy5zdHJhdGVneSkge1xuICAgICAgICBjb25zdCBzdHJhdGVneSA9IHRoaXMuYXV0aFN0cmF0ZWd5UmVnaXN0cnkuZ2V0KHNlc3Npb25EYXRhPy5zdHJhdGVneSk7XG4gICAgICAgIGlmIChzdHJhdGVneSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBzdHJhdGVneS5zaWdub3V0KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL1xuXG4gICAgICBjb25zdCB1c2VySWQgPSB0aGlzLnVzZXI/LmlkO1xuICAgICAgdGhpcy5jbGVhclNlc3Npb24oKTtcbiAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnB1Ymxpc2goQVhQU2Vzc2lvblN0YXR1cy5TaWduZWRPdXQsIHsgaWQ6IHVzZXJJZCB9KTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5zdGF0dXMubmV4dChBWFBTZXNzaW9uU3RhdHVzLlNpZ25lZE91dCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hUb2tlbigpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnNvbGUubG9nKCdSZWZyZXNoaW5nIHRva2VuLi4uJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gdGhpcy5nZXRTZXNzaW9uRGF0YSgpO1xuICAgICAgaWYgKCFzZXNzaW9uRGF0YSB8fCAhc2Vzc2lvbkRhdGE/LnJlZnJlc2hUb2tlbikge1xuICAgICAgICBjb25zb2xlLmxvZygnTm8gc2Vzc2lvbiBkYXRhIG9yIHJlZnJlc2ggdG9rZW4gZm91bmQnKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignTm8gcmVmcmVzaCB0b2tlbiBhdmFpbGFibGUnKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5hdXRoU3RyYXRlZ3lSZWdpc3RyeS5nZXQoc2Vzc2lvbkRhdGEuc3RyYXRlZ3kpO1xuICAgICAgaWYgKCFzdHJhdGVneSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBdXRoZW50aWNhdGlvbiBzdHJhdGVneSBub3QgZm91bmQ6Jywgc2Vzc2lvbkRhdGEuc3RyYXRlZ3kpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBBdXRoZW50aWNhdGlvbiBzdHJhdGVneSAnJHtzZXNzaW9uRGF0YS5zdHJhdGVneX0nIGlzIG5vdCBmb3VuZGApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyYXRlZ3kucmVmcmVzaFRva2VuKHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZWVkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1Rva2VuIHJlZnJlc2ggc3VjY2Vzc2Z1bCcpO1xuICAgICAgICAgIHRoaXMuc2V0U2Vzc2lvbihyZXN1bHQuZGF0YSBhcyBBWFBTZXNzaW9uRGF0YSk7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQuZGF0YT8uYWNjZXNzVG9rZW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Rva2VuIHJlZnJlc2ggZmFpbGVkJyk7XG4gICAgICAgICAgdGhpcy5jbGVhclNlc3Npb24oKTtcbiAgICAgICAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuRXhwaXJlZCk7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVG9rZW4gcmVmcmVzaCBmYWlsZWQnKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyB0b2tlbiByZWZyZXNoOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5jbGVhclNlc3Npb24oKTtcbiAgICAgICAgdGhpcy5zdGF0dXMubmV4dChBWFBTZXNzaW9uU3RhdHVzLkV4cGlyZWQpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUGVybWlzc2lvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5wZXJtaXNzaW9uTG9hZGVyLmdldExpc3QodGhpcy5nZXRDb250ZXh0KCkpKTtcbiAgICAgIHRoaXMucGVybWlzc2lvbnNTdWJqZWN0Lm5leHQocGVybWlzc2lvbnMgPz8gW10pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHBlcm1pc3Npb25zOicsIGVycm9yKTtcbiAgICAgIHRoaXMucGVybWlzc2lvbnNTdWJqZWN0Lm5leHQoW10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZlYXR1cmVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZmVhdHVyZUxvYWRlci5nZXRMaXN0KHRoaXMuZ2V0Q29udGV4dCgpKSk7XG4gICAgICB0aGlzLmZlYXR1cmVzU3ViamVjdC5uZXh0KGZlYXR1cmVzID8/IFtdKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmZWF0dXJlczonLCBlcnJvcik7XG4gICAgICB0aGlzLmZlYXR1cmVzU3ViamVjdC5uZXh0KFtdKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzaWduSW5Db21wbGV0ZSgpIHtcbiAgICAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmVxdWlyZWQgZGF0YVxuICAgIGlmICghdGhpcy51c2VyKSB7XG4gICAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuVW5hdXRoZW50aWNhdGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZXQgc3RhdHVzIHRvIEF1dGhvcml6ZWRcbiAgICB0aGlzLnN0YXR1cy5uZXh0KEFYUFNlc3Npb25TdGF0dXMuQXV0aG9yaXplZCk7XG5cbiAgICAvLyBEb3VibGUtY2hlY2sgdGhlIHN0YXR1cyB3YXMgc2V0IGNvcnJlY3RseVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1N0YXR1cyBhZnRlciB0aW1lb3V0OicsIHRoaXMuc3RhdHVzLnZhbHVlKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHVibGljIHNldFNlc3Npb24odG9rZW5zOiBQYXJ0aWFsPEFYUFNlc3Npb25EYXRhPik6IHZvaWQge1xuICAgIGNvbnN0IHNlc3Npb25EYXRhOiBQYXJ0aWFsPEFYUFNlc3Npb25EYXRhPiA9IHtcbiAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbnMuYWNjZXNzVG9rZW4sXG4gICAgICByZWZyZXNoVG9rZW46IHRva2Vucy5yZWZyZXNoVG9rZW4sXG4gICAgICBzdHJhdGVneTogdG9rZW5zLnN0cmF0ZWd5LFxuICAgICAgdXNlcjogdG9rZW5zLnVzZXIsXG4gICAgICBhcHBsaWNhdGlvbjogdG9rZW5zLmFwcGxpY2F0aW9uLFxuICAgICAgdGVuYW50OiB0b2tlbnMudGVuYW50LFxuICAgICAgZXhwaXJlc0luOiB0b2tlbnMuZXhwaXJlc0luLFxuICAgICAgaWRUb2tlbjogdG9rZW5zLmlkVG9rZW4sXG4gICAgfTtcbiAgICAvLyBVcGRhdGUgc3ViamVjdHNcbiAgICBpZiAodG9rZW5zLnVzZXIpIHtcbiAgICAgIHRoaXMuY3VycmVudFVzZXJTdWJqZWN0Lm5leHQodG9rZW5zLnVzZXIpO1xuICAgIH1cbiAgICBpZiAodG9rZW5zLnRlbmFudCkge1xuICAgICAgdGhpcy5jdXJyZW50VGVuYW50U3ViamVjdC5uZXh0KHRva2Vucy50ZW5hbnQpO1xuICAgIH1cbiAgICBpZiAodG9rZW5zLmFwcGxpY2F0aW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRBcHBsaWNhdGlvblN1YmplY3QubmV4dCh0b2tlbnMuYXBwbGljYXRpb24pO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShBWFBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0tFWSwgSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkRhdGEpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHJhdGVneShzdHJhdGVneTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSB0aGlzLmdldFNlc3Npb25EYXRhKCk7XG4gICAgY29uc3QgbmV3U2Vzc2lvbkRhdGEgPSB7IC4uLnNlc3Npb25EYXRhLCBzdHJhdGVneSB9O1xuICAgIHRoaXMuc2V0U2Vzc2lvbihuZXdTZXNzaW9uRGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2Vzc2lvbkRhdGEoKTogQVhQU2Vzc2lvbkRhdGEgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2Vzc2lvbkRhdGFTdHJpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShBWFBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0tFWSk7XG4gICAgICBpZiAoc2Vzc2lvbkRhdGFTdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25EYXRhU3RyaW5nKTtcblxuICAgICAgICByZXR1cm4gc2Vzc2lvbkRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oQVhQU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9LRVkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNlc3Npb24oKTogdm9pZCB7XG4gICAgLy9cbiAgICB0aGlzLmN1cnJlbnRVc2VyU3ViamVjdC5uZXh0KG51bGwpO1xuICAgIC8vXG4gICAgdGhpcy5jdXJyZW50VGVuYW50U3ViamVjdC5uZXh0KG51bGwpO1xuICAgIC8vXG4gICAgdGhpcy5jdXJyZW50QXBwbGljYXRpb25TdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgLy9cbiAgICB0aGlzLnBlcm1pc3Npb25zU3ViamVjdC5uZXh0KFtdKTtcbiAgICAvL1xuICAgIHRoaXMuZmVhdHVyZXNTdWJqZWN0Lm5leHQoW10pO1xuICAgIC8vXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oQVhQU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9LRVkpO1xuICB9XG5cbiAgcHVibGljIGF1dGhvcml6ZSguLi5rZXlzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBrZXlzLmV2ZXJ5KChrKSA9PiBpc0VtcHR5KGspIHx8IHRoaXMucGVybWlzc2lvbnMuaW5kZXhPZihrKSA+IC0xIHx8IHRoaXMudXNlcj8ubmFtZSA9PSAncm9vdCcpO1xuICB9XG5cbiAgcHVibGljIGlzRmVhdHVyZUVuYWJsZWQoLi4ua2V5czogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4ga2V5cy5ldmVyeSgoaykgPT4gaXNFbXB0eShrKSB8fCB0aGlzLmZlYXR1cmVzLnNvbWUoKGMpID0+IGMubmFtZSA9PSBrICYmIGMudmFsdWUgPT0gdHJ1ZSkpO1xuICB9XG5cbiAgcHVibGljIGdldFRva2VuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSB0aGlzLmdldFNlc3Npb25EYXRhKCk7XG5cbiAgICByZXR1cm4gc2Vzc2lvbkRhdGE/LmFjY2Vzc1Rva2VuO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1Rva2VuVmFsaWRhdGlvbigpOiBib29sZWFuIHtcbiAgICBsZXQgc2Vzc2lvbkRhdGEgPSB0aGlzLmdldFNlc3Npb25EYXRhKCk7XG5cbiAgICBpZiAoc2Vzc2lvbkRhdGEgJiYgc2Vzc2lvbkRhdGE/LmFjY2Vzc1Rva2VuICYmIHNlc3Npb25EYXRhLmV4cGlyZXNJbikge1xuICAgICAgY29uc3QgZXhwaXJlc0luRGF0ZSA9IG5ldyBEYXRlKHNlc3Npb25EYXRhLmV4cGlyZXNJbik7XG4gICAgICBpZiAoZXhwaXJlc0luRGF0ZSA+IG5ldyBEYXRlKCkpIHtcbiAgICAgICAgLy8gVG9rZW4gaXMgc3RpbGwgdmFsaWRcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZXh0KCk6IEFYUFNlc3Npb25Db250ZXh0IHtcbiAgICByZXR1cm4gbmV3IEFYUFNlc3Npb25Db250ZXh0KHtcbiAgICAgIHVzZXI6IHRoaXMudXNlcixcbiAgICAgIHRlbmFudDogdGhpcy50ZW5hbnQsXG4gICAgICBhcHBsaWNhdGlvbjogdGhpcy5hcHBsaWNhdGlvbixcbiAgICB9KTtcbiAgfVxufVxuIl19","import { Directive, Input, TemplateRef, ViewContainerRef, inject, signal } from '@angular/core';\nimport { AXPSessionService } from '../session.service';\nimport * as i0 from \"@angular/core\";\nexport class AXPPermissionDirective {\n constructor(templateRef, viewContainer) {\n this.templateRef = templateRef;\n this.viewContainer = viewContainer;\n this.hasView = signal(false, ...(ngDevMode ? [{ debugName: \"hasView\" }] : []));\n this.sessionService = inject(AXPSessionService);\n }\n set permission(permissionKeys) {\n const keys = !permissionKeys ? [] : (Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys]);\n if (keys.length == 0) {\n // If permissionKey is null or empty, decide the default behavior here\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n return;\n }\n this.subscription = this.sessionService.isAuthorized$\n .subscribe((isAuthorized) => {\n if (isAuthorized && this.sessionService.authorize(...keys)) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.hasView.set(true);\n }\n }\n else {\n this.viewContainer.clear();\n this.hasView.set(false);\n }\n });\n }\n set permissionElse(elseTemplateRef) {\n if (!this.hasView()) {\n this.viewContainer.createEmbeddedView(elseTemplateRef);\n }\n }\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPPermissionDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.12\", type: AXPPermissionDirective, isStandalone: false, selector: \"[permission]\", inputs: { permission: \"permission\", permissionElse: \"permissionElse\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPPermissionDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[permission]',\n standalone: false\n }]\n }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }], propDecorators: { permission: [{\n type: Input\n }], permissionElse: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9wZXJtaXNzaW9uL3Blcm1pc3Npb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQU12RCxNQUFNLE9BQU8sc0JBQXNCO0lBS2pDLFlBQ1UsV0FBNkIsRUFDN0IsYUFBK0I7UUFEL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQU5qQyxZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssbURBQUMsQ0FBQztRQUV4QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBSy9DLENBQUM7SUFFTCxJQUNXLFVBQVUsQ0FBQyxjQUF3QztRQUM1RCxNQUFNLElBQUksR0FBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2xILElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQixzRUFBc0U7WUFDdEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYTthQUNsRCxTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUMxQixJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxJQUNXLGNBQWMsQ0FBQyxlQUFpQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7K0dBMUNVLHNCQUFzQjttR0FBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsS0FBSztpQkFDcEI7O3NCQVdFLEtBQUs7O3NCQXVCTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpcnN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Nlc3Npb24uc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3Blcm1pc3Npb25dJyxcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBBWFBQZXJtaXNzaW9uRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBoYXNWaWV3ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXG4gICkgeyB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwZXJtaXNzaW9uKHBlcm1pc3Npb25LZXlzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwpIHtcbiAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9ICFwZXJtaXNzaW9uS2V5cyA/IFtdIDogKEFycmF5LmlzQXJyYXkocGVybWlzc2lvbktleXMpID8gcGVybWlzc2lvbktleXMgOiBbcGVybWlzc2lvbktleXNdKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkge1xuICAgICAgLy8gSWYgcGVybWlzc2lvbktleSBpcyBudWxsIG9yIGVtcHR5LCBkZWNpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaGVyZVxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmKTtcbiAgICAgIHRoaXMuaGFzVmlldy5zZXQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5zZXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQkXG4gICAgICAuc3Vic2NyaWJlKChpc0F1dGhvcml6ZWQpID0+IHtcbiAgICAgICAgaWYgKGlzQXV0aG9yaXplZCAmJiB0aGlzLnNlc3Npb25TZXJ2aWNlLmF1dGhvcml6ZSguLi5rZXlzKSkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXNWaWV3KCkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XG4gICAgICAgICAgICB0aGlzLmhhc1ZpZXcuc2V0KHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLmhhc1ZpZXcuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHBlcm1pc3Npb25FbHNlKGVsc2VUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICghdGhpcy5oYXNWaWV3KCkpIHtcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZWxzZVRlbXBsYXRlUmVmKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19","import { inject } from '@angular/core';\nimport { first, map } from 'rxjs';\nimport { AXPUnauthorizedError } from '../errors.types';\nimport { AXPSessionService } from '../session.service';\nexport const AXPPermissionGuard = (route, state) => {\n const sessionService = inject(AXPSessionService);\n const permissionKeys = route.data['requiredPermission'];\n return sessionService.isAuthorized$.pipe(first(), map((value) => {\n const keys = !permissionKeys ? [] : Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys];\n const hasPermission = keys.length == 0 || sessionService.authorize(...keys);\n if (!hasPermission) {\n throw new AXPUnauthorizedError(`Access denied. Required permissions: ${keys.join(', ')}. Please contact your administrator if you believe this is an error.`, {\n redirectUrl: state.url\n });\n }\n return true;\n }));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL3Blcm1pc3Npb24vcGVybWlzc2lvbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFPLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFrQixDQUFDLEtBQTZCLEVBQUUsS0FBMEIsRUFBRSxFQUFFO0lBRTdHLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWpELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQTZCLENBQUM7SUFFcEYsT0FBTyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDdEMsS0FBSyxFQUFFLEVBQ1AsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDWixNQUFNLElBQUksR0FBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEgsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksb0JBQW9CLENBQzVCLHdDQUF3QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzRUFBc0UsRUFDN0g7Z0JBQ0UsV0FBVyxFQUFFLEtBQUssQ0FBQyxHQUFHO2FBQ3ZCLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlRm4sIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBVbmF1dGhvcml6ZWRFcnJvciB9IGZyb20gJy4uL2Vycm9ycy50eXBlcyc7XG5pbXBvcnQgeyBBWFBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Nlc3Npb24uc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBBWFBQZXJtaXNzaW9uR3VhcmQ6IENhbkFjdGl2YXRlRm4gPSAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSA9PiB7XG5cbiAgY29uc3Qgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuXG4gIGNvbnN0IHBlcm1pc3Npb25LZXlzID0gcm91dGUuZGF0YVsncmVxdWlyZWRQZXJtaXNzaW9uJ10gYXMgc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuXG4gIHJldHVybiBzZXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQkLnBpcGUoXG4gICAgZmlyc3QoKSxcbiAgICBtYXAoKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9ICFwZXJtaXNzaW9uS2V5cyA/IFtdIDogQXJyYXkuaXNBcnJheShwZXJtaXNzaW9uS2V5cykgPyBwZXJtaXNzaW9uS2V5cyA6IFtwZXJtaXNzaW9uS2V5c107XG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0ga2V5cy5sZW5ndGggPT0gMCB8fCBzZXNzaW9uU2VydmljZS5hdXRob3JpemUoLi4ua2V5cyk7XG4gICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEFYUFVuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgIGBBY2Nlc3MgZGVuaWVkLiBSZXF1aXJlZCBwZXJtaXNzaW9uczogJHtrZXlzLmpvaW4oJywgJyl9LiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IgaWYgeW91IGJlbGlldmUgdGhpcyBpcyBhbiBlcnJvci5gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXJsOiBzdGF0ZS51cmxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KVxuICApO1xufTtcbiJdfQ==","export class AXPPermissionDefinitionProviderContext {\n constructor() {\n this.builders = new Map();\n }\n addGroup(name, title, description) {\n if (this.isGroupDefined(name)) {\n return this.findGroup(name);\n }\n const group = {\n name,\n title,\n description,\n permissions: []\n };\n const builder = new AXPPermissionDefinitionGroupBuilder(this, group);\n this.builders.set(name, builder);\n return builder;\n }\n getGroupDefinitions() {\n return Array.from(this.builders.values()).map(b => b.group);\n }\n findGroup(name) {\n return this.builders.get(name);\n }\n isGroupDefined(name) {\n return this.builders.has(name);\n }\n}\nexport class AXPPermissionDefinitionGroupBuilder {\n get group() {\n return this._group;\n }\n constructor(context, group) {\n this.context = context;\n this._group = group;\n }\n addPermission(name, title, description) {\n const permission = {\n name,\n title,\n description,\n children: []\n };\n this._group.permissions.push(permission);\n return new AXPPermissionDefinitionBuilder(this, permission);\n }\n endGroup() {\n return this.context;\n }\n findPermission(path) {\n return undefined;\n }\n findGroup(name) {\n return undefined;\n }\n}\nexport class AXPPermissionDefinitionBuilder {\n constructor(groupBuilder, permission) {\n this.groupBuilder = groupBuilder;\n this.permission = permission;\n }\n addChild(name, title, description) {\n const permission = {\n name,\n title,\n description,\n children: []\n };\n this.permission.children.push(permission);\n return this;\n }\n endPermission() {\n return this.groupBuilder;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1kZWZpbml0aW9uLmJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9wZXJtaXNzaW9uL3Blcm1pc3Npb24tZGVmaW5pdGlvbi5idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxzQ0FBc0M7SUFBbkQ7UUFDWSxhQUFRLEdBQXFELElBQUksR0FBRyxFQUFFLENBQUM7SUE0Qm5GLENBQUM7SUExQkcsUUFBUSxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsV0FBb0I7UUFDdEQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBRSxDQUFBO1FBQ2hDLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBaUM7WUFDeEMsSUFBSTtZQUNKLEtBQUs7WUFDTCxXQUFXO1lBQ1gsV0FBVyxFQUFFLEVBQUU7U0FDbEIsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksbUNBQW1DLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNKO0FBSUQsTUFBTSxPQUFPLG1DQUFtQztJQUk1QyxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELFlBQVksT0FBK0MsRUFBRSxLQUFtQztRQUM1RixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsV0FBb0I7UUFDM0QsTUFBTSxVQUFVLEdBQTRCO1lBQ3hDLElBQUk7WUFDSixLQUFLO1lBQ0wsV0FBVztZQUNYLFFBQVEsRUFBRSxFQUFFO1NBQ2YsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksOEJBQThCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFLRCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWTtRQUN2QixPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVk7UUFDbEIsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztDQUVKO0FBRUQsTUFBTSxPQUFPLDhCQUE4QjtJQUl2QyxZQUFZLFlBQWlELEVBQUUsVUFBbUM7UUFDOUYsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLFdBQW9CO1FBQ3RELE1BQU0sVUFBVSxHQUE0QjtZQUN4QyxJQUFJO1lBQ0osS0FBSztZQUNMLFdBQVc7WUFDWCxRQUFRLEVBQUUsRUFBRTtTQUNmLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUdELGFBQWE7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQUGVybWlzc2lvbkRlZmluaXRpb24sIEFYUFBlcm1pc3Npb25Hcm91cERlZmluaXRpb24gfSBmcm9tIFwiLi9wZXJtaXNzaW9uLnR5cGVzXCI7XG5cblxuZXhwb3J0IGNsYXNzIEFYUFBlcm1pc3Npb25EZWZpbml0aW9uUHJvdmlkZXJDb250ZXh0IHtcbiAgICBwcml2YXRlIGJ1aWxkZXJzOiBNYXA8c3RyaW5nLCBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbkdyb3VwQnVpbGRlcj4gPSBuZXcgTWFwKCk7XG5cbiAgICBhZGRHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogQVhQUGVybWlzc2lvbkRlZmluaXRpb25Hcm91cEJ1aWxkZXIge1xuICAgICAgICBpZiAodGhpcy5pc0dyb3VwRGVmaW5lZChuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEdyb3VwKG5hbWUpIVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyb3VwOiBBWFBQZXJtaXNzaW9uR3JvdXBEZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBwZXJtaXNzaW9uczogW11cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbkdyb3VwQnVpbGRlcih0aGlzLCBncm91cCk7XG4gICAgICAgIHRoaXMuYnVpbGRlcnMuc2V0KG5hbWUsIGJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICB9XG5cbiAgICBnZXRHcm91cERlZmluaXRpb25zKCk6IEFYUFBlcm1pc3Npb25Hcm91cERlZmluaXRpb25bXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuYnVpbGRlcnMudmFsdWVzKCkpLm1hcChiID0+IGIuZ3JvdXApO1xuICAgIH1cblxuICAgIGZpbmRHcm91cChuYW1lOiBzdHJpbmcpOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbkdyb3VwQnVpbGRlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkZXJzLmdldChuYW1lKTtcbiAgICB9XG5cbiAgICBpc0dyb3VwRGVmaW5lZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRlcnMuaGFzKG5hbWUpO1xuICAgIH1cbn1cblxuXG5cbmV4cG9ydCBjbGFzcyBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbkdyb3VwQnVpbGRlciB7XG4gICAgcHJpdmF0ZSBjb250ZXh0OiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyQ29udGV4dDtcbiAgICBwcml2YXRlIF9ncm91cDogQVhQUGVybWlzc2lvbkdyb3VwRGVmaW5pdGlvbjtcblxuICAgIHB1YmxpYyBnZXQgZ3JvdXAoKTogQVhQUGVybWlzc2lvbkdyb3VwRGVmaW5pdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyQ29udGV4dCwgZ3JvdXA6IEFYUFBlcm1pc3Npb25Hcm91cERlZmluaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5fZ3JvdXAgPSBncm91cDtcbiAgICB9XG5cbiAgICBhZGRQZXJtaXNzaW9uKG5hbWU6IHN0cmluZywgdGl0bGU6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbkJ1aWxkZXIge1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9uOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2dyb3VwLnBlcm1pc3Npb25zLnB1c2gocGVybWlzc2lvbik7XG4gICAgICAgIHJldHVybiBuZXcgQVhQUGVybWlzc2lvbkRlZmluaXRpb25CdWlsZGVyKHRoaXMsIHBlcm1pc3Npb24pO1xuICAgIH1cblxuXG5cblxuICAgIGVuZEdyb3VwKCk6IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uUHJvdmlkZXJDb250ZXh0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgICB9XG5cbiAgICBmaW5kUGVybWlzc2lvbihwYXRoOiBzdHJpbmcpOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZmluZEdyb3VwKG5hbWU6IHN0cmluZyk6IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uR3JvdXBCdWlsZGVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIEFYUFBlcm1pc3Npb25EZWZpbml0aW9uQnVpbGRlciB7XG4gICAgcHJpdmF0ZSBncm91cEJ1aWxkZXI6IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uR3JvdXBCdWlsZGVyO1xuICAgIHByaXZhdGUgcGVybWlzc2lvbjogQVhQUGVybWlzc2lvbkRlZmluaXRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihncm91cEJ1aWxkZXI6IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uR3JvdXBCdWlsZGVyLCBwZXJtaXNzaW9uOiBBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbikge1xuICAgICAgICB0aGlzLmdyb3VwQnVpbGRlciA9IGdyb3VwQnVpbGRlcjtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uID0gcGVybWlzc2lvbjtcbiAgICB9XG5cbiAgICBhZGRDaGlsZChuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogQVhQUGVybWlzc2lvbkRlZmluaXRpb25CdWlsZGVyIHtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbjogQVhQUGVybWlzc2lvbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBlcm1pc3Npb24uY2hpbGRyZW4ucHVzaChwZXJtaXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG5cbiAgICBlbmRQZXJtaXNzaW9uKCk6IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uR3JvdXBCdWlsZGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCdWlsZGVyO1xuICAgIH1cbn0iXX0=","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPPermissionDefinitionProviderContext } from './permission-definition.builder';\nimport * as i0 from \"@angular/core\";\nexport const AXP_PERMISSION_DEFINITION_PROVIDER = new InjectionToken('AXP_PERMISSION_DEFINITION_PROVIDER', {\n providedIn: 'root',\n factory: () => {\n return [];\n }\n});\nexport class AXPPermissionDefinitionService {\n constructor() {\n this.providers = inject(AXP_PERMISSION_DEFINITION_PROVIDER, { optional: true });\n this.cache = null;\n }\n async load() {\n if (this.cache) {\n return;\n }\n const context = new AXPPermissionDefinitionProviderContext();\n if (Array.isArray(this.providers)) {\n for (const provider of this.providers) {\n if (provider instanceof Promise) {\n // If provider is a promise, resolve it\n const resolvedProvider = await provider;\n await resolvedProvider.define(context);\n }\n else {\n // If provider is a direct instance, use it directly\n await provider.define(context);\n }\n }\n }\n this.cache = context.getGroupDefinitions();\n }\n async reload() {\n this.cache = null;\n await this.load();\n }\n async getGroups() {\n await this.load();\n return this.cache ?? [];\n }\n async getPermissions() {\n await this.load();\n return this.cache?.flatMap(g => g.permissions) ?? [];\n }\n async getGroup(name) {\n await this.load();\n return this.cache?.find(g => g.name === name) ?? null;\n }\n async getPermission(name) {\n await this.load();\n return this.cache?.find(g => g.permissions.find(p => p.name === name))?.permissions.find(p => p.name === name) ?? null;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPPermissionDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPPermissionDefinitionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPPermissionDefinitionService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1kZWZpbml0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9wZXJtaXNzaW9uL3Blcm1pc3Npb24tZGVmaW5pdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFRekYsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxjQUFjLENBQW9DLG9DQUFvQyxFQUFFO0lBQzVJLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUU7UUFDWixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Q0FDRixDQUFDLENBQUM7QUFJSCxNQUFNLE9BQU8sOEJBQThCO0lBRDNDO1FBRVUsY0FBUyxHQUFHLE1BQU0sQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLFVBQUssR0FBMEMsSUFBSSxDQUFDO0tBZ0Q3RDtJQTdDUyxLQUFLLENBQUMsSUFBSTtRQUNoQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxzQ0FBc0MsRUFBRSxDQUFDO1FBQzdELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxRQUFRLFlBQVksT0FBTyxFQUFFLENBQUM7b0JBQ2hDLHVDQUF1QztvQkFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFFBQVEsQ0FBQztvQkFDeEMsTUFBTSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixvREFBb0Q7b0JBQ3BELE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU07UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjO1FBQ3pCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQVk7UUFDaEMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3hELENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQVk7UUFDckMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN6SCxDQUFDOytHQWhEVSw4QkFBOEI7bUhBQTlCLDhCQUE4QixjQURqQixNQUFNOzs0RkFDbkIsOEJBQThCO2tCQUQxQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uLCBBWFBQZXJtaXNzaW9uR3JvdXBEZWZpbml0aW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uUHJvdmlkZXJDb250ZXh0IH0gZnJvbSAnLi9wZXJtaXNzaW9uLWRlZmluaXRpb24uYnVpbGRlcic7XG5cblxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFBlcm1pc3Npb25EZWZpbml0aW9uUHJvdmlkZXIge1xuICBkZWZpbmUoY29udGV4dDogQVhQUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlckNvbnRleHQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgY29uc3QgQVhQX1BFUk1JU1NJT05fREVGSU5JVElPTl9QUk9WSURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWFBQZXJtaXNzaW9uRGVmaW5pdGlvblByb3ZpZGVyW10+KCdBWFBfUEVSTUlTU0lPTl9ERUZJTklUSU9OX1BST1ZJREVSJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbn0pO1xuXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQVhQUGVybWlzc2lvbkRlZmluaXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwcm92aWRlcnMgPSBpbmplY3QoQVhQX1BFUk1JU1NJT05fREVGSU5JVElPTl9QUk9WSURFUiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBjYWNoZTogQVhQUGVybWlzc2lvbkdyb3VwRGVmaW5pdGlvbltdIHwgbnVsbCA9IG51bGw7XG5cblxuICBwcml2YXRlIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBjb250ZXh0ID0gbmV3IEFYUFBlcm1pc3Npb25EZWZpbml0aW9uUHJvdmlkZXJDb250ZXh0KCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcm92aWRlcnMpKSB7XG4gICAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIHRoaXMucHJvdmlkZXJzKSB7XG4gICAgICAgIGlmIChwcm92aWRlciBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAvLyBJZiBwcm92aWRlciBpcyBhIHByb21pc2UsIHJlc29sdmUgaXRcbiAgICAgICAgICBjb25zdCByZXNvbHZlZFByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXI7XG4gICAgICAgICAgYXdhaXQgcmVzb2x2ZWRQcm92aWRlci5kZWZpbmUoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgcHJvdmlkZXIgaXMgYSBkaXJlY3QgaW5zdGFuY2UsIHVzZSBpdCBkaXJlY3RseVxuICAgICAgICAgIGF3YWl0IHByb3ZpZGVyLmRlZmluZShjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhY2hlID0gY29udGV4dC5nZXRHcm91cERlZmluaXRpb25zKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2FjaGUgPSBudWxsO1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEdyb3VwcygpOiBQcm9taXNlPEFYUFBlcm1pc3Npb25Hcm91cERlZmluaXRpb25bXT4ge1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlID8/IFtdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFBlcm1pc3Npb25zKCk6IFByb21pc2U8QVhQUGVybWlzc2lvbkRlZmluaXRpb25bXT4ge1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlPy5mbGF0TWFwKGcgPT4gZy5wZXJtaXNzaW9ucykgPz8gW107XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R3JvdXAobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBQZXJtaXNzaW9uR3JvdXBEZWZpbml0aW9uIHwgbnVsbD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZCgpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlPy5maW5kKGcgPT4gZy5uYW1lID09PSBuYW1lKSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFBlcm1pc3Npb24obmFtZTogc3RyaW5nKTogUHJvbWlzZTxBWFBQZXJtaXNzaW9uRGVmaW5pdGlvbiB8IG51bGw+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWQoKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZT8uZmluZChnID0+IGcucGVybWlzc2lvbnMuZmluZChwID0+IHAubmFtZSA9PT0gbmFtZSkpPy5wZXJtaXNzaW9ucy5maW5kKHAgPT4gcC5uYW1lID09PSBuYW1lKSA/PyBudWxsO1xuICB9XG5cbn1cbiJdfQ==","import { inject } from \"@angular/core\";\nimport { AXPSessionService } from \"../session.service\";\nexport class AXPPermissionEvaluatorScopeProvider {\n constructor() {\n this.sessionService = inject(AXPSessionService);\n }\n async provide(context) {\n context.addScope('permission', {\n /**\n * Check if the current user has all specified permissions\n * @param permissions - Single permission string or array of permission strings\n * @returns boolean - true if user has all permissions, false otherwise\n */\n check: (...permissions) => {\n return this.sessionService.authorize(...permissions);\n },\n /**\n * Check if the current user has any of the specified permissions\n * @param permissions - Array of permission strings\n * @returns boolean - true if user has any of the permissions, false otherwise\n */\n checkAny: (...permissions) => {\n return permissions.some(p => this.sessionService.authorize(p));\n },\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1ldmFsdWF0b3Itc2NvcGUucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9wZXJtaXNzaW9uL3Blcm1pc3Npb24tZXZhbHVhdG9yLXNjb3BlLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkQsTUFBTSxPQUFPLG1DQUFtQztJQUFoRDtRQUVjLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUF1QnpELENBQUM7SUFyQkcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFtRDtRQUM3RCxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtZQUMzQjs7OztlQUlHO1lBQ0gsS0FBSyxFQUFFLENBQUMsR0FBRyxXQUFxQixFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztZQUN6RCxDQUFDO1lBRUQ7Ozs7ZUFJRztZQUNILFFBQVEsRUFBRSxDQUFDLEdBQUcsV0FBcUIsRUFBRSxFQUFFO2dCQUNuQyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGVQcm92aWRlciwgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlUHJvdmlkZXJDb250ZXh0IH0gZnJvbSBcIkBhY29yZXgvcGxhdGZvcm0vY29yZVwiO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3Nlc3Npb24uc2VydmljZVwiO1xuXG5leHBvcnQgY2xhc3MgQVhQUGVybWlzc2lvbkV2YWx1YXRvclNjb3BlUHJvdmlkZXIgaW1wbGVtZW50cyBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGVQcm92aWRlciB7XG5cbiAgICBwcm90ZWN0ZWQgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuXG4gICAgYXN5bmMgcHJvdmlkZShjb250ZXh0OiBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2NvcGVQcm92aWRlckNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29udGV4dC5hZGRTY29wZSgncGVybWlzc2lvbicsIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgYWxsIHNwZWNpZmllZCBwZXJtaXNzaW9uc1xuICAgICAgICAgICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC0gU2luZ2xlIHBlcm1pc3Npb24gc3RyaW5nIG9yIGFycmF5IG9mIHBlcm1pc3Npb24gc3RyaW5nc1xuICAgICAgICAgICAgICogQHJldHVybnMgYm9vbGVhbiAtIHRydWUgaWYgdXNlciBoYXMgYWxsIHBlcm1pc3Npb25zLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY2hlY2s6ICguLi5wZXJtaXNzaW9uczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uU2VydmljZS5hdXRob3JpemUoLi4ucGVybWlzc2lvbnMpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBhbnkgb2YgdGhlIHNwZWNpZmllZCBwZXJtaXNzaW9uc1xuICAgICAgICAgICAgICogQHBhcmFtIHBlcm1pc3Npb25zIC0gQXJyYXkgb2YgcGVybWlzc2lvbiBzdHJpbmdzXG4gICAgICAgICAgICAgKiBAcmV0dXJucyBib29sZWFuIC0gdHJ1ZSBpZiB1c2VyIGhhcyBhbnkgb2YgdGhlIHBlcm1pc3Npb25zLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY2hlY2tBbnk6ICguLi5wZXJtaXNzaW9uczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVybWlzc2lvbnMuc29tZShwID0+IHRoaXMuc2Vzc2lvblNlcnZpY2UuYXV0aG9yaXplKHApKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbn0gIl19","import { inject } from '@angular/core';\nimport { first, map } from 'rxjs';\nimport { AXPUnauthenticatedError } from './errors.types';\nimport { AXPSessionService } from './session.service';\nexport const AXPAuthGuard = (route, state) => {\n const sessionService = inject(AXPSessionService);\n return sessionService.isAuthenticatedWithLoading$.pipe(first(), map((value) => {\n if (value) {\n return true;\n }\n throw new AXPUnauthenticatedError(`Access denied. You are not currently logged in. Please log in to access this page. If you continue to see this message after logging in, please contact support.`, {\n redirectUrl: state.url,\n });\n }));\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL2F1dGguZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWtCLENBQUMsS0FBNkIsRUFBRSxLQUEwQixFQUFFLEVBQUU7SUFDdkcsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDakQsT0FBTyxjQUFjLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUNwRCxLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNaLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLElBQUksdUJBQXVCLENBQy9CLGtLQUFrSyxFQUNsSztZQUNFLFdBQVcsRUFBRSxLQUFLLENBQUMsR0FBRztTQUN2QixDQUNGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUZuLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpcnN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUFVuYXV0aGVudGljYXRlZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMudHlwZXMnO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBBWFBBdXRoR3VhcmQ6IENhbkFjdGl2YXRlRm4gPSAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSA9PiB7XG4gIGNvbnN0IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcbiAgcmV0dXJuIHNlc3Npb25TZXJ2aWNlLmlzQXV0aGVudGljYXRlZFdpdGhMb2FkaW5nJC5waXBlKFxuICAgIGZpcnN0KCksXG4gICAgbWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEFYUFVuYXV0aGVudGljYXRlZEVycm9yKFxuICAgICAgICBgQWNjZXNzIGRlbmllZC4gWW91IGFyZSBub3QgY3VycmVudGx5IGxvZ2dlZCBpbi4gUGxlYXNlIGxvZyBpbiB0byBhY2Nlc3MgdGhpcyBwYWdlLiBJZiB5b3UgY29udGludWUgdG8gc2VlIHRoaXMgbWVzc2FnZSBhZnRlciBsb2dnaW5nIGluLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0LmAsXG4gICAgICAgIHtcbiAgICAgICAgICByZWRpcmVjdFVybDogc3RhdGUudXJsLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KSxcbiAgKTtcbn07XG4iXX0=","import { Inject, NgModule, Optional, inject, provideAppInitializer } from '@angular/core';\nimport { AXPAuthStrategyRegistryService } from './auth-registry.service';\nimport { AXPFeatureDirective } from './feature';\nimport { AXPPermissionDirective } from './permission/permission.directive';\nimport { AXPSessionService } from './session.service';\nimport * as i0 from \"@angular/core\";\nexport function initializeAppState(service) {\n return async () => {\n try {\n await service.restoreSession();\n }\n catch (error) {\n console.error(error);\n }\n };\n}\nexport class AXPAuthModule {\n static forRoot(configs) {\n return {\n ngModule: AXPAuthModule,\n providers: [\n ...(configs?.strategies || []),\n {\n provide: 'AXPAuthModuleFactory',\n useFactory: (registry) => () => {\n registry.register(...(configs?.strategies || []));\n },\n deps: [AXPAuthStrategyRegistryService],\n multi: true,\n },\n ],\n };\n }\n static forChild(configs) {\n return {\n ngModule: AXPAuthModule,\n providers: [\n ...(configs?.strategies || []),\n {\n provide: 'AXPAuthModuleFactory',\n useFactory: (registry) => () => {\n registry.register(...(configs?.strategies || []));\n },\n deps: [AXPAuthStrategyRegistryService],\n multi: true,\n },\n ],\n };\n }\n /**\n * @ignore\n */\n constructor(instances) {\n instances?.forEach((f) => {\n f();\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPAuthModule, deps: [{ token: 'AXPAuthModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPAuthModule, declarations: [AXPPermissionDirective, AXPFeatureDirective], exports: [AXPPermissionDirective, AXPFeatureDirective] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPAuthModule, providers: [\n provideAppInitializer(() => {\n const initializerFn = initializeAppState(inject(AXPSessionService));\n return initializerFn();\n }),\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPAuthModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [AXPPermissionDirective, AXPFeatureDirective],\n declarations: [AXPPermissionDirective, AXPFeatureDirective],\n providers: [\n provideAppInitializer(() => {\n const initializerFn = initializeAppState(inject(AXPSessionService));\n return initializerFn();\n }),\n ],\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: ['AXPAuthModuleFactory']\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2xpYi9hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUF1QixRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBTXRELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUEwQjtJQUMzRCxPQUFPLEtBQUssSUFBSSxFQUFFO1FBQ2hCLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWFELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBOEI7UUFDM0MsT0FBTztZQUNMLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLFNBQVMsRUFBRTtnQkFDVCxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUM7Z0JBQzlCO29CQUNFLE9BQU8sRUFBRSxzQkFBc0I7b0JBQy9CLFVBQVUsRUFBRSxDQUFDLFFBQXdDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTt3QkFDN0QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNwRCxDQUFDO29CQUNELElBQUksRUFBRSxDQUFDLDhCQUE4QixDQUFDO29CQUN0QyxLQUFLLEVBQUUsSUFBSTtpQkFDWjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQThCO1FBQzVDLE9BQU87WUFDTCxRQUFRLEVBQUUsYUFBYTtZQUN2QixTQUFTLEVBQUU7Z0JBQ1QsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO2dCQUM5QjtvQkFDRSxPQUFPLEVBQUUsc0JBQXNCO29CQUMvQixVQUFVLEVBQUUsQ0FBQyxRQUF3QyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUU7d0JBQzdELFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDcEQsQ0FBQztvQkFDRCxJQUFJLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztvQkFDdEMsS0FBSyxFQUFFLElBQUk7aUJBQ1o7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUF3RCxTQUFnQjtRQUN0RSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsQ0FBQyxFQUFFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBMUNVLGFBQWEsa0JBc0NRLHNCQUFzQjtnSEF0QzNDLGFBQWEsaUJBUlQsc0JBQXNCLEVBQUUsbUJBQW1CLGFBRGhELHNCQUFzQixFQUFFLG1CQUFtQjtnSEFTMUMsYUFBYSxhQVBiO1lBQ1QscUJBQXFCLENBQUMsR0FBRyxFQUFFO2dCQUN6QixNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxPQUFPLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQztTQUNIOzs0RkFFVSxhQUFhO2tCQVh6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxFQUFFO29CQUNYLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLG1CQUFtQixDQUFDO29CQUN0RCxZQUFZLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQztvQkFDM0QsU0FBUyxFQUFFO3dCQUNULHFCQUFxQixDQUFDLEdBQUcsRUFBRTs0QkFDekIsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzs0QkFDcEUsT0FBTyxhQUFhLEVBQUUsQ0FBQzt3QkFDekIsQ0FBQyxDQUFDO3FCQUNIO2lCQUNGOzswQkF1Q2MsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBPcHRpb25hbCwgaW5qZWN0LCBwcm92aWRlQXBwSW5pdGlhbGl6ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUF9FWFBSRVNTSU9OX0VWQUxVQVRPUl9TQ09QRV9QUk9WSURFUiB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBBdXRoU3RyYXRlZ3lSZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuL2F1dGgtcmVnaXN0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBBWFBBdXRoU3RyYXRlZ3kgfSBmcm9tICcuL2F1dGguc3RyYXRlZ3knO1xuaW1wb3J0IHsgQVhQRmVhdHVyZURpcmVjdGl2ZSB9IGZyb20gJy4vZmVhdHVyZSc7XG5pbXBvcnQgeyBBWFBQZXJtaXNzaW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9wZXJtaXNzaW9uL3Blcm1pc3Npb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEFYUFBlcm1pc3Npb25FdmFsdWF0b3JTY29wZVByb3ZpZGVyIH0gZnJvbSAnLi9wZXJtaXNzaW9uL3Blcm1pc3Npb24tZXZhbHVhdG9yLXNjb3BlLnByb3ZpZGVyJztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXNzaW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUEF1dGhNb2R1bGVDb25maWdzIHtcbiAgc3RyYXRlZ2llczogKG5ldyAoKSA9PiBBWFBBdXRoU3RyYXRlZ3kpW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQXBwU3RhdGUoc2VydmljZTogQVhQU2Vzc2lvblNlcnZpY2UpIHtcbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VydmljZS5yZXN0b3JlU2Vzc2lvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH07XG59XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtdLFxuICBleHBvcnRzOiBbQVhQUGVybWlzc2lvbkRpcmVjdGl2ZSwgQVhQRmVhdHVyZURpcmVjdGl2ZV0sXG4gIGRlY2xhcmF0aW9uczogW0FYUFBlcm1pc3Npb25EaXJlY3RpdmUsIEFYUEZlYXR1cmVEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFtcbiAgICBwcm92aWRlQXBwSW5pdGlhbGl6ZXIoKCkgPT4ge1xuICAgICAgY29uc3QgaW5pdGlhbGl6ZXJGbiA9IGluaXRpYWxpemVBcHBTdGF0ZShpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpKTtcbiAgICAgIHJldHVybiBpbml0aWFsaXplckZuKCk7XG4gICAgfSksXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYUEF1dGhNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChjb25maWdzPzogQVhQQXV0aE1vZHVsZUNvbmZpZ3MpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFYUEF1dGhNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFYUEF1dGhNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgLi4uKGNvbmZpZ3M/LnN0cmF0ZWdpZXMgfHwgW10pLFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogJ0FYUEF1dGhNb2R1bGVGYWN0b3J5JyxcbiAgICAgICAgICB1c2VGYWN0b3J5OiAocmVnaXN0cnk6IEFYUEF1dGhTdHJhdGVneVJlZ2lzdHJ5U2VydmljZSkgPT4gKCkgPT4ge1xuICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXIoLi4uKGNvbmZpZ3M/LnN0cmF0ZWdpZXMgfHwgW10pKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcHM6IFtBWFBBdXRoU3RyYXRlZ3lSZWdpc3RyeVNlcnZpY2VdLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZvckNoaWxkKGNvbmZpZ3M/OiBBWFBBdXRoTW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhQQXV0aE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQVhQQXV0aE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAuLi4oY29uZmlncz8uc3RyYXRlZ2llcyB8fCBbXSksXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiAnQVhQQXV0aE1vZHVsZUZhY3RvcnknLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IChyZWdpc3RyeTogQVhQQXV0aFN0cmF0ZWd5UmVnaXN0cnlTZXJ2aWNlKSA9PiAoKSA9PiB7XG4gICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlciguLi4oY29uZmlncz8uc3RyYXRlZ2llcyB8fCBbXSkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGVwczogW0FYUEF1dGhTdHJhdGVneVJlZ2lzdHJ5U2VydmljZV0sXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdCgnQVhQQXV0aE1vZHVsZUZhY3RvcnknKSBpbnN0YW5jZXM6IGFueVtdKSB7XG4gICAgaW5zdGFuY2VzPy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBmKCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==","export class AXPAuthStrategy {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL2F1dGguc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0NBLE1BQU0sT0FBZ0IsZUFBZTtDQU1wQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9hcHBsaWNhdGlvbi9hcHBsaWNhdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBBWFBTZXNzaW9uQ29udGV4dCB9IGZyb20gJy4vc2Vzc2lvbi50eXBlcyc7XG5pbXBvcnQgeyBBWFBUZW5hbnQgfSBmcm9tICcuL3RlbmFudC90ZW5hbnQudHlwZXMnO1xuaW1wb3J0IHsgQVhQVXNlciB9IGZyb20gJy4vdXNlci91c2VyLnR5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFBCYXNlQ3JlZGVudGlhbHMge1xuICBzdHJhdGVneTogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQVG9rZW5SZXN1bHQge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBleHBpcmVzSW4/OiBzdHJpbmcgfCBudWxsO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGlkVG9rZW4/OiBzdHJpbmc7XG4gIHRlbmFudD86IEFYUFRlbmFudCB8IG51bGw7XG4gIGFwcGxpY2F0aW9uPzogQVhQQXBwbGljYXRpb24gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFNpZ25JblJlc3VsdCB7XG4gIHN1Y2NlZWQ6IGJvb2xlYW47XG4gIGRhdGE/OiB7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICBpZFRva2VuPzogc3RyaW5nIHwgbnVsbDtcbiAgICBleHBpcmVzSW4/OiBzdHJpbmcgfCBudWxsO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICAgIHVzZXI6IEFYUFVzZXI7XG4gICAgdGVuYW50PzogQVhQVGVuYW50IHwgbnVsbDtcbiAgICBhcHBsaWNhdGlvbj86IEFYUEFwcGxpY2F0aW9uIHwgbnVsbDtcbiAgfTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYUEF1dGhTdHJhdGVneSB7XG4gIGFic3RyYWN0IGdldCBuYW1lKCk6IHN0cmluZztcbiAgYWJzdHJhY3Qgc2lnbmluKGNyZWRlbnRpYWxzOiBBWFBCYXNlQ3JlZGVudGlhbHMpOiBQcm9taXNlPEFYUFNpZ25JblJlc3VsdCB8IHZvaWQ+O1xuICBhYnN0cmFjdCBzaWdub3V0KCk6IFByb21pc2U8dm9pZD47XG4gIGFic3RyYWN0IHJlZnJlc2hUb2tlbihjb250ZXh0OiBBWFBTZXNzaW9uQ29udGV4dCk6IFByb21pc2U8QVhQU2lnbkluUmVzdWx0PjtcbiAgYWJzdHJhY3QgdXBkYXRlVG9rZW4ocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IFByb21pc2U8QVhQU2lnbkluUmVzdWx0IHwgdm9pZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQU2Vzc2lvbkRhdGEge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgaWRUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgc3RyYXRlZ3k6IHN0cmluZztcbiAgdXNlcj86IEFYUFVzZXIgfCBudWxsO1xuICB0ZW5hbnQ/OiBBWFBUZW5hbnQgfCBudWxsO1xuICBhcHBsaWNhdGlvbj86IEFYUEFwcGxpY2F0aW9uIHwgbnVsbDtcbiAgZXhwaXJlc0luPzogc3RyaW5nIHwgbnVsbDtcbn1cbiJdfQ==","//#region ---- JWT Utility ----\n/**\n * Utility class for JWT token operations\n */\nexport class JwtUtil {\n /**\n * Parses a JWT token and returns the payload\n */\n static parseJwt(token) {\n try {\n const base64Url = token.split('.')[1];\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const jsonPayload = decodeURIComponent(atob(base64)\n .split('')\n .map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join(''));\n return JSON.parse(jsonPayload);\n }\n catch (error) {\n throw new Error('Invalid JWT token');\n }\n }\n}\n//#endregion\n//#region ---- PKCE Utility ----\n/**\n * Utility class for PKCE (Proof Key for Code Exchange) operations\n */\nexport class PkceUtil {\n /**\n * Generates a random string for PKCE code verifier\n */\n static generateRandomString(length) {\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n return this.base64UrlEncode(array);\n }\n /**\n * Generates PKCE code challenge from verifier\n */\n static async generateCodeChallenge(codeVerifier) {\n const encoder = new TextEncoder();\n const data = encoder.encode(codeVerifier);\n const digest = await crypto.subtle.digest('SHA-256', data);\n return this.base64UrlEncode(new Uint8Array(digest));\n }\n /**\n * Base64 URL encoding for PKCE\n */\n static base64UrlEncode(array) {\n return btoa(String.fromCharCode(...array))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n }\n}\n//#endregion\n//#region ---- Time Utility ----\n/**\n * Utility class for time and date operations\n */\nexport class TimeUtil {\n /**\n * Calculates the time difference in milliseconds between a future date and now\n */\n static expiresInMilliseconds(expiresInDate) {\n return new Date(expiresInDate).getTime() - new Date().getTime();\n }\n /**\n * Calculates expiration date from seconds\n */\n static calculateExpireInDate(expireInSeconds) {\n return new Date(Date.now() + expireInSeconds * 1000).toISOString();\n }\n}\n//#endregion \n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vYXV0aC9zcmMvbGliL2F1dGgudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxPQUFPLE9BQU87SUFDbEI7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDO2lCQUNULEtBQUssQ0FBQyxFQUFFLENBQUM7aUJBQ1QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQy9ELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDWixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxZQUFZO0FBRVosb0NBQW9DO0FBRXBDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDbkI7O09BRUc7SUFDSCxNQUFNLENBQUMsb0JBQW9CLENBQUMsTUFBYztRQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFlBQW9CO1FBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQWlCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQzthQUN2QyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUNuQixPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUNuQixPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQUVELFlBQVk7QUFFWixvQ0FBb0M7QUFFcEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNuQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxhQUFxQjtRQUNoRCxPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHFCQUFxQixDQUFDLGVBQXVCO1FBQ2xELE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFFRCxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIC0tLS0gICBKV1QgVXRpbGl0eSAgIC0tLS1cblxuLyoqXG4gKiBVdGlsaXR5IGNsYXNzIGZvciBKV1QgdG9rZW4gb3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgSnd0VXRpbCB7XG4gIC8qKlxuICAgKiBQYXJzZXMgYSBKV1QgdG9rZW4gYW5kIHJldHVybnMgdGhlIHBheWxvYWRcbiAgICovXG4gIHN0YXRpYyBwYXJzZUp3dCh0b2tlbjogc3RyaW5nKTogYW55IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZTY0VXJsID0gdG9rZW4uc3BsaXQoJy4nKVsxXTtcbiAgICAgIGNvbnN0IGJhc2U2NCA9IGJhc2U2NFVybC5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpO1xuICAgICAgY29uc3QganNvblBheWxvYWQgPSBkZWNvZGVVUklDb21wb25lbnQoXG4gICAgICAgIGF0b2IoYmFzZTY0KVxuICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAubWFwKGMgPT4gJyUnICsgKCcwMCcgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMikpXG4gICAgICAgICAgLmpvaW4oJycpXG4gICAgICApO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblBheWxvYWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSldUIHRva2VuJyk7XG4gICAgfVxuICB9XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIFBLQ0UgVXRpbGl0eSAgIC0tLS1cblxuLyoqXG4gKiBVdGlsaXR5IGNsYXNzIGZvciBQS0NFIChQcm9vZiBLZXkgZm9yIENvZGUgRXhjaGFuZ2UpIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFBrY2VVdGlsIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBzdHJpbmcgZm9yIFBLQ0UgY29kZSB2ZXJpZmllclxuICAgKi9cbiAgc3RhdGljIGdlbmVyYXRlUmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XG4gICAgcmV0dXJuIHRoaXMuYmFzZTY0VXJsRW5jb2RlKGFycmF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgUEtDRSBjb2RlIGNoYWxsZW5nZSBmcm9tIHZlcmlmaWVyXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVDb2RlQ2hhbGxlbmdlKGNvZGVWZXJpZmllcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKGNvZGVWZXJpZmllcik7XG4gICAgY29uc3QgZGlnZXN0ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5iYXNlNjRVcmxFbmNvZGUobmV3IFVpbnQ4QXJyYXkoZGlnZXN0KSk7XG4gIH1cblxuICAvKipcbiAgICogQmFzZTY0IFVSTCBlbmNvZGluZyBmb3IgUEtDRVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYmFzZTY0VXJsRW5jb2RlKGFycmF5OiBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmFycmF5KSlcbiAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICAucmVwbGFjZSgvPS9nLCAnJyk7XG4gIH1cbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgVGltZSBVdGlsaXR5ICAgLS0tLVxuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIHRpbWUgYW5kIGRhdGUgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgVGltZVV0aWwge1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgdGltZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGEgZnV0dXJlIGRhdGUgYW5kIG5vd1xuICAgKi9cbiAgc3RhdGljIGV4cGlyZXNJbk1pbGxpc2Vjb25kcyhleHBpcmVzSW5EYXRlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZShleHBpcmVzSW5EYXRlKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGV4cGlyYXRpb24gZGF0ZSBmcm9tIHNlY29uZHNcbiAgICovXG4gIHN0YXRpYyBjYWxjdWxhdGVFeHBpcmVJbkRhdGUoZXhwaXJlSW5TZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLm5vdygpICsgZXhwaXJlSW5TZWNvbmRzICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgfVxufVxuXG4vLyNlbmRyZWdpb24gIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LXBsYXRmb3JtLWF1dGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2F1dGgvc3JjL2Fjb3JleC1wbGF0Zm9ybS1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}