@hestia-earth/ui-components 0.23.23 → 0.24.0-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/common/node-utils.d.ts +22 -3
  2. package/cycles/cycles-completeness/cycles-completeness.component.d.ts +90 -24
  3. package/cycles/cycles-functional-unit-measure/cycles-functional-unit-measure.component.d.ts +4 -2
  4. package/cycles/cycles-nodes/cycles-nodes.component.d.ts +193 -0
  5. package/cycles/cycles-nodes-timeline/cycles-nodes-timeline.component.d.ts +20 -0
  6. package/cycles/cycles.module.d.ts +12 -19
  7. package/cycles/index.d.ts +2 -9
  8. package/engine/engine.service.d.ts +2 -1
  9. package/esm2022/common/node-utils.mjs +19 -1
  10. package/esm2022/cycles/cycles-completeness/cycles-completeness.component.mjs +68 -50
  11. package/esm2022/cycles/cycles-functional-unit-measure/cycles-functional-unit-measure.component.mjs +9 -4
  12. package/esm2022/cycles/cycles-nodes/cycles-nodes.component.mjs +211 -0
  13. package/esm2022/cycles/cycles-nodes-timeline/cycles-nodes-timeline.component.mjs +50 -0
  14. package/esm2022/cycles/cycles.module.mjs +11 -39
  15. package/esm2022/cycles/index.mjs +3 -10
  16. package/esm2022/engine/engine.service.mjs +9 -10
  17. package/esm2022/files/files-form/files-form.component.mjs +1 -1
  18. package/esm2022/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.mjs +99 -87
  19. package/esm2022/impact-assessments/impact-assessments-products/impact-assessments-products.component.mjs +85 -111
  20. package/esm2022/impact-assessments/impact-assessments.module.mjs +1 -5
  21. package/esm2022/impact-assessments/index.mjs +1 -2
  22. package/esm2022/node/index.mjs +2 -1
  23. package/esm2022/node/node-logs-models/node-logs-models.component.mjs +172 -118
  24. package/esm2022/node/node-logs-models/node-logs-models.model.mjs +5 -8
  25. package/esm2022/node/node-store.service.mjs +108 -0
  26. package/esm2022/search/search.service.mjs +6 -4
  27. package/esm2022/sites/index.mjs +1 -2
  28. package/esm2022/sites/sites-maps/sites-maps.component.mjs +36 -39
  29. package/esm2022/sites/sites-measurements/sites-measurements.component.mjs +71 -72
  30. package/esm2022/sites/sites.module.mjs +3 -4
  31. package/fesm2022/hestia-earth-ui-components.mjs +942 -1222
  32. package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
  33. package/impact-assessments/impact-assessments-indicators-chart/impact-assessments-indicators-chart.component.d.ts +23 -15
  34. package/impact-assessments/impact-assessments-products/impact-assessments-products.component.d.ts +91 -47
  35. package/impact-assessments/impact-assessments.module.d.ts +8 -9
  36. package/impact-assessments/index.d.ts +0 -1
  37. package/node/index.d.ts +1 -0
  38. package/node/node-logs-models/node-logs-models.component.d.ts +78 -57
  39. package/node/node-logs-models/node-logs-models.model.d.ts +6 -9
  40. package/node/node-store.service.d.ts +38 -0
  41. package/package.json +1 -1
  42. package/search/search.service.d.ts +1 -0
  43. package/sites/index.d.ts +0 -1
  44. package/sites/sites-maps/sites-maps.component.d.ts +18 -11
  45. package/sites/sites-measurements/sites-measurements.component.d.ts +79 -25
  46. package/sites/sites.module.d.ts +6 -7
  47. package/cycles/cycles-activity/cycles-activity.component.d.ts +0 -44
  48. package/cycles/cycles-activity-logs/cycles-activity-logs.component.d.ts +0 -69
  49. package/cycles/cycles-animals/cycles-animals.component.d.ts +0 -27
  50. package/cycles/cycles-completeness-logs/cycles-completeness-logs.component.d.ts +0 -62
  51. package/cycles/cycles-emissions/cycles-emissions.component.d.ts +0 -51
  52. package/cycles/cycles-emissions-logs/cycles-emissions-logs.component.d.ts +0 -70
  53. package/cycles/cycles-practices/cycles-practices.component.d.ts +0 -44
  54. package/cycles/cycles-practices-logs/cycles-practices-logs.component.d.ts +0 -70
  55. package/cycles/cycles-practices-timeline/cycles-practices-timeline.component.d.ts +0 -18
  56. package/esm2022/cycles/cycles-activity/cycles-activity.component.mjs +0 -118
  57. package/esm2022/cycles/cycles-activity-logs/cycles-activity-logs.component.mjs +0 -44
  58. package/esm2022/cycles/cycles-animals/cycles-animals.component.mjs +0 -79
  59. package/esm2022/cycles/cycles-completeness-logs/cycles-completeness-logs.component.mjs +0 -35
  60. package/esm2022/cycles/cycles-emissions/cycles-emissions.component.mjs +0 -127
  61. package/esm2022/cycles/cycles-emissions-logs/cycles-emissions-logs.component.mjs +0 -58
  62. package/esm2022/cycles/cycles-practices/cycles-practices.component.mjs +0 -116
  63. package/esm2022/cycles/cycles-practices-logs/cycles-practices-logs.component.mjs +0 -58
  64. package/esm2022/cycles/cycles-practices-timeline/cycles-practices-timeline.component.mjs +0 -42
  65. package/esm2022/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.mjs +0 -64
  66. package/esm2022/sites/sites-measurements-logs/sites-measurements-logs.component.mjs +0 -53
  67. package/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.d.ts +0 -64
  68. package/sites/sites-measurements-logs/sites-measurements-logs.component.d.ts +0 -66
@@ -1,4 +1,24 @@
1
- import { Term, ICycleJSONLD, ISiteJSONLD, IImpactAssessmentJSONLD, EmissionMethodTier, ITermJSONLD, Completeness, Infrastructure, Emission, Measurement, Practice, Product, Input, Property, Indicator } from '@hestia-earth/schema';
1
+ import { Term, ICycleJSONLD, ISiteJSONLD, IImpactAssessmentJSONLD, EmissionMethodTier, ITermJSONLD, Completeness, Emission, Measurement, Practice, Product, Input, Property, Indicator, Animal, Management, Transformation } from '@hestia-earth/schema';
2
+ export type blankNode = Animal | Emission | Input | Product | Property | Practice | Indicator | Measurement | Management;
3
+ export type blankNodesKey = 'animals' | 'emissions' | 'emissionsResourceUse' | 'endpoints' | 'impacts' | 'inputs' | 'management' | 'measurements' | 'products' | 'practices';
4
+ export declare enum BlankNodesKey {
5
+ animals = "animals",
6
+ emissions = "emissions",
7
+ emissionsResourceUse = "emissionsResourceUse",
8
+ endpoints = "endpoints",
9
+ impacts = "impacts",
10
+ inputs = "inputs",
11
+ management = "management",
12
+ measurements = "measurements",
13
+ products = "products",
14
+ practices = "practices"
15
+ }
16
+ export declare const filterBlankNode: (filterTerm: string) => ({ term }: blankNode) => boolean;
17
+ export type nonBlankNode = Completeness;
18
+ export type nonBlankNodesKey = 'completeness';
19
+ export declare enum NonBlankNodesKey {
20
+ completeness = "completeness"
21
+ }
2
22
  export declare const ignoreKeys: string[];
3
23
  export declare const isValidKey: (key: string) => boolean;
4
24
  export declare const isMethodModelAllowed: (filterMethod?: Term) => (node: Indicator) => boolean;
@@ -9,7 +29,6 @@ export declare enum NodeKeyState {
9
29
  deleted = "deleted",
10
30
  unchanged = "unchanged"
11
31
  }
12
- export type blankNode = Completeness | Infrastructure | Input | Emission | Measurement | Practice | Product | Property;
13
32
  export declare const isState: (node: blankNode, key: string, state: NodeKeyState) => any;
14
33
  export interface IGroupedNode<T> {
15
34
  node: T;
@@ -58,4 +77,4 @@ export declare const grouppedKeys: <T>(values: {
58
77
  }[];
59
78
  export declare const methodTierOrder: (methodTier: EmissionMethodTier) => number;
60
79
  export declare const grouppedValueKeys: string[];
61
- export declare const groupNodesByTerm: <T extends ISiteJSONLD | ICycleJSONLD | IImpactAssessmentJSONLD, R>(nodes: T[], key: 'endpoints' | 'impacts' | 'emissionsResourceUse' | 'inputs' | 'products' | 'practices' | 'emissions' | 'measurements' | 'animals', originalValues?: T[], includeNode?: (_node: any) => boolean) => IGroupedNodes<R>;
80
+ export declare const groupNodesByTerm: <T extends ISiteJSONLD | Transformation | Animal | ICycleJSONLD | IImpactAssessmentJSONLD, R>(nodes: T[], key: blankNodesKey, originalValues?: T[], includeNode?: (_node: any) => boolean) => IGroupedNodes<R>;
@@ -1,35 +1,101 @@
1
- import { OnChanges, SimpleChanges } from '@angular/core';
2
1
  import { DataState } from '@hestia-earth/api';
3
- import { ICycleJSONLD } from '@hestia-earth/schema';
2
+ import { ICycleJSONLD, NodeType } from '@hestia-earth/schema';
3
+ import { HeNodeStoreService } from '../../node/node-store.service';
4
+ import { NonBlankNodesKey } from '../../common/node-utils';
4
5
  import * as i0 from "@angular/core";
5
6
  declare enum View {
6
- table = "table",
7
- logs = "logs"
7
+ table = "Table view",
8
+ logs = "Recalculations logs"
8
9
  }
9
- export declare class CyclesCompletenessComponent implements OnChanges {
10
- originalValues: ICycleJSONLD[];
11
- cycles: ICycleJSONLD[];
12
- dataState?: DataState;
13
- baseUrl: string;
14
- defaultLabel: (node?: any) => any;
15
- keyToLabel: (key: string) => string;
16
- getCompleteness: (cycle: any) => any;
17
- headerKeys: string[];
18
- showDownload: boolean;
19
- View: typeof View;
20
- selectedView: View;
21
- selectedIndex: number;
22
- ngOnChanges(changes: SimpleChanges): void;
23
- trackById(_index: number, item: ICycleJSONLD): string;
24
- get completenessKeys(): string[];
25
- get isOriginal(): boolean;
26
- private updateSelectedIndex;
27
- selectIndex({ target: { value } }: {
10
+ export declare class CyclesCompletenessComponent {
11
+ private nodeStoreService;
12
+ protected _dataState: import("@angular/core").WritableSignal<DataState>;
13
+ set dataState(value: DataState);
14
+ protected baseUrl: string;
15
+ protected defaultLabel: (node?: any) => any;
16
+ protected keyToLabel: (key: string) => string;
17
+ protected getCompleteness: (cycle: any) => any;
18
+ protected headerKeys: string[];
19
+ protected showDownload: boolean;
20
+ protected nodeKey: NonBlankNodesKey;
21
+ protected View: typeof View;
22
+ protected viewIcon: {
23
+ "Table view": string;
24
+ "Recalculations logs": string;
25
+ };
26
+ private showView;
27
+ protected views: import("@angular/core").Signal<View[]>;
28
+ protected selectedView: import("@angular/core").WritableSignal<View>;
29
+ private originalCycles;
30
+ private _allCycles;
31
+ protected cycles: import("@angular/core").Signal<ICycleJSONLD[]>;
32
+ private selectedIndex;
33
+ private ogirinalSelectedCycle;
34
+ private selectedCycle;
35
+ protected selectedLogsKey: import("@angular/core").Signal<any>;
36
+ protected selectedOriginalValues: import("@angular/core").Signal<any>;
37
+ protected selectedRecalculatedValues: import("@angular/core").Signal<any>;
38
+ protected selectedNode: import("@angular/core").Signal<{
39
+ '@type': NodeType;
40
+ type: NodeType;
41
+ dataState: DataState;
42
+ description?: string;
43
+ treatment?: string;
44
+ commercialPracticeTreatment?: boolean;
45
+ endDate?: string;
46
+ startDate?: string;
47
+ startDateDefinition?: import("@hestia-earth/schema").CycleStartDateDefinition;
48
+ cycleDuration?: number;
49
+ site?: import("@hestia-earth/schema").ISiteJSONLD;
50
+ otherSites?: import("@hestia-earth/schema").ISiteJSONLD[];
51
+ siteDuration?: number;
52
+ otherSitesDuration?: number[];
53
+ functionalUnit?: import("@hestia-earth/schema").CycleFunctionalUnit;
54
+ functionalUnitDetails?: string;
55
+ numberOfCycles?: number;
56
+ numberOfReplications?: number;
57
+ sampleWeight?: number;
58
+ harvestedArea?: number;
59
+ defaultMethodClassification?: import("@hestia-earth/schema").CycleDefaultMethodClassification;
60
+ defaultMethodClassificationDescription?: string;
61
+ defaultSource?: import("@hestia-earth/schema").ISourceJSONLD;
62
+ completeness?: import("@hestia-earth/schema").Completeness;
63
+ practices?: import("@hestia-earth/schema").Practice[];
64
+ animals?: import("@hestia-earth/schema").Animal[];
65
+ inputs?: import("@hestia-earth/schema").Input[];
66
+ products?: import("@hestia-earth/schema").Product[];
67
+ transformations?: import("@hestia-earth/schema").Transformation[];
68
+ emissions?: import("@hestia-earth/schema").Emission[];
69
+ dataPrivate?: boolean;
70
+ originalId?: string;
71
+ schemaVersion?: string;
72
+ added?: string[];
73
+ addedVersion?: string[];
74
+ updated?: string[];
75
+ updatedVersion?: string[];
76
+ aggregated?: boolean;
77
+ aggregatedVersion?: string;
78
+ aggregatedQualityScore?: number;
79
+ aggregatedQualityScoreMax?: number;
80
+ aggregatedCycles?: ICycleJSONLD[];
81
+ aggregatedSources?: import("@hestia-earth/schema").ISourceJSONLD[];
82
+ createdAt?: Date;
83
+ updatedAt?: Date;
84
+ '@context': string | (string | import("@hestia-earth/schema").IContext)[];
85
+ '@id': string;
86
+ name: string;
87
+ }>;
88
+ protected hasData: import("@angular/core").Signal<number>;
89
+ protected isOriginal: import("@angular/core").Signal<boolean>;
90
+ protected completenessKeys: import("@angular/core").Signal<string[]>;
91
+ constructor(nodeStoreService: HeNodeStoreService);
92
+ protected trackById(_index: number, item: ICycleJSONLD): string;
93
+ protected selectIndex({ target: { value } }: {
28
94
  target: {
29
95
  value: any;
30
96
  };
31
97
  }): void;
32
98
  static ɵfac: i0.ɵɵFactoryDeclaration<CyclesCompletenessComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<CyclesCompletenessComponent, "he-cycles-completeness", never, { "originalValues": { "alias": "originalValues"; "required": false; }; "cycles": { "alias": "cycles"; "required": false; }; "dataState": { "alias": "dataState"; "required": false; }; }, {}, never, never, false, never>;
99
+ static ɵcmp: i0.ɵɵComponentDeclaration<CyclesCompletenessComponent, "he-cycles-completeness", never, { "dataState": { "alias": "dataState"; "required": false; }; }, {}, never, never, false, never>;
34
100
  }
35
101
  export {};
@@ -1,8 +1,10 @@
1
1
  import { ICycleJSONLD, CycleFunctionalUnit } from '@hestia-earth/schema';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class CyclesFunctionalUnitMeasureComponent {
4
- cycle?: ICycleJSONLD;
5
- CycleFunctionalUnit: typeof CycleFunctionalUnit;
4
+ private _cycle;
5
+ set cycle(value: ICycleJSONLD);
6
+ protected functionalUnit: import("@angular/core").Signal<CycleFunctionalUnit>;
7
+ protected CycleFunctionalUnit: typeof CycleFunctionalUnit;
6
8
  static ɵfac: i0.ɵɵFactoryDeclaration<CyclesFunctionalUnitMeasureComponent, never>;
7
9
  static ɵcmp: i0.ɵɵComponentDeclaration<CyclesFunctionalUnitMeasureComponent, "he-cycles-functional-unit-measure", never, { "cycle": { "alias": "cycle"; "required": false; }; }, {}, never, never, false, never>;
8
10
  }
@@ -0,0 +1,193 @@
1
+ import { DataState } from '@hestia-earth/api';
2
+ import { ICycleJSONLD, Input as HestiaInput, Product, NodeType, Animal, Emission, Practice, TermTermType, EmissionMethodTier, Term, Transformation } from '@hestia-earth/schema';
3
+ import { BlankNodesKey, blankNode } from '../../common/node-utils';
4
+ import { HeNodeStoreService } from '../../node/node-store.service';
5
+ import { IGroupedKeys } from '../../common/node-utils';
6
+ import * as i0 from "@angular/core";
7
+ declare enum View {
8
+ table = "Table view",
9
+ chart = "Chart view",
10
+ timeline = "Operations Timeline",
11
+ logs = "Recalculations logs"
12
+ }
13
+ type groupedEmissions = {
14
+ [methodTier in EmissionMethodTier]: IGroupedKeys<Emission>[];
15
+ };
16
+ export declare enum CycleNodesKeyGroup {
17
+ animals = "animals",
18
+ transformations = "transformations"
19
+ }
20
+ type groupedNode = Animal | Transformation;
21
+ export declare class CyclesNodesComponent {
22
+ private nodeStoreService;
23
+ protected _dataState: import("@angular/core").WritableSignal<DataState>;
24
+ set dataState(value: DataState);
25
+ protected BlankNodesKey: typeof BlankNodesKey;
26
+ protected firstNodeKey: import("@angular/core").Signal<BlankNodesKey>;
27
+ protected selectedNodeKey: import("@angular/core").WritableSignal<BlankNodesKey>;
28
+ protected _nodeKeys: import("@angular/core").WritableSignal<BlankNodesKey[]>;
29
+ set nodeKeys(value: BlankNodesKey[]);
30
+ protected selectedGroupTerm: import("@angular/core").WritableSignal<Term>;
31
+ protected _nodeKeyGroup: import("@angular/core").WritableSignal<CycleNodesKeyGroup>;
32
+ set nodeKeyGroup(value: CycleNodesKeyGroup);
33
+ protected baseUrl: string;
34
+ protected propertyValue: (value: string | number | (string | number)[], termId?: string) => number;
35
+ protected defaultLabel: (node?: any) => any;
36
+ protected showDownload: boolean;
37
+ protected headerKeys: import("@angular/core").Signal<string[]>;
38
+ protected View: typeof View;
39
+ protected viewIcon: {
40
+ "Table view": string;
41
+ "Chart view": string;
42
+ "Operations Timeline": string;
43
+ "Recalculations logs": string;
44
+ };
45
+ private showView;
46
+ protected views: import("@angular/core").Signal<View[]>;
47
+ protected selectedView: import("@angular/core").WritableSignal<View>;
48
+ private _allNodes;
49
+ private originalNodes;
50
+ private currentNodes;
51
+ protected originalCycles: import("@angular/core").Signal<ICycleJSONLD[] | groupedNode[]>;
52
+ protected cycles: import("@angular/core").Signal<ICycleJSONLD[] | groupedNode[]>;
53
+ private selectedIndex;
54
+ private ogirinalSelectedCycle;
55
+ private selectedCycle;
56
+ protected selectedLogsKey: import("@angular/core").Signal<any>;
57
+ protected selectedOriginalValues: import("@angular/core").Signal<any>;
58
+ protected selectedRecalculatedValues: import("@angular/core").Signal<any>;
59
+ protected selectedNode: import("@angular/core").Signal<{
60
+ '@type': NodeType;
61
+ type: NodeType;
62
+ dataState: DataState;
63
+ description?: string;
64
+ treatment?: string;
65
+ commercialPracticeTreatment?: boolean;
66
+ endDate?: string;
67
+ startDate?: string;
68
+ startDateDefinition?: import("@hestia-earth/schema").CycleStartDateDefinition;
69
+ cycleDuration?: number;
70
+ site?: import("@hestia-earth/schema").ISiteJSONLD;
71
+ otherSites?: import("@hestia-earth/schema").ISiteJSONLD[];
72
+ siteDuration?: number;
73
+ otherSitesDuration?: number[];
74
+ functionalUnit?: import("@hestia-earth/schema").CycleFunctionalUnit;
75
+ functionalUnitDetails?: string;
76
+ numberOfCycles?: number;
77
+ numberOfReplications?: number;
78
+ sampleWeight?: number;
79
+ harvestedArea?: number;
80
+ defaultMethodClassification?: import("@hestia-earth/schema").CycleDefaultMethodClassification;
81
+ defaultMethodClassificationDescription?: string;
82
+ defaultSource?: import("@hestia-earth/schema").ISourceJSONLD;
83
+ completeness?: import("@hestia-earth/schema").Completeness;
84
+ practices?: Practice[];
85
+ animals?: Animal[];
86
+ inputs?: HestiaInput[];
87
+ products?: Product[];
88
+ transformations?: Transformation[];
89
+ emissions?: Emission[];
90
+ dataPrivate?: boolean;
91
+ originalId?: string;
92
+ schemaVersion?: string;
93
+ added?: string[];
94
+ addedVersion?: string[];
95
+ updated?: string[];
96
+ updatedVersion?: string[];
97
+ aggregated?: boolean;
98
+ aggregatedVersion?: string;
99
+ aggregatedQualityScore?: number;
100
+ aggregatedQualityScoreMax?: number;
101
+ aggregatedCycles?: ICycleJSONLD[];
102
+ aggregatedSources?: import("@hestia-earth/schema").ISourceJSONLD[];
103
+ createdAt?: Date;
104
+ updatedAt?: Date;
105
+ '@context': string | (string | import("@hestia-earth/schema").IContext)[];
106
+ '@id': string;
107
+ name: string;
108
+ } | {
109
+ '@type': NodeType;
110
+ type: NodeType;
111
+ dataState: DataState;
112
+ transformationId?: string;
113
+ term?: Term;
114
+ description?: string;
115
+ startDate?: string;
116
+ endDate?: string;
117
+ transformationDuration?: number;
118
+ previousTransformationId?: string;
119
+ transformedShare?: number;
120
+ site?: import("@hestia-earth/schema").Site;
121
+ inputs?: HestiaInput[];
122
+ emissions?: Emission[];
123
+ products?: Product[];
124
+ practices?: Practice[];
125
+ schemaVersion?: string;
126
+ added?: string[];
127
+ addedVersion?: string[];
128
+ updated?: string[];
129
+ updatedVersion?: string[];
130
+ id?: string;
131
+ } | {
132
+ '@type': NodeType;
133
+ type: NodeType;
134
+ dataState: DataState;
135
+ term?: Term;
136
+ description?: string;
137
+ referencePeriod?: import("@hestia-earth/schema").AnimalReferencePeriod;
138
+ value?: number;
139
+ sd?: number;
140
+ min?: number;
141
+ max?: number;
142
+ statsDefinition?: import("@hestia-earth/schema").AnimalStatsDefinition;
143
+ observations?: number;
144
+ price?: number;
145
+ currency?: string;
146
+ methodClassification?: import("@hestia-earth/schema").AnimalMethodClassification;
147
+ methodClassificationDescription?: string;
148
+ source?: import("@hestia-earth/schema").Source;
149
+ properties?: import("@hestia-earth/schema").Property[];
150
+ inputs?: HestiaInput[];
151
+ practices?: Practice[];
152
+ schemaVersion?: string;
153
+ added?: string[];
154
+ addedVersion?: string[];
155
+ updated?: string[];
156
+ updatedVersion?: string[];
157
+ aggregated?: string[];
158
+ aggregatedVersion?: string[];
159
+ id?: string;
160
+ }>;
161
+ private isOriginal;
162
+ private originalValues;
163
+ protected showSwitchToRecalculated: import("@angular/core").Signal<boolean>;
164
+ protected timelineValues: import("@angular/core").Signal<blankNode[]>;
165
+ private enableTimeline;
166
+ protected isNodeKeyAllowed: import("@angular/core").Signal<boolean>;
167
+ private groupedNodes;
168
+ protected groupNodeTerms: import("@angular/core").Signal<Term[]>;
169
+ protected isGroupNode: import("@angular/core").Signal<boolean>;
170
+ protected isEmission: import("@angular/core").Signal<boolean>;
171
+ protected data: import("@angular/core").Signal<groupedEmissions | {
172
+ [k: string]: IGroupedKeys<Product>[];
173
+ }>;
174
+ protected dataKeys: import("@angular/core").Signal<string[]>;
175
+ protected hasData: import("@angular/core").Signal<boolean>;
176
+ protected filterTermTypes: import("@angular/core").Signal<TermTermType[]>;
177
+ protected filterTerm: import("@angular/core").WritableSignal<string>;
178
+ protected csvFilename: import("@angular/core").Signal<string>;
179
+ constructor(nodeStoreService: HeNodeStoreService);
180
+ private groupNodesByKey;
181
+ private groupEmissions;
182
+ protected trackById(_index: number, item: ICycleJSONLD): string;
183
+ protected togglePopover(popover: any, context: any): any;
184
+ protected filterByTerm(term: string): void;
185
+ protected selectIndex({ target: { value } }: {
186
+ target: {
187
+ value: any;
188
+ };
189
+ }): void;
190
+ static ɵfac: i0.ɵɵFactoryDeclaration<CyclesNodesComponent, never>;
191
+ static ɵcmp: i0.ɵɵComponentDeclaration<CyclesNodesComponent, "he-cycles-nodes", never, { "dataState": { "alias": "dataState"; "required": false; }; "nodeKeys": { "alias": "nodeKeys"; "required": false; }; "nodeKeyGroup": { "alias": "nodeKeyGroup"; "required": false; }; }, {}, never, never, false, never>;
192
+ }
193
+ export {};
@@ -0,0 +1,20 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import { DataState } from '@hestia-earth/api';
3
+ import { TermTermType } from '@hestia-earth/schema';
4
+ import { blankNode } from '../../common/node-utils';
5
+ import * as i0 from "@angular/core";
6
+ export declare class CyclesNodesTimelineComponent {
7
+ private el;
8
+ private _recalculatedValues;
9
+ set recalculatedValues(value: blankNode[]);
10
+ protected _dataState: import("@angular/core").WritableSignal<DataState>;
11
+ set dataState(value: DataState);
12
+ protected now: Date;
13
+ protected TermTermType: typeof TermTermType;
14
+ protected blankNodes: import("@angular/core").Signal<blankNode[]>;
15
+ constructor(el: ElementRef);
16
+ trackByBlankNode(_index: number, { term }: blankNode): any;
17
+ get lineWidth(): number;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<CyclesNodesTimelineComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<CyclesNodesTimelineComponent, "he-cycles-nodes-timeline", never, { "recalculatedValues": { "alias": "recalculatedValues"; "required": false; }; "dataState": { "alias": "dataState"; "required": false; }; }, {}, never, never, false, never>;
20
+ }
@@ -1,24 +1,17 @@
1
1
  import * as i0 from "@angular/core";
2
- import * as i1 from "./cycles-activity/cycles-activity.component";
3
- import * as i2 from "./cycles-activity-logs/cycles-activity-logs.component";
4
- import * as i3 from "./cycles-animals/cycles-animals.component";
5
- import * as i4 from "./cycles-completeness/cycles-completeness.component";
6
- import * as i5 from "./cycles-completeness-logs/cycles-completeness-logs.component";
7
- import * as i6 from "./cycles-emissions/cycles-emissions.component";
8
- import * as i7 from "./cycles-emissions-chart/cycles-emissions-chart.component";
9
- import * as i8 from "./cycles-emissions-logs/cycles-emissions-logs.component";
10
- import * as i9 from "./cycles-functional-unit-measure/cycles-functional-unit-measure.component";
11
- import * as i10 from "./cycles-practices/cycles-practices.component";
12
- import * as i11 from "./cycles-practices-logs/cycles-practices-logs.component";
13
- import * as i12 from "./cycles-practices-timeline/cycles-practices-timeline.component";
14
- import * as i13 from "./cycles-result/cycles-result.component";
15
- import * as i14 from "@angular/common";
16
- import * as i15 from "@angular/forms";
17
- import * as i16 from "../common/common.module";
18
- import * as i17 from "../node/node.module";
19
- import * as i18 from "../terms/terms.module";
2
+ import * as i1 from "./cycles-completeness/cycles-completeness.component";
3
+ import * as i2 from "./cycles-emissions-chart/cycles-emissions-chart.component";
4
+ import * as i3 from "./cycles-functional-unit-measure/cycles-functional-unit-measure.component";
5
+ import * as i4 from "./cycles-nodes/cycles-nodes.component";
6
+ import * as i5 from "./cycles-nodes-timeline/cycles-nodes-timeline.component";
7
+ import * as i6 from "./cycles-result/cycles-result.component";
8
+ import * as i7 from "@angular/common";
9
+ import * as i8 from "@angular/forms";
10
+ import * as i9 from "../common/common.module";
11
+ import * as i10 from "../node/node.module";
12
+ import * as i11 from "../terms/terms.module";
20
13
  export declare class HeCyclesModule {
21
14
  static ɵfac: i0.ɵɵFactoryDeclaration<HeCyclesModule, never>;
22
- static ɵmod: i0.ɵɵNgModuleDeclaration<HeCyclesModule, [typeof i1.CyclesActivityComponent, typeof i2.CyclesActivityLogsComponent, typeof i3.CyclesAnimalsComponent, typeof i4.CyclesCompletenessComponent, typeof i5.CyclesCompletenessLogsComponent, typeof i6.CyclesEmissionsComponent, typeof i7.CyclesEmissionsChartComponent, typeof i8.CyclesEmissionsLogsComponent, typeof i9.CyclesFunctionalUnitMeasureComponent, typeof i10.CyclesPracticesComponent, typeof i11.CyclesPracticesLogsComponent, typeof i12.CyclesPracticesTimelineComponent, typeof i13.CyclesResultComponent], [typeof i14.CommonModule, typeof i15.FormsModule, typeof i16.HeCommonModule, typeof i17.HeNodeModule, typeof i18.HeTermsModule], [typeof i1.CyclesActivityComponent, typeof i2.CyclesActivityLogsComponent, typeof i3.CyclesAnimalsComponent, typeof i4.CyclesCompletenessComponent, typeof i5.CyclesCompletenessLogsComponent, typeof i6.CyclesEmissionsComponent, typeof i7.CyclesEmissionsChartComponent, typeof i8.CyclesEmissionsLogsComponent, typeof i9.CyclesFunctionalUnitMeasureComponent, typeof i10.CyclesPracticesComponent, typeof i11.CyclesPracticesLogsComponent, typeof i12.CyclesPracticesTimelineComponent, typeof i13.CyclesResultComponent]>;
15
+ static ɵmod: i0.ɵɵNgModuleDeclaration<HeCyclesModule, [typeof i1.CyclesCompletenessComponent, typeof i2.CyclesEmissionsChartComponent, typeof i3.CyclesFunctionalUnitMeasureComponent, typeof i4.CyclesNodesComponent, typeof i5.CyclesNodesTimelineComponent, typeof i6.CyclesResultComponent], [typeof i7.CommonModule, typeof i8.FormsModule, typeof i9.HeCommonModule, typeof i10.HeNodeModule, typeof i11.HeTermsModule], [typeof i1.CyclesCompletenessComponent, typeof i2.CyclesEmissionsChartComponent, typeof i3.CyclesFunctionalUnitMeasureComponent, typeof i4.CyclesNodesComponent, typeof i5.CyclesNodesTimelineComponent, typeof i6.CyclesResultComponent]>;
23
16
  static ɵinj: i0.ɵɵInjectorDeclaration<HeCyclesModule>;
24
17
  }
package/cycles/index.d.ts CHANGED
@@ -1,15 +1,8 @@
1
1
  export * from './cycles.model';
2
2
  export * from './cycles.module';
3
- export { CyclesActivityComponent } from './cycles-activity/cycles-activity.component';
4
- export { CyclesActivityLogsComponent } from './cycles-activity-logs/cycles-activity-logs.component';
5
- export { CyclesAnimalsComponent } from './cycles-animals/cycles-animals.component';
6
3
  export { CyclesCompletenessComponent } from './cycles-completeness/cycles-completeness.component';
7
- export { CyclesCompletenessLogsComponent } from './cycles-completeness-logs/cycles-completeness-logs.component';
8
4
  export { CyclesEmissionsChartComponent } from './cycles-emissions-chart/cycles-emissions-chart.component';
9
- export { CyclesEmissionsLogsComponent } from './cycles-emissions-logs/cycles-emissions-logs.component';
10
- export { CyclesEmissionsComponent } from './cycles-emissions/cycles-emissions.component';
11
5
  export { CyclesFunctionalUnitMeasureComponent } from './cycles-functional-unit-measure/cycles-functional-unit-measure.component';
12
- export { CyclesPracticesComponent } from './cycles-practices/cycles-practices.component';
13
- export { CyclesPracticesLogsComponent } from './cycles-practices-logs/cycles-practices-logs.component';
14
- export { CyclesPracticesTimelineComponent } from './cycles-practices-timeline/cycles-practices-timeline.component';
6
+ export { CyclesNodesComponent, CycleNodesKeyGroup } from './cycles-nodes/cycles-nodes.component';
7
+ export { CyclesNodesTimelineComponent } from './cycles-nodes-timeline/cycles-nodes-timeline.component';
15
8
  export { CyclesResultComponent } from './cycles-result/cycles-result.component';
@@ -102,7 +102,7 @@ export declare class HeEngineService {
102
102
  private init;
103
103
  private loadModels;
104
104
  private get models$();
105
- models(includeEcoinvent?: boolean): Promise<IModel[]>;
105
+ allModels$(includeEcoinvent?: boolean): Observable<IModel[]>;
106
106
  model$(model: Partial<IModel>): Observable<IModel>;
107
107
  nodeModel$(node: Partial<blankNode>, key?: string): Observable<IModel>;
108
108
  model(model: Partial<IModel>): Promise<IModel>;
@@ -115,6 +115,7 @@ export declare class HeEngineService {
115
115
  getTermIds$(params: ICalculationsRequirementsParams): Observable<string[]>;
116
116
  getTermIds(params: ICalculationsRequirementsParams): Promise<any[] | string[]>;
117
117
  orchestratorConfigUrl(type?: NodeType): string;
118
+ ochestratorConfig$(type: NodeType, id?: string): Observable<IOrchestratorConfig>;
118
119
  ochestratorConfig(type: NodeType, id?: string): Promise<IOrchestratorConfig>;
119
120
  static ɵfac: i0.ɵɵFactoryDeclaration<HeEngineService, never>;
120
121
  static ɵprov: i0.ɵɵInjectableDeclaration<HeEngineService>;
@@ -2,6 +2,24 @@ import get from 'lodash.get';
2
2
  import { EmissionMethodTier } from '@hestia-earth/schema';
3
3
  import { propertyValue } from '@hestia-earth/utils/dist/term';
4
4
  import { getDefaultModelId } from '@hestia-earth/glossary';
5
+ export var BlankNodesKey;
6
+ (function (BlankNodesKey) {
7
+ BlankNodesKey["animals"] = "animals";
8
+ BlankNodesKey["emissions"] = "emissions";
9
+ BlankNodesKey["emissionsResourceUse"] = "emissionsResourceUse";
10
+ BlankNodesKey["endpoints"] = "endpoints";
11
+ BlankNodesKey["impacts"] = "impacts";
12
+ BlankNodesKey["inputs"] = "inputs";
13
+ BlankNodesKey["management"] = "management";
14
+ BlankNodesKey["measurements"] = "measurements";
15
+ BlankNodesKey["products"] = "products";
16
+ BlankNodesKey["practices"] = "practices";
17
+ })(BlankNodesKey || (BlankNodesKey = {}));
18
+ export const filterBlankNode = (filterTerm) => ({ term }) => !filterTerm || term?.name?.toLowerCase()?.includes(filterTerm.toLowerCase());
19
+ export var NonBlankNodesKey;
20
+ (function (NonBlankNodesKey) {
21
+ NonBlankNodesKey["completeness"] = "completeness";
22
+ })(NonBlankNodesKey || (NonBlankNodesKey = {}));
5
23
  export const ignoreKeys = ['@type', 'type', 'added', 'updated', 'addedVersion', 'updatedVersion'];
6
24
  export const isValidKey = (key) => !ignoreKeys.includes(key);
7
25
  export const isMethodModelAllowed = (filterMethod) => (node) => node.methodModel?.['@id'] === (filterMethod ? filterMethod['@id'] : getDefaultModelId(node.term?.['@id']));
@@ -91,4 +109,4 @@ export const groupNodesByTerm = (nodes = [], key, originalValues = [], includeNo
91
109
  });
92
110
  return groups;
93
111
  };
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vbm9kZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxFQUtMLGtCQUFrQixFQVduQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFFbEcsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFckUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxZQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWUsRUFBRSxFQUFFLENBQy9FLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTdHLE1BQU0sQ0FBTixJQUFZLFlBTVg7QUFORCxXQUFZLFlBQVk7SUFDdEIsK0JBQWUsQ0FBQTtJQUNmLG1DQUFtQixDQUFBO0lBQ25CLHlDQUF5QixDQUFBO0lBQ3pCLG1DQUFtQixDQUFBO0lBQ25CLHVDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFOVyxZQUFZLEtBQVosWUFBWSxRQU12QjtB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QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUN2RSxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQ3pDLENBQUM7WUFDRixJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBWSxFQUFFLElBQVMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDN0csS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7YUFDeEU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCB7XG4gIFRlcm0sXG4gIElDeWNsZUpTT05MRCxcbiAgSVNpdGVKU09OTEQsXG4gIElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELFxuICBFbWlzc2lvbk1ldGhvZFRpZXIsXG4gIElUZXJtSlNPTkxELFxuICBDb21wbGV0ZW5lc3MsXG4gIEluZnJhc3RydWN0dXJlLFxuICBFbWlzc2lvbixcbiAgTWVhc3VyZW1lbnQsXG4gIFByYWN0aWNlLFxuICBQcm9kdWN0LFxuICBJbnB1dCxcbiAgUHJvcGVydHksXG4gIEluZGljYXRvclxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscy9kaXN0L3Rlcm0nO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE1vZGVsSWQgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2dsb3NzYXJ5JztcblxuZXhwb3J0IGNvbnN0IGlnbm9yZUtleXMgPSBbJ0B0eXBlJywgJ3R5cGUnLCAnYWRkZWQnLCAndXBkYXRlZCcsICdhZGRlZFZlcnNpb24nLCAndXBkYXRlZFZlcnNpb24nXTtcblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRLZXkgPSAoa2V5OiBzdHJpbmcpID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKGtleSk7XG5cbmV4cG9ydCBjb25zdCBpc01ldGhvZE1vZGVsQWxsb3dlZCA9IChmaWx0ZXJNZXRob2Q/OiBUZXJtKSA9PiAobm9kZTogSW5kaWNhdG9yKSA9PlxuICBub2RlLm1ldGhvZE1vZGVsPy5bJ0BpZCddID09PSAoZmlsdGVyTWV0aG9kID8gZmlsdGVyTWV0aG9kWydAaWQnXSA6IGdldERlZmF1bHRNb2RlbElkKG5vZGUudGVybT8uWydAaWQnXSkpO1xuXG5leHBvcnQgZW51bSBOb2RlS2V5U3RhdGUge1xuICBhZGRlZCA9ICdhZGRlZCcsXG4gIHVwZGF0ZWQgPSAndXBkYXRlZCcsXG4gIGFnZ3JlZ2F0ZWQgPSAnYWdncmVnYXRlZCcsXG4gIGRlbGV0ZWQgPSAnZGVsZXRlZCcsXG4gIHVuY2hhbmdlZCA9ICd1bmNoYW5nZWQnXG59XG5cbmV4cG9ydCB0eXBlIGJsYW5rTm9kZSA9IENvbXBsZXRlbmVzcyB8IEluZnJhc3RydWN0dXJlIHwgSW5wdXQgfCBFbWlzc2lvbiB8IE1lYXN1cmVtZW50IHwgUHJhY3RpY2UgfCBQcm9kdWN0IHwgUHJvcGVydHk7XG5cbmV4cG9ydCBjb25zdCBpc1N0YXRlID0gKG5vZGU6IGJsYW5rTm9kZSwga2V5OiBzdHJpbmcsIHN0YXRlOiBOb2RlS2V5U3RhdGUpID0+XG4gIHN0YXRlIGluIG5vZGUhICYmICh0eXBlb2Ygbm9kZSFbc3RhdGVdID09PSAnYm9vbGVhbicgPyBub2RlIVtzdGF0ZV0gOiBub2RlIVtzdGF0ZV0uaW5jbHVkZXMoa2V5KSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyb3VwZWROb2RlPFQ+IHtcbiAgLy8gc3RvcmUgdGhlIG5vZGUgd2l0aCB0aGUgaGlnaGVzdCBcInN0YXRlXCJcbiAgbm9kZTogVDtcbiAgbm9kZXM6IFRbXTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgdmFsdWU6IG51bWJlcltdO1xuICBkYXRlcz86IGFueVtdO1xuICBzZD86IG51bWJlcltdO1xuICBtaW4/OiBudW1iZXJbXTtcbiAgbWF4PzogbnVtYmVyW107XG4gIGlucHV0cz86IGFueVtdO1xuICBkZXB0aFVwcGVyPzogbnVtYmVyW107XG4gIGRlcHRoTG93ZXI/OiBudW1iZXJbXTtcbiAgc3RhcnREYXRlPzogc3RyaW5nW107XG4gIGVuZERhdGU/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3JvdXBlZE5vZGVzVmFsdWVzPFQ+IHtcbiAgW25vZGVJZDogc3RyaW5nXTogSUdyb3VwZWROb2RlPFQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cGVkTm9kZXNWYWx1ZTxUPiB7XG4gIHRlcm06IElUZXJtSlNPTkxEO1xuICBtZXRob2RUaWVyPzogRW1pc3Npb25NZXRob2RUaWVyO1xuICAvKipcbiAgICogRW5hYmxlIG9yZGVyaW5nIG55IG1ldGhvZFRpZXJcbiAgICovXG4gIG1ldGhvZFRpZXJPcmRlcjogbnVtYmVyO1xuICB2YWx1ZXM6IElHcm91cGVkTm9kZXNWYWx1ZXM8VD47XG4gIG9yaWdpbmFsVmFsdWVzOiB7XG4gICAgW25vZGVJZDogc3RyaW5nXToge1xuICAgICAgdmFsdWU6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cGVkTm9kZXM8VD4ge1xuICBbdGVybUlkOiBzdHJpbmddOiBJR3JvdXBlZE5vZGVzVmFsdWU8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyb3VwZWRLZXlzPFQ+IHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBJR3JvdXBlZE5vZGVzVmFsdWU8VD47XG59XG5cbmV4cG9ydCBjb25zdCBncm91cHBlZEtleXMgPSA8VD4odmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IFQgfSk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUIH1bXSA9PlxuICBPYmplY3QuZW50cmllcyh2YWx1ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKTtcblxuY29uc3QgY29uY2F0QmxhbmtOb2RlVmFsdWUgPSAodmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSkgPT4ge1xuICBjb25zdCB2YWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gIGNvbnN0IG5ld1ZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSA/IG5ld1ZhbHVlIDogW25ld1ZhbHVlXTtcbiAgcmV0dXJuIFsuLi52YWx1ZUFycmF5LCAuLi5uZXdWYWx1ZUFycmF5XTtcbn07XG5cbmV4cG9ydCBjb25zdCBtZXRob2RUaWVyT3JkZXIgPSAobWV0aG9kVGllcjogRW1pc3Npb25NZXRob2RUaWVyKSA9PlxuICBbXG4gICAgRW1pc3Npb25NZXRob2RUaWVyLm1lYXN1cmVkLFxuICAgIEVtaXNzaW9uTWV0aG9kVGllclsndGllciAzJ10sXG4gICAgRW1pc3Npb25NZXRob2RUaWVyWyd0aWVyIDInXSxcbiAgICBFbWlzc2lvbk1ldGhvZFRpZXJbJ3RpZXIgMSddLFxuICAgIEVtaXNzaW9uTWV0aG9kVGllci5iYWNrZ3JvdW5kLFxuICAgIEVtaXNzaW9uTWV0aG9kVGllclsnbm90IHJlbGV2YW50J11cbiAgXS5pbmRleE9mKG1ldGhvZFRpZXIpO1xuXG5leHBvcnQgY29uc3QgZ3JvdXBwZWRWYWx1ZUtleXMgPSBbXG4gICdkYXRlcycsXG4gICdzZCcsXG4gICdtaW4nLFxuICAnbWF4JyxcbiAgJ2lucHV0cycsXG4gICdkZXB0aFVwcGVyJyxcbiAgJ2RlcHRoTG93ZXInLFxuICAnc3RhcnREYXRlJyxcbiAgJ2VuZERhdGUnLFxuICAnbWV0aG9kVGllcicsXG4gICdtZXRob2RNb2RlbCcsXG4gICdtb2RlbCcsXG4gICdtZXRob2QnXG5dO1xuXG5jb25zdCBpc0hpZ2hlclN0YXRlID0gKHNvdXJjZU5vZGU6IGJsYW5rTm9kZSwgbmV3Tm9kZTogYmxhbmtOb2RlKSA9PlxuICAhc291cmNlTm9kZSB8fFxuICBpc1N0YXRlKG5ld05vZGUsICd2YWx1ZScsIE5vZGVLZXlTdGF0ZS51cGRhdGVkKSB8fFxuICAoIWlzU3RhdGUoc291cmNlTm9kZSwgJ3ZhbHVlJywgTm9kZUtleVN0YXRlLnVwZGF0ZWQpICYmIGlzU3RhdGUobmV3Tm9kZSwgJ3ZhbHVlJywgTm9kZUtleVN0YXRlLmFkZGVkKSk7XG5cbmNvbnN0IGdyb3VwTm9kZUtleSA9ICh7IHRlcm0gfTogYW55KSA9PiB0ZXJtPy5uYW1lIHx8IHRlcm0/LlsnQGlkJ107XG5cbmV4cG9ydCBjb25zdCBncm91cE5vZGVzQnlUZXJtID0gPFQgZXh0ZW5kcyBJQ3ljbGVKU09OTEQgfCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCB8IElTaXRlSlNPTkxELCBSPihcbiAgbm9kZXM6IFRbXSA9IFtdLFxuICBrZXk6XG4gICAgfCAnZW5kcG9pbnRzJ1xuICAgIHwgJ2ltcGFjdHMnXG4gICAgfCAnZW1pc3Npb25zUmVzb3VyY2VVc2UnXG4gICAgfCAnaW5wdXRzJ1xuICAgIHwgJ3Byb2R1Y3RzJ1xuICAgIHwgJ3ByYWN0aWNlcydcbiAgICB8ICdlbWlzc2lvbnMnXG4gICAgfCAnbWVhc3VyZW1lbnRzJ1xuICAgIHwgJ2FuaW1hbHMnLFxuICBvcmlnaW5hbFZhbHVlczogVFtdID0gW10sXG4gIGluY2x1ZGVOb2RlID0gKF9ub2RlOiBhbnkpID0+IHRydWVcbik6IElHcm91cGVkTm9kZXM8Uj4gPT4ge1xuICBjb25zdCBncm91cHM6IElHcm91cGVkTm9kZXM8Uj4gPSBub2Rlcy5yZWR1Y2UoXG4gICAgKHByZXYsIG5vZGUsIGluZGV4KSA9PlxuICAgICAgKG5vZGVba2V5XSB8fCBbXSkucmVkdWNlKChncm91cCwgYmxhbmtOb2RlKSA9PiB7XG4gICAgICAgIC8vIHNraXAgbm9kZSBiYXNlZCBvbiBjb25kaXRpb25cbiAgICAgICAgaWYgKCFpbmNsdWRlTm9kZShibGFua05vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZVsnQGlkJ107XG4gICAgICAgIGNvbnN0IGdyb3VwZWRLZXkgPSBncm91cE5vZGVLZXkoYmxhbmtOb2RlKTtcbiAgICAgICAgZ3JvdXBbZ3JvdXBlZEtleV0gPSBncm91cFtncm91cGVkS2V5XSB8fCB7XG4gICAgICAgICAgdGVybTogYmxhbmtOb2RlLnRlcm0sXG4gICAgICAgICAgbWV0aG9kVGllcjogYmxhbmtOb2RlLm1ldGhvZFRpZXIsXG4gICAgICAgICAgbWV0aG9kVGllck9yZGVyOiBtZXRob2RUaWVyT3JkZXIoYmxhbmtOb2RlLm1ldGhvZFRpZXIpLFxuICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZXM6IHt9XG4gICAgICAgIH07XG4gICAgICAgIGdyb3VwW2dyb3VwZWRLZXldLnZhbHVlc1tub2RlSWRdID0gZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0gfHwgeyBpbmRleCwgbm9kZXM6IFtdLCB2YWx1ZTogW10gfTtcbiAgICAgICAgZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0ubm9kZSA9IGlzSGlnaGVyU3RhdGUoZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0ubm9kZSwgYmxhbmtOb2RlKVxuICAgICAgICAgID8gYmxhbmtOb2RlXG4gICAgICAgICAgOiBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS5ub2RlO1xuICAgICAgICBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS5ub2Rlcy5wdXNoKGJsYW5rTm9kZSk7XG4gICAgICAgIGdyb3VwW2dyb3VwZWRLZXldLnZhbHVlc1tub2RlSWRdLnZhbHVlID0gY29uY2F0QmxhbmtOb2RlVmFsdWUoXG4gICAgICAgICAgZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0udmFsdWUsXG4gICAgICAgICAgYmxhbmtOb2RlLnZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGdyb3VwcGVkVmFsdWVLZXlzLmZvckVhY2goYXJyYXlLZXkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZ2V0KGJsYW5rTm9kZSwgYXJyYXlLZXksIFtdKTtcbiAgICAgICAgICBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXVthcnJheUtleV0gPSBbXG4gICAgICAgICAgICAuLi4oZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF1bYXJyYXlLZXldIHx8IFtdKSxcbiAgICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSA/IG5ld1ZhbHVlIDogW25ld1ZhbHVlXSlcbiAgICAgICAgICBdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgfSwgcHJldiksXG4gICAge30gYXMgSUdyb3VwZWROb2RlczxSPlxuICApO1xuXG4gIC8vIGNvbXBpbGUgb3JpZ2luYWwgdmFsdWVzXG4gIE9iamVjdC52YWx1ZXMoZ3JvdXBzKS5tYXAoZ3JvdXAgPT4ge1xuICAgIE9iamVjdC5rZXlzKGdyb3VwLnZhbHVlcykubWFwKG5vZGVJZCA9PiB7XG4gICAgICBjb25zdCB7IGluZGV4IH0gPSBncm91cC52YWx1ZXNbbm9kZUlkXTtcbiAgICAgIGNvbnN0IHRlcm1JZCA9IGdyb3VwLnRlcm1bJ0BpZCddO1xuICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IGdldChvcmlnaW5hbFZhbHVlcywgYFske2luZGV4fV0uJHtrZXl9YCwgW10pLmZpbHRlcihcbiAgICAgICAgKHZhbDogYW55KSA9PiB2YWwudGVybVsnQGlkJ10gPT09IHRlcm1JZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvcmlnaW5hbFZhbHVlLnJlZHVjZSgoYXJyYXk6IGFueVtdLCBjdXJyOiBhbnkpID0+IGNvbmNhdEJsYW5rTm9kZVZhbHVlKGFycmF5LCBjdXJyLnZhbHVlKSwgW10pO1xuICAgICAgICBncm91cC5vcmlnaW5hbFZhbHVlc1tub2RlSWRdID0geyB2YWx1ZTogcHJvcGVydHlWYWx1ZSh2YWx1ZSwgdGVybUlkKSB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gZ3JvdXBzO1xufTtcbiJdfQ==
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vbm9kZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxFQUtMLGtCQUFrQixFQWFuQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQXlCM0QsTUFBTSxDQUFOLElBQVksYUFXWDtBQVhELFdBQVksYUFBYTtJQUN2QixvQ0FBbUIsQ0FBQTtJQUNuQix3Q0FBdUIsQ0FBQTtJQUN2Qiw4REFBNkMsQ0FBQTtJQUM3Qyx3Q0FBdUIsQ0FBQTtJQUN2QixvQ0FBbUIsQ0FBQTtJQUNuQixrQ0FBaUIsQ0FBQTtJQUNqQiwwQ0FBeUIsQ0FBQTtJQUN6Qiw4Q0FBNkIsQ0FBQTtJQUM3QixzQ0FBcUIsQ0FBQTtJQUNyQix3Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBWFcsYUFBYSxLQUFiLGFBQWEsUUFXeEI7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQzFCLENBQUMsVUFBa0IsRUFBRSxFQUFFLENBQ3ZCLENBQUMsRUFBRSxJQUFJLEVBQWEsRUFBRSxFQUFFLENBQ3RCLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBS2pGLE1BQU0sQ0FBTixJQUFZLGdCQUVYO0FBRkQsV0FBWSxnQkFBZ0I7SUFDMUIsaURBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQUZXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFFM0I7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxT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QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzthQUN4RTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuaW1wb3J0IHtcbiAgVGVybSxcbiAgSUN5Y2xlSlNPTkxELFxuICBJU2l0ZUpTT05MRCxcbiAgSUltcGFjdEFzc2Vzc21lbnRKU09OTEQsXG4gIEVtaXNzaW9uTWV0aG9kVGllcixcbiAgSVRlcm1KU09OTEQsXG4gIENvbXBsZXRlbmVzcyxcbiAgRW1pc3Npb24sXG4gIE1lYXN1cmVtZW50LFxuICBQcmFjdGljZSxcbiAgUHJvZHVjdCxcbiAgSW5wdXQsXG4gIFByb3BlcnR5LFxuICBJbmRpY2F0b3IsXG4gIEFuaW1hbCxcbiAgTWFuYWdlbWVudCxcbiAgVHJhbnNmb3JtYXRpb25cbn0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgcHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMvZGlzdC90ZXJtJztcbmltcG9ydCB7IGdldERlZmF1bHRNb2RlbElkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9nbG9zc2FyeSc7XG5cbmV4cG9ydCB0eXBlIGJsYW5rTm9kZSA9XG4gIHwgQW5pbWFsXG4gIHwgRW1pc3Npb25cbiAgfCBJbnB1dFxuICB8IFByb2R1Y3RcbiAgfCBQcm9wZXJ0eVxuICB8IFByYWN0aWNlXG4gIHwgSW5kaWNhdG9yXG4gIHwgTWVhc3VyZW1lbnRcbiAgfCBNYW5hZ2VtZW50O1xuXG5leHBvcnQgdHlwZSBibGFua05vZGVzS2V5ID1cbiAgfCAnYW5pbWFscydcbiAgfCAnZW1pc3Npb25zJ1xuICB8ICdlbWlzc2lvbnNSZXNvdXJjZVVzZSdcbiAgfCAnZW5kcG9pbnRzJ1xuICB8ICdpbXBhY3RzJ1xuICB8ICdpbnB1dHMnXG4gIHwgJ21hbmFnZW1lbnQnXG4gIHwgJ21lYXN1cmVtZW50cydcbiAgfCAncHJvZHVjdHMnXG4gIHwgJ3ByYWN0aWNlcyc7XG5cbmV4cG9ydCBlbnVtIEJsYW5rTm9kZXNLZXkge1xuICBhbmltYWxzID0gJ2FuaW1hbHMnLFxuICBlbWlzc2lvbnMgPSAnZW1pc3Npb25zJyxcbiAgZW1pc3Npb25zUmVzb3VyY2VVc2UgPSAnZW1pc3Npb25zUmVzb3VyY2VVc2UnLFxuICBlbmRwb2ludHMgPSAnZW5kcG9pbnRzJyxcbiAgaW1wYWN0cyA9ICdpbXBhY3RzJyxcbiAgaW5wdXRzID0gJ2lucHV0cycsXG4gIG1hbmFnZW1lbnQgPSAnbWFuYWdlbWVudCcsXG4gIG1lYXN1cmVtZW50cyA9ICdtZWFzdXJlbWVudHMnLFxuICBwcm9kdWN0cyA9ICdwcm9kdWN0cycsXG4gIHByYWN0aWNlcyA9ICdwcmFjdGljZXMnXG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJCbGFua05vZGUgPVxuICAoZmlsdGVyVGVybTogc3RyaW5nKSA9PlxuICAoeyB0ZXJtIH06IGJsYW5rTm9kZSkgPT5cbiAgICAhZmlsdGVyVGVybSB8fCB0ZXJtPy5uYW1lPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhmaWx0ZXJUZXJtLnRvTG93ZXJDYXNlKCkpO1xuXG5leHBvcnQgdHlwZSBub25CbGFua05vZGUgPSBDb21wbGV0ZW5lc3M7XG5leHBvcnQgdHlwZSBub25CbGFua05vZGVzS2V5ID0gJ2NvbXBsZXRlbmVzcyc7XG5cbmV4cG9ydCBlbnVtIE5vbkJsYW5rTm9kZXNLZXkge1xuICBjb21wbGV0ZW5lc3MgPSAnY29tcGxldGVuZXNzJ1xufVxuXG5leHBvcnQgY29uc3QgaWdub3JlS2V5cyA9IFsnQHR5cGUnLCAndHlwZScsICdhZGRlZCcsICd1cGRhdGVkJywgJ2FkZGVkVmVyc2lvbicsICd1cGRhdGVkVmVyc2lvbiddO1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZEtleSA9IChrZXk6IHN0cmluZykgPT4gIWlnbm9yZUtleXMuaW5jbHVkZXMoa2V5KTtcblxuZXhwb3J0IGNvbnN0IGlzTWV0aG9kTW9kZWxBbGxvd2VkID0gKGZpbHRlck1ldGhvZD86IFRlcm0pID0+IChub2RlOiBJbmRpY2F0b3IpID0+XG4gIG5vZGUubWV0aG9kTW9kZWw/LlsnQGlkJ10gPT09IChmaWx0ZXJNZXRob2QgPyBmaWx0ZXJNZXRob2RbJ0BpZCddIDogZ2V0RGVmYXVsdE1vZGVsSWQobm9kZS50ZXJtPy5bJ0BpZCddKSk7XG5cbmV4cG9ydCBlbnVtIE5vZGVLZXlTdGF0ZSB7XG4gIGFkZGVkID0gJ2FkZGVkJyxcbiAgdXBkYXRlZCA9ICd1cGRhdGVkJyxcbiAgYWdncmVnYXRlZCA9ICdhZ2dyZWdhdGVkJyxcbiAgZGVsZXRlZCA9ICdkZWxldGVkJyxcbiAgdW5jaGFuZ2VkID0gJ3VuY2hhbmdlZCdcbn1cblxuZXhwb3J0IGNvbnN0IGlzU3RhdGUgPSAobm9kZTogYmxhbmtOb2RlLCBrZXk6IHN0cmluZywgc3RhdGU6IE5vZGVLZXlTdGF0ZSkgPT5cbiAgc3RhdGUgaW4gbm9kZSEgJiYgKHR5cGVvZiBub2RlIVtzdGF0ZV0gPT09ICdib29sZWFuJyA/IG5vZGUhW3N0YXRlXSA6IG5vZGUhW3N0YXRlXS5pbmNsdWRlcyhrZXkpKTtcblxuZXhwb3J0IGludGVyZmFjZSBJR3JvdXBlZE5vZGU8VD4ge1xuICAvLyBzdG9yZSB0aGUgbm9kZSB3aXRoIHRoZSBoaWdoZXN0IFwic3RhdGVcIlxuICBub2RlOiBUO1xuICBub2RlczogVFtdO1xuICBpbmRleDogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyW107XG4gIGRhdGVzPzogYW55W107XG4gIHNkPzogbnVtYmVyW107XG4gIG1pbj86IG51bWJlcltdO1xuICBtYXg/OiBudW1iZXJbXTtcbiAgaW5wdXRzPzogYW55W107XG4gIGRlcHRoVXBwZXI/OiBudW1iZXJbXTtcbiAgZGVwdGhMb3dlcj86IG51bWJlcltdO1xuICBzdGFydERhdGU/OiBzdHJpbmdbXTtcbiAgZW5kRGF0ZT86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cGVkTm9kZXNWYWx1ZXM8VD4ge1xuICBbbm9kZUlkOiBzdHJpbmddOiBJR3JvdXBlZE5vZGU8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyb3VwZWROb2Rlc1ZhbHVlPFQ+IHtcbiAgdGVybTogSVRlcm1KU09OTEQ7XG4gIG1ldGhvZFRpZXI/OiBFbWlzc2lvbk1ldGhvZFRpZXI7XG4gIC8qKlxuICAgKiBFbmFibGUgb3JkZXJpbmcgbnkgbWV0aG9kVGllclxuICAgKi9cbiAgbWV0aG9kVGllck9yZGVyOiBudW1iZXI7XG4gIHZhbHVlczogSUdyb3VwZWROb2Rlc1ZhbHVlczxUPjtcbiAgb3JpZ2luYWxWYWx1ZXM6IHtcbiAgICBbbm9kZUlkOiBzdHJpbmddOiB7XG4gICAgICB2YWx1ZTogbnVtYmVyO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyb3VwZWROb2RlczxUPiB7XG4gIFt0ZXJtSWQ6IHN0cmluZ106IElHcm91cGVkTm9kZXNWYWx1ZTxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3JvdXBlZEtleXM8VD4ge1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IElHcm91cGVkTm9kZXNWYWx1ZTxUPjtcbn1cblxuZXhwb3J0IGNvbnN0IGdyb3VwcGVkS2V5cyA9IDxUPih2YWx1ZXM6IHsgW2tleTogc3RyaW5nXTogVCB9KTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IFQgfVtdID0+XG4gIE9iamVjdC5lbnRyaWVzKHZhbHVlcykubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7IGtleSwgdmFsdWUgfSkpO1xuXG5jb25zdCBjb25jYXRCbGFua05vZGVWYWx1ZSA9ICh2YWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KSA9PiB7XG4gIGNvbnN0IHZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgY29uc3QgbmV3VmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkobmV3VmFsdWUpID8gbmV3VmFsdWUgOiBbbmV3VmFsdWVdO1xuICByZXR1cm4gWy4uLnZhbHVlQXJyYXksIC4uLm5ld1ZhbHVlQXJyYXldO1xufTtcblxuZXhwb3J0IGNvbnN0IG1ldGhvZFRpZXJPcmRlciA9IChtZXRob2RUaWVyOiBFbWlzc2lvbk1ldGhvZFRpZXIpID0+XG4gIFtcbiAgICBFbWlzc2lvbk1ldGhvZFRpZXIubWVhc3VyZWQsXG4gICAgRW1pc3Npb25NZXRob2RUaWVyWyd0aWVyIDMnXSxcbiAgICBFbWlzc2lvbk1ldGhvZFRpZXJbJ3RpZXIgMiddLFxuICAgIEVtaXNzaW9uTWV0aG9kVGllclsndGllciAxJ10sXG4gICAgRW1pc3Npb25NZXRob2RUaWVyLmJhY2tncm91bmQsXG4gICAgRW1pc3Npb25NZXRob2RUaWVyWydub3QgcmVsZXZhbnQnXVxuICBdLmluZGV4T2YobWV0aG9kVGllcik7XG5cbmV4cG9ydCBjb25zdCBncm91cHBlZFZhbHVlS2V5cyA9IFtcbiAgJ2RhdGVzJyxcbiAgJ3NkJyxcbiAgJ21pbicsXG4gICdtYXgnLFxuICAnaW5wdXRzJyxcbiAgJ2RlcHRoVXBwZXInLFxuICAnZGVwdGhMb3dlcicsXG4gICdzdGFydERhdGUnLFxuICAnZW5kRGF0ZScsXG4gICdtZXRob2RUaWVyJyxcbiAgJ21ldGhvZE1vZGVsJyxcbiAgJ21vZGVsJyxcbiAgJ21ldGhvZCdcbl07XG5cbmNvbnN0IGlzSGlnaGVyU3RhdGUgPSAoc291cmNlTm9kZTogYmxhbmtOb2RlLCBuZXdOb2RlOiBibGFua05vZGUpID0+XG4gICFzb3VyY2VOb2RlIHx8XG4gIGlzU3RhdGUobmV3Tm9kZSwgJ3ZhbHVlJywgTm9kZUtleVN0YXRlLnVwZGF0ZWQpIHx8XG4gICghaXNTdGF0ZShzb3VyY2VOb2RlLCAndmFsdWUnLCBOb2RlS2V5U3RhdGUudXBkYXRlZCkgJiYgaXNTdGF0ZShuZXdOb2RlLCAndmFsdWUnLCBOb2RlS2V5U3RhdGUuYWRkZWQpKTtcblxuY29uc3QgZ3JvdXBOb2RlS2V5ID0gKHsgdGVybSB9OiBhbnkpID0+IHRlcm0/Lm5hbWUgfHwgdGVybT8uWydAaWQnXTtcblxuZXhwb3J0IGNvbnN0IGdyb3VwTm9kZXNCeVRlcm0gPSA8XG4gIFQgZXh0ZW5kcyBJQ3ljbGVKU09OTEQgfCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCB8IElTaXRlSlNPTkxEIHwgQW5pbWFsIHwgVHJhbnNmb3JtYXRpb24sXG4gIFJcbj4oXG4gIG5vZGVzOiBUW10gPSBbXSxcbiAga2V5OiBibGFua05vZGVzS2V5LFxuICBvcmlnaW5hbFZhbHVlczogVFtdID0gW10sXG4gIGluY2x1ZGVOb2RlID0gKF9ub2RlOiBhbnkpID0+IHRydWVcbik6IElHcm91cGVkTm9kZXM8Uj4gPT4ge1xuICBjb25zdCBncm91cHM6IElHcm91cGVkTm9kZXM8Uj4gPSBub2Rlcy5yZWR1Y2UoXG4gICAgKHByZXYsIG5vZGUsIGluZGV4KSA9PlxuICAgICAgKG5vZGVba2V5XSB8fCBbXSkucmVkdWNlKChncm91cCwgYmxhbmtOb2RlKSA9PiB7XG4gICAgICAgIC8vIHNraXAgbm9kZSBiYXNlZCBvbiBjb25kaXRpb25cbiAgICAgICAgaWYgKCFpbmNsdWRlTm9kZShibGFua05vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZVsnQGlkJ107XG4gICAgICAgIGNvbnN0IGdyb3VwZWRLZXkgPSBncm91cE5vZGVLZXkoYmxhbmtOb2RlKTtcbiAgICAgICAgZ3JvdXBbZ3JvdXBlZEtleV0gPSBncm91cFtncm91cGVkS2V5XSB8fCB7XG4gICAgICAgICAgdGVybTogYmxhbmtOb2RlLnRlcm0sXG4gICAgICAgICAgbWV0aG9kVGllcjogYmxhbmtOb2RlLm1ldGhvZFRpZXIsXG4gICAgICAgICAgbWV0aG9kVGllck9yZGVyOiBtZXRob2RUaWVyT3JkZXIoYmxhbmtOb2RlLm1ldGhvZFRpZXIpLFxuICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZXM6IHt9XG4gICAgICAgIH07XG4gICAgICAgIGdyb3VwW2dyb3VwZWRLZXldLnZhbHVlc1tub2RlSWRdID0gZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0gfHwgeyBpbmRleCwgbm9kZXM6IFtdLCB2YWx1ZTogW10gfTtcbiAgICAgICAgZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0ubm9kZSA9IGlzSGlnaGVyU3RhdGUoZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0ubm9kZSwgYmxhbmtOb2RlKVxuICAgICAgICAgID8gYmxhbmtOb2RlXG4gICAgICAgICAgOiBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS5ub2RlO1xuICAgICAgICBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS5ub2Rlcy5wdXNoKGJsYW5rTm9kZSk7XG4gICAgICAgIGdyb3VwW2dyb3VwZWRLZXldLnZhbHVlc1tub2RlSWRdLnZhbHVlID0gY29uY2F0QmxhbmtOb2RlVmFsdWUoXG4gICAgICAgICAgZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0udmFsdWUsXG4gICAgICAgICAgYmxhbmtOb2RlLnZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGdyb3VwcGVkVmFsdWVLZXlzLmZvckVhY2goYXJyYXlLZXkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZ2V0KGJsYW5rTm9kZSwgYXJyYXlLZXksIFtdKTtcbiAgICAgICAgICBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXVthcnJheUtleV0gPSBbXG4gICAgICAgICAgICAuLi4oZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF1bYXJyYXlLZXldIHx8IFtdKSxcbiAgICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSA/IG5ld1ZhbHVlIDogW25ld1ZhbHVlXSlcbiAgICAgICAgICBdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgICAgfSwgcHJldiksXG4gICAge30gYXMgSUdyb3VwZWROb2RlczxSPlxuICApO1xuXG4gIC8vIGNvbXBpbGUgb3JpZ2luYWwgdmFsdWVzXG4gIE9iamVjdC52YWx1ZXMoZ3JvdXBzKS5tYXAoZ3JvdXAgPT4ge1xuICAgIE9iamVjdC5rZXlzKGdyb3VwLnZhbHVlcykubWFwKG5vZGVJZCA9PiB7XG4gICAgICBjb25zdCB7IGluZGV4IH0gPSBncm91cC52YWx1ZXNbbm9kZUlkXTtcbiAgICAgIGNvbnN0IHRlcm1JZCA9IGdyb3VwLnRlcm1bJ0BpZCddO1xuICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IGdldChvcmlnaW5hbFZhbHVlcywgYFske2luZGV4fV0uJHtrZXl9YCwgW10pLmZpbHRlcihcbiAgICAgICAgKHZhbDogYW55KSA9PiB2YWwudGVybVsnQGlkJ10gPT09IHRlcm1JZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5hbFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvcmlnaW5hbFZhbHVlLnJlZHVjZSgoYXJyYXk6IGFueVtdLCBjdXJyOiBhbnkpID0+IGNvbmNhdEJsYW5rTm9kZVZhbHVlKGFycmF5LCBjdXJyLnZhbHVlKSwgW10pO1xuICAgICAgICBncm91cC5vcmlnaW5hbFZhbHVlc1tub2RlSWRdID0geyB2YWx1ZTogcHJvcGVydHlWYWx1ZSh2YWx1ZSwgdGVybUlkKSB9O1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gZ3JvdXBzO1xufTtcbiJdfQ==