ngx-hana-nameserver-history-viewer 1.2.0 → 1.2.1

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.
package/README.md CHANGED
@@ -31,7 +31,7 @@ The only file required is the ng-pick-datetime `picker.min.css` file:
31
31
  {
32
32
  ...
33
33
  "styles": [
34
- "../node_modules/ng-pick-datetime/assets/style/picker.min.css",
34
+ "../node_modules/@danielmoncada/angular-datetime-picker/assets/style/picker.min.css",
35
35
  ...
36
36
  ],
37
37
  ...
@@ -41,7 +41,7 @@ The only file required is the ng-pick-datetime `picker.min.css` file:
41
41
  ##### 2. Or import the `picker.min.css` in your styles.css
42
42
 
43
43
  ```css
44
- @import "~ng-pick-datetime/assets/style/picker.min.css";
44
+ @import "~@danielmoncada/angular-datetime-picker/assets/style/picker.min.css";
45
45
  ```
46
46
 
47
47
  ## Usage
@@ -82,6 +82,8 @@ hideMeasureColumns | Measure(s) that will be hidden from selection table (contr
82
82
  maxRowsLimitation | The maximum rows that will be loaded from the selected nameserver history file. **Web page might crash _(OOM of JavaScript VM)_ if this number is too high _(eg: > 500000)_** | [maxRowsLimitation]="100000"
83
83
  showInstruction | Flag of instruction | [showInstruction]="true"
84
84
  timezone | Timezone name, can't be abbreviation | [timezone]="'America/Vancouver'"
85
+ fileBuffer | Blob of the nameserver history, set this if you do not want to choose the file manually | [fileBuffer] = \<Blob of the File>
86
+ autoDisplay | Display the chart automatically if [fileBuffer] is set | [autoDisplay] = true
85
87
 
86
88
 
87
89
  Todo
@@ -1,6 +1,6 @@
1
1
  import { Component, ElementRef, Input, ViewChild } from '@angular/core';
2
2
  import { SelectionModel } from '@angular/cdk/collections';
3
- import { setChartHeight, sleep, isEmptyData, getDisplayPort, getFileFromInput, isSameFile, getAbbreviatedFileName, getFileFromDrop, getRealPorts, getTimeString, printProcessedTime, getTimeRangeString, generatePorts, getDefaultTimezone, blobToFile } from '../utils';
3
+ import { setChartHeight, sleep, isEmptyData, getDisplayPort, getFileFromInput, isSameFile, getAbbreviatedFileName, getFileFromDrop, getRealPorts, getTimeString, printProcessedTime, getTimeRangeString, generatePorts, getDefaultTimezone, blobToFile, isFile, } from '../utils';
4
4
  import { Abort, Alert, HtmlElement, Item } from '../types';
5
5
  import { FileService, ChartService, UIService } from '../services';
6
6
  import 'hammerjs';
@@ -64,9 +64,10 @@ export class NameServerHistoryComponent {
64
64
  }
65
65
  async ngOnChanges(changes) {
66
66
  const fbc = changes.fileBuffer;
67
- if (fbc && fbc.currentValue && fbc.currentValue !== fbc.previousValue) {
67
+ // !isFile(fbc.currentValue) --> only show chart when it's not a file -> it's a file, means the object has already been processed
68
+ if (fbc && fbc.currentValue && fbc.currentValue !== fbc.previousValue && !isFile(fbc.currentValue)) {
68
69
  // simulate selecting file
69
- const simulatedEvent = { target: { files: [blobToFile(this.fileBuffer, this.streamModeFileName)] } };
70
+ const simulatedEvent = { target: { files: [blobToFile(fbc.currentValue, this.streamModeFileName)] } };
70
71
  await this.fileSelected(simulatedEvent);
71
72
  this.port = undefined; // clear the port selection
72
73
  if (this.autoDisplay) {
@@ -553,4 +554,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
553
554
  }], autoDisplay: [{
554
555
  type: Input
555
556
  }] } });
556
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQTRCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUNMLGNBQWMsRUFDZCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsWUFBWSxFQUNaLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsVUFBVSxFQUNYLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQWdFLE1BQU0sVUFBVSxDQUFDO0FBQ3pILE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRSxPQUFPLFVBQVUsQ0FBQztBQUNsQixPQUFPLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7OztBQUUvQixJQUFLLFVBSUo7QUFKRCxXQUFLLFVBQVU7SUFDYix5REFBMkMsQ0FBQTtJQUMzQyxxQ0FBdUIsQ0FBQTtJQUN2QixtREFBcUMsQ0FBQTtBQUN2QyxD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RCxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgc2V0Q2hhcnRIZWlnaHQsXHJcbiAgc2xlZXAsXHJcbiAgaXNFbXB0eURhdGEsXHJcbiAgZ2V0RGlzcGxheVBvcnQsXHJcbiAgZ2V0RmlsZUZyb21JbnB1dCxcclxuICBpc1NhbWVGaWxlLFxyXG4gIGdldEFiYnJldmlhdGVkRmlsZU5hbWUsXHJcbiAgZ2V0RmlsZUZyb21Ecm9wLFxyXG4gIGdldFJlYWxQb3J0cyxcclxuICBnZXRUaW1lU3RyaW5nLFxyXG4gIHByaW50UHJvY2Vzc2VkVGltZSxcclxuICBnZXRUaW1lUmFuZ2VTdHJpbmcsXHJcbiAgZ2VuZXJhdGVQb3J0cyxcclxuICBnZXREZWZhdWx0VGltZXpvbmUsXHJcbiAgYmxvYlRvRmlsZVxyXG59IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgQWJvcnQsIEFsZXJ0LCBIdG1sRWxlbWVudCwgSXRlbSwgQ2hhcnRDb250ZW50RGF0YSwgQ2hhcnRDb250ZW50SGVhZGVyLCBDaGFydENvbnRlbnRUaW1lLCBQb3J0IH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBGaWxlU2VydmljZSwgQ2hhcnRTZXJ2aWNlLCBVSVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcblxyXG5pbXBvcnQgJ2hhbW1lcmpzJztcclxuaW1wb3J0ICcuLi91dGlscy9jaGFydGpzLWRvd25zYW1wbGUnO1xyXG5pbXBvcnQgJy4uL3V0aWxzL2NoYXJ0anMtem9vbSc7XHJcblxyXG5lbnVtIFNlYXJjaFR5cGUge1xyXG4gIHNlYXJjaFdpdGhTdWJIZWFkZXIgPSAnc2VhcmNoV2l0aFN1YkhlYWRlcicsXHJcbiAgc2VhcmNoQWxsID0gJ3NlYXJjaEFsbCcsXHJcbiAgc2VhcmNoSW5DaGlsZHJlbiA9ICdzZWFyY2hJbkNoaWxkcmVuJ1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1oYW5hLW5hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uYW1lc2VydmVyLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWyAnLi9uYW1lc2VydmVyLWhpc3RvcnkuY29tcG9uZW50LnNjc3MnIF0sXHJcbiAgcHJvdmlkZXJzOiBbIEZpbGVTZXJ2aWNlLCBDaGFydFNlcnZpY2UsIFVJU2VydmljZSBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYW1lU2VydmVySGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnbmFtZXNlcnZlckhpc3RvcnlBbGwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmFtZXNlcnZlckhpc3RvcnlBbGxSZWY6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnbmFtZXNlcnZlckhpc3RvcnlDb250ZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudFJlZjogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFtkZWZhdWx0U2VsZWN0ZWRJdGVtc11cclxuICAgKi9cclxuICBASW5wdXQoKSBkZWZhdWx0U2VsZWN0ZWRJdGVtczogc3RyaW5nW107XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbaGlkZU1lYXN1cmVDb2x1bW5zXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGhpZGVNZWFzdXJlQ29sdW1uczogc3RyaW5nW107XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbbWF4Um93c0xpbWl0YXRpb25dXHJcbiAgICovXHJcbiAgQElucHV0KCkgbWF4Um93c0xpbWl0YXRpb246IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFtzaG93SW5zdHJ1Y3Rpb25dXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2hvd0luc3RydWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFt0aW1lem9uZV1cclxuICAgKi9cclxuICBASW5wdXQoKSB0aW1lem9uZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBmaWxlIGJ1ZmZlciwgdXNlIHRoaXMgZm9yIHN0cmVhbSBtb2RlXHJcbiAgICovXHJcbiAgQElucHV0KCkgZmlsZUJ1ZmZlcjogQmxvYjtcclxuXHJcbiAgLyoqXHJcbiAgICogZmlsZSBuYW1lIGZvciBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHN0cmVhbU1vZGVGaWxlTmFtZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhdXRvIGRpc3BsYXkgdGhlIGNoYXJ0IGluIHN0cmVhbSBtb2RlXHJcbiAgICovXHJcbiAgQElucHV0KCkgYXV0b0Rpc3BsYXk6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGVkIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGZpbGU6IEZpbGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIHRpbWUgaW5mbyBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgdGltZTogQ2hhcnRDb250ZW50VGltZSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBkYXRhIG9mIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBkYXRhOiBDaGFydENvbnRlbnREYXRhID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIGhlYWRlciBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgaGVhZGVyOiBDaGFydENvbnRlbnRIZWFkZXJbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBob3N0IG9mIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBob3N0ID0gJ25hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlJztcclxuXHJcbiAgLyoqXHJcbiAgICogYWxlcnQgbWVzc2FnZSBjb250ZW50XHJcbiAgICovXHJcbiAgYWxlcnRNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGFsZXJ0IG1lc3NhZ2UgdHlwZVxyXG4gICAqL1xyXG4gIGFsZXJ0VHlwZTogQWxlcnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGVkIHBvcnRcclxuICAgKi9cclxuICBwb3J0OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGFsbCB0aGUgcG9ydHMgZnJvbSB0aGUgbmFtZXNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBwb3J0czogUG9ydFtdO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCB0aW1lIHJhbmdlXHJcbiAgICovXHJcbiAgZGF0ZVRpbWVSYW5nZTogRGF0ZVtdO1xyXG5cclxuICAvKipcclxuICAgKiBkYXRhIHNvdXJjZSBmb3IgdGhlIHNlbGVjdGlvbiB0YWJsZSAocmlnaHQgcGFydCBvZiB0aGUgY2hhcnQpXHJcbiAgICovXHJcbiAgdGFibGVTb3VyY2U6IGFueVtdO1xyXG5cclxuICAvKipcclxuICAgKiB0aGUgcHJvZ3Jlc3MgZm9yIHJlYWRpbmcgZmlsZVxyXG4gICAqL1xyXG4gIHJlYWRQcm9ncmVzcyA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGVkL2Ryb3BwZWQgZmlsZSBuYW1lIChhYmJyZXZpYXRpb24pLCBmdWxsIGZpbGUgbmFtZSB3aWxsIGJlIHNob3duIHZpYSB0aGUgdG9vbHRpcHNcclxuICAgKi9cclxuICBhYmJyZXZpYXRlZEZpbGVOYW1lID0gJ29yIERyb3AgRmlsZSBIZXJlJztcclxuXHJcbiAgLyoqXHJcbiAgICogZm9yIHRoZSBpbnN0cnVjdGlvbiBzdGVwIDRcclxuICAgKi9cclxuICBzdGVwU2hvd0NoYXJ0ID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3Igc2hvd2luZyB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBjaGFydFxyXG4gICAqL1xyXG4gIHNob3dDaGFydEZsYWc6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3Igc2hvd2luZyB0aGUgZmlsZSByZWFkaW5nIHByb2dyZXNzXHJcbiAgICovXHJcbiAgc2hvd1JlYWRGaWxlUHJvZ3Jlc3M6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3IgXCJMb2FkXCIgcG9ydHMgYnV0dG9uXHJcbiAgICovXHJcbiAgZW5hYmxlTG9hZFBvcnRzQnV0dG9uOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIGVuYWJsaW5nIFwiU2hvd1wiIGNoYXJ0IGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZVNob3dDaGFydEJ1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBcIlJlc2V0XCIgY2hhcnQgYnV0dG9uXHJcbiAgICovXHJcbiAgZW5hYmxlUmVzZXRDaGFydEJ1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgc2VhcmNoVHlwZSA9IFNlYXJjaFR5cGUuc2VhcmNoQWxsO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3Rpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gdGFibGVcclxuICAgKi9cclxuICBwcml2YXRlIF9zZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT47XHJcblxyXG4gIC8qKlxyXG4gICAqIGN1cnJlbnQgZGlzcGxheWluZyBwb3J0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY3VycmVudENoYXJ0UG9ydDogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpbGVTZXJ2aWNlOiBGaWxlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGNoYXJ0U2VydmljZTogQ2hhcnRTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgdWlTZXJ2aWNlOiBVSVNlcnZpY2UpIHt9XHJcblxyXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IGZiYyA9IGNoYW5nZXMuZmlsZUJ1ZmZlcjtcclxuICAgIGlmIChmYmMgJiYgZmJjLmN1cnJlbnRWYWx1ZSAmJiBmYmMuY3VycmVudFZhbHVlICE9PSBmYmMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAvLyBzaW11bGF0ZSBzZWxlY3RpbmcgZmlsZVxyXG4gICAgICBjb25zdCBzaW11bGF0ZWRFdmVudCA9IHt0YXJnZXQ6IHtmaWxlczogW2Jsb2JUb0ZpbGUodGhpcy5maWxlQnVmZmVyLCB0aGlzLnN0cmVhbU1vZGVGaWxlTmFtZSldfX07XHJcbiAgICAgIGF3YWl0IHRoaXMuZmlsZVNlbGVjdGVkKHNpbXVsYXRlZEV2ZW50KTtcclxuICAgICAgdGhpcy5wb3J0ID0gdW5kZWZpbmVkOyAvLyBjbGVhciB0aGUgcG9ydCBzZWxlY3Rpb25cclxuICAgICAgaWYgKHRoaXMuYXV0b0Rpc3BsYXkpIHtcclxuICAgICAgICB0aGlzLm9uUmVzaXplKCk7IC8vIG5nQWZ0ZXJWaWV3SW5pdC9yZXNpemUgd29uJ3Qgd29yayBpbiBlbGVjdHJvblxyXG4gICAgICAgIHRoaXMuc2hvd0NoYXJ0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIC8vIGluaXQgaXRlbXMnIHN0YXR1c1xyXG4gICAgLy8gcmVzZXQgY2hhcnQgYnV0dG9uIHdpbGwgYmUgZGlzYWJsZSBieSBkZWZhdWx0IGxhdGVyLCBvbmx5IGJlIGVuYWJsZWQgYWZ0ZXIgem9vbWVkXHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQuY2hhcnRBcmVhLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LmxvYWRQb3J0c0J1dHRvbiwgc3RhdHVzOiB0cnVlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG4gICAgdGhpcy5vblJlc2l6ZSgpOyAvLyB1cGRhdGUgdGhlIHNpemUsIG90aGVyd2lzZSB0aGVyZSBtYXkgaGF2ZSBhIHNjcm9sbGJhciAoYmVjYXVzZSBvZiB0aGUgdG9hc3QpIGlmIGF1dG8gZGlzcGxheSBpcyBzZXQgdG8gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgQ2hhcnQgdG8gaW5pdGlhbCBzdGF0dXNcclxuICAgKiBJZiBsZWdlbmQgaXMgYWxyZWFkeSBzZWxlY3RlZC91bnNlbGVjdGVkIGZyb20gdGhlIGxpc3QsIGl0IHdvdWxkbid0IGJlIHJlc3RvcmVkLlxyXG4gICAqL1xyXG4gIHJlc2V0Q2hhcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhYmxlU291cmNlICYmIHRoaXMuX3NlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5yZXNldENoYXJ0KHRoaXMudGFibGVTb3VyY2UsIHRoaXMuX3NlbGVjdGlvbilcclxuICAgICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVhZCB0aGUgZmlsZSBhbmQgZGlzcGxheSB0aGUgY2hhcnRcclxuICAgKi9cclxuICBzaG93Q2hhcnQoKTogdm9pZCB7XHJcbiAgICAvLyBhZnRlciBjbGljaywgdGhpcyBidXR0b24gYW5kIHJlc2V0IGJ1dHRvbiBuZWVkcyB0byBiZSBkaXNhYmxlZFxyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICB0aGlzLnN0ZXBTaG93Q2hhcnQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuX2luaXRDaGFydEVudigpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZFRpbWUgPSB0aGlzLl9zZWxlY3RlZFRpbWVSYW5nZTtcclxuICAgICAgaWYgKHNlbGVjdGVkVGltZS5zdGFydFRpbWUgPiBzZWxlY3RlZFRpbWUuZW5kVGltZSkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCAnVGltZSByYW5nZSBpcyBub3QgY29ycmVjdC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmlsZSkge1xyXG4gICAgICAgIC8vIGl0J3MgdGltZSBmb3IgZGlzcGxheWluZyB0aGUgcmVhZGluZyBwcm9ncmVzcyBiYXJcclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnRGcm9tRGF0YUZpbGUodGhpcy5maWxlLCBzZWxlY3RlZFRpbWUuc3RhcnRUaW1lLCBzZWxlY3RlZFRpbWUuZW5kVGltZSwgdGhpcy5wb3J0KTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goZSA9PiB7XHJcbiAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKTtcclxuICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogbG9hZCBhbGwgcG9ydHMgZnJvbSBmaWxlXHJcbiAgICovXHJcbiAgbG9hZFBvcnRzKCk6IHZvaWQge1xyXG4gICAgLy8gZG8gY29uZmlybWF0aW9uIGFjdGlvbnNcclxuICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgLy8gYmVmb3JlIHN0YXJ0IGxvYWRpbmcgcG9ydHMgZnJvbSBmaWxlLCBkaXNwbGF5IHByb2dyZXNzIGJhciBhbmQgZGlzYWJsZSB0aGUgc2hvdyBjaGFydCBidXR0b25cclxuICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiB0cnVlfSxcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1cclxuICAgICAgXSk7XHJcbiAgICAgIHRoaXMuX3JlYWRQb3J0c0Zyb21GaWxlKHRoaXMuZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3QgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlLCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyAxIGZpbGUuXHJcbiAgICovXHJcbiAgYXN5bmMgZmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9IGdldEZpbGVGcm9tSW5wdXQoZXZlbnQudGFyZ2V0KTtcclxuICAgIGlmIChzZWxlY3RlZEZpbGUpIHtcclxuICAgICAgaWYgKCFpc1NhbWVGaWxlKHRoaXMuZmlsZSwgc2VsZWN0ZWRGaWxlKSkge1xyXG4gICAgICAgIC8vIGluaXQgcG9ydCBzZWxlY3RvclxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2luaXRQb3J0U2VsZWN0b3IoKS5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsZSA9IHNlbGVjdGVkRmlsZTtcclxuICAgICAgICB0aGlzLmFiYnJldmlhdGVkRmlsZU5hbWUgPSBnZXRBYmJyZXZpYXRlZEZpbGVOYW1lKHRoaXMuZmlsZS5uYW1lKTtcclxuICAgICAgICAvLyBhZnRlciBmaWxlIGhhcyBiZWVuIHNlbGVjdGVkLCB0aGUgc2hvdyBjaGFydCBidXR0b24gbmVlZHMgdG8gYmUgZW5hYmxlZFxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBkcm9wIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSwgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMSBmaWxlLlxyXG4gICAqL1xyXG4gIGZpbGVEcm9wcGVkKGV2ZW50OiBhbnkpIHtcclxuICAgIGdldEZpbGVGcm9tRHJvcChldmVudClcclxuICAgICAgLnRoZW4oZmlsZSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc1NhbWVGaWxlKHRoaXMuZmlsZSwgZmlsZSkpIHtcclxuICAgICAgICAgIC8vIGluaXQgcG9ydCBzZWxlY3RvclxyXG4gICAgICAgICAgdGhpcy5maWxlID0gZmlsZTtcclxuICAgICAgICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5hYmJyZXZpYXRlZEZpbGVOYW1lID0gZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSh0aGlzLmZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgIC8vIGFmdGVyIGZpbGUgaGFzIGJlZW4gZHJvcHBlZCwgdGhlIHNob3cgY2hhcnQgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWRcclxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfX0pXHJcbiAgICAgIC50aGVuKCgpID0+ICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IoKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBvbmUgaXRlbSBmcm9tIHNlbGVjdGlvbiB0YWJsZSwgcmVsYXRpdmUgZGF0YXNldCB3aWxsIGJlIHNob3duIG9yIGhpZGRlblxyXG4gICAqL1xyXG4gIHNlbGVjdEl0ZW0oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhYmxlUm93KSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IGV2ZW50LnRhYmxlUm93O1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb24udG9nZ2xlKHJvdyk7XHJcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnRvZ2dsZURhdGFJbkNoYXJ0KHJvdy5LUEksICF0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpKVxyXG4gICAgICAgIC5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWNhbGN1bGF0aW5nIGNoYXJ0IGhlaWdodCB3aGVuIHJlc2l6aW5nXHJcbiAgICovXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICBjb25zdCBuYW1lc2VydmVySGlzdG9yeUFsbEVsZW1lbnQgPSB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5QWxsUmVmID8gdGhpcy5uYW1lc2VydmVySGlzdG9yeUFsbFJlZi5uYXRpdmVFbGVtZW50IDogbnVsbDtcclxuICAgIGNvbnN0IG5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudEVsZW1lbnQgPSB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudFJlZiA/IHRoaXMubmFtZXNlcnZlckhpc3RvcnlDb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xyXG4gICAgc2V0Q2hhcnRIZWlnaHQobmFtZXNlcnZlckhpc3RvcnlBbGxFbGVtZW50LCBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN3aXRjaCBwb3J0IGFuZCByZWluaXRpYWxpemUgY2hhcnQsIHRyaWdnZXJlZCBieSBjaGFuZ2luZyB0aGUgcG9ydFxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgc3dpdGNoUG9ydEZvckNoYXJ0KHBvcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHBvcnQgPT09IHRoaXMuX2N1cnJlbnRDaGFydFBvcnQpIHtcclxuICAgICAgLy8gbm90IHRvIHN3aXRjaCBwb3J0LCBiZWNhdXNlIHRoZSByZWxhdGl2ZSBwb3J0IGlzIGRpc3BsYXlpbmcsIG5vIG5lZWQgdG8gcmVuZGVyIHR3aWNlLlxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZmlsZSB8fCAhcG9ydCB8fCBwb3J0Lmxlbmd0aCA9PT0gMCB8fCBwb3J0LnNsaWNlKDEsIDMpID09PSAnKionKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXModGhpcy50aW1lKS5sZW5ndGggPiAxICYmICFnZXRSZWFsUG9ydHMoT2JqZWN0LmtleXModGhpcy50aW1lKS5maWx0ZXIoa2V5ID0+IHRoaXMudGltZVtrZXldKSkuaW5jbHVkZXMocG9ydCkpIHtcclxuICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuaW5mbywgYERhdGEgb2YgcG9ydDoke3BvcnR9IGlzIG5vdCBsb2FkZWQsIHBsZWFzZSBsb2FkIHRoZSBkYXRhIGZpcnN0IGJ5IGNsaWNraW5nIHRoZSBcIlNob3dcIiBidXR0b24uYCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBvbmx5IGRvIHN3aXRjaCBwb3J0cyB3aGVuIGF2YWlsYWJsZSBwb3J0cyBudW1iZXIgPiAxXHJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aW1lKS5maWx0ZXIoa2V5ID0+IHRoaXMudGltZVtrZXldKS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgdGhlIFwic2hvdyBjaGFydFwiIGFuZCBcInJlc2V0IGNoYXJ0XCIgYnV0dG9uIGZpcnN0XHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG4gICAgICAvLyBpbml0IHRoZSBlbnZpcm9ubWVudCB3aXRoIHN3aXRjaCBmbGFnXHJcbiAgICAgIHRoaXMuX2luaXRDaGFydEVudih0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRDaGFydChwb3J0LCBudWxsLCB0cnVlKTtcclxuICAgICAgfSkuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBjb2x1bW5zIHdoaWNoIG5lZWQgdG8gYmUgaGlkZGVuIGZyb20gdGhlIHNlbGVjdGlvbiB0YWJsZVxyXG4gICAqL1xyXG4gIGdldCBoaWRkZW5Db2x1bW5zKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLnVpU2VydmljZS5nZXRIaWRkZW5Db2x1bW5zKHRoaXMuaGlkZU1lYXN1cmVDb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBkZWZhdWx0IHRpbWV6b25lXHJcbiAgICovXHJcbiAgZ2V0IGRlZmF1bHRUaW1lem9uZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGdldERlZmF1bHRUaW1lem9uZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBrZXkgY29sdW1uIChLUEkpXHJcbiAgICovXHJcbiAgZ2V0IGtwaUNvbHVtbigpOiBJdGVtIHtcclxuICAgIHJldHVybiBJdGVtLmtwaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUga2V5IGNvbHVtbiAoS1BJKVxyXG4gICAqL1xyXG4gIGdldCBkZXNjQ29sdW1uKCk6IEl0ZW0ge1xyXG4gICAgcmV0dXJuIEl0ZW0uZGVzY3JpcHRpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHNlbGVjdGVkIHRpbWUgcmFuZ2UsIHNldCBzZWNvbmQgYW5kIG1pbGxpc2Vjb25kIHBhcnQgdG8gMFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9zZWxlY3RlZFRpbWVSYW5nZSgpOiB7c3RhcnRUaW1lOiBudW1iZXIsIGVuZFRpbWU6IG51bWJlcn0ge1xyXG4gICAgbGV0IHN0YXJ0VGltZSA9IDA7XHJcbiAgICBsZXQgZW5kVGltZSA9IDQxMDIzNTg0MDAwMDA7IC8vIDIwOTkvMTIvMzFcclxuICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2UgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgLy8gZ2V0IHN0YXJ0IHRpbWVcclxuICAgICAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlWzBdKSB7XHJcbiAgICAgICAgICBzdGFydFRpbWUgPSB0aGlzLmRhdGVUaW1lUmFuZ2VbMF0uc2V0U2Vjb25kcygwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZVsxXSkge1xyXG4gICAgICAgICAgZW5kVGltZSA9IHRoaXMuZGF0ZVRpbWVSYW5nZVsxXS5zZXRTZWNvbmRzKDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtzdGFydFRpbWU6IHN0YXJ0VGltZSwgZW5kVGltZTogZW5kVGltZX07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHRpbWUgcmFuZ2Ugc3RyaW5nLCBlZzogMjAxOC0xMC0yNSAxMDoyNSB+IDIwMTgtMTAtMjYgMTA6MjZcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkVGltZVJhbmdlU3RyaW5nID0gdGhpcy5fc2VsZWN0ZWRUaW1lUmFuZ2U7XHJcbiAgICByZXR1cm4gYCR7Z2V0VGltZVN0cmluZyhzZWxlY3RlZFRpbWVSYW5nZVN0cmluZy5zdGFydFRpbWUpfSB+ICR7Z2V0VGltZVN0cmluZyhzZWxlY3RlZFRpbWVSYW5nZVN0cmluZy5lbmRUaW1lKX1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGFycmF5IG9mIGhlYWRlciBrZXlcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfaGVhZGVyS2V5KCk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0aGlzLmhlYWRlcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5oZWFkZXIubWFwKGhlYWRlckl0ZW0gPT4gaGVhZGVySXRlbS5rZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGFycmF5IG9mIGhlYWRlciB0ZXh0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX2hlYWRlclRleHQoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyLm1hcChoZWFkZXJJdGVtID0+IGhlYWRlckl0ZW0udGV4dCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWFkIHBvcnRzIGZyb20gdGhlIHNlbGVjdGVkIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIGZpbGUgbmFtZXNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBwcml2YXRlIF9yZWFkUG9ydHNGcm9tRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVTZXJ2aWNlLmdldFBvcnRzRnJvbUZpbGUoZmlsZSwgKHByb2dyZXNzKSA9PiB7XHJcbiAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcbiAgICB9KS50aGVuKHBvcnRzID0+IHtcclxuICAgICAgcmV0dXJuIHNsZWVwKDEwMCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMpO1xyXG4gICAgICB9KTtcclxuICAgIH0pLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGJ1aWxkIGNoYXJ0IGZyb20gdGhlIHNlbGVjdGVkIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIGZpbGUgdGhlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIHN0YXJ0VGltZSBzdGFydCB0aW1lXHJcbiAgICogQHBhcmFtIGVuZFRpbWUgZW5kIHRpbWVcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWRQb3J0IHNlbGVjdGVkIHBvcnQgZm9yIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlIChNREMgc3lzdGVtKVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2J1aWxkQ2hhcnRGcm9tRGF0YUZpbGUoZmlsZTogRmlsZSwgc3RhcnRUaW1lOiBudW1iZXIsIGVuZFRpbWU6IG51bWJlciwgc2VsZWN0ZWRQb3J0OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2UuZ2V0Q2hhcnRDb250ZW50RnJvbUZpbGUoXHJcbiAgICAgIGZpbGUsXHJcbiAgICAgIHN0YXJ0VGltZSxcclxuICAgICAgZW5kVGltZSxcclxuICAgICAgc2VsZWN0ZWRQb3J0LFxyXG4gICAgICB0aGlzLnRpbWV6b25lLFxyXG4gICAgICB0aGlzLm1heFJvd3NMaW1pdGF0aW9uLCBwcm9ncmVzcyA9PiB0aGlzLnJlYWRQcm9ncmVzcyA9IHByb2dyZXNzKVxyXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgIC8vIHBhcnNpbmcgZG9uZVxyXG4gICAgICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBwb3J0cyA9IGdldFJlYWxQb3J0cyhPYmplY3Qua2V5cyhyZXN1bHQudGltZSksIHRydWUpO1xyXG4gICAgICAgIHBvcnRzLmZvckVhY2gocG9ydCA9PiB7XHJcbiAgICAgICAgICAvLyBjb252ZXJ0IHRoZSB1bml0IGFuZCBnZW5lcmF0ZSBjb250cm9sbGluZyBkYXRhIGZvciBhbGwgcG9ydHNcclxuICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy51aVNlcnZpY2UuY29udmVydFVuaXRBbmRHZW5lcmF0ZUNvbnRyb2xEYXRhKHJlc3VsdC5kYXRhW3BvcnRdLCByZXN1bHQuaGVhZGVyLCBwb3J0KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcylcclxuICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgIC8vIGdldCBhbGwgcG9ydHMgZnJvbSB0aGUgYW5hbHl6ZWQgZGF0YSh0aW1lKVxyXG4gICAgICAgICAgICAvLyBnZXQgdGhlIHBvcnQgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSBwYWdlXHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBnZXREaXNwbGF5UG9ydChwb3J0cywgc2VsZWN0ZWRQb3J0KTtcclxuXHJcbiAgICAgICAgICAgIHByaW50UHJvY2Vzc2VkVGltZShiZWdpblRpbWUsICdjb252ZXJ0aW5nIHN0ZXAnKTtcclxuICAgICAgICAgICAgcG9ydHMuZm9yRWFjaCggcG9ydEl0ZW0gPT4gdGhpcy51aVNlcnZpY2UuZ2VuZXJhdGVZU2NhbGUocG9ydEl0ZW0pKTtcclxuICAgICAgICAgICAgcHJpbnRQcm9jZXNzZWRUaW1lKGJlZ2luVGltZSwgJ2dlbmVyYXRpbmcgWVNjYWxlIHN0ZXAnKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMudGltZSA9IHJlc3VsdC50aW1lO1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlciA9IHRoaXMudWlTZXJ2aWNlLmdldEhlYWRlcihyZXN1bHQuaGVhZGVyLCBwb3J0KTtcclxuICAgICAgICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0Lmhvc3Q7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuYWJvcnRlZCA9PT0gQWJvcnQubWF4TGluZU51bVJlYWNoZWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShcclxuICAgICAgICAgICAgICAgIEFsZXJ0Lndhcm5pbmcsIGBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyByZWFjaGVkLiBQcm9jZXNzZWQgdGltZSByYW5nZSBpczogJHtnZXRUaW1lUmFuZ2VTdHJpbmcodGhpcy50aW1lKX0uYCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzRW1wdHlEYXRhKHRoaXMuZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmluZm8sIGBDYW5ub3QgZmluZCBhbnkgZGF0YSBmb3IgdGhlIHNlbGVjdGVkIHRpbWUgcGVyaW9kOiAke3RoaXMuX3NlbGVjdGVkVGltZVJhbmdlU3RyaW5nfWApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5zdWNjZXNzLCBgUHJvY2Vzc2VkIHRpbWUgcmFuZ2UgaXM6ICR7Z2V0VGltZVJhbmdlU3RyaW5nKHRoaXMudGltZSl9LmApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2xlZXAoMTAwKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRDaGFydChwb3J0LCBwb3J0cyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVpbml0aWFsaXplIHRoZSBwb3J0IHNlbGVjdG9yIHdpdGggdGhlIHBvcnRzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaW5pdFBvcnRTZWxlY3Rvcihwb3J0czogc3RyaW5nW10gPSBudWxsLCBzZWxlY3RlZFBvcnQ6IHN0cmluZyA9IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgLy8gaW5pdGlhbGl6YXRpb24gZm9yIG5neC1zZWxlY3RcclxuICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgcG9ydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIC8vIE1EQywgcmVtb3ZlIGRlZmF1bHQgJzAwMDAnIHBvcnRcclxuICAgICAgICB0aGlzLnBvcnRzID0gZ2VuZXJhdGVQb3J0cyhnZXRSZWFsUG9ydHMocG9ydHMpLCBzZWxlY3RlZFBvcnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9ydHMgPSBnZW5lcmF0ZVBvcnRzKHBvcnRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgc2VsZWN0ZWRQb3J0ID09PSBudWxsKSB7XHJcbiAgICAgICAgLy8gcmVzZXQgc3RhdHVzIHdoZW4gZG9pbmc6XHJcbiAgICAgICAgLy8gMS4gbG9hZGluZyBwb3J0c1xyXG4gICAgICAgIC8vIDIuIHRoZSBmaWxlIGRvZXNuJ3QgY29udGFpbiB0aGUgc2VsZWN0ZWQgUG9ydFxyXG4gICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAvLyBoaWRlIHRoZSBwcm9ncmVzcyBiYXIgYW5kIGVuYWJsZSB0aGUgXCJzaG93IGNoYXJ0XCIgYnV0dG9uXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBidWlsZCBhbmQgZGlzcGxheSB0aGUgY2hhcnQgb24gcGFnZVxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICogQHBhcmFtIHBvcnRzIGFsbCBhdmFpbGFibGUgcG9ydHNcclxuICAgKiBAcGFyYW0gc3dpdGNoRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIHN3aXRjaGluZyBwb3J0cyAobm8gaW5pdCBwb3J0IHNlbGVjdG9yIG5lZWRlZClcclxuICAgKi9cclxuICBwcml2YXRlIF9idWlsZENoYXJ0KHBvcnQ6IHN0cmluZywgcG9ydHM6IHN0cmluZ1tdLCBzd2l0Y2hGbGFnID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgYmVnaW5UaW1lID0gbmV3IERhdGUoKTtcclxuICAgIGlmIChwb3J0KSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbG9hZFNldHRpbmdzRm9yU2VsZWN0aW9uc1RhYmxlKHBvcnQpKVxyXG4gICAgICAgIC50aGVuKCAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBnZXQgdGhlIGNvbmZpZ1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnRTZXJ2aWNlLmJ1aWxkQ2hhcnQoXHJcbiAgICAgICAgICAgIHRoaXMudGltZVtwb3J0XSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhW3BvcnRdLFxyXG4gICAgICAgICAgICB0aGlzLnVpU2VydmljZS5nZXRZU2NhbGUodGhpcy5faGVhZGVyS2V5LCBwb3J0KSxcclxuICAgICAgICAgICAgdGhpcy5faGVhZGVyVGV4dCxcclxuICAgICAgICAgICAgdGhpcy5faGVhZGVyS2V5LFxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24sXHJcbiAgICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UsXHJcbiAgICAgICAgICAgIHRoaXMuX2dldEhvc3RUaXRsZShwb3J0KSxcclxuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcyksXHJcbiAgICAgICAgICAgIHRoaXMuX29uWm9vbS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkUHJvZ3Jlc3MgPSAwO1xyXG4gICAgICAgICAgICAgIC8vIGFmdGVyIGNoYXJ0IGhhcyBiZWVuIGNyZWF0ZWQsIHNob3cgdGhlIGNoYXJ0IGFyZWEsIGhpZGUgcHJvZ3Jlc3MgYmFyIGFuZCBlbmFibGUgdGhlIFwic2hvdyBjaGFydFwiIGJ1dHRvblxyXG4gICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuY2hhcnRBcmVhLCBzdGF0dXM6IHRydWV9LFxyXG4gICAgICAgICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XHJcbiAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgLy8gc2V0IHBvcnQgdG8gY3VycmVudCBkaXNwbGF5aW5nIHBvcnRcclxuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2hhcnRQb3J0ID0gcG9ydDtcclxuICAgICAgICAgICAgICBwcmludFByb2Nlc3NlZFRpbWUoYmVnaW5UaW1lLCAnc3RlcF9idWlsZF9jaGFydCcpO1xyXG4gICAgICAgICAgICAgIGlmIChwb3J0cyAmJiBwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN3aXRjaEZsYWcpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwb3J0IHNlbGVjdG9yLiBEbyBub3QgbmVlZCB0byBkbyBpdCB3aGVuIHN3aXRjaGluZyBwb3J0LlxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdFBvcnRTZWxlY3Rvcihwb3J0cywgcG9ydCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoXHJcbiAgICAgICAgICBBbGVydC53YXJuaW5nLFxyXG4gICAgICAgICAgJ1RoZSBzZWxlY3RlZCBwb3J0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUuIFBsZWFzZSBjaG9vc2UgYSBjb3JyZWN0IHBvcnQgYW5kIGhhdmUgYSB0cnkgYWdhaW4uJyk7XHJcbiAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICAvLyBpbml0aWFsaXplIHBvcnQgc2VsZWN0b3IuIERvIG5vdCBuZWVkIHRvIGRvIGl0IHdoZW4gc3dpdGNoaW5nIHBvcnQuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdFBvcnRTZWxlY3Rvcihwb3J0cywgcG9ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSB0aXRsZSBhcmVhIG9mIHRoZSBjaGFydFxyXG4gICAqIGVnOiBob3N0MSAtIDMwMDQwICgyMDE4LTA5LTA1IDE1OjMyOjMyIH4gMjAxOC0wOS0wNyAxNTozMjoxNSlcclxuICAgKiBAcGFyYW0gcG9ydCBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0SG9zdFRpdGxlKHBvcnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5ob3N0KSB7XHJcbiAgICAgIHJldHVybiAgYCR7dGhpcy5ob3N0fSAtICR7cG9ydH0gKCAke2dldFRpbWVSYW5nZVN0cmluZyh0aGlzLnRpbWVbcG9ydF0pfSApYDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGFmdGVyIHpvb20sIGVuYWJsZSB0aGUgcmVzZXQgYnV0dG9uLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX29uWm9vbSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1dKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGluaXRpYWxpemUgY2hhcnQsIGluY2x1ZGluZzogZGVzdHJveSBjdXJyZW50IGNoYXJ0LCBpbml0aWFsaXplIGNvbmZpZywgaW5pdGlhbGl6ZSBhbGwgcmVsYXRpdmUgZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2luaXRDaGFydEVudihzd2l0Y2hGbGFnOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRTZXJ2aWNlLmRlc3Ryb3lDaGFydCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICB7XHJcbiAgICAgICAgLy8gY2xlYW51cCBvdGhlciBkYXRhXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQuY2hhcnRBcmVhLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG5cclxuICAgICAgICBpZiAoIXN3aXRjaEZsYWcpIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMudGltZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLnRpbWVba2V5XS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICB0aGlzLnRpbWUgPSB7fTtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLmRhdGFba2V5XS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICB0aGlzLmhvc3QgPSAnbmFtZXNlcnZlciBoaXN0b3J5IGZpbGUnO1xyXG4gICAgICAgICAgdGhpcy50YWJsZVNvdXJjZSA9IHZvaWQgMDtcclxuICAgICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLmNsZWFyTG9hZEhpc3RvcnlJbmZvcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHNldHRpbmdzIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlICh0aGUgcmlnaHQgcGFydCBvZiB0aGUgY2hhcnQpXHJcbiAgICogQHBhcmFtIHBvcnQgdGhlIHNlbGVjdGVkIHBvcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9sb2FkU2V0dGluZ3NGb3JTZWxlY3Rpb25zVGFibGUocG9ydDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlID0gdGhpcy51aVNlcnZpY2UuZ2V0U2VsZWN0aW9uVGFibGVSb3dzKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgW10pO1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnVpU2VydmljZS5nZXREaXNwbGF5SXRlbXModGhpcy5faGVhZGVyS2V5LCBwb3J0LCB0aGlzLmRlZmF1bHRTZWxlY3RlZEl0ZW1zKS5pbmNsdWRlcyhyb3cuS1BJKSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbi5zZWxlY3Qocm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IG1lc3NhZ2VzXHJcbiAgICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3Nob3dNZXNzYWdlKHR5cGU6IEFsZXJ0LCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0eXBlKSB7XHJcbiAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgQWxlcnQuc3VjY2VzczpcclxuICAgICAgICBjYXNlIEFsZXJ0LmluZm86XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEFsZXJ0Lndhcm5pbmc6XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEFsZXJ0LmVycm9yOlxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWxlcnRNZXNzYWdlID09PSBtZXNzYWdlKSB7XHJcbiAgICAgIC8vIHRyeSB0cmlnZ2VyIHRoZSBjaGFuZ2UgZXZlbnQgb2YgdGhlIGFsZXJ0LlxyXG4gICAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IHZvaWQgMDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFsZXJ0TWVzc2FnZSA9IG1lc3NhZ2UsIDEwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFsZXJ0VHlwZSA9IHR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0b2dnbGUgaXRlbXMgd2l0aCB0aGUgcHJvdmlkZWQgc3RhdHVzIChzaG93IG9yIGhpZGUgdGhlIHJlbGF0aXZlIGVsZW1lbnQgb24gdGhlIHBhZ2UpXHJcbiAgICogQHBhcmFtIGl0ZW1zIGl0ZW1zIHdpdGggdGhlIHJlbGF0aXZlIGlkIGFuZCBzdGF0dXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdG9nZ2xlSXRlbXMoaXRlbXM6IHtpZDogSHRtbEVsZW1lbnQsIHN0YXR1czogYm9vbGVhbn1bXSkge1xyXG4gICAgY29uc3QgZ2V0VmFyaWFibGVOYW1lQnlUeXBlSWQgPSAoaWQ6IEh0bWxFbGVtZW50KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LmNoYXJ0QXJlYTogcmV0dXJuICdzaG93Q2hhcnRGbGFnJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3M6IHJldHVybiAnc2hvd1JlYWRGaWxlUHJvZ3Jlc3MnO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uOiByZXR1cm4gJ2VuYWJsZVNob3dDaGFydEJ1dHRvbic7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5sb2FkUG9ydHNCdXR0b246IHJldHVybiAnZW5hYmxlTG9hZFBvcnRzQnV0dG9uJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b246IHJldHVybiAnZW5hYmxlUmVzZXRDaGFydEJ1dHRvbic7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAoaXRlbXMpIHtcclxuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB0aGlzW2dldFZhcmlhYmxlTmFtZUJ5VHlwZUlkKGl0ZW0uaWQpXSA9IGl0ZW0uc3RhdHVzO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAjbmFtZXNlcnZlckhpc3RvcnlBbGwgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktYWxsXCIgKHdpbmRvdzpyZXNpemUpPVwib25SZXNpemUoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWNoYXJ0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWJveC1jb250ZW50XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj5cclxuICAgICAgICA8ZmlsZS1kcm9wLWlucHV0IChmaWxlRHJvcCk9XCJmaWxlRHJvcHBlZCgkZXZlbnQpXCIgKGZpbGVJbnB1dCk9XCJmaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZHJvcEFyZWFUZXh0XT0gXCJhYmJyZXZpYXRlZEZpbGVOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEFyZWFUZXh0XT1cIidCcm93c2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWxlPy5uYW1lPyBmaWxlLm5hbWU6J1NlbGVjdCBhIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSBmcm9tIHlvdXIgbG9jYWwgZGlzay4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpbGVCdWZmZXJcIj5cclxuICAgICAgICA8L2ZpbGUtZHJvcC1pbnB1dD5cclxuICAgICAgICA8cCAqbmdJZj1cImZpbGVCdWZmZXJcIiBjbGFzcz1cImJveC1zdHJlYW0tbW9kZS10ZXh0XCI+e3tzdHJlYW1Nb2RlRmlsZU5hbWUgfHwgJ25hbWVzZXJ2ZXJfaGlzdG9yeS50cmMgKHN0cmVhbSBtb2RlKSd9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiPlxyXG4gICAgICAgIDxwcm9ncmVzcy1iYXIgW3Byb2dyZXNzXT1cInJlYWRQcm9ncmVzc1wiPjwvcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LXRpbWVcIj5cclxuICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGltZS1yYW5nZVwiPlxyXG4gICAgICAgPHRpbWUtcmFuZ2Utc2VsZWN0b3IgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCIgWyhkYXRlVGltZVJhbmdlKV09XCJkYXRlVGltZVJhbmdlXCI+PC90aW1lLXJhbmdlLXNlbGVjdG9yPlxyXG4gICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGltZXpvbmUtc2VsZWN0b3JcIj5cclxuICAgICAgICA8dGltZXpvbmUtc2VsZWN0b3IgWyh0aW1lem9uZSldPVwidGltZXpvbmVcIiBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj48L3RpbWV6b25lLXNlbGVjdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwb3J0LXNlbGVjdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicG9ydC1zZWxlY3RvclwiPlxyXG4gICAgICAgIDxwb3J0LXNlbGVjdG9yIChwb3J0Q2hhbmdlKT1cInN3aXRjaFBvcnRGb3JDaGFydCgkZXZlbnQpXCIgWyhwb3J0KV09XCJwb3J0XCIgW3BvcnRzXT1cInBvcnRzXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCI+PC9wb3J0LXNlbGVjdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBvcnQtbG9hZC1idXR0b25cIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkUG9ydHMoKVwiIHRpdGxlPVwiTG9hZCBhbGwgcG9ydHMgZnJvbSBuYW1lIHNlcnZlciBoaXN0b3J5IHRyYWNlIGZpbGUuXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVTaG93Q2hhcnRCdXR0b24gfHwgcG9ydCB8fCAhZW5hYmxlTG9hZFBvcnRzQnV0dG9uXCI+e3tzaG93UmVhZEZpbGVQcm9ncmVzcz8gXCJMb2FkaW5nLi4uXCIgOiBcIkxvYWRcIn19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LW9wZXJhdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNob3dDaGFydCgpXCIgdGl0bGU9XCJMb2FkIGFuZCBkaXNwbGF5IGFsbCBkYXRhIGZyb20gbmFtZSBzZXJ2ZXIgaGlzdG9yeSB0cmFjZSBmaWxlLlwiIFtkaXNhYmxlZF09XCIhZW5hYmxlU2hvd0NoYXJ0QnV0dG9uXCI+e3tzaG93UmVhZEZpbGVQcm9ncmVzcz8gXCJMb2FkaW5nLi4uXCIgOiBcIlNob3dcIn19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZXNldENoYXJ0KClcIiB0aXRsZT1cIlJlc2V0IHpvb20gb2YgY2hhcnQuXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzIHx8ICFlbmFibGVSZXNldENoYXJ0QnV0dG9uXCI+UmVzZXQgQ2hhcnQ8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICNuYW1lc2VydmVySGlzdG9yeUNvbnRlbnQgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50LWNoYXJ0XCI+XHJcbiAgICAgIDxpbnN0cnVjdGlvbiBbKHNob3cpXT1cInNob3dJbnN0cnVjdGlvblwiICpuZ0lmPVwiIXNob3dDaGFydEZsYWcgJiYgc2hvd0luc3RydWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwMUZpbmlzaGVkXT1cIiEhZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDJGaW5pc2hlZF09XCJkYXRlVGltZVJhbmdlICYmICghIWRhdGVUaW1lUmFuZ2VbMF0gfHwgISFkYXRlVGltZVJhbmdlWzFdKSB8fCB0aW1lem9uZSAhPSBkZWZhdWx0VGltZXpvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXAzRmluaXNoZWRdPVwiISFwb3J0XCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwNEZpbmlzaGVkXT1cInN0ZXBTaG93Q2hhcnQgJiYgIWVuYWJsZVNob3dDaGFydEJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDVGaW5pc2hlZF09XCJmYWxzZVwiPlxyXG4gICAgICA8L2luc3RydWN0aW9uPlxyXG4gICAgICA8Y2FudmFzIGlkPVwiY2hhcnROYW1lU2VydmVySGlzdG9yeVwiID48L2NhbnZhcz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50LWNvbnRyb2xsZXJcIiA+XHJcbiAgICAgIDxuZ3gtc2VsZWN0aW9uLXRhYmxlIChjaGFuZ2UpPVwic2VsZWN0SXRlbSgkZXZlbnQpXCIgKm5nSWY9XCJzaG93Q2hhcnRGbGFnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrYm94XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVTb3VyY2VdPVwidGFibGVTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5Q29sdW1uXT1cImtwaUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5Db2x1bW5zXT1cImhpZGRlbkNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcENvbHVtbl09XCJkZXNjQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0eWxlXT1cInNlYXJjaFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoQ29sdW1uXT1cImtwaUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aVNlbGVjdGlvbl09XCJ0cnVlXCI+XHJcbiAgICAgIDwvbmd4LXNlbGVjdGlvbi10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgKm5nSWY9XCJhbGVydE1lc3NhZ2VcIj5cclxuICA8YWxlcnQgWyhhbGVydE1lc3NhZ2UpXT1cImFsZXJ0TWVzc2FnZVwiIFthbGVydFR5cGVdPVwiYWxlcnRUeXBlXCIgW2FsZXJ0VGltZW91dF09XCIzMDAwMFwiPjwvYWxlcnQ+XHJcbjwvZGl2PlxyXG4iXX0=
557
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQTRCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUNMLGNBQWMsRUFDZCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsWUFBWSxFQUNaLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLE1BQU0sR0FDUCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFnRSxNQUFNLFVBQVUsQ0FBQztBQUN6SCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkUsT0FBTyxVQUFVLENBQUM7QUFDbEIsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7QUFFL0IsSUFBSyxVQUlKO0FBSkQsV0FBSyxVQUFVO0lBQ2IseURBQTJDLENBQUE7SUFDM0MscUNBQXVCLENBQUE7SUFDdkIsbURBQXFDLENB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MkI7c0JBQXZGLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtsRCxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgc2V0Q2hhcnRIZWlnaHQsXHJcbiAgc2xlZXAsXHJcbiAgaXNFbXB0eURhdGEsXHJcbiAgZ2V0RGlzcGxheVBvcnQsXHJcbiAgZ2V0RmlsZUZyb21JbnB1dCxcclxuICBpc1NhbWVGaWxlLFxyXG4gIGdldEFiYnJldmlhdGVkRmlsZU5hbWUsXHJcbiAgZ2V0RmlsZUZyb21Ecm9wLFxyXG4gIGdldFJlYWxQb3J0cyxcclxuICBnZXRUaW1lU3RyaW5nLFxyXG4gIHByaW50UHJvY2Vzc2VkVGltZSxcclxuICBnZXRUaW1lUmFuZ2VTdHJpbmcsXHJcbiAgZ2VuZXJhdGVQb3J0cyxcclxuICBnZXREZWZhdWx0VGltZXpvbmUsXHJcbiAgYmxvYlRvRmlsZSxcclxuICBpc0ZpbGUsXHJcbn0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBBYm9ydCwgQWxlcnQsIEh0bWxFbGVtZW50LCBJdGVtLCBDaGFydENvbnRlbnREYXRhLCBDaGFydENvbnRlbnRIZWFkZXIsIENoYXJ0Q29udGVudFRpbWUsIFBvcnQgfSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IEZpbGVTZXJ2aWNlLCBDaGFydFNlcnZpY2UsIFVJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuXHJcbmltcG9ydCAnaGFtbWVyanMnO1xyXG5pbXBvcnQgJy4uL3V0aWxzL2NoYXJ0anMtZG93bnNhbXBsZSc7XHJcbmltcG9ydCAnLi4vdXRpbHMvY2hhcnRqcy16b29tJztcclxuXHJcbmVudW0gU2VhcmNoVHlwZSB7XHJcbiAgc2VhcmNoV2l0aFN1YkhlYWRlciA9ICdzZWFyY2hXaXRoU3ViSGVhZGVyJyxcclxuICBzZWFyY2hBbGwgPSAnc2VhcmNoQWxsJyxcclxuICBzZWFyY2hJbkNoaWxkcmVuID0gJ3NlYXJjaEluQ2hpbGRyZW4nXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LWhhbmEtbmFtZXNlcnZlci1oaXN0b3J5LXZpZXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25hbWVzZXJ2ZXItaGlzdG9yeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbICcuL25hbWVzZXJ2ZXItaGlzdG9yeS5jb21wb25lbnQuc2NzcycgXSxcclxuICBwcm92aWRlcnM6IFsgRmlsZVNlcnZpY2UsIENoYXJ0U2VydmljZSwgVUlTZXJ2aWNlIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5hbWVTZXJ2ZXJIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCduYW1lc2VydmVySGlzdG9yeUFsbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuYW1lc2VydmVySGlzdG9yeUFsbFJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCduYW1lc2VydmVySGlzdG9yeUNvbnRlbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmFtZXNlcnZlckhpc3RvcnlDb250ZW50UmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW2RlZmF1bHRTZWxlY3RlZEl0ZW1zXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTZWxlY3RlZEl0ZW1zOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFtoaWRlTWVhc3VyZUNvbHVtbnNdXHJcbiAgICovXHJcbiAgQElucHV0KCkgaGlkZU1lYXN1cmVDb2x1bW5zOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFttYXhSb3dzTGltaXRhdGlvbl1cclxuICAgKi9cclxuICBASW5wdXQoKSBtYXhSb3dzTGltaXRhdGlvbjogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW3Nob3dJbnN0cnVjdGlvbl1cclxuICAgKi9cclxuICBASW5wdXQoKSBzaG93SW5zdHJ1Y3Rpb24gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW3RpbWV6b25lXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRpbWV6b25lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZpbGUgYnVmZmVyLCB1c2UgdGhpcyBmb3Igc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBmaWxlQnVmZmVyOiBCbG9iO1xyXG5cclxuICAvKipcclxuICAgKiBmaWxlIG5hbWUgZm9yIHN0cmVhbSBtb2RlXHJcbiAgICovXHJcbiAgQElucHV0KCkgc3RyZWFtTW9kZUZpbGVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGF1dG8gZGlzcGxheSB0aGUgY2hhcnQgaW4gc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBhdXRvRGlzcGxheTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgZmlsZTogRmlsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogdGltZSBpbmZvIG9mIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICB0aW1lOiBDaGFydENvbnRlbnRUaW1lID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIGRhdGEgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGRhdGE6IENoYXJ0Q29udGVudERhdGEgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogaGVhZGVyIG9mIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBoZWFkZXI6IENoYXJ0Q29udGVudEhlYWRlcltdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIGhvc3Qgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGhvc3QgPSAnbmFtZXNlcnZlciBoaXN0b3J5IGZpbGUnO1xyXG5cclxuICAvKipcclxuICAgKiBhbGVydCBtZXNzYWdlIGNvbnRlbnRcclxuICAgKi9cclxuICBhbGVydE1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYWxlcnQgbWVzc2FnZSB0eXBlXHJcbiAgICovXHJcbiAgYWxlcnRUeXBlOiBBbGVydDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHBvcnQ6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYWxsIHRoZSBwb3J0cyBmcm9tIHRoZSBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIHBvcnRzOiBQb3J0W107XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGVkIHRpbWUgcmFuZ2VcclxuICAgKi9cclxuICBkYXRlVGltZVJhbmdlOiBEYXRlW107XHJcblxyXG4gIC8qKlxyXG4gICAqIGRhdGEgc291cmNlIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlIChyaWdodCBwYXJ0IG9mIHRoZSBjaGFydClcclxuICAgKi9cclxuICB0YWJsZVNvdXJjZTogYW55W107XHJcblxyXG4gIC8qKlxyXG4gICAqIHRoZSBwcm9ncmVzcyBmb3IgcmVhZGluZyBmaWxlXHJcbiAgICovXHJcbiAgcmVhZFByb2dyZXNzID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQvZHJvcHBlZCBmaWxlIG5hbWUgKGFiYnJldmlhdGlvbiksIGZ1bGwgZmlsZSBuYW1lIHdpbGwgYmUgc2hvd24gdmlhIHRoZSB0b29sdGlwc1xyXG4gICAqL1xyXG4gIGFiYnJldmlhdGVkRmlsZU5hbWUgPSAnb3IgRHJvcCBGaWxlIEhlcmUnO1xyXG5cclxuICAvKipcclxuICAgKiBmb3IgdGhlIGluc3RydWN0aW9uIHN0ZXAgNFxyXG4gICAqL1xyXG4gIHN0ZXBTaG93Q2hhcnQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBzaG93aW5nIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGNoYXJ0XHJcbiAgICovXHJcbiAgc2hvd0NoYXJ0RmxhZzogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBzaG93aW5nIHRoZSBmaWxlIHJlYWRpbmcgcHJvZ3Jlc3NcclxuICAgKi9cclxuICBzaG93UmVhZEZpbGVQcm9ncmVzczogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBcIkxvYWRcIiBwb3J0cyBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVMb2FkUG9ydHNCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3IgZW5hYmxpbmcgXCJTaG93XCIgY2hhcnQgYnV0dG9uXHJcbiAgICovXHJcbiAgZW5hYmxlU2hvd0NoYXJ0QnV0dG9uOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIFwiUmVzZXRcIiBjaGFydCBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVSZXNldENoYXJ0QnV0dG9uOiBib29sZWFuO1xyXG5cclxuICBzZWFyY2hUeXBlID0gU2VhcmNoVHlwZS5zZWFyY2hBbGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiB0YWJsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogY3VycmVudCBkaXNwbGF5aW5nIHBvcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9jdXJyZW50Q2hhcnRQb3J0OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY2hhcnRTZXJ2aWNlOiBDaGFydFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSB1aVNlcnZpY2U6IFVJU2VydmljZSkge31cclxuXHJcbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgZmJjID0gY2hhbmdlcy5maWxlQnVmZmVyO1xyXG4gICAgLy8gIWlzRmlsZShmYmMuY3VycmVudFZhbHVlKSAtLT4gb25seSBzaG93IGNoYXJ0IHdoZW4gaXQncyBub3QgYSBmaWxlIC0+IGl0J3MgYSBmaWxlLCBtZWFucyB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkXHJcbiAgICBpZiAoZmJjICYmIGZiYy5jdXJyZW50VmFsdWUgJiYgZmJjLmN1cnJlbnRWYWx1ZSAhPT0gZmJjLnByZXZpb3VzVmFsdWUgJiYgIWlzRmlsZShmYmMuY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAvLyBzaW11bGF0ZSBzZWxlY3RpbmcgZmlsZVxyXG4gICAgICBjb25zdCBzaW11bGF0ZWRFdmVudCA9IHt0YXJnZXQ6IHtmaWxlczogW2Jsb2JUb0ZpbGUoZmJjLmN1cnJlbnRWYWx1ZSwgdGhpcy5zdHJlYW1Nb2RlRmlsZU5hbWUpXX19O1xyXG4gICAgICBhd2FpdCB0aGlzLmZpbGVTZWxlY3RlZChzaW11bGF0ZWRFdmVudCk7XHJcbiAgICAgIHRoaXMucG9ydCA9IHVuZGVmaW5lZDsgLy8gY2xlYXIgdGhlIHBvcnQgc2VsZWN0aW9uXHJcbiAgICAgIGlmICh0aGlzLmF1dG9EaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZSgpOyAvLyBuZ0FmdGVyVmlld0luaXQvcmVzaXplIHdvbid0IHdvcmsgaW4gZWxlY3Ryb25cclxuICAgICAgICB0aGlzLnNob3dDaGFydCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyBpbml0IGl0ZW1zJyBzdGF0dXNcclxuICAgIC8vIHJlc2V0IGNoYXJ0IGJ1dHRvbiB3aWxsIGJlIGRpc2FibGUgYnkgZGVmYXVsdCBsYXRlciwgb25seSBiZSBlbmFibGVkIGFmdGVyIHpvb21lZFxyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5sb2FkUG9ydHNCdXR0b24sIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgIHRoaXMub25SZXNpemUoKTsgLy8gdXBkYXRlIHRoZSBzaXplLCBvdGhlcndpc2UgdGhlcmUgbWF5IGhhdmUgYSBzY3JvbGxiYXIgKGJlY2F1c2Ugb2YgdGhlIHRvYXN0KSBpZiBhdXRvIGRpc3BsYXkgaXMgc2V0IHRvIHRydWVcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IENoYXJ0IHRvIGluaXRpYWwgc3RhdHVzXHJcbiAgICogSWYgbGVnZW5kIGlzIGFscmVhZHkgc2VsZWN0ZWQvdW5zZWxlY3RlZCBmcm9tIHRoZSBsaXN0LCBpdCB3b3VsZG4ndCBiZSByZXN0b3JlZC5cclxuICAgKi9cclxuICByZXNldENoYXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICBpZiAodGhpcy50YWJsZVNvdXJjZSAmJiB0aGlzLl9zZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5jaGFydFNlcnZpY2UucmVzZXRDaGFydCh0aGlzLnRhYmxlU291cmNlLCB0aGlzLl9zZWxlY3Rpb24pXHJcbiAgICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlYWQgdGhlIGZpbGUgYW5kIGRpc3BsYXkgdGhlIGNoYXJ0XHJcbiAgICovXHJcbiAgc2hvd0NoYXJ0KCk6IHZvaWQge1xyXG4gICAgLy8gYWZ0ZXIgY2xpY2ssIHRoaXMgYnV0dG9uIGFuZCByZXNldCBidXR0b24gbmVlZHMgdG8gYmUgZGlzYWJsZWRcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XSk7XHJcblxyXG4gICAgdGhpcy5zdGVwU2hvd0NoYXJ0ID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9pbml0Q2hhcnRFbnYoKS50aGVuKCgpID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRUaW1lID0gdGhpcy5fc2VsZWN0ZWRUaW1lUmFuZ2U7XHJcbiAgICAgIGlmIChzZWxlY3RlZFRpbWUuc3RhcnRUaW1lID4gc2VsZWN0ZWRUaW1lLmVuZFRpbWUpIHtcclxuICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgJ1RpbWUgcmFuZ2UgaXMgbm90IGNvcnJlY3QuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgICAvLyBpdCdzIHRpbWUgZm9yIGRpc3BsYXlpbmcgdGhlIHJlYWRpbmcgcHJvZ3Jlc3MgYmFyXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9idWlsZENoYXJ0RnJvbURhdGFGaWxlKHRoaXMuZmlsZSwgc2VsZWN0ZWRUaW1lLnN0YXJ0VGltZSwgc2VsZWN0ZWRUaW1lLmVuZFRpbWUsIHRoaXMucG9ydCk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSk7XHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogZmFsc2V9XSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxvYWQgYWxsIHBvcnRzIGZyb20gZmlsZVxyXG4gICAqL1xyXG4gIGxvYWRQb3J0cygpOiB2b2lkIHtcclxuICAgIC8vIGRvIGNvbmZpcm1hdGlvbiBhY3Rpb25zXHJcbiAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgIC8vIGJlZm9yZSBzdGFydCBsb2FkaW5nIHBvcnRzIGZyb20gZmlsZSwgZGlzcGxheSBwcm9ncmVzcyBiYXIgYW5kIGRpc2FibGUgdGhlIHNob3cgY2hhcnQgYnV0dG9uXHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XHJcbiAgICAgIF0pO1xyXG4gICAgICB0aGlzLl9yZWFkUG9ydHNGcm9tRmlsZSh0aGlzLmZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0IG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSwgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMSBmaWxlLlxyXG4gICAqL1xyXG4gIGFzeW5jIGZpbGVTZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEZpbGUgPSBnZXRGaWxlRnJvbUlucHV0KGV2ZW50LnRhcmdldCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRGaWxlKSB7XHJcbiAgICAgIGlmICghaXNTYW1lRmlsZSh0aGlzLmZpbGUsIHNlbGVjdGVkRmlsZSkpIHtcclxuICAgICAgICAvLyBpbml0IHBvcnQgc2VsZWN0b3JcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKCkuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbGUgPSBzZWxlY3RlZEZpbGU7XHJcbiAgICAgICAgdGhpcy5hYmJyZXZpYXRlZEZpbGVOYW1lID0gZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSh0aGlzLmZpbGUubmFtZSk7XHJcbiAgICAgICAgLy8gYWZ0ZXIgZmlsZSBoYXMgYmVlbiBzZWxlY3RlZCwgdGhlIHNob3cgY2hhcnQgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWRcclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1dKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZHJvcCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIDEgZmlsZS5cclxuICAgKi9cclxuICBmaWxlRHJvcHBlZChldmVudDogYW55KSB7XHJcbiAgICBnZXRGaWxlRnJvbURyb3AoZXZlbnQpXHJcbiAgICAgIC50aGVuKGZpbGUgPT4ge1xyXG4gICAgICAgIGlmICghaXNTYW1lRmlsZSh0aGlzLmZpbGUsIGZpbGUpKSB7XHJcbiAgICAgICAgICAvLyBpbml0IHBvcnQgc2VsZWN0b3JcclxuICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGU7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJicmV2aWF0ZWRGaWxlTmFtZSA9IGdldEFiYnJldmlhdGVkRmlsZU5hbWUodGhpcy5maWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAvLyBhZnRlciBmaWxlIGhhcyBiZWVuIGRyb3BwZWQsIHRoZSBzaG93IGNoYXJ0IGJ1dHRvbiBuZWVkcyB0byBiZSBlbmFibGVkXHJcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH19KVxyXG4gICAgICAudGhlbigoKSA9PiAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3Qgb25lIGl0ZW0gZnJvbSBzZWxlY3Rpb24gdGFibGUsIHJlbGF0aXZlIGRhdGFzZXQgd2lsbCBiZSBzaG93biBvciBoaWRkZW5cclxuICAgKi9cclxuICBzZWxlY3RJdGVtKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC50YWJsZVJvdykge1xyXG4gICAgICBjb25zdCByb3cgPSBldmVudC50YWJsZVJvdztcclxuICAgICAgdGhpcy5fc2VsZWN0aW9uLnRvZ2dsZShyb3cpO1xyXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS50b2dnbGVEYXRhSW5DaGFydChyb3cuS1BJLCAhdGhpcy5fc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSlcclxuICAgICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVjYWxjdWxhdGluZyBjaGFydCBoZWlnaHQgd2hlbiByZXNpemluZ1xyXG4gICAqL1xyXG4gIG9uUmVzaXplKCkge1xyXG4gICAgY29uc3QgbmFtZXNlcnZlckhpc3RvcnlBbGxFbGVtZW50ID0gdGhpcy5uYW1lc2VydmVySGlzdG9yeUFsbFJlZiA/IHRoaXMubmFtZXNlcnZlckhpc3RvcnlBbGxSZWYubmF0aXZlRWxlbWVudCA6IG51bGw7XHJcbiAgICBjb25zdCBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRFbGVtZW50ID0gdGhpcy5uYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWYgPyB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudFJlZi5uYXRpdmVFbGVtZW50IDogbnVsbDtcclxuICAgIHNldENoYXJ0SGVpZ2h0KG5hbWVzZXJ2ZXJIaXN0b3J5QWxsRWxlbWVudCwgbmFtZXNlcnZlckhpc3RvcnlDb250ZW50RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTd2l0Y2ggcG9ydCBhbmQgcmVpbml0aWFsaXplIGNoYXJ0LCB0cmlnZ2VyZWQgYnkgY2hhbmdpbmcgdGhlIHBvcnRcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHN3aXRjaFBvcnRGb3JDaGFydChwb3J0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChwb3J0ID09PSB0aGlzLl9jdXJyZW50Q2hhcnRQb3J0KSB7XHJcbiAgICAgIC8vIG5vdCB0byBzd2l0Y2ggcG9ydCwgYmVjYXVzZSB0aGUgcmVsYXRpdmUgcG9ydCBpcyBkaXNwbGF5aW5nLCBubyBuZWVkIHRvIHJlbmRlciB0d2ljZS5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZpbGUgfHwgIXBvcnQgfHwgcG9ydC5sZW5ndGggPT09IDAgfHwgcG9ydC5zbGljZSgxLCAzKSA9PT0gJyoqJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHRoaXMudGltZSkubGVuZ3RoID4gMSAmJiAhZ2V0UmVhbFBvcnRzKE9iamVjdC5rZXlzKHRoaXMudGltZSkuZmlsdGVyKGtleSA9PiB0aGlzLnRpbWVba2V5XSkpLmluY2x1ZGVzKHBvcnQpKSB7XHJcbiAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmluZm8sIGBEYXRhIG9mIHBvcnQ6JHtwb3J0fSBpcyBub3QgbG9hZGVkLCBwbGVhc2UgbG9hZCB0aGUgZGF0YSBmaXJzdCBieSBjbGlja2luZyB0aGUgXCJTaG93XCIgYnV0dG9uLmApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gb25seSBkbyBzd2l0Y2ggcG9ydHMgd2hlbiBhdmFpbGFibGUgcG9ydHMgbnVtYmVyID4gMVxyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudGltZSkuZmlsdGVyKGtleSA9PiB0aGlzLnRpbWVba2V5XSkubGVuZ3RoID4gMSkge1xyXG4gICAgICAvLyBkaXNhYmxlIHRoZSBcInNob3cgY2hhcnRcIiBhbmQgXCJyZXNldCBjaGFydFwiIGJ1dHRvbiBmaXJzdFxyXG4gICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgICAgLy8gaW5pdCB0aGUgZW52aXJvbm1lbnQgd2l0aCBzd2l0Y2ggZmxhZ1xyXG4gICAgICB0aGlzLl9pbml0Q2hhcnRFbnYodHJ1ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnQocG9ydCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgIH0pLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgY29sdW1ucyB3aGljaCBuZWVkIHRvIGJlIGhpZGRlbiBmcm9tIHRoZSBzZWxlY3Rpb24gdGFibGVcclxuICAgKi9cclxuICBnZXQgaGlkZGVuQ29sdW1ucygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy51aVNlcnZpY2UuZ2V0SGlkZGVuQ29sdW1ucyh0aGlzLmhpZGVNZWFzdXJlQ29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgZGVmYXVsdCB0aW1lem9uZVxyXG4gICAqL1xyXG4gIGdldCBkZWZhdWx0VGltZXpvbmUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBnZXREZWZhdWx0VGltZXpvbmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUga2V5IGNvbHVtbiAoS1BJKVxyXG4gICAqL1xyXG4gIGdldCBrcGlDb2x1bW4oKTogSXRlbSB7XHJcbiAgICByZXR1cm4gSXRlbS5rcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIGtleSBjb2x1bW4gKEtQSSlcclxuICAgKi9cclxuICBnZXQgZGVzY0NvbHVtbigpOiBJdGVtIHtcclxuICAgIHJldHVybiBJdGVtLmRlc2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBzZWxlY3RlZCB0aW1lIHJhbmdlLCBzZXQgc2Vjb25kIGFuZCBtaWxsaXNlY29uZCBwYXJ0IHRvIDBcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfc2VsZWN0ZWRUaW1lUmFuZ2UoKToge3N0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXJ9IHtcclxuICAgIGxldCBzdGFydFRpbWUgPSAwO1xyXG4gICAgbGV0IGVuZFRpbWUgPSA0MTAyMzU4NDAwMDAwOyAvLyAyMDk5LzEyLzMxXHJcbiAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZS5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgIC8vIGdldCBzdGFydCB0aW1lXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZVswXSkge1xyXG4gICAgICAgICAgc3RhcnRUaW1lID0gdGhpcy5kYXRlVGltZVJhbmdlWzBdLnNldFNlY29uZHMoMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2VbMV0pIHtcclxuICAgICAgICAgIGVuZFRpbWUgPSB0aGlzLmRhdGVUaW1lUmFuZ2VbMV0uc2V0U2Vjb25kcygwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7c3RhcnRUaW1lOiBzdGFydFRpbWUsIGVuZFRpbWU6IGVuZFRpbWV9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSB0aW1lIHJhbmdlIHN0cmluZywgZWc6IDIwMTgtMTAtMjUgMTA6MjUgfiAyMDE4LTEwLTI2IDEwOjI2XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX3NlbGVjdGVkVGltZVJhbmdlU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFRpbWVSYW5nZVN0cmluZyA9IHRoaXMuX3NlbGVjdGVkVGltZVJhbmdlO1xyXG4gICAgcmV0dXJuIGAke2dldFRpbWVTdHJpbmcoc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcuc3RhcnRUaW1lKX0gfiAke2dldFRpbWVTdHJpbmcoc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcuZW5kVGltZSl9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhcnJheSBvZiBoZWFkZXIga2V5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX2hlYWRlcktleSgpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyLm1hcChoZWFkZXJJdGVtID0+IGhlYWRlckl0ZW0ua2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhcnJheSBvZiBoZWFkZXIgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9oZWFkZXJUZXh0KCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLmhlYWRlci5tYXAoaGVhZGVySXRlbSA9PiBoZWFkZXJJdGVtLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVhZCBwb3J0cyBmcm9tIHRoZSBzZWxlY3RlZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVhZFBvcnRzRnJvbUZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS5nZXRQb3J0c0Zyb21GaWxlKGZpbGUsIChwcm9ncmVzcykgPT4ge1xyXG4gICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IHByb2dyZXNzO1xyXG4gICAgfSkudGhlbihwb3J0cyA9PiB7XHJcbiAgICAgIHJldHVybiBzbGVlcCgxMDApLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKHBvcnRzKTtcclxuICAgICAgfSk7XHJcbiAgICB9KS5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBidWlsZCBjaGFydCBmcm9tIHRoZSBzZWxlY3RlZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIHRoZSBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBzdGFydFRpbWUgc3RhcnQgdGltZVxyXG4gICAqIEBwYXJhbSBlbmRUaW1lIGVuZCB0aW1lXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkUG9ydCBzZWxlY3RlZCBwb3J0IGZvciBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZSAoTURDIHN5c3RlbSlcclxuICAgKi9cclxuICBwcml2YXRlIF9idWlsZENoYXJ0RnJvbURhdGFGaWxlKGZpbGU6IEZpbGUsIHN0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXIsIHNlbGVjdGVkUG9ydDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlLmdldENoYXJ0Q29udGVudEZyb21GaWxlKFxyXG4gICAgICBmaWxlLFxyXG4gICAgICBzdGFydFRpbWUsXHJcbiAgICAgIGVuZFRpbWUsXHJcbiAgICAgIHNlbGVjdGVkUG9ydCxcclxuICAgICAgdGhpcy50aW1lem9uZSxcclxuICAgICAgdGhpcy5tYXhSb3dzTGltaXRhdGlvbiwgcHJvZ3Jlc3MgPT4gdGhpcy5yZWFkUHJvZ3Jlc3MgPSBwcm9ncmVzcylcclxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyBwYXJzaW5nIGRvbmVcclxuICAgICAgICBjb25zdCBiZWdpblRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XHJcbiAgICAgICAgY29uc3QgcG9ydHMgPSBnZXRSZWFsUG9ydHMoT2JqZWN0LmtleXMocmVzdWx0LnRpbWUpLCB0cnVlKTtcclxuICAgICAgICBwb3J0cy5mb3JFYWNoKHBvcnQgPT4ge1xyXG4gICAgICAgICAgLy8gY29udmVydCB0aGUgdW5pdCBhbmQgZ2VuZXJhdGUgY29udHJvbGxpbmcgZGF0YSBmb3IgYWxsIHBvcnRzXHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMudWlTZXJ2aWNlLmNvbnZlcnRVbml0QW5kR2VuZXJhdGVDb250cm9sRGF0YShyZXN1bHQuZGF0YVtwb3J0XSwgcmVzdWx0LmhlYWRlciwgcG9ydCkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXHJcbiAgICAgICAgICAudGhlbigoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyBnZXQgYWxsIHBvcnRzIGZyb20gdGhlIGFuYWx5emVkIGRhdGEodGltZSlcclxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBwb3J0IHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgcGFnZVxyXG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gZ2V0RGlzcGxheVBvcnQocG9ydHMsIHNlbGVjdGVkUG9ydCk7XHJcblxyXG4gICAgICAgICAgICBwcmludFByb2Nlc3NlZFRpbWUoYmVnaW5UaW1lLCAnY29udmVydGluZyBzdGVwJyk7XHJcbiAgICAgICAgICAgIHBvcnRzLmZvckVhY2goIHBvcnRJdGVtID0+IHRoaXMudWlTZXJ2aWNlLmdlbmVyYXRlWVNjYWxlKHBvcnRJdGVtKSk7XHJcbiAgICAgICAgICAgIHByaW50UHJvY2Vzc2VkVGltZShiZWdpblRpbWUsICdnZW5lcmF0aW5nIFlTY2FsZSBzdGVwJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUgPSByZXN1bHQudGltZTtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXIgPSB0aGlzLnVpU2VydmljZS5nZXRIZWFkZXIocmVzdWx0LmhlYWRlciwgcG9ydCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdC5ob3N0O1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmFib3J0ZWQgPT09IEFib3J0Lm1heExpbmVOdW1SZWFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICBBbGVydC53YXJuaW5nLCBgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgcmVhY2hlZC4gUHJvY2Vzc2VkIHRpbWUgcmFuZ2UgaXM6ICR7Z2V0VGltZVJhbmdlU3RyaW5nKHRoaXMudGltZSl9LmApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChpc0VtcHR5RGF0YSh0aGlzLmRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5pbmZvLCBgQ2Fubm90IGZpbmQgYW55IGRhdGEgZm9yIHRoZSBzZWxlY3RlZCB0aW1lIHBlcmlvZDogJHt0aGlzLl9zZWxlY3RlZFRpbWVSYW5nZVN0cmluZ31gKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuc3VjY2VzcywgYFByb2Nlc3NlZCB0aW1lIHJhbmdlIGlzOiAke2dldFRpbWVSYW5nZVN0cmluZyh0aGlzLnRpbWUpfS5gKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNsZWVwKDEwMCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnQocG9ydCwgcG9ydHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlaW5pdGlhbGl6ZSB0aGUgcG9ydCBzZWxlY3RvciB3aXRoIHRoZSBwb3J0c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2luaXRQb3J0U2VsZWN0b3IocG9ydHM6IHN0cmluZ1tdID0gbnVsbCwgc2VsZWN0ZWRQb3J0OiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIC8vIGluaXRpYWxpemF0aW9uIGZvciBuZ3gtc2VsZWN0XHJcbiAgICAgIGlmIChwb3J0cyAhPSBudWxsICYmIHBvcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAvLyBNREMsIHJlbW92ZSBkZWZhdWx0ICcwMDAwJyBwb3J0XHJcbiAgICAgICAgdGhpcy5wb3J0cyA9IGdlbmVyYXRlUG9ydHMoZ2V0UmVhbFBvcnRzKHBvcnRzKSwgc2VsZWN0ZWRQb3J0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvcnRzID0gZ2VuZXJhdGVQb3J0cyhwb3J0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwb3J0cyAhPSBudWxsICYmIHNlbGVjdGVkUG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICAgIC8vIHJlc2V0IHN0YXR1cyB3aGVuIGRvaW5nOlxyXG4gICAgICAgIC8vIDEuIGxvYWRpbmcgcG9ydHNcclxuICAgICAgICAvLyAyLiB0aGUgZmlsZSBkb2Vzbid0IGNvbnRhaW4gdGhlIHNlbGVjdGVkIFBvcnRcclxuICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgLy8gaGlkZSB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCBlbmFibGUgdGhlIFwic2hvdyBjaGFydFwiIGJ1dHRvblxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfVxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYnVpbGQgYW5kIGRpc3BsYXkgdGhlIGNoYXJ0IG9uIHBhZ2VcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqIEBwYXJhbSBwb3J0cyBhbGwgYXZhaWxhYmxlIHBvcnRzXHJcbiAgICogQHBhcmFtIHN3aXRjaEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSBzd2l0Y2hpbmcgcG9ydHMgKG5vIGluaXQgcG9ydCBzZWxlY3RvciBuZWVkZWQpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYnVpbGRDaGFydChwb3J0OiBzdHJpbmcsIHBvcnRzOiBzdHJpbmdbXSwgc3dpdGNoRmxhZyA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAocG9ydCkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xvYWRTZXR0aW5nc0ZvclNlbGVjdGlvbnNUYWJsZShwb3J0KSlcclxuICAgICAgICAudGhlbiggKCkgPT4ge1xyXG4gICAgICAgICAgLy8gZ2V0IHRoZSBjb25maWdcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJ0U2VydmljZS5idWlsZENoYXJ0KFxyXG4gICAgICAgICAgICB0aGlzLnRpbWVbcG9ydF0sXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVtwb3J0XSxcclxuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UuZ2V0WVNjYWxlKHRoaXMuX2hlYWRlcktleSwgcG9ydCksXHJcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlclRleHQsXHJcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlcktleSxcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICB0aGlzLnRhYmxlU291cmNlLFxyXG4gICAgICAgICAgICB0aGlzLl9nZXRIb3N0VGl0bGUocG9ydCksXHJcbiAgICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLmdldERpc3BsYXlJdGVtcyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpLFxyXG4gICAgICAgICAgICB0aGlzLl9vblpvb20uYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAgICAgICAvLyBhZnRlciBjaGFydCBoYXMgYmVlbiBjcmVhdGVkLCBzaG93IHRoZSBjaGFydCBhcmVhLCBoaWRlIHByb2dyZXNzIGJhciBhbmQgZW5hYmxlIHRoZSBcInNob3cgY2hhcnRcIiBidXR0b25cclxuICAgICAgICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiB0cnVlfSxcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfVxyXG4gICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIC8vIHNldCBwb3J0IHRvIGN1cnJlbnQgZGlzcGxheWluZyBwb3J0XHJcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXJ0UG9ydCA9IHBvcnQ7XHJcbiAgICAgICAgICAgICAgcHJpbnRQcm9jZXNzZWRUaW1lKGJlZ2luVGltZSwgJ3N0ZXBfYnVpbGRfY2hhcnQnKTtcclxuICAgICAgICAgICAgICBpZiAocG9ydHMgJiYgcG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgcG9ydCBzZWxlY3Rvci4gRG8gbm90IG5lZWQgdG8gZG8gaXQgd2hlbiBzd2l0Y2hpbmcgcG9ydC5cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMsIHBvcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKFxyXG4gICAgICAgICAgQWxlcnQud2FybmluZyxcclxuICAgICAgICAgICdUaGUgc2VsZWN0ZWQgcG9ydCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlLiBQbGVhc2UgY2hvb3NlIGEgY29ycmVjdCBwb3J0IGFuZCBoYXZlIGEgdHJ5IGFnYWluLicpO1xyXG4gICAgICAgIGlmICghc3dpdGNoRmxhZykge1xyXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwb3J0IHNlbGVjdG9yLiBEbyBub3QgbmVlZCB0byBkbyBpdCB3aGVuIHN3aXRjaGluZyBwb3J0LlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMsIHBvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgdGl0bGUgYXJlYSBvZiB0aGUgY2hhcnRcclxuICAgKiBlZzogaG9zdDEgLSAzMDA0MCAoMjAxOC0wOS0wNSAxNTozMjozMiB+IDIwMTgtMDktMDcgMTU6MzI6MTUpXHJcbiAgICogQHBhcmFtIHBvcnQgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEhvc3RUaXRsZShwb3J0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuaG9zdCkge1xyXG4gICAgICByZXR1cm4gIGAke3RoaXMuaG9zdH0gLSAke3BvcnR9ICggJHtnZXRUaW1lUmFuZ2VTdHJpbmcodGhpcy50aW1lW3BvcnRdKX0gKWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBhZnRlciB6b29tLCBlbmFibGUgdGhlIHJlc2V0IGJ1dHRvbi5cclxuICAgKi9cclxuICBwcml2YXRlIF9vblpvb20oKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpbml0aWFsaXplIGNoYXJ0LCBpbmNsdWRpbmc6IGRlc3Ryb3kgY3VycmVudCBjaGFydCwgaW5pdGlhbGl6ZSBjb25maWcsIGluaXRpYWxpemUgYWxsIHJlbGF0aXZlIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIF9pbml0Q2hhcnRFbnYoc3dpdGNoRmxhZzogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0U2VydmljZS5kZXN0cm95Q2hhcnQoKS50aGVuKCgpID0+IHtcclxuICAgICAge1xyXG4gICAgICAgIC8vIGNsZWFudXAgb3RoZXIgZGF0YVxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnRpbWUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50aW1lW2tleV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgdGhpcy50aW1lID0ge307XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2tleV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgdGhpcy5kYXRhID0ge307XHJcbiAgICAgICAgICB0aGlzLmhlYWRlci5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgdGhpcy5ob3N0ID0gJ25hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlJztcclxuICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UgPSB2b2lkIDA7XHJcbiAgICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLnVpU2VydmljZS5jbGVhckxvYWRIaXN0b3J5SW5mb3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBzZXR0aW5ncyBmb3IgdGhlIHNlbGVjdGlvbiB0YWJsZSAodGhlIHJpZ2h0IHBhcnQgb2YgdGhlIGNoYXJ0KVxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbG9hZFNldHRpbmdzRm9yU2VsZWN0aW9uc1RhYmxlKHBvcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZSA9IHRoaXMudWlTZXJ2aWNlLmdldFNlbGVjdGlvblRhYmxlUm93cyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpO1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIFtdKTtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICBpZiAodGhpcy51aVNlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcykuaW5jbHVkZXMocm93LktQSSkpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBtZXNzYWdlc1xyXG4gICAqIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhlIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0gbWVzc2FnZSBtZXNzYWdlIHRleHRcclxuICAgKi9cclxuICBwcml2YXRlIF9zaG93TWVzc2FnZSh0eXBlOiBBbGVydCwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZSkge1xyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIEFsZXJ0LnN1Y2Nlc3M6XHJcbiAgICAgICAgY2FzZSBBbGVydC5pbmZvOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBBbGVydC53YXJuaW5nOlxyXG4gICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBBbGVydC5lcnJvcjpcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFsZXJ0TWVzc2FnZSA9PT0gbWVzc2FnZSkge1xyXG4gICAgICAvLyB0cnkgdHJpZ2dlciB0aGUgY2hhbmdlIGV2ZW50IG9mIHRoZSBhbGVydC5cclxuICAgICAgdGhpcy5hbGVydE1lc3NhZ2UgPSB2b2lkIDA7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydE1lc3NhZ2UgPSBtZXNzYWdlLCAxMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbGVydFR5cGUgPSB0eXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdG9nZ2xlIGl0ZW1zIHdpdGggdGhlIHByb3ZpZGVkIHN0YXR1cyAoc2hvdyBvciBoaWRlIHRoZSByZWxhdGl2ZSBlbGVtZW50IG9uIHRoZSBwYWdlKVxyXG4gICAqIEBwYXJhbSBpdGVtcyBpdGVtcyB3aXRoIHRoZSByZWxhdGl2ZSBpZCBhbmQgc3RhdHVzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RvZ2dsZUl0ZW1zKGl0ZW1zOiB7aWQ6IEh0bWxFbGVtZW50LCBzdGF0dXM6IGJvb2xlYW59W10pIHtcclxuICAgIGNvbnN0IGdldFZhcmlhYmxlTmFtZUJ5VHlwZUlkID0gKGlkOiBIdG1sRWxlbWVudCkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5jaGFydEFyZWE6IHJldHVybiAnc2hvd0NoYXJ0RmxhZyc7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzOiByZXR1cm4gJ3Nob3dSZWFkRmlsZVByb2dyZXNzJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbjogcmV0dXJuICdlbmFibGVTaG93Q2hhcnRCdXR0b24nO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQubG9hZFBvcnRzQnV0dG9uOiByZXR1cm4gJ2VuYWJsZUxvYWRQb3J0c0J1dHRvbic7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uOiByZXR1cm4gJ2VuYWJsZVJlc2V0Q2hhcnRCdXR0b24nO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKGl0ZW1zKSB7XHJcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgdGhpc1tnZXRWYXJpYWJsZU5hbWVCeVR5cGVJZChpdGVtLmlkKV0gPSBpdGVtLnN0YXR1cztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI25hbWVzZXJ2ZXJIaXN0b3J5QWxsIGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWFsbFwiICh3aW5kb3c6cmVzaXplKT1cIm9uUmVzaXplKClcIj5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhci1jaGFydFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZC1ib3gtY29udGVudFwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dSZWFkRmlsZVByb2dyZXNzXCI+XHJcbiAgICAgICAgPGZpbGUtZHJvcC1pbnB1dCAoZmlsZURyb3ApPVwiZmlsZURyb3BwZWQoJGV2ZW50KVwiIChmaWxlSW5wdXQpPVwiZmlsZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3BBcmVhVGV4dF09IFwiYWJicmV2aWF0ZWRGaWxlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRBcmVhVGV4dF09XCInQnJvd3NlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZmlsZT8ubmFtZT8gZmlsZS5uYW1lOidTZWxlY3QgYSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUgZnJvbSB5b3VyIGxvY2FsIGRpc2suJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmaWxlQnVmZmVyXCI+XHJcbiAgICAgICAgPC9maWxlLWRyb3AtaW5wdXQ+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJmaWxlQnVmZmVyXCIgY2xhc3M9XCJib3gtc3RyZWFtLW1vZGUtdGV4dFwiPnt7c3RyZWFtTW9kZUZpbGVOYW1lIHx8ICduYW1lc2VydmVyX2hpc3RvcnkudHJjIChzdHJlYW0gbW9kZSknfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj5cclxuICAgICAgICA8cHJvZ3Jlc3MtYmFyIFtwcm9ncmVzc109XCJyZWFkUHJvZ3Jlc3NcIj48L3Byb2dyZXNzLWJhcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10aW1lXCI+XHJcbiAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRpbWUtcmFuZ2VcIj5cclxuICAgICAgIDx0aW1lLXJhbmdlLXNlbGVjdG9yIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiIFsoZGF0ZVRpbWVSYW5nZSldPVwiZGF0ZVRpbWVSYW5nZVwiPjwvdGltZS1yYW5nZS1zZWxlY3Rvcj5cclxuICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRpbWV6b25lLXNlbGVjdG9yXCI+XHJcbiAgICAgICAgPHRpbWV6b25lLXNlbGVjdG9yIFsodGltZXpvbmUpXT1cInRpbWV6b25lXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCI+PC90aW1lem9uZS1zZWxlY3Rvcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicG9ydC1zZWxlY3Rpb25cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBvcnQtc2VsZWN0b3JcIj5cclxuICAgICAgICA8cG9ydC1zZWxlY3RvciAocG9ydENoYW5nZSk9XCJzd2l0Y2hQb3J0Rm9yQ2hhcnQoJGV2ZW50KVwiIFsocG9ydCldPVwicG9ydFwiIFtwb3J0c109XCJwb3J0c1wiIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiPjwvcG9ydC1zZWxlY3Rvcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwb3J0LWxvYWQtYnV0dG9uXCI+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZFBvcnRzKClcIiB0aXRsZT1cIkxvYWQgYWxsIHBvcnRzIGZyb20gbmFtZSBzZXJ2ZXIgaGlzdG9yeSB0cmFjZSBmaWxlLlwiIFtkaXNhYmxlZF09XCIhZW5hYmxlU2hvd0NoYXJ0QnV0dG9uIHx8IHBvcnQgfHwgIWVuYWJsZUxvYWRQb3J0c0J1dHRvblwiPnt7c2hvd1JlYWRGaWxlUHJvZ3Jlc3M/IFwiTG9hZGluZy4uLlwiIDogXCJMb2FkXCJ9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjaGFydC1vcGVyYXRpb25cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzaG93Q2hhcnQoKVwiIHRpdGxlPVwiTG9hZCBhbmQgZGlzcGxheSBhbGwgZGF0YSBmcm9tIG5hbWUgc2VydmVyIGhpc3RvcnkgdHJhY2UgZmlsZS5cIiBbZGlzYWJsZWRdPVwiIWVuYWJsZVNob3dDaGFydEJ1dHRvblwiPnt7c2hvd1JlYWRGaWxlUHJvZ3Jlc3M/IFwiTG9hZGluZy4uLlwiIDogXCJTaG93XCJ9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzZXRDaGFydCgpXCIgdGl0bGU9XCJSZXNldCB6b29tIG9mIGNoYXJ0LlwiIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzcyB8fCAhZW5hYmxlUmVzZXRDaGFydEJ1dHRvblwiPlJlc2V0IENoYXJ0PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAjbmFtZXNlcnZlckhpc3RvcnlDb250ZW50IGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWNvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudC1jaGFydFwiPlxyXG4gICAgICA8aW5zdHJ1Y3Rpb24gWyhzaG93KV09XCJzaG93SW5zdHJ1Y3Rpb25cIiAqbmdJZj1cIiFzaG93Q2hhcnRGbGFnICYmIHNob3dJbnN0cnVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDFGaW5pc2hlZF09XCIhIWZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXAyRmluaXNoZWRdPVwiZGF0ZVRpbWVSYW5nZSAmJiAoISFkYXRlVGltZVJhbmdlWzBdIHx8ICEhZGF0ZVRpbWVSYW5nZVsxXSkgfHwgdGltZXpvbmUgIT0gZGVmYXVsdFRpbWV6b25lXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwM0ZpbmlzaGVkXT1cIiEhcG9ydFwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDRGaW5pc2hlZF09XCJzdGVwU2hvd0NoYXJ0ICYmICFlbmFibGVTaG93Q2hhcnRCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXA1RmluaXNoZWRdPVwiZmFsc2VcIj5cclxuICAgICAgPC9pbnN0cnVjdGlvbj5cclxuICAgICAgPGNhbnZhcyBpZD1cImNoYXJ0TmFtZVNlcnZlckhpc3RvcnlcIiA+PC9jYW52YXM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudC1jb250cm9sbGVyXCIgPlxyXG4gICAgICA8bmd4LXNlbGVjdGlvbi10YWJsZSAoY2hhbmdlKT1cInNlbGVjdEl0ZW0oJGV2ZW50KVwiICpuZ0lmPVwic2hvd0NoYXJ0RmxhZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2JveF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlU291cmNlXT1cInRhYmxlU291cmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tleUNvbHVtbl09XCJrcGlDb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuQ29sdW1uc109XCJoaWRkZW5Db2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBDb2x1bW5dPVwiZGVzY0NvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hTdHlsZV09XCJzZWFyY2hUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaENvbHVtbl09XCJrcGlDb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlTZWxlY3Rpb25dPVwidHJ1ZVwiPlxyXG4gICAgICA8L25neC1zZWxlY3Rpb24tdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJtZXNzYWdlLWNvbnRhaW5lclwiICpuZ0lmPVwiYWxlcnRNZXNzYWdlXCI+XHJcbiAgPGFsZXJ0IFsoYWxlcnRNZXNzYWdlKV09XCJhbGVydE1lc3NhZ2VcIiBbYWxlcnRUeXBlXT1cImFsZXJ0VHlwZVwiIFthbGVydFRpbWVvdXRdPVwiMzAwMDBcIj48L2FsZXJ0PlxyXG48L2Rpdj5cclxuIl19
@@ -151,4 +151,11 @@ export function blobToFile(theBlob, fileName) {
151
151
  // Cast to a File() type
152
152
  return theBlob;
153
153
  }
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXIvdXRpbHMvZmlsZS11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVoRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFFaEM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFFBQWdCO0lBQ3JELE9BQU8sUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBWTtJQUNsQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBZSxFQUFFLGlCQUEwQixLQUFLO0lBQzNFLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUNqQixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBQ0QsSUFBSSxjQUFjLEVBQUU7UUFDbEIsT0FBTyxLQUFLLENBQUM7S0FDZDtTQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMs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QUM7SUFFckIsd0JBQXdCO0lBQ3hCLE9BQWEsT0FBTyxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldFRpbWVGcm9tVGltZVpvbmV9IGZyb20gJy4vdGltZS11dGlsJztcclxuXHJcbmNvbnN0IF9ERUZBVUxUX1BPUlQgPSAnREVGQVVMVCc7XHJcblxyXG4vKipcclxuICogZ2V0IHRoZSBkZWZhdWx0IHBvcnQgc3RyaW5nIChmb3Igbm9uLU1EQyBzeXN0ZW0pXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFBvcnQoKTogc3RyaW5nIHtcclxuICByZXR1cm4gX0RFRkFVTFRfUE9SVDtcclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCBhYmJyZXZpYXRlZCBmaWxlIG5hbWVcclxuICogQHBhcmFtIGZpbGVOYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gZmlsZU5hbWUgPT0gbnVsbCB8fCBmaWxlTmFtZS5sZW5ndGggPD0gMjIgPyBmaWxlTmFtZSA6IGAke2ZpbGVOYW1lLnNsaWNlKDAsIDExKX0uLi4ke2ZpbGVOYW1lLnNsaWNlKC0xMSl9YDtcclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCBwb3J0IGlmIGVtcHR5IHJldHVybiBkZWZhdWx0IHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3J0KHBvcnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIHBvcnQgPT0gbnVsbCB8fCBwb3J0Lmxlbmd0aCA9PT0gMCA/IF9ERUZBVUxUX1BPUlQgOiBwb3J0O1xyXG59XHJcblxyXG4vKipcclxuICogZ2V0IGFsbCByZWFsIHBvcnRzIGV4Y2VwdCB0aGUgZGVmYXVsdCBwb3J0IFwiZGVmYXVsdFwiXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVhbFBvcnRzKHBvcnRzOiBzdHJpbmdbXSwgaW5jbHVkZURlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZ1tdIHtcclxuICBpZiAocG9ydHMgPT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuICBpZiAoaW5jbHVkZURlZmF1bHQpIHtcclxuICAgIHJldHVybiBwb3J0cztcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHBvcnRzLmZpbHRlcihwb3J0ID0+IHBvcnQgIT09IF9ERUZBVUxUX1BPUlQpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCBmaWxlIGZyb20gPGlucHV0PlxyXG4gKiBAcGFyYW0gaW5wdXRUYXJnZXRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiAgZ2V0RmlsZUZyb21JbnB1dChpbnB1dFRhcmdldDogYW55KTogRmlsZSB7XHJcbiAgaWYgKGlucHV0VGFyZ2V0ICYmIGlucHV0VGFyZ2V0LmZpbGVzICYmIGlucHV0VGFyZ2V0LmZpbGVzLmxlbmd0aCA+PSAwKSB7XHJcbiAgICByZXR1cm4gaW5wdXRUYXJnZXQuZmlsZXNbMF07XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZ2V0IGZpbGUgZnJvbSBkcmFnIGFuZCBkcm9wXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUZyb21Ecm9wKGRyYWdFdmVudDogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgaWYgKGRyYWdFdmVudC5lcnJvcikge1xyXG4gICAgICByZWplY3QoZHJhZ0V2ZW50LmVycm9yKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChkcmFnRXZlbnQuZmlsZSkge1xyXG4gICAgICAgIHJlc29sdmUoZHJhZ0V2ZW50LmZpbGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwb3J0IGZyb20gZmlsZSBpcyB0aGUgc2FtZSB3aXRoIHRoZSBzZWxlY3RlZCBwb3J0LlxyXG4gKiBJZiB0aGUgc2VsZWN0ZWQgcG9ydCBpcyBlbXB0eSwgcmV0dXJuIHRydWUgZGlyZWN0bHkuIFRoaXMgbWFrZXMgYWxsIHBvcnRzIHdpbGwgYmUgc2VsZWN0ZWQuXHJcbiAqIEBwYXJhbSBwb3J0RnJvbUZpbGUgUG9ydCByZWFkIGZyb20gZmlsZVxyXG4gKiBAcGFyYW0gcG9ydEZyb21TZWxlY3Rpb24gUG9ydCBmcm9tIHNlbGVjdGlvbi5cclxuICogQHBhcmFtIGlzTURDIE1EQyBmbGFnXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lUG9ydChwb3J0RnJvbUZpbGU6IHN0cmluZywgcG9ydEZyb21TZWxlY3Rpb246IHN0cmluZywgaXNNREM6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAvLyBpZiBpdCdzIE1EQyBzeXN0ZW0sIGFuZCB0aGUgcG9ydCBGcm9tIEZpbGUgaXMgZGVmYXVsdCBwb3J0LCByZXR1cm4gZmFsc2VcclxuICBpZiAoaXNNREMgJiYgcG9ydEZyb21GaWxlID09PSBfREVGQVVMVF9QT1JUKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vIGlmIHNlbGVjdGVkIHBvcnQgaXMgZW1wdHksIHJldHVybiB0cnVlIGRpcmVjdGx5LiBUaGlzIG1ha2VzIGFsbCBwb3J0cyBiZWluZyBzZWxlY3RlZFxyXG4gIGlmIChwb3J0RnJvbVNlbGVjdGlvbiA9PSBudWxsIHx8IHBvcnRGcm9tU2VsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcG9ydEZyb21GaWxlID09PSBwb3J0RnJvbVNlbGVjdGlvbiB8fCBwb3J0RnJvbUZpbGUuc2xpY2UoLTIpID09PSBwb3J0RnJvbVNlbGVjdGlvbi5zbGljZSgtMik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBcyBqYXZhc2NyaXB0IGNhbid0IGdldCB0aGUgZnVsbCBwYXRoIG9mIGZpbGUsIGlmIHRoZXNlIHR3byBmaWxlcyBoYXZlIHNhbWVcclxuICogMS4gbGFzdE1vZGlmaWVkLCAyLiBuYW1lLCAzLiBzaXplLCB0aGVzZSB0d28gZmlsZXMgYXJlIGNvbnNpZGVyZWQgYXMgdGhlIHNhbWUgZmlsZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZUZpbGUoZmlsZTE6IEZpbGUsIGZpbGUyOiBGaWxlKTogYm9vbGVhbiB7XHJcbiAgaWYgKGZpbGUxICYmIGZpbGUyKSB7XHJcbiAgICBpZiAoZmlsZTEubGFzdE1vZGlmaWVkID09PSBmaWxlMi5sYXN0TW9kaWZpZWQgJiYgZmlsZTEubmFtZSA9PT0gZmlsZTIubmFtZSAmJiBmaWxlMS5zaXplID09PSBmaWxlMi5zaXplKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm92aWRlZCBwb3J0IGlzIGEgdmFsaWQgcG9ydCAoM3h4eHgpXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFBvcnQocG9ydDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHBvcnQgJiYgcG9ydC5sZW5ndGggPT09IDUgJiYgcG9ydFswXSA9PT0gJzMnO1xyXG59XHJcblxyXG4vKipcclxuICogZ2V0IG5leHQgdmFsdWUgZnJvbSBjdXJyZW50IHZhbHVlIGJhc2Ugb24gdGhlIG9wZXJhdG9yIFwiPFwiIG9yIFwiPlwiLlxyXG4gKiBLZWVwIHVzaW5nIGN1cnJlbnQgdmFsdWUgdW50aWwgdGhlIFwibmV4dFZhbHVlXCIgaXMgbm90IGVtcHR5LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVZhbHVlKGxhc3RWYWx1ZTogbnVtYmVyLCBuZXh0VmFsdWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHZhbHVlIG1pc3NlZCwgaXQncyBudWxsLlxyXG4gIC8vIEFuZCBpZiBpdCdzIG1pc3NlZCwganVzdCB1c2UgY3VycmVudCB2YWx1ZSBmcm9tIGxhc3QgbGluZS5cclxuICBsZXQgbmV3VmFsdWUgPSBsYXN0VmFsdWU7XHJcbiAgaWYgKG5leHRWYWx1ZSAhPSBudWxsICYmIG5leHRWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICBpZiAobmV4dFZhbHVlWzBdID09PSAnPCcpIHtcclxuICAgICAgbmV3VmFsdWUgPSBsYXN0VmFsdWUgLSBwYXJzZUZsb2F0KG5leHRWYWx1ZS5zbGljZSgxKSk7XHJcbiAgICB9IGVsc2UgaWYgKG5leHRWYWx1ZVswXSA9PT0gJz4nKSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gbGFzdFZhbHVlICsgcGFyc2VGbG9hdChuZXh0VmFsdWUuc2xpY2UoMSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3VmFsdWUgPSBwYXJzZUZsb2F0KG5leHRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBuZXdWYWx1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCBuZXh0IHRpbWUgdmFsdWUgZnJvbSBjdXJyZW50IHRpbWUgYmFzZSBvbiB0aGUgb3BlcmF0b3IgXCI8XCIgb3IgXCI+XCIuXHJcbiAqIElmIG5leHRWYWx1ZSBpcyBub3QgXCI8XCIgb3IgXCI+XCIsIHJldHVybnMgY29udmVydGVkIHRpbWUgYmFzZSBvbiB0aGUgdGltZXpvbmVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVWYWx1ZTRUaW1lKGxhc3RWYWx1ZTogbnVtYmVyLCBuZXh0VmFsdWU6IHN0cmluZywgdGltZXpvbmU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHZhbHVlIG1pc3NlZCwgaXQncyBudWxsLlxyXG4gIC8vIEFuZCBpZiBpdCdzIG1pc3NlZCwganVzdCB1c2UgY3VycmVudCB2YWx1ZSBmcm9tIGxhc3QgbGluZS5cclxuICBsZXQgbmV3VmFsdWUgPSBsYXN0VmFsdWU7XHJcbiAgaWYgKG5leHRWYWx1ZSAhPSBudWxsICYmIG5leHRWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICBpZiAobmV4dFZhbHVlWzBdICE9PSAnPCcgJiYgbmV4dFZhbHVlWzBdICE9PSAnPicpIHtcclxuICAgICAgbmV3VmFsdWUgPSBnZXRUaW1lRnJvbVRpbWVab25lKHBhcnNlRmxvYXQobmV4dFZhbHVlKSwgdGltZXpvbmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3VmFsdWUgPSBjYWxjdWxhdGVWYWx1ZShsYXN0VmFsdWUsIG5leHRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBuZXdWYWx1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIGNoZWNrIHdoZXRoZXIgdGhlIGRhdGEgY29tZXMgZnJvbSB2YWxpZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRGF0YShkYXRhOiBzdHJpbmdbXVtdKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIGRhdGEgPT0gbnVsbCA/IGZhbHNlIDogZGF0YS5sZW5ndGggPj0gNCAmJiBbJ2hvc3QnLCAndGltZSddLmV2ZXJ5KGkgPT4gZGF0YVswXS5pbmNsdWRlcyhpKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjb252ZXJ0IGJsb2IgdG8gZmlsZVxyXG4gKiBAcGFyYW0gdGhlQmxvYlxyXG4gKiBAcGFyYW0gZmlsZU5hbWVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBibG9iVG9GaWxlICh0aGVCbG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKTogRmlsZSB7XHJcbiAgY29uc3QgYmxvYjogYW55ID0gdGhlQmxvYjtcclxuICAvLyBBIEJsb2IoKSBpcyBhbG1vc3QgYSBGaWxlKCkgLSBpdCdzIGp1c3QgbWlzc2luZyB0aGUgdHdvIHByb3BlcnRpZXMgYmVsb3cgd2hpY2ggd2Ugd2lsbCBhZGRcclxuICBibG9iLmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIGJsb2IubmFtZSA9IGZpbGVOYW1lO1xyXG5cclxuICAvLyBDYXN0IHRvIGEgRmlsZSgpIHR5cGVcclxuICByZXR1cm4gPEZpbGU+dGhlQmxvYjtcclxufVxyXG4iXX0=
154
+ /**
155
+ * check the object is a File object or not a File(Blob)
156
+ * @param obj
157
+ */
158
+ export function isFile(obj) {
159
+ return obj && typeof obj.name === 'string';
160
+ }
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL25hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXIvdXRpbHMvZmlsZS11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVoRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFFaEM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFFBQWdCO0lBQ3JELE9BQU8sUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBWTtJQUNsQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBZSxFQUFFLGlCQUEwQixLQUFLO0lBQzNFLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtRQUNqQixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBQ0QsSUFBSSxjQUFjLEVBQUU7UUFDbEIsT0FBTyxLQUFLLENBQUM7S0FDZDtTQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMs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QUM7SUFFckIsd0JBQXdCO0lBQ3hCLE9BQWEsT0FBTyxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQUc7SUFDeEIsT0FBTyxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZXRUaW1lRnJvbVRpbWVab25lfSBmcm9tICcuL3RpbWUtdXRpbCc7XHJcblxyXG5jb25zdCBfREVGQVVMVF9QT1JUID0gJ0RFRkFVTFQnO1xyXG5cclxuLyoqXHJcbiAqIGdldCB0aGUgZGVmYXVsdCBwb3J0IHN0cmluZyAoZm9yIG5vbi1NREMgc3lzdGVtKVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRQb3J0KCk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIF9ERUZBVUxUX1BPUlQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBnZXQgYWJicmV2aWF0ZWQgZmlsZSBuYW1lXHJcbiAqIEBwYXJhbSBmaWxlTmFtZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEFiYnJldmlhdGVkRmlsZU5hbWUoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGZpbGVOYW1lID09IG51bGwgfHwgZmlsZU5hbWUubGVuZ3RoIDw9IDIyID8gZmlsZU5hbWUgOiBgJHtmaWxlTmFtZS5zbGljZSgwLCAxMSl9Li4uJHtmaWxlTmFtZS5zbGljZSgtMTEpfWA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBnZXQgcG9ydCBpZiBlbXB0eSByZXR1cm4gZGVmYXVsdCBwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9ydChwb3J0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBwb3J0ID09IG51bGwgfHwgcG9ydC5sZW5ndGggPT09IDAgPyBfREVGQVVMVF9QT1JUIDogcG9ydDtcclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCBhbGwgcmVhbCBwb3J0cyBleGNlcHQgdGhlIGRlZmF1bHQgcG9ydCBcImRlZmF1bHRcIlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWxQb3J0cyhwb3J0czogc3RyaW5nW10sIGluY2x1ZGVEZWZhdWx0OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmdbXSB7XHJcbiAgaWYgKHBvcnRzID09IG51bGwpIHtcclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcbiAgaWYgKGluY2x1ZGVEZWZhdWx0KSB7XHJcbiAgICByZXR1cm4gcG9ydHM7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBwb3J0cy5maWx0ZXIocG9ydCA9PiBwb3J0ICE9PSBfREVGQVVMVF9QT1JUKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBnZXQgZmlsZSBmcm9tIDxpbnB1dD5cclxuICogQHBhcmFtIGlucHV0VGFyZ2V0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gIGdldEZpbGVGcm9tSW5wdXQoaW5wdXRUYXJnZXQ6IGFueSk6IEZpbGUge1xyXG4gIGlmIChpbnB1dFRhcmdldCAmJiBpbnB1dFRhcmdldC5maWxlcyAmJiBpbnB1dFRhcmdldC5maWxlcy5sZW5ndGggPj0gMCkge1xyXG4gICAgcmV0dXJuIGlucHV0VGFyZ2V0LmZpbGVzWzBdO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCBmaWxlIGZyb20gZHJhZyBhbmQgZHJvcFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVGcm9tRHJvcChkcmFnRXZlbnQ6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGlmIChkcmFnRXZlbnQuZXJyb3IpIHtcclxuICAgICAgcmVqZWN0KGRyYWdFdmVudC5lcnJvcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZHJhZ0V2ZW50LmZpbGUpIHtcclxuICAgICAgICByZXNvbHZlKGRyYWdFdmVudC5maWxlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgd2hldGhlciB0aGUgcG9ydCBmcm9tIGZpbGUgaXMgdGhlIHNhbWUgd2l0aCB0aGUgc2VsZWN0ZWQgcG9ydC5cclxuICogSWYgdGhlIHNlbGVjdGVkIHBvcnQgaXMgZW1wdHksIHJldHVybiB0cnVlIGRpcmVjdGx5LiBUaGlzIG1ha2VzIGFsbCBwb3J0cyB3aWxsIGJlIHNlbGVjdGVkLlxyXG4gKiBAcGFyYW0gcG9ydEZyb21GaWxlIFBvcnQgcmVhZCBmcm9tIGZpbGVcclxuICogQHBhcmFtIHBvcnRGcm9tU2VsZWN0aW9uIFBvcnQgZnJvbSBzZWxlY3Rpb24uXHJcbiAqIEBwYXJhbSBpc01EQyBNREMgZmxhZ1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZVBvcnQocG9ydEZyb21GaWxlOiBzdHJpbmcsIHBvcnRGcm9tU2VsZWN0aW9uOiBzdHJpbmcsIGlzTURDOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgLy8gaWYgaXQncyBNREMgc3lzdGVtLCBhbmQgdGhlIHBvcnQgRnJvbSBGaWxlIGlzIGRlZmF1bHQgcG9ydCwgcmV0dXJuIGZhbHNlXHJcbiAgaWYgKGlzTURDICYmIHBvcnRGcm9tRmlsZSA9PT0gX0RFRkFVTFRfUE9SVCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvLyBpZiBzZWxlY3RlZCBwb3J0IGlzIGVtcHR5LCByZXR1cm4gdHJ1ZSBkaXJlY3RseS4gVGhpcyBtYWtlcyBhbGwgcG9ydHMgYmVpbmcgc2VsZWN0ZWRcclxuICBpZiAocG9ydEZyb21TZWxlY3Rpb24gPT0gbnVsbCB8fCBwb3J0RnJvbVNlbGVjdGlvbi5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBvcnRGcm9tRmlsZSA9PT0gcG9ydEZyb21TZWxlY3Rpb24gfHwgcG9ydEZyb21GaWxlLnNsaWNlKC0yKSA9PT0gcG9ydEZyb21TZWxlY3Rpb24uc2xpY2UoLTIpO1xyXG59XHJcblxyXG4vKipcclxuICogQXMgamF2YXNjcmlwdCBjYW4ndCBnZXQgdGhlIGZ1bGwgcGF0aCBvZiBmaWxlLCBpZiB0aGVzZSB0d28gZmlsZXMgaGF2ZSBzYW1lXHJcbiAqIDEuIGxhc3RNb2RpZmllZCwgMi4gbmFtZSwgMy4gc2l6ZSwgdGhlc2UgdHdvIGZpbGVzIGFyZSBjb25zaWRlcmVkIGFzIHRoZSBzYW1lIGZpbGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVGaWxlKGZpbGUxOiBGaWxlLCBmaWxlMjogRmlsZSk6IGJvb2xlYW4ge1xyXG4gIGlmIChmaWxlMSAmJiBmaWxlMikge1xyXG4gICAgaWYgKGZpbGUxLmxhc3RNb2RpZmllZCA9PT0gZmlsZTIubGFzdE1vZGlmaWVkICYmIGZpbGUxLm5hbWUgPT09IGZpbGUyLm5hbWUgJiYgZmlsZTEuc2l6ZSA9PT0gZmlsZTIuc2l6ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvdmlkZWQgcG9ydCBpcyBhIHZhbGlkIHBvcnQgKDN4eHh4KVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQb3J0KHBvcnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBwb3J0ICYmIHBvcnQubGVuZ3RoID09PSA1ICYmIHBvcnRbMF0gPT09ICczJztcclxufVxyXG5cclxuLyoqXHJcbiAqIGdldCBuZXh0IHZhbHVlIGZyb20gY3VycmVudCB2YWx1ZSBiYXNlIG9uIHRoZSBvcGVyYXRvciBcIjxcIiBvciBcIj5cIi5cclxuICogS2VlcCB1c2luZyBjdXJyZW50IHZhbHVlIHVudGlsIHRoZSBcIm5leHRWYWx1ZVwiIGlzIG5vdCBlbXB0eS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVWYWx1ZShsYXN0VmFsdWU6IG51bWJlciwgbmV4dFZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB2YWx1ZSBtaXNzZWQsIGl0J3MgbnVsbC5cclxuICAvLyBBbmQgaWYgaXQncyBtaXNzZWQsIGp1c3QgdXNlIGN1cnJlbnQgdmFsdWUgZnJvbSBsYXN0IGxpbmUuXHJcbiAgbGV0IG5ld1ZhbHVlID0gbGFzdFZhbHVlO1xyXG4gIGlmIChuZXh0VmFsdWUgIT0gbnVsbCAmJiBuZXh0VmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgaWYgKG5leHRWYWx1ZVswXSA9PT0gJzwnKSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gbGFzdFZhbHVlIC0gcGFyc2VGbG9hdChuZXh0VmFsdWUuc2xpY2UoMSkpO1xyXG4gICAgfSBlbHNlIGlmIChuZXh0VmFsdWVbMF0gPT09ICc+Jykge1xyXG4gICAgICBuZXdWYWx1ZSA9IGxhc3RWYWx1ZSArIHBhcnNlRmxvYXQobmV4dFZhbHVlLnNsaWNlKDEpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gcGFyc2VGbG9hdChuZXh0VmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbmV3VmFsdWU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBnZXQgbmV4dCB0aW1lIHZhbHVlIGZyb20gY3VycmVudCB0aW1lIGJhc2Ugb24gdGhlIG9wZXJhdG9yIFwiPFwiIG9yIFwiPlwiLlxyXG4gKiBJZiBuZXh0VmFsdWUgaXMgbm90IFwiPFwiIG9yIFwiPlwiLCByZXR1cm5zIGNvbnZlcnRlZCB0aW1lIGJhc2Ugb24gdGhlIHRpbWV6b25lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlVmFsdWU0VGltZShsYXN0VmFsdWU6IG51bWJlciwgbmV4dFZhbHVlOiBzdHJpbmcsIHRpbWV6b25lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB2YWx1ZSBtaXNzZWQsIGl0J3MgbnVsbC5cclxuICAvLyBBbmQgaWYgaXQncyBtaXNzZWQsIGp1c3QgdXNlIGN1cnJlbnQgdmFsdWUgZnJvbSBsYXN0IGxpbmUuXHJcbiAgbGV0IG5ld1ZhbHVlID0gbGFzdFZhbHVlO1xyXG4gIGlmIChuZXh0VmFsdWUgIT0gbnVsbCAmJiBuZXh0VmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgaWYgKG5leHRWYWx1ZVswXSAhPT0gJzwnICYmIG5leHRWYWx1ZVswXSAhPT0gJz4nKSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gZ2V0VGltZUZyb21UaW1lWm9uZShwYXJzZUZsb2F0KG5leHRWYWx1ZSksIHRpbWV6b25lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gY2FsY3VsYXRlVmFsdWUobGFzdFZhbHVlLCBuZXh0VmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbmV3VmFsdWU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjaGVjayB3aGV0aGVyIHRoZSBkYXRhIGNvbWVzIGZyb20gdmFsaWQgbmFtZXNlcnZlciBoaXN0b3J5IGZpbGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZURhdGEoZGF0YTogc3RyaW5nW11bXSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBkYXRhID09IG51bGwgPyBmYWxzZSA6IGRhdGEubGVuZ3RoID49IDQgJiYgWydob3N0JywgJ3RpbWUnXS5ldmVyeShpID0+IGRhdGFbMF0uaW5jbHVkZXMoaSkpO1xyXG59XHJcblxyXG4vKipcclxuICogY29udmVydCBibG9iIHRvIGZpbGVcclxuICogQHBhcmFtIHRoZUJsb2JcclxuICogQHBhcmFtIGZpbGVOYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYmxvYlRvRmlsZSAodGhlQmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZyk6IEZpbGUge1xyXG4gIGNvbnN0IGJsb2I6IGFueSA9IHRoZUJsb2I7XHJcbiAgLy8gQSBCbG9iKCkgaXMgYWxtb3N0IGEgRmlsZSgpIC0gaXQncyBqdXN0IG1pc3NpbmcgdGhlIHR3byBwcm9wZXJ0aWVzIGJlbG93IHdoaWNoIHdlIHdpbGwgYWRkXHJcbiAgYmxvYi5sYXN0TW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcclxuICBibG9iLm5hbWUgPSBmaWxlTmFtZTtcclxuXHJcbiAgLy8gQ2FzdCB0byBhIEZpbGUoKSB0eXBlXHJcbiAgcmV0dXJuIDxGaWxlPnRoZUJsb2I7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjaGVjayB0aGUgb2JqZWN0IGlzIGEgRmlsZSBvYmplY3Qgb3Igbm90IGEgRmlsZShCbG9iKVxyXG4gKiBAcGFyYW0gb2JqXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxlKG9iaik6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iai5uYW1lID09PSAnc3RyaW5nJztcclxufVxyXG4iXX0=
@@ -759,6 +759,13 @@ function blobToFile(theBlob, fileName) {
759
759
  blob.name = fileName;
760
760
  // Cast to a File() type
761
761
  return theBlob;
762
+ }
763
+ /**
764
+ * check the object is a File object or not a File(Blob)
765
+ * @param obj
766
+ */
767
+ function isFile(obj) {
768
+ return obj && typeof obj.name === 'string';
762
769
  }
763
770
 
764
771
  class TimezoneSelectorService {
@@ -3534,9 +3541,10 @@ class NameServerHistoryComponent {
3534
3541
  ngOnChanges(changes) {
3535
3542
  return __awaiter(this, void 0, void 0, function* () {
3536
3543
  const fbc = changes.fileBuffer;
3537
- if (fbc && fbc.currentValue && fbc.currentValue !== fbc.previousValue) {
3544
+ // !isFile(fbc.currentValue) --> only show chart when it's not a file -> it's a file, means the object has already been processed
3545
+ if (fbc && fbc.currentValue && fbc.currentValue !== fbc.previousValue && !isFile(fbc.currentValue)) {
3538
3546
  // simulate selecting file
3539
- const simulatedEvent = { target: { files: [blobToFile(this.fileBuffer, this.streamModeFileName)] } };
3547
+ const simulatedEvent = { target: { files: [blobToFile(fbc.currentValue, this.streamModeFileName)] } };
3540
3548
  yield this.fileSelected(simulatedEvent);
3541
3549
  this.port = undefined; // clear the port selection
3542
3550
  if (this.autoDisplay) {