@c8y/ngx-components 1021.73.3 → 1021.73.8

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 (41) hide show
  1. package/branding/shared/data/store-branding.service.d.ts.map +1 -1
  2. package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
  3. package/core/beta-feature/beta-preview.service.d.ts +1 -1
  4. package/core/beta-feature/beta-preview.service.d.ts.map +1 -1
  5. package/core/date-time-picker/date-time-picker.component.d.ts +4 -1
  6. package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  7. package/esm2022/branding/shared/data/store-branding.service.mjs +13 -4
  8. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +4 -5
  9. package/esm2022/core/beta-feature/beta-preview.service.mjs +10 -6
  10. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +27 -14
  11. package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +3 -3
  12. package/esm2022/datapoint-selector/datapoint-selector.component.mjs +3 -3
  13. package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +3 -3
  14. package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.mjs +3 -3
  15. package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.mjs +3 -3
  16. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +12 -3
  17. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  18. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +3 -4
  19. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  20. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +2 -2
  21. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  22. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -2
  23. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  24. package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -2
  25. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  26. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +4 -4
  27. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components.mjs +35 -18
  29. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  30. package/locales/de.po +314 -41
  31. package/locales/es.po +315 -42
  32. package/locales/fr.po +315 -42
  33. package/locales/ja_JP.po +308 -47
  34. package/locales/ko.po +314 -42
  35. package/locales/locales.pot +5 -27
  36. package/locales/nl.po +312 -40
  37. package/locales/pl.po +315 -42
  38. package/locales/pt_BR.po +312 -39
  39. package/locales/zh_CN.po +312 -40
  40. package/locales/zh_TW.po +313 -42
  41. package/package.json +1 -1
@@ -80,14 +80,18 @@ export class PreviewService extends ExtensionPointForPlugins {
80
80
  this.reload$.next(this.toggledFeaturesWithReload.size > 0);
81
81
  }
82
82
  /**
83
- * Marks all features as seen by the user and updates the local storage.
83
+ * Marks all unseen features as seen by the user and updates the local storage.
84
84
  * This assumes all features are provided via the `items$` observable.
85
85
  */
86
86
  async markAllFeaturesAsSeen() {
87
- const features = await firstValueFrom(this.items$);
88
- const featureNames = features.map(feature => feature.label);
89
- localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(featureNames));
90
- this.seenFeatures$.next(featureNames);
87
+ const features = await firstValueFrom(this.getAvailableFeatures$());
88
+ const newFeatureNames = features.map(feature => feature.label);
89
+ const storedFeatures = localStorage.getItem(this.LOCAL_STORAGE_KEY);
90
+ const existingFeatureNames = storedFeatures ? JSON.parse(storedFeatures) : [];
91
+ // Update the local storage with unique feature names and remove duplicates
92
+ const updatedFeatureNames = Array.from(new Set([...existingFeatureNames, ...newFeatureNames]));
93
+ localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(updatedFeatureNames));
94
+ this.seenFeatures$.next(updatedFeatureNames);
91
95
  }
92
96
  /**
93
97
  * Filters the features to only include those that are available by checking the feature toggle API.
@@ -123,4 +127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
123
127
  type: Injectable,
124
128
  args: [{ providedIn: 'root' }]
125
129
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.PluginsResolveService }] });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0YS1wcmV2aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2JldGEtZmVhdHVyZS9iZXRhLXByZXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUdMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixjQUFjLEVBQ2QsY0FBYyxFQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUUzRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWdCLGNBQWMsQ0FBQyxDQUFDO0FBRTlFLE1BQU0sVUFBVSxXQUFXLENBQ3pCLE9BQXFDLEVBQ3JDLE9BQXFDO0lBRXJDLE9BQU8sV0FBVyxDQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUdELE1BQU0sT0FBTyxjQUFlLFNBQVEsd0JBQXFDO0lBZXZFLFlBQVksWUFBc0IsRUFBRSxhQUFvQztRQUN0RSxLQUFLLENBQUMsWUFBWSxF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QUM7SUFFUyxvQkFBb0I7UUFDNUIsT0FBTyxlQUFlLENBQWMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUQsZ0JBQWdCLENBQWMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDM0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDekMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDOytHQXpJVSxjQUFjO21IQUFkLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBHZW5lcmljSG9va09wdGlvbnMsXG4gIEdlbmVyaWNIb29rVHlwZSxcbiAgaG9va0dlbmVyaWMsXG4gIGdldEluamVjdGVkSG9va3MsXG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgZnJvbVRyaWdnZXJPbmNlLFxuICBzdGF0ZVRvRmFjdG9yeSxcbiAgc29ydEJ5UHJpb3JpdHlcbn0gZnJvbSAnLi4vY29tbW9uL2V4dGVuc2lvbi1ob29rcyc7XG5pbXBvcnQgeyBCZXRhRmVhdHVyZSB9IGZyb20gJy4vYmV0YS1wcmV2aWV3Lm1vZGVsJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmVhdHVyZVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBGZWF0dXJlQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi9mZWF0dXJlLWNhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vb3B0aW9ucy5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IEhPT0tfUFJFVklFVyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCZXRhRmVhdHVyZVtdPignSE9PS19QUkVWSUVXJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBob29rUHJldmlldyhcbiAgcHJldmlldzogR2VuZXJpY0hvb2tUeXBlPEJldGFGZWF0dXJlPixcbiAgb3B0aW9ucz86IFBhcnRpYWw8R2VuZXJpY0hvb2tPcHRpb25zPlxuKSB7XG4gIHJldHVybiBob29rR2VuZXJpYzxCZXRhRmVhdHVyZT4ocHJldmlldywgSE9PS19QUkVWSUVXLCBvcHRpb25zKTtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3U2VydmljZSBleHRlbmRzIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2luczxCZXRhRmVhdHVyZT4ge1xuICBpdGVtcyQ6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4gPSB0aGlzLnNldHVwSXRlbXNPYnNlcnZhYmxlKCk7XG4gIHJlbG9hZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IExPQ0FMX1NUT1JBR0VfS0VZID0gJ2M4eV9iZXRhX2ZlYXR1cmVzX3NlZW4nO1xuICBwcml2YXRlIHNlZW5GZWF0dXJlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPih0aGlzLmdldFNlZW5GZWF0dXJlcygpKTtcbiAgaGFzVW5zZWVuRmVhdHVyZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5nZXRBdmFpbGFibGVGZWF0dXJlcyQoKSwgdGhpcy5zZWVuRmVhdHVyZXMkXSkucGlwZShcbiAgICBtYXAoKFtmZWF0dXJlcywgc2Vlbl0pID0+IGZlYXR1cmVzLnNvbWUoZmVhdHVyZSA9PiAhc2Vlbi5pbmNsdWRlcyhmZWF0dXJlLmxhYmVsKSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmZWF0dXJlU2VydmljZSA9IGluamVjdChGZWF0dXJlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmVhdHVyZUNhY2hlU2VydmljZSA9IGluamVjdChGZWF0dXJlQ2FjaGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zU2VydmljZSA9IGluamVjdChPcHRpb25zU2VydmljZSk7XG5cbiAgcHJpdmF0ZSB0b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTsgLy8gdHJhY2sgZmVhdHVyZXMgd2l0aCBzZXR0aW5ncy5yZWxvYWQgPSB0cnVlXG5cbiAgY29uc3RydWN0b3Iocm9vdEluamVjdG9yOiBJbmplY3RvciwgcGx1Z2luU2VydmljZTogUGx1Z2luc1Jlc29sdmVTZXJ2aWNlKSB7XG4gICAgc3VwZXIocm9vdEluamVjdG9yLCBwbHVnaW5TZXJ2aWNlKTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBTZXQ8QmV0YUZlYXR1cmU+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGZlYXR1cmUuXG4gICAqIEBwYXJhbSBrZXkgVGhlIHVuaXF1ZSBrZXkgZm9yIHRoZSBmZWF0dXJlLlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGJvb2xlYW4+IHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGZlYXR1cmUuXG4gICAqL1xuICBnZXRTdGF0ZSQoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcyQucGlwZShcbiAgICAgIHN3aXRjaE1hcChmZWF0dXJlcyA9PlxuICAgICAgICB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldCQoJ2VuYWJsZUFsbEJldGFGZWF0dXJlcycpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKGVuYWJsZUFsbEJldGFGZWF0dXJlcyA9PiB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlQWxsQmV0YUZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSk7XG4gICAgICAgICAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGZWF0dXJlIHdpdGgga2V5IFwiJHtrZXl9XCIgZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5hY3RpdmUkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlLmFjdGl2ZSQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlQ2FjaGVTZXJ2aWNlLmdldEZlYXR1cmVTdGF0ZShrZXkpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBmZWF0dXJlLlxuICAgKiBAcGFyYW0ga2V5IFRoZSB1bmlxdWUga2V5IG9yIGxhYmVsIGZvciB0aGUgZmVhdHVyZS4gTGFiZWwgaXMgdXNlZCB0byBmaW5kIHRoZSBjdXN0b20gZmVhdHVyZXMuXG4gICAqIEByZXR1cm5zIFByb21pc2U8dm9pZD4gYWZ0ZXIgdG9nZ2xpbmcgdGhlIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgc2V0RmVhdHVyZUFjdGl2ZVN0YXRlKGtleTogc3RyaW5nLCB0b2dnbGVWYWx1ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5pdGVtcyQpO1xuICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSkgfHwgZmVhdHVyZXMuZmluZChmID0+IGYubGFiZWwgPT09IGtleSk7XG5cbiAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmVhdHVyZSB3aXRoIGtleSBcIiR7a2V5fVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cblxuICAgIGlmIChmZWF0dXJlLm9uVG9nZ2xlKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgZmVhdHVyZS5vblRvZ2dsZSh0b2dnbGVWYWx1ZSk7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdG9nZ2xlIGZlYXR1cmUgd2l0aCBrZXkgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmZWF0dXJlVG9VcGRhdGUgPSB7IGtleTogZmVhdHVyZS5rZXksIGFjdGl2ZTogdG9nZ2xlVmFsdWUgfTtcbiAgICBhd2FpdCB0aGlzLmZlYXR1cmVTZXJ2aWNlLnVwZGF0ZUZlYXR1cmUoZmVhdHVyZVRvVXBkYXRlKTtcbiAgICBhd2FpdCB0aGlzLmZlYXR1cmVDYWNoZVNlcnZpY2UucmVzZXRGZWF0dXJlU3RhdGUoKTtcblxuICAgIGlmIChmZWF0dXJlLnNldHRpbmdzPy5yZWxvYWQpIHtcbiAgICAgIGlmICh0aGlzLnRvZ2dsZWRGZWF0dXJlc1dpdGhSZWxvYWQuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmRlbGV0ZShrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmFkZChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVsb2FkJC5uZXh0KHRoaXMudG9nZ2xlZEZlYXR1cmVzV2l0aFJlbG9hZC5zaXplID4gMCk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgYWxsIGZlYXR1cmVzIGFzIHNlZW4gYnkgdGhlIHVzZXIgYW5kIHVwZGF0ZXMgdGhlIGxvY2FsIHN0b3JhZ2UuXG4gICAqIFRoaXMgYXNzdW1lcyBhbGwgZmVhdHVyZXMgYXJlIHByb3ZpZGVkIHZpYSB0aGUgYGl0ZW1zJGAgb2JzZXJ2YWJsZS5cbiAgICovXG4gIGFzeW5jIG1hcmtBbGxGZWF0dXJlc0FzU2VlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaXRlbXMkKTtcbiAgICBjb25zdCBmZWF0dXJlTmFtZXMgPSBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PiBmZWF0dXJlLmxhYmVsKTtcblxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTE9DQUxfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGZlYXR1cmVOYW1lcykpO1xuICAgIHRoaXMuc2VlbkZlYXR1cmVzJC5uZXh0KGZlYXR1cmVOYW1lcyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyB0aGUgZmVhdHVyZXMgdG8gb25seSBpbmNsdWRlIHRob3NlIHRoYXQgYXJlIGF2YWlsYWJsZSBieSBjaGVja2luZyB0aGUgZmVhdHVyZSB0b2dnbGUgQVBJLlxuICAgKi9cbiAgZ2V0QXZhaWxhYmxlRmVhdHVyZXMkKCk6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGZlYXR1cmVzID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoXG4gICAgICAgICAgZmVhdHVyZXMubWFwKGZlYXQgPT5cbiAgICAgICAgICAgIGZlYXQua2V5XG4gICAgICAgICAgICAgID8gdGhpcy5mZWF0dXJlQ2FjaGVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAuZmVhdHVyZUV4aXN0cyhmZWF0LmtleSlcbiAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChleGlzdHMgPT4gKGV4aXN0cyA/IGZlYXQgOiBmYWxzZSkpKVxuICAgICAgICAgICAgICA6IG9mKGZlYXQpXG4gICAgICAgICAgKVxuICAgICAgICApLnBpcGUobWFwKGZlYXR1cmVzID0+IGZlYXR1cmVzLmZpbHRlcihCb29sZWFuKSkpIGFzIE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT47XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZmVhdHVyZSBuYW1lcyB0aGF0IGhhdmUgYmVlbiBzZWVuIGJ5IHRoZSB1c2VyLiBUaGlzIGlzIHJldHJpZXZlZCBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAqL1xuICBwcml2YXRlIGdldFNlZW5GZWF0dXJlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc2VlbkZlYXR1cmVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTF9TVE9SQUdFX0tFWSk7XG4gICAgcmV0dXJuIHNlZW5GZWF0dXJlcyA/IEpTT04ucGFyc2Uoc2VlbkZlYXR1cmVzKSA6IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwSXRlbXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4ge1xuICAgIHJldHVybiBmcm9tVHJpZ2dlck9uY2U8QmV0YUZlYXR1cmU+KHVuZGVmaW5lZCwgdGhpcy5yZWZyZXNoJCwgW1xuICAgICAgZ2V0SW5qZWN0ZWRIb29rczxCZXRhRmVhdHVyZT4oSE9PS19QUkVWSUVXLCB0aGlzLmluamVjdG9ycyksXG4gICAgICAoKSA9PiB0aGlzLmZhY3RvcmllcyxcbiAgICAgIHN0YXRlVG9GYWN0b3J5KHRoaXMuc3RhdGUkKVxuICAgIF0pLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgbWFwKGZlYXR1cmVzID0+IHNvcnRCeVByaW9yaXR5KGZlYXR1cmVzKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0YS1wcmV2aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2JldGEtZmVhdHVyZS9iZXRhLXByZXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUdMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixjQUFjLEVBQ2QsY0FBYyxFQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUUzRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWdCLGNBQWMsQ0FBQyxDQUFDO0FBRTlFLE1BQU0sVUFBVSxXQUFXLENBQ3pCLE9BQXFDLEVBQ3JDLE9BQXFDO0lBRXJDLE9BQU8sV0FBVyxDQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUdELE1BQU0sT0FBTyxjQUFlLFNBQVEsd0JBQXFDO0lBZXZFLFlBQVksWUFBc0IsRUFBRSxhQUFvQztRQUN0RSxLQUFLLENBQUMsWUFBWSxF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QUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBOEIsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWU7UUFDckIsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRSxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFUyxvQkFBb0I7UUFDNUIsT0FBTyxlQUFlLENBQWMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUQsZ0JBQWdCLENBQWMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDM0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDekMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDOytHQS9JVSxjQUFjO21IQUFkLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBHZW5lcmljSG9va09wdGlvbnMsXG4gIEdlbmVyaWNIb29rVHlwZSxcbiAgaG9va0dlbmVyaWMsXG4gIGdldEluamVjdGVkSG9va3MsXG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgZnJvbVRyaWdnZXJPbmNlLFxuICBzdGF0ZVRvRmFjdG9yeSxcbiAgc29ydEJ5UHJpb3JpdHlcbn0gZnJvbSAnLi4vY29tbW9uL2V4dGVuc2lvbi1ob29rcyc7XG5pbXBvcnQgeyBCZXRhRmVhdHVyZSB9IGZyb20gJy4vYmV0YS1wcmV2aWV3Lm1vZGVsJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmVhdHVyZVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBGZWF0dXJlQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi9mZWF0dXJlLWNhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vb3B0aW9ucy5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IEhPT0tfUFJFVklFVyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCZXRhRmVhdHVyZVtdPignSE9PS19QUkVWSUVXJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBob29rUHJldmlldyhcbiAgcHJldmlldzogR2VuZXJpY0hvb2tUeXBlPEJldGFGZWF0dXJlPixcbiAgb3B0aW9ucz86IFBhcnRpYWw8R2VuZXJpY0hvb2tPcHRpb25zPlxuKSB7XG4gIHJldHVybiBob29rR2VuZXJpYzxCZXRhRmVhdHVyZT4ocHJldmlldywgSE9PS19QUkVWSUVXLCBvcHRpb25zKTtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3U2VydmljZSBleHRlbmRzIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2luczxCZXRhRmVhdHVyZT4ge1xuICBpdGVtcyQ6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4gPSB0aGlzLnNldHVwSXRlbXNPYnNlcnZhYmxlKCk7XG4gIHJlbG9hZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IExPQ0FMX1NUT1JBR0VfS0VZID0gJ2M4eV9iZXRhX2ZlYXR1cmVzX3NlZW4nO1xuICBwcml2YXRlIHNlZW5GZWF0dXJlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPih0aGlzLmdldFNlZW5GZWF0dXJlcygpKTtcbiAgaGFzVW5zZWVuRmVhdHVyZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5nZXRBdmFpbGFibGVGZWF0dXJlcyQoKSwgdGhpcy5zZWVuRmVhdHVyZXMkXSkucGlwZShcbiAgICBtYXAoKFtmZWF0dXJlcywgc2Vlbl0pID0+IGZlYXR1cmVzLnNvbWUoZmVhdHVyZSA9PiAhc2Vlbi5pbmNsdWRlcyhmZWF0dXJlLmxhYmVsKSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmZWF0dXJlU2VydmljZSA9IGluamVjdChGZWF0dXJlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmVhdHVyZUNhY2hlU2VydmljZSA9IGluamVjdChGZWF0dXJlQ2FjaGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zU2VydmljZSA9IGluamVjdChPcHRpb25zU2VydmljZSk7XG5cbiAgcHJpdmF0ZSB0b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTsgLy8gdHJhY2sgZmVhdHVyZXMgd2l0aCBzZXR0aW5ncy5yZWxvYWQgPSB0cnVlXG5cbiAgY29uc3RydWN0b3Iocm9vdEluamVjdG9yOiBJbmplY3RvciwgcGx1Z2luU2VydmljZTogUGx1Z2luc1Jlc29sdmVTZXJ2aWNlKSB7XG4gICAgc3VwZXIocm9vdEluamVjdG9yLCBwbHVnaW5TZXJ2aWNlKTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBTZXQ8QmV0YUZlYXR1cmU+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGZlYXR1cmUuXG4gICAqIEBwYXJhbSBrZXkgVGhlIHVuaXF1ZSBrZXkgZm9yIHRoZSBmZWF0dXJlLlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGJvb2xlYW4+IHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGZlYXR1cmUuXG4gICAqL1xuICBnZXRTdGF0ZSQoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcyQucGlwZShcbiAgICAgIHN3aXRjaE1hcChmZWF0dXJlcyA9PlxuICAgICAgICB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldCQoJ2VuYWJsZUFsbEJldGFGZWF0dXJlcycpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKGVuYWJsZUFsbEJldGFGZWF0dXJlcyA9PiB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlQWxsQmV0YUZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSk7XG4gICAgICAgICAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGZWF0dXJlIHdpdGgga2V5IFwiJHtrZXl9XCIgZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5hY3RpdmUkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlLmFjdGl2ZSQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlQ2FjaGVTZXJ2aWNlLmdldEZlYXR1cmVTdGF0ZShrZXkpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBmZWF0dXJlLlxuICAgKiBAcGFyYW0ga2V5IFRoZSB1bmlxdWUga2V5IG9yIGxhYmVsIGZvciB0aGUgZmVhdHVyZS4gTGFiZWwgaXMgdXNlZCB0byBmaW5kIHRoZSBjdXN0b20gZmVhdHVyZXMuXG4gICAqIEByZXR1cm5zIFByb21pc2U8dm9pZD4gYWZ0ZXIgdG9nZ2xpbmcgdGhlIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgc2V0RmVhdHVyZUFjdGl2ZVN0YXRlKGtleTogc3RyaW5nLCB0b2dnbGVWYWx1ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5pdGVtcyQpO1xuICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSkgfHwgZmVhdHVyZXMuZmluZChmID0+IGYubGFiZWwgPT09IGtleSk7XG5cbiAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmVhdHVyZSB3aXRoIGtleSBcIiR7a2V5fVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cblxuICAgIGlmIChmZWF0dXJlLm9uVG9nZ2xlKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgZmVhdHVyZS5vblRvZ2dsZSh0b2dnbGVWYWx1ZSk7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdG9nZ2xlIGZlYXR1cmUgd2l0aCBrZXkgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmZWF0dXJlVG9VcGRhdGUgPSB7IGtleTogZmVhdHVyZS5rZXksIGFjdGl2ZTogdG9nZ2xlVmFsdWUgfTtcbiAgICBhd2FpdCB0aGlzLmZlYXR1cmVTZXJ2aWNlLnVwZGF0ZUZlYXR1cmUoZmVhdHVyZVRvVXBkYXRlKTtcbiAgICBhd2FpdCB0aGlzLmZlYXR1cmVDYWNoZVNlcnZpY2UucmVzZXRGZWF0dXJlU3RhdGUoKTtcblxuICAgIGlmIChmZWF0dXJlLnNldHRpbmdzPy5yZWxvYWQpIHtcbiAgICAgIGlmICh0aGlzLnRvZ2dsZWRGZWF0dXJlc1dpdGhSZWxvYWQuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmRlbGV0ZShrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmFkZChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVsb2FkJC5uZXh0KHRoaXMudG9nZ2xlZEZlYXR1cmVzV2l0aFJlbG9hZC5zaXplID4gMCk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgYWxsIHVuc2VlbiBmZWF0dXJlcyBhcyBzZWVuIGJ5IHRoZSB1c2VyIGFuZCB1cGRhdGVzIHRoZSBsb2NhbCBzdG9yYWdlLlxuICAgKiBUaGlzIGFzc3VtZXMgYWxsIGZlYXR1cmVzIGFyZSBwcm92aWRlZCB2aWEgdGhlIGBpdGVtcyRgIG9ic2VydmFibGUuXG4gICAqL1xuICBhc3luYyBtYXJrQWxsRmVhdHVyZXNBc1NlZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmdldEF2YWlsYWJsZUZlYXR1cmVzJCgpKTtcbiAgICBjb25zdCBuZXdGZWF0dXJlTmFtZXMgPSBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PiBmZWF0dXJlLmxhYmVsKTtcblxuICAgIGNvbnN0IHN0b3JlZEZlYXR1cmVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTF9TVE9SQUdFX0tFWSk7XG4gICAgY29uc3QgZXhpc3RpbmdGZWF0dXJlTmFtZXM6IHN0cmluZ1tdID0gc3RvcmVkRmVhdHVyZXMgPyBKU09OLnBhcnNlKHN0b3JlZEZlYXR1cmVzKSA6IFtdO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBsb2NhbCBzdG9yYWdlIHdpdGggdW5pcXVlIGZlYXR1cmUgbmFtZXMgYW5kIHJlbW92ZSBkdXBsaWNhdGVzXG4gICAgY29uc3QgdXBkYXRlZEZlYXR1cmVOYW1lcyA9IEFycmF5LmZyb20obmV3IFNldChbLi4uZXhpc3RpbmdGZWF0dXJlTmFtZXMsIC4uLm5ld0ZlYXR1cmVOYW1lc10pKTtcblxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTE9DQUxfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWRGZWF0dXJlTmFtZXMpKTtcbiAgICB0aGlzLnNlZW5GZWF0dXJlcyQubmV4dCh1cGRhdGVkRmVhdHVyZU5hbWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRoZSBmZWF0dXJlcyB0byBvbmx5IGluY2x1ZGUgdGhvc2UgdGhhdCBhcmUgYXZhaWxhYmxlIGJ5IGNoZWNraW5nIHRoZSBmZWF0dXJlIHRvZ2dsZSBBUEkuXG4gICAqL1xuICBnZXRBdmFpbGFibGVGZWF0dXJlcyQoKTogT2JzZXJ2YWJsZTxCZXRhRmVhdHVyZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZmVhdHVyZXMgPT4ge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChcbiAgICAgICAgICBmZWF0dXJlcy5tYXAoZmVhdCA9PlxuICAgICAgICAgICAgZmVhdC5rZXlcbiAgICAgICAgICAgICAgPyB0aGlzLmZlYXR1cmVDYWNoZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgIC5mZWF0dXJlRXhpc3RzKGZlYXQua2V5KVxuICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKGV4aXN0cyA9PiAoZXhpc3RzID8gZmVhdCA6IGZhbHNlKSkpXG4gICAgICAgICAgICAgIDogb2YoZmVhdClcbiAgICAgICAgICApXG4gICAgICAgICkucGlwZShtYXAoZmVhdHVyZXMgPT4gZmVhdHVyZXMuZmlsdGVyKEJvb2xlYW4pKSkgYXMgT2JzZXJ2YWJsZTxCZXRhRmVhdHVyZVtdPjtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBmZWF0dXJlIG5hbWVzIHRoYXQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIHVzZXIuIFRoaXMgaXMgcmV0cmlldmVkIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0U2VlbkZlYXR1cmVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzZWVuRmVhdHVyZXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMX1NUT1JBR0VfS0VZKTtcbiAgICByZXR1cm4gc2VlbkZlYXR1cmVzID8gSlNPTi5wYXJzZShzZWVuRmVhdHVyZXMpIDogW107XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0dXBJdGVtc09ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxCZXRhRmVhdHVyZVtdPiB7XG4gICAgcmV0dXJuIGZyb21UcmlnZ2VyT25jZTxCZXRhRmVhdHVyZT4odW5kZWZpbmVkLCB0aGlzLnJlZnJlc2gkLCBbXG4gICAgICBnZXRJbmplY3RlZEhvb2tzPEJldGFGZWF0dXJlPihIT09LX1BSRVZJRVcsIHRoaXMuaW5qZWN0b3JzKSxcbiAgICAgICgpID0+IHRoaXMuZmFjdG9yaWVzLFxuICAgICAgc3RhdGVUb0ZhY3RvcnkodGhpcy5zdGF0ZSQpXG4gICAgXSkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAoZmVhdHVyZXMgPT4gc29ydEJ5UHJpb3JpdHkoZmVhdHVyZXMpKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -52,8 +52,8 @@ export class DateTimePickerComponent {
52
52
  // eslint-disable-next-line @typescript-eslint/no-empty-function
53
53
  this.onTouched = () => { };
54
54
  this.form = new FormGroup({});
55
- this.form.addControl('date', new FormControl(null));
56
- this.form.addControl('time', new FormControl(null));
55
+ this.form.addControl('date', new FormControl(undefined));
56
+ this.form.addControl('time', new FormControl(undefined));
57
57
  this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {
58
58
  this.setDatetime(value);
59
59
  this.previousValue = value;
@@ -80,19 +80,26 @@ export class DateTimePickerComponent {
80
80
  ngAfterViewInit() {
81
81
  this.cd.detectChanges();
82
82
  }
83
+ onTimeChange(time) {
84
+ this.form.get('time').setValue(time, { emitEvent: true });
85
+ }
86
+ get dateControl() {
87
+ return this.form.get('date');
88
+ }
83
89
  /**
84
90
  * Control Value Accessor - If form value changes by external factor, update date property and internal form with new value.
85
91
  */
86
92
  writeValue(value) {
87
93
  if (typeof value === 'string' && value.length) {
88
94
  this.date = new Date(value);
95
+ this.time = this.date;
89
96
  this.form.setValue({
90
97
  date: new Date(value),
91
98
  time: this.date
92
99
  }, { emitEvent: false });
93
100
  }
94
101
  else {
95
- this.form.setValue({ date: null, time: null }, { emitEvent: false });
102
+ return;
96
103
  }
97
104
  this.previousValue = this.form.value;
98
105
  }
@@ -171,27 +178,33 @@ export class DateTimePickerComponent {
171
178
  // if date input is cleared from a previous correct value, clear form value:
172
179
  if (this.isInputCleared(dateTime)) {
173
180
  this.form.get('date').setValue(undefined, { emitEvent: false });
181
+ this.time = undefined;
174
182
  this.form.get('time').setValue(undefined, { emitEvent: false });
175
183
  this.onChange(null);
176
184
  return;
177
185
  }
186
+ const validTime = this.verifyDate(dateTime.time);
187
+ const validExistingTime = this.verifyDate(this.time);
188
+ const validDate = this.verifyDate(dateTime.date);
189
+ if (!validTime && !validExistingTime) {
190
+ // Ensure dateTime.date exists before using getFullYear:
191
+ if (dateTime.date) {
192
+ dateTime.time = new Date(dateTime.date.getFullYear(), dateTime.date.getMonth(), dateTime.date.getDate(), 0, 0, 0);
193
+ this.time = dateTime.time;
194
+ }
195
+ }
178
196
  // if both date and time is invalid, do set form value to null and stop:
179
- if (!this.verifyDate(dateTime.date) && !this.verifyDate(dateTime.time)) {
197
+ if (!validDate && !validTime) {
180
198
  this.onChange(null);
181
199
  return;
182
200
  }
183
201
  // If only time is provided, set Date to today:
184
- if (!this.verifyDate(dateTime.date) && this.verifyDate(dateTime.time)) {
202
+ if (!validDate && validTime) {
185
203
  dateTime.date = new Date(dateTime.time);
186
204
  }
187
- // If only date is provided, set time to 00:00:
188
- if (this.verifyDate(dateTime.date) && !this.verifyDate(dateTime.time)) {
189
- dateTime.time = new Date(dateTime.date.getFullYear(), dateTime.date.getMonth(), dateTime.date.getDate(), 0, 0, 0);
190
- this.form.get('time').setValue(dateTime.time, { emitEvent: false });
191
- }
192
205
  // Merge date and time, and emit as new form value:
193
206
  this.date = new Date(dateTime.date);
194
- this.date.setHours(dateTime.time.getHours(), dateTime.time.getMinutes());
207
+ this.date.setHours(this.time.getHours(), this.time.getMinutes());
195
208
  this.form.get('date').setValue(dateTime.date, { emitEvent: false });
196
209
  this.onChange(this.date.toISOString());
197
210
  }
@@ -214,7 +227,7 @@ export class DateTimePickerComponent {
214
227
  useExisting: forwardRef(() => DateTimePickerComponent),
215
228
  multi: true
216
229
  }
217
- ], viewQueries: [{ propertyName: "datepicker", first: true, predicate: BsDatepickerDirective, descendants: true }], ngImport: i0, template: "<div\n class=\"datetime-picker\"\n [ngSwitch]=\"dateType\"\n>\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateAndTime'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n data-cy=\"bootstrap-date-input\"\n style=\"min-width: 120px\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"form.get('date')\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [formControl]=\"form.get('time')\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Date'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"form.get('date')\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateRange'\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Select a date range' | translate }}\"\n [formControl]=\"form.get('date')\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n adaptivePosition: true,\n rangeInputFormat: dateInputFormat\n }\"\n bsDaterangepicker\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Time'\"\n >\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [formControl]=\"form.get('time')\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n [minutesPlaceholder]=\"'MM`MINUTES`' | translate\"\n [hoursPlaceholder]=\"'HH`HOURS`' | translate\"\n [secondsPlaceholder]=\"'SS`SECONDS`' | translate\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div *ngSwitchCase=\"'SingleDateRequired'\">\n <div class=\"form-group {{ size ? 'form-group-' + size : '' }}\">\n <c8y-date-picker (onDateSelected)=\"onDateSelected.emit($event)\"></c8y-date-picker>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: CloseDatePickerDirective, selector: "[closeDatepicker]", inputs: ["closeDatepicker"] }, { kind: "ngmodule", type: BsDatepickerModule }, { kind: "directive", type: i2.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i2.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: i2.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i2.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TimepickerModule }, { kind: "component", type: i4.TimepickerComponent, selector: "timepicker", inputs: ["hourStep", "minuteStep", "secondsStep", "readonlyInput", "disabled", "mousewheel", "arrowkeys", "showSpinners", "showMeridian", "showMinutes", "showSeconds", "meridians", "min", "max", "hoursPlaceholder", "minutesPlaceholder", "secondsPlaceholder"], outputs: ["isValid", "meridianChange"] }, { kind: "component", type: DatePickerComponent, selector: "c8y-date-picker", inputs: ["placeholder", "dateInputFormat"], outputs: ["onDateSelected"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
230
+ ], viewQueries: [{ propertyName: "datepicker", first: true, predicate: BsDatepickerDirective, descendants: true }], ngImport: i0, template: "<div\n class=\"datetime-picker\"\n [ngSwitch]=\"dateType\"\n>\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateAndTime'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n data-cy=\"bootstrap-date-input\"\n style=\"min-width: 120px\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"dateControl\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [(ngModel)]=\"time\"\n (ngModelChange)=\"onTimeChange($event)\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Date'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"dateControl\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateRange'\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Select a date range' | translate }}\"\n [formControl]=\"dateControl\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n adaptivePosition: true,\n rangeInputFormat: dateInputFormat\n }\"\n bsDaterangepicker\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Time'\"\n >\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [(ngModel)]=\"time\"\n (ngModelChange)=\"onTimeChange($event)\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n [minutesPlaceholder]=\"'MM`MINUTES`' | translate\"\n [hoursPlaceholder]=\"'HH`HOURS`' | translate\"\n [secondsPlaceholder]=\"'SS`SECONDS`' | translate\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div *ngSwitchCase=\"'SingleDateRequired'\">\n <div class=\"form-group {{ size ? 'form-group-' + size : '' }}\">\n <c8y-date-picker (onDateSelected)=\"onDateSelected.emit($event)\"></c8y-date-picker>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: CloseDatePickerDirective, selector: "[closeDatepicker]", inputs: ["closeDatepicker"] }, { kind: "ngmodule", type: BsDatepickerModule }, { kind: "directive", type: i2.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i2.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: i2.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i2.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TimepickerModule }, { kind: "component", type: i4.TimepickerComponent, selector: "timepicker", inputs: ["hourStep", "minuteStep", "secondsStep", "readonlyInput", "disabled", "mousewheel", "arrowkeys", "showSpinners", "showMeridian", "showMinutes", "showSeconds", "meridians", "min", "max", "hoursPlaceholder", "minutesPlaceholder", "secondsPlaceholder"], outputs: ["isValid", "meridianChange"] }, { kind: "component", type: DatePickerComponent, selector: "c8y-date-picker", inputs: ["placeholder", "dateInputFormat"], outputs: ["onDateSelected"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
218
231
  }
219
232
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateTimePickerComponent, decorators: [{
220
233
  type: Component,
@@ -239,7 +252,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
239
252
  TimepickerModule,
240
253
  DatePickerComponent,
241
254
  C8yTranslatePipe
242
- ], template: "<div\n class=\"datetime-picker\"\n [ngSwitch]=\"dateType\"\n>\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateAndTime'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n data-cy=\"bootstrap-date-input\"\n style=\"min-width: 120px\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"form.get('date')\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [formControl]=\"form.get('time')\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Date'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"form.get('date')\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateRange'\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Select a date range' | translate }}\"\n [formControl]=\"form.get('date')\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n adaptivePosition: true,\n rangeInputFormat: dateInputFormat\n }\"\n bsDaterangepicker\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Time'\"\n >\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [formControl]=\"form.get('time')\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n [minutesPlaceholder]=\"'MM`MINUTES`' | translate\"\n [hoursPlaceholder]=\"'HH`HOURS`' | translate\"\n [secondsPlaceholder]=\"'SS`SECONDS`' | translate\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div *ngSwitchCase=\"'SingleDateRequired'\">\n <div class=\"form-group {{ size ? 'form-group-' + size : '' }}\">\n <c8y-date-picker (onDateSelected)=\"onDateSelected.emit($event)\"></c8y-date-picker>\n </div>\n </div>\n</div>\n" }]
255
+ ], template: "<div\n class=\"datetime-picker\"\n [ngSwitch]=\"dateType\"\n>\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateAndTime'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n data-cy=\"bootstrap-date-input\"\n style=\"min-width: 120px\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"dateControl\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [(ngModel)]=\"time\"\n (ngModelChange)=\"onTimeChange($event)\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Date'\"\n [closeDatepicker]=\"datepicker\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n bsDatepicker\n [outsideClick]=\"false\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n dateInputFormat: dateInputFormat,\n adaptivePosition: adaptivePosition\n }\"\n [formControl]=\"dateControl\"\n (blur)=\"onTouched()\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'DateRange'\"\n >\n <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Select a date range' | translate }}\"\n [formControl]=\"dateControl\"\n [bsConfig]=\"{\n customTodayClass: 'today',\n adaptivePosition: true,\n rangeInputFormat: dateInputFormat\n }\"\n bsDaterangepicker\n />\n </div>\n </div>\n\n <div\n class=\"d-contents\"\n *ngSwitchCase=\"'Time'\"\n >\n <timepicker\n class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n [(ngModel)]=\"time\"\n (ngModelChange)=\"onTimeChange($event)\"\n [showSeconds]=\"config.showSeconds\"\n [showSpinners]=\"config.showSpinners\"\n [showMeridian]=\"config.showMeridian\"\n [minutesPlaceholder]=\"'MM`MINUTES`' | translate\"\n [hoursPlaceholder]=\"'HH`HOURS`' | translate\"\n [secondsPlaceholder]=\"'SS`SECONDS`' | translate\"\n (wheel)=\"handleMouseWheel($event)\"\n ></timepicker>\n </div>\n\n <div *ngSwitchCase=\"'SingleDateRequired'\">\n <div class=\"form-group {{ size ? 'form-group-' + size : '' }}\">\n <c8y-date-picker (onDateSelected)=\"onDateSelected.emit($event)\"></c8y-date-picker>\n </div>\n </div>\n</div>\n" }]
243
256
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DateFormatService }], propDecorators: { _minDate: [{
244
257
  type: Input,
245
258
  args: ['minDate']
@@ -264,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
264
277
  type: ViewChild,
265
278
  args: [BsDatepickerDirective]
266
279
  }] } });
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULGFBQWEsRUFDYixpQkFBaUIsRUFHakIsV0FBVyxFQUNYLG1CQUFtQixFQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJGLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JB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SyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDOzRCQUN0RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixjQUNXLElBQUksV0FDUDt3QkFDUCxRQUFRO3dCQUNSLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4QixrQkFBa0I7d0JBQ2xCLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3FCQUNqQjtzSEFRRyxRQUFRO3NCQURYLEtBQUs7dUJBQUMsU0FBUztnQkFRWixRQUFRO3NCQURYLEtBQUs7dUJBQUMsU0FBUztnQkFNaEIsV0FBVztzQkFEVixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBZU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFRTixjQUFjO3NCQURiLE1BQU07Z0JBUTJCLFVBQVU7c0JBQTNDLFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbiAgRm9ybXNNb2R1bGUsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGVcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZmlyc3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSwgQnNEYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcbmltcG9ydCB7IFBpY2tlZERhdGVzIH0gZnJvbSAnLi4vZGF0ZS1waWNrZXInO1xuaW1wb3J0IHsgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDbG9zZURhdGVQaWNrZXJEaXJlY3RpdmUgfSBmcm9tICcuL2Nsb3NlLWRhdGUtcGlja2VyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUaW1lcGlja2VyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90aW1lcGlja2VyJztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQzh5VHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uL2kxOG4vYzh5LXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IERhdGVGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL2RhdGUtZm9ybWF0LnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgRGF0ZUFuZFRpbWUge1xuICBkYXRlOiBEYXRlO1xuICB0aW1lOiBEYXRlO1xufVxuXG5pbnRlcmZhY2UgRGF0ZUFuZFRpbWVPcHRpb25zIHtcbiAgc2hvd1NwaW5uZXJzPzogYm9vbGVhbjtcbiAgc2hvd01lcmlkaWFuPzogYm9vbGVhbjtcbiAgc2hvd01pbnV0ZXM/OiBib29sZWFuO1xuICBzaG93U2Vjb25kcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIERhdGVUeXBlID0gJ0RhdGVBbmRUaW1lJyB8ICdEYXRlJyB8ICdEYXRlUmFuZ2UnIHwgJ1NpbmdsZURhdGVSZXF1aXJlZCcgfCAnVGltZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRlLXRpbWUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVUaW1lUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1N3aXRjaCxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgQ2xvc2VEYXRlUGlja2VyRGlyZWN0aXZlLFxuICAgIEJzRGF0ZXBpY2tlck1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFRpbWVwaWNrZXJNb2R1bGUsXG4gICAgRGF0ZVBpY2tlckNvbXBvbmVudCxcbiAgICBDOHlUcmFuc2xhdGVQaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICBtaW5EYXRlOiBEYXRlO1xuXG4gIEBJbnB1dCgnbWluRGF0ZScpXG4gIHNldCBfbWluRGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5taW5EYXRlID0gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBtYXhEYXRlOiBEYXRlO1xuXG4gIEBJbnB1dCgnbWF4RGF0ZScpXG4gIHNldCBfbWF4RGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXhEYXRlID0gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGRhdGVJbnB1dEZvcm1hdDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIGFkYXB0aXZlUG9zaXRpb24gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzaXplOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBkYXRlIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gRGF0ZUFuZFRpbWUgLSBEaXNwbGF5IGJvdGggZGF0ZSBhbmQgdGltZS5cbiAgICogQHBhcmFtIERhdGUgLSBEaXNwbGF5IG9ubHkgdGhlIGRhdGUgd2l0aG91dCB0aGUgdGltZS5cbiAgICogQHBhcmFtIERhdGVSYW5nZSAtIFNwZWNpZnkgYSByYW5nZSBvZiBkYXRlcy5cbiAgICogQHBhcmFtIFNpbmdsZURhdGVSZXF1aXJlZCAtIFJlcXVpcmUgdGhlIHNlbGVjdGlvbiBvZiBhIHNpbmdsZSBkYXRlLlxuICAgKiBAcGFyYW0gVGltZSAtIERpc3BsYXkgb25seSB0aGUgdGltZSB3aXRob3V0IHRoZSBkYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlICdEYXRlQW5kVGltZSdcbiAgICovXG4gIEBJbnB1dCgpXG4gIGRhdGVUeXBlOiBEYXRlVHlwZSA9ICdEYXRlQW5kVGltZSc7XG5cbiAgQElucHV0KClcbiAgY29uZmlnOiBEYXRlQW5kVGltZU9wdGlvbnMgPSB7XG4gICAgc2hvd01pbnV0ZXM6IHRydWUsXG4gICAgc2hvd1NlY29uZHM6IGZhbHNlLFxuICAgIHNob3dTcGlubmVyczogZmFsc2VcbiAgfTtcblxuICBAT3V0cHV0KClcbiAgb25EYXRlU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxQaWNrZWREYXRlcz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgZGF0ZTogRGF0ZTtcbiAgZm9ybTogRm9ybUdyb3VwO1xuXG4gIGRlZmF1bHRQbGFjZWhvbGRlciA9IGdldHRleHQoJ1NlbGVjdCBhIGRhdGXigKYnKTtcblxuICBAVmlld0NoaWxkKEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSkgZGF0ZXBpY2tlcjogQnNEYXRlcGlja2VyRGlyZWN0aXZlO1xuXG4gIHByaXZhdGUgcHJldmlvdXNWYWx1ZTogRGF0ZUFuZFRpbWU7XG4gIHByaXZhdGUgcHJldmlvdXNUaW1lUGlja2VyVmFsdWVzOiB7IGhvdXJzPzogbnVtYmVyOyBtaW51dGVzPzogbnVtYmVyIH0gPSB7fTtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBkYXRlRm9ybWF0U2VydmljZTogRGF0ZUZvcm1hdFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ2RhdGUnLCBuZXcgRm9ybUNvbnRyb2wobnVsbCkpO1xuICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCd0aW1lJywgbmV3IEZvcm1Db250cm9sKG51bGwpKTtcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlOiBEYXRlQW5kVGltZSkgPT4ge1xuICAgICAgdGhpcy5zZXREYXRldGltZSh2YWx1ZSk7XG4gICAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm0uc3RhdHVzQ2hhbmdlc1xuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRlSW5wdXRGb3JtYXQpIHtcbiAgICAgIHRoaXMuZGF0ZUlucHV0Rm9ybWF0ID0gdGhpcy5kYXRlRm9ybWF0U2VydmljZS5nZXREYXRlRm9ybWF0KCk7XG4gICAgfVxuICAgIGlmICghKCdzaG93TWVyaWRpYW4nIGluIHRoaXMuY29uZmlnKSkge1xuICAgICAgdGhpcy5jb25maWcuc2hvd01lcmlkaWFuID0gdGhpcy5kYXRlRm9ybWF0U2VydmljZS5zaG91bGRVc2VNZXJpZGlhbkZvcm1hdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9sIFZhbHVlIEFjY2Vzc29yIC0gSWYgZm9ybSB2YWx1ZSBjaGFuZ2VzIGJ5IGV4dGVybmFsIGZhY3RvciwgdXBkYXRlIGRhdGUgcHJvcGVydHkgYW5kIGludGVybmFsIGZvcm0gd2l0aCBuZXcgdmFsdWUuXG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMuZm9ybS5zZXRWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKHZhbHVlKSxcbiAgICAgICAgICB0aW1lOiB0aGlzLmRhdGVcbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh7IGRhdGU6IG51bGwsIHRpbWU6IG51bGwgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSB0aGlzLmZvcm0udmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChkaXNhYmxlZCA9PT0gdGhpcy5mb3JtPy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkaXNhYmxlZCA/IHRoaXMuZm9ybS5kaXNhYmxlKCkgOiB0aGlzLmZvcm0uZW5hYmxlKCk7XG4gIH1cblxuICB2YWxpZGF0ZShfY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICh0aGlzLmRhdGU/LmdldFRpbWUoKSA8IG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0VGltZSgpKSB7XG4gICAgICByZXR1cm4geyBkYXRlQmVmb3JlUmFuZ2VNaW46IHRydWUgfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZT8uZ2V0VGltZSgpID4gbmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRUaW1lKCkpIHtcbiAgICAgIHJldHVybiB7IGRhdGVBZnRlclJhbmdlTWF4OiB0cnVlIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgcmV0dXJuIHsgaW52YWxpZERhdGVUaW1lOiB0cnVlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByZXZpb3VzRGF5KCkge1xuICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuZGF0ZXBpY2tlci5pc09wZW47XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSAtIDEpO1xuICAgIHRoaXMuc2V0RGF0ZXRpbWUoeyBkYXRlOiB0aGlzLmRhdGUsIHRpbWU6IHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS52YWx1ZSB9KTtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXIuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIG5leHREYXkoKSB7XG4gICAgY29uc3QgaXNPcGVuID0gdGhpcy5kYXRlcGlja2VyLmlzT3BlbjtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZSh0aGlzLmRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgdGhpcy5zZXREYXRldGltZSh7IGRhdGU6IHRoaXMuZGF0ZSwgdGltZTogdGhpcy5mb3JtLmdldCgndGltZScpLnZhbHVlIH0pO1xuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5zaG93KCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVwaWNrZXIuaGlkZSgpO1xuICB9XG5cbiAgaGFuZGxlTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGhvdXJzID0gdGhpcy5mb3JtLmdldCgndGltZScpLnZhbHVlLmdldEhvdXJzKCk7XG4gICAgY29uc3QgbWludXRlcyA9IHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS52YWx1ZS5nZXRNaW51dGVzKCk7XG4gICAgLy8gZG93blxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50LmRlbHRhWSA+IDApIHtcbiAgICAgIGlmIChOdW1iZXIoaG91cnMpID09PSAyMyAmJiB0aGlzLnByZXZpb3VzVGltZVBpY2tlclZhbHVlcy5ob3VycyAhPT0gMjMpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c0RheSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwXG4gICAgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcbiAgICAgIGlmICh0aGlzLnByZXZpb3VzVGltZVBpY2tlclZhbHVlcy5ob3VycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHNjcm9sbGluZyB1cCBvbiBlbXB0eSBmb3JtIHNob3VsZCBub3QgcmVzdWx0IGluIGluY3JlYXNpbmcgZGF5LlxuICAgICAgfSBlbHNlIGlmIChOdW1iZXIoaG91cnMpID09PSAwICYmIHRoaXMucHJldmlvdXNUaW1lUGlja2VyVmFsdWVzLmhvdXJzICE9PSAwKSB7XG4gICAgICAgIHRoaXMubmV4dERheSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByZXZpb3VzVGltZVBpY2tlclZhbHVlcyA9IHsgaG91cnMsIG1pbnV0ZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBpbnRlcm5hbCBmb3JtIGNoYW5nZXMgaXRzIHZhbHVlLCB0aGVuIGNvbWJpbmUgZGF0ZSBhbmQgdGltZSBpbnRvIG9uZSBEYXRlIGFuZCBwYXNzIGl0cyBJU08gc3RyaW5nIHZhbHVlIHRvIG9uQ2hhbmdlIG1ldGhvZFxuICAgKiBAcGFyYW0gZGF0ZVRpbWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0RGF0ZXRpbWUoZGF0ZVRpbWU6IERhdGVBbmRUaW1lKSB7XG4gICAgLy8gaWYgZGF0ZSBpbnB1dCBpcyBjbGVhcmVkIGZyb20gYSBwcmV2aW91cyBjb3JyZWN0IHZhbHVlLCBjbGVhciBmb3JtIHZhbHVlOlxuICAgIGlmICh0aGlzLmlzSW5wdXRDbGVhcmVkKGRhdGVUaW1lKSkge1xuICAgICAgdGhpcy5mb3JtLmdldCgnZGF0ZScpLnNldFZhbHVlKHVuZGVmaW5lZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5mb3JtLmdldCgndGltZScpLnNldFZhbHVlKHVuZGVmaW5lZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiBib3RoIGRhdGUgYW5kIHRpbWUgaXMgaW52YWxpZCwgZG8gc2V0IGZvcm0gdmFsdWUgdG8gbnVsbCBhbmQgc3RvcDpcbiAgICBpZiAoIXRoaXMudmVyaWZ5RGF0ZShkYXRlVGltZS5kYXRlKSAmJiAhdGhpcy52ZXJpZnlEYXRlKGRhdGVUaW1lLnRpbWUpKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJZiBvbmx5IHRpbWUgaXMgcHJvdmlkZWQsIHNldCBEYXRlIHRvIHRvZGF5OlxuICAgIGlmICghdGhpcy52ZXJpZnlEYXRlKGRhdGVUaW1lLmRhdGUpICYmIHRoaXMudmVyaWZ5RGF0ZShkYXRlVGltZS50aW1lKSkge1xuICAgICAgZGF0ZVRpbWUuZGF0ZSA9IG5ldyBEYXRlKGRhdGVUaW1lLnRpbWUpO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgZGF0ZSBpcyBwcm92aWRlZCwgc2V0IHRpbWUgdG8gMDA6MDA6XG4gICAgaWYgKHRoaXMudmVyaWZ5RGF0ZShkYXRlVGltZS5kYXRlKSAmJiAhdGhpcy52ZXJpZnlEYXRlKGRhdGVUaW1lLnRpbWUpKSB7XG4gICAgICBkYXRlVGltZS50aW1lID0gbmV3IERhdGUoXG4gICAgICAgIGRhdGVUaW1lLmRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgZGF0ZVRpbWUuZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICBkYXRlVGltZS5kYXRlLmdldERhdGUoKSxcbiAgICAgICAgMCxcbiAgICAgICAgMCxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS5zZXRWYWx1ZShkYXRlVGltZS50aW1lLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgZGF0ZSBhbmQgdGltZSwgYW5kIGVtaXQgYXMgbmV3IGZvcm0gdmFsdWU6XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoZGF0ZVRpbWUuZGF0ZSk7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKGRhdGVUaW1lLnRpbWUuZ2V0SG91cnMoKSwgZGF0ZVRpbWUudGltZS5nZXRNaW51dGVzKCkpO1xuICAgIHRoaXMuZm9ybS5nZXQoJ2RhdGUnKS5zZXRWYWx1ZShkYXRlVGltZS5kYXRlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmRhdGUudG9JU09TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeURhdGUodmFsdWU6IERhdGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5wdXRDbGVhcmVkKHZhbHVlOiBEYXRlQW5kVGltZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByZXZpb3VzVmFsdWU/LmRhdGUgJiYgdmFsdWUuZGF0ZSA9PT0gdW5kZWZpbmVkO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZGF0ZXRpbWUtcGlja2VyXCJcbiAgW25nU3dpdGNoXT1cImRhdGVUeXBlXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidEYXRlQW5kVGltZSdcIlxuICAgIFtjbG9zZURhdGVwaWNrZXJdPVwiZGF0ZXBpY2tlclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBkYXRlcGlja2VyIHt7IHNpemUgPyAnZm9ybS1ncm91cC0nICsgc2l6ZSA6ICcnIH19XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBkYXRhLWN5PVwiYm9vdHN0cmFwLWRhdGUtaW5wdXRcIlxuICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTIwcHhcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgZGVmYXVsdFBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgYnNEYXRlcGlja2VyXG4gICAgICAgIFtvdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIlxuICAgICAgICBbYnNDb25maWddPVwie1xuICAgICAgICAgIGN1c3RvbVRvZGF5Q2xhc3M6ICd0b2RheScsXG4gICAgICAgICAgZGF0ZUlucHV0Rm9ybWF0OiBkYXRlSW5wdXRGb3JtYXQsXG4gICAgICAgICAgYWRhcHRpdmVQb3NpdGlvbjogYWRhcHRpdmVQb3NpdGlvblxuICAgICAgICB9XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uZ2V0KCdkYXRlJylcIlxuICAgICAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPHRpbWVwaWNrZXJcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cCB7eyBzaXplID8gJ2Zvcm0tZ3JvdXAtJyArIHNpemUgOiAnJyB9fVwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5nZXQoJ3RpbWUnKVwiXG4gICAgICBbc2hvd1NlY29uZHNdPVwiY29uZmlnLnNob3dTZWNvbmRzXCJcbiAgICAgIFtzaG93U3Bpbm5lcnNdPVwiY29uZmlnLnNob3dTcGlubmVyc1wiXG4gICAgICBbc2hvd01lcmlkaWFuXT1cImNvbmZpZy5zaG93TWVyaWRpYW5cIlxuICAgICAgKHdoZWVsKT1cImhhbmRsZU1vdXNlV2hlZWwoJGV2ZW50KVwiXG4gICAgPjwvdGltZXBpY2tlcj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidEYXRlJ1wiXG4gICAgW2Nsb3NlRGF0ZXBpY2tlcl09XCJkYXRlcGlja2VyXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGRhdGVwaWNrZXIge3sgc2l6ZSA/ICdmb3JtLWdyb3VwLScgKyBzaXplIDogJycgfX1cIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCBkZWZhdWx0UGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICBic0RhdGVwaWNrZXJcbiAgICAgICAgW291dHNpZGVDbGlja109XCJmYWxzZVwiXG4gICAgICAgIFtic0NvbmZpZ109XCJ7XG4gICAgICAgICAgY3VzdG9tVG9kYXlDbGFzczogJ3RvZGF5JyxcbiAgICAgICAgICBkYXRlSW5wdXRGb3JtYXQ6IGRhdGVJbnB1dEZvcm1hdCxcbiAgICAgICAgICBhZGFwdGl2ZVBvc2l0aW9uOiBhZGFwdGl2ZVBvc2l0aW9uXG4gICAgICAgIH1cIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5nZXQoJ2RhdGUnKVwiXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidEYXRlUmFuZ2UnXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGRhdGVwaWNrZXIge3sgc2l6ZSA/ICdmb3JtLWdyb3VwLScgKyBzaXplIDogJycgfX1cIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1NlbGVjdCBhIGRhdGUgcmFuZ2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uZ2V0KCdkYXRlJylcIlxuICAgICAgICBbYnNDb25maWddPVwie1xuICAgICAgICAgIGN1c3RvbVRvZGF5Q2xhc3M6ICd0b2RheScsXG4gICAgICAgICAgYWRhcHRpdmVQb3NpdGlvbjogdHJ1ZSxcbiAgICAgICAgICByYW5nZUlucHV0Rm9ybWF0OiBkYXRlSW5wdXRGb3JtYXRcbiAgICAgICAgfVwiXG4gICAgICAgIGJzRGF0ZXJhbmdlcGlja2VyXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ1RpbWUnXCJcbiAgPlxuICAgIDx0aW1lcGlja2VyXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAge3sgc2l6ZSA/ICdmb3JtLWdyb3VwLScgKyBzaXplIDogJycgfX1cIlxuICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uZ2V0KCd0aW1lJylcIlxuICAgICAgW3Nob3dTZWNvbmRzXT1cImNvbmZpZy5zaG93U2Vjb25kc1wiXG4gICAgICBbc2hvd1NwaW5uZXJzXT1cImNvbmZpZy5zaG93U3Bpbm5lcnNcIlxuICAgICAgW3Nob3dNZXJpZGlhbl09XCJjb25maWcuc2hvd01lcmlkaWFuXCJcbiAgICAgIFttaW51dGVzUGxhY2Vob2xkZXJdPVwiJ01NYE1JTlVURVNgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbaG91cnNQbGFjZWhvbGRlcl09XCInSEhgSE9VUlNgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbc2Vjb25kc1BsYWNlaG9sZGVyXT1cIidTU2BTRUNPTkRTYCcgfCB0cmFuc2xhdGVcIlxuICAgICAgKHdoZWVsKT1cImhhbmRsZU1vdXNlV2hlZWwoJGV2ZW50KVwiXG4gICAgPjwvdGltZXBpY2tlcj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1NpbmdsZURhdGVSZXF1aXJlZCdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB7eyBzaXplID8gJ2Zvcm0tZ3JvdXAtJyArIHNpemUgOiAnJyB9fVwiPlxuICAgICAgPGM4eS1kYXRlLXBpY2tlciAob25EYXRlU2VsZWN0ZWQpPVwib25EYXRlU2VsZWN0ZWQuZW1pdCgkZXZlbnQpXCI+PC9jOHktZGF0ZS1waWNrZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2RhdGUtdGltZS1waWNrZXIvZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULGFBQWEsRUFDYixpQkFBaUIsRUFHakIsV0FBVyxFQUNYLG1CQUFtQixFQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJGLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JB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QWdCLHdaQUNoQixtQkFBbUIsZ0lBQ25CLGdCQUFnQjs7NEZBR1AsdUJBQXVCO2tCQTVCbkMsU0FBUzsrQkFDRSxzQkFBc0IsYUFFckI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQzs0QkFDdEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsY0FDVyxJQUFJLFdBQ1A7d0JBQ1AsUUFBUTt3QkFDUixZQUFZO3dCQUNaLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3dCQUNsQixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLGdCQUFnQjtxQkFDakI7c0hBUUcsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLFNBQVM7Z0JBUVosUUFBUTtzQkFEWCxLQUFLO3VCQUFDLFNBQVM7Z0JBTWhCLFdBQVc7c0JBRFYsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQWVOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBUU4sY0FBYztzQkFEYixNQUFNO2dCQVMyQixVQUFVO3NCQUEzQyxTQUFTO3VCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZpcnN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBCc0RhdGVwaWNrZXJEaXJlY3RpdmUsIEJzRGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBQaWNrZWREYXRlcyB9IGZyb20gJy4uL2RhdGUtcGlja2VyJztcbmltcG9ydCB7IE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2xvc2VEYXRlUGlja2VyRGlyZWN0aXZlIH0gZnJvbSAnLi9jbG9zZS1kYXRlLXBpY2tlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGltZXBpY2tlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdGltZXBpY2tlcic7XG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEM4eVRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi9pMThuL2M4eS10cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBEYXRlRm9ybWF0U2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9kYXRlLWZvcm1hdC5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIERhdGVBbmRUaW1lIHtcbiAgZGF0ZTogRGF0ZTtcbiAgdGltZTogRGF0ZTtcbn1cblxuaW50ZXJmYWNlIERhdGVBbmRUaW1lT3B0aW9ucyB7XG4gIHNob3dTcGlubmVycz86IGJvb2xlYW47XG4gIHNob3dNZXJpZGlhbj86IGJvb2xlYW47XG4gIHNob3dNaW51dGVzPzogYm9vbGVhbjtcbiAgc2hvd1NlY29uZHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBEYXRlVHlwZSA9ICdEYXRlQW5kVGltZScgfCAnRGF0ZScgfCAnRGF0ZVJhbmdlJyB8ICdTaW5nbGVEYXRlUmVxdWlyZWQnIHwgJ1RpbWUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0ZS10aW1lLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlVGltZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVUaW1lUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIENsb3NlRGF0ZVBpY2tlckRpcmVjdGl2ZSxcbiAgICBCc0RhdGVwaWNrZXJNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUaW1lcGlja2VyTW9kdWxlLFxuICAgIERhdGVQaWNrZXJDb21wb25lbnQsXG4gICAgQzh5VHJhbnNsYXRlUGlwZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVUaW1lUGlja2VyQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgbWluRGF0ZTogRGF0ZTtcblxuICBASW5wdXQoJ21pbkRhdGUnKVxuICBzZXQgX21pbkRhdGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMubWluRGF0ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgbWF4RGF0ZTogRGF0ZTtcblxuICBASW5wdXQoJ21heERhdGUnKVxuICBzZXQgX21heERhdGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMubWF4RGF0ZSA9IHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBkYXRlSW5wdXRGb3JtYXQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBhZGFwdGl2ZVBvc2l0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2l6ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgZGF0ZSBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIERhdGVBbmRUaW1lIC0gRGlzcGxheSBib3RoIGRhdGUgYW5kIHRpbWUuXG4gICAqIEBwYXJhbSBEYXRlIC0gRGlzcGxheSBvbmx5IHRoZSBkYXRlIHdpdGhvdXQgdGhlIHRpbWUuXG4gICAqIEBwYXJhbSBEYXRlUmFuZ2UgLSBTcGVjaWZ5IGEgcmFuZ2Ugb2YgZGF0ZXMuXG4gICAqIEBwYXJhbSBTaW5nbGVEYXRlUmVxdWlyZWQgLSBSZXF1aXJlIHRoZSBzZWxlY3Rpb24gb2YgYSBzaW5nbGUgZGF0ZS5cbiAgICogQHBhcmFtIFRpbWUgLSBEaXNwbGF5IG9ubHkgdGhlIHRpbWUgd2l0aG91dCB0aGUgZGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAnRGF0ZUFuZFRpbWUnXG4gICAqL1xuICBASW5wdXQoKVxuICBkYXRlVHlwZTogRGF0ZVR5cGUgPSAnRGF0ZUFuZFRpbWUnO1xuXG4gIEBJbnB1dCgpXG4gIGNvbmZpZzogRGF0ZUFuZFRpbWVPcHRpb25zID0ge1xuICAgIHNob3dNaW51dGVzOiB0cnVlLFxuICAgIHNob3dTZWNvbmRzOiBmYWxzZSxcbiAgICBzaG93U3Bpbm5lcnM6IGZhbHNlXG4gIH07XG5cbiAgQE91dHB1dCgpXG4gIG9uRGF0ZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8UGlja2VkRGF0ZXM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGRhdGU6IERhdGU7XG4gIHRpbWU6IERhdGUgfCBudWxsO1xuICBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgZGVmYXVsdFBsYWNlaG9sZGVyID0gZ2V0dGV4dCgnU2VsZWN0IGEgZGF0ZeKApicpO1xuXG4gIEBWaWV3Q2hpbGQoQnNEYXRlcGlja2VyRGlyZWN0aXZlKSBkYXRlcGlja2VyOiBCc0RhdGVwaWNrZXJEaXJlY3RpdmU7XG5cbiAgcHJpdmF0ZSBwcmV2aW91c1ZhbHVlOiBEYXRlQW5kVGltZTtcbiAgcHJpdmF0ZSBwcmV2aW91c1RpbWVQaWNrZXJWYWx1ZXM6IHsgaG91cnM/OiBudW1iZXI7IG1pbnV0ZXM/OiBudW1iZXIgfSA9IHt9O1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGRhdGVGb3JtYXRTZXJ2aWNlOiBEYXRlRm9ybWF0U2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnZGF0ZScsIG5ldyBGb3JtQ29udHJvbCh1bmRlZmluZWQpKTtcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgndGltZScsIG5ldyBGb3JtQ29udHJvbCh1bmRlZmluZWQpKTtcblxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodmFsdWU6IERhdGVBbmRUaW1lKSA9PiB7XG4gICAgICB0aGlzLnNldERhdGV0aW1lKHZhbHVlKTtcbiAgICAgIHRoaXMucHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtLnN0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZUlucHV0Rm9ybWF0KSB7XG4gICAgICB0aGlzLmRhdGVJbnB1dEZvcm1hdCA9IHRoaXMuZGF0ZUZvcm1hdFNlcnZpY2UuZ2V0RGF0ZUZvcm1hdCgpO1xuICAgIH1cbiAgICBpZiAoISgnc2hvd01lcmlkaWFuJyBpbiB0aGlzLmNvbmZpZykpIHtcbiAgICAgIHRoaXMuY29uZmlnLnNob3dNZXJpZGlhbiA9IHRoaXMuZGF0ZUZvcm1hdFNlcnZpY2Uuc2hvdWxkVXNlTWVyaWRpYW5Gb3JtYXQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvblRpbWVDaGFuZ2UodGltZTogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS5zZXRWYWx1ZSh0aW1lLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgfVxuXG4gIGdldCBkYXRlQ29udHJvbCgpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2RhdGUnKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb250cm9sIFZhbHVlIEFjY2Vzc29yIC0gSWYgZm9ybSB2YWx1ZSBjaGFuZ2VzIGJ5IGV4dGVybmFsIGZhY3RvciwgdXBkYXRlIGRhdGUgcHJvcGVydHkgYW5kIGludGVybmFsIGZvcm0gd2l0aCBuZXcgdmFsdWUuXG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMudGltZSA9IHRoaXMuZGF0ZTtcbiAgICAgIHRoaXMuZm9ybS5zZXRWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKHZhbHVlKSxcbiAgICAgICAgICB0aW1lOiB0aGlzLmRhdGVcbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdGhpcy5mb3JtLnZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoZGlzYWJsZWQgPT09IHRoaXMuZm9ybT8uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGlzYWJsZWQgPyB0aGlzLmZvcm0uZGlzYWJsZSgpIDogdGhpcy5mb3JtLmVuYWJsZSgpO1xuICB9XG5cbiAgdmFsaWRhdGUoX2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAodGhpcy5kYXRlPy5nZXRUaW1lKCkgPCBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldFRpbWUoKSkge1xuICAgICAgcmV0dXJuIHsgZGF0ZUJlZm9yZVJhbmdlTWluOiB0cnVlIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGU/LmdldFRpbWUoKSA+IG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkuZ2V0VGltZSgpKSB7XG4gICAgICByZXR1cm4geyBkYXRlQWZ0ZXJSYW5nZU1heDogdHJ1ZSB9O1xuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgIHJldHVybiB7IGludmFsaWREYXRlVGltZTogdHJ1ZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcmV2aW91c0RheSgpIHtcbiAgICBjb25zdCBpc09wZW4gPSB0aGlzLmRhdGVwaWNrZXIuaXNPcGVuO1xuICAgIHRoaXMuZGF0ZS5zZXREYXRlKHRoaXMuZGF0ZS5nZXREYXRlKCkgLSAxKTtcbiAgICB0aGlzLnNldERhdGV0aW1lKHsgZGF0ZTogdGhpcy5kYXRlLCB0aW1lOiB0aGlzLmZvcm0uZ2V0KCd0aW1lJykudmFsdWUgfSk7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgdGhpcy5kYXRlcGlja2VyLnNob3coKTtcbiAgICB9XG4gIH1cblxuICBuZXh0RGF5KCkge1xuICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuZGF0ZXBpY2tlci5pc09wZW47XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSArIDEpO1xuICAgIHRoaXMuc2V0RGF0ZXRpbWUoeyBkYXRlOiB0aGlzLmRhdGUsIHRpbWU6IHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS52YWx1ZSB9KTtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXIuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlcGlja2VyLmhpZGUoKTtcbiAgfVxuXG4gIGhhbmRsZU1vdXNlV2hlZWwoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBob3VycyA9IHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS52YWx1ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSB0aGlzLmZvcm0uZ2V0KCd0aW1lJykudmFsdWUuZ2V0TWludXRlcygpO1xuICAgIC8vIGRvd25cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudC5kZWx0YVkgPiAwKSB7XG4gICAgICBpZiAoTnVtYmVyKGhvdXJzKSA9PT0gMjMgJiYgdGhpcy5wcmV2aW91c1RpbWVQaWNrZXJWYWx1ZXMuaG91cnMgIT09IDIzKSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNEYXkoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1cFxuICAgIGlmIChldmVudC5kZWx0YVkgPCAwKSB7XG4gICAgICBpZiAodGhpcy5wcmV2aW91c1RpbWVQaWNrZXJWYWx1ZXMuaG91cnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBzY3JvbGxpbmcgdXAgb24gZW1wdHkgZm9ybSBzaG91bGQgbm90IHJlc3VsdCBpbiBpbmNyZWFzaW5nIGRheS5cbiAgICAgIH0gZWxzZSBpZiAoTnVtYmVyKGhvdXJzKSA9PT0gMCAmJiB0aGlzLnByZXZpb3VzVGltZVBpY2tlclZhbHVlcy5ob3VycyAhPT0gMCkge1xuICAgICAgICB0aGlzLm5leHREYXkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcmV2aW91c1RpbWVQaWNrZXJWYWx1ZXMgPSB7IGhvdXJzLCBtaW51dGVzIH07XG4gIH1cblxuICAvKipcbiAgICogSWYgaW50ZXJuYWwgZm9ybSBjaGFuZ2VzIGl0cyB2YWx1ZSwgdGhlbiBjb21iaW5lIGRhdGUgYW5kIHRpbWUgaW50byBvbmUgRGF0ZSBhbmQgcGFzcyBpdHMgSVNPIHN0cmluZyB2YWx1ZSB0byBvbkNoYW5nZSBtZXRob2RcbiAgICogQHBhcmFtIGRhdGVUaW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNldERhdGV0aW1lKGRhdGVUaW1lOiBEYXRlQW5kVGltZSkge1xuICAgIC8vIGlmIGRhdGUgaW5wdXQgaXMgY2xlYXJlZCBmcm9tIGEgcHJldmlvdXMgY29ycmVjdCB2YWx1ZSwgY2xlYXIgZm9ybSB2YWx1ZTpcbiAgICBpZiAodGhpcy5pc0lucHV0Q2xlYXJlZChkYXRlVGltZSkpIHtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ2RhdGUnKS5zZXRWYWx1ZSh1bmRlZmluZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMudGltZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZm9ybS5nZXQoJ3RpbWUnKS5zZXRWYWx1ZSh1bmRlZmluZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRUaW1lID0gdGhpcy52ZXJpZnlEYXRlKGRhdGVUaW1lLnRpbWUpO1xuICAgIGNvbnN0IHZhbGlkRXhpc3RpbmdUaW1lID0gdGhpcy52ZXJpZnlEYXRlKHRoaXMudGltZSk7XG4gICAgY29uc3QgdmFsaWREYXRlID0gdGhpcy52ZXJpZnlEYXRlKGRhdGVUaW1lLmRhdGUpO1xuXG4gICAgaWYgKCF2YWxpZFRpbWUgJiYgIXZhbGlkRXhpc3RpbmdUaW1lKSB7XG4gICAgICAvLyBFbnN1cmUgZGF0ZVRpbWUuZGF0ZSBleGlzdHMgYmVmb3JlIHVzaW5nIGdldEZ1bGxZZWFyOlxuICAgICAgaWYgKGRhdGVUaW1lLmRhdGUpIHtcbiAgICAgICAgZGF0ZVRpbWUudGltZSA9IG5ldyBEYXRlKFxuICAgICAgICAgIGRhdGVUaW1lLmRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICBkYXRlVGltZS5kYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgZGF0ZVRpbWUuZGF0ZS5nZXREYXRlKCksXG4gICAgICAgICAgMCxcbiAgICAgICAgICAwLFxuICAgICAgICAgIDBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50aW1lID0gZGF0ZVRpbWUudGltZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBib3RoIGRhdGUgYW5kIHRpbWUgaXMgaW52YWxpZCwgZG8gc2V0IGZvcm0gdmFsdWUgdG8gbnVsbCBhbmQgc3RvcDpcbiAgICBpZiAoIXZhbGlkRGF0ZSAmJiAhdmFsaWRUaW1lKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgdGltZSBpcyBwcm92aWRlZCwgc2V0IERhdGUgdG8gdG9kYXk6XG4gICAgaWYgKCF2YWxpZERhdGUgJiYgdmFsaWRUaW1lKSB7XG4gICAgICBkYXRlVGltZS5kYXRlID0gbmV3IERhdGUoZGF0ZVRpbWUudGltZSk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgZGF0ZSBhbmQgdGltZSwgYW5kIGVtaXQgYXMgbmV3IGZvcm0gdmFsdWU6XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoZGF0ZVRpbWUuZGF0ZSk7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKHRoaXMudGltZS5nZXRIb3VycygpLCB0aGlzLnRpbWUuZ2V0TWludXRlcygpKTtcbiAgICB0aGlzLmZvcm0uZ2V0KCdkYXRlJykuc2V0VmFsdWUoZGF0ZVRpbWUuZGF0ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlLnRvSVNPU3RyaW5nKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlEYXRlKHZhbHVlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlO1xuICAgIHJldHVybiBkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0lucHV0Q2xlYXJlZCh2YWx1ZTogRGF0ZUFuZFRpbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcmV2aW91c1ZhbHVlPy5kYXRlICYmIHZhbHVlLmRhdGUgPT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImRhdGV0aW1lLXBpY2tlclwiXG4gIFtuZ1N3aXRjaF09XCJkYXRlVHlwZVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICpuZ1N3aXRjaENhc2U9XCInRGF0ZUFuZFRpbWUnXCJcbiAgICBbY2xvc2VEYXRlcGlja2VyXT1cImRhdGVwaWNrZXJcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZGF0ZXBpY2tlciB7eyBzaXplID8gJ2Zvcm0tZ3JvdXAtJyArIHNpemUgOiAnJyB9fVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgZGF0YS1jeT1cImJvb3RzdHJhcC1kYXRlLWlucHV0XCJcbiAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDEyMHB4XCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IGRlZmF1bHRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGJzRGF0ZXBpY2tlclxuICAgICAgICBbb3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcbiAgICAgICAgW2JzQ29uZmlnXT1cIntcbiAgICAgICAgICBjdXN0b21Ub2RheUNsYXNzOiAndG9kYXknLFxuICAgICAgICAgIGRhdGVJbnB1dEZvcm1hdDogZGF0ZUlucHV0Rm9ybWF0LFxuICAgICAgICAgIGFkYXB0aXZlUG9zaXRpb246IGFkYXB0aXZlUG9zaXRpb25cbiAgICAgICAgfVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJkYXRlQ29udHJvbFwiXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgICA8dGltZXBpY2tlclxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIHt7IHNpemUgPyAnZm9ybS1ncm91cC0nICsgc2l6ZSA6ICcnIH19XCJcbiAgICAgIFsobmdNb2RlbCldPVwidGltZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvblRpbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbc2hvd1NlY29uZHNdPVwiY29uZmlnLnNob3dTZWNvbmRzXCJcbiAgICAgIFtzaG93U3Bpbm5lcnNdPVwiY29uZmlnLnNob3dTcGlubmVyc1wiXG4gICAgICBbc2hvd01lcmlkaWFuXT1cImNvbmZpZy5zaG93TWVyaWRpYW5cIlxuICAgICAgKHdoZWVsKT1cImhhbmRsZU1vdXNlV2hlZWwoJGV2ZW50KVwiXG4gICAgICA+PC90aW1lcGlja2VyPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAqbmdTd2l0Y2hDYXNlPVwiJ0RhdGUnXCJcbiAgICBbY2xvc2VEYXRlcGlja2VyXT1cImRhdGVwaWNrZXJcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZGF0ZXBpY2tlciB7eyBzaXplID8gJ2Zvcm0tZ3JvdXAtJyArIHNpemUgOiAnJyB9fVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IGRlZmF1bHRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGJzRGF0ZXBpY2tlclxuICAgICAgICBbb3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcbiAgICAgICAgW2JzQ29uZmlnXT1cIntcbiAgICAgICAgICBjdXN0b21Ub2RheUNsYXNzOiAndG9kYXknLFxuICAgICAgICAgIGRhdGVJbnB1dEZvcm1hdDogZGF0ZUlucHV0Rm9ybWF0LFxuICAgICAgICAgIGFkYXB0aXZlUG9zaXRpb246IGFkYXB0aXZlUG9zaXRpb25cbiAgICAgICAgfVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJkYXRlQ29udHJvbFwiXG4gICAgICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidEYXRlUmFuZ2UnXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGRhdGVwaWNrZXIge3sgc2l6ZSA/ICdmb3JtLWdyb3VwLScgKyBzaXplIDogJycgfX1cIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1NlbGVjdCBhIGRhdGUgcmFuZ2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImRhdGVDb250cm9sXCJcbiAgICAgICAgW2JzQ29uZmlnXT1cIntcbiAgICAgICAgICBjdXN0b21Ub2RheUNsYXNzOiAndG9kYXknLFxuICAgICAgICAgIGFkYXB0aXZlUG9zaXRpb246IHRydWUsXG4gICAgICAgICAgcmFuZ2VJbnB1dEZvcm1hdDogZGF0ZUlucHV0Rm9ybWF0XG4gICAgICAgIH1cIlxuICAgICAgICBic0RhdGVyYW5nZXBpY2tlclxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgKm5nU3dpdGNoQ2FzZT1cIidUaW1lJ1wiXG4gID5cbiAgICA8dGltZXBpY2tlclxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIHt7IHNpemUgPyAnZm9ybS1ncm91cC0nICsgc2l6ZSA6ICcnIH19XCJcbiAgICAgIFsobmdNb2RlbCldPVwidGltZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvblRpbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbc2hvd1NlY29uZHNdPVwiY29uZmlnLnNob3dTZWNvbmRzXCJcbiAgICAgIFtzaG93U3Bpbm5lcnNdPVwiY29uZmlnLnNob3dTcGlubmVyc1wiXG4gICAgICBbc2hvd01lcmlkaWFuXT1cImNvbmZpZy5zaG93TWVyaWRpYW5cIlxuICAgICAgW21pbnV0ZXNQbGFjZWhvbGRlcl09XCInTU1gTUlOVVRFU2AnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtob3Vyc1BsYWNlaG9sZGVyXT1cIidISGBIT1VSU2AnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtzZWNvbmRzUGxhY2Vob2xkZXJdPVwiJ1NTYFNFQ09ORFNgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAod2hlZWwpPVwiaGFuZGxlTW91c2VXaGVlbCgkZXZlbnQpXCJcbiAgICA+PC90aW1lcGlja2VyPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInU2luZ2xlRGF0ZVJlcXVpcmVkJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHt7IHNpemUgPyAnZm9ybS1ncm91cC0nICsgc2l6ZSA6ICcnIH19XCI+XG4gICAgICA8Yzh5LWRhdGUtcGlja2VyIChvbkRhdGVTZWxlY3RlZCk9XCJvbkRhdGVTZWxlY3RlZC5lbWl0KCRldmVudClcIj48L2M4eS1kYXRlLXBpY2tlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==