@c8y/ngx-components 1021.31.0 → 1021.31.4

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 (49) hide show
  1. package/branding/shared/data/branding-tracking.service.d.ts +20 -0
  2. package/branding/shared/data/branding-tracking.service.d.ts.map +1 -0
  3. package/branding/shared/data/index.d.ts +1 -0
  4. package/branding/shared/data/index.d.ts.map +1 -1
  5. package/branding/shared/data/store-branding.service.d.ts +8 -1
  6. package/branding/shared/data/store-branding.service.d.ts.map +1 -1
  7. package/branding/shared/lazy/branding/branding.component.d.ts +3 -2
  8. package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
  9. package/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.d.ts.map +1 -1
  10. package/cockpit-config/cockpit-config.module.d.ts +1 -1
  11. package/cockpit-config/cockpit-config.module.d.ts.map +1 -1
  12. package/core/common/ui-state.service.d.ts +0 -1
  13. package/core/common/ui-state.service.d.ts.map +1 -1
  14. package/core/plugins/index.d.ts +1 -0
  15. package/core/plugins/index.d.ts.map +1 -1
  16. package/core/plugins/plugin-loaded.pipe.d.ts +12 -0
  17. package/core/plugins/plugin-loaded.pipe.d.ts.map +1 -0
  18. package/core/plugins/plugins-resolve.service.d.ts +4 -2
  19. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  20. package/esm2022/branding/shared/data/branding-tracking.service.mjs +58 -0
  21. package/esm2022/branding/shared/data/index.mjs +2 -1
  22. package/esm2022/branding/shared/data/store-branding.service.mjs +15 -4
  23. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +16 -12
  24. package/esm2022/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.mjs +2 -2
  25. package/esm2022/cockpit-config/cockpit-config.module.mjs +6 -3
  26. package/esm2022/cockpit-config/feature-config.component.mjs +5 -4
  27. package/esm2022/core/common/ui-state.service.mjs +1 -19
  28. package/esm2022/core/plugins/index.mjs +2 -1
  29. package/esm2022/core/plugins/plugin-loaded.pipe.mjs +26 -0
  30. package/esm2022/core/plugins/plugins-resolve.service.mjs +5 -1
  31. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +68 -5
  32. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +15 -11
  34. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +7 -5
  36. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components.mjs +39 -31
  38. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  39. package/locales/de.po +1 -1
  40. package/locales/es.po +1 -1
  41. package/locales/fr.po +1 -1
  42. package/locales/ja_JP.po +1 -1
  43. package/locales/ko.po +1 -1
  44. package/locales/nl.po +1 -1
  45. package/locales/pl.po +1 -1
  46. package/locales/pt_BR.po +1 -1
  47. package/locales/zh_CN.po +1 -1
  48. package/locales/zh_TW.po +1 -1
  49. package/package.json +1 -1
@@ -0,0 +1,20 @@
1
+ import { GainsightService } from '@c8y/ngx-components';
2
+ import * as i0 from "@angular/core";
3
+ export declare class BrandingTrackingService {
4
+ private gainsight;
5
+ readonly prefix = "brandingManager";
6
+ constructor(gainsight: GainsightService);
7
+ getStartedUsingBranding(): void;
8
+ deleteAllBrandings(): void;
9
+ exportBranding(): void;
10
+ addNewVersion(): void;
11
+ duplicateVersion(): void;
12
+ applyToApps(apps: string[]): void;
13
+ importBranding(): void;
14
+ deleteBrandingVariant(): void;
15
+ openPreviewForBranding(): void;
16
+ private triggerEvent;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<BrandingTrackingService, [{ optional: true; }]>;
18
+ static ɵprov: i0.ɵɵInjectableDeclaration<BrandingTrackingService>;
19
+ }
20
+ //# sourceMappingURL=branding-tracking.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branding-tracking.service.d.ts","sourceRoot":"","sources":["../../../../branding/shared/data/branding-tracking.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAe,MAAM,qBAAqB,CAAC;;AAEpE,qBAGa,uBAAuB;IAEV,OAAO,CAAC,SAAS;IADzC,QAAQ,CAAC,MAAM,qBAAqB;gBACJ,SAAS,EAAE,gBAAgB;IAE3D,uBAAuB;IAIvB,kBAAkB;IAIlB,cAAc;IAId,aAAa;IAIb,gBAAgB;IAIhB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE;IAI1B,cAAc;IAId,qBAAqB;IAIrB,sBAAsB;IAItB,OAAO,CAAC,YAAY;yCAxCT,uBAAuB;6CAAvB,uBAAuB;CAoDnC"}
@@ -3,4 +3,5 @@ export * from './branding-shades.service';
3
3
  export * from './branding-version.service';
4
4
  export * from './store-branding.service';
5
5
  export * from './branding.type';
6
+ export * from './branding-tracking.service';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../branding/shared/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../branding/shared/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC"}
@@ -5,6 +5,7 @@ import { BehaviorSubject, Observable } from 'rxjs';
5
5
  import { BrandingVersionService } from './branding-version.service';
6
6
  import { BrandingOptionsJson } from './branding.type';
7
7
  import { StaticAsset, StaticAssetsService } from '@c8y/ngx-components/static-assets/data';
8
+ import { BrandingTrackingService } from './branding-tracking.service';
8
9
  import * as i0 from "@angular/core";
9
10
  export interface BrandVersion {
10
11
  name: string;
@@ -41,6 +42,7 @@ export declare class StoreBrandingService {
41
42
  private appState;
42
43
  private staticAssets;
43
44
  private themeSwitcher;
45
+ private brandingTracking;
44
46
  readonly fileNames: {
45
47
  readonly options: "options.json";
46
48
  readonly manifest: "cumulocity.json";
@@ -56,11 +58,16 @@ export declare class StoreBrandingService {
56
58
  readonly availability: ApplicationAvailability.SHARED;
57
59
  };
58
60
  refreshTriggerBrandingVariants: BehaviorSubject<void>;
59
- constructor(applicationService: ApplicationService, inventory: InventoryService, binary: InventoryBinaryService, zip: ZipService, fetch: FetchClient, brandingVersionService: BrandingVersionService, appState: AppStateService, staticAssets: StaticAssetsService, themeSwitcher: ThemeSwitcherService);
61
+ constructor(applicationService: ApplicationService, inventory: InventoryService, binary: InventoryBinaryService, zip: ZipService, fetch: FetchClient, brandingVersionService: BrandingVersionService, appState: AppStateService, staticAssets: StaticAssetsService, themeSwitcher: ThemeSwitcherService, brandingTracking: BrandingTrackingService);
60
62
  /**
61
63
  * Sets the `latest` tag on the provided branding version. Making it the global active branding.
62
64
  */
63
65
  markAsActive(brandingVersion: BrandVersion, app?: IApplication): Promise<void>;
66
+ /**
67
+ * Opens a new tab with to preview the branding. The branding must have been saved beforehand.
68
+ * @param brandingName the name of the branding to be previewed
69
+ */
70
+ openPreviewForBranding(brandingName: string): void;
64
71
  /**
65
72
  * Returns the brandings of the tenant.
66
73
  * If no public options app is found, publicOptions will be undefined and variants an empty array.
@@ -1 +1 @@
1
- {"version":3,"file":"store-branding.service.d.ts","sourceRoot":"","sources":["../../../../branding/shared/data/store-branding.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store-branding.service.d.ts","sourceRoot":"","sources":["../../../../branding/shared/data/store-branding.service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,kBAAkB,EAElB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAS,eAAe,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAG1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAA0C,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;;AAEtE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,YAAY,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,qBACa,oBAAoB;IAiB7B,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,gBAAgB;IAzB1B,QAAQ,CAAC,SAAS;;;;MAIP;IACX,QAAQ,CAAC,cAAc;;;;;;;;MAQW;IAClC,8BAA8B,wBAAmC;gBAEvD,kBAAkB,EAAE,kBAAkB,EACtC,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,WAAW,EAClB,sBAAsB,EAAE,sBAAsB,EAC9C,QAAQ,EAAE,eAAe,EACzB,YAAY,EAAE,mBAAmB,EACjC,aAAa,EAAE,oBAAoB,EACnC,gBAAgB,EAAE,uBAAuB;IAGnD;;OAEG;IACG,YAAY,CAAC,eAAe,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpF;;;OAGG;IACH,sBAAsB,CAAC,YAAY,EAAE,MAAM;IAW3C;;;;OAIG;IACG,oBAAoB,CACxB,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC;QAAE,aAAa,EAAE,YAAY,GAAG,SAAS,CAAC;QAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;IA2CjF;;;OAGG;IACG,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhE;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IA8C9C,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAqC,GAC9C,UAAU,CAAC,IAAI,CAAC;IAOnB;;;OAGG;IACG,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE;;;;OAIG;IACG,6BAA6B,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiBtF;;;OAGG;IACG,YAAY,CAChB,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,gBAAgB,CAAC,EAAE,YAAY,GAC9B,OAAO,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,kBAAkB,CAAC;QAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;IAiBF;;;OAGG;IACG,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzF;;OAEG;IACG,cAAc,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtE;;;OAGG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,mBAAwB,EACjC,IAAI,GAAE,MAAM,EAAO,EACnB,gBAAgB,CAAC,EAAE,YAAY,GAC9B,OAAO,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,kBAAkB,CAAC;QAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;IAMF;;;OAGG;IACG,4BAA4B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAWlF;;OAEG;IACG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,cAAc,EAAE,MAAM,EACtB,oBAAoB,GAAE,MAAM,EAAO,EACnC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC;IA4BlB;;;OAGG;IACG,0CAA0C,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;QAC/F,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,kBAAkB,CAAC;QAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;IAmDF;;;;OAIG;IACH,sCAAsC,CACpC,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,WAAW,EAAE,EACxB,SAAS,EAAE,WAAW,EAAE,GACvB,mBAAmB;YAkBR,mBAAmB;YAOnB,sBAAsB;yCAtbzB,oBAAoB;6CAApB,oBAAoB;CA0bhC"}
@@ -1,4 +1,4 @@
1
- import { BrandVersion, StoreBrandingService, BrandingVersionService } from '@c8y/ngx-components/branding/shared/data';
1
+ import { BrandVersion, StoreBrandingService, BrandingVersionService, BrandingTrackingService } from '@c8y/ngx-components/branding/shared/data';
2
2
  import { Observable } from 'rxjs';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
4
  import { ActionControl, AlertService, AppStateService, Column, DisplayOptions, ModalService, Pagination, ZipService } from '@c8y/ngx-components';
@@ -22,6 +22,7 @@ export declare class BrandingComponent {
22
22
  private addBrandingModalService;
23
23
  private alert;
24
24
  private brandingImportModalService;
25
+ private brandingTracking;
25
26
  pagination: Pagination;
26
27
  displayOptions: DisplayOptions;
27
28
  actionControls: ActionControl[];
@@ -32,7 +33,7 @@ export declare class BrandingComponent {
32
33
  variants: BrandVersion[];
33
34
  }>;
34
35
  private reloadTrigger;
35
- constructor(brandings: StoreBrandingService, activatedRoute: ActivatedRoute, appState: AppStateService, applicationService: ApplicationService, zip: ZipService, staticAssets: StaticAssetsService, router: Router, modal: BsModalService, confirmModal: ModalService, brandingVersionService: BrandingVersionService, addBrandingModalService: AddBrandingModalService, alert: AlertService, brandingImportModalService: BrandingImportModalService);
36
+ constructor(brandings: StoreBrandingService, activatedRoute: ActivatedRoute, appState: AppStateService, applicationService: ApplicationService, zip: ZipService, staticAssets: StaticAssetsService, router: Router, modal: BsModalService, confirmModal: ModalService, brandingVersionService: BrandingVersionService, addBrandingModalService: AddBrandingModalService, alert: AlertService, brandingImportModalService: BrandingImportModalService, brandingTracking: BrandingTrackingService);
36
37
  deleteAllBrandings(publicOptions?: IApplication): Promise<void>;
37
38
  exportBranding(variant: BrandVersion): Promise<void>;
38
39
  refresh(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"branding.component.d.ts","sourceRoot":"","sources":["../../../../../branding/shared/lazy/branding/branding.component.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAmB,UAAU,EAAkB,MAAM,MAAM,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EAEf,MAAM,EACN,cAAc,EACd,YAAY,EACZ,UAAU,EAEV,UAAU,EAIX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6DAA6D,CAAC;AAEtG,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;;AAIpG,qBAMa,iBAAiB;IAqJ1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,0BAA0B;IAhKpC,UAAU,EAAE,UAAU,CAGpB;IACF,cAAc,EAAE,cAAc,CAM5B;IACF,cAAc,EAAE,aAAa,EAAE,CAmG7B;IACF,OAAO,EAAE,MAAM,EAAE,CA4Bf;IACF,qBAAqB,SAAoB;IACzC,0BAA0B,EAAE,UAAU,CAAC;QACrC,aAAa,EAAE,YAAY,CAAC;QAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;KAC1B,CAAC,CAAC;IAEH,OAAO,CAAC,aAAa,CAAwC;gBAEnD,SAAS,EAAE,oBAAoB,EAC/B,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,eAAe,EACzB,kBAAkB,EAAE,kBAAkB,EACtC,GAAG,EAAE,UAAU,EACf,YAAY,EAAE,mBAAmB,EACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,YAAY,EAC1B,sBAAsB,EAAE,sBAAsB,EAC9C,uBAAuB,EAAE,uBAAuB,EAChD,KAAK,EAAE,YAAY,EACnB,0BAA0B,EAAE,0BAA0B;IAc1D,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY;IA2B/C,cAAc,CAAC,OAAO,EAAE,YAAY;IAgB1C,OAAO;IAID,aAAa;IA0Bb,gBAAgB,CAAC,OAAO,EAAE,YAAY;IAoBtC,YAAY,CAAC,YAAY,EAAE,MAAM;IAIjC,uBAAuB;IA0BvB,WAAW,CAAC,OAAO,EAAE,YAAY;IAkCjC,cAAc;YAWN,2BAA2B;yCAvV9B,iBAAiB;2CAAjB,iBAAiB;CA2W7B"}
1
+ {"version":3,"file":"branding.component.d.ts","sourceRoot":"","sources":["../../../../../branding/shared/lazy/branding/branding.component.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAmB,UAAU,EAAkB,MAAM,MAAM,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EAEf,MAAM,EACN,cAAc,EACd,YAAY,EACZ,UAAU,EAEV,UAAU,EAIX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6DAA6D,CAAC;AAEtG,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;;AAIpG,qBAMa,iBAAiB;IAiJ1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,0BAA0B;IAClC,OAAO,CAAC,gBAAgB;IA7J1B,UAAU,EAAE,UAAU,CAGpB;IACF,cAAc,EAAE,cAAc,CAM5B;IACF,cAAc,EAAE,aAAa,EAAE,CA+F7B;IACF,OAAO,EAAE,MAAM,EAAE,CA4Bf;IACF,qBAAqB,SAAoB;IACzC,0BAA0B,EAAE,UAAU,CAAC;QACrC,aAAa,EAAE,YAAY,CAAC;QAC5B,QAAQ,EAAE,YAAY,EAAE,CAAC;KAC1B,CAAC,CAAC;IAEH,OAAO,CAAC,aAAa,CAAwC;gBAEnD,SAAS,EAAE,oBAAoB,EAC/B,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,eAAe,EACzB,kBAAkB,EAAE,kBAAkB,EACtC,GAAG,EAAE,UAAU,EACf,YAAY,EAAE,mBAAmB,EACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,YAAY,EAC1B,sBAAsB,EAAE,sBAAsB,EAC9C,uBAAuB,EAAE,uBAAuB,EAChD,KAAK,EAAE,YAAY,EACnB,0BAA0B,EAAE,0BAA0B,EACtD,gBAAgB,EAAE,uBAAuB;IAc7C,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY;IA6B/C,cAAc,CAAC,OAAO,EAAE,YAAY;IAiB1C,OAAO;IAID,aAAa;IA4Bb,gBAAgB,CAAC,OAAO,EAAE,YAAY;IAsBtC,YAAY,CAAC,YAAY,EAAE,MAAM;IAIjC,uBAAuB;IA4BvB,WAAW,CAAC,OAAO,EAAE,YAAY;IAiCjC,cAAc;YAWN,2BAA2B;yCA5V9B,iBAAiB;2CAAjB,iBAAiB;CAgX7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"edit-branding-router-outlet.component.d.ts","sourceRoot":"","sources":["../../../../../branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAuB,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAmB,UAAU,EAAkB,MAAM,MAAM,CAAC;AAGnE,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;;AAGnF,qBAMa,iCAAkC,YAAW,SAAS;IAY/D,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,QAAQ;IAhBlB,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,sBAAsC;IACjD,iBAAiB,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;IACnD,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,WAAW,CAAkD;IACrE,OAAO,CAAC,2BAA2B,CAE3B;gBAGE,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,EACnB,oBAAoB,EAAE,2BAA2B,EACjD,QAAQ,EAAE,eAAe;IA6CnC,WAAW,IAAI,IAAI;IAInB,cAAc,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAI9D,YAAY;IA8BlB,MAAM;IAIA,WAAW;IAWX,YAAY;IAOZ,oBAAoB,CAAC,KAAK,EAAE,MAAM;IA0BxC,OAAO,CAAC,cAAc;yCApJX,iCAAiC;2CAAjC,iCAAiC;CA8J7C"}
1
+ {"version":3,"file":"edit-branding-router-outlet.component.d.ts","sourceRoot":"","sources":["../../../../../branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAuB,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAmB,UAAU,EAAkB,MAAM,MAAM,CAAC;AAGnE,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;;AAGnF,qBAMa,iCAAkC,YAAW,SAAS;IAY/D,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,QAAQ;IAhBlB,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,sBAAsC;IACjD,iBAAiB,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;IACnD,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,WAAW,CAAkD;IACrE,OAAO,CAAC,2BAA2B,CAE3B;gBAGE,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,EACnB,oBAAoB,EAAE,2BAA2B,EACjD,QAAQ,EAAE,eAAe;IA6CnC,WAAW,IAAI,IAAI;IAInB,cAAc,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAI9D,YAAY;IA8BlB,MAAM;IAIA,WAAW;IAKX,YAAY;IAOZ,oBAAoB,CAAC,KAAK,EAAE,MAAM;IA0BxC,OAAO,CAAC,cAAc;yCA9IX,iCAAiC;2CAAjC,iCAAiC;CAwJ7C"}
@@ -20,7 +20,7 @@ export declare class CockpitConfigModule {
20
20
  private service;
21
21
  constructor(service: CockpitConfigService);
22
22
  static ɵfac: i0.ɵɵFactoryDeclaration<CockpitConfigModule, never>;
23
- static ɵmod: i0.ɵɵNgModuleDeclaration<CockpitConfigModule, [typeof i1.CockpitConfigurationComponent, typeof i2.CockpitSetupStep1Component, typeof i3.CockpitSetupStep2Component, typeof i4.CockpitSetupStep3Component, typeof i5.CockpitSetupStep4Component, typeof i6.FeatureConfigComponent, typeof i7.RootNodeConfigComponent, typeof i8.HomeDashboardConfigComponent, typeof i9.MiscConfigComponent, typeof i10.CockpitSetupStepperButtonsComponent], [typeof i11.CoreModule, typeof i12.AssetSelectorModule, typeof i13.PopoverModule, typeof i14.TooltipModule, typeof i15.EcosystemModule, typeof i16.IconSelectorModule], never>;
23
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CockpitConfigModule, [typeof i1.CockpitConfigurationComponent, typeof i2.CockpitSetupStep1Component, typeof i3.CockpitSetupStep2Component, typeof i4.CockpitSetupStep3Component, typeof i5.CockpitSetupStep4Component, typeof i6.FeatureConfigComponent, typeof i7.RootNodeConfigComponent, typeof i8.HomeDashboardConfigComponent, typeof i9.MiscConfigComponent, typeof i10.CockpitSetupStepperButtonsComponent], [typeof i11.CoreModule, typeof i12.AssetSelectorModule, typeof i13.PopoverModule, typeof i14.TooltipModule, typeof i15.EcosystemModule, typeof i16.IconSelectorModule, typeof i11.PluginLoadedPipe], never>;
24
24
  static ɵinj: i0.ɵɵInjectorDeclaration<CockpitConfigModule>;
25
25
  }
26
26
  //# sourceMappingURL=cockpit-config.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cockpit-config.module.d.ts","sourceRoot":"","sources":["../../cockpit-config/cockpit-config.module.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;;;;;;;;;;;;;;;;;;AAYhE,qBA6Da,mBAAmB;IAClB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,oBAAoB;yCADtC,mBAAmB;0CAAnB,mBAAmB;0CAAnB,mBAAmB;CAI/B"}
1
+ {"version":3,"file":"cockpit-config.module.d.ts","sourceRoot":"","sources":["../../cockpit-config/cockpit-config.module.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;;;;;;;;;;;;;;;;;;AAahE,qBA8Da,mBAAmB;IAClB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,oBAAoB;yCADtC,mBAAmB;0CAAnB,mBAAmB;0CAAnB,mBAAmB;CAI/B"}
@@ -92,7 +92,6 @@ export declare class AppStateService extends StateService {
92
92
  */
93
93
  protected onAppChangesCompletion$(): Observable<void>;
94
94
  private loadDefaultOptions;
95
- private showIncompatibleVersionsError;
96
95
  static ɵfac: i0.ɵɵFactoryDeclaration<AppStateService, never>;
97
96
  static ɵprov: i0.ɵɵInjectableDeclaration<AppStateService>;
98
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ui-state.service.d.ts","sourceRoot":"","sources":["../../../core/common/ui-state.service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,KAAK,EACN,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAiB,UAAU,EAAM,MAAM,MAAM,CAAC;AAYtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;;AAI1D,qBACa,eAAgB,SAAQ,YAAY;IA2C7C,OAAO,CAAC,kBAAkB;IACnB,UAAU,EAAE,UAAU;IAC7B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,yBAAyB;IA9CnC;;;OAGG;IACH,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,CAqBzB;IACH,sBAAsB,EAAE,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,CAA6B;IACnF,WAAW,EAAE,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,CAA6B;IACvE,aAAa,EAAE,eAAe,CAAC,cAAc,GAAG,IAAI,CAAC,CAA6B;IAClF,kBAAkB,EAAE,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,CAA6B;IACrF,wBAAwB,EAAE,UAAU,CAAC,GAAG,CAAC,CAGvC;IACF;;;;OAIG;IACH,iBAAiB,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;gBAGpC,kBAAkB,EAAE,kBAAkB,EACvC,UAAU,EAAE,UAAU,EACrB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,WAAW,EACxB,yBAAyB,EAAE,yBAAyB;IAe9D,oCAAoC;IASpC;;OAEG;IACH,IAAI,KAAK,QAER;IAED,QAAQ;IAKR;;OAEG;IACH,IAAI,SAAS,QAGZ;IAED;;OAEG;IACG,YAAY;IAgBlB;;;;;;OAMG;IACG,8BAA8B,CAAC,CAAC,GAAG,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASnF;;;;OAIG;IAEG,mBAAmB;IAKzB;;;;OAIG;IACG,sBAAsB,CAAC,IAAI,EAAE,MAAM;IAKzC;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;IAK1D;;;;OAIG;IACH,oBAAoB,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO;IASjD;;;;OAIG;IACH,qBAAqB,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC;IAY9D;;OAEG;IACH,qBAAqB;IAKrB,SAAS,CAAC,kBAAkB,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;IAmB1D;;OAEG;IACH,SAAS,CAAC,uBAAuB,IAAI,UAAU,CAAC,IAAI,CAAC;YAkBvC,kBAAkB;IAYhC,OAAO,CAAC,6BAA6B;yCAvP1B,eAAe;6CAAf,eAAe;CAmQ3B"}
1
+ {"version":3,"file":"ui-state.service.d.ts","sourceRoot":"","sources":["../../../core/common/ui-state.service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,KAAK,EACN,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAiB,UAAU,EAAM,MAAM,MAAM,CAAC;AAYtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;;AAG1D,qBACa,eAAgB,SAAQ,YAAY;IA2C7C,OAAO,CAAC,kBAAkB;IACnB,UAAU,EAAE,UAAU;IAC7B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,yBAAyB;IA9CnC;;;OAGG;IACH,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,CAqBzB;IACH,sBAAsB,EAAE,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,CAA6B;IACnF,WAAW,EAAE,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,CAA6B;IACvE,aAAa,EAAE,eAAe,CAAC,cAAc,GAAG,IAAI,CAAC,CAA6B;IAClF,kBAAkB,EAAE,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,CAA6B;IACrF,wBAAwB,EAAE,UAAU,CAAC,GAAG,CAAC,CAGvC;IACF;;;;OAIG;IACH,iBAAiB,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;gBAGpC,kBAAkB,EAAE,kBAAkB,EACvC,UAAU,EAAE,UAAU,EACrB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,WAAW,EACxB,yBAAyB,EAAE,yBAAyB;IAe9D,oCAAoC;IASpC;;OAEG;IACH,IAAI,KAAK,QAER;IAED,QAAQ;IAKR;;OAEG;IACH,IAAI,SAAS,QAGZ;IAED;;OAEG;IACG,YAAY;IAgBlB;;;;;;OAMG;IACG,8BAA8B,CAAC,CAAC,GAAG,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASnF;;;;OAIG;IAEG,mBAAmB;IAKzB;;;;OAIG;IACG,sBAAsB,CAAC,IAAI,EAAE,MAAM;IAKzC;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;IAK1D;;;;OAIG;IACH,oBAAoB,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO;IASjD;;;;OAIG;IACH,qBAAqB,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC;IAY9D;;OAEG;IACH,qBAAqB;IAKrB,SAAS,CAAC,kBAAkB,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;IAmB1D;;OAEG;IACH,SAAS,CAAC,uBAAuB,IAAI,UAAU,CAAC,IAAI,CAAC;YAkBvC,kBAAkB;yCA3OrB,eAAe;6CAAf,eAAe;CAiP3B"}
@@ -2,4 +2,5 @@ export * from './plugins.module';
2
2
  export * from './plugins.service';
3
3
  export * from './plugins-resolve.service';
4
4
  export * from './plugins.model';
5
+ export * from './plugin-loaded.pipe';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import { PluginsResolveService } from './plugins-resolve.service';
3
+ import { Observable } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ export declare class PluginLoadedPipe implements PipeTransform {
6
+ private pluginsResolve;
7
+ constructor(pluginsResolve: PluginsResolveService);
8
+ transform(pluginName: string): Observable<boolean>;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<PluginLoadedPipe, never>;
10
+ static ɵpipe: i0.ɵɵPipeDeclaration<PluginLoadedPipe, "c8yPluginLoaded", true>;
11
+ }
12
+ //# sourceMappingURL=plugin-loaded.pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-loaded.pipe.d.ts","sourceRoot":"","sources":["../../../core/plugins/plugin-loaded.pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,aAAa,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAA6B,UAAU,EAAM,MAAM,MAAM,CAAC;;AAEjE,qBAIa,gBAAiB,YAAW,aAAa;IACxC,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,qBAAqB;IAEzD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;yCAHvC,gBAAgB;uCAAhB,gBAAgB;CAY5B"}
@@ -40,6 +40,7 @@ export declare class PluginsResolveService {
40
40
  moduleRef: NgModuleRef<unknown>;
41
41
  }>;
42
42
  allPluginsLoaded$: Observable<boolean>;
43
+ loadedPluginNames$: Observable<string[]>;
43
44
  /**
44
45
  * Emits all contextPaths (including the corresponding version/tag, if provided) that have been already loaded on startup and further any newload loaded.
45
46
  */
@@ -51,6 +52,7 @@ export declare class PluginsResolveService {
51
52
  private _pluginDetails$;
52
53
  private _allPluginsLoaded$;
53
54
  private _contextPathsFromWhereRemotesHaveBeenLoaded$;
55
+ private _loadedPluginNames$;
54
56
  constructor(injector: EnvironmentInjector);
55
57
  /**
56
58
  * Loads plugins by resolving the remote NgModules and injecting it. Also attaching
@@ -59,7 +61,7 @@ export declare class PluginsResolveService {
59
61
  */
60
62
  resolveRemotePlugins(remoteModules: Array<{
61
63
  factory: any;
62
- name: any;
64
+ name: string;
63
65
  }>): void;
64
66
  /**
65
67
  * Loads modules and handles hooking correctly.
@@ -67,7 +69,7 @@ export declare class PluginsResolveService {
67
69
  */
68
70
  loadModulesDynamically(remoteModules: Array<{
69
71
  factory: any;
70
- name: any;
72
+ name: string;
71
73
  }>): void;
72
74
  loadProviders(providers: Provider[], name: string): void;
73
75
  loadModule<T = unknown>(remoteNgModule: NgModuleRef<T> | Type<T>): NgModuleRef<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"plugins-resolve.service.d.ts","sourceRoot":"","sources":["../../../core/plugins/plugins-resolve.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,mBAAmB,EACnB,IAAI,EAEJ,QAAQ,EACR,QAAQ,EACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAmB,UAAU,EAAW,MAAM,MAAM,CAAC;;AAgB5D,qBAGa,qBAAqB;IAsGpB,OAAO,CAAC,QAAQ;IArG5B;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,EAAE,GAAG,wBAAwB;IAelF,MAAM,CAAC,aAAa,CAClB,mBAAmB,EAAE,wBAAwB,EAC7C,eAAe,CAAC,EAAE,wBAAwB,GACzC,wBAAwB;IAkC3B;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC,mBAAmB,GAAG,QAAQ,CAAC,CAAC;IACvD;;OAEG;IACH,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B;;OAEG;IACH,cAAc,EAAE,UAAU,CAAC;QACzB,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;KACjC,CAAC,CAAC;IACH,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC;;OAEG;IACH,2CAA2C,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,WAAW,CAAiD;IACpE,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,eAAe,CAGlB;IACL,OAAO,CAAC,kBAAkB,CAAuC;IACjE,OAAO,CAAC,4CAA4C,CAAqC;gBAErE,QAAQ,EAAE,mBAAmB;IAejD;;;;OAIG;IACH,oBAAoB,CAAC,aAAa,EAAE,KAAK,CAAC;QAAE,OAAO,MAAC;QAAC,IAAI,MAAA;KAAE,CAAC;IAM5D;;;OAGG;IACH,sBAAsB,CAAC,aAAa,EAAE,KAAK,CAAC;QAAE,OAAO,MAAC;QAAC,IAAI,MAAA;KAAE,CAAC;IAgB9D,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM;IASjD,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAchE;;OAEG;IACH,YAAY;IAIZ,mBAAmB;IAInB;;;;;OAKG;IACG,WAAW,CAAC,OAAO,EAAE,wBAAwB;IA+BnD;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc,CAAC,SAAS,EAAE,wBAAwB,EAAE,GAAG,wBAAwB;IAI/E;;OAEG;IACH,oBAAoB;IAIpB;;;OAGG;IACH,cAAc;YAeA,gBAAgB;IAgB9B,OAAO,CAAC,eAAe;YAeT,mBAAmB;yCA3StB,qBAAqB;6CAArB,qBAAqB;CAwVjC"}
1
+ {"version":3,"file":"plugins-resolve.service.d.ts","sourceRoot":"","sources":["../../../core/plugins/plugins-resolve.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,mBAAmB,EACnB,IAAI,EAEJ,QAAQ,EACR,QAAQ,EACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAmB,UAAU,EAAW,MAAM,MAAM,CAAC;;AAgB5D,qBAGa,qBAAqB;IAwGpB,OAAO,CAAC,QAAQ;IAvG5B;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,EAAE,GAAG,wBAAwB;IAelF,MAAM,CAAC,aAAa,CAClB,mBAAmB,EAAE,wBAAwB,EAC7C,eAAe,CAAC,EAAE,wBAAwB,GACzC,wBAAwB;IAkC3B;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC,mBAAmB,GAAG,QAAQ,CAAC,CAAC;IACvD;;OAEG;IACH,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3B;;OAEG;IACH,cAAc,EAAE,UAAU,CAAC;QACzB,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;KACjC,CAAC,CAAC;IACH,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC;;OAEG;IACH,2CAA2C,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,WAAW,CAAiD;IACpE,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,eAAe,CAGlB;IACL,OAAO,CAAC,kBAAkB,CAAuC;IACjE,OAAO,CAAC,4CAA4C,CAAqC;IACzF,OAAO,CAAC,mBAAmB,CAAqC;gBAE5C,QAAQ,EAAE,mBAAmB;IAiBjD;;;;OAIG;IACH,oBAAoB,CAAC,aAAa,EAAE,KAAK,CAAC;QAAE,OAAO,MAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAMpE;;;OAGG;IACH,sBAAsB,CAAC,aAAa,EAAE,KAAK,CAAC;QAAE,OAAO,MAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBtE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM;IASjD,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAchE;;OAEG;IACH,YAAY;IAIZ,mBAAmB;IAInB;;;;;OAKG;IACG,WAAW,CAAC,OAAO,EAAE,wBAAwB;IA+BnD;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc,CAAC,SAAS,EAAE,wBAAwB,EAAE,GAAG,wBAAwB;IAI/E;;OAEG;IACH,oBAAoB;IAIpB;;;OAGG;IACH,cAAc;YAeA,gBAAgB;IAgB9B,OAAO,CAAC,eAAe;YAeT,mBAAmB;yCAjTtB,qBAAqB;6CAArB,qBAAqB;CA8VjC"}
@@ -0,0 +1,58 @@
1
+ import { Injectable, Optional } from '@angular/core';
2
+ import { GainsightService } from '@c8y/ngx-components';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@c8y/ngx-components";
5
+ export class BrandingTrackingService {
6
+ constructor(gainsight) {
7
+ this.gainsight = gainsight;
8
+ this.prefix = 'brandingManager';
9
+ }
10
+ getStartedUsingBranding() {
11
+ this.triggerEvent('getStartedUsingBranding');
12
+ }
13
+ deleteAllBrandings() {
14
+ this.triggerEvent('deleteAllBrandings');
15
+ }
16
+ exportBranding() {
17
+ this.triggerEvent('exportBranding');
18
+ }
19
+ addNewVersion() {
20
+ this.triggerEvent('addNewVersion');
21
+ }
22
+ duplicateVersion() {
23
+ this.triggerEvent('duplicateVersion');
24
+ }
25
+ applyToApps(apps) {
26
+ this.triggerEvent('applyToApps', { apps });
27
+ }
28
+ importBranding() {
29
+ this.triggerEvent('importBranding');
30
+ }
31
+ deleteBrandingVariant() {
32
+ this.triggerEvent('deleteBrandingVariant');
33
+ }
34
+ openPreviewForBranding() {
35
+ this.triggerEvent('openPreviewForBranding');
36
+ }
37
+ triggerEvent(action, props) {
38
+ if (!this.gainsight) {
39
+ return;
40
+ }
41
+ const finalProps = {
42
+ ...props,
43
+ action
44
+ };
45
+ return this.gainsight.triggerEvent(this.prefix, finalProps);
46
+ }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BrandingTrackingService, deps: [{ token: i1.GainsightService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
48
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BrandingTrackingService, providedIn: 'root' }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: BrandingTrackingService, decorators: [{
51
+ type: Injectable,
52
+ args: [{
53
+ providedIn: 'root'
54
+ }]
55
+ }], ctorParameters: () => [{ type: i1.GainsightService, decorators: [{
56
+ type: Optional
57
+ }] }] });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmctdHJhY2tpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9kYXRhL2JyYW5kaW5nLXRyYWNraW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFlLE1BQU0scUJBQXFCLENBQUM7OztBQUtwRSxNQUFNLE9BQU8sdUJBQXVCO0lBRWxDLFlBQWdDLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBRGxELFdBQU0sR0FBRyxpQkFBaUIsQ0FBQztJQUMwQixDQUFDO0lBRS9ELHVCQUF1QjtRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFjO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQWMsRUFBRSxLQUFtQjtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUc7WUFDakIsR0FBRyxLQUFLO1lBQ1IsTUFBTTtTQUNQLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs4R0FuRFUsdUJBQXVCO2tIQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTs7MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBR2MsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHYWluc2lnaHRTZXJ2aWNlLCBQeEV2ZW50RGF0YSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCcmFuZGluZ1RyYWNraW5nU2VydmljZSB7XG4gIHJlYWRvbmx5IHByZWZpeCA9ICdicmFuZGluZ01hbmFnZXInO1xuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwcml2YXRlIGdhaW5zaWdodDogR2FpbnNpZ2h0U2VydmljZSkge31cblxuICBnZXRTdGFydGVkVXNpbmdCcmFuZGluZygpIHtcbiAgICB0aGlzLnRyaWdnZXJFdmVudCgnZ2V0U3RhcnRlZFVzaW5nQnJhbmRpbmcnKTtcbiAgfVxuXG4gIGRlbGV0ZUFsbEJyYW5kaW5ncygpIHtcbiAgICB0aGlzLnRyaWdnZXJFdmVudCgnZGVsZXRlQWxsQnJhbmRpbmdzJyk7XG4gIH1cblxuICBleHBvcnRCcmFuZGluZygpIHtcbiAgICB0aGlzLnRyaWdnZXJFdmVudCgnZXhwb3J0QnJhbmRpbmcnKTtcbiAgfVxuXG4gIGFkZE5ld1ZlcnNpb24oKSB7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2FkZE5ld1ZlcnNpb24nKTtcbiAgfVxuXG4gIGR1cGxpY2F0ZVZlcnNpb24oKSB7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2R1cGxpY2F0ZVZlcnNpb24nKTtcbiAgfVxuXG4gIGFwcGx5VG9BcHBzKGFwcHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2FwcGx5VG9BcHBzJywgeyBhcHBzIH0pO1xuICB9XG5cbiAgaW1wb3J0QnJhbmRpbmcoKSB7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2ltcG9ydEJyYW5kaW5nJyk7XG4gIH1cblxuICBkZWxldGVCcmFuZGluZ1ZhcmlhbnQoKSB7XG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2RlbGV0ZUJyYW5kaW5nVmFyaWFudCcpO1xuICB9XG5cbiAgb3BlblByZXZpZXdGb3JCcmFuZGluZygpIHtcbiAgICB0aGlzLnRyaWdnZXJFdmVudCgnb3BlblByZXZpZXdGb3JCcmFuZGluZycpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyRXZlbnQoYWN0aW9uOiBzdHJpbmcsIHByb3BzPzogUHhFdmVudERhdGEpIHtcbiAgICBpZiAoIXRoaXMuZ2FpbnNpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmluYWxQcm9wcyA9IHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgYWN0aW9uXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmdhaW5zaWdodC50cmlnZ2VyRXZlbnQodGhpcy5wcmVmaXgsIGZpbmFsUHJvcHMpO1xuICB9XG59XG4iXX0=
@@ -3,4 +3,5 @@ export * from './branding-shades.service';
3
3
  export * from './branding-version.service';
4
4
  export * from './store-branding.service';
5
5
  export * from './branding.type';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9icmFuZGluZy9zaGFyZWQvZGF0YS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FwcGx5LWJyYW5kaW5nLWxvY2FsbHkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2JyYW5kaW5nLXNoYWRlcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYnJhbmRpbmctdmVyc2lvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmUtYnJhbmRpbmcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2JyYW5kaW5nLnR5cGUnO1xuIl19
6
+ export * from './branding-tracking.service';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9icmFuZGluZy9zaGFyZWQvZGF0YS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXBwbHktYnJhbmRpbmctbG9jYWxseS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYnJhbmRpbmctc2hhZGVzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9icmFuZGluZy12ZXJzaW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zdG9yZS1icmFuZGluZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYnJhbmRpbmcudHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2JyYW5kaW5nLXRyYWNraW5nLnNlcnZpY2UnO1xuIl19
@@ -8,16 +8,18 @@ import { cloneDeep, uniq } from 'lodash-es';
8
8
  import { BrandingVersionService } from './branding-version.service';
9
9
  import { allBrandingCSSVars, numberBrandingVars } from './branding.type';
10
10
  import { StaticAssetsService } from '@c8y/ngx-components/static-assets/data';
11
+ import { BrandingTrackingService } from './branding-tracking.service';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "@c8y/client";
13
14
  import * as i2 from "@c8y/ngx-components";
14
15
  import * as i3 from "./branding-version.service";
15
16
  import * as i4 from "@c8y/ngx-components/static-assets/data";
17
+ import * as i5 from "./branding-tracking.service";
16
18
  /**
17
19
  * Service to load and store the branding of the tenant.
18
20
  */
19
21
  export class StoreBrandingService {
20
- constructor(applicationService, inventory, binary, zip, fetch, brandingVersionService, appState, staticAssets, themeSwitcher) {
22
+ constructor(applicationService, inventory, binary, zip, fetch, brandingVersionService, appState, staticAssets, themeSwitcher, brandingTracking) {
21
23
  this.applicationService = applicationService;
22
24
  this.inventory = inventory;
23
25
  this.binary = binary;
@@ -27,6 +29,7 @@ export class StoreBrandingService {
27
29
  this.appState = appState;
28
30
  this.staticAssets = staticAssets;
29
31
  this.themeSwitcher = themeSwitcher;
32
+ this.brandingTracking = brandingTracking;
30
33
  this.fileNames = {
31
34
  options: 'options.json',
32
35
  manifest: 'cumulocity.json',
@@ -52,6 +55,14 @@ export class StoreBrandingService {
52
55
  const version = brandingVersion.version;
53
56
  await this.applicationService.setPackageVersionTag(publicOptions, version, [...tags, 'latest']);
54
57
  }
58
+ /**
59
+ * Opens a new tab with to preview the branding. The branding must have been saved beforehand.
60
+ * @param brandingName the name of the branding to be previewed
61
+ */
62
+ openPreviewForBranding(brandingName) {
63
+ this.brandingTracking.openPreviewForBranding();
64
+ window.open(`/apps/${this.appState.currentApplication.value?.contextPath || 'cockpit'}/index.html?brandingPreview=true&dynamicOptionsUrl=/apps/public/public-options@${brandingName}/options.json`, '_blank', 'noopener,noreferrer');
65
+ }
55
66
  /**
56
67
  * Returns the brandings of the tenant.
57
68
  * If no public options app is found, publicOptions will be undefined and variants an empty array.
@@ -353,11 +364,11 @@ export class StoreBrandingService {
353
364
  const { data: app } = await this.applicationService.create(this.manifestValues);
354
365
  return app;
355
366
  }
356
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: StoreBrandingService, deps: [{ token: i1.ApplicationService }, { token: i1.InventoryService }, { token: i1.InventoryBinaryService }, { token: i2.ZipService }, { token: i1.FetchClient }, { token: i3.BrandingVersionService }, { token: i2.AppStateService }, { token: i4.StaticAssetsService }, { token: i2.ThemeSwitcherService }], target: i0.ɵɵFactoryTarget.Injectable }); }
367
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: StoreBrandingService, deps: [{ token: i1.ApplicationService }, { token: i1.InventoryService }, { token: i1.InventoryBinaryService }, { token: i2.ZipService }, { token: i1.FetchClient }, { token: i3.BrandingVersionService }, { token: i2.AppStateService }, { token: i4.StaticAssetsService }, { token: i2.ThemeSwitcherService }, { token: i5.BrandingTrackingService }], target: i0.ɵɵFactoryTarget.Injectable }); }
357
368
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: StoreBrandingService, providedIn: 'root' }); }
358
369
  }
359
370
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: StoreBrandingService, decorators: [{
360
371
  type: Injectable,
361
372
  args: [{ providedIn: 'root' }]
362
- }], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i1.InventoryService }, { type: i1.InventoryBinaryService }, { type: i2.ZipService }, { type: i1.FetchClient }, { type: i3.BrandingVersionService }, { type: i2.AppStateService }, { type: i4.StaticAssetsService }, { type: i2.ThemeSwitcherService }] });
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYnJhbmRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9kYXRhL3N0b3JlLWJyYW5kaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixXQUFXLEVBSVgsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RixPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7O0FBMkIxRjs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFnQi9CLFlBQ1Usa0JBQXNDLEVBQ3RDLFNBQTJCLEVBQzNCLE1BQThCLEVBQzlCLEdBQWUsRUFDZixLQUFrQixFQUNsQixzQkFBOEMsRUFDOUMsUUFBeUIsRUFDekIsWUFBaUMsRUFDakMsYUFBbUM7UUFSbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxjQUFT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LEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEYsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdGLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCO1FBQ2xDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7OEdBemFVLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGNBRFAsTUFBTTs7MkZBQ25CLG9CQUFvQjtrQkFEaEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBGZXRjaENsaWVudCxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25CaW5hcnksXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICBJbnZlbnRvcnlTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSwgVGhlbWVTd2l0Y2hlclNlcnZpY2UsIFppcFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGRlZmVyLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJyYW5kaW5nVmVyc2lvblNlcnZpY2UgfSBmcm9tICcuL2JyYW5kaW5nLXZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBCcmFuZGluZ09wdGlvbnNKc29uLCBhbGxCcmFuZGluZ0NTU1ZhcnMsIG51bWJlckJyYW5kaW5nVmFycyB9IGZyb20gJy4vYnJhbmRpbmcudHlwZSc7XG5pbXBvcnQgeyBTdGF0aWNBc3NldCwgU3RhdGljQXNzZXRzU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvc3RhdGljLWFzc2V0cy9kYXRhJztcblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZFZlcnNpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHJldmlzaW9uOiBudW1iZXI7XG4gIHZlcnNpb246IHN0cmluZztcbiAgdGFnczogc3RyaW5nW107XG4gIG93bmVyPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlZD86IHN0cmluZztcbiAgcHVibGljT3B0aW9uc0FwcD86IElBcHBsaWNhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZGluZ0ZpbGVEZXRhaWxzIHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgYmxvYjogQmxvYjtcbiAganNvbkNvbnRlbnQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmRpbmdGaWxlRGV0YWlsc0xlZ2FjeSB7XG4gIHBhdGg6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgYmxvYj86IEJsb2I7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHVybFdyYXBwZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2VydmljZSB0byBsb2FkIGFuZCBzdG9yZSB0aGUgYnJhbmRpbmcgb2YgdGhlIHRlbmFudC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTdG9yZUJyYW5kaW5nU2VydmljZSB7XG4gIHJlYWRvbmx5IGZpbGVOYW1lcyA9IHtcbiAgICBvcHRpb25zOiAnb3B0aW9ucy5qc29uJyxcbiAgICBtYW5pZmVzdDogJ2N1bXVsb2NpdHkuanNvbicsXG4gICAgZXhwb3J0WmlwTmFtZTogJ3B1YmxpYy1vcHRpb25zLnppcCdcbiAgfSBhcyBjb25zdDtcbiAgcmVhZG9ubHkgbWFuaWZlc3RWYWx1ZXMgPSB7XG4gICAgbmFtZTogJ3B1YmxpYy1vcHRpb25zJyxcbiAgICBjb250ZXh0UGF0aDogJ3B1YmxpYy1vcHRpb25zJyxcbiAgICBrZXk6ICdwdWJsaWMtb3B0aW9ucy1rZXknLFxuICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gY29udGFpbmluZyBzdGF0aWMgYXNzZXRzIHVzZWQgYnkgZS5nLiBicmFuZGluZy4nLFxuICAgIG5vQXBwU3dpdGNoZXI6IHRydWUsXG4gICAgdHlwZTogQXBwbGljYXRpb25UeXBlLkhPU1RFRCxcbiAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRFxuICB9IGFzIGNvbnN0IHNhdGlzZmllcyBJQXBwbGljYXRpb247XG4gIHJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4obnVsbCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiaW5hcnk6IEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXA6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmZXRjaDogRmV0Y2hDbGllbnQsXG4gICAgcHJpdmF0ZSBicmFuZGluZ1ZlcnNpb25TZXJ2aWNlOiBCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHN0YXRpY0Fzc2V0czogU3RhdGljQXNzZXRzU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU3dpdGNoZXI6IFRoZW1lU3dpdGNoZXJTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogU2V0cyB0aGUgYGxhdGVzdGAgdGFnIG9uIHRoZSBwcm92aWRlZCBicmFuZGluZyB2ZXJzaW9uLiBNYWtpbmcgaXQgdGhlIGdsb2JhbCBhY3RpdmUgYnJhbmRpbmcuXG4gICAqL1xuICBhc3luYyBtYXJrQXNBY3RpdmUoYnJhbmRpbmdWZXJzaW9uOiBCcmFuZFZlcnNpb24sIGFwcD86IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHB1YmxpY09wdGlvbnMgPSBhcHAgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBjb25zdCB0YWdzID0gYnJhbmRpbmdWZXJzaW9uLnRhZ3MgfHwgW107XG4gICAgY29uc3QgdmVyc2lvbiA9IGJyYW5kaW5nVmVyc2lvbi52ZXJzaW9uO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKHB1YmxpY09wdGlvbnMsIHZlcnNpb24sIFsuLi50YWdzLCAnbGF0ZXN0J10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyYW5kaW5ncyBvZiB0aGUgdGVuYW50LlxuICAgKiBJZiBubyBwdWJsaWMgb3B0aW9ucyBhcHAgaXMgZm91bmQsIHB1YmxpY09wdGlvbnMgd2lsbCBiZSB1bmRlZmluZWQgYW5kIHZhcmlhbnRzIGFuIGVtcHR5IGFycmF5LlxuICAgKiBGb3Igb2xkIGJyYW5kaW5ncyAoY3JlYXRlZCB3aXRob3V0IHZlcnNpb25pbmcpIGEgZGVmYXVsdCB2ZXJzaW9uIGlzIHJldHVybmVkLlxuICAgKi9cbiAgYXN5bmMgbG9hZEJyYW5kaW5nVmFyaWFudHMoXG4gICAgYXBwPzogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8eyBwdWJsaWNPcHRpb25zOiBJQXBwbGljYXRpb24gfCB1bmRlZmluZWQ7IHZhcmlhbnRzOiBCcmFuZFZlcnNpb25bXSB9PiB7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IGFwcCB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGlmICghcHVibGljT3B0aW9ucykge1xuICAgICAgcmV0dXJuIHsgcHVibGljT3B0aW9uczogdW5kZWZpbmVkLCB2YXJpYW50czogW10gfTtcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhOiB2ZXJzaW9ucyB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdFZlcnNpb25zKHB1YmxpY09wdGlvbnMpO1xuICAgIGxldCBtYXBwZWRWZXJzaW9uczogQnJhbmRWZXJzaW9uW10gPVxuICAgICAgdmVyc2lvbnNcbiAgICAgICAgPy5tYXAodG1wID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lLCBpdGVyYXRpb24gfSA9XG4gICAgICAgICAgICAgIHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5zcGxpdEJyYW5kaW5nSW50b05hbWVBbmRJdGVyYXRpb24odG1wLnZlcnNpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcmV2aXNpb246IGl0ZXJhdGlvbixcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaWQ6IHRtcC5iaW5hcnlJZCxcbiAgICAgICAgICAgICAgdmVyc2lvbjogdG1wLnZlcnNpb24sXG4gICAgICAgICAgICAgIHRhZ3M6IHRtcC50YWdzIHx8IFtdLFxuICAgICAgICAgICAgICBwdWJsaWNPcHRpb25zQXBwOiBwdWJsaWNPcHRpb25zXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHBhcnNlIHZlcnNpb24nLCB0bXAsIGUpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgID8uZmlsdGVyKEJvb2xlYW4pIHx8IFtdO1xuICAgIGlmICghdmVyc2lvbnMgJiYgcHVibGljT3B0aW9ucy5hY3RpdmVWZXJzaW9uSWQpIHtcbiAgICAgIG1hcHBlZFZlcnNpb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGlkOiBwdWJsaWNPcHRpb25zLmFjdGl2ZVZlcnNpb25JZCxcbiAgICAgICAgICB2ZXJzaW9uOiAnZGVmYXVsdC0xJyxcbiAgICAgICAgICByZXZpc2lvbjogMSxcbiAgICAgICAgICB0YWdzOiBbJ2xhdGVzdCcsICdkZWZhdWx0J10sXG4gICAgICAgICAgcHVibGljT3B0aW9uc0FwcDogcHVibGljT3B0aW9uc1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhbnRzID0gYXdhaXQgdGhpcy5nZXRNZXRhZGF0YU9mQnJhbmRpbmdCaW5hcmllcyhtYXBwZWRWZXJzaW9ucyk7XG4gICAgcmV0dXJuIHsgcHVibGljT3B0aW9ucywgdmFyaWFudHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcyB0aGUgYnJhbmRpbmcgaXMgbm90IGltbWVkaWF0ZWx5IGF2YWlsYWJsZSBhZnRlciBjcmVhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCB3YWl0IGZvciB0aGUgYnJhbmRpbmcgdG8gYmUgcHJlc2VudC5cbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIHZlcnNpb24gb2YgdGhlIGJyYW5kaW5nIHRvIGJlIHJldHJpZXZlZC5cbiAgICovXG4gIGFzeW5jIHdhaXRGb3JCcmFuZGluZ1RvQmVQcmVzZW50KHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG51bWJlck9mQXR0ZW1wdHMgPSAxMjA7XG4gICAgY29uc3Qgc2xlZXBEdXJhdGlvbkluU2Vjb25kcyA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkF0dGVtcHRzOyBpKyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGRvIG5vdCBzbGVlcCBiZWZvcmUgdGhlIGZpcnN0IGF0dGVtcHRcbiAgICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgc2xlZXBEdXJhdGlvbkluU2Vjb25kcyAqIDFfMDAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5nZXRCcmFuZGluZ09wdGlvbnNGb3JWZXJzaW9uKHZlcnNpb24pO1xuICAgICAgICBjb25zb2xlLmluZm8oYEJyYW5kaW5nIFwiJHt2ZXJzaW9ufVwiIGF2YWlsYWJsZSBub3cuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBCcmFuZGluZyBcIiR7dmVyc2lvbn1cIiBub3QgeWV0IHByZXNlbnQsIHJldHJ5aW5nIGluICR7c2xlZXBEdXJhdGlvbkluU2Vjb25kc30gc2Vjb25kcy4uLmAsXG4gICAgICAgICAgZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQnJhbmRpbmcgXCIke3ZlcnNpb259XCIgbm90IGF2YWlsYWJsZSBhZnRlciAke251bWJlck9mQXR0ZW1wdHMgKiBzbGVlcER1cmF0aW9uSW5TZWNvbmRzfSBzZWNvbmRzLCBnaXZpbmcgdXAuYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBjcmVhdGUgYSB0aGUgaW5pdGlhbCBicmFuZGluZyBiYXNlZCBvbiB0aGUgY3VycmVudGx5IGFwcGxpZWQgQ1NTIHZhcmlhYmxlcy5cbiAgICovXG4gIGFzeW5jIGdldFN0YXJ0ZWRVc2luZ0JyYW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFsbFZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IHRoZW1lVG9SZXRyaWV2ZVZhcnMgPSBbJ2xpZ2h0JywgJ2RhcmsnXSBhcyBjb25zdDtcbiAgICBjb25zdCB1bnJldHJpZXZhYmxlVmFycyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCB0aGVtZSBvZiB0aGVtZVRvUmV0cmlldmVWYXJzKSB7XG4gICAgICB0aGlzLnRoZW1lU3dpdGNoZXIudGVtcG9yYXJ5Q2hhbmdlVGhlbWUodGhlbWUpO1xuICAgICAgY29uc3Qgc3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTtcbiAgICAgIGNvbnN0IHZhcmlhYmxlc1RvU2tpcCA9IFtcbiAgICAgICAgJ25hdmlnYXRvci1wbGF0Zm9ybS1sb2dvJyxcbiAgICAgICAgJ2JyYW5kLWxvZ28taW1nJ1xuICAgICAgXSBzYXRpc2ZpZXMgKHR5cGVvZiBhbGxCcmFuZGluZ0NTU1ZhcnMpW251bWJlcl1bXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGFsbEJyYW5kaW5nQ1NTVmFyc1xuICAgICAgICAuZmlsdGVyKGNzc1ZhciA9PiAhdmFyaWFibGVzVG9Ta2lwLmluY2x1ZGVzKGNzc1ZhciBhcyBhbnkpKVxuICAgICAgICAucmVkdWNlKChwcmV2LCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBkaXJlY3RWYWx1ZSA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKGAtLSR7a2V5fWApO1xuICAgICAgICAgIGNvbnN0IGM4eVByZWZpeGVkVmFsdWUgPSBzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShgLS1jOHktJHtrZXl9YCk7XG4gICAgICAgICAgY29uc3QgbmV3S2V5ID0gdGhlbWUgPT09ICdsaWdodCcgPyBrZXkgOiBgZGFyay0ke2tleX1gO1xuICAgICAgICAgIGlmICghZGlyZWN0VmFsdWUgJiYgIWM4eVByZWZpeGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHVucmV0cmlldmFibGVWYXJzLnB1c2gobmV3S2V5KTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyB8IG51bWJlciA9IGRpcmVjdFZhbHVlIHx8IGM4eVByZWZpeGVkVmFsdWU7XG4gICAgICAgICAgaWYgKG51bWJlckJyYW5kaW5nVmFycy5pbmNsdWRlcyhrZXkgYXMgYW55KSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZS5yZXBsYWNlKC9bQS1aYS16XS9nLCAnJykudHJpbSgpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgbnVtYmVyIGZvciBcIiR7a2V5fVwiIHZhbHVlIHRoYXQgZmFpbGVkIHRvIHBhcnNlOiBcIiR7dmFsdWV9XCJgLFxuICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByZXYsIHsgW25ld0tleV06IHZhbHVlIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgICBPYmplY3QuYXNzaWduKGFsbFZhcmlhYmxlcywgdmFsdWVzKTtcbiAgICB9XG4gICAgdGhpcy50aGVtZVN3aXRjaGVyLnJlc2V0VGVtcG9yYXJ5VGhlbWUoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVB1YmxpY09wdGlvbnNBcHBGcm9tSW5oZXJpdGVkT3B0aW9ucyhhbGxWYXJpYWJsZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihlKTtcbiAgICB9XG4gIH1cblxuICBnZXRaaXBGb3JCaW5hcnkoXG4gICAgYmluYXJ5SWQ6IHN0cmluZyxcbiAgICBmaWxlTmFtZTogc3RyaW5nID0gdGhpcy5maWxlTmFtZXMuZXhwb3J0WmlwTmFtZVxuICApOiBPYnNlcnZhYmxlPEZpbGU+IHtcbiAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5iaW5hcnkuZG93bmxvYWQoYmluYXJ5SWQpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJsb2IoKSksXG4gICAgICBtYXAoYmxvYiA9PiBuZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHB1YmxpYyBvcHRpb25zIGFwcCBhbmQgdGhlcmVmb3JlIGFsbCBicmFuZGluZ3MuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUFsbEJyYW5kaW5ncyhwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnMgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGUocHVibGljT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRW5oYW5jZXMgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIHZlcnNpb25zIHdpdGggbWV0YWRhdGEgZnJvbSB0aGUgbGlua2VkIGJpbmFyaWVzLlxuICAgKiBJdCB3aWxsIGFkZCB0aGUgb3duZXIgYW5kIGxhc3RVcGRhdGVkIGZpZWxkcyB0byB0aGUgdmVyc2lvbnMuXG4gICAqIFRoZSBwcm92aWRlZCBhcnJheSBpcyBhbHRlcmVkLlxuICAgKi9cbiAgYXN5bmMgZ2V0TWV0YWRhdGFPZkJyYW5kaW5nQmluYXJpZXModmVyc2lvbnM6IEJyYW5kVmVyc2lvbltdKTogUHJvbWlzZTxCcmFuZFZlcnNpb25bXT4ge1xuICAgIGNvbnN0IGJpbmFyeUlkcyA9IHVuaXEodmVyc2lvbnMubWFwKHRtcCA9PiB0bXAuaWQpKTtcbiAgICBpZiAoIWJpbmFyeUlkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2ZXJzaW9ucztcbiAgICB9XG4gICAgY29uc3QgeyBkYXRhOiBtZXRhZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBpZHM6IGJpbmFyeUlkcy5qb2luKCcsJyksXG4gICAgICBwYWdlU2l6ZTogMjAwMFxuICAgIH0pO1xuICAgIHJldHVybiB2ZXJzaW9ucy5tYXAodmVyc2lvbiA9PiB7XG4gICAgICBjb25zdCBtZXRhZGF0YUZvclZlcnNpb24gPVxuICAgICAgICBtZXRhZGF0YS5maW5kKHRtcCA9PiB0bXAuaWQgPT09IHZlcnNpb24uaWQpIHx8ICh7fSBhcyBJTWFuYWdlZE9iamVjdCk7XG4gICAgICBjb25zdCB7IG93bmVyLCBsYXN0VXBkYXRlZCB9ID0gbWV0YWRhdGFGb3JWZXJzaW9uO1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odmVyc2lvbiwgeyBvd25lciwgbGFzdFVwZGF0ZWQgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIGFzIGEgbmV3IHZlcnNpb24gZm9yIHRoZSBwdWJsaWMgb3B0aW9ucyBhcHAuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIHNhdmVCcmFuZGluZyhcbiAgICBibG9iOiBCbG9iIHwgRmlsZSxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgdGFnczogc3RyaW5nW10gPSBbXSxcbiAgICBwdWJsaWNPcHRpb25zQXBwPzogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8e1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBiaW5hcnk6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIGNvbnN0IGZpbGUgPSBibG9iIGluc3RhbmNlb2YgRmlsZSA/IGJsb2IgOiBuZXcgRmlsZShbYmxvYl0sIGBwdWJsaWMtb3B0aW9ucy0ke3ZlcnNpb259LnppcGApO1xuICAgIGNvbnN0IHB1YmxpY09wdGlvbnMgPSBwdWJsaWNPcHRpb25zQXBwIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG5cbiAgICBjb25zdCB7IGRhdGE6IGJpbmFyeSB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2VcbiAgICAgIC5iaW5hcnkocHVibGljT3B0aW9ucylcbiAgICAgIC51cGxvYWRBcHBsaWNhdGlvblZlcnNpb24oZmlsZSwgdmVyc2lvbiwgdGFncyk7XG4gICAgaWYgKCFwdWJsaWNPcHRpb25zLmFjdGl2ZVZlcnNpb25JZCB8fCB0YWdzLmluY2x1ZGVzKCdsYXRlc3QnKSkge1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgaWQ6IHB1YmxpY09wdGlvbnMuaWQsXG4gICAgICAgIGFjdGl2ZVZlcnNpb25JZDogYCR7YmluYXJ5LmJpbmFyeUlkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gICAgcmV0dXJuIHsgdmVyc2lvbiwgYmluYXJ5LCB0YWdzIH07XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGJyYW5kaW5nIHZlcnNpb24gZnJvbSB0aGUgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBUaGUgcHVibGljIG9wdGlvbnMgYXBwIGNhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIHRvIGF2b2lkIGFub3RoZXIgcmVxdWVzdCBmb3IgaXQuXG4gICAqL1xuICBhc3luYyBkZWxldGVCcmFuZGluZ1ZlcnNpb24odmVyc2lvbjogc3RyaW5nLCBwdWJsaWNPcHRpb25zPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnMgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShwdWJsaWNPcHRpb25zLCB7IHZlcnNpb24gfSk7XG4gICAgdGhpcy5yZWZyZXNoVHJpZ2dlckJyYW5kaW5nVmFyaWFudHMubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJsb2Igb2YgYSB6aXAgZmlsZSBjb250YWluaW5nIHRoZSBwcm92aWRlZCBicmFuZGluZyBvcHRpb25zIChvcHRpb25zLmpzb24pIGFuZCB0aGUgbWFuaWZlc3QgKGN1bXVsb2NpdHkuanNvbikuXG4gICAqL1xuICBhc3luYyBnZXRCcmFuZGluZ1ppcChjb250ZW50OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBQcm9taXNlPEJsb2I+IHtcbiAgICBjb250ZW50Lmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGNvbnRlbnRBc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGNvbnRlbnQpO1xuICAgIGNvbnN0IHppcCA9IGF3YWl0IHRoaXMuemlwLmNyZWF0ZVppcChbXG4gICAgICB7IGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lcy5vcHRpb25zLCBibG9iOiBuZXcgQmxvYihbY29udGVudEFzU3RyaW5nXSkgfSxcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWVzLm1hbmlmZXN0LCBibG9iOiBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkodGhpcy5tYW5pZmVzdFZhbHVlcyldKSB9XG4gICAgXSk7XG4gICAgcmV0dXJuIHppcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGJyYW5kaW5nIHZlcnNpb24gdG8gdGhlIHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgYWRkQnJhbmRpbmcoXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IEJyYW5kaW5nT3B0aW9uc0pzb24gPSB7fSxcbiAgICB0YWdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHB1YmxpY09wdGlvbnNBcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgY29uc3QgemlwID0gYXdhaXQgdGhpcy5nZXRCcmFuZGluZ1ppcChjb250ZW50KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNhdmVCcmFuZGluZyh6aXAsIHZlcnNpb24sIHRhZ3MsIHB1YmxpY09wdGlvbnNBcHApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyYW5kaW5nIG9wdGlvbnMgZm9yIHRoZSBwcm92aWRlZCB2ZXJzaW9uLlxuICAgKiBJZiBubyBicmFuZGluZyB3YXMgZm91bmQgKGUuZy4gc3RhdHVzIDQwNCksIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICovXG4gIGFzeW5jIGdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24odmVyc2lvbj86IHN0cmluZyk6IFByb21pc2U8QnJhbmRpbmdPcHRpb25zSnNvbj4ge1xuICAgIGNvbnN0IHVybCA9IGAvYXBwcy9wdWJsaWMvcHVibGljLW9wdGlvbnMke3ZlcnNpb24gPyBgQCR7dmVyc2lvbn1gIDogJyd9LyR7dGhpcy5maWxlTmFtZXMub3B0aW9uc30/bm9jYWNoZT0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoLmZldGNoKHVybCk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICByZXR1cm4gY29udGVudCBhcyBCcmFuZGluZ09wdGlvbnNKc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgbmV3IGl0ZXJhdGlvbiBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIGJyYW5kaW5nLlxuICAgKi9cbiAgYXN5bmMgc2F2ZUV4aXN0aW5nQnJhbmRpbmcoXG4gICAgYnJhbmRpbmc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY3VycmVudFZlcnNpb246IHN0cmluZyxcbiAgICB0YWdzT2ZDdXJyZW50VmVyc2lvbjogc3RyaW5nW10gPSBbXSxcbiAgICBuZXdWZXJzaW9uPzogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpO1xuICAgIGNvbnN0IHZlcnNpb25Ub0JlU2V0ID0gbmV3VmVyc2lvblxuICAgICAgPyB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbihuZXdWZXJzaW9uKVxuICAgICAgOiB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuYnVtcEJyYW5kaW5nSXRlcmF0aW9uKGN1cnJlbnRWZXJzaW9uKTtcblxuICAgIGNvbnN0IGZpbmFsVGFncyA9IHRhZ3NPZkN1cnJlbnRWZXJzaW9uO1xuICAgIC8vIG9ubHkgYXBwbHkgbGF0ZXN0IHRhZyBkaXJlY3RseVxuICAgIC8vIHRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlIGxhdGVzdCB0YWcgaW4gdGhlIGJhY2tlbmQsIHRoYXQgYWxsb3dzIHRvIGRpcmVjdGx5IG1vdmUgaXQgd2hpbGUgdXBsb2FkaW5nIHRoZSBuZXcgdmVyc2lvbi5cbiAgICAvLyBmb3IgYWxsIG90aGVyIHRhZ3MgdGhpcyByZXN1bHRzIGluIGEgNDA5IGNvbmZsaWN0LiBXZSB0aGVyZWZvcmUgbmVlZCB0byBmaXJzdCBkZWxldGUgdGhlIG9sZCB2ZXJzaW9uLCBiZWZvcmUgc2V0dGluZyB0aGUgb3RoZXIgdGFncyBvbiB0aGUgbmV3IHZlcnNpb24uXG4gICAgaWYgKCFuZXdWZXJzaW9uKSB7XG4gICAgICB0YWdzT2ZDdXJyZW50VmVyc2lvbiA9IHRhZ3NPZkN1cnJlbnRWZXJzaW9uLmZpbHRlcih0YWcgPT4gdGFnID09PSAnbGF0ZXN0Jyk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRkQnJhbmRpbmcodmVyc2lvblRvQmVTZXQsIGJyYW5kaW5nLCB0YWdzT2ZDdXJyZW50VmVyc2lvbiwgcHVibGljT3B0aW9ucyk7XG4gICAgaWYgKCFuZXdWZXJzaW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUJyYW5kaW5nVmVyc2lvbihjdXJyZW50VmVyc2lvbiwgcHVibGljT3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlLnJlcy5zdGF0dXMgIT09IDQwNCkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKHB1YmxpY09wdGlvbnMsIHZlcnNpb25Ub0JlU2V0LCBmaW5hbFRhZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJzaW9uVG9CZVNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21iaW5lcyBjdXJyZW50IGJyYW5kaW5nIG9wdGlvbnMgd2l0aCB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgdmFyaWFibGVzIGFuZCBjcmVhdGVzIGEgbmV3IHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogQW55IGFzc2V0cyBpbiB0aGUgYnJhbmRpbmcgd2lsbCBiZSBjbG9uZWQuXG4gICAqL1xuICBhc3luYyBjcmVhdGVQdWJsaWNPcHRpb25zQXBwRnJvbUluaGVyaXRlZE9wdGlvbnMoYnJhbmRpbmdWYXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8e1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBiaW5hcnk6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIGxldCBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb247XG4gICAgbGV0IGZhbGxCYWNrQnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb24gPSB7fTtcbiAgICB0cnkge1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gYXdhaXQgdGhpcy5nZXRCcmFuZGluZ09wdGlvbnNGb3JWZXJzaW9uKCk7XG4gICAgICBmYWxsQmFja0JyYW5kaW5nID0gY2xvbmVEZWVwKGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZ2V0IGN1cnJlbnRseSBhcHBsaWVkIGJyYW5kaW5nLCBwcm9jZWVkaW5nIHdpdGggZW1wdHkgYnJhbmRpbmcuJywgZSk7XG4gICAgfVxuXG4gICAgaWYgKGJyYW5kaW5nVmFycykge1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gY3VycmVudGx5QXBwbGllZEJyYW5kaW5nIHx8IHt9O1xuICAgICAgY29uc3QgYnJhbmRpbmdDc3NWYXJzID0gY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLmJyYW5kaW5nQ3NzVmFycyB8fCB7fTtcbiAgICAgIE9iamVjdC5hc3NpZ24oYnJhbmRpbmdDc3NWYXJzLCBicmFuZGluZ1ZhcnMpO1xuICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLmJyYW5kaW5nQ3NzVmFycyA9IGJyYW5kaW5nQ3NzVmFycztcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudGx5QXBwbGllZEJyYW5kaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IG9sZEFzc2V0cywgbmV3QXNzZXRzIH0gPSBhd2FpdCB0aGlzLnN0YXRpY0Fzc2V0cy5jbG9uZUFzc2V0c0ludG9UZW5hbnQoJ2JyYW5kaW5nJyk7XG4gICAgICAgIGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyA9IHRoaXMucmVwbGFjZUJyYW5kaW5nQXNzZXRzSW5CcmFuZGluZ09wdGlvbnMoXG4gICAgICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nLFxuICAgICAgICAgIG9sZEFzc2V0cyxcbiAgICAgICAgICBuZXdBc3NldHNcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcmVsb2NhdGUgYnJhbmRpbmcgYXNzZXRzIGludG8gY3VycmVudCB0ZW5hbnQuJywgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHVibGljT3B0aW9uc0FwcCA9IGF3YWl0IHRoaXMuY3JlYXRlUHVibGljT3B0aW9uc0FwcCgpO1xuXG4gICAgY29uc3QgZGVmYXVsdEJyYW5kaW5nTmFtZSA9IGBkZWZhdWx0YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFkZEJyYW5kaW5nKFxuICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLmNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb24oZGVmYXVsdEJyYW5kaW5nTmFtZSksXG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgfHwge30sXG4gICAgICBbJ2xhdGVzdCcsIGRlZmF1bHRCcmFuZGluZ05hbWVdLFxuICAgICAgcHVibGljT3B0aW9uc0FwcFxuICAgICk7XG5cbiAgICBjb25zdCBmYWxsYmFja0JyYW5kaW5nTmFtZSA9IGBmYWxsYmFja2A7XG4gICAgYXdhaXQgdGhpcy5hZGRCcmFuZGluZyhcbiAgICAgIHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5jcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uKGZhbGxiYWNrQnJhbmRpbmdOYW1lKSxcbiAgICAgIGZhbGxCYWNrQnJhbmRpbmcsXG4gICAgICBbZmFsbGJhY2tCcmFuZGluZ05hbWVdLFxuICAgICAgcHVibGljT3B0aW9uc0FwcFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBhc3NldHMgaW4gdGhlIGJyYW5kaW5nIG9wdGlvbnMgd2l0aCB0aGUgbmV3IGFzc2V0cy5cbiAgICogR29lcyB0aHJvdWdoIHRoZSBwcm92aWRlZCBgb2xkQXNzZXRzYCBhbmQgcmVwbGFjZXMgdGhlaXIgb2NjdXJyZW5jZXMgaW4gdGhlIGJyYW5kaW5nIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYG5ld0Fzc2V0c2AgZW50cnkgc2hhcmluZyB0aGUgc2FtZSBmaWxlTmFtZS5cbiAgICogUmV0dXJucyB0aGUgdXBkYXRlZCBicmFuZGluZyBvcHRpb25zLlxuICAgKi9cbiAgcmVwbGFjZUJyYW5kaW5nQXNzZXRzSW5CcmFuZGluZ09wdGlvbnMoXG4gICAgYnJhbmRpbmc6IEJyYW5kaW5nT3B0aW9uc0pzb24sXG4gICAgb2xkQXNzZXRzOiBTdGF0aWNBc3NldFtdLFxuICAgIG5ld0Fzc2V0czogU3RhdGljQXNzZXRbXVxuICApOiBCcmFuZGluZ09wdGlvbnNKc29uIHtcbiAgICBsZXQgYnJhbmRpbmdBc0pTT05TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShicmFuZGluZyk7XG4gICAgZm9yIChjb25zdCBvbGRBc3NldCBvZiBvbGRBc3NldHMpIHtcbiAgICAgIGNvbnN0IG5ld0xvY2F0ZWRBc3NldCA9IG5ld0Fzc2V0cy5maW5kKHRtcCA9PiB0bXAuZmlsZU5hbWUgPT09IG9sZEFzc2V0LmZpbGVOYW1lKTtcbiAgICAgIGlmICghbmV3TG9jYXRlZEFzc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHBhdGggaXMgdGhlIHNhbWUsIHdlIGRvbid0IG5lZWQgdG8gcmVwbGFjZSBpdC5cbiAgICAgIGlmIChvbGRBc3NldC5wYXRoID09PSBuZXdMb2NhdGVkQXNzZXQucGF0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogdXNlIHByb3BlciByZXBsYWNlQWxsIG9uY2UgaXQncyBhdmFpbGFibGUgd2l0aCBlczIwMjFcbiAgICAgIGJyYW5kaW5nQXNKU09OU3RyaW5nID0gYnJhbmRpbmdBc0pTT05TdHJpbmcuc3BsaXQob2xkQXNzZXQucGF0aCkuam9pbihuZXdMb2NhdGVkQXNzZXQucGF0aCk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnBhcnNlKGJyYW5kaW5nQXNKU09OU3RyaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UHVibGljT3B0aW9uc0FwcCgpIHtcbiAgICBsZXQgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlOYW1lKHRoaXMubWFuaWZlc3RWYWx1ZXMubmFtZSk7XG4gICAgYXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiBhcHAub3duZXI/LnRlbmFudD8uaWQgPT09IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZT8ubmFtZSk7XG5cbiAgICByZXR1cm4gYXBwc1swXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlUHVibGljT3B0aW9uc0FwcCgpIHtcbiAgICBjb25zdCB7IGRhdGE6IGFwcCB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKHRoaXMubWFuaWZlc3RWYWx1ZXMpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cbn1cbiJdfQ==
373
+ }], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i1.InventoryService }, { type: i1.InventoryBinaryService }, { type: i2.ZipService }, { type: i1.FetchClient }, { type: i3.BrandingVersionService }, { type: i2.AppStateService }, { type: i4.StaticAssetsService }, { type: i2.ThemeSwitcherService }, { type: i5.BrandingTrackingService }] });
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYnJhbmRpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2JyYW5kaW5nL3NoYXJlZC9kYXRhL3N0b3JlLWJyYW5kaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixXQUFXLEVBSVgsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RixPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7OztBQTJCdEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBZ0IvQixZQUNVLGtCQUFzQyxFQUN0QyxTQUEyQixFQUMzQixNQUE4QixFQUM5QixHQUFlLEVBQ2YsS0FBa0IsRUFDbEIsc0JBQThDLEVBQzlDLFFBQXlCLEVBQ3pCLFlBQWlDLEVBQ2pDLGFB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YmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBGZXRjaENsaWVudCxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25CaW5hcnksXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICBJbnZlbnRvcnlTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSwgVGhlbWVTd2l0Y2hlclNlcnZpY2UsIFppcFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGRlZmVyLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJyYW5kaW5nVmVyc2lvblNlcnZpY2UgfSBmcm9tICcuL2JyYW5kaW5nLXZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBCcmFuZGluZ09wdGlvbnNKc29uLCBhbGxCcmFuZGluZ0NTU1ZhcnMsIG51bWJlckJyYW5kaW5nVmFycyB9IGZyb20gJy4vYnJhbmRpbmcudHlwZSc7XG5pbXBvcnQgeyBTdGF0aWNBc3NldCwgU3RhdGljQXNzZXRzU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvc3RhdGljLWFzc2V0cy9kYXRhJztcbmltcG9ydCB7IEJyYW5kaW5nVHJhY2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi9icmFuZGluZy10cmFja2luZy5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZFZlcnNpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHJldmlzaW9uOiBudW1iZXI7XG4gIHZlcnNpb246IHN0cmluZztcbiAgdGFnczogc3RyaW5nW107XG4gIG93bmVyPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlZD86IHN0cmluZztcbiAgcHVibGljT3B0aW9uc0FwcD86IElBcHBsaWNhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcmFuZGluZ0ZpbGVEZXRhaWxzIHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgYmxvYjogQmxvYjtcbiAganNvbkNvbnRlbnQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmRpbmdGaWxlRGV0YWlsc0xlZ2FjeSB7XG4gIHBhdGg6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgYmxvYj86IEJsb2I7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIHVybFdyYXBwZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogU2VydmljZSB0byBsb2FkIGFuZCBzdG9yZSB0aGUgYnJhbmRpbmcgb2YgdGhlIHRlbmFudC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTdG9yZUJyYW5kaW5nU2VydmljZSB7XG4gIHJlYWRvbmx5IGZpbGVOYW1lcyA9IHtcbiAgICBvcHRpb25zOiAnb3B0aW9ucy5qc29uJyxcbiAgICBtYW5pZmVzdDogJ2N1bXVsb2NpdHkuanNvbicsXG4gICAgZXhwb3J0WmlwTmFtZTogJ3B1YmxpYy1vcHRpb25zLnppcCdcbiAgfSBhcyBjb25zdDtcbiAgcmVhZG9ubHkgbWFuaWZlc3RWYWx1ZXMgPSB7XG4gICAgbmFtZTogJ3B1YmxpYy1vcHRpb25zJyxcbiAgICBjb250ZXh0UGF0aDogJ3B1YmxpYy1vcHRpb25zJyxcbiAgICBrZXk6ICdwdWJsaWMtb3B0aW9ucy1rZXknLFxuICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gY29udGFpbmluZyBzdGF0aWMgYXNzZXRzIHVzZWQgYnkgZS5nLiBicmFuZGluZy4nLFxuICAgIG5vQXBwU3dpdGNoZXI6IHRydWUsXG4gICAgdHlwZTogQXBwbGljYXRpb25UeXBlLkhPU1RFRCxcbiAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRFxuICB9IGFzIGNvbnN0IHNhdGlzZmllcyBJQXBwbGljYXRpb247XG4gIHJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4obnVsbCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiaW5hcnk6IEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXA6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmZXRjaDogRmV0Y2hDbGllbnQsXG4gICAgcHJpdmF0ZSBicmFuZGluZ1ZlcnNpb25TZXJ2aWNlOiBCcmFuZGluZ1ZlcnNpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHN0YXRpY0Fzc2V0czogU3RhdGljQXNzZXRzU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU3dpdGNoZXI6IFRoZW1lU3dpdGNoZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnJhbmRpbmdUcmFja2luZzogQnJhbmRpbmdUcmFja2luZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBgbGF0ZXN0YCB0YWcgb24gdGhlIHByb3ZpZGVkIGJyYW5kaW5nIHZlcnNpb24uIE1ha2luZyBpdCB0aGUgZ2xvYmFsIGFjdGl2ZSBicmFuZGluZy5cbiAgICovXG4gIGFzeW5jIG1hcmtBc0FjdGl2ZShicmFuZGluZ1ZlcnNpb246IEJyYW5kVmVyc2lvbiwgYXBwPzogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IGFwcCB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGNvbnN0IHRhZ3MgPSBicmFuZGluZ1ZlcnNpb24udGFncyB8fCBbXTtcbiAgICBjb25zdCB2ZXJzaW9uID0gYnJhbmRpbmdWZXJzaW9uLnZlcnNpb247XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcocHVibGljT3B0aW9ucywgdmVyc2lvbiwgWy4uLnRhZ3MsICdsYXRlc3QnXSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBuZXcgdGFiIHdpdGggdG8gcHJldmlldyB0aGUgYnJhbmRpbmcuIFRoZSBicmFuZGluZyBtdXN0IGhhdmUgYmVlbiBzYXZlZCBiZWZvcmVoYW5kLlxuICAgKiBAcGFyYW0gYnJhbmRpbmdOYW1lIHRoZSBuYW1lIG9mIHRoZSBicmFuZGluZyB0byBiZSBwcmV2aWV3ZWRcbiAgICovXG4gIG9wZW5QcmV2aWV3Rm9yQnJhbmRpbmcoYnJhbmRpbmdOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJyYW5kaW5nVHJhY2tpbmcub3BlblByZXZpZXdGb3JCcmFuZGluZygpO1xuICAgIHdpbmRvdy5vcGVuKFxuICAgICAgYC9hcHBzLyR7XG4gICAgICAgIHRoaXMuYXBwU3RhdGUuY3VycmVudEFwcGxpY2F0aW9uLnZhbHVlPy5jb250ZXh0UGF0aCB8fCAnY29ja3BpdCdcbiAgICAgIH0vaW5kZXguaHRtbD9icmFuZGluZ1ByZXZpZXc9dHJ1ZSZkeW5hbWljT3B0aW9uc1VybD0vYXBwcy9wdWJsaWMvcHVibGljLW9wdGlvbnNAJHticmFuZGluZ05hbWV9L29wdGlvbnMuanNvbmAsXG4gICAgICAnX2JsYW5rJyxcbiAgICAgICdub29wZW5lcixub3JlZmVycmVyJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYnJhbmRpbmdzIG9mIHRoZSB0ZW5hbnQuXG4gICAqIElmIG5vIHB1YmxpYyBvcHRpb25zIGFwcCBpcyBmb3VuZCwgcHVibGljT3B0aW9ucyB3aWxsIGJlIHVuZGVmaW5lZCBhbmQgdmFyaWFudHMgYW4gZW1wdHkgYXJyYXkuXG4gICAqIEZvciBvbGQgYnJhbmRpbmdzIChjcmVhdGVkIHdpdGhvdXQgdmVyc2lvbmluZykgYSBkZWZhdWx0IHZlcnNpb24gaXMgcmV0dXJuZWQuXG4gICAqL1xuICBhc3luYyBsb2FkQnJhbmRpbmdWYXJpYW50cyhcbiAgICBhcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7IHB1YmxpY09wdGlvbnM6IElBcHBsaWNhdGlvbiB8IHVuZGVmaW5lZDsgdmFyaWFudHM6IEJyYW5kVmVyc2lvbltdIH0+IHtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gYXBwIHx8IChhd2FpdCB0aGlzLmdldFB1YmxpY09wdGlvbnNBcHAoKSk7XG4gICAgaWYgKCFwdWJsaWNPcHRpb25zKSB7XG4gICAgICByZXR1cm4geyBwdWJsaWNPcHRpb25zOiB1bmRlZmluZWQsIHZhcmlhbnRzOiBbXSB9O1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IHZlcnNpb25zIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0VmVyc2lvbnMocHVibGljT3B0aW9ucyk7XG4gICAgbGV0IG1hcHBlZFZlcnNpb25zOiBCcmFuZFZlcnNpb25bXSA9XG4gICAgICB2ZXJzaW9uc1xuICAgICAgICA/Lm1hcCh0bXAgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIGl0ZXJhdGlvbiB9ID1cbiAgICAgICAgICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLnNwbGl0QnJhbmRpbmdJbnRvTmFtZUFuZEl0ZXJhdGlvbih0bXAudmVyc2lvbik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByZXZpc2lvbjogaXRlcmF0aW9uLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpZDogdG1wLmJpbmFyeUlkLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiB0bXAudmVyc2lvbixcbiAgICAgICAgICAgICAgdGFnczogdG1wLnRhZ3MgfHwgW10sXG4gICAgICAgICAgICAgIHB1YmxpY09wdGlvbnNBcHA6IHB1YmxpY09wdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgdmVyc2lvbicsIHRtcCwgZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgPy5maWx0ZXIoQm9vbGVhbikgfHwgW107XG4gICAgaWYgKCF2ZXJzaW9ucyAmJiBwdWJsaWNPcHRpb25zLmFjdGl2ZVZlcnNpb25JZCkge1xuICAgICAgbWFwcGVkVmVyc2lvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZGVmYXVsdCcsXG4gICAgICAgICAgaWQ6IHB1YmxpY09wdGlvbnMuYWN0aXZlVmVyc2lvbklkLFxuICAgICAgICAgIHZlcnNpb246ICdkZWZhdWx0LTEnLFxuICAgICAgICAgIHJldmlzaW9uOiAxLFxuICAgICAgICAgIHRhZ3M6IFsnbGF0ZXN0JywgJ2RlZmF1bHQnXSxcbiAgICAgICAgICBwdWJsaWNPcHRpb25zQXBwOiBwdWJsaWNPcHRpb25zXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFudHMgPSBhd2FpdCB0aGlzLmdldE1ldGFkYXRhT2ZCcmFuZGluZ0JpbmFyaWVzKG1hcHBlZFZlcnNpb25zKTtcbiAgICByZXR1cm4geyBwdWJsaWNPcHRpb25zLCB2YXJpYW50cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIHRoZSBicmFuZGluZyBpcyBub3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlIGFmdGVyIGNyZWF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIHdhaXQgZm9yIHRoZSBicmFuZGluZyB0byBiZSBwcmVzZW50LlxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgdmVyc2lvbiBvZiB0aGUgYnJhbmRpbmcgdG8gYmUgcmV0cmlldmVkLlxuICAgKi9cbiAgYXN5bmMgd2FpdEZvckJyYW5kaW5nVG9CZVByZXNlbnQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbnVtYmVyT2ZBdHRlbXB0cyA9IDEyMDtcbiAgICBjb25zdCBzbGVlcER1cmF0aW9uSW5TZWNvbmRzID0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mQXR0ZW1wdHM7IGkrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gZG8gbm90IHNsZWVwIGJlZm9yZSB0aGUgZmlyc3QgYXR0ZW1wdFxuICAgICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBzbGVlcER1cmF0aW9uSW5TZWNvbmRzICogMV8wMDApKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24odmVyc2lvbik7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgQnJhbmRpbmcgXCIke3ZlcnNpb259XCIgYXZhaWxhYmxlIG5vdy5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYEJyYW5kaW5nIFwiJHt2ZXJzaW9ufVwiIG5vdCB5ZXQgcHJlc2VudCwgcmV0cnlpbmcgaW4gJHtzbGVlcER1cmF0aW9uSW5TZWNvbmRzfSBzZWNvbmRzLi4uYCxcbiAgICAgICAgICBlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBCcmFuZGluZyBcIiR7dmVyc2lvbn1cIiBub3QgYXZhaWxhYmxlIGFmdGVyICR7bnVtYmVyT2ZBdHRlbXB0cyAqIHNsZWVwRHVyYXRpb25JblNlY29uZHN9IHNlY29uZHMsIGdpdmluZyB1cC5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIGNyZWF0ZSBhIHRoZSBpbml0aWFsIGJyYW5kaW5nIGJhc2VkIG9uIHRoZSBjdXJyZW50bHkgYXBwbGllZCBDU1MgdmFyaWFibGVzLlxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhcnRlZFVzaW5nQnJhbmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYWxsVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgY29uc3QgdGhlbWVUb1JldHJpZXZlVmFycyA9IFsnbGlnaHQnLCAnZGFyayddIGFzIGNvbnN0O1xuICAgIGNvbnN0IHVucmV0cmlldmFibGVWYXJzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHRoZW1lIG9mIHRoZW1lVG9SZXRyaWV2ZVZhcnMpIHtcbiAgICAgIHRoaXMudGhlbWVTd2l0Y2hlci50ZW1wb3JhcnlDaGFuZ2VUaGVtZSh0aGVtZSk7XG4gICAgICBjb25zdCBzdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpO1xuICAgICAgY29uc3QgdmFyaWFibGVzVG9Ta2lwID0gW1xuICAgICAgICAnbmF2aWdhdG9yLXBsYXRmb3JtLWxvZ28nLFxuICAgICAgICAnYnJhbmQtbG9nby1pbWcnXG4gICAgICBdIHNhdGlzZmllcyAodHlwZW9mIGFsbEJyYW5kaW5nQ1NTVmFycylbbnVtYmVyXVtdO1xuICAgICAgY29uc3QgdmFsdWVzID0gYWxsQnJhbmRpbmdDU1NWYXJzXG4gICAgICAgIC5maWx0ZXIoY3NzVmFyID0+ICF2YXJpYWJsZXNUb1NraXAuaW5jbHVkZXMoY3NzVmFyIGFzIGFueSkpXG4gICAgICAgIC5yZWR1Y2UoKHByZXYsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRpcmVjdFZhbHVlID0gc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoYC0tJHtrZXl9YCk7XG4gICAgICAgICAgY29uc3QgYzh5UHJlZml4ZWRWYWx1ZSA9IHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKGAtLWM4eS0ke2tleX1gKTtcbiAgICAgICAgICBjb25zdCBuZXdLZXkgPSB0aGVtZSA9PT0gJ2xpZ2h0JyA/IGtleSA6IGBkYXJrLSR7a2V5fWA7XG4gICAgICAgICAgaWYgKCFkaXJlY3RWYWx1ZSAmJiAhYzh5UHJlZml4ZWRWYWx1ZSkge1xuICAgICAgICAgICAgdW5yZXRyaWV2YWJsZVZhcnMucHVzaChuZXdLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyID0gZGlyZWN0VmFsdWUgfHwgYzh5UHJlZml4ZWRWYWx1ZTtcbiAgICAgICAgICBpZiAobnVtYmVyQnJhbmRpbmdWYXJzLmluY2x1ZGVzKGtleSBhcyBhbnkpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoL1tBLVphLXpdL2csICcnKS50cmltKCkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYEZhaWxlZCB0byBwYXJzZSBudW1iZXIgZm9yIFwiJHtrZXl9XCIgdmFsdWUgdGhhdCBmYWlsZWQgdG8gcGFyc2U6IFwiJHt2YWx1ZX1cImAsXG4gICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJldiwgeyBbbmV3S2V5XTogdmFsdWUgfSk7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIE9iamVjdC5hc3NpZ24oYWxsVmFyaWFibGVzLCB2YWx1ZXMpO1xuICAgIH1cbiAgICB0aGlzLnRoZW1lU3dpdGNoZXIucmVzZXRUZW1wb3JhcnlUaGVtZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlUHVibGljT3B0aW9uc0FwcEZyb21Jbmhlcml0ZWRPcHRpb25zKGFsbFZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFppcEZvckJpbmFyeShcbiAgICBiaW5hcnlJZDogc3RyaW5nLFxuICAgIGZpbGVOYW1lOiBzdHJpbmcgPSB0aGlzLmZpbGVOYW1lcy5leHBvcnRaaXBOYW1lXG4gICk6IE9ic2VydmFibGU8RmlsZT4ge1xuICAgIHJldHVybiBkZWZlcigoKSA9PiB0aGlzLmJpbmFyeS5kb3dubG9hZChiaW5hcnlJZCkpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UuYmxvYigpKSxcbiAgICAgIG1hcChibG9iID0+IG5ldyBGaWxlKFtibG9iXSwgZmlsZU5hbWUpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgcHVibGljIG9wdGlvbnMgYXBwIGFuZCB0aGVyZWZvcmUgYWxsIGJyYW5kaW5ncy5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlQWxsQnJhbmRpbmdzKHB1YmxpY09wdGlvbnM/OiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBwdWJsaWNPcHRpb25zID0gcHVibGljT3B0aW9ucyB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShwdWJsaWNPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmhhbmNlcyB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgdmVyc2lvbnMgd2l0aCBtZXRhZGF0YSBmcm9tIHRoZSBsaW5rZWQgYmluYXJpZXMuXG4gICAqIEl0IHdpbGwgYWRkIHRoZSBvd25lciBhbmQgbGFzdFVwZGF0ZWQgZmllbGRzIHRvIHRoZSB2ZXJzaW9ucy5cbiAgICogVGhlIHByb3ZpZGVkIGFycmF5IGlzIGFsdGVyZWQuXG4gICAqL1xuICBhc3luYyBnZXRNZXRhZGF0YU9mQnJhbmRpbmdCaW5hcmllcyh2ZXJzaW9uczogQnJhbmRWZXJzaW9uW10pOiBQcm9taXNlPEJyYW5kVmVyc2lvbltdPiB7XG4gICAgY29uc3QgYmluYXJ5SWRzID0gdW5pcSh2ZXJzaW9ucy5tYXAodG1wID0+IHRtcC5pZCkpO1xuICAgIGlmICghYmluYXJ5SWRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25zO1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IG1ldGFkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIGlkczogYmluYXJ5SWRzLmpvaW4oJywnKSxcbiAgICAgIHBhZ2VTaXplOiAyMDAwXG4gICAgfSk7XG4gICAgcmV0dXJuIHZlcnNpb25zLm1hcCh2ZXJzaW9uID0+IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhRm9yVmVyc2lvbiA9XG4gICAgICAgIG1ldGFkYXRhLmZpbmQodG1wID0+IHRtcC5pZCA9PT0gdmVyc2lvbi5pZCkgfHwgKHt9IGFzIElNYW5hZ2VkT2JqZWN0KTtcbiAgICAgIGNvbnN0IHsgb3duZXIsIGxhc3RVcGRhdGVkIH0gPSBtZXRhZGF0YUZvclZlcnNpb247XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih2ZXJzaW9uLCB7IG93bmVyLCBsYXN0VXBkYXRlZCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcHJvdmlkZWQgYnJhbmRpbmcgYXMgYSBuZXcgdmVyc2lvbiBmb3IgdGhlIHB1YmxpYyBvcHRpb25zIGFwcC5cbiAgICogVGhlIHB1YmxpYyBvcHRpb25zIGFwcCBjYW4gYmUgb3B0aW9uYWxseSBwcm92aWRlZCB0byBhdm9pZCBhbm90aGVyIHJlcXVlc3QgZm9yIGl0LlxuICAgKi9cbiAgYXN5bmMgc2F2ZUJyYW5kaW5nKFxuICAgIGJsb2I6IEJsb2IgfCBGaWxlLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICB0YWdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHB1YmxpY09wdGlvbnNBcHA/OiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgY29uc3QgZmlsZSA9IGJsb2IgaW5zdGFuY2VvZiBGaWxlID8gYmxvYiA6IG5ldyBGaWxlKFtibG9iXSwgYHB1YmxpYy1vcHRpb25zLSR7dmVyc2lvbn0uemlwYCk7XG4gICAgY29uc3QgcHVibGljT3B0aW9ucyA9IHB1YmxpY09wdGlvbnNBcHAgfHwgKGF3YWl0IHRoaXMuZ2V0UHVibGljT3B0aW9uc0FwcCgpKTtcblxuICAgIGNvbnN0IHsgZGF0YTogYmluYXJ5IH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZVxuICAgICAgLmJpbmFyeShwdWJsaWNPcHRpb25zKVxuICAgICAgLnVwbG9hZEFwcGxpY2F0aW9uVmVyc2lvbihmaWxlLCB2ZXJzaW9uLCB0YWdzKTtcbiAgICBpZiAoIXB1YmxpY09wdGlvbnMuYWN0aXZlVmVyc2lvbklkIHx8IHRhZ3MuaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoe1xuICAgICAgICBpZDogcHVibGljT3B0aW9ucy5pZCxcbiAgICAgICAgYWN0aXZlVmVyc2lvbklkOiBgJHtiaW5hcnkuYmluYXJ5SWR9YFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFRyaWdnZXJCcmFuZGluZ1ZhcmlhbnRzLm5leHQoKTtcbiAgICByZXR1cm4geyB2ZXJzaW9uLCBiaW5hcnksIHRhZ3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgYnJhbmRpbmcgdmVyc2lvbiBmcm9tIHRoZSBwdWJsaWMgb3B0aW9ucyBhcHAuXG4gICAqIFRoZSBwdWJsaWMgb3B0aW9ucyBhcHAgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdmlkZWQgdG8gYXZvaWQgYW5vdGhlciByZXF1ZXN0IGZvciBpdC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUJyYW5kaW5nVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcsIHB1YmxpY09wdGlvbnM/OiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBwdWJsaWNPcHRpb25zID0gcHVibGljT3B0aW9ucyB8fCAoYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCkpO1xuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZVZlcnNpb25QYWNrYWdlKHB1YmxpY09wdGlvbnMsIHsgdmVyc2lvbiB9KTtcbiAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyQnJhbmRpbmdWYXJpYW50cy5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYmxvYiBvZiBhIHppcCBmaWxlIGNvbnRhaW5pbmcgdGhlIHByb3ZpZGVkIGJyYW5kaW5nIG9wdGlvbnMgKG9wdGlvbnMuanNvbikgYW5kIHRoZSBtYW5pZmVzdCAoY3VtdWxvY2l0eS5qc29uKS5cbiAgICovXG4gIGFzeW5jIGdldEJyYW5kaW5nWmlwKGNvbnRlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IFByb21pc2U8QmxvYj4ge1xuICAgIGNvbnRlbnQubGFzdFVwZGF0ZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgY29udGVudEFzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY29udGVudCk7XG4gICAgY29uc3QgemlwID0gYXdhaXQgdGhpcy56aXAuY3JlYXRlWmlwKFtcbiAgICAgIHsgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWVzLm9wdGlvbnMsIGJsb2I6IG5ldyBCbG9iKFtjb250ZW50QXNTdHJpbmddKSB9LFxuICAgICAgeyBmaWxlTmFtZTogdGhpcy5maWxlTmFtZXMubWFuaWZlc3QsIGJsb2I6IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeSh0aGlzLm1hbmlmZXN0VmFsdWVzKV0pIH1cbiAgICBdKTtcbiAgICByZXR1cm4gemlwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgYnJhbmRpbmcgdmVyc2lvbiB0byB0aGUgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBUaGUgcHVibGljIG9wdGlvbnMgYXBwIGNhbiBiZSBvcHRpb25hbGx5IHByb3ZpZGVkIHRvIGF2b2lkIGFub3RoZXIgcmVxdWVzdCBmb3IgaXQuXG4gICAqL1xuICBhc3luYyBhZGRCcmFuZGluZyhcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgY29udGVudDogQnJhbmRpbmdPcHRpb25zSnNvbiA9IHt9LFxuICAgIHRhZ3M6IHN0cmluZ1tdID0gW10sXG4gICAgcHVibGljT3B0aW9uc0FwcD86IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPHtcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgYmluYXJ5OiBJQXBwbGljYXRpb25CaW5hcnk7XG4gICAgdGFnczogc3RyaW5nW107XG4gIH0+IHtcbiAgICBjb25zdCB6aXAgPSBhd2FpdCB0aGlzLmdldEJyYW5kaW5nWmlwKGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2F2ZUJyYW5kaW5nKHppcCwgdmVyc2lvbiwgdGFncywgcHVibGljT3B0aW9uc0FwcCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYnJhbmRpbmcgb3B0aW9ucyBmb3IgdGhlIHByb3ZpZGVkIHZlcnNpb24uXG4gICAqIElmIG5vIGJyYW5kaW5nIHdhcyBmb3VuZCAoZS5nLiBzdGF0dXMgNDA0KSwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKi9cbiAgYXN5bmMgZ2V0QnJhbmRpbmdPcHRpb25zRm9yVmVyc2lvbih2ZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxCcmFuZGluZ09wdGlvbnNKc29uPiB7XG4gICAgY29uc3QgdXJsID0gYC9hcHBzL3B1YmxpYy9wdWJsaWMtb3B0aW9ucyR7dmVyc2lvbiA/IGBAJHt2ZXJzaW9ufWAgOiAnJ30vJHt0aGlzLmZpbGVOYW1lcy5vcHRpb25zfT9ub2NhY2hlPSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2guZmV0Y2godXJsKTtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IEVycm9yKGBVbmV4cGVjdGVkIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBjb250ZW50IGFzIEJyYW5kaW5nT3B0aW9uc0pzb247XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBuZXcgaXRlcmF0aW9uIG9mIGFuIGFscmVhZHkgZXhpc3RpbmcgYnJhbmRpbmcuXG4gICAqL1xuICBhc3luYyBzYXZlRXhpc3RpbmdCcmFuZGluZyhcbiAgICBicmFuZGluZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjdXJyZW50VmVyc2lvbjogc3RyaW5nLFxuICAgIHRhZ3NPZkN1cnJlbnRWZXJzaW9uOiBzdHJpbmdbXSA9IFtdLFxuICAgIG5ld1ZlcnNpb24/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwdWJsaWNPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRQdWJsaWNPcHRpb25zQXBwKCk7XG4gICAgY29uc3QgdmVyc2lvblRvQmVTZXQgPSBuZXdWZXJzaW9uXG4gICAgICA/IHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5jcmVhdGVJbml0aWFsQnJhbmRpbmdWZXJzaW9uKG5ld1ZlcnNpb24pXG4gICAgICA6IHRoaXMuYnJhbmRpbmdWZXJzaW9uU2VydmljZS5idW1wQnJhbmRpbmdJdGVyYXRpb24oY3VycmVudFZlcnNpb24pO1xuXG4gICAgY29uc3QgZmluYWxUYWdzID0gdGFnc09mQ3VycmVudFZlcnNpb247XG4gICAgLy8gb25seSBhcHBseSBsYXRlc3QgdGFnIGRpcmVjdGx5XG4gICAgLy8gdGhlcmUgc2VlbXMgdG8gYmUgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGUgbGF0ZXN0IHRhZyBpbiB0aGUgYmFja2VuZCwgdGhhdCBhbGxvd3MgdG8gZGlyZWN0bHkgbW92ZSBpdCB3aGlsZSB1cGxvYWRpbmcgdGhlIG5ldyB2ZXJzaW9uLlxuICAgIC8vIGZvciBhbGwgb3RoZXIgdGFncyB0aGlzIHJlc3VsdHMgaW4gYSA0MDkgY29uZmxpY3QuIFdlIHRoZXJlZm9yZSBuZWVkIHRvIGZpcnN0IGRlbGV0ZSB0aGUgb2xkIHZlcnNpb24sIGJlZm9yZSBzZXR0aW5nIHRoZSBvdGhlciB0YWdzIG9uIHRoZSBuZXcgdmVyc2lvbi5cbiAgICBpZiAoIW5ld1ZlcnNpb24pIHtcbiAgICAgIHRhZ3NPZkN1cnJlbnRWZXJzaW9uID0gdGFnc09mQ3VycmVudFZlcnNpb24uZmlsdGVyKHRhZyA9PiB0YWcgPT09ICdsYXRlc3QnKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hZGRCcmFuZGluZyh2ZXJzaW9uVG9CZVNldCwgYnJhbmRpbmcsIHRhZ3NPZkN1cnJlbnRWZXJzaW9uLCBwdWJsaWNPcHRpb25zKTtcbiAgICBpZiAoIW5ld1ZlcnNpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQnJhbmRpbmdWZXJzaW9uKGN1cnJlbnRWZXJzaW9uLCBwdWJsaWNPcHRpb25zKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUucmVzLnN0YXR1cyAhPT0gNDA0KSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcocHVibGljT3B0aW9ucywgdmVyc2lvblRvQmVTZXQsIGZpbmFsVGFncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcnNpb25Ub0JlU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmVzIGN1cnJlbnQgYnJhbmRpbmcgb3B0aW9ucyB3aXRoIHRoZSBwcm92aWRlZCBicmFuZGluZyB2YXJpYWJsZXMgYW5kIGNyZWF0ZXMgYSBuZXcgcHVibGljIG9wdGlvbnMgYXBwLlxuICAgKiBBbnkgYXNzZXRzIGluIHRoZSBicmFuZGluZyB3aWxsIGJlIGNsb25lZC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVB1YmxpY09wdGlvbnNBcHBGcm9tSW5oZXJpdGVkT3B0aW9ucyhicmFuZGluZ1ZhcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTx7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGJpbmFyeTogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgbGV0IGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbjtcbiAgICBsZXQgZmFsbEJhY2tCcmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbiA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgPSBhd2FpdCB0aGlzLmdldEJyYW5kaW5nT3B0aW9uc0ZvclZlcnNpb24oKTtcbiAgICAgIGZhbGxCYWNrQnJhbmRpbmcgPSBjbG9uZURlZXAoY3VycmVudGx5QXBwbGllZEJyYW5kaW5nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBnZXQgY3VycmVudGx5IGFwcGxpZWQgYnJhbmRpbmcsIHByb2NlZWRpbmcgd2l0aCBlbXB0eSBicmFuZGluZy4nLCBlKTtcbiAgICB9XG5cbiAgICBpZiAoYnJhbmRpbmdWYXJzKSB7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgPSBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcgfHwge307XG4gICAgICBjb25zdCBicmFuZGluZ0Nzc1ZhcnMgPSBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcuYnJhbmRpbmdDc3NWYXJzIHx8IHt9O1xuICAgICAgT2JqZWN0LmFzc2lnbihicmFuZGluZ0Nzc1ZhcnMsIGJyYW5kaW5nVmFycyk7XG4gICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcuYnJhbmRpbmdDc3NWYXJzID0gYnJhbmRpbmdDc3NWYXJzO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgb2xkQXNzZXRzLCBuZXdBc3NldHMgfSA9IGF3YWl0IHRoaXMuc3RhdGljQXNzZXRzLmNsb25lQXNzZXRzSW50b1RlbmFudCgnYnJhbmRpbmcnKTtcbiAgICAgICAgY3VycmVudGx5QXBwbGllZEJyYW5kaW5nID0gdGhpcy5yZXBsYWNlQnJhbmRpbmdBc3NldHNJbkJyYW5kaW5nT3B0aW9ucyhcbiAgICAgICAgICBjdXJyZW50bHlBcHBsaWVkQnJhbmRpbmcsXG4gICAgICAgICAgb2xkQXNzZXRzLFxuICAgICAgICAgIG5ld0Fzc2V0c1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byByZWxvY2F0ZSBicmFuZGluZyBhc3NldHMgaW50byBjdXJyZW50IHRlbmFudC4nLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwdWJsaWNPcHRpb25zQXBwID0gYXdhaXQgdGhpcy5jcmVhdGVQdWJsaWNPcHRpb25zQXBwKCk7XG5cbiAgICBjb25zdCBkZWZhdWx0QnJhbmRpbmdOYW1lID0gYGRlZmF1bHRgO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWRkQnJhbmRpbmcoXG4gICAgICB0aGlzLmJyYW5kaW5nVmVyc2lvblNlcnZpY2UuY3JlYXRlSW5pdGlhbEJyYW5kaW5nVmVyc2lvbihkZWZhdWx0QnJhbmRpbmdOYW1lKSxcbiAgICAgIGN1cnJlbnRseUFwcGxpZWRCcmFuZGluZyB8fCB7fSxcbiAgICAgIFsnbGF0ZXN0JywgZGVmYXVsdEJyYW5kaW5nTmFtZV0sXG4gICAgICBwdWJsaWNPcHRpb25zQXBwXG4gICAgKTtcblxuICAgIGNvbnN0IGZhbGxiYWNrQnJhbmRpbmdOYW1lID0gYGZhbGxiYWNrYDtcbiAgICBhd2FpdCB0aGlzLmFkZEJyYW5kaW5nKFxuICAgICAgdGhpcy5icmFuZGluZ1ZlcnNpb25TZXJ2aWNlLmNyZWF0ZUluaXRpYWxCcmFuZGluZ1ZlcnNpb24oZmFsbGJhY2tCcmFuZGluZ05hbWUpLFxuICAgICAgZmFsbEJhY2tCcmFuZGluZyxcbiAgICAgIFtmYWxsYmFja0JyYW5kaW5nTmFtZV0sXG4gICAgICBwdWJsaWNPcHRpb25zQXBwXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGFzc2V0cyBpbiB0aGUgYnJhbmRpbmcgb3B0aW9ucyB3aXRoIHRoZSBuZXcgYXNzZXRzLlxuICAgKiBHb2VzIHRocm91Z2ggdGhlIHByb3ZpZGVkIGBvbGRBc3NldHNgIGFuZCByZXBsYWNlcyB0aGVpciBvY2N1cnJlbmNlcyBpbiB0aGUgYnJhbmRpbmcgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBgbmV3QXNzZXRzYCBlbnRyeSBzaGFyaW5nIHRoZSBzYW1lIGZpbGVOYW1lLlxuICAgKiBSZXR1cm5zIHRoZSB1cGRhdGVkIGJyYW5kaW5nIG9wdGlvbnMuXG4gICAqL1xuICByZXBsYWNlQnJhbmRpbmdBc3NldHNJbkJyYW5kaW5nT3B0aW9ucyhcbiAgICBicmFuZGluZzogQnJhbmRpbmdPcHRpb25zSnNvbixcbiAgICBvbGRBc3NldHM6IFN0YXRpY0Fzc2V0W10sXG4gICAgbmV3QXNzZXRzOiBTdGF0aWNBc3NldFtdXG4gICk6IEJyYW5kaW5nT3B0aW9uc0pzb24ge1xuICAgIGxldCBicmFuZGluZ0FzSlNPTlN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGJyYW5kaW5nKTtcbiAgICBmb3IgKGNvbnN0IG9sZEFzc2V0IG9mIG9sZEFzc2V0cykge1xuICAgICAgY29uc3QgbmV3TG9jYXRlZEFzc2V0ID0gbmV3QXNzZXRzLmZpbmQodG1wID0+IHRtcC5maWxlTmFtZSA9PT0gb2xkQXNzZXQuZmlsZU5hbWUpO1xuICAgICAgaWYgKCFuZXdMb2NhdGVkQXNzZXQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgcGF0aCBpcyB0aGUgc2FtZSwgd2UgZG9uJ3QgbmVlZCB0byByZXBsYWNlIGl0LlxuICAgICAgaWYgKG9sZEFzc2V0LnBhdGggPT09IG5ld0xvY2F0ZWRBc3NldC5wYXRoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiB1c2UgcHJvcGVyIHJlcGxhY2VBbGwgb25jZSBpdCdzIGF2YWlsYWJsZSB3aXRoIGVzMjAyMVxuICAgICAgYnJhbmRpbmdBc0pTT05TdHJpbmcgPSBicmFuZGluZ0FzSlNPTlN0cmluZy5zcGxpdChvbGRBc3NldC5wYXRoKS5qb2luKG5ld0xvY2F0ZWRBc3NldC5wYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYnJhbmRpbmdBc0pTT05TdHJpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRQdWJsaWNPcHRpb25zQXBwKCkge1xuICAgIGxldCB7IGRhdGE6IGFwcHMgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeU5hbWUodGhpcy5tYW5pZmVzdFZhbHVlcy5uYW1lKTtcbiAgICBhcHBzID0gYXBwcy5maWx0ZXIoYXBwID0+IGFwcC5vd25lcj8udGVuYW50Py5pZCA9PT0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlPy5uYW1lKTtcblxuICAgIHJldHVybiBhcHBzWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQdWJsaWNPcHRpb25zQXBwKCkge1xuICAgIGNvbnN0IHsgZGF0YTogYXBwIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jcmVhdGUodGhpcy5tYW5pZmVzdFZhbHVlcyk7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxufVxuIl19