@hestia-earth/ui-components 0.15.2 → 0.16.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 (30) hide show
  1. package/common/node-utils.d.ts +2 -0
  2. package/cycles/cycles-completeness/cycles-completeness.component.d.ts +22 -2
  3. package/cycles/cycles-completeness-logs/cycles-completeness-logs.component.d.ts +59 -0
  4. package/cycles/cycles-practices-logs/cycles-practices-logs.component.d.ts +10 -3
  5. package/cycles/cycles.module.d.ts +14 -13
  6. package/cycles/index.d.ts +1 -0
  7. package/esm2020/common/default.pipe.mjs +3 -9
  8. package/esm2020/common/node-utils.mjs +5 -1
  9. package/esm2020/common/utils.mjs +1 -1
  10. package/esm2020/cycles/cycles-activity-logs/cycles-activity-logs.component.mjs +1 -1
  11. package/esm2020/cycles/cycles-completeness/cycles-completeness.component.mjs +53 -14
  12. package/esm2020/cycles/cycles-completeness-logs/cycles-completeness-logs.component.mjs +35 -0
  13. package/esm2020/cycles/cycles-emissions-logs/cycles-emissions-logs.component.mjs +1 -1
  14. package/esm2020/cycles/cycles-practices-logs/cycles-practices-logs.component.mjs +31 -9
  15. package/esm2020/cycles/cycles.module.mjs +5 -1
  16. package/esm2020/cycles/index.mjs +2 -1
  17. package/esm2020/files/files-error.model.mjs +3 -3
  18. package/esm2020/impact-assessments/impact-assessments-products-logs/impact-assessments-products-logs.component.mjs +1 -1
  19. package/esm2020/node/node-logs-models/node-logs-models.component.mjs +47 -24
  20. package/esm2020/node/node-logs-models/node-logs-models.model.mjs +68 -16
  21. package/esm2020/node/node-missing-lookup-factors/node-missing-lookup-factors.component.mjs +6 -4
  22. package/esm2020/sites/sites-measurements-logs/sites-measurements-logs.component.mjs +1 -1
  23. package/fesm2015/hestia-earth-ui-components.mjs +235 -80
  24. package/fesm2015/hestia-earth-ui-components.mjs.map +1 -1
  25. package/fesm2020/hestia-earth-ui-components.mjs +234 -76
  26. package/fesm2020/hestia-earth-ui-components.mjs.map +1 -1
  27. package/node/node-logs-models/node-logs-models.component.d.ts +11 -6
  28. package/node/node-logs-models/node-logs-models.model.d.ts +27 -16
  29. package/node/node-missing-lookup-factors/node-missing-lookup-factors.component.d.ts +3 -2
  30. package/package.json +4 -4
@@ -1,4 +1,6 @@
1
1
  import { Term, ICycleJSONLD, ISiteJSONLD, IImpactAssessmentJSONLD, EmissionMethodTier, ITermJSONLD, Completeness, Infrastructure, Emission, Measurement, Practice, Product, Input, Property, Indicator } from '@hestia-earth/schema';
2
+ export declare const ignoreKeys: string[];
3
+ export declare const isValidKey: (key: string) => boolean;
2
4
  export declare const isMethodModelAllowed: (filterMethod?: Term) => (node: Indicator) => boolean;
3
5
  export declare enum NodeKeyState {
4
6
  added = "added",
@@ -1,15 +1,35 @@
1
+ import { OnChanges, SimpleChanges } from '@angular/core';
1
2
  import { DataState } from '@hestia-earth/api';
2
3
  import { ICycleJSONLD } from '@hestia-earth/schema';
3
4
  import * as i0 from "@angular/core";
4
- export declare class CyclesCompletenessComponent {
5
+ declare enum View {
6
+ table = "table",
7
+ logs = "logs"
8
+ }
9
+ export declare class CyclesCompletenessComponent implements OnChanges {
10
+ originalValues: ICycleJSONLD[];
5
11
  cycles: ICycleJSONLD[];
6
12
  dataState?: DataState;
7
13
  baseUrl: string;
8
14
  defaultLabel: (node?: any) => any;
9
15
  keyToLabel: (key: string) => string;
10
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;
11
23
  trackById(_index: number, item: ICycleJSONLD): string;
12
24
  get completenessKeys(): string[];
25
+ get isOriginal(): boolean;
26
+ private updateSelectedIndex;
27
+ selectIndex({ target: { value } }: {
28
+ target: {
29
+ value: any;
30
+ };
31
+ }): void;
13
32
  static ɵfac: i0.ɵɵFactoryDeclaration<CyclesCompletenessComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<CyclesCompletenessComponent, "he-cycles-completeness", never, { "cycles": "cycles"; "dataState": "dataState"; }, {}, never, never, false>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<CyclesCompletenessComponent, "he-cycles-completeness", never, { "originalValues": "originalValues"; "cycles": "cycles"; "dataState": "dataState"; }, {}, never, never, false>;
15
34
  }
35
+ export {};
@@ -0,0 +1,59 @@
1
+ import { DataState } from '@hestia-earth/api';
2
+ import { Completeness, NodeType } from '@hestia-earth/schema';
3
+ import * as i0 from "@angular/core";
4
+ export declare class CyclesCompletenessLogsComponent {
5
+ private cycle?;
6
+ originalValues?: Completeness;
7
+ recalculatedValues?: Completeness;
8
+ NodeType: typeof NodeType;
9
+ get node(): {
10
+ '@type': NodeType;
11
+ type: NodeType;
12
+ dataState: DataState;
13
+ description?: string;
14
+ treatment?: string;
15
+ commercialPracticeTreatment?: boolean;
16
+ endDate?: string;
17
+ startDate?: string;
18
+ startDateDefinition?: import("@hestia-earth/schema").CycleStartDateDefinition;
19
+ cycleDuration?: number;
20
+ site?: import("@hestia-earth/schema").Site;
21
+ otherSites?: import("@hestia-earth/schema").Site[];
22
+ siteDuration?: number;
23
+ otherSitesDuration?: number[];
24
+ functionalUnit?: import("@hestia-earth/schema").CycleFunctionalUnit;
25
+ functionalUnitDetails?: string;
26
+ numberOfCycles?: number;
27
+ numberOfReplications?: number;
28
+ sampleWeight?: number;
29
+ harvestedArea?: number;
30
+ defaultMethodClassification?: import("@hestia-earth/schema").CycleDefaultMethodClassification;
31
+ defaultMethodClassificationDescription?: string;
32
+ defaultSource?: import("@hestia-earth/schema").Source;
33
+ completeness?: Completeness;
34
+ practices?: import("@hestia-earth/schema").Practice[];
35
+ animals?: import("@hestia-earth/schema").Animal[];
36
+ inputs?: import("@hestia-earth/schema").Input[];
37
+ products?: import("@hestia-earth/schema").Product[];
38
+ transformations?: import("@hestia-earth/schema").Transformation[];
39
+ emissions?: import("@hestia-earth/schema").Emission[];
40
+ dataPrivate?: boolean;
41
+ originalId?: string;
42
+ schemaVersion?: string;
43
+ added?: string[];
44
+ addedVersion?: string[];
45
+ updated?: string[];
46
+ updatedVersion?: string[];
47
+ aggregated?: boolean;
48
+ aggregatedVersion?: string;
49
+ aggregatedQualityScore?: number;
50
+ aggregatedCycles?: import("@hestia-earth/schema").Cycle[];
51
+ aggregatedSources?: import("@hestia-earth/schema").Source[];
52
+ '@context': string | (string | import("@hestia-earth/schema").IContext)[];
53
+ '@id': string;
54
+ name: string;
55
+ };
56
+ get logsKey(): any;
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<CyclesCompletenessLogsComponent, never>;
58
+ static ɵcmp: i0.ɵɵComponentDeclaration<CyclesCompletenessLogsComponent, "he-cycles-completeness-logs", never, { "cycle": "cycle"; "originalValues": "originalValues"; "recalculatedValues": "recalculatedValues"; }, {}, never, never, false>;
59
+ }
@@ -1,12 +1,19 @@
1
+ import { OnInit } from '@angular/core';
1
2
  import { DataState } from '@hestia-earth/api';
2
- import { Practice, ITermJSONLD, NodeType } from '@hestia-earth/schema';
3
+ import { Practice, NodeType, ITermJSONLD, TermTermType } from '@hestia-earth/schema';
4
+ import { HeSearchService } from '../../search/search.service';
3
5
  import * as i0 from "@angular/core";
4
- export declare class CyclesPracticesLogsComponent {
6
+ export declare class CyclesPracticesLogsComponent implements OnInit {
7
+ private searchService;
5
8
  private cycle?;
6
9
  originalValues: Practice[];
7
10
  recalculatedValues: Practice[];
11
+ loading: boolean;
8
12
  NodeType: typeof NodeType;
9
- models: ITermJSONLD[];
13
+ practices: ITermJSONLD[];
14
+ filterTermTypes: TermTermType[];
15
+ constructor(searchService: HeSearchService);
16
+ ngOnInit(): Promise<void>;
10
17
  get node(): {
11
18
  '@type': NodeType;
12
19
  type: NodeType;
@@ -2,20 +2,21 @@ import * as i0 from "@angular/core";
2
2
  import * as i1 from "./cycles-activity/cycles-activity.component";
3
3
  import * as i2 from "./cycles-activity-logs/cycles-activity-logs.component";
4
4
  import * as i3 from "./cycles-completeness/cycles-completeness.component";
5
- import * as i4 from "./cycles-emissions/cycles-emissions.component";
6
- import * as i5 from "./cycles-emissions-chart/cycles-emissions-chart.component";
7
- import * as i6 from "./cycles-emissions-logs/cycles-emissions-logs.component";
8
- import * as i7 from "./cycles-functional-unit-measure/cycles-functional-unit-measure.component";
9
- import * as i8 from "./cycles-practices/cycles-practices.component";
10
- import * as i9 from "./cycles-practices-logs/cycles-practices-logs.component";
11
- import * as i10 from "./cycles-practices-timeline/cycles-practices-timeline.component";
12
- import * as i11 from "./cycles-result/cycles-result.component";
13
- import * as i12 from "@angular/common";
14
- import * as i13 from "@angular/forms";
15
- import * as i14 from "../common/common.module";
16
- import * as i15 from "../node/node.module";
5
+ import * as i4 from "./cycles-completeness-logs/cycles-completeness-logs.component";
6
+ import * as i5 from "./cycles-emissions/cycles-emissions.component";
7
+ import * as i6 from "./cycles-emissions-chart/cycles-emissions-chart.component";
8
+ import * as i7 from "./cycles-emissions-logs/cycles-emissions-logs.component";
9
+ import * as i8 from "./cycles-functional-unit-measure/cycles-functional-unit-measure.component";
10
+ import * as i9 from "./cycles-practices/cycles-practices.component";
11
+ import * as i10 from "./cycles-practices-logs/cycles-practices-logs.component";
12
+ import * as i11 from "./cycles-practices-timeline/cycles-practices-timeline.component";
13
+ import * as i12 from "./cycles-result/cycles-result.component";
14
+ import * as i13 from "@angular/common";
15
+ import * as i14 from "@angular/forms";
16
+ import * as i15 from "../common/common.module";
17
+ import * as i16 from "../node/node.module";
17
18
  export declare class HeCyclesModule {
18
19
  static ɵfac: i0.ɵɵFactoryDeclaration<HeCyclesModule, never>;
19
- static ɵmod: i0.ɵɵNgModuleDeclaration<HeCyclesModule, [typeof i1.CyclesActivityComponent, typeof i2.CyclesActivityLogsComponent, typeof i3.CyclesCompletenessComponent, typeof i4.CyclesEmissionsComponent, typeof i5.CyclesEmissionsChartComponent, typeof i6.CyclesEmissionsLogsComponent, typeof i7.CyclesFunctionalUnitMeasureComponent, typeof i8.CyclesPracticesComponent, typeof i9.CyclesPracticesLogsComponent, typeof i10.CyclesPracticesTimelineComponent, typeof i11.CyclesResultComponent], [typeof i12.CommonModule, typeof i13.FormsModule, typeof i14.HeCommonModule, typeof i15.HeNodeModule], [typeof i1.CyclesActivityComponent, typeof i2.CyclesActivityLogsComponent, typeof i3.CyclesCompletenessComponent, typeof i4.CyclesEmissionsComponent, typeof i5.CyclesEmissionsChartComponent, typeof i6.CyclesEmissionsLogsComponent, typeof i7.CyclesFunctionalUnitMeasureComponent, typeof i8.CyclesPracticesComponent, typeof i9.CyclesPracticesLogsComponent, typeof i10.CyclesPracticesTimelineComponent, typeof i11.CyclesResultComponent]>;
20
+ static ɵmod: i0.ɵɵNgModuleDeclaration<HeCyclesModule, [typeof i1.CyclesActivityComponent, typeof i2.CyclesActivityLogsComponent, typeof i3.CyclesCompletenessComponent, typeof i4.CyclesCompletenessLogsComponent, typeof i5.CyclesEmissionsComponent, typeof i6.CyclesEmissionsChartComponent, typeof i7.CyclesEmissionsLogsComponent, typeof i8.CyclesFunctionalUnitMeasureComponent, typeof i9.CyclesPracticesComponent, typeof i10.CyclesPracticesLogsComponent, typeof i11.CyclesPracticesTimelineComponent, typeof i12.CyclesResultComponent], [typeof i13.CommonModule, typeof i14.FormsModule, typeof i15.HeCommonModule, typeof i16.HeNodeModule], [typeof i1.CyclesActivityComponent, typeof i2.CyclesActivityLogsComponent, typeof i3.CyclesCompletenessComponent, typeof i4.CyclesCompletenessLogsComponent, typeof i5.CyclesEmissionsComponent, typeof i6.CyclesEmissionsChartComponent, typeof i7.CyclesEmissionsLogsComponent, typeof i8.CyclesFunctionalUnitMeasureComponent, typeof i9.CyclesPracticesComponent, typeof i10.CyclesPracticesLogsComponent, typeof i11.CyclesPracticesTimelineComponent, typeof i12.CyclesResultComponent]>;
20
21
  static ɵinj: i0.ɵɵInjectorDeclaration<HeCyclesModule>;
21
22
  }
package/cycles/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export * from './cycles.module';
3
3
  export { CyclesActivityComponent } from './cycles-activity/cycles-activity.component';
4
4
  export { CyclesActivityLogsComponent } from './cycles-activity-logs/cycles-activity-logs.component';
5
5
  export { CyclesCompletenessComponent } from './cycles-completeness/cycles-completeness.component';
6
+ export { CyclesCompletenessLogsComponent } from './cycles-completeness-logs/cycles-completeness-logs.component';
6
7
  export { CyclesEmissionsChartComponent } from './cycles-emissions-chart/cycles-emissions-chart.component';
7
8
  export { CyclesEmissionsLogsComponent } from './cycles-emissions-logs/cycles-emissions-logs.component';
8
9
  export { CyclesEmissionsComponent } from './cycles-emissions/cycles-emissions.component';
@@ -1,15 +1,9 @@
1
1
  import { Pipe } from '@angular/core';
2
+ import { isUndefined } from '@hestia-earth/utils';
2
3
  import * as i0 from "@angular/core";
3
- const shouldDefault = {
4
- string: (value) => !value,
5
- number: (value) => !value && value !== 0,
6
- boolean: (value) => !value,
7
- object: (value) => !value || !Object.keys(value).length,
8
- undefined: () => true
9
- };
10
4
  export class DefaultPipe {
11
5
  transform(value, defaultValue) {
12
- return shouldDefault[typeof value](value) ? defaultValue : value;
6
+ return isUndefined(value) ? defaultValue : value;
13
7
  }
14
8
  }
15
9
  DefaultPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: DefaultPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
@@ -20,4 +14,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
20
14
  name: 'default'
21
15
  }]
22
16
  }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1vbi9kZWZhdWx0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBRXBELE1BQU0sYUFBYSxHQUFHO0lBQ3BCLE1BQU0sRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLO0lBQ2pDLE1BQU0sRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUM7SUFDaEQsT0FBTyxFQUFFLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUs7SUFDbkMsTUFBTSxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTTtJQUM1RCxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtDQUN0QixDQUFDO0FBS0YsTUFBTSxPQUFPLFdBQVc7SUFDdEIsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZO1FBQzNCLE9BQU8sYUFBYSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ25FLENBQUM7O3dHQUhVLFdBQVc7c0dBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUh2QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxTQUFTO2lCQUNoQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuY29uc3Qgc2hvdWxkRGVmYXVsdCA9IHtcbiAgc3RyaW5nOiAodmFsdWU6IHN0cmluZykgPT4gIXZhbHVlLFxuICBudW1iZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiAhdmFsdWUgJiYgdmFsdWUgIT09IDAsXG4gIGJvb2xlYW46ICh2YWx1ZTogYm9vbGVhbikgPT4gIXZhbHVlLFxuICBvYmplY3Q6ICh2YWx1ZTogYW55KSA9PiAhdmFsdWUgfHwgIU9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgsXG4gIHVuZGVmaW5lZDogKCkgPT4gdHJ1ZVxufTtcblxuQFBpcGUoe1xuICBuYW1lOiAnZGVmYXVsdCdcbn0pXG5leHBvcnQgY2xhc3MgRGVmYXVsdFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gc2hvdWxkRGVmYXVsdFt0eXBlb2YgdmFsdWVdKHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xuICB9XG59XG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1vbi9kZWZhdWx0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUtsRCxNQUFNLE9BQU8sV0FBVztJQUN0QixTQUFTLENBQUMsS0FBSyxFQUFFLFlBQVk7UUFDM0IsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ25ELENBQUM7O3dHQUhVLFdBQVc7c0dBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUh2QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxTQUFTO2lCQUNoQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2RlZmF1bHQnXG59KVxuZXhwb3J0IGNsYXNzIERlZmF1bHRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xuICB9XG59XG4iXX0=
@@ -2,6 +2,10 @@ 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 const ignoreKeys = [
6
+ '@type', 'type', 'added', 'updated', 'addedVersion', 'updatedVersion'
7
+ ];
8
+ export const isValidKey = (key) => !ignoreKeys.includes(key);
5
9
  export const isMethodModelAllowed = (filterMethod) => (node) => node.methodModel?.['@id'] === (filterMethod ? filterMethod['@id'] : getDefaultModelId(node.term?.['@id']));
6
10
  export var NodeKeyState;
7
11
  (function (NodeKeyState) {
@@ -81,4 +85,4 @@ export const groupNodesByTerm = (nodes = [], key, originalValues = [], includeNo
81
85
  });
82
86
  return groups;
83
87
  };
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vbm9kZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxFQUNxRCxrQkFBa0IsRUFFN0UsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxZQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWUsRUFBRSxFQUFFLENBQy9FLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTdHLE1BQU0sQ0FBTixJQUFZLFlBTVg7QUFORCxXQUFZLFlBQVk7SUFDdEIsK0JBQWUsQ0FBQTtJQUNmLG1DQUFtQixDQUFBO0lBQ25CLHlDQUF5QixDQUFBO0lBQ3pCLG1DQUFtQixDQUFBO0lBQ25CLHVDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFOVyxZQUFZLEtBQVosWUFBWSxRQU12QjtBQUlELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQWUsRUFBRSxHQUFXLEVBQUUsS0FBbUIsRUFBRSxFQUFFLENBQUMsQ0FDNUUsS0FBSyxJQUFJLElBQUssSUFBSSxDQUNoQixPQUFPLElBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUNqQyxJQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNkLElBQUss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LENBQUMsQ0FBQztZQUNwSCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBWSxFQUFFLElBQVMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQ2xGLEtBQUssRUFDTCxJQUFJLENBQUMsS0FBSyxDQUNYLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ1AsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7YUFDeEU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCB7XG4gIFRlcm0sIElDeWNsZUpTT05MRCwgSVNpdGVKU09OTEQsIElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBFbWlzc2lvbk1ldGhvZFRpZXIsIElUZXJtSlNPTkxELFxuICBDb21wbGV0ZW5lc3MsIEluZnJhc3RydWN0dXJlLCBFbWlzc2lvbiwgTWVhc3VyZW1lbnQsIFByYWN0aWNlLCBQcm9kdWN0LCBJbnB1dCwgUHJvcGVydHksIEluZGljYXRvclxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscy9kaXN0L3Rlcm0nO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE1vZGVsSWQgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2dsb3NzYXJ5JztcblxuZXhwb3J0IGNvbnN0IGlzTWV0aG9kTW9kZWxBbGxvd2VkID0gKGZpbHRlck1ldGhvZD86IFRlcm0pID0+IChub2RlOiBJbmRpY2F0b3IpID0+XG4gIG5vZGUubWV0aG9kTW9kZWw/LlsnQGlkJ10gPT09IChmaWx0ZXJNZXRob2QgPyBmaWx0ZXJNZXRob2RbJ0BpZCddIDogZ2V0RGVmYXVsdE1vZGVsSWQobm9kZS50ZXJtPy5bJ0BpZCddKSk7XG5cbmV4cG9ydCBlbnVtIE5vZGVLZXlTdGF0ZSB7XG4gIGFkZGVkID0gJ2FkZGVkJyxcbiAgdXBkYXRlZCA9ICd1cGRhdGVkJyxcbiAgYWdncmVnYXRlZCA9ICdhZ2dyZWdhdGVkJyxcbiAgZGVsZXRlZCA9ICdkZWxldGVkJyxcbiAgdW5jaGFuZ2VkID0gJ3VuY2hhbmdlZCdcbn1cblxuZXhwb3J0IHR5cGUgYmxhbmtOb2RlID0gQ29tcGxldGVuZXNzIHwgSW5mcmFzdHJ1Y3R1cmUgfCBJbnB1dCB8IEVtaXNzaW9uIHwgTWVhc3VyZW1lbnQgfCBQcmFjdGljZSB8IFByb2R1Y3QgfCBQcm9wZXJ0eTtcblxuZXhwb3J0IGNvbnN0IGlzU3RhdGUgPSAobm9kZTogYmxhbmtOb2RlLCBrZXk6IHN0cmluZywgc3RhdGU6IE5vZGVLZXlTdGF0ZSkgPT4gKFxuICBzdGF0ZSBpbiBub2RlISAmJiAoXG4gICAgdHlwZW9mIG5vZGUhW3N0YXRlXSA9PT0gJ2Jvb2xlYW4nID9cbiAgICAgIG5vZGUhW3N0YXRlXSA6XG4gICAgICBub2RlIVtzdGF0ZV0uaW5jbHVkZXMoa2V5KVxuICApXG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cGVkTm9kZTxUPiB7XG4gIC8vIHN0b3JlIHRoZSBub2RlIHdpdGggdGhlIGhpZ2hlc3QgXCJzdGF0ZVwiXG4gIG5vZGU6IFQ7XG4gIG5vZGVzOiBUW107XG4gIGluZGV4OiBudW1iZXI7XG4gIHZhbHVlOiBudW1iZXJbXTtcbiAgZGF0ZXM/OiBhbnlbXTtcbiAgc2Q/OiBudW1iZXJbXTtcbiAgbWluPzogbnVtYmVyW107XG4gIG1heD86IG51bWJlcltdO1xuICBpbnB1dHM/OiBhbnlbXTtcbiAgZGVwdGhVcHBlcj86IG51bWJlcltdO1xuICBkZXB0aExvd2VyPzogbnVtYmVyW107XG4gIHN0YXJ0RGF0ZT86IHN0cmluZ1tdO1xuICBlbmREYXRlPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cGVkTm9kZXNWYWx1ZXM8VD4ge1xuICBbbm9kZUlkOiBzdHJpbmddOiBJR3JvdXBlZE5vZGU8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyb3VwZWROb2Rlc1ZhbHVlPFQ+IHtcbiAgdGVybTogSVRlcm1KU09OTEQ7XG4gIG1ldGhvZFRpZXI/OiBFbWlzc2lvbk1ldGhvZFRpZXI7XG4gIC8qKlxuICAgKiBFbmFibGUgb3JkZXJpbmcgbnkgbWV0aG9kVGllclxuICAgKi9cbiAgbWV0aG9kVGllck9yZGVyOiBudW1iZXI7XG4gIHZhbHVlczogSUdyb3VwZWROb2Rlc1ZhbHVlczxUPjtcbiAgb3JpZ2luYWxWYWx1ZXM6IHtcbiAgICBbbm9kZUlkOiBzdHJpbmddOiB7XG4gICAgICB2YWx1ZTogbnVtYmVyO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cGVkTm9kZXM8VD4ge1xuICBbdGVybUlkOiBzdHJpbmddOiBJR3JvdXBlZE5vZGVzVmFsdWU8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyb3VwZWRLZXlzPFQ+IHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBJR3JvdXBlZE5vZGVzVmFsdWU8VD47XG59XG5cbmV4cG9ydCBjb25zdCBncm91cHBlZEtleXMgPSA8VD4odmFsdWVzOiB7W2tleTogc3RyaW5nXTogVH0pOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogVH1bXSA9PlxuICBPYmplY3QuZW50cmllcyh2YWx1ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKTtcblxuY29uc3QgY29uY2F0QmxhbmtOb2RlVmFsdWUgPSAodmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSkgPT4ge1xuICBjb25zdCB2YWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gIGNvbnN0IG5ld1ZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSA/IG5ld1ZhbHVlIDogW25ld1ZhbHVlXTtcbiAgcmV0dXJuIFsuLi52YWx1ZUFycmF5LCAuLi5uZXdWYWx1ZUFycmF5XTtcbn07XG5cbmV4cG9ydCBjb25zdCBtZXRob2RUaWVyT3JkZXIgPSAobWV0aG9kVGllcjogRW1pc3Npb25NZXRob2RUaWVyKSA9PiBbXG4gIEVtaXNzaW9uTWV0aG9kVGllci5tZWFzdXJlZCxcbiAgRW1pc3Npb25NZXRob2RUaWVyWyd0aWVyIDMnXSxcbiAgRW1pc3Npb25NZXRob2RUaWVyWyd0aWVyIDInXSxcbiAgRW1pc3Npb25NZXRob2RUaWVyWyd0aWVyIDEnXSxcbiAgRW1pc3Npb25NZXRob2RUaWVyLmJhY2tncm91bmRcbl0uaW5kZXhPZihtZXRob2RUaWVyKTtcblxuZXhwb3J0IGNvbnN0IGdyb3VwcGVkVmFsdWVLZXlzID0gW1xuICAnZGF0ZXMnLCAnc2QnLCAnbWluJywgJ21heCcsICdpbnB1dHMnLCAnZGVwdGhVcHBlcicsICdkZXB0aExvd2VyJywgJ3N0YXJ0RGF0ZScsICdlbmREYXRlJyxcbiAgJ21ldGhvZFRpZXInLCAnbWV0aG9kTW9kZWwnXG5dO1xuXG5jb25zdCBpc0hpZ2hlclN0YXRlID0gKHNvdXJjZU5vZGU6IGJsYW5rTm9kZSwgbmV3Tm9kZTogYmxhbmtOb2RlKSA9PlxuICAhc291cmNlTm9kZSB8fFxuICBpc1N0YXRlKG5ld05vZGUsICd2YWx1ZScsIE5vZGVLZXlTdGF0ZS51cGRhdGVkKSB8fFxuICAoIWlzU3RhdGUoc291cmNlTm9kZSwgJ3ZhbHVlJywgTm9kZUtleVN0YXRlLnVwZGF0ZWQpICYmIGlzU3RhdGUobmV3Tm9kZSwgJ3ZhbHVlJywgTm9kZUtleVN0YXRlLmFkZGVkKSk7XG5cbmNvbnN0IGdyb3VwTm9kZUtleSA9ICh7IHRlcm0gfTogYW55KSA9PiB0ZXJtPy5uYW1lIHx8IHRlcm0/LlsnQGlkJ107XG5cbmV4cG9ydCBjb25zdCBncm91cE5vZGVzQnlUZXJtID0gPFQgZXh0ZW5kcyBJQ3ljbGVKU09OTEQgfCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCB8IElTaXRlSlNPTkxELCBSPihcbiAgbm9kZXM6IFRbXSA9IFtdLFxuICBrZXk6ICdlbmRwb2ludHMnIHwgJ2ltcGFjdHMnIHwgJ2VtaXNzaW9uc1Jlc291cmNlVXNlJyB8ICdpbnB1dHMnIHwgJ3Byb2R1Y3RzJyB8ICdwcmFjdGljZXMnIHwgJ2VtaXNzaW9ucycgfCAnbWVhc3VyZW1lbnRzJyxcbiAgb3JpZ2luYWxWYWx1ZXM6IFRbXSA9IFtdLFxuICBpbmNsdWRlTm9kZSA9IChub2RlOiBhbnkpID0+IHRydWVcbik6IElHcm91cGVkTm9kZXM8Uj4gPT4ge1xuICBjb25zdCBncm91cHM6IElHcm91cGVkTm9kZXM8Uj4gPSBub2Rlcy5yZWR1Y2UoKHByZXYsIG5vZGUsIGluZGV4KSA9PiAobm9kZVtrZXldIHx8IFtdKS5yZWR1Y2UoKGdyb3VwLCBibGFua05vZGUpID0+IHtcbiAgICAvLyBza2lwIG5vZGUgYmFzZWQgb24gY29uZGl0aW9uXG4gICAgaWYgKCFpbmNsdWRlTm9kZShibGFua05vZGUpKSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUlkID0gbm9kZVsnQGlkJ107XG4gICAgY29uc3QgZ3JvdXBlZEtleSA9IGdyb3VwTm9kZUtleShibGFua05vZGUpO1xuICAgIGdyb3VwW2dyb3VwZWRLZXldID0gZ3JvdXBbZ3JvdXBlZEtleV0gfHwge1xuICAgICAgdGVybTogYmxhbmtOb2RlLnRlcm0sXG4gICAgICBtZXRob2RUaWVyOiBibGFua05vZGUubWV0aG9kVGllcixcbiAgICAgIG1ldGhvZFRpZXJPcmRlcjogbWV0aG9kVGllck9yZGVyKGJsYW5rTm9kZS5tZXRob2RUaWVyKSxcbiAgICAgIHZhbHVlczoge30sXG4gICAgICBvcmlnaW5hbFZhbHVlczoge31cbiAgICB9O1xuICAgIGdyb3VwW2dyb3VwZWRLZXldLnZhbHVlc1tub2RlSWRdID0gZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0gfHwgeyBpbmRleCwgbm9kZXM6IFtdLCB2YWx1ZTogW10gfTtcbiAgICBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS5ub2RlID0gaXNIaWdoZXJTdGF0ZShncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS5ub2RlLCBibGFua05vZGUpXG4gICAgICA/IGJsYW5rTm9kZVxuICAgICAgOiBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS5ub2RlO1xuICAgIGdyb3VwW2dyb3VwZWRLZXldLnZhbHVlc1tub2RlSWRdLm5vZGVzLnB1c2goYmxhbmtOb2RlKTtcbiAgICBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS52YWx1ZSA9IGNvbmNhdEJsYW5rTm9kZVZhbHVlKFxuICAgICAgZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0udmFsdWUsXG4gICAgICBibGFua05vZGUudmFsdWVcbiAgICApO1xuICAgIGdyb3VwcGVkVmFsdWVLZXlzLmZvckVhY2goYXJyYXlLZXkgPT4ge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBnZXQoYmxhbmtOb2RlLCBhcnJheUtleSwgW10pO1xuICAgICAgZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF1bYXJyYXlLZXldID0gW1xuICAgICAgICAuLi4oZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF1bYXJyYXlLZXldIHx8IFtdKSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpID8gbmV3VmFsdWUgOiBbbmV3VmFsdWVdKVxuICAgICAgXTtcbiAgICB9KTtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH0sIHByZXYpLCB7fSBhcyBJR3JvdXBlZE5vZGVzPFI+KTtcblxuICAvLyBjb21waWxlIG9yaWdpbmFsIHZhbHVlc1xuICBPYmplY3QudmFsdWVzKGdyb3VwcykubWFwKGdyb3VwID0+IHtcbiAgICBPYmplY3Qua2V5cyhncm91cC52YWx1ZXMpLm1hcChub2RlSWQgPT4ge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gZ3JvdXAudmFsdWVzW25vZGVJZF07XG4gICAgICBjb25zdCB0ZXJtSWQgPSBncm91cC50ZXJtWydAaWQnXTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSBnZXQob3JpZ2luYWxWYWx1ZXMsIGBbJHtpbmRleH1dLiR7a2V5fWAsIFtdKS5maWx0ZXIoKHZhbDogYW55KSA9PiB2YWwudGVybVsnQGlkJ10gPT09IHRlcm1JZCk7XG4gICAgICBpZiAob3JpZ2luYWxWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3JpZ2luYWxWYWx1ZS5yZWR1Y2UoKGFycmF5OiBhbnlbXSwgY3VycjogYW55KSA9PiBjb25jYXRCbGFua05vZGVWYWx1ZShcbiAgICAgICAgICBhcnJheSxcbiAgICAgICAgICBjdXJyLnZhbHVlXG4gICAgICAgICksIFtdKTtcbiAgICAgICAgZ3JvdXAub3JpZ2luYWxWYWx1ZXNbbm9kZUlkXSA9IHsgdmFsdWU6IHByb3BlcnR5VmFsdWUodmFsdWUsIHRlcm1JZCkgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn07XG4iXX0=
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vbm9kZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxFQUNxRCxrQkFBa0IsRUFFN0UsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCO0NBQ3RFLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVyRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFlBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBZSxFQUFFLEVBQUUsQ0FDL0UsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFN0csTUFBTSxDQUFOLElBQVksWUFNWDtBQU5ELFdBQVksWUFBWTtJQUN0QiwrQkFBZSxDQUFBO0lBQ2YsbUNBQW1CLENBQUE7SUFDbkIseUNBQXlCLENBQUE7SUFDekIsbUNBQW1CLENBQUE7SUFDbkIsdUNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQU5XLFlBQVksS0FBWixZQUFZLFFBTXZC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R0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ3BILElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFZLEVBQUUsSUFBUyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FDbEYsS0FBSyxFQUNMLElBQUksQ0FBQyxLQUFLLENBQ1gsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDUCxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzthQUN4RTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuaW1wb3J0IHtcbiAgVGVybSwgSUN5Y2xlSlNPTkxELCBJU2l0ZUpTT05MRCwgSUltcGFjdEFzc2Vzc21lbnRKU09OTEQsIEVtaXNzaW9uTWV0aG9kVGllciwgSVRlcm1KU09OTEQsXG4gIENvbXBsZXRlbmVzcywgSW5mcmFzdHJ1Y3R1cmUsIEVtaXNzaW9uLCBNZWFzdXJlbWVudCwgUHJhY3RpY2UsIFByb2R1Y3QsIElucHV0LCBQcm9wZXJ0eSwgSW5kaWNhdG9yXG59IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5pbXBvcnQgeyBnZXREZWZhdWx0TW9kZWxJZCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvZ2xvc3NhcnknO1xuXG5leHBvcnQgY29uc3QgaWdub3JlS2V5cyA9IFtcbiAgJ0B0eXBlJywgJ3R5cGUnLCAnYWRkZWQnLCAndXBkYXRlZCcsICdhZGRlZFZlcnNpb24nLCAndXBkYXRlZFZlcnNpb24nXG5dO1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZEtleSA9IChrZXk6IHN0cmluZykgPT4gIWlnbm9yZUtleXMuaW5jbHVkZXMoa2V5KTtcblxuZXhwb3J0IGNvbnN0IGlzTWV0aG9kTW9kZWxBbGxvd2VkID0gKGZpbHRlck1ldGhvZD86IFRlcm0pID0+IChub2RlOiBJbmRpY2F0b3IpID0+XG4gIG5vZGUubWV0aG9kTW9kZWw/LlsnQGlkJ10gPT09IChmaWx0ZXJNZXRob2QgPyBmaWx0ZXJNZXRob2RbJ0BpZCddIDogZ2V0RGVmYXVsdE1vZGVsSWQobm9kZS50ZXJtPy5bJ0BpZCddKSk7XG5cbmV4cG9ydCBlbnVtIE5vZGVLZXlTdGF0ZSB7XG4gIGFkZGVkID0gJ2FkZGVkJyxcbiAgdXBkYXRlZCA9ICd1cGRhdGVkJyxcbiAgYWdncmVnYXRlZCA9ICdhZ2dyZWdhdGVkJyxcbiAgZGVsZXRlZCA9ICdkZWxldGVkJyxcbiAgdW5jaGFuZ2VkID0gJ3VuY2hhbmdlZCdcbn1cblxuZXhwb3J0IHR5cGUgYmxhbmtOb2RlID0gQ29tcGxldGVuZXNzIHwgSW5mcmFzdHJ1Y3R1cmUgfCBJbnB1dCB8IEVtaXNzaW9uIHwgTWVhc3VyZW1lbnQgfCBQcmFjdGljZSB8IFByb2R1Y3QgfCBQcm9wZXJ0eTtcblxuZXhwb3J0IGNvbnN0IGlzU3RhdGUgPSAobm9kZTogYmxhbmtOb2RlLCBrZXk6IHN0cmluZywgc3RhdGU6IE5vZGVLZXlTdGF0ZSkgPT4gKFxuICBzdGF0ZSBpbiBub2RlISAmJiAoXG4gICAgdHlwZW9mIG5vZGUhW3N0YXRlXSA9PT0gJ2Jvb2xlYW4nID9cbiAgICAgIG5vZGUhW3N0YXRlXSA6XG4gICAgICBub2RlIVtzdGF0ZV0uaW5jbHVkZXMoa2V5KVxuICApXG4pO1xuXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cGVkTm9kZTxUPiB7XG4gIC8vIHN0b3JlIHRoZSBub2RlIHdpdGggdGhlIGhpZ2hlc3QgXCJzdGF0ZVwiXG4gIG5vZGU6IFQ7XG4gIG5vZGVzOiBUW107XG4gIGluZGV4OiBudW1iZXI7XG4gIHZhbHVlOiBudW1iZXJbXTtcbiAgZGF0ZXM/OiBhbnlbXTtcbiAgc2Q/OiBudW1iZXJbXTtcbiAgbWluPzogbnVtYmVyW107XG4gIG1heD86IG51bWJlcltdO1xuICBpbnB1dHM/OiBhbnlbXTtcbiAgZGVwdGhVcHBlcj86IG51bWJlcltdO1xuICBkZXB0aExvd2VyPzogbnVtYmVyW107XG4gIHN0YXJ0RGF0ZT86IHN0cmluZ1tdO1xuICBlbmREYXRlPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cGVkTm9kZXNWYWx1ZXM8VD4ge1xuICBbbm9kZUlkOiBzdHJpbmddOiBJR3JvdXBlZE5vZGU8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyb3VwZWROb2Rlc1ZhbHVlPFQ+IHtcbiAgdGVybTogSVRlcm1KU09OTEQ7XG4gIG1ldGhvZFRpZXI/OiBFbWlzc2lvbk1ldGhvZFRpZXI7XG4gIC8qKlxuICAgKiBFbmFibGUgb3JkZXJpbmcgbnkgbWV0aG9kVGllclxuICAgKi9cbiAgbWV0aG9kVGllck9yZGVyOiBudW1iZXI7XG4gIHZhbHVlczogSUdyb3VwZWROb2Rlc1ZhbHVlczxUPjtcbiAgb3JpZ2luYWxWYWx1ZXM6IHtcbiAgICBbbm9kZUlkOiBzdHJpbmddOiB7XG4gICAgICB2YWx1ZTogbnVtYmVyO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cGVkTm9kZXM8VD4ge1xuICBbdGVybUlkOiBzdHJpbmddOiBJR3JvdXBlZE5vZGVzVmFsdWU8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyb3VwZWRLZXlzPFQ+IHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBJR3JvdXBlZE5vZGVzVmFsdWU8VD47XG59XG5cbmV4cG9ydCBjb25zdCBncm91cHBlZEtleXMgPSA8VD4odmFsdWVzOiB7W2tleTogc3RyaW5nXTogVH0pOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogVH1bXSA9PlxuICBPYmplY3QuZW50cmllcyh2YWx1ZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKTtcblxuY29uc3QgY29uY2F0QmxhbmtOb2RlVmFsdWUgPSAodmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSkgPT4ge1xuICBjb25zdCB2YWx1ZUFycmF5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gIGNvbnN0IG5ld1ZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSA/IG5ld1ZhbHVlIDogW25ld1ZhbHVlXTtcbiAgcmV0dXJuIFsuLi52YWx1ZUFycmF5LCAuLi5uZXdWYWx1ZUFycmF5XTtcbn07XG5cbmV4cG9ydCBjb25zdCBtZXRob2RUaWVyT3JkZXIgPSAobWV0aG9kVGllcjogRW1pc3Npb25NZXRob2RUaWVyKSA9PiBbXG4gIEVtaXNzaW9uTWV0aG9kVGllci5tZWFzdXJlZCxcbiAgRW1pc3Npb25NZXRob2RUaWVyWyd0aWVyIDMnXSxcbiAgRW1pc3Npb25NZXRob2RUaWVyWyd0aWVyIDInXSxcbiAgRW1pc3Npb25NZXRob2RUaWVyWyd0aWVyIDEnXSxcbiAgRW1pc3Npb25NZXRob2RUaWVyLmJhY2tncm91bmRcbl0uaW5kZXhPZihtZXRob2RUaWVyKTtcblxuZXhwb3J0IGNvbnN0IGdyb3VwcGVkVmFsdWVLZXlzID0gW1xuICAnZGF0ZXMnLCAnc2QnLCAnbWluJywgJ21heCcsICdpbnB1dHMnLCAnZGVwdGhVcHBlcicsICdkZXB0aExvd2VyJywgJ3N0YXJ0RGF0ZScsICdlbmREYXRlJyxcbiAgJ21ldGhvZFRpZXInLCAnbWV0aG9kTW9kZWwnXG5dO1xuXG5jb25zdCBpc0hpZ2hlclN0YXRlID0gKHNvdXJjZU5vZGU6IGJsYW5rTm9kZSwgbmV3Tm9kZTogYmxhbmtOb2RlKSA9PlxuICAhc291cmNlTm9kZSB8fFxuICBpc1N0YXRlKG5ld05vZGUsICd2YWx1ZScsIE5vZGVLZXlTdGF0ZS51cGRhdGVkKSB8fFxuICAoIWlzU3RhdGUoc291cmNlTm9kZSwgJ3ZhbHVlJywgTm9kZUtleVN0YXRlLnVwZGF0ZWQpICYmIGlzU3RhdGUobmV3Tm9kZSwgJ3ZhbHVlJywgTm9kZUtleVN0YXRlLmFkZGVkKSk7XG5cbmNvbnN0IGdyb3VwTm9kZUtleSA9ICh7IHRlcm0gfTogYW55KSA9PiB0ZXJtPy5uYW1lIHx8IHRlcm0/LlsnQGlkJ107XG5cbmV4cG9ydCBjb25zdCBncm91cE5vZGVzQnlUZXJtID0gPFQgZXh0ZW5kcyBJQ3ljbGVKU09OTEQgfCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCB8IElTaXRlSlNPTkxELCBSPihcbiAgbm9kZXM6IFRbXSA9IFtdLFxuICBrZXk6ICdlbmRwb2ludHMnIHwgJ2ltcGFjdHMnIHwgJ2VtaXNzaW9uc1Jlc291cmNlVXNlJyB8ICdpbnB1dHMnIHwgJ3Byb2R1Y3RzJyB8ICdwcmFjdGljZXMnIHwgJ2VtaXNzaW9ucycgfCAnbWVhc3VyZW1lbnRzJyxcbiAgb3JpZ2luYWxWYWx1ZXM6IFRbXSA9IFtdLFxuICBpbmNsdWRlTm9kZSA9IChub2RlOiBhbnkpID0+IHRydWVcbik6IElHcm91cGVkTm9kZXM8Uj4gPT4ge1xuICBjb25zdCBncm91cHM6IElHcm91cGVkTm9kZXM8Uj4gPSBub2Rlcy5yZWR1Y2UoKHByZXYsIG5vZGUsIGluZGV4KSA9PiAobm9kZVtrZXldIHx8IFtdKS5yZWR1Y2UoKGdyb3VwLCBibGFua05vZGUpID0+IHtcbiAgICAvLyBza2lwIG5vZGUgYmFzZWQgb24gY29uZGl0aW9uXG4gICAgaWYgKCFpbmNsdWRlTm9kZShibGFua05vZGUpKSB7XG4gICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUlkID0gbm9kZVsnQGlkJ107XG4gICAgY29uc3QgZ3JvdXBlZEtleSA9IGdyb3VwTm9kZUtleShibGFua05vZGUpO1xuICAgIGdyb3VwW2dyb3VwZWRLZXldID0gZ3JvdXBbZ3JvdXBlZEtleV0gfHwge1xuICAgICAgdGVybTogYmxhbmtOb2RlLnRlcm0sXG4gICAgICBtZXRob2RUaWVyOiBibGFua05vZGUubWV0aG9kVGllcixcbiAgICAgIG1ldGhvZFRpZXJPcmRlcjogbWV0aG9kVGllck9yZGVyKGJsYW5rTm9kZS5tZXRob2RUaWVyKSxcbiAgICAgIHZhbHVlczoge30sXG4gICAgICBvcmlnaW5hbFZhbHVlczoge31cbiAgICB9O1xuICAgIGdyb3VwW2dyb3VwZWRLZXldLnZhbHVlc1tub2RlSWRdID0gZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0gfHwgeyBpbmRleCwgbm9kZXM6IFtdLCB2YWx1ZTogW10gfTtcbiAgICBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS5ub2RlID0gaXNIaWdoZXJTdGF0ZShncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS5ub2RlLCBibGFua05vZGUpXG4gICAgICA/IGJsYW5rTm9kZVxuICAgICAgOiBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS5ub2RlO1xuICAgIGdyb3VwW2dyb3VwZWRLZXldLnZhbHVlc1tub2RlSWRdLm5vZGVzLnB1c2goYmxhbmtOb2RlKTtcbiAgICBncm91cFtncm91cGVkS2V5XS52YWx1ZXNbbm9kZUlkXS52YWx1ZSA9IGNvbmNhdEJsYW5rTm9kZVZhbHVlKFxuICAgICAgZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF0udmFsdWUsXG4gICAgICBibGFua05vZGUudmFsdWVcbiAgICApO1xuICAgIGdyb3VwcGVkVmFsdWVLZXlzLmZvckVhY2goYXJyYXlLZXkgPT4ge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBnZXQoYmxhbmtOb2RlLCBhcnJheUtleSwgW10pO1xuICAgICAgZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF1bYXJyYXlLZXldID0gW1xuICAgICAgICAuLi4oZ3JvdXBbZ3JvdXBlZEtleV0udmFsdWVzW25vZGVJZF1bYXJyYXlLZXldIHx8IFtdKSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpID8gbmV3VmFsdWUgOiBbbmV3VmFsdWVdKVxuICAgICAgXTtcbiAgICB9KTtcbiAgICByZXR1cm4gZ3JvdXA7XG4gIH0sIHByZXYpLCB7fSBhcyBJR3JvdXBlZE5vZGVzPFI+KTtcblxuICAvLyBjb21waWxlIG9yaWdpbmFsIHZhbHVlc1xuICBPYmplY3QudmFsdWVzKGdyb3VwcykubWFwKGdyb3VwID0+IHtcbiAgICBPYmplY3Qua2V5cyhncm91cC52YWx1ZXMpLm1hcChub2RlSWQgPT4ge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gZ3JvdXAudmFsdWVzW25vZGVJZF07XG4gICAgICBjb25zdCB0ZXJtSWQgPSBncm91cC50ZXJtWydAaWQnXTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSBnZXQob3JpZ2luYWxWYWx1ZXMsIGBbJHtpbmRleH1dLiR7a2V5fWAsIFtdKS5maWx0ZXIoKHZhbDogYW55KSA9PiB2YWwudGVybVsnQGlkJ10gPT09IHRlcm1JZCk7XG4gICAgICBpZiAob3JpZ2luYWxWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3JpZ2luYWxWYWx1ZS5yZWR1Y2UoKGFycmF5OiBhbnlbXSwgY3VycjogYW55KSA9PiBjb25jYXRCbGFua05vZGVWYWx1ZShcbiAgICAgICAgICBhcnJheSxcbiAgICAgICAgICBjdXJyLnZhbHVlXG4gICAgICAgICksIFtdKTtcbiAgICAgICAgZ3JvdXAub3JpZ2luYWxWYWx1ZXNbbm9kZUlkXSA9IHsgdmFsdWU6IHByb3BlcnR5VmFsdWUodmFsdWUsIHRlcm1JZCkgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGdyb3Vwcztcbn07XG4iXX0=
@@ -94,4 +94,4 @@ export const nodeLink = ({ '@type': type, '@id': id, name }) => type && id ? `<a
94
94
  export const schemaLink = (type, title = type) => `<a href="${baseUrl()}/schema/${type}" target="_blank">${title}</a>`;
95
95
  export const code = (text) => `<code>${text}</code>`;
96
96
  export const contactUsLink = (text = 'contact us') => `<a href="mailto:${contactUsEmail}">${text}</a>`;
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLEVBQXdDLFVBQVUsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsaUNBQWlDLENBQUM7QUFDekQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLHFDQUFxQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFFOUcsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUU1RSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzdDLDhCQUE4QixDQUFDLENBQUM7SUFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QiwwQkFBMEIsQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFFckUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFckcsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQ3ZDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTVHLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO0lBQzNDLElBQUk7UUFDRixLQUFLLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbEM7SUFDRCxPQUFPLENBQUMsRUFBRSxHQUFHO0lBQ2IsTUFBTSxLQUFLLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFVLEVBQVUsRUFBRTtJQUM5QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUU7SUFDdkMsTUFBTSxHQUFHLEdBRUwsRUFBRSxDQUFDO0lBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDcEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxJQUFJLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFDbEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxRQUFvQixFQUFFLEVBQUUsQ0FDaEUsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUVqRyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUUzRyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFFNUcsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsRUFBVSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsRUFBRTtJQUNwRCxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFJLEtBQWEsRUFBRSxZQUFrQixFQUFFLEVBQUU7SUFDcEUsSUFBSTtRQUNGLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FDbkU7SUFDRCxPQUFPLEdBQUcsRUFBRTtRQUNWLE9BQU8sWUFBWSxDQUFDO0tBQ3JCO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRTlHLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQWEsRUFBRSxTQUFrQixFQUFFLEVBQUUsQ0FDOUQsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBWSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRW5ILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUV4RSxNQUFNLFNBQVMsR0FBRyxrREFBa0QsQ0FBQztBQUVyRSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUF3RCxFQUFFLEVBQUUsQ0FDbEYsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNULFFBQVEsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUMxRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFFaEIsTUFBTSxnQkFBZ0IsR0FFbEI7SUFDRixDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQTJCLEVBQUUsRUFBRSxDQUM5RixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sRUFBRSxJQUFJO1FBQ2IsT0FBTyxFQUFFLElBQUk7UUFDYixPQUFPO0tBQ1IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksV0FBWTtJQUMvRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLElBQUk7Q0FDekUsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQVUsRUFBRSxFQUFFLENBQ3pDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDTCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN0RixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUU3RSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUV6RixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFbkYsTUFBTSxDQUFOLElBQVksVUFRWDtBQVJELFdBQVksVUFBVTtJQUNwQiwwQ0FBNEIsQ0FBQTtJQUM1Qiw2Q0FBK0IsQ0FBQTtJQUMvQix5REFBMkMsQ0FBQTtJQUMzQyx1REFBeUMsQ0FBQTtJQUN6QyxvREFBc0MsQ0FBQTtJQUN0QywwREFBNEMsQ0FBQTtJQUM1QywyQ0FBNkIsQ0FBQTtBQUMvQixDQUFDLEVBUlcsVUFBVSxLQUFWLFVBQVUsUUFRckI7QUFFRCxNQUFNLENBQU4sSUFBWSxRQUdYO0FBSEQsV0FBWSxRQUFRO0lBQ2xCLHVCQUFXLENBQUE7SUFDWCwrQkFBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsUUFBUSxLQUFSLFFBQVEsUUFHbkI7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUM7QUFDdkQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBWSxFQUFFLElBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxJQUFJLHFCQUFxQixJQUFJLE1BQU0sQ0FBQztBQUM1RyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUM3RCxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqRyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQ3ZELFlBQVksT0FBTyxFQUFFLFdBQVcsSUFBSSxxQkFBcUIsS0FBSyxNQUFNLENBQUM7QUFDdkUsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBK0IsRUFBRSxFQUFFLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQztBQUNoRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsY0FBYyxLQUFLLElBQUksTUFBTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCB7IElTaXRlSlNPTkxELCBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCwgU2NoZW1hVHlwZSwgVGVybVRlcm1UeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuXG5leHBvcnQgY29uc3QgZ2l0SG9tZSA9ICdodHRwczovL2dpdGxhYi5jb20vaGVzdGlhLWVhcnRoJztcbmV4cG9ydCBjb25zdCBnaXRSYXdCYXNlVXJsID0gJ2h0dHBzOi8vZ2wuZ2l0aGFjay5jb20vaGVzdGlhLWVhcnRoJztcbmV4cG9ydCBjb25zdCBnaXRCcmFuY2ggPSAoKSA9PiBbJ2RldicsICdzdGFnaW5nJ10uc29tZShlbnYgPT4gYmFzZVVybCgpLmluY2x1ZGVzKGVudikpID8gJ2RldmVsb3AnIDogJ21hc3Rlcic7XG5cbmV4cG9ydCBjb25zdCBpc0Nocm9tZSA9ICgpID0+IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKCdDaHJvbWUnKTtcblxuZXhwb3J0IGNvbnN0IGJhc2VVcmwgPSAoKSA9PlxuICB3aW5kb3cubG9jYXRpb24ub3JpZ2luPy5pbmNsdWRlcygnbG9jYWxob3N0JykgP1xuICAgICdodHRwczovL3d3dy1kZXYuaGVzdGlhLmVhcnRoJyA6XG4gICAgd2luZG93LmxvY2F0aW9uLm9yaWdpbj8uaW5jbHVkZXMoJ2hlc3RpYS5lYXJ0aCcpID9cbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOlxuICAgICAgJ2h0dHBzOi8vd3d3Lmhlc3RpYS5lYXJ0aCc7XG5cbmV4cG9ydCBjb25zdCBpc0V4dGVybmFsID0gKCkgPT4gYmFzZVVybCgpICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuXG5jb25zdCBwYXJzZUVycm9yU3RhdHVzID0gKGVycm9yOiBhbnkpID0+IChlcnJvcj8uc3RhdHVzVGV4dCB8fCAnJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgJy0nKTtcblxuY29uc3QgcGFyc2VFcnJvck1lc3NhZ2UgPSAoZXJyb3I6IGFueSkgPT5cbiAgZ2V0KGVycm9yLCAnZXJyb3IuZXJyb3InLCBnZXQoZXJyb3IsICdlcnJvci5tZXNzYWdlJywgZ2V0KGVycm9yLCAnZXJyb3InLCBnZXQoZXJyb3IsICdtZXNzYWdlJywgZXJyb3IpKSkpO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlQVBJRXJyb3IgPSAoZXJyb3I6IGFueSkgPT4ge1xuICB0cnkge1xuICAgIGVycm9yID0gcGFyc2VFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICB9XG4gIGNhdGNoIChfKSB7IH1cbiAgdGhyb3cgZXJyb3I7XG59O1xuXG5leHBvcnQgY29uc3QgZXJyb3JUZXh0ID0gKGVycm9yOiBhbnkpOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlcnJvcjtcbiAgfVxuICBjb25zdCBlcnIgPSBwYXJzZUVycm9yTWVzc2FnZShlcnJvcik7XG4gIHJldHVybiBwYXJzZUVycm9yU3RhdHVzKGVycikgfHwgZXJyO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlclBhcmFtcyA9IChvYmo6IGFueSkgPT4ge1xuICBjb25zdCByZXM6IHtcbiAgICBbeDogc3RyaW5nXTogc3RyaW5nO1xuICB9ID0ge307XG4gIE9iamVjdC5rZXlzKG9iaikuc29ydCgpLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc1trZXldID0gYCR7dmFsdWV9YDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHdhaXRGb3IgPSAodmFyaWFibGU6IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+XG4gIGdldCh3aW5kb3csIHZhcmlhYmxlLCBmYWxzZSkgPyBjYWxsYmFjaygpIDogc2V0VGltZW91dCgoKSA9PiB3YWl0Rm9yKHZhcmlhYmxlLCBjYWxsYmFjayksIDEwMCk7XG5cbmV4cG9ydCBjb25zdCBib3R0b20gPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cbmV4cG9ydCBjb25zdCBpc1Njcm9sbGVkQmVsb3cgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGVsZW1lbnQgPyB3aW5kb3cuc2Nyb2xsWSA+IGJvdHRvbShlbGVtZW50KSA6IGZhbHNlO1xuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FbCA9IChpZDogc3RyaW5nLCByZXRyaWVzID0gMCkgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgc2V0VGltZW91dCgoKSA9PiBlbCA/IGVsLnNjcm9sbEludG9WaWV3KCkgOiAocmV0cmllcyA8IDEwID8gc2Nyb2xsVG9FbChpZCwgcmV0cmllcyArIDEpIDogbnVsbCksIDEwMCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9wID0gKCkgPT4gd2luZG93LnNjcm9sbFRvKDAsIDApO1xuXG5leHBvcnQgY29uc3Qgc2FmZUpTT05QYXJzZSA9IDxUPih2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UodmFsdWUpIGFzIFQgOiB2YWx1ZTtcbiAgfVxuICBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNhZmVKU09OU3RyaW5naWZ5ID0gKHZhbHVlOiBzdHJpbmcpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuZXhwb3J0IGNvbnN0IGFycmF5VmFsdWUgPSAodmFsdWVzOiBhbnlbXSwgaXNBdmVyYWdlOiBib29sZWFuKSA9PlxuICAodmFsdWVzIHx8IFtdKS5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycikgPT4gcHJldiArIHBhcnNlRmxvYXQoYCR7Y3Vycn1gKSwgMCkgLyAoaXNBdmVyYWdlID8gdmFsdWVzLmxlbmd0aCA6IDEpO1xuXG5leHBvcnQgY29uc3QgZWxsaXBzaXMgPSAodGV4dCA9ICcnLCBtYXhsZW5ndGggPSAyMCkgPT5cbiAgdGV4dC5sZW5ndGggPiBtYXhsZW5ndGggPyBgJHt0ZXh0LnN1YnN0cmluZygwLCBtYXhsZW5ndGgpfS4uLmAgOiB0ZXh0O1xuXG5jb25zdCBtYXBzUXVlcnkgPSAnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3NlYXJjaC8/YXBpPTEmcXVlcnk9JztcblxuZXhwb3J0IGNvbnN0IG1hcHNVcmwgPSAobG9jYXRpb24/OiB7IGxhdD86IG51bWJlcjsgbG5nPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0pID0+XG4gIGxvY2F0aW9uID8gKFxuICAgIGxvY2F0aW9uLmxhdCAmJiBsb2NhdGlvbi5sbmcgP1xuICAgICAgYCR7bWFwc1F1ZXJ5fSR7bG9jYXRpb24ubGF0fSwke2xvY2F0aW9uLmxuZ31gIDpcbiAgICAgIChsb2NhdGlvbi5uYW1lID8gYCR7bWFwc1F1ZXJ5fSR7ZW5jb2RlVVJJKGxvY2F0aW9uLm5hbWUpfWAgOiB1bmRlZmluZWQpXG4gICkgOiB1bmRlZmluZWQ7XG5cbmNvbnN0IG5vZGVEZWZhdWx0TGFiZWw6IHtcbiAgW3R5cGUgaW4gU2NoZW1hVHlwZV0/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG59ID0ge1xuICBbU2NoZW1hVHlwZS5JbXBhY3RBc3Nlc3NtZW50XTogKHsgbmFtZSwgY291bnRyeSwgZW5kRGF0ZSwgcHJvZHVjdCB9OiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCkgPT5cbiAgICBuYW1lID8gbmFtZS5yZXBsYWNlKGAke3Byb2R1Y3Q/Lm5hbWV9LCBgLCAnJykgOiBbXG4gICAgICBwcm9kdWN0Py5uYW1lLFxuICAgICAgY291bnRyeT8ubmFtZSxcbiAgICAgIGVuZERhdGVcbiAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpLFxuICBbU2NoZW1hVHlwZS5TaXRlXTogKHsgbmFtZSwgZGVzY3JpcHRpb24gfTogSVNpdGVKU09OTEQpID0+IG5hbWUgfHwgZGVzY3JpcHRpb24hLFxuICBbU2NoZW1hVHlwZS5UcmFuc2Zvcm1hdGlvbl06ICh7IG5hbWUsIHRlcm0gfTogYW55KSA9PiBuYW1lIHx8IHRlcm0/Lm5hbWVcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0TGFiZWwgPSAobm9kZT86IGFueSkgPT5cbiAgbm9kZSA/IChcbiAgICBub2RlWydAdHlwZSddIGluIG5vZGVEZWZhdWx0TGFiZWwgPyBub2RlRGVmYXVsdExhYmVsW25vZGVbJ0B0eXBlJ11dKG5vZGUpIDogbm9kZS5uYW1lXG4gICkgfHwgbm9kZVsnQGlkJ10gfHwgbm9kZS5pZCA6ICcnO1xuXG5leHBvcnQgY29uc3QgcmVwZWF0ID0gKHRpbWVzID0gMCkgPT4gKEFycmF5LmZyb20oQXJyYXkodGltZXMpLCBNYXRoLnJhbmRvbSkpO1xuXG5leHBvcnQgY29uc3QgY29weU9iamVjdCA9IChkYXRhPzogYW55KSA9PiBkYXRhID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkgOiBudWxsO1xuXG5leHBvcnQgY29uc3QgaXNFcXVhbCA9IChhOiBhbnksIGI6IGFueSkgPT4gSlNPTi5zdHJpbmdpZnkoYSkgPT09IEpTT04uc3RyaW5naWZ5KGIpO1xuXG5leHBvcnQgZW51bSBSZXBvc2l0b3J5IHtcbiAgZ2xvc3NhcnkgPSAnaGVzdGlhLWdsb3NzYXJ5JyxcbiAgbW9kZWxzID0gJ2hlc3RpYS1lbmdpbmUtbW9kZWxzJyxcbiAgb3JjaGVzdHJhdG9yID0gJ2hlc3RpYS1lbmdpbmUtb3JjaGVzdHJhdG9yJyxcbiAgYWdncmVnYXRpb24gPSAnaGVzdGlhLWFnZ3JlZ2F0aW9uLWVuZ2luZScsXG4gIGNvbW11bml0eSA9ICdoZXN0aWEtY29tbXVuaXR5LWVkaXRpb24nLFxuICBwb29yZW5lbWVjayA9ICdoZXN0aWEtY29udmVydC1wb29yZS1uZW1lY2VrJyxcbiAgZnJvbnRlbmQgPSAnaGVzdGlhLWZyb250LWVuZCdcbn1cblxuZXhwb3J0IGVudW0gVGVtcGxhdGUge1xuICBidWcgPSAnYnVnJyxcbiAgZmVhdHVyZSA9ICdmZWF0dXJlJ1xufVxuXG5leHBvcnQgY29uc3QgY29udGFjdFVzRW1haWwgPSAnY29tbXVuaXR5QGhlc3RpYS5lYXJ0aCc7XG5leHBvcnQgY29uc3QgZXh0ZXJuYWxMaW5rID0gKGhyZWY6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiBgPGEgaHJlZj1cIiR7aHJlZn1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke3RleHR9PC9hPmA7XG5leHBvcnQgY29uc3QgZ2xvc3NhcnlMaW5rID0gKHRleHQ6IHN0cmluZykgPT4gZXh0ZXJuYWxMaW5rKGAke2Jhc2VVcmwoKX0vZ2xvc3NhcnlgLCB0ZXh0KTtcbmV4cG9ydCBjb25zdCBub2RlTGluayA9ICh7ICdAdHlwZSc6IHR5cGUsICdAaWQnOiBpZCwgbmFtZSB9KSA9PlxuICB0eXBlICYmIGlkID8gYDxhIGhyZWY9XCIvJHt0eXBlLnRvTG93ZXJDYXNlKCl9LyR7aWR9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHtuYW1lIHx8IGlkfTwvYT5gIDogbnVsbDtcbmV4cG9ydCBjb25zdCBzY2hlbWFMaW5rID0gKHR5cGU6IHN0cmluZywgdGl0bGUgPSB0eXBlKSA9PlxuICBgPGEgaHJlZj1cIiR7YmFzZVVybCgpfS9zY2hlbWEvJHt0eXBlfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7dGl0bGV9PC9hPmA7XG5leHBvcnQgY29uc3QgY29kZSA9ICh0ZXh0OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKSA9PiBgPGNvZGU+JHt0ZXh0fTwvY29kZT5gO1xuZXhwb3J0IGNvbnN0IGNvbnRhY3RVc0xpbmsgPSAodGV4dCA9ICdjb250YWN0IHVzJykgPT4gYDxhIGhyZWY9XCJtYWlsdG86JHtjb250YWN0VXNFbWFpbH1cIj4ke3RleHR9PC9hPmA7XG4iXX0=
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLEVBQXdDLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxpQ0FBaUMsQ0FBQztBQUN6RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcscUNBQXFDLENBQUM7QUFDbkUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUU5RyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FDMUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0MsOEJBQThCLENBQUMsQ0FBQztJQUNoQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLDBCQUEwQixDQUFDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFD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QUUsV0FBVyxJQUFJLHFCQUFxQixLQUFLLE1BQU0sQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUErQixFQUFFLEVBQUUsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksR0FBRyxZQUFZLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixjQUFjLEtBQUssSUFBSSxNQUFNLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuaW1wb3J0IHsgSVNpdGVKU09OTEQsIElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBTY2hlbWFUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuXG5leHBvcnQgY29uc3QgZ2l0SG9tZSA9ICdodHRwczovL2dpdGxhYi5jb20vaGVzdGlhLWVhcnRoJztcbmV4cG9ydCBjb25zdCBnaXRSYXdCYXNlVXJsID0gJ2h0dHBzOi8vZ2wuZ2l0aGFjay5jb20vaGVzdGlhLWVhcnRoJztcbmV4cG9ydCBjb25zdCBnaXRCcmFuY2ggPSAoKSA9PiBbJ2RldicsICdzdGFnaW5nJ10uc29tZShlbnYgPT4gYmFzZVVybCgpLmluY2x1ZGVzKGVudikpID8gJ2RldmVsb3AnIDogJ21hc3Rlcic7XG5cbmV4cG9ydCBjb25zdCBpc0Nocm9tZSA9ICgpID0+IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKCdDaHJvbWUnKTtcblxuZXhwb3J0IGNvbnN0IGJhc2VVcmwgPSAoKSA9PlxuICB3aW5kb3cubG9jYXRpb24ub3JpZ2luPy5pbmNsdWRlcygnbG9jYWxob3N0JykgP1xuICAgICdodHRwczovL3d3dy1kZXYuaGVzdGlhLmVhcnRoJyA6XG4gICAgd2luZG93LmxvY2F0aW9uLm9yaWdpbj8uaW5jbHVkZXMoJ2hlc3RpYS5lYXJ0aCcpID9cbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOlxuICAgICAgJ2h0dHBzOi8vd3d3Lmhlc3RpYS5lYXJ0aCc7XG5cbmV4cG9ydCBjb25zdCBpc0V4dGVybmFsID0gKCkgPT4gYmFzZVVybCgpICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuXG5jb25zdCBwYXJzZUVycm9yU3RhdHVzID0gKGVycm9yOiBhbnkpID0+IChlcnJvcj8uc3RhdHVzVGV4dCB8fCAnJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgJy0nKTtcblxuY29uc3QgcGFyc2VFcnJvck1lc3NhZ2UgPSAoZXJyb3I6IGFueSkgPT5cbiAgZ2V0KGVycm9yLCAnZXJyb3IuZXJyb3InLCBnZXQoZXJyb3IsICdlcnJvci5tZXNzYWdlJywgZ2V0KGVycm9yLCAnZXJyb3InLCBnZXQoZXJyb3IsICdtZXNzYWdlJywgZXJyb3IpKSkpO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlQVBJRXJyb3IgPSAoZXJyb3I6IGFueSkgPT4ge1xuICB0cnkge1xuICAgIGVycm9yID0gcGFyc2VFcnJvck1lc3NhZ2UoZXJyb3IpO1xuICB9XG4gIGNhdGNoIChfKSB7IH1cbiAgdGhyb3cgZXJyb3I7XG59O1xuXG5leHBvcnQgY29uc3QgZXJyb3JUZXh0ID0gKGVycm9yOiBhbnkpOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlcnJvcjtcbiAgfVxuICBjb25zdCBlcnIgPSBwYXJzZUVycm9yTWVzc2FnZShlcnJvcik7XG4gIHJldHVybiBwYXJzZUVycm9yU3RhdHVzKGVycikgfHwgZXJyO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlclBhcmFtcyA9IChvYmo6IGFueSkgPT4ge1xuICBjb25zdCByZXM6IHtcbiAgICBbeDogc3RyaW5nXTogc3RyaW5nO1xuICB9ID0ge307XG4gIE9iamVjdC5rZXlzKG9iaikuc29ydCgpLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJlc1trZXldID0gYCR7dmFsdWV9YDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHdhaXRGb3IgPSAodmFyaWFibGU6IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+XG4gIGdldCh3aW5kb3csIHZhcmlhYmxlLCBmYWxzZSkgPyBjYWxsYmFjaygpIDogc2V0VGltZW91dCgoKSA9PiB3YWl0Rm9yKHZhcmlhYmxlLCBjYWxsYmFjayksIDEwMCk7XG5cbmV4cG9ydCBjb25zdCBib3R0b20gPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cbmV4cG9ydCBjb25zdCBpc1Njcm9sbGVkQmVsb3cgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IGVsZW1lbnQgPyB3aW5kb3cuc2Nyb2xsWSA+IGJvdHRvbShlbGVtZW50KSA6IGZhbHNlO1xuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FbCA9IChpZDogc3RyaW5nLCByZXRyaWVzID0gMCkgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgc2V0VGltZW91dCgoKSA9PiBlbCA/IGVsLnNjcm9sbEludG9WaWV3KCkgOiAocmV0cmllcyA8IDEwID8gc2Nyb2xsVG9FbChpZCwgcmV0cmllcyArIDEpIDogbnVsbCksIDEwMCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9wID0gKCkgPT4gd2luZG93LnNjcm9sbFRvKDAsIDApO1xuXG5leHBvcnQgY29uc3Qgc2FmZUpTT05QYXJzZSA9IDxUPih2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UodmFsdWUpIGFzIFQgOiB2YWx1ZTtcbiAgfVxuICBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNhZmVKU09OU3RyaW5naWZ5ID0gKHZhbHVlOiBzdHJpbmcpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuZXhwb3J0IGNvbnN0IGFycmF5VmFsdWUgPSAodmFsdWVzOiBhbnlbXSwgaXNBdmVyYWdlOiBib29sZWFuKSA9PlxuICAodmFsdWVzIHx8IFtdKS5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycikgPT4gcHJldiArIHBhcnNlRmxvYXQoYCR7Y3Vycn1gKSwgMCkgLyAoaXNBdmVyYWdlID8gdmFsdWVzLmxlbmd0aCA6IDEpO1xuXG5leHBvcnQgY29uc3QgZWxsaXBzaXMgPSAodGV4dCA9ICcnLCBtYXhsZW5ndGggPSAyMCkgPT5cbiAgdGV4dC5sZW5ndGggPiBtYXhsZW5ndGggPyBgJHt0ZXh0LnN1YnN0cmluZygwLCBtYXhsZW5ndGgpfS4uLmAgOiB0ZXh0O1xuXG5jb25zdCBtYXBzUXVlcnkgPSAnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3NlYXJjaC8/YXBpPTEmcXVlcnk9JztcblxuZXhwb3J0IGNvbnN0IG1hcHNVcmwgPSAobG9jYXRpb24/OiB7IGxhdD86IG51bWJlcjsgbG5nPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0pID0+XG4gIGxvY2F0aW9uID8gKFxuICAgIGxvY2F0aW9uLmxhdCAmJiBsb2NhdGlvbi5sbmcgP1xuICAgICAgYCR7bWFwc1F1ZXJ5fSR7bG9jYXRpb24ubGF0fSwke2xvY2F0aW9uLmxuZ31gIDpcbiAgICAgIChsb2NhdGlvbi5uYW1lID8gYCR7bWFwc1F1ZXJ5fSR7ZW5jb2RlVVJJKGxvY2F0aW9uLm5hbWUpfWAgOiB1bmRlZmluZWQpXG4gICkgOiB1bmRlZmluZWQ7XG5cbmNvbnN0IG5vZGVEZWZhdWx0TGFiZWw6IHtcbiAgW3R5cGUgaW4gU2NoZW1hVHlwZV0/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG59ID0ge1xuICBbU2NoZW1hVHlwZS5JbXBhY3RBc3Nlc3NtZW50XTogKHsgbmFtZSwgY291bnRyeSwgZW5kRGF0ZSwgcHJvZHVjdCB9OiBJSW1wYWN0QXNzZXNzbWVudEpTT05MRCkgPT5cbiAgICBuYW1lID8gbmFtZS5yZXBsYWNlKGAke3Byb2R1Y3Q/Lm5hbWV9LCBgLCAnJykgOiBbXG4gICAgICBwcm9kdWN0Py5uYW1lLFxuICAgICAgY291bnRyeT8ubmFtZSxcbiAgICAgIGVuZERhdGVcbiAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpLFxuICBbU2NoZW1hVHlwZS5TaXRlXTogKHsgbmFtZSwgZGVzY3JpcHRpb24gfTogSVNpdGVKU09OTEQpID0+IG5hbWUgfHwgZGVzY3JpcHRpb24hLFxuICBbU2NoZW1hVHlwZS5UcmFuc2Zvcm1hdGlvbl06ICh7IG5hbWUsIHRlcm0gfTogYW55KSA9PiBuYW1lIHx8IHRlcm0/Lm5hbWVcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0TGFiZWwgPSAobm9kZT86IGFueSkgPT5cbiAgbm9kZSA/IChcbiAgICBub2RlWydAdHlwZSddIGluIG5vZGVEZWZhdWx0TGFiZWwgPyBub2RlRGVmYXVsdExhYmVsW25vZGVbJ0B0eXBlJ11dKG5vZGUpIDogbm9kZS5uYW1lXG4gICkgfHwgbm9kZVsnQGlkJ10gfHwgbm9kZS5pZCA6ICcnO1xuXG5leHBvcnQgY29uc3QgcmVwZWF0ID0gKHRpbWVzID0gMCkgPT4gKEFycmF5LmZyb20oQXJyYXkodGltZXMpLCBNYXRoLnJhbmRvbSkpO1xuXG5leHBvcnQgY29uc3QgY29weU9iamVjdCA9IChkYXRhPzogYW55KSA9PiBkYXRhID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkgOiBudWxsO1xuXG5leHBvcnQgY29uc3QgaXNFcXVhbCA9IChhOiBhbnksIGI6IGFueSkgPT4gSlNPTi5zdHJpbmdpZnkoYSkgPT09IEpTT04uc3RyaW5naWZ5KGIpO1xuXG5leHBvcnQgZW51bSBSZXBvc2l0b3J5IHtcbiAgZ2xvc3NhcnkgPSAnaGVzdGlhLWdsb3NzYXJ5JyxcbiAgbW9kZWxzID0gJ2hlc3RpYS1lbmdpbmUtbW9kZWxzJyxcbiAgb3JjaGVzdHJhdG9yID0gJ2hlc3RpYS1lbmdpbmUtb3JjaGVzdHJhdG9yJyxcbiAgYWdncmVnYXRpb24gPSAnaGVzdGlhLWFnZ3JlZ2F0aW9uLWVuZ2luZScsXG4gIGNvbW11bml0eSA9ICdoZXN0aWEtY29tbXVuaXR5LWVkaXRpb24nLFxuICBwb29yZW5lbWVjayA9ICdoZXN0aWEtY29udmVydC1wb29yZS1uZW1lY2VrJyxcbiAgZnJvbnRlbmQgPSAnaGVzdGlhLWZyb250LWVuZCdcbn1cblxuZXhwb3J0IGVudW0gVGVtcGxhdGUge1xuICBidWcgPSAnYnVnJyxcbiAgZmVhdHVyZSA9ICdmZWF0dXJlJ1xufVxuXG5leHBvcnQgY29uc3QgY29udGFjdFVzRW1haWwgPSAnY29tbXVuaXR5QGhlc3RpYS5lYXJ0aCc7XG5leHBvcnQgY29uc3QgZXh0ZXJuYWxMaW5rID0gKGhyZWY6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiBgPGEgaHJlZj1cIiR7aHJlZn1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke3RleHR9PC9hPmA7XG5leHBvcnQgY29uc3QgZ2xvc3NhcnlMaW5rID0gKHRleHQ6IHN0cmluZykgPT4gZXh0ZXJuYWxMaW5rKGAke2Jhc2VVcmwoKX0vZ2xvc3NhcnlgLCB0ZXh0KTtcbmV4cG9ydCBjb25zdCBub2RlTGluayA9ICh7ICdAdHlwZSc6IHR5cGUsICdAaWQnOiBpZCwgbmFtZSB9KSA9PlxuICB0eXBlICYmIGlkID8gYDxhIGhyZWY9XCIvJHt0eXBlLnRvTG93ZXJDYXNlKCl9LyR7aWR9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHtuYW1lIHx8IGlkfTwvYT5gIDogbnVsbDtcbmV4cG9ydCBjb25zdCBzY2hlbWFMaW5rID0gKHR5cGU6IHN0cmluZywgdGl0bGUgPSB0eXBlKSA9PlxuICBgPGEgaHJlZj1cIiR7YmFzZVVybCgpfS9zY2hlbWEvJHt0eXBlfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7dGl0bGV9PC9hPmA7XG5leHBvcnQgY29uc3QgY29kZSA9ICh0ZXh0OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKSA9PiBgPGNvZGU+JHt0ZXh0fTwvY29kZT5gO1xuZXhwb3J0IGNvbnN0IGNvbnRhY3RVc0xpbmsgPSAodGV4dCA9ICdjb250YWN0IHVzJykgPT4gYDxhIGhyZWY9XCJtYWlsdG86JHtjb250YWN0VXNFbWFpbH1cIj4ke3RleHR9PC9hPmA7XG4iXX0=
@@ -30,7 +30,7 @@ export class CyclesActivityLogsComponent {
30
30
  }
31
31
  }
32
32
  CyclesActivityLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CyclesActivityLogsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
- CyclesActivityLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: CyclesActivityLogsComponent, selector: "he-cycles-activity-logs", inputs: { cycle: "cycle", original: "original", recalculated: "recalculated" }, ngImport: i0, template: "<div class=\"tabs mb-1\">\n <ul>\n <li *ngFor=\"let tab of Tab | keys\"\n [class.is-active]=\"selectedTab === tab.value\"\n >\n <a (click)=\"selectedTab = tab.value\">{{tab.value}}</a>\n </li>\n </ul>\n</div>\n\n<he-node-logs-models *ngIf=\"selectedTab === Tab.inputs\"\n [node]=\"node\"\n nodeKey=\"inputs\"\n [logsKey]=\"logsKey\"\n [originalValues]=\"original?.inputs\"\n [recalculatedValues]=\"recalculated?.inputs\"\n></he-node-logs-models>\n\n<he-node-logs-models *ngIf=\"selectedTab === Tab.products\"\n [node]=\"node\"\n nodeKey=\"products\"\n [logsKey]=\"logsKey\"\n [originalValues]=\"original?.products\"\n [recalculatedValues]=\"recalculated?.products\"\n></he-node-logs-models>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "logsKey"] }, { kind: "pipe", type: i3.KeysPipe, name: "keys" }] });
33
+ CyclesActivityLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: CyclesActivityLogsComponent, selector: "he-cycles-activity-logs", inputs: { cycle: "cycle", original: "original", recalculated: "recalculated" }, ngImport: i0, template: "<div class=\"tabs mb-1\">\n <ul>\n <li *ngFor=\"let tab of Tab | keys\"\n [class.is-active]=\"selectedTab === tab.value\"\n >\n <a (click)=\"selectedTab = tab.value\">{{tab.value}}</a>\n </li>\n </ul>\n</div>\n\n<he-node-logs-models *ngIf=\"selectedTab === Tab.inputs\"\n [node]=\"node\"\n nodeKey=\"inputs\"\n [logsKey]=\"logsKey\"\n [originalValues]=\"original?.inputs\"\n [recalculatedValues]=\"recalculated?.inputs\"\n></he-node-logs-models>\n\n<he-node-logs-models *ngIf=\"selectedTab === Tab.products\"\n [node]=\"node\"\n nodeKey=\"products\"\n [logsKey]=\"logsKey\"\n [originalValues]=\"original?.products\"\n [recalculatedValues]=\"recalculated?.products\"\n></he-node-logs-models>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey"] }, { kind: "pipe", type: i3.KeysPipe, name: "keys" }] });
34
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CyclesActivityLogsComponent, decorators: [{
35
35
  type: Component,
36
36
  args: [{ selector: 'he-cycles-activity-logs', template: "<div class=\"tabs mb-1\">\n <ul>\n <li *ngFor=\"let tab of Tab | keys\"\n [class.is-active]=\"selectedTab === tab.value\"\n >\n <a (click)=\"selectedTab = tab.value\">{{tab.value}}</a>\n </li>\n </ul>\n</div>\n\n<he-node-logs-models *ngIf=\"selectedTab === Tab.inputs\"\n [node]=\"node\"\n nodeKey=\"inputs\"\n [logsKey]=\"logsKey\"\n [originalValues]=\"original?.inputs\"\n [recalculatedValues]=\"recalculated?.inputs\"\n></he-node-logs-models>\n\n<he-node-logs-models *ngIf=\"selectedTab === Tab.products\"\n [node]=\"node\"\n nodeKey=\"products\"\n [logsKey]=\"logsKey\"\n [originalValues]=\"original?.products\"\n [recalculatedValues]=\"recalculated?.products\"\n></he-node-logs-models>\n", styles: [":host{display:block}\n"] }]
@@ -1,42 +1,81 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
1
+ import { Component, Input } from '@angular/core';
2
+ import { DataState } from '@hestia-earth/api';
2
3
  import { keyToLabel } from '@hestia-earth/utils';
3
- import { defaultLabel } from '../../common/utils';
4
- import { baseUrl } from '../../common/utils';
4
+ import { isValidKey } from '../../common/node-utils';
5
+ import { baseUrl, defaultLabel } from '../../common/utils';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/common";
7
- import * as i2 from "../../common/blank-node-state/blank-node-state.component";
8
- import * as i3 from "../../common/blank-node-state-notice/blank-node-state-notice.component";
9
- import * as i4 from "../../common/data-table/data-table.component";
10
- import * as i5 from "../../node/node-link/node-link.component";
11
- const ignoreKeys = [
12
- '@type', 'type', 'added', 'updated', 'addedVersion', 'updatedVersion'
8
+ import * as i2 from "@angular/forms";
9
+ import * as i3 from "@ng-bootstrap/ng-bootstrap";
10
+ import * as i4 from "@fortawesome/angular-fontawesome";
11
+ import * as i5 from "../../common/blank-node-state/blank-node-state.component";
12
+ import * as i6 from "../../common/blank-node-state-notice/blank-node-state-notice.component";
13
+ import * as i7 from "../../common/data-table/data-table.component";
14
+ import * as i8 from "../../node/node-link/node-link.component";
15
+ import * as i9 from "../../node/node-csv-export-confirm/node-csv-export-confirm.component";
16
+ import * as i10 from "../cycles-completeness-logs/cycles-completeness-logs.component";
17
+ var View;
18
+ (function (View) {
19
+ View["table"] = "table";
20
+ View["logs"] = "logs";
21
+ })(View || (View = {}));
22
+ const headerKeys = [
23
+ 'cycle.id', 'cycle.@id', 'cycle.completeness.'
13
24
  ];
14
25
  // backward compatibility with schema version < 14
15
26
  const getCompleteness = (cycle) => cycle?.completeness || cycle?.dataCompleteness || {};
16
27
  export class CyclesCompletenessComponent {
17
28
  constructor() {
29
+ this.originalValues = [];
18
30
  this.cycles = [];
19
31
  this.baseUrl = baseUrl();
20
32
  this.defaultLabel = defaultLabel;
21
33
  this.keyToLabel = keyToLabel;
22
34
  this.getCompleteness = getCompleteness;
35
+ this.headerKeys = headerKeys;
36
+ this.showDownload = false;
37
+ this.View = View;
38
+ this.selectedView = View.table;
39
+ this.selectedIndex = 0;
40
+ }
41
+ ngOnChanges(changes) {
42
+ if ('cycles' in changes) {
43
+ this.updateSelectedIndex(this.selectedIndex);
44
+ }
45
+ if ('dataState' in changes) {
46
+ this.selectedView = View.table;
47
+ }
23
48
  }
24
49
  trackById(_index, item) {
25
50
  return item['@id'];
26
51
  }
27
52
  get completenessKeys() {
28
53
  const [cycle] = this.cycles;
29
- return Object.keys(getCompleteness(cycle)).filter(key => !ignoreKeys.includes(key)).sort();
54
+ return Object.keys(getCompleteness(cycle)).filter(isValidKey).sort();
55
+ }
56
+ get isOriginal() {
57
+ return this.dataState === DataState.original;
58
+ }
59
+ // Recalculation logs
60
+ updateSelectedIndex(index) {
61
+ this.selectedIndex = -1;
62
+ // force a refresh of the logs
63
+ setTimeout(() => (this.selectedIndex = index));
64
+ }
65
+ selectIndex({ target: { value } }) {
66
+ return this.updateSelectedIndex(+value);
30
67
  }
31
68
  }
32
69
  CyclesCompletenessComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CyclesCompletenessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
- CyclesCompletenessComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: CyclesCompletenessComponent, selector: "he-cycles-completeness", inputs: { cycles: "cycles", dataState: "dataState" }, ngImport: i0, template: "<div class=\"p-3\" *ngIf=\"cycles.length; else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"cycles.length\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let completeness of completenessKeys\"\n [attr.title]=\"completeness\"\n ><a [href]=\"baseUrl + '/schema/Completeness#' + completeness\" target=\"_blank\">{{keyToLabel(completeness)}}</a></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles; trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{defaultLabel(cycle)}}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let completeness of completenessKeys\">\n <span>{{getCompleteness(cycle)[completeness] ? 'Complete' : 'Incomplete'}}</span>\n <he-blank-node-state class=\"ml-1\" [dataState]=\"dataState\"\n [node]=\"getCompleteness(cycle)\"\n [key]=\"completeness\"\n ></he-blank-node-state>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"dataState\" [showAggregated]=\"false\"></he-blank-node-state-notice>\n</div>\n\n<ng-template #emptyTable>\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: i3.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: i4.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small"] }, { kind: "component", type: i5.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
70
+ CyclesCompletenessComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: CyclesCompletenessComponent, selector: "he-cycles-completeness", inputs: { originalValues: "originalValues", cycles: "cycles", dataState: "dataState" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView === View.table\">\n <button class=\"button is-ghost\" (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\" placement=\"bottom\"\n >\n <fa-icon icon=\"download\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"!isOriginal\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView === View.table\" (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Table view</span>\n </button>\n </div>\n <div class=\"control\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView === View.logs\" (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"cycles.length; else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"cycles.length\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let completeness of completenessKeys\"\n [attr.title]=\"completeness\"\n ><a [href]=\"baseUrl + '/schema/Completeness#' + completeness\" target=\"_blank\">{{keyToLabel(completeness)}}</a></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles; trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{defaultLabel(cycle)}}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let completeness of completenessKeys\">\n <span>{{getCompleteness(cycle)[completeness] ? 'Complete' : 'Incomplete'}}</span>\n <he-blank-node-state class=\"ml-1\" [dataState]=\"dataState\"\n [node]=\"getCompleteness(cycle)\"\n [key]=\"completeness\"\n ></he-blank-node-state>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"dataState\" [showAggregated]=\"false\"></he-blank-node-state-notice>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"cycles.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles; let i = index\" [value]=\"i\">{{i + 1}}. {{defaultLabel(value)}}</option>\n </select>\n </div>\n </div>\n </div>\n\n <he-cycles-completeness-logs *ngIf=\"selectedIndex >= 0\"\n [cycle]=\"cycles[selectedIndex]\"\n [originalValues]=\"originalValues[selectedIndex]?.completeness\"\n [recalculatedValues]=\"cycles[selectedIndex]?.completeness\"\n ></he-cycles-completeness-logs>\n</ng-container>\n\n<ng-template #emptyTable>\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n</ng-template>\n\n<he-node-csv-export-confirm *ngIf=\"showDownload\"\n [nodes]=\"cycles\" filename=\"completeness.csv\" [isUpload]=\"false\"\n [headerKeys]=\"headerKeys\"\n (closed)=\"showDownload = false\"\n></he-node-csv-export-confirm>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "component", type: i5.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: i6.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: i7.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "nbRows", "small"] }, { kind: "component", type: i8.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: i9.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: i10.CyclesCompletenessLogsComponent, selector: "he-cycles-completeness-logs", inputs: ["cycle", "originalValues", "recalculatedValues"] }] });
34
71
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CyclesCompletenessComponent, decorators: [{
35
72
  type: Component,
36
- args: [{ selector: 'he-cycles-completeness', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"p-3\" *ngIf=\"cycles.length; else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"cycles.length\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let completeness of completenessKeys\"\n [attr.title]=\"completeness\"\n ><a [href]=\"baseUrl + '/schema/Completeness#' + completeness\" target=\"_blank\">{{keyToLabel(completeness)}}</a></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles; trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{defaultLabel(cycle)}}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let completeness of completenessKeys\">\n <span>{{getCompleteness(cycle)[completeness] ? 'Complete' : 'Incomplete'}}</span>\n <he-blank-node-state class=\"ml-1\" [dataState]=\"dataState\"\n [node]=\"getCompleteness(cycle)\"\n [key]=\"completeness\"\n ></he-blank-node-state>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"dataState\" [showAggregated]=\"false\"></he-blank-node-state-notice>\n</div>\n\n<ng-template #emptyTable>\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n</ng-template>\n" }]
37
- }], propDecorators: { cycles: [{
73
+ args: [{ selector: 'he-cycles-completeness', template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView === View.table\">\n <button class=\"button is-ghost\" (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\" placement=\"bottom\"\n >\n <fa-icon icon=\"download\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"!isOriginal\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView === View.table\" (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Table view</span>\n </button>\n </div>\n <div class=\"control\">\n <button class=\"button is-small\" [class.is-selected]=\"selectedView === View.logs\" (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span>Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"cycles.length; else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" [nbRows]=\"cycles.length\" maxHeight=\"320\">\n <table class=\"table is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th *ngFor=\"let completeness of completenessKeys\"\n [attr.title]=\"completeness\"\n ><a [href]=\"baseUrl + '/schema/Completeness#' + completeness\" target=\"_blank\">{{keyToLabel(completeness)}}</a></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let cycle of cycles; trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"defaultLabel(cycle)\">\n <he-node-link [node]=\"cycle\">\n <span class=\"is-nowrap has-text-ellipsis\">{{i + 1}}. {{defaultLabel(cycle)}}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let completeness of completenessKeys\">\n <span>{{getCompleteness(cycle)[completeness] ? 'Complete' : 'Incomplete'}}</span>\n <he-blank-node-state class=\"ml-1\" [dataState]=\"dataState\"\n [node]=\"getCompleteness(cycle)\"\n [key]=\"completeness\"\n ></he-blank-node-state>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"dataState\" [showAggregated]=\"false\"></he-blank-node-state-notice>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"cycles.length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select a Cycle</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of cycles; let i = index\" [value]=\"i\">{{i + 1}}. {{defaultLabel(value)}}</option>\n </select>\n </div>\n </div>\n </div>\n\n <he-cycles-completeness-logs *ngIf=\"selectedIndex >= 0\"\n [cycle]=\"cycles[selectedIndex]\"\n [originalValues]=\"originalValues[selectedIndex]?.completeness\"\n [recalculatedValues]=\"cycles[selectedIndex]?.completeness\"\n ></he-cycles-completeness-logs>\n</ng-container>\n\n<ng-template #emptyTable>\n <div class=\"panel-block\">\n <span>No completeness data</span>\n </div>\n</ng-template>\n\n<he-node-csv-export-confirm *ngIf=\"showDownload\"\n [nodes]=\"cycles\" filename=\"completeness.csv\" [isUpload]=\"false\"\n [headerKeys]=\"headerKeys\"\n (closed)=\"showDownload = false\"\n></he-node-csv-export-confirm>\n" }]
74
+ }], propDecorators: { originalValues: [{
75
+ type: Input
76
+ }], cycles: [{
38
77
  type: Input
39
78
  }], dataState: [{
40
79
  type: Input
41
80
  }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7OztBQUU3QyxNQUFNLFVBQVUsR0FBRztJQUNqQixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGdCQUFnQjtDQUN0RSxDQUFDO0FBRUYsa0RBQWtEO0FBQ2xELE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxJQUFJLEtBQUssRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7QUFRN0YsTUFBTSxPQUFPLDJCQUEyQjtJQU54QztRQVFTLFdBQU0sR0FBbUIsRUFBRSxDQUFDO1FBSTVCLFlBQU8sR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNwQixpQkFBWSxHQUFHLFlBQVksQ0FBQztRQUM1QixlQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsZUFBZSxDQUFDO0tBVTFDO0lBUlEsU0FBUyxDQUFDLE1BQWMsRUFBRSxJQUFrQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdGLENBQUM7O3dIQWxCVSwyQkFBMkI7NEdBQTNCLDJCQUEyQixvSENyQnhDLDh1REF3Q0E7MkZEbkJhLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU07OEJBSXhDLE1BQU07c0JBRFosS0FBSztnQkFHQyxTQUFTO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YVN0YXRlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSUN5Y2xlSlNPTkxEIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsga2V5VG9MYWJlbCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuXG5pbXBvcnQgeyBkZWZhdWx0TGFiZWwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmNvbnN0IGlnbm9yZUtleXMgPSBbXG4gICdAdHlwZScsICd0eXBlJywgJ2FkZGVkJywgJ3VwZGF0ZWQnLCAnYWRkZWRWZXJzaW9uJywgJ3VwZGF0ZWRWZXJzaW9uJ1xuXTtcblxuLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHNjaGVtYSB2ZXJzaW9uIDwgMTRcbmNvbnN0IGdldENvbXBsZXRlbmVzcyA9IChjeWNsZTogYW55KSA9PiBjeWNsZT8uY29tcGxldGVuZXNzIHx8IGN5Y2xlPy5kYXRhQ29tcGxldGVuZXNzIHx8IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1jeWNsZXMtY29tcGxldGVuZXNzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N5Y2xlcy1jb21wbGV0ZW5lc3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jeWNsZXMtY29tcGxldGVuZXNzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEN5Y2xlc0NvbXBsZXRlbmVzc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjeWNsZXM6IElDeWNsZUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhU3RhdGU/OiBEYXRhU3RhdGU7XG5cbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBkZWZhdWx0TGFiZWwgPSBkZWZhdWx0TGFiZWw7XG4gIHB1YmxpYyBrZXlUb0xhYmVsID0ga2V5VG9MYWJlbDtcbiAgcHVibGljIGdldENvbXBsZXRlbmVzcyA9IGdldENvbXBsZXRlbmVzcztcblxuICBwdWJsaWMgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBJQ3ljbGVKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbXBsZXRlbmVzc0tleXMoKSB7XG4gICAgY29uc3QgW2N5Y2xlXSA9IHRoaXMuY3ljbGVzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhnZXRDb21wbGV0ZW5lc3MoY3ljbGUpKS5maWx0ZXIoa2V5ID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKGtleSkpLnNvcnQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtM1wiICpuZ0lmPVwiY3ljbGVzLmxlbmd0aDsgZWxzZSBlbXB0eVRhYmxlXCI+XG4gIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgW25iUm93c109XCJjeWNsZXMubGVuZ3RoXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LXNlbWlib2xkXCI+XG4gICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbXBsZXRlbmVzcyBvZiBjb21wbGV0ZW5lc3NLZXlzXCJcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImNvbXBsZXRlbmVzc1wiXG4gICAgICAgICAgPjxhIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS9Db21wbGV0ZW5lc3MjJyArIGNvbXBsZXRlbmVzc1wiIHRhcmdldD1cIl9ibGFua1wiPnt7a2V5VG9MYWJlbChjb21wbGV0ZW5lc3MpfX08L2E+PC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGN5Y2xlIG9mIGN5Y2xlczsgdHJhY2tCeTogdHJhY2tCeUlkOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCIgW2F0dHIudGl0bGVdPVwiZGVmYXVsdExhYmVsKGN5Y2xlKVwiPlxuICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cImN5Y2xlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e2kgKyAxfX0uIHt7ZGVmYXVsdExhYmVsKGN5Y2xlKX19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJpcy1ub3dyYXBcIiAqbmdGb3I9XCJsZXQgY29tcGxldGVuZXNzIG9mIGNvbXBsZXRlbmVzc0tleXNcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3tnZXRDb21wbGV0ZW5lc3MoY3ljbGUpW2NvbXBsZXRlbmVzc10gPyAnQ29tcGxldGUnIDogJ0luY29tcGxldGUnfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlIGNsYXNzPVwibWwtMVwiIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlXCJcbiAgICAgICAgICAgICAgICBbbm9kZV09XCJnZXRDb21wbGV0ZW5lc3MoY3ljbGUpXCJcbiAgICAgICAgICAgICAgICBba2V5XT1cImNvbXBsZXRlbmVzc1wiXG4gICAgICAgICAgICAgID48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L2hlLWRhdGEtdGFibGU+XG5cbiAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlXCIgW3Nob3dBZ2dyZWdhdGVkXT1cImZhbHNlXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2VtcHR5VGFibGU+XG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1ibG9ja1wiPlxuICAgIDxzcGFuPk5vIGNvbXBsZXRlbmVzcyBkYXRhPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY3ljbGVzL2N5Y2xlcy1jb21wbGV0ZW5lc3MvY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBRTNELElBQUssSUFHSjtBQUhELFdBQUssSUFBSTtJQUNQLHVCQUFlLENBQUE7SUFDZixxQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhJLElBQUksS0FBSixJQUFJLFFBR1I7QUFFRCxNQUFNLFVBQVUsR0FBRztJQUNqQixVQUFVLEVBQUUsV0FBVyxFQUFFLHFCQUFxQjtDQUMvQyxDQUFDO0FBRUYsa0RBQWtEO0FBQ2xELE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxJQUFJLEtBQUssRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7QUFPN0YsTUFBTSxPQUFPLDJCQUEyQjtJQUx4QztRQU9TLG1CQUFjLEdBQW1CLEVBQUUsQ0FBQztRQUVwQyxXQUFNLEdBQW1CLEVBQUUsQ0FBQztRQUk1QixZQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDcEIsaUJBQVksR0FBRyxZQUFZLENBQUM7UUFDNUIsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUN4QixvQkFBZSxHQUFHLGVBQWUsQ0FBQztRQUNsQyxlQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ3hCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixpQkFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDMUIsa0JBQWEsR0FBRyxDQUFDLENBQUM7S0FtQzFCO0lBakNDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksV0FBVyxJQUFJLE9BQU8sRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQWMsRUFBRSxJQUFrQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQy9DLENBQUM7SUFFRCxxQkFBcUI7SUFFYixtQkFBbUIsQ0FBQyxLQUFhO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsOEJBQThCO1FBQzlCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDOzt3SEFsRFUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsMktDekJ4QyxpdElBcUdBOzJGRDVFYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0Usd0JBQXdCOzhCQU0zQixjQUFjO3NCQURwQixLQUFLO2dCQUdDLE1BQU07c0JBRFosS0FBSztnQkFHQyxTQUFTO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFTdGF0ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvYXBpJztcbmltcG9ydCB7IElDeWNsZUpTT05MRCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IGtleVRvTGFiZWwgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcblxuaW1wb3J0IHsgaXNWYWxpZEtleSB9IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IGJhc2VVcmwsIGRlZmF1bHRMYWJlbCB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5cbmVudW0gVmlldyB7XG4gIHRhYmxlID0gJ3RhYmxlJyxcbiAgbG9ncyA9ICdsb2dzJ1xufVxuXG5jb25zdCBoZWFkZXJLZXlzID0gW1xuICAnY3ljbGUuaWQnLCAnY3ljbGUuQGlkJywgJ2N5Y2xlLmNvbXBsZXRlbmVzcy4nXG5dO1xuXG4vLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggc2NoZW1hIHZlcnNpb24gPCAxNFxuY29uc3QgZ2V0Q29tcGxldGVuZXNzID0gKGN5Y2xlOiBhbnkpID0+IGN5Y2xlPy5jb21wbGV0ZW5lc3MgfHwgY3ljbGU/LmRhdGFDb21wbGV0ZW5lc3MgfHwge307XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLWN5Y2xlcy1jb21wbGV0ZW5lc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3ljbGVzLWNvbXBsZXRlbmVzcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N5Y2xlcy1jb21wbGV0ZW5lc3MuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDeWNsZXNDb21wbGV0ZW5lc3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICBwdWJsaWMgb3JpZ2luYWxWYWx1ZXM6IElDeWNsZUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjeWNsZXM6IElDeWNsZUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhU3RhdGU/OiBEYXRhU3RhdGU7XG5cbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBkZWZhdWx0TGFiZWwgPSBkZWZhdWx0TGFiZWw7XG4gIHB1YmxpYyBrZXlUb0xhYmVsID0ga2V5VG9MYWJlbDtcbiAgcHVibGljIGdldENvbXBsZXRlbmVzcyA9IGdldENvbXBsZXRlbmVzcztcbiAgcHVibGljIGhlYWRlcktleXMgPSBoZWFkZXJLZXlzO1xuICBwdWJsaWMgc2hvd0Rvd25sb2FkID0gZmFsc2U7XG4gIHB1YmxpYyBWaWV3ID0gVmlldztcbiAgcHVibGljIHNlbGVjdGVkVmlldyA9IFZpZXcudGFibGU7XG4gIHB1YmxpYyBzZWxlY3RlZEluZGV4ID0gMDtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKCdjeWNsZXMnIGluIGNoYW5nZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRJbmRleCh0aGlzLnNlbGVjdGVkSW5kZXgpO1xuICAgIH1cbiAgICBpZiAoJ2RhdGFTdGF0ZScgaW4gY2hhbmdlcykge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBWaWV3LnRhYmxlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5SWQoX2luZGV4OiBudW1iZXIsIGl0ZW06IElDeWNsZUpTT05MRCkge1xuICAgIHJldHVybiBpdGVtWydAaWQnXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29tcGxldGVuZXNzS2V5cygpIHtcbiAgICBjb25zdCBbY3ljbGVdID0gdGhpcy5jeWNsZXM7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGdldENvbXBsZXRlbmVzcyhjeWNsZSkpLmZpbHRlcihpc1ZhbGlkS2V5KS5zb3J0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3JpZ2luYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVN0YXRlID09PSBEYXRhU3RhdGUub3JpZ2luYWw7XG4gIH1cblxuICAvLyBSZWNhbGN1bGF0aW9uIGxvZ3NcblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIGZvcmNlIGEgcmVmcmVzaCBvZiB0aGUgbG9nc1xuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuc2VsZWN0ZWRJbmRleCA9IGluZGV4KSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfX0pIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVTZWxlY3RlZEluZGV4KCt2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLXZhcmlhYmxlIGlzLWFsaWduLWl0ZW1zLWNlbnRlciBpcy0yIG0tMFwiPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy50YWJsZVwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1naG9zdFwiIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCJcbiAgICAgICAgbmdiVG9vbHRpcD1cIkRvd25sb2FkIGFzIENTVlwiIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICA+XG4gICAgICAgIDxmYS1pY29uIGljb249XCJkb3dubG9hZFwiPjwvZmEtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIiAqbmdJZj1cIiFpc09yaWdpbmFsXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIiBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCIgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcudGFibGVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJsaXN0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5UYWJsZSB2aWV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9nc1wiIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSBWaWV3LmxvZ3NcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJjYWxjdWxhdG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5SZWNhbGN1bGF0aW9ucyBsb2dzPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwicHgtMyBwYi0zXCIgW2NsYXNzLmlzLWhpZGRlbl09XCJzZWxlY3RlZFZpZXcgIT09IFZpZXcudGFibGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN5Y2xlcy5sZW5ndGg7IGVsc2UgZW1wdHlUYWJsZVwiPlxuICAgIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgW25iUm93c109XCJjeWNsZXMubGVuZ3RoXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1uYXJyb3cgaXMtc3RyaXBlZFwiPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiaGFzLXRleHQtd2VpZ2h0LXNlbWlib2xkXCI+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHRcIj48L3RoPlxuICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb21wbGV0ZW5lc3Mgb2YgY29tcGxldGVuZXNzS2V5c1wiXG4gICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImNvbXBsZXRlbmVzc1wiXG4gICAgICAgICAgICA+PGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hL0NvbXBsZXRlbmVzcyMnICsgY29tcGxldGVuZXNzXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3trZXlUb0xhYmVsKGNvbXBsZXRlbmVzcyl9fTwvYT48L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjeWNsZSBvZiBjeWNsZXM7IHRyYWNrQnk6IHRyYWNrQnlJZDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy1ib3JkZXItcmlnaHRcIiBbYXR0ci50aXRsZV09XCJkZWZhdWx0TGFiZWwoY3ljbGUpXCI+XG4gICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBbbm9kZV09XCJjeWNsZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e2kgKyAxfX0uIHt7ZGVmYXVsdExhYmVsKGN5Y2xlKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJpcy1ub3dyYXBcIiAqbmdGb3I9XCJsZXQgY29tcGxldGVuZXNzIG9mIGNvbXBsZXRlbmVzc0tleXNcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e2dldENvbXBsZXRlbmVzcyhjeWNsZSlbY29tcGxldGVuZXNzXSA/ICdDb21wbGV0ZScgOiAnSW5jb21wbGV0ZSd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZSBjbGFzcz1cIm1sLTFcIiBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbm9kZV09XCJnZXRDb21wbGV0ZW5lc3MoY3ljbGUpXCJcbiAgICAgICAgICAgICAgICAgIFtrZXldPVwiY29tcGxldGVuZXNzXCJcbiAgICAgICAgICAgICAgICA+PC9oZS1ibGFuay1ub2RlLXN0YXRlPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9oZS1kYXRhLXRhYmxlPlxuXG4gICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlXCIgW3Nob3dBZ2dyZWdhdGVkXT1cImZhbHNlXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZT5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzICYmICFpc09yaWdpbmFsXCI+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zIHB0LTIgcHgtM1wiICpuZ0lmPVwiY3ljbGVzLmxlbmd0aCA+IDFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhIEN5Y2xlPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInNlbGVjdEluZGV4KCRldmVudClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBjeWNsZXM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiaVwiPnt7aSArIDF9fS4ge3tkZWZhdWx0TGFiZWwodmFsdWUpfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGhlLWN5Y2xlcy1jb21wbGV0ZW5lc3MtbG9ncyAqbmdJZj1cInNlbGVjdGVkSW5kZXggPj0gMFwiXG4gICAgW2N5Y2xlXT1cImN5Y2xlc1tzZWxlY3RlZEluZGV4XVwiXG4gICAgW29yaWdpbmFsVmFsdWVzXT1cIm9yaWdpbmFsVmFsdWVzW3NlbGVjdGVkSW5kZXhdPy5jb21wbGV0ZW5lc3NcIlxuICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwiY3ljbGVzW3NlbGVjdGVkSW5kZXhdPy5jb21wbGV0ZW5lc3NcIlxuICA+PC9oZS1jeWNsZXMtY29tcGxldGVuZXNzLWxvZ3M+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlPlxuICA8ZGl2IGNsYXNzPVwicGFuZWwtYmxvY2tcIj5cbiAgICA8c3Bhbj5ObyBjb21wbGV0ZW5lc3MgZGF0YTwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48aGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0gKm5nSWY9XCJzaG93RG93bmxvYWRcIlxuICBbbm9kZXNdPVwiY3ljbGVzXCIgZmlsZW5hbWU9XCJjb21wbGV0ZW5lc3MuY3N2XCIgW2lzVXBsb2FkXT1cImZhbHNlXCJcbiAgW2hlYWRlcktleXNdPVwiaGVhZGVyS2V5c1wiXG4gIChjbG9zZWQpPVwic2hvd0Rvd25sb2FkID0gZmFsc2VcIlxuPjwvaGUtbm9kZS1jc3YtZXhwb3J0LWNvbmZpcm0+XG4iXX0=