@lowcodeunit/applications-flow-common 1.36.221-social-rework → 1.36.222-merge

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 (27) hide show
  1. package/esm2020/lcu.api.mjs +1 -4
  2. package/esm2020/lib/applications-flow.module.mjs +3 -18
  3. package/esm2020/lib/elements/page-header/page-header.component.mjs +3 -3
  4. package/esm2020/lib/elements/project-info-card/project-info-card.component.mjs +3 -3
  5. package/esm2020/lib/models/user-feed.model.mjs +1 -3
  6. package/esm2020/lib/services/applications-flow.service.mjs +3 -4
  7. package/esm2020/lib/services/eac.service.mjs +3 -3
  8. package/esm2020/lib/services/project.service.mjs +8 -11
  9. package/esm2020/lib/state/applications-flow.state.mjs +1 -3
  10. package/fesm2015/lowcodeunit-applications-flow-common.mjs +126 -321
  11. package/fesm2015/lowcodeunit-applications-flow-common.mjs.map +1 -1
  12. package/fesm2020/lowcodeunit-applications-flow-common.mjs +126 -319
  13. package/fesm2020/lowcodeunit-applications-flow-common.mjs.map +1 -1
  14. package/lcu.api.d.ts +0 -3
  15. package/lib/applications-flow.module.d.ts +10 -13
  16. package/lib/models/user-feed.model.d.ts +0 -6
  17. package/lib/services/applications-flow.service.d.ts +1 -1
  18. package/lib/services/eac.service.d.ts +1 -1
  19. package/lib/services/project.service.d.ts +1 -1
  20. package/lib/state/applications-flow.state.d.ts +0 -9
  21. package/package.json +1 -1
  22. package/esm2020/lib/elements/advertisement-card/advertisement-card.component.mjs +0 -24
  23. package/esm2020/lib/elements/feed-filter/feed-filter.component.mjs +0 -151
  24. package/esm2020/lib/elements/product-discovery-card/product-discovery-card.component.mjs +0 -20
  25. package/lib/elements/advertisement-card/advertisement-card.component.d.ts +0 -11
  26. package/lib/elements/feed-filter/feed-filter.component.d.ts +0 -25
  27. package/lib/elements/product-discovery-card/product-discovery-card.component.d.ts +0 -9
package/lcu.api.d.ts CHANGED
@@ -2,13 +2,10 @@ export * from './lib/applications-flow.module';
2
2
  export * from './lib/services/applications-flow.service';
3
3
  export * from './lib/state/applications-flow-state.context';
4
4
  export * from './lib/state/applications-flow.state';
5
- export * from './lib/elements/advertisement-card/advertisement-card.component';
6
- export * from './lib/elements/feed-filter/feed-filter.component';
7
5
  export * from './lib/elements/projects/controls/forms/source-control/source-control.component';
8
6
  export * from './lib/elements/projects/controls/create-project-wizard/create-project-wizard.component';
9
7
  export * from './lib/elements/projects/controls/hosting-details-form-group/hosting-details-form-group.component';
10
8
  export * from './lib/elements/page-header/page-header.component';
11
- export * from './lib/elements/product-discovery-card/product-discovery-card.component';
12
9
  export * from './lib/models/dynamic-tabs.model';
13
10
  export * from './lib/models/project-actions.model';
14
11
  export * from './lib/models/user-feed.model';
@@ -57,21 +57,18 @@ import * as i54 from "./controls/feed-comment-form/feed-comment-form.component";
57
57
  import * as i55 from "./elements/page-header/page-header.component";
58
58
  import * as i56 from "./controls/connected-source/connected-source.component";
59
59
  import * as i57 from "./dialogs/user-account-dialog/user-account-dialog.component";
60
- import * as i58 from "./elements/product-discovery-card/product-discovery-card.component";
61
- import * as i59 from "./elements/advertisement-card/advertisement-card.component";
62
- import * as i60 from "./elements/feed-filter/feed-filter.component";
63
- import * as i61 from "@kolkov/angular-editor";
64
- import * as i62 from "@angular/cdk/clipboard";
65
- import * as i63 from "@lcu/common";
66
- import * as i64 from "@angular/forms";
67
- import * as i65 from "@angular/flex-layout";
68
- import * as i66 from "@lowcodeunit/app-host-common";
69
- import * as i67 from "@angular/material/tooltip";
70
- import * as i68 from "@angular/material/slide-toggle";
71
- import * as i69 from "skeleton-elements/angular";
60
+ import * as i58 from "@kolkov/angular-editor";
61
+ import * as i59 from "@angular/cdk/clipboard";
62
+ import * as i60 from "@lcu/common";
63
+ import * as i61 from "@angular/forms";
64
+ import * as i62 from "@angular/flex-layout";
65
+ import * as i63 from "@lowcodeunit/app-host-common";
66
+ import * as i64 from "@angular/material/tooltip";
67
+ import * as i65 from "@angular/material/slide-toggle";
68
+ import * as i66 from "skeleton-elements/angular";
72
69
  export declare class ApplicationsFlowModule {
73
70
  static forRoot(): ModuleWithProviders<ApplicationsFlowModule>;
74
71
  static ɵfac: i0.ɵɵFactoryDeclaration<ApplicationsFlowModule, never>;
75
- static ɵmod: i0.ɵɵNgModuleDeclaration<ApplicationsFlowModule, [typeof i1.ApplicationsFlowProjectsElementComponent, typeof i2.HostingDetailsFormGroupComponent, typeof i3.CreateProjectWizardComponent, typeof i4.DynamicTabsComponent, typeof i5.HeaderComponent, typeof i6.ProjectTabsComponent, typeof i7.DomainsComponent, typeof i8.ProjectItemsComponent, typeof i9.BuildsComponent, typeof i10.RecentActivitiesComponent, typeof i11.FormCardComponent, typeof i12.ProjectNameComponent, typeof i13.RootDirectoryComponent, typeof i14.BaseFormComponent, typeof i15.BaseFormTestComponent, typeof i16.GitAuthComponent, typeof i17.SourceControlFormControlsComponent, typeof i18.AppsFlowComponent, typeof i19.DevOpsComponent, typeof i20.DFSModifiersComponent, typeof i21.NpmPackageSelectComponent, typeof i22.DFSModifiersFormComponent, typeof i23.ThreeColumnComponent, typeof i24.SlottedCardComponent, typeof i25.ProjectInfoCardComponent, typeof i26.AnalyticsCardComponent, typeof i27.FeedCardSmComponent, typeof i28.FeedHeaderComponent, typeof i29.MainFeedCardComponent, typeof i30.TwoColumnHeaderComponent, typeof i31.CardCarouselComponent, typeof i32.SecurityToggleComponent, typeof i33.ProcessorDetailsFormComponent, typeof i34.SourceControlFormComponent, typeof i35.BuildPipelineFormComponent, typeof i36.DevopsSourceControlFormComponent, typeof i37.SourceControlDialogComponent, typeof i38.BuildPipelineDialogComponent, typeof i39.EditApplicationFormComponent, typeof i40.BreadcrumbComponent, typeof i41.DFSModifiersDialogComponent, typeof i42.CustomDomainDialogComponent, typeof i43.EditApplicationDialogComponent, typeof i44.NewApplicationDialogComponent, typeof i45.ProcessorDetailsDialogComponent, typeof i46.SkeletonFeedCardComponent, typeof i47.UpgradeDialogComponent, typeof i48.EmulatedDevicesToggleComponent, typeof i49.FeedHeaderDialogComponent, typeof i50.StateConfigDialogComponent, typeof i51.StateConfigFormComponent, typeof i52.EditProjectDialogComponent, typeof i53.EditProjectFormComponent, typeof i54.FeedCommentFormComponent, typeof i55.PageHeaderComponent, typeof i56.ConnectedSourceComponent, typeof i57.UserAccountDialogComponent, typeof i58.ProductDiscoveryCardComponent, typeof i59.AdvertisementCardComponent, typeof i60.FeedFilterComponent], [typeof i61.AngularEditorModule, typeof i62.ClipboardModule, typeof i63.FathymSharedModule, typeof i64.FormsModule, typeof i64.ReactiveFormsModule, typeof i65.FlexLayoutModule, typeof i63.MaterialModule, typeof i66.AppHostModule, typeof i67.MatTooltipModule, typeof i68.MatSlideToggleModule, typeof i69.SkeletonElementsModule], [typeof i1.ApplicationsFlowProjectsElementComponent, typeof i2.HostingDetailsFormGroupComponent, typeof i3.CreateProjectWizardComponent, typeof i4.DynamicTabsComponent, typeof i5.HeaderComponent, typeof i6.ProjectTabsComponent, typeof i7.DomainsComponent, typeof i8.ProjectItemsComponent, typeof i9.BuildsComponent, typeof i10.RecentActivitiesComponent, typeof i11.FormCardComponent, typeof i12.ProjectNameComponent, typeof i13.RootDirectoryComponent, typeof i14.BaseFormComponent, typeof i15.BaseFormTestComponent, typeof i16.GitAuthComponent, typeof i17.SourceControlFormControlsComponent, typeof i18.AppsFlowComponent, typeof i19.DevOpsComponent, typeof i20.DFSModifiersComponent, typeof i21.NpmPackageSelectComponent, typeof i23.ThreeColumnComponent, typeof i24.SlottedCardComponent, typeof i25.ProjectInfoCardComponent, typeof i26.AnalyticsCardComponent, typeof i27.FeedCardSmComponent, typeof i28.FeedHeaderComponent, typeof i49.FeedHeaderDialogComponent, typeof i29.MainFeedCardComponent, typeof i30.TwoColumnHeaderComponent, typeof i31.CardCarouselComponent, typeof i32.SecurityToggleComponent, typeof i33.ProcessorDetailsFormComponent, typeof i34.SourceControlFormComponent, typeof i35.BuildPipelineFormComponent, typeof i36.DevopsSourceControlFormComponent, typeof i37.SourceControlDialogComponent, typeof i38.BuildPipelineDialogComponent, typeof i39.EditApplicationFormComponent, typeof i40.BreadcrumbComponent, typeof i42.CustomDomainDialogComponent, typeof i43.EditApplicationDialogComponent, typeof i44.NewApplicationDialogComponent, typeof i45.ProcessorDetailsDialogComponent, typeof i46.SkeletonFeedCardComponent, typeof i47.UpgradeDialogComponent, typeof i48.EmulatedDevicesToggleComponent, typeof i49.FeedHeaderDialogComponent, typeof i41.DFSModifiersDialogComponent, typeof i22.DFSModifiersFormComponent, typeof i50.StateConfigDialogComponent, typeof i51.StateConfigFormComponent, typeof i52.EditProjectDialogComponent, typeof i53.EditProjectFormComponent, typeof i54.FeedCommentFormComponent, typeof i55.PageHeaderComponent, typeof i56.ConnectedSourceComponent, typeof i57.UserAccountDialogComponent, typeof i58.ProductDiscoveryCardComponent, typeof i59.AdvertisementCardComponent, typeof i60.FeedFilterComponent]>;
72
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ApplicationsFlowModule, [typeof i1.ApplicationsFlowProjectsElementComponent, typeof i2.HostingDetailsFormGroupComponent, typeof i3.CreateProjectWizardComponent, typeof i4.DynamicTabsComponent, typeof i5.HeaderComponent, typeof i6.ProjectTabsComponent, typeof i7.DomainsComponent, typeof i8.ProjectItemsComponent, typeof i9.BuildsComponent, typeof i10.RecentActivitiesComponent, typeof i11.FormCardComponent, typeof i12.ProjectNameComponent, typeof i13.RootDirectoryComponent, typeof i14.BaseFormComponent, typeof i15.BaseFormTestComponent, typeof i16.GitAuthComponent, typeof i17.SourceControlFormControlsComponent, typeof i18.AppsFlowComponent, typeof i19.DevOpsComponent, typeof i20.DFSModifiersComponent, typeof i21.NpmPackageSelectComponent, typeof i22.DFSModifiersFormComponent, typeof i23.ThreeColumnComponent, typeof i24.SlottedCardComponent, typeof i25.ProjectInfoCardComponent, typeof i26.AnalyticsCardComponent, typeof i27.FeedCardSmComponent, typeof i28.FeedHeaderComponent, typeof i29.MainFeedCardComponent, typeof i30.TwoColumnHeaderComponent, typeof i31.CardCarouselComponent, typeof i32.SecurityToggleComponent, typeof i33.ProcessorDetailsFormComponent, typeof i34.SourceControlFormComponent, typeof i35.BuildPipelineFormComponent, typeof i36.DevopsSourceControlFormComponent, typeof i37.SourceControlDialogComponent, typeof i38.BuildPipelineDialogComponent, typeof i39.EditApplicationFormComponent, typeof i40.BreadcrumbComponent, typeof i41.DFSModifiersDialogComponent, typeof i42.CustomDomainDialogComponent, typeof i43.EditApplicationDialogComponent, typeof i44.NewApplicationDialogComponent, typeof i45.ProcessorDetailsDialogComponent, typeof i46.SkeletonFeedCardComponent, typeof i47.UpgradeDialogComponent, typeof i48.EmulatedDevicesToggleComponent, typeof i49.FeedHeaderDialogComponent, typeof i50.StateConfigDialogComponent, typeof i51.StateConfigFormComponent, typeof i52.EditProjectDialogComponent, typeof i53.EditProjectFormComponent, typeof i54.FeedCommentFormComponent, typeof i55.PageHeaderComponent, typeof i56.ConnectedSourceComponent, typeof i57.UserAccountDialogComponent], [typeof i58.AngularEditorModule, typeof i59.ClipboardModule, typeof i60.FathymSharedModule, typeof i61.FormsModule, typeof i61.ReactiveFormsModule, typeof i62.FlexLayoutModule, typeof i60.MaterialModule, typeof i63.AppHostModule, typeof i64.MatTooltipModule, typeof i65.MatSlideToggleModule, typeof i66.SkeletonElementsModule], [typeof i1.ApplicationsFlowProjectsElementComponent, typeof i2.HostingDetailsFormGroupComponent, typeof i3.CreateProjectWizardComponent, typeof i4.DynamicTabsComponent, typeof i5.HeaderComponent, typeof i6.ProjectTabsComponent, typeof i7.DomainsComponent, typeof i8.ProjectItemsComponent, typeof i9.BuildsComponent, typeof i10.RecentActivitiesComponent, typeof i11.FormCardComponent, typeof i12.ProjectNameComponent, typeof i13.RootDirectoryComponent, typeof i14.BaseFormComponent, typeof i15.BaseFormTestComponent, typeof i16.GitAuthComponent, typeof i17.SourceControlFormControlsComponent, typeof i18.AppsFlowComponent, typeof i19.DevOpsComponent, typeof i20.DFSModifiersComponent, typeof i21.NpmPackageSelectComponent, typeof i23.ThreeColumnComponent, typeof i24.SlottedCardComponent, typeof i25.ProjectInfoCardComponent, typeof i26.AnalyticsCardComponent, typeof i27.FeedCardSmComponent, typeof i28.FeedHeaderComponent, typeof i49.FeedHeaderDialogComponent, typeof i29.MainFeedCardComponent, typeof i30.TwoColumnHeaderComponent, typeof i31.CardCarouselComponent, typeof i32.SecurityToggleComponent, typeof i33.ProcessorDetailsFormComponent, typeof i34.SourceControlFormComponent, typeof i35.BuildPipelineFormComponent, typeof i36.DevopsSourceControlFormComponent, typeof i37.SourceControlDialogComponent, typeof i38.BuildPipelineDialogComponent, typeof i39.EditApplicationFormComponent, typeof i40.BreadcrumbComponent, typeof i42.CustomDomainDialogComponent, typeof i43.EditApplicationDialogComponent, typeof i44.NewApplicationDialogComponent, typeof i45.ProcessorDetailsDialogComponent, typeof i46.SkeletonFeedCardComponent, typeof i47.UpgradeDialogComponent, typeof i48.EmulatedDevicesToggleComponent, typeof i49.FeedHeaderDialogComponent, typeof i41.DFSModifiersDialogComponent, typeof i22.DFSModifiersFormComponent, typeof i50.StateConfigDialogComponent, typeof i51.StateConfigFormComponent, typeof i52.EditProjectDialogComponent, typeof i53.EditProjectFormComponent, typeof i54.FeedCommentFormComponent, typeof i55.PageHeaderComponent, typeof i56.ConnectedSourceComponent, typeof i57.UserAccountDialogComponent]>;
76
73
  static ɵinj: i0.ɵɵInjectorDeclaration<ApplicationsFlowModule>;
77
74
  }
@@ -1,10 +1,7 @@
1
1
  import { BaseResponse, Status } from '@lcu/common';
2
- import { Advertisement } from '../state/applications-flow.state';
3
2
  export declare class UserFeedResponse extends BaseResponse {
4
3
  Actions: Array<FeedItemAction>;
5
- Advertisements: Array<Advertisement>;
6
4
  Items: Array<FeedItem>;
7
- ItemTypes: Array<ItemType>;
8
5
  SourceControlLookups: Array<string>;
9
6
  }
10
7
  export declare class FeedItem {
@@ -63,6 +60,3 @@ export declare class FeedEntry {
63
60
  Title: string;
64
61
  Type: string;
65
62
  }
66
- export declare class ItemType {
67
- [key: string]: any;
68
- }
@@ -25,7 +25,7 @@ export declare class ApplicationsFlowService {
25
25
  LoadEnterpriseAsCode(): Observable<object>;
26
26
  LoadLicenseData(): Observable<object>;
27
27
  LoadProjectHostingDetails(): Observable<object>;
28
- LoadUserFeed(page: number, pageSize: number, types: string, project: string, applications: string[]): Observable<object>;
28
+ LoadUserFeed(page: number, pageSize: number, project: string, applications: string[]): Observable<object>;
29
29
  SaveEnterpriseAsCode(eac: EnterpriseAsCode): Observable<object>;
30
30
  SetActiveEnterprise(activeEntLookup: string): Observable<object>;
31
31
  SubmitFeedEntry(entry: FeedEntry): Observable<object>;
@@ -44,7 +44,7 @@ export declare class EaCService {
44
44
  EnsureUserEnterprise(): Promise<void>;
45
45
  EnterpriseAsCodeRemovals(eac: EnterpriseAsCode): Promise<Status>;
46
46
  GetActiveEnterprise(): Promise<void>;
47
- LoadUserFeed(page: number, pageSize: number, forCheck?: boolean, filterStr?: string): Promise<void>;
47
+ LoadUserFeed(page: number, pageSize: number, forCheck?: boolean): Promise<void>;
48
48
  GenerateRoutedApplications(applications: {
49
49
  [lookup: string]: EaCApplicationAsCode;
50
50
  }): {
@@ -24,7 +24,7 @@ export declare class ProjectService {
24
24
  HasValidConnection(state: ApplicationsFlowState, forceEnsureUser?: boolean): Promise<EnterpriseAsCode>;
25
25
  ListEnterprises(state: ApplicationsFlowState): Promise<any[]>;
26
26
  LoadEnterpriseAsCode(state: ApplicationsFlowState): Promise<EnterpriseAsCode>;
27
- LoadUserFeed(page: number, pageSize: number, filterStr: string, forCheck: boolean, state: ApplicationsFlowState): Promise<Array<FeedItem>>;
27
+ LoadUserFeed(page: number, pageSize: number, forCheck: boolean, state: ApplicationsFlowState): Promise<Array<FeedItem>>;
28
28
  LoadUserLicenseInfo(state: ApplicationsFlowState): Promise<void>;
29
29
  SetActiveEnterprise(state: ApplicationsFlowState, activeEntLookup: string): Promise<Status>;
30
30
  SaveEnterpriseAsCode(state: ApplicationsFlowState, eac: EnterpriseAsCode): Promise<Status>;
@@ -2,7 +2,6 @@ import { EnterpriseAsCode } from '@semanticjs/common';
2
2
  import { FeedItem, FeedItemAction, UserFeedResponse } from '../models/user-feed.model';
3
3
  export declare class ApplicationsFlowState {
4
4
  ActiveEnterpriseLookup?: string;
5
- Advertisements?: Array<Advertisement>;
6
5
  EaC?: EnterpriseAsCode;
7
6
  Enterprises?: Array<{
8
7
  Name: string;
@@ -11,7 +10,6 @@ export declare class ApplicationsFlowState {
11
10
  Feed?: Array<FeedItem>;
12
11
  FeedActions?: Array<FeedItemAction>;
13
12
  FeedCheck?: UserFeedResponse;
14
- FeedFilters?: any;
15
13
  FeedSourceControlLookups?: Array<string>;
16
14
  GitHub?: GitHubSetupState;
17
15
  HostingDetails?: ProjectHostingDetails;
@@ -24,13 +22,6 @@ export declare class ApplicationsFlowState {
24
22
  UserLicenseInfo?: LicenseAndBillingResponse;
25
23
  constructor();
26
24
  }
27
- export declare class Advertisement {
28
- Actions?: Array<FeedItemAction>;
29
- Description?: string;
30
- Image?: string;
31
- Lead?: string;
32
- Position?: number;
33
- }
34
25
  export declare class GitHubSetupState {
35
26
  BranchOptions?: GitHubBranch[];
36
27
  CreatingRepository?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lowcodeunit/applications-flow-common",
3
- "version": "1.36.221-social-rework",
3
+ "version": "1.36.222-merge",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },
@@ -1,24 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/material/card";
4
- import * as i2 from "@angular/material/button";
5
- import * as i3 from "@angular/material/icon";
6
- import * as i4 from "@angular/flex-layout/flex";
7
- import * as i5 from "@angular/common";
8
- export class AdvertisementCardComponent {
9
- constructor() { }
10
- ngOnInit() { }
11
- ActionClicked(action) {
12
- window.location.href = action;
13
- }
14
- }
15
- AdvertisementCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AdvertisementCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
- AdvertisementCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: AdvertisementCardComponent, selector: "lcu-advertisement-card", inputs: { Advertisement: ["advertisement", "Advertisement"] }, ngImport: i0, template: "<mat-card class=\"ad-card\">\n <div class=\"ad-text header\">\n {{ Advertisement?.Lead }}\n </div>\n\n <mat-card-content fxLayout=\"column\" fxLayoutAlign=\"center center\">\n <img\n class=\"ad-image\"\n [src]=\"Advertisement?.Image\"\n alt=\"image description\"\n />\n <!-- <img class=\"ad-image\" src=\"../../../assets/images/thinky.png\" alt=\"image description\" /> -->\n\n <p class=\"ad-text\">{{ Advertisement?.Description }}</p>\n </mat-card-content>\n\n <mat-card-actions\n *ngFor=\"let action of Advertisement?.Actions\"\n fxLayoutAlign=\"center center\"\n >\n <button\n mat-button\n (click)=\"ActionClicked(action?.Action)\"\n [color]=\"action?.color\"\n >\n <mat-icon *ngIf=\"action?.Icon\">{{ action?.Icon }}</mat-icon>\n {{ action?.Text }}\n </button>\n </mat-card-actions>\n</mat-card>\n", styles: [".ad-card{margin:20px;padding:0}.header{padding:10px}.ad-image{height:50px}.ad-text{text-align:center}mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}\n"], components: [{ type: i1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: AdvertisementCardComponent, decorators: [{
18
- type: Component,
19
- args: [{ selector: 'lcu-advertisement-card', template: "<mat-card class=\"ad-card\">\n <div class=\"ad-text header\">\n {{ Advertisement?.Lead }}\n </div>\n\n <mat-card-content fxLayout=\"column\" fxLayoutAlign=\"center center\">\n <img\n class=\"ad-image\"\n [src]=\"Advertisement?.Image\"\n alt=\"image description\"\n />\n <!-- <img class=\"ad-image\" src=\"../../../assets/images/thinky.png\" alt=\"image description\" /> -->\n\n <p class=\"ad-text\">{{ Advertisement?.Description }}</p>\n </mat-card-content>\n\n <mat-card-actions\n *ngFor=\"let action of Advertisement?.Actions\"\n fxLayoutAlign=\"center center\"\n >\n <button\n mat-button\n (click)=\"ActionClicked(action?.Action)\"\n [color]=\"action?.color\"\n >\n <mat-icon *ngIf=\"action?.Icon\">{{ action?.Icon }}</mat-icon>\n {{ action?.Text }}\n </button>\n </mat-card-actions>\n</mat-card>\n", styles: [".ad-card{margin:20px;padding:0}.header{padding:10px}.ad-image{height:50px}.ad-text{text-align:center}mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}\n"] }]
20
- }], ctorParameters: function () { return []; }, propDecorators: { Advertisement: [{
21
- type: Input,
22
- args: ['advertisement']
23
- }] } });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2ZXJ0aXNlbWVudC1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi9zcmMvbGliL2VsZW1lbnRzL2FkdmVydGlzZW1lbnQtY2FyZC9hZHZlcnRpc2VtZW50LWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvZWxlbWVudHMvYWR2ZXJ0aXNlbWVudC1jYXJkL2FkdmVydGlzZW1lbnQtY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVF6RCxNQUFNLE9BQU8sMEJBQTBCO0lBSW5DLGdCQUFlLENBQUM7SUFFaEIsUUFBUSxLQUFVLENBQUM7SUFFWixhQUFhLENBQUMsTUFBYztRQUMvQixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7SUFDbEMsQ0FBQzs7dUhBVlEsMEJBQTBCOzJHQUExQiwwQkFBMEIsNkhDUnZDLHM5QkE4QkE7MkZEdEJhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDSSx3QkFBd0I7MEVBTTNCLGFBQWE7c0JBRG5CLEtBQUs7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2ZXJ0aXNlbWVudCB9IGZyb20gJy4uLy4uL3N0YXRlL2FwcGxpY2F0aW9ucy1mbG93LnN0YXRlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsY3UtYWR2ZXJ0aXNlbWVudC1jYXJkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWR2ZXJ0aXNlbWVudC1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hZHZlcnRpc2VtZW50LWNhcmQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2ZXJ0aXNlbWVudENhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgnYWR2ZXJ0aXNlbWVudCcpXG4gICAgcHVibGljIEFkdmVydGlzZW1lbnQ6IEFkdmVydGlzZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgQWN0aW9uQ2xpY2tlZChhY3Rpb246IHN0cmluZykge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGFjdGlvbjtcbiAgICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJhZC1jYXJkXCI+XG4gICAgPGRpdiBjbGFzcz1cImFkLXRleHQgaGVhZGVyXCI+XG4gICAgICAgIHt7IEFkdmVydGlzZW1lbnQ/LkxlYWQgfX1cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtY2FyZC1jb250ZW50IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3M9XCJhZC1pbWFnZVwiXG4gICAgICAgICAgICBbc3JjXT1cIkFkdmVydGlzZW1lbnQ/LkltYWdlXCJcbiAgICAgICAgICAgIGFsdD1cImltYWdlIGRlc2NyaXB0aW9uXCJcbiAgICAgICAgLz5cbiAgICAgICAgPCEtLSA8aW1nIGNsYXNzPVwiYWQtaW1hZ2VcIiBzcmM9XCIuLi8uLi8uLi9hc3NldHMvaW1hZ2VzL3RoaW5reS5wbmdcIiBhbHQ9XCJpbWFnZSBkZXNjcmlwdGlvblwiIC8+IC0tPlxuXG4gICAgICAgIDxwIGNsYXNzPVwiYWQtdGV4dFwiPnt7IEFkdmVydGlzZW1lbnQ/LkRlc2NyaXB0aW9uIH19PC9wPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cblxuICAgIDxtYXQtY2FyZC1hY3Rpb25zXG4gICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgQWR2ZXJ0aXNlbWVudD8uQWN0aW9uc1wiXG4gICAgICAgIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCJcbiAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJBY3Rpb25DbGlja2VkKGFjdGlvbj8uQWN0aW9uKVwiXG4gICAgICAgICAgICBbY29sb3JdPVwiYWN0aW9uPy5jb2xvclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFjdGlvbj8uSWNvblwiPnt7IGFjdGlvbj8uSWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICB7eyBhY3Rpb24/LlRleHQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuPC9tYXQtY2FyZD5cbiJdfQ==
@@ -1,151 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { FormArray, FormControl } from '@angular/forms';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../services/eac.service";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "@angular/material/button";
7
- import * as i4 from "@angular/material/icon";
8
- import * as i5 from "@angular/material/menu";
9
- import * as i6 from "@angular/flex-layout/flex";
10
- import * as i7 from "@angular/common";
11
- export class FeedFilterComponent {
12
- constructor(eacSvc, formBuilder) {
13
- this.eacSvc = eacSvc;
14
- this.formBuilder = formBuilder;
15
- this.FilterFormGroup = this.formBuilder.group({
16
- filters: new FormArray([]),
17
- });
18
- this.Filters = new Array();
19
- }
20
- get filtersFormArray() {
21
- return this.FilterFormGroup.controls.filters;
22
- }
23
- ngOnInit() {
24
- if (this.FilterTypes?.length > 0) {
25
- this.filterString = this.setFilterString(this.FilterTypes);
26
- }
27
- if (this.filterString?.length > 0) {
28
- this.Filters = this.buildFilterObject(this.filterString);
29
- }
30
- if (this.Filters?.length > 0) {
31
- this.addCheckboxes();
32
- }
33
- }
34
- ngOnChanges() {
35
- if (this.FilterTypes?.length > this.Filters?.length) {
36
- this.filterString = this.setFilterString(this.FilterTypes);
37
- this.Filters = this.buildFilterObject(this.filterString);
38
- this.addCheckboxes();
39
- }
40
- // if (this.filterString?.length > 0) {
41
- // }
42
- // if (this.Filters?.length > 0) {
43
- // }
44
- }
45
- addCheckboxes() {
46
- this.filtersFormArray.clear();
47
- this.Filters.forEach((filter) => this.filtersFormArray.push(new FormControl(filter.Value)));
48
- }
49
- buildFilterObject(fstring) {
50
- let filterList = fstring.split(';');
51
- let filterObjList = new Array();
52
- filterList.forEach((itm) => {
53
- if (itm.length > 0) {
54
- filterObjList.push(JSON.parse(itm));
55
- }
56
- });
57
- return filterObjList;
58
- }
59
- setFilterString(fTypes) {
60
- let fString = '';
61
- let filters = fTypes;
62
- if (localStorage.getItem('activeFilter')) {
63
- let activeF = localStorage.getItem('activeFilter').split(',');
64
- activeF.forEach((f) => {
65
- if (f.includes('-')) {
66
- let i = activeF.indexOf(f);
67
- f = f.replace('-', ' ');
68
- activeF[i] = f;
69
- }
70
- });
71
- filters.forEach((filter) => {
72
- if (activeF.includes(filter.toLowerCase())) {
73
- fString += '{ "Name":"' + filter + '","Value":true };';
74
- }
75
- else if (activeF.includes(filter.toLowerCase()) &&
76
- filters.indexOf(filter) === filters.length - 1) {
77
- fString += '{ "Name":"' + filter + '","Value":true }';
78
- }
79
- else if (filters.indexOf(filter) === filters.length - 1) {
80
- fString += '{ "Name":"' + filter + '","Value":false }';
81
- }
82
- else {
83
- fString += '{ "Name":"' + filter + '","Value":false };';
84
- }
85
- });
86
- }
87
- else {
88
- filters.forEach((filter) => {
89
- if (filter.toLowerCase() === 'all') {
90
- fString += '{ "Name":"' + filter + '","Value":true };';
91
- }
92
- else if (filters.indexOf(filter) === filters.length - 1) {
93
- fString += '{ "Name":"' + filter + '","Value":true }';
94
- }
95
- else {
96
- fString += '{ "Name":"' + filter + '","Value":true };';
97
- }
98
- });
99
- }
100
- return fString;
101
- }
102
- ToggleFilter(name) {
103
- let filt = this.Filters.find((filter) => filter.Name === name);
104
- let allFilt = this.Filters.find((filter) => filter.Name.toLowerCase() === 'all');
105
- if (name.toLowerCase() === 'all') {
106
- allFilt.Value = !allFilt.Value;
107
- this.Filters.forEach((filter) => {
108
- if (filter.Name.toLowerCase() !== 'all') {
109
- filter.Value = allFilt.Value;
110
- }
111
- });
112
- }
113
- else if (filt.Name === name) {
114
- filt.Value = !filt.Value;
115
- if (allFilt.Value === true) {
116
- allFilt.Value = false;
117
- }
118
- }
119
- this.addCheckboxes();
120
- }
121
- Apply() {
122
- let types = '';
123
- this.Filters.forEach((fil) => {
124
- if (fil.Value === true) {
125
- let temp = fil.Name;
126
- if (temp.includes(' ')) {
127
- temp = temp.replace(' ', '-');
128
- }
129
- types += temp.toLowerCase() + ',';
130
- }
131
- });
132
- if (types.charAt(types.length - 1) === ',') {
133
- types = types.substring(0, types.length - 1);
134
- }
135
- this.StoreActiveFilter(types);
136
- this.eacSvc.LoadUserFeed(1, 25, false, types);
137
- }
138
- StoreActiveFilter(types) {
139
- localStorage.setItem('activeFilter', types);
140
- }
141
- }
142
- FeedFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedFilterComponent, deps: [{ token: i1.EaCService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
143
- FeedFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: FeedFilterComponent, selector: "lcu-feed-filter", inputs: { FilterTypes: ["filter-types", "FilterTypes"] }, usesOnChanges: true, ngImport: i0, template: "<div class=\"filter-area\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <div class=\"seperator\"></div>\n <div class=\"filter-text\">Filter feed by:</div>\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n aria-label=\"View Filters\"\n [disabled]=\"Filters?.length === 0\"\n #trigger=\"matMenuTrigger\"\n (menuOpened)=\"MenuOpen = trigger.menuOpen\"\n (menuClosed)=\"MenuOpen = trigger.menuOpen\"\n >\n <mat-icon *ngIf=\"!MenuOpen\">expand_more</mat-icon>\n <mat-icon *ngIf=\"MenuOpen\">expand_less</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\n <form\n [formGroup]=\"FilterFormGroup\"\n fxLayout=\"column\"\n (ngSubmit)=\"Apply()\"\n >\n <label\n class=\"filter-label\"\n formArrayName=\"filters\"\n *ngFor=\"let filter of filtersFormArray.controls; let i = index\"\n (click)=\"$event.stopPropagation()\"\n >\n <input\n type=\"checkbox\"\n [formControlName]=\"i\"\n (click)=\"\n $event.stopPropagation(); ToggleFilter(Filters[i].Name)\n \"\n />\n {{ Filters[i].Name }}\n\n <span class=\"checkmark\"></span>\n </label>\n <button class=\"filter-button\">Apply</button>\n </form>\n </mat-menu>\n</div>\n", styles: [".filter-area{margin:0 20px}.seperator{width:83%;margin:5px;border-top:1px solid black}.filter-text{font-size:8px}.filter-label{margin:0 10px;cursor:pointer}.filter-button{margin:10px}\n"], components: [{ type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }], directives: [{ type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i6.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: FeedFilterComponent, decorators: [{
145
- type: Component,
146
- args: [{ selector: 'lcu-feed-filter', template: "<div class=\"filter-area\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <div class=\"seperator\"></div>\n <div class=\"filter-text\">Filter feed by:</div>\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n aria-label=\"View Filters\"\n [disabled]=\"Filters?.length === 0\"\n #trigger=\"matMenuTrigger\"\n (menuOpened)=\"MenuOpen = trigger.menuOpen\"\n (menuClosed)=\"MenuOpen = trigger.menuOpen\"\n >\n <mat-icon *ngIf=\"!MenuOpen\">expand_more</mat-icon>\n <mat-icon *ngIf=\"MenuOpen\">expand_less</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\" xPosition=\"before\">\n <form\n [formGroup]=\"FilterFormGroup\"\n fxLayout=\"column\"\n (ngSubmit)=\"Apply()\"\n >\n <label\n class=\"filter-label\"\n formArrayName=\"filters\"\n *ngFor=\"let filter of filtersFormArray.controls; let i = index\"\n (click)=\"$event.stopPropagation()\"\n >\n <input\n type=\"checkbox\"\n [formControlName]=\"i\"\n (click)=\"\n $event.stopPropagation(); ToggleFilter(Filters[i].Name)\n \"\n />\n {{ Filters[i].Name }}\n\n <span class=\"checkmark\"></span>\n </label>\n <button class=\"filter-button\">Apply</button>\n </form>\n </mat-menu>\n</div>\n", styles: [".filter-area{margin:0 20px}.seperator{width:83%;margin:5px;border-top:1px solid black}.filter-text{font-size:8px}.filter-label{margin:0 10px;cursor:pointer}.filter-button{margin:10px}\n"] }]
147
- }], ctorParameters: function () { return [{ type: i1.EaCService }, { type: i2.FormBuilder }]; }, propDecorators: { FilterTypes: [{
148
- type: Input,
149
- args: ['filter-types']
150
- }] } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvZWxlbWVudHMvZmVlZC1maWx0ZXIvZmVlZC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvZWxlbWVudHMvZmVlZC1maWx0ZXIvZmVlZC1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBZSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBUWhGLE1BQU0sT0FBTyxtQkFBbUI7SUFnQjVCLFlBQ2MsTUFBa0IsRUFDbEIsV0FBd0I7UUFEeEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUVsQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzFDLE9BQU8sRUFBRSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBTyxDQUFDO0lBQ3BDLENBQUM7SUFiRCxJQUFJLGdCQUFnQjtRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLE9BQW9CLENBQUM7SUFDOUQsQ0FBQztJQWFNLFFBQVE7UUFDWCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzlEO1FBRUQsSUFBSSxJQUFJLENB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SUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQzthQUNyQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1lBQ3hDLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxLQUFhO1FBQ2xDLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7O2dIQW5LUSxtQkFBbUI7b0dBQW5CLG1CQUFtQixzSUNUaEMsK2dEQTBDQTsyRkRqQ2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNJLGlCQUFpQjsySEFNcEIsV0FBVztzQkFEakIsS0FBSzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRWFDU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VhYy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsY3UtZmVlZC1maWx0ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mZWVkLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmVlZC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmVlZEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCdmaWx0ZXItdHlwZXMnKVxuICAgIHB1YmxpYyBGaWx0ZXJUeXBlczogQXJyYXk8c3RyaW5nPjtcblxuICAgIHB1YmxpYyBGaWx0ZXJGb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICAgIHB1YmxpYyBGaWx0ZXJzOiBBcnJheTxhbnk+O1xuXG4gICAgcHVibGljIE1lbnVPcGVuOiBib29sZWFuO1xuXG4gICAgcHJvdGVjdGVkIGZpbHRlclN0cmluZzogc3RyaW5nO1xuXG4gICAgZ2V0IGZpbHRlcnNGb3JtQXJyYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkZpbHRlckZvcm1Hcm91cC5jb250cm9scy5maWx0ZXJzIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGVhY1N2YzogRWFDU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlclxuICAgICkge1xuICAgICAgICB0aGlzLkZpbHRlckZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgZmlsdGVyczogbmV3IEZvcm1BcnJheShbXSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuRmlsdGVycyA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5GaWx0ZXJUeXBlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJTdHJpbmcgPSB0aGlzLnNldEZpbHRlclN0cmluZyh0aGlzLkZpbHRlclR5cGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclN0cmluZz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5GaWx0ZXJzID0gdGhpcy5idWlsZEZpbHRlck9iamVjdCh0aGlzLmZpbHRlclN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5GaWx0ZXJzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFkZENoZWNrYm94ZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuRmlsdGVyVHlwZXM/Lmxlbmd0aCA+IHRoaXMuRmlsdGVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclN0cmluZyA9IHRoaXMuc2V0RmlsdGVyU3RyaW5nKHRoaXMuRmlsdGVyVHlwZXMpO1xuICAgICAgICAgICAgdGhpcy5GaWx0ZXJzID0gdGhpcy5idWlsZEZpbHRlck9iamVjdCh0aGlzLmZpbHRlclN0cmluZyk7XG4gICAgICAgICAgICB0aGlzLmFkZENoZWNrYm94ZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmICh0aGlzLmZpbHRlclN0cmluZz8ubGVuZ3RoID4gMCkge1xuXG4gICAgICAgIC8vIH1cblxuICAgICAgICAvLyBpZiAodGhpcy5GaWx0ZXJzPy5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGRDaGVja2JveGVzKCkge1xuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtQXJyYXkuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5GaWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT5cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyc0Zvcm1BcnJheS5wdXNoKG5ldyBGb3JtQ29udHJvbChmaWx0ZXIuVmFsdWUpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBidWlsZEZpbHRlck9iamVjdChmc3RyaW5nOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgbGV0IGZpbHRlckxpc3QgPSBmc3RyaW5nLnNwbGl0KCc7Jyk7XG5cbiAgICAgICAgbGV0IGZpbHRlck9iakxpc3QgPSBuZXcgQXJyYXk8YW55PigpO1xuXG4gICAgICAgIGZpbHRlckxpc3QuZm9yRWFjaCgoaXRtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJPYmpMaXN0LnB1c2goSlNPTi5wYXJzZShpdG0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlck9iakxpc3Q7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldEZpbHRlclN0cmluZyhmVHlwZXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xuICAgICAgICBsZXQgZlN0cmluZyA9ICcnO1xuICAgICAgICBsZXQgZmlsdGVycyA9IGZUeXBlcztcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVGaWx0ZXInKSkge1xuICAgICAgICAgICAgbGV0IGFjdGl2ZUYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYWN0aXZlRmlsdGVyJykuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIGFjdGl2ZUYuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmLmluY2x1ZGVzKCctJykpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBhY3RpdmVGLmluZGV4T2YoZik7XG4gICAgICAgICAgICAgICAgICAgIGYgPSBmLnJlcGxhY2UoJy0nLCAnICcpO1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVGW2ldID0gZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZmlsdGVycy5mb3JFYWNoKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlRi5pbmNsdWRlcyhmaWx0ZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZlN0cmluZyArPSAneyBcIk5hbWVcIjpcIicgKyBmaWx0ZXIgKyAnXCIsXCJWYWx1ZVwiOnRydWUgfTsnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUYuaW5jbHVkZXMoZmlsdGVyLnRvTG93ZXJDYXNlKCkpICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMuaW5kZXhPZihmaWx0ZXIpID09PSBmaWx0ZXJzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZlN0cmluZyArPSAneyBcIk5hbWVcIjpcIicgKyBmaWx0ZXIgKyAnXCIsXCJWYWx1ZVwiOnRydWUgfSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJzLmluZGV4T2YoZmlsdGVyKSA9PT0gZmlsdGVycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGZTdHJpbmcgKz0gJ3sgXCJOYW1lXCI6XCInICsgZmlsdGVyICsgJ1wiLFwiVmFsdWVcIjpmYWxzZSB9JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmU3RyaW5nICs9ICd7IFwiTmFtZVwiOlwiJyArIGZpbHRlciArICdcIixcIlZhbHVlXCI6ZmFsc2UgfTsnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsdGVycy5mb3JFYWNoKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnRvTG93ZXJDYXNlKCkgPT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZTdHJpbmcgKz0gJ3sgXCJOYW1lXCI6XCInICsgZmlsdGVyICsgJ1wiLFwiVmFsdWVcIjp0cnVlIH07JztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlcnMuaW5kZXhPZihmaWx0ZXIpID09PSBmaWx0ZXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZlN0cmluZyArPSAneyBcIk5hbWVcIjpcIicgKyBmaWx0ZXIgKyAnXCIsXCJWYWx1ZVwiOnRydWUgfSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZlN0cmluZyArPSAneyBcIk5hbWVcIjpcIicgKyBmaWx0ZXIgKyAnXCIsXCJWYWx1ZVwiOnRydWUgfTsnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmU3RyaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBUb2dnbGVGaWx0ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBmaWx0ID0gdGhpcy5GaWx0ZXJzLmZpbmQoKGZpbHRlcikgPT4gZmlsdGVyLk5hbWUgPT09IG5hbWUpO1xuICAgICAgICBsZXQgYWxsRmlsdCA9IHRoaXMuRmlsdGVycy5maW5kKFxuICAgICAgICAgICAgKGZpbHRlcikgPT4gZmlsdGVyLk5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2FsbCdcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYWxsJykge1xuICAgICAgICAgICAgYWxsRmlsdC5WYWx1ZSA9ICFhbGxGaWx0LlZhbHVlO1xuICAgICAgICAgICAgdGhpcy5GaWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnYWxsJykge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuVmFsdWUgPSBhbGxGaWx0LlZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHQuTmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgZmlsdC5WYWx1ZSA9ICFmaWx0LlZhbHVlO1xuICAgICAgICAgICAgaWYgKGFsbEZpbHQuVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBhbGxGaWx0LlZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZENoZWNrYm94ZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgQXBwbHkoKSB7XG4gICAgICAgIGxldCB0eXBlcyA9ICcnO1xuICAgICAgICB0aGlzLkZpbHRlcnMuZm9yRWFjaCgoZmlsKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsLlZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBmaWwuTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAodGVtcC5pbmNsdWRlcygnICcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wLnJlcGxhY2UoJyAnLCAnLScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0eXBlcyArPSB0ZW1wLnRvTG93ZXJDYXNlKCkgKyAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZXMuY2hhckF0KHR5cGVzLmxlbmd0aCAtIDEpID09PSAnLCcpIHtcbiAgICAgICAgICAgIHR5cGVzID0gdHlwZXMuc3Vic3RyaW5nKDAsIHR5cGVzLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuU3RvcmVBY3RpdmVGaWx0ZXIodHlwZXMpO1xuXG4gICAgICAgIHRoaXMuZWFjU3ZjLkxvYWRVc2VyRmVlZCgxLCAyNSwgZmFsc2UsIHR5cGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgU3RvcmVBY3RpdmVGaWx0ZXIodHlwZXM6IHN0cmluZykge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYWN0aXZlRmlsdGVyJywgdHlwZXMpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmaWx0ZXItYXJlYVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2VwZXJhdG9yXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci10ZXh0XCI+RmlsdGVyIGZlZWQgYnk6PC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiVmlldyBGaWx0ZXJzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIkZpbHRlcnM/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICN0cmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIlxuICAgICAgICAobWVudU9wZW5lZCk9XCJNZW51T3BlbiA9IHRyaWdnZXIubWVudU9wZW5cIlxuICAgICAgICAobWVudUNsb3NlZCk9XCJNZW51T3BlbiA9IHRyaWdnZXIubWVudU9wZW5cIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIU1lbnVPcGVuXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJNZW51T3BlblwiPmV4cGFuZF9sZXNzPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgICAgIDxmb3JtXG4gICAgICAgICAgICBbZm9ybUdyb3VwXT1cIkZpbHRlckZvcm1Hcm91cFwiXG4gICAgICAgICAgICBmeExheW91dD1cImNvbHVtblwiXG4gICAgICAgICAgICAobmdTdWJtaXQpPVwiQXBwbHkoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWxhYmVsXCJcbiAgICAgICAgICAgICAgICBmb3JtQXJyYXlOYW1lPVwiZmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJzRm9ybUFycmF5LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBUb2dnbGVGaWx0ZXIoRmlsdGVyc1tpXS5OYW1lKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge3sgRmlsdGVyc1tpXS5OYW1lIH19XG5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrbWFya1wiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsdGVyLWJ1dHRvblwiPkFwcGx5PC9idXR0b24+XG4gICAgICAgIDwvZm9ybT5cbiAgICA8L21hdC1tZW51PlxuPC9kaXY+XG4iXX0=