ngx-aur-mat-table 17.2.2-19 → 17.2.2-20

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.
@@ -1,12 +1,16 @@
1
- import { finalize, first, map, of, switchMap, } from "rxjs";
1
+ import { finalize, first, tap, } from "rxjs";
2
2
  import { CanDropManager } from "./can-drop-manager";
3
3
  import { DragPreviewManager } from "./drag-preview-manager";
4
4
  import { DragDropMappingManager } from "./drag-drop-mapping-manager";
5
5
  /**
6
- * Класс AurDragDropManager управляет процессом drag-and-drop, включая начало, выполнение и завершение перетаскивания.
7
- * Он также управляет предварительным просмотром, проверкой возможности выполнения drop и обновлением данных после drop.
6
+ * Manages the drag-and-drop process, including start, drop, and end events.
7
+ * Handles drag previews, drop validation, and dataset updates after a successful drop.
8
8
  */
9
9
  export class AurDragDropManager {
10
+ /**
11
+ * Creates an empty instance of AurDragDropManager.
12
+ * @returns {AurDragDropManager} - An empty manager with no initialized references.
13
+ */
10
14
  static empty() {
11
15
  return new AurDragDropManager(undefined, [], []);
12
16
  }
@@ -18,48 +22,67 @@ export class AurDragDropManager {
18
22
  this.mappingManager = new DragDropMappingManager(mappings);
19
23
  }
20
24
  /**
21
- * Возвращает список всех возможных источников для перетаскивания
22
- * @returns Массив имен источников
25
+ * Returns the list of all available draggable source names.
26
+ * @returns {string[]} - Array of source names.
23
27
  */
24
28
  get draggableSourceNames() {
25
29
  return this.mappings?.map(mapping => mapping.sourceName) || [];
26
30
  }
27
31
  /**
28
- * Метод для начала перетаскивания, сохраняет начальный контекст, а также отображает Preview перетаскиваемого элемента
29
- * @param sourceName Имя источника, с которого начинается перетаскивание
30
- * @param draggedData Данные, которые перетаскиваются
31
- * @param event Событие перетаскивания
32
- * @throws Ошибка, если предыдущее перетаскивание еще не завершено
32
+ * Initiates a drag operation, saving the context and showing a drag preview.
33
+ * @param {string} sourceName - The name of the drag source.
34
+ * @param {unknown[]} draggedData - The data being dragged.
35
+ * @param {DragEvent} event - The drag event.
36
+ * @throws Error if a drag is already in progress.
33
37
  */
34
38
  startDrag(sourceName, draggedData, event) {
35
- // if (this.startDragEvent) {
36
- // throw new Error('Start new drag before complete current')
37
- // }
39
+ if (this.startDragEvent) {
40
+ throw new Error('Start new drag before complete current');
41
+ }
38
42
  this.startDragEvent = { sourceName, draggedData };
39
43
  this.previewManager.showPreview(sourceName, event, draggedData);
40
44
  }
41
45
  /**
42
- * Метод для обработки события preventDefault для разрешения / запрещения drop на элементе
43
- * @param targetName Имя цели, на которую происходит перетаскивание
44
- * @param $event Событие перетаскивания
46
+ * Validates whether a drop is allowed on the target element by calling preventDefault.
47
+ * @param {string} targetName - The name of the target element.
48
+ * @param {DragEvent} event - The drag event.
45
49
  */
46
- canDropPreventDefault(targetName, $event) {
47
- this.canDropManager.dropPreventDefault(this.startDragEvent?.sourceName, targetName, $event);
50
+ canDropPreventDefault(targetName, event) {
51
+ if (!this.startDragEvent) {
52
+ // перетаскивание не начато
53
+ return;
54
+ }
55
+ this.canDropManager.dropPreventDefault(this.startDragEvent.sourceName, targetName, event);
48
56
  }
49
57
  /**
50
- * Метод для выполнения drop на указанную цель
51
- * @param targetDataset Данные целевой таблицы
52
- * @param targetName Имя цели, на которую выполняется drop
53
- * @param targetData Данные цели в которые выполняется drop
54
- * @returns Observable с результатом drop операции
58
+ * Executes the drop operation on the specified target.
59
+ * @param {unknown[]} targetDataset - The dataset of the target element.
60
+ * @param {string} targetName - The name of the target element.
61
+ * @param {any} targetData - The data for the target element.
55
62
  */
56
63
  drop(targetDataset, targetName, targetData) {
57
64
  const mapping = this.getMapping(this.startDragEvent.sourceName, targetName);
58
65
  const dropContext = this.buildDropContext(targetName, targetData, targetDataset);
59
- console.log('RUN DROP_FN');
60
66
  const dropResult = mapping.dropFn(dropContext).pipe(first());
61
67
  this.dropEvent = { targetName, targetData, dropResult };
62
- return dropResult;
68
+ }
69
+ /**
70
+ * Ends the drag operation and updates the dataset if the drop was successful.
71
+ * @param {unknown[]} sourceDataset - The dataset of the source element.
72
+ */
73
+ endDrag(sourceDataset) {
74
+ this.previewManager.removePreview();
75
+ if (!this.dropEvent || !this.startDragEvent) {
76
+ return;
77
+ }
78
+ this.dropEvent.dropResult
79
+ .pipe(tap(() => {
80
+ const grabContext = this.buildGrabContext(sourceDataset);
81
+ this.calcDatasetAfterGrab(grabContext);
82
+ }), finalize(() => {
83
+ this.dropEvent = undefined;
84
+ this.startDragEvent = undefined;
85
+ })).subscribe();
63
86
  }
64
87
  buildDropContext(targetName, targetData, targetDataSet) {
65
88
  return {
@@ -70,26 +93,6 @@ export class AurDragDropManager {
70
93
  sourceData: this.startDragEvent.draggedData,
71
94
  };
72
95
  }
73
- endDrag(sourceDataset) {
74
- this.previewManager.removePreview();
75
- if (!this.dropEvent) {
76
- const dropResult = of({ isValid: false, updatedDataset: [] });
77
- this.dropEvent = { targetName: '---?unknow-target?----', targetData: null, dropResult };
78
- return dropResult;
79
- }
80
- return this.dropEvent.dropResult.pipe(switchMap(dropEvent => {
81
- if (dropEvent.isValid) {
82
- const grabContext = this.buildGrabContext(sourceDataset);
83
- return this.calcDatasetAfterGrab(grabContext).pipe(map(updatedDataset => ({ isValid: true, updatedDataset })));
84
- }
85
- else {
86
- return of({ isValid: false, updatedDataset: [] });
87
- }
88
- }), finalize(() => {
89
- this.dropEvent = undefined;
90
- this.startDragEvent = undefined;
91
- }));
92
- }
93
96
  buildGrabContext(sourceDataset) {
94
97
  return {
95
98
  targetName: this.dropEvent.targetName,
@@ -101,10 +104,10 @@ export class AurDragDropManager {
101
104
  }
102
105
  calcDatasetAfterGrab(grabCtx) {
103
106
  const mapping = this.getMapping(this.startDragEvent.sourceName, this.dropEvent.targetName);
104
- return mapping.grabFn(grabCtx).pipe(first());
107
+ mapping.grabFn(grabCtx);
105
108
  }
106
109
  getMapping(sourceName, targetName) {
107
110
  return this.mappingManager.get(sourceName, targetName);
108
111
  }
109
112
  }
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVyLWRyYWctZHJvcC5tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWF1ci1tYXQtdGFibGUvc3JjL2xpYi9kcmFnLWRyb3AvYXVyLWRyYWctZHJvcC5tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxHQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQXFCbkU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQTBCdEIsTUFBTSxDQUFDLEtBQUs7UUFDakIsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFNBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFlBQVksZ0JBQWtDLEVBQzFCLFFBQXdDLEVBQ3hDLGVBQThDO1FBRDlDLGFBQVEsR0FBUixRQUFRLENBQWdDO1FBQ3hDLG9CQUFlLEdBQWYsZUFBZSxDQUErQjtRQUNoRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFD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RSxFQUFFLEVBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxhQUF3QjtRQUMvQyxPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsVUFBVTtZQUN0QyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxVQUFVO1lBQ3RDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBZSxDQUFDLFVBQVU7WUFDM0MsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFlLENBQUMsV0FBVztZQUM1QyxhQUFhLEVBQUUsYUFBYTtTQUM3QixDQUFBO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE9BQThCO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3RixPQUFPLE9BQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLFVBQVUsQ0FBQyxVQUFrQixFQUFFLFVBQWtCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZmluYWxpemUsIGZpcnN0LCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge0NhbkRyb3BNYW5hZ2VyfSBmcm9tIFwiLi9jYW4tZHJvcC1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7Vmlld0NvbnRhaW5lclJlZn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtEcmFnUHJldmlld01hbmFnZXJ9IGZyb20gXCIuL2RyYWctcHJldmlldy1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7RHJhZ0Ryb3BNYXBwaW5nTWFuYWdlcn0gZnJvbSBcIi4vZHJhZy1kcm9wLW1hcHBpbmctbWFuYWdlclwiO1xyXG5pbXBvcnQge1xyXG4gIEF1ckRyYWdEcm9wTWFwcGluZyxcclxuICBBdXJEcmFnUHJldmlld01hcHBpbmdzLFxyXG4gIEF1ckRyb3BSZXN1bHQsXHJcbiAgRHJvcENvbnRleHQsXHJcbiAgR3JhYkNvbnRleHRcclxufSBmcm9tIFwiLi9tb2RlbC9hdXItZHJhZy1kcm9wLW1hcHBpbmdcIjtcclxuXHJcblxyXG5pbnRlcmZhY2UgU3RhcnREcmFnRXZlbnQge1xyXG4gIHNvdXJjZU5hbWU6IHN0cmluZyxcclxuICBkcmFnZ2VkRGF0YTogdW5rbm93bltdLFxyXG59XHJcblxyXG5pbnRlcmZhY2UgRHJvcEV2ZW50IHtcclxuICB0YXJnZXROYW1lOiBzdHJpbmcsXHJcbiAgdGFyZ2V0RGF0YTogdW5rbm93bixcclxuICBkcm9wUmVzdWx0OiBPYnNlcnZhYmxlPEF1ckRyb3BSZXN1bHQ8YW55Pj5cclxufVxyXG5cclxuLyoqXHJcbiAqINCa0LvQsNGB0YEgQXVyRHJhZ0Ryb3BNYW5hZ2VyINGD0L/RgNCw0LLQu9GP0LXRgiDQv9GA0L7RhtC10YHRgdC+0LwgZHJhZy1hbmQtZHJvcCwg0LLQutC70Y7Rh9Cw0Y8g0L3QsNGH0LDQu9C+LCDQstGL0L/QvtC70L3QtdC90LjQtSDQuCDQt9Cw0LLQtdGA0YjQtdC90LjQtSDQv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPLlxyXG4gKiDQntC9INGC0LDQutC20LUg0YPQv9GA0LDQstC70Y/QtdGCINC/0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQvCDQv9GA0L7RgdC80L7RgtGA0L7QvCwg0L/RgNC+0LLQtdGA0LrQvtC5INCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0LLRi9C/0L7Qu9C90LXQvdC40Y8gZHJvcCDQuCDQvtCx0L3QvtCy0LvQtdC90LjQtdC8INC00LDQvdC90YvRhSDQv9C+0YHQu9C1IGRyb3AuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQXVyRHJhZ0Ryb3BNYW5hZ2VyIHtcclxuICAvKipcclxuICAgKiDQnNC10L3QtdC00LbQtdGAINC00LvRjyDQv9GA0L7QstC10YDQutC4INCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0LLRi9C/0L7Qu9C90LXQvdC40Y8gZHJvcCDQvtC/0LXRgNCw0YbQuNC4XHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjYW5Ecm9wTWFuYWdlcjogQ2FuRHJvcE1hbmFnZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqINCc0LXQvdC10LTQttC10YAg0LTQu9GPINGD0L/RgNCw0LLQu9C10L3QuNGPINC/0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQvCDQv9GA0L7RgdC80L7RgtGA0L7QvCDQv9C10YDQtdGC0LDRgdC60LjQstCw0LXQvNC+0LPQviDRjdC70LXQvNC10L3RgtCwXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBwcmV2aWV3TWFuYWdlcjogRHJhZ1ByZXZpZXdNYW5hZ2VyO1xyXG5cclxuICAvKipcclxuICAgKiDQnNC10L3QtdC00LbQtdGAINC00LvRjyDRg9C/0YDQsNCy0LvQtdC90LjRjyDQvNCw0L/Qv9C40L3Qs9Cw0LzQuCDQvNC10LbQtNGDINC40YHRgtC+0YfQvdC40LrQvtC8INC4INGG0LXQu9GM0Y4g0L/QtdGA0LXRgtCw0YHQutC40LLQsNC90LjRj1xyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFwcGluZ01hbmFnZXI6IERyYWdEcm9wTWFwcGluZ01hbmFnZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqINCh0L7QsdGL0YLQuNC1INC90LDRh9Cw0LvQsCDQv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPLCDRgdC+0LTQtdGA0LbQuNGCINC40L3RhNC+0YDQvNCw0YbQuNGOINC+0LEg0LjRgdGC0L7Rh9C90LjQutC1INC4INC00LDQvdC90YvRhSwg0LrQvtGC0L7RgNGL0LUg0L/QtdGA0LXRgtCw0YHQutC40LLQsNGO0YLRgdGPXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGFydERyYWdFdmVudD86IFN0YXJ0RHJhZ0V2ZW50O1xyXG5cclxuICAvKipcclxuICAgKiDQodC+0LHRi9GC0LjQtSBkcm9wLCB1bmRlZmluZWQg0LXRgdC70LggZHJvcCDQsdGL0Lsg0L3QsCDQvdC10YDQsNC30YDQtdGI0LXQvdC90L7QvCDRjdC70LXQvNC10L3RgtC1XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkcm9wRXZlbnQ/OiBEcm9wRXZlbnQ7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZW1wdHkoKTogQXVyRHJhZ0Ryb3BNYW5hZ2VyIHtcclxuICAgIHJldHVybiBuZXcgQXVyRHJhZ0Ryb3BNYW5hZ2VyKHVuZGVmaW5lZCEsIFtdLCBbXSk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcih2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgbWFwcGluZ3M6IEF1ckRyYWdEcm9wTWFwcGluZzxhbnksIGFueT5bXSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHByZXZpZXdNYXBwaW5nczogQXVyRHJhZ1ByZXZpZXdNYXBwaW5nczxhbnk+W10pIHtcclxuICAgIHRoaXMuY2FuRHJvcE1hbmFnZXIgPSBuZXcgQ2FuRHJvcE1hbmFnZXIobWFwcGluZ3MpO1xyXG4gICAgdGhpcy5wcmV2aWV3TWFuYWdlciA9IG5ldyBEcmFnUHJldmlld01hbmFnZXIodmlld0NvbnRhaW5lclJlZiwgdGhpcy5wcmV2aWV3TWFwcGluZ3MpO1xyXG4gICAgdGhpcy5tYXBwaW5nTWFuYWdlciA9IG5ldyBEcmFnRHJvcE1hcHBpbmdNYW5hZ2VyKG1hcHBpbmdzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L/QuNGB0L7QuiDQstGB0LXRhSDQstC+0LfQvNC+0LbQvdGL0YUg0LjRgdGC0L7Rh9C90LjQutC+0LIg0LTQu9GPINC/0LXRgNC10YLQsNGB0LrQuNCy0LDQvdC40Y9cclxuICAgKiBAcmV0dXJucyDQnNCw0YHRgdC40LIg0LjQvNC10L0g0LjRgdGC0L7Rh9C90LjQutC+0LJcclxuICAgKi9cclxuICBnZXQgZHJhZ2dhYmxlU291cmNlTmFtZXMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwcGluZ3M/Lm1hcChtYXBwaW5nID0+IG1hcHBpbmcuc291cmNlTmFtZSkgfHwgW107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDQnNC10YLQvtC0INC00LvRjyDQvdCw0YfQsNC70LAg0L/QtdGA0LXRgtCw0YHQutC40LLQsNC90LjRjywg0YHQvtGF0YDQsNC90Y/QtdGCINC90LDRh9Cw0LvRjNC90YvQuSDQutC+0L3RgtC10LrRgdGCLCDQsCDRgtCw0LrQttC1INC+0YLQvtCx0YDQsNC20LDQtdGCIFByZXZpZXcg0L/QtdGA0LXRgtCw0YHQutC40LLQsNC10LzQvtCz0L4g0Y3Qu9C10LzQtdC90YLQsFxyXG4gICAqIEBwYXJhbSBzb3VyY2VOYW1lINCY0LzRjyDQuNGB0YLQvtGH0L3QuNC60LAsINGBINC60L7RgtC+0YDQvtCz0L4g0L3QsNGH0LjQvdCw0LXRgtGB0Y8g0L/QtdGA0LXRgtCw0YHQutC40LLQsNC90LjQtVxyXG4gICAqIEBwYXJhbSBkcmFnZ2VkRGF0YSDQlNCw0L3QvdGL0LUsINC60L7RgtC+0YDRi9C1INC/0LXRgNC10YLQsNGB0LrQuNCy0LDRjtGC0YHRj1xyXG4gICAqIEBwYXJhbSBldmVudCDQodC+0LHRi9GC0LjQtSDQv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPXHJcbiAgICogQHRocm93cyDQntGI0LjQsdC60LAsINC10YHQu9C4INC/0YDQtdC00YvQtNGD0YnQtdC1INC/0LXRgNC10YLQsNGB0LrQuNCy0LDQvdC40LUg0LXRidC1INC90LUg0LfQsNCy0LXRgNGI0LXQvdC+XHJcbiAgICovXHJcbiAgcHVibGljIHN0YXJ0RHJhZyhzb3VyY2VOYW1lOiBzdHJpbmcsIGRyYWdnZWREYXRhOiB1bmtub3duW10sIGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIGlmICh0aGlzLnN0YXJ0RHJhZ0V2ZW50KSB7XHJcbiAgICAvLyAgIHRocm93IG5ldyBFcnJvcignU3RhcnQgbmV3IGRyYWcgYmVmb3JlIGNvbXBsZXRlIGN1cnJlbnQnKVxyXG4gICAgLy8gfVxyXG4gICAgdGhpcy5zdGFydERyYWdFdmVudCA9IHtzb3VyY2VOYW1lLCBkcmFnZ2VkRGF0YX07XHJcbiAgICB0aGlzLnByZXZpZXdNYW5hZ2VyLnNob3dQcmV2aWV3KHNvdXJjZU5hbWUsIGV2ZW50LCBkcmFnZ2VkRGF0YSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINCc0LXRgtC+0LQg0LTQu9GPINC+0LHRgNCw0LHQvtGC0LrQuCDRgdC+0LHRi9GC0LjRjyBwcmV2ZW50RGVmYXVsdCDQtNC70Y8g0YDQsNC30YDQtdGI0LXQvdC40Y8gLyDQt9Cw0L/RgNC10YnQtdC90LjRjyBkcm9wINC90LAg0Y3Qu9C10LzQtdC90YLQtVxyXG4gICAqIEBwYXJhbSB0YXJnZXROYW1lINCY0LzRjyDRhtC10LvQuCwg0L3QsCDQutC+0YLQvtGA0YPRjiDQv9GA0L7QuNGB0YXQvtC00LjRgiDQv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNC1XHJcbiAgICogQHBhcmFtICRldmVudCDQodC+0LHRi9GC0LjQtSDQv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPXHJcbiAgICovXHJcbiAgcHVibGljIGNhbkRyb3BQcmV2ZW50RGVmYXVsdCh0YXJnZXROYW1lOiBzdHJpbmcsICRldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbkRyb3BNYW5hZ2VyLmRyb3BQcmV2ZW50RGVmYXVsdCh0aGlzLnN0YXJ0RHJhZ0V2ZW50Py5zb3VyY2VOYW1lLCB0YXJnZXROYW1lLCAkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog0JzQtdGC0L7QtCDQtNC70Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8gZHJvcCDQvdCwINGD0LrQsNC30LDQvdC90YPRjiDRhtC10LvRjFxyXG4gICAqIEBwYXJhbSB0YXJnZXREYXRhc2V0INCU0LDQvdC90YvQtSDRhtC10LvQtdCy0L7QuSDRgtCw0LHQu9C40YbRi1xyXG4gICAqIEBwYXJhbSB0YXJnZXROYW1lINCY0LzRjyDRhtC10LvQuCwg0L3QsCDQutC+0YLQvtGA0YPRjiDQstGL0L/QvtC70L3Rj9C10YLRgdGPIGRyb3BcclxuICAgKiBAcGFyYW0gdGFyZ2V0RGF0YSDQlNCw0L3QvdGL0LUg0YbQtdC70Lgg0LIg0LrQvtGC0L7RgNGL0LUg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyBkcm9wXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSDRgSDRgNC10LfRg9C70YzRgtCw0YLQvtC8IGRyb3Ag0L7Qv9C10YDQsNGG0LjQuFxyXG4gICAqL1xyXG4gIHB1YmxpYyBkcm9wKHRhcmdldERhdGFzZXQ6IHVua25vd25bXSwgdGFyZ2V0TmFtZTogc3RyaW5nLCB0YXJnZXREYXRhOiBhbnkpOiBPYnNlcnZhYmxlPEF1ckRyb3BSZXN1bHQ8YW55Pj4ge1xyXG4gICAgY29uc3QgbWFwcGluZyA9IHRoaXMuZ2V0TWFwcGluZyh0aGlzLnN0YXJ0RHJhZ0V2ZW50IS5zb3VyY2VOYW1lLCB0YXJnZXROYW1lKTtcclxuICAgIGNvbnN0IGRyb3BDb250ZXh0ID0gdGhpcy5idWlsZERyb3BDb250ZXh0KHRhcmdldE5hbWUsIHRhcmdldERhdGEsIHRhcmdldERhdGFzZXQpXHJcbiAgICBjb25zb2xlLmxvZygnUlVOIERST1BfRk4nKVxyXG4gICAgY29uc3QgZHJvcFJlc3VsdCA9IG1hcHBpbmcuZHJvcEZuKGRyb3BDb250ZXh0KS5waXBlKGZpcnN0KCkpO1xyXG4gICAgdGhpcy5kcm9wRXZlbnQgPSB7dGFyZ2V0TmFtZSwgdGFyZ2V0RGF0YSwgZHJvcFJlc3VsdH1cclxuICAgIHJldHVybiBkcm9wUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZERyb3BDb250ZXh0KHRhcmdldE5hbWU6IHN0cmluZywgdGFyZ2V0RGF0YTogYW55LCB0YXJnZXREYXRhU2V0OiB1bmtub3duW10pOiBEcm9wQ29udGV4dDxhbnksIGFueT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGFyZ2V0TmFtZSxcclxuICAgICAgdGFyZ2V0RGF0YSxcclxuICAgICAgdGFyZ2V0RGF0YXNldDogdGFyZ2V0RGF0YVNldCxcclxuICAgICAgc291cmNlTmFtZTogdGhpcy5zdGFydERyYWdFdmVudCEuc291cmNlTmFtZSxcclxuICAgICAgc291cmNlRGF0YTogdGhpcy5zdGFydERyYWdFdmVudCEuZHJhZ2dlZERhdGEsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW5kRHJhZyhzb3VyY2VEYXRhc2V0OiB1bmtub3duW10pOiBPYnNlcnZhYmxlPEF1ckRyb3BSZXN1bHQ8YW55Pj4ge1xyXG4gICAgdGhpcy5wcmV2aWV3TWFuYWdlci5yZW1vdmVQcmV2aWV3KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRyb3BFdmVudCkge1xyXG4gICAgICBjb25zdCBkcm9wUmVzdWx0ID0gb2Yoe2lzVmFsaWQ6IGZhbHNlLCB1cGRhdGVkRGF0YXNldDogW119KTtcclxuICAgICAgdGhpcy5kcm9wRXZlbnQgPSB7dGFyZ2V0TmFtZTogJy0tLT91bmtub3ctdGFyZ2V0Py0tLS0nLCB0YXJnZXREYXRhOiBudWxsLCBkcm9wUmVzdWx0fVxyXG4gICAgICByZXR1cm4gZHJvcFJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmRyb3BFdmVudCEuZHJvcFJlc3VsdC5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoZHJvcEV2ZW50ID0+IHtcclxuICAgICAgICBpZiAoZHJvcEV2ZW50LmlzVmFsaWQpIHtcclxuICAgICAgICAgIGNvbnN0IGdyYWJDb250ZXh0ID0gdGhpcy5idWlsZEdyYWJDb250ZXh0KHNvdXJjZURhdGFzZXQpO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0aGlzLmNhbGNEYXRhc2V0QWZ0ZXJHcmFiKGdyYWJDb250ZXh0KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAodXBkYXRlZERhdGFzZXQgPT4gKHtpc1ZhbGlkOiB0cnVlLCB1cGRhdGVkRGF0YXNldH0pKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHtpc1ZhbGlkOiBmYWxzZSwgdXBkYXRlZERhdGFzZXQ6IFtdfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZHJvcEV2ZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc3RhcnREcmFnRXZlbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEdyYWJDb250ZXh0KHNvdXJjZURhdGFzZXQ6IHVua25vd25bXSk6IEdyYWJDb250ZXh0PGFueSwgYW55PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YXJnZXROYW1lOiB0aGlzLmRyb3BFdmVudCEudGFyZ2V0TmFtZSxcclxuICAgICAgdGFyZ2V0RGF0YTogdGhpcy5kcm9wRXZlbnQhLnRhcmdldERhdGEsXHJcbiAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc3RhcnREcmFnRXZlbnQhLnNvdXJjZU5hbWUsXHJcbiAgICAgIHNvdXJjZURhdGE6IHRoaXMuc3RhcnREcmFnRXZlbnQhLmRyYWdnZWREYXRhLFxyXG4gICAgICBzb3VyY2VEYXRhc2V0OiBzb3VyY2VEYXRhc2V0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGNEYXRhc2V0QWZ0ZXJHcmFiKGdyYWJDdHg6IEdyYWJDb250ZXh0PGFueSwgYW55Pik6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XHJcbiAgICBjb25zdCBtYXBwaW5nID0gdGhpcy5nZXRNYXBwaW5nKHRoaXMuc3RhcnREcmFnRXZlbnQhLnNvdXJjZU5hbWUsIHRoaXMuZHJvcEV2ZW50IS50YXJnZXROYW1lKTtcclxuICAgIHJldHVybiBtYXBwaW5nIS5ncmFiRm4oZ3JhYkN0eCkucGlwZShmaXJzdCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWFwcGluZyhzb3VyY2VOYW1lOiBzdHJpbmcsIHRhcmdldE5hbWU6IHN0cmluZyk6IEF1ckRyYWdEcm9wTWFwcGluZzxhbnksIGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwcGluZ01hbmFnZXIuZ2V0KHNvdXJjZU5hbWUsIHRhcmdldE5hbWUpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVyLWRyYWctZHJvcC5tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWF1ci1tYXQtdGFibGUvc3JjL2xpYi9kcmFnLWRyb3AvYXVyLWRyYWctZHJvcC5tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFjLEdBQUcsR0FBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFxQm5FOzs7R0FHRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUEwQjdCOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxLQUFLO1FBQ2pCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxTQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxZQUFZLGdCQUFrQyxFQUMxQixRQUF3QyxFQUN4QyxlQUE4QztRQUQ5QyxhQUFRLEdBQVIsUUFBUSxDQUFnQztRQUN4QyxvQkFBZSxHQUFmLGVBQWUsQ0FBK0I7UUFDaEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxPQUFPLENB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M0MsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFlLENBQUMsV0FBVztZQUM1QyxhQUFhLEVBQUUsYUFBYTtTQUM3QixDQUFBO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE9BQThCO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3RixPQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxVQUFVLENBQUMsVUFBa0IsRUFBRSxVQUFrQjtRQUN2RCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2ZpbmFsaXplLCBmaXJzdCwgT2JzZXJ2YWJsZSwgdGFwLH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtDYW5Ecm9wTWFuYWdlcn0gZnJvbSBcIi4vY2FuLWRyb3AtbWFuYWdlclwiO1xyXG5pbXBvcnQge1ZpZXdDb250YWluZXJSZWZ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7RHJhZ1ByZXZpZXdNYW5hZ2VyfSBmcm9tIFwiLi9kcmFnLXByZXZpZXctbWFuYWdlclwiO1xyXG5pbXBvcnQge0RyYWdEcm9wTWFwcGluZ01hbmFnZXJ9IGZyb20gXCIuL2RyYWctZHJvcC1tYXBwaW5nLW1hbmFnZXJcIjtcclxuaW1wb3J0IHtcclxuICBBdXJEcmFnRHJvcE1hcHBpbmcsXHJcbiAgQXVyRHJhZ1ByZXZpZXdNYXBwaW5ncyxcclxuICBBdXJEcm9wUmVzdWx0LFxyXG4gIERyb3BDb250ZXh0LFxyXG4gIEdyYWJDb250ZXh0XHJcbn0gZnJvbSBcIi4vbW9kZWwvYXVyLWRyYWctZHJvcC1tYXBwaW5nXCI7XHJcblxyXG5cclxuaW50ZXJmYWNlIFN0YXJ0RHJhZ0V2ZW50IHtcclxuICBzb3VyY2VOYW1lOiBzdHJpbmcsXHJcbiAgZHJhZ2dlZERhdGE6IHVua25vd25bXSxcclxufVxyXG5cclxuaW50ZXJmYWNlIERyb3BFdmVudCB7XHJcbiAgdGFyZ2V0TmFtZTogc3RyaW5nLFxyXG4gIHRhcmdldERhdGE6IHVua25vd24sXHJcbiAgZHJvcFJlc3VsdDogT2JzZXJ2YWJsZTxBdXJEcm9wUmVzdWx0PlxyXG59XHJcblxyXG4vKipcclxuICogTWFuYWdlcyB0aGUgZHJhZy1hbmQtZHJvcCBwcm9jZXNzLCBpbmNsdWRpbmcgc3RhcnQsIGRyb3AsIGFuZCBlbmQgZXZlbnRzLlxyXG4gKiBIYW5kbGVzIGRyYWcgcHJldmlld3MsIGRyb3AgdmFsaWRhdGlvbiwgYW5kIGRhdGFzZXQgdXBkYXRlcyBhZnRlciBhIHN1Y2Nlc3NmdWwgZHJvcC5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBBdXJEcmFnRHJvcE1hbmFnZXIge1xyXG4gIC8qKlxyXG4gICAqICBNYW5hZ2VzIGRyb3AgdmFsaWRhdGlvbiBsb2dpY1xyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FuRHJvcE1hbmFnZXI6IENhbkRyb3BNYW5hZ2VyO1xyXG5cclxuICAvKipcclxuICAgKiBNYW5hZ2VzIGRyYWcgcHJldmlldyByZW5kZXJpbmdcclxuICAgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IHByZXZpZXdNYW5hZ2VyOiBEcmFnUHJldmlld01hbmFnZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hbmFnZXMgc291cmNlLXRhcmdldCBtYXBwaW5nc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFwcGluZ01hbmFnZXI6IERyYWdEcm9wTWFwcGluZ01hbmFnZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhvbGRzIGluZm8gYWJvdXQgdGhlIGN1cnJlbnQgZHJhZyBvcGVyYXRpb25cclxuICAgKi9cclxuICBwcml2YXRlIHN0YXJ0RHJhZ0V2ZW50PzogU3RhcnREcmFnRXZlbnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhvbGRzIGluZm8gYWJvdXQgdGhlIGN1cnJlbnQgZHJvcCBvcGVyYXRpb25cclxuICAgKi9cclxuICBwcml2YXRlIGRyb3BFdmVudD86IERyb3BFdmVudDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiBBdXJEcmFnRHJvcE1hbmFnZXIuXHJcbiAgICogQHJldHVybnMge0F1ckRyYWdEcm9wTWFuYWdlcn0gLSBBbiBlbXB0eSBtYW5hZ2VyIHdpdGggbm8gaW5pdGlhbGl6ZWQgcmVmZXJlbmNlcy5cclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIGVtcHR5KCk6IEF1ckRyYWdEcm9wTWFuYWdlciB7XHJcbiAgICByZXR1cm4gbmV3IEF1ckRyYWdEcm9wTWFuYWdlcih1bmRlZmluZWQhLCBbXSwgW10pO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3Iodmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIG1hcHBpbmdzOiBBdXJEcmFnRHJvcE1hcHBpbmc8YW55LCBhbnk+W10sXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBwcmV2aWV3TWFwcGluZ3M6IEF1ckRyYWdQcmV2aWV3TWFwcGluZ3M8YW55PltdKSB7XHJcbiAgICB0aGlzLmNhbkRyb3BNYW5hZ2VyID0gbmV3IENhbkRyb3BNYW5hZ2VyKG1hcHBpbmdzKTtcclxuICAgIHRoaXMucHJldmlld01hbmFnZXIgPSBuZXcgRHJhZ1ByZXZpZXdNYW5hZ2VyKHZpZXdDb250YWluZXJSZWYsIHRoaXMucHJldmlld01hcHBpbmdzKTtcclxuICAgIHRoaXMubWFwcGluZ01hbmFnZXIgPSBuZXcgRHJhZ0Ryb3BNYXBwaW5nTWFuYWdlcihtYXBwaW5ncyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgZHJhZ2dhYmxlIHNvdXJjZSBuYW1lcy5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IC0gQXJyYXkgb2Ygc291cmNlIG5hbWVzLlxyXG4gICAqL1xyXG4gIGdldCBkcmFnZ2FibGVTb3VyY2VOYW1lcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXBwaW5ncz8ubWFwKG1hcHBpbmcgPT4gbWFwcGluZy5zb3VyY2VOYW1lKSB8fCBbXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYXRlcyBhIGRyYWcgb3BlcmF0aW9uLCBzYXZpbmcgdGhlIGNvbnRleHQgYW5kIHNob3dpbmcgYSBkcmFnIHByZXZpZXcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZHJhZyBzb3VyY2UuXHJcbiAgICogQHBhcmFtIHt1bmtub3duW119IGRyYWdnZWREYXRhIC0gVGhlIGRhdGEgYmVpbmcgZHJhZ2dlZC5cclxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnQgLSBUaGUgZHJhZyBldmVudC5cclxuICAgKiBAdGhyb3dzIEVycm9yIGlmIGEgZHJhZyBpcyBhbHJlYWR5IGluIHByb2dyZXNzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGFydERyYWcoc291cmNlTmFtZTogc3RyaW5nLCBkcmFnZ2VkRGF0YTogdW5rbm93bltdLCBldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdGFydERyYWdFdmVudCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0YXJ0IG5ldyBkcmFnIGJlZm9yZSBjb21wbGV0ZSBjdXJyZW50JylcclxuICAgIH1cclxuICAgIHRoaXMuc3RhcnREcmFnRXZlbnQgPSB7c291cmNlTmFtZSwgZHJhZ2dlZERhdGF9O1xyXG4gICAgdGhpcy5wcmV2aWV3TWFuYWdlci5zaG93UHJldmlldyhzb3VyY2VOYW1lLCBldmVudCwgZHJhZ2dlZERhdGEpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgd2hldGhlciBhIGRyb3AgaXMgYWxsb3dlZCBvbiB0aGUgdGFyZ2V0IGVsZW1lbnQgYnkgY2FsbGluZyBwcmV2ZW50RGVmYXVsdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnQgLSBUaGUgZHJhZyBldmVudC5cclxuICAgKi9cclxuICBwdWJsaWMgY2FuRHJvcFByZXZlbnREZWZhdWx0KHRhcmdldE5hbWU6IHN0cmluZywgZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnN0YXJ0RHJhZ0V2ZW50KSB7XHJcbiAgICAgIC8vINC/0LXRgNC10YLQsNGB0LrQuNCy0LDQvdC40LUg0L3QtSDQvdCw0YfQsNGC0L5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYW5Ecm9wTWFuYWdlci5kcm9wUHJldmVudERlZmF1bHQodGhpcy5zdGFydERyYWdFdmVudC5zb3VyY2VOYW1lLCB0YXJnZXROYW1lLCBldmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlcyB0aGUgZHJvcCBvcGVyYXRpb24gb24gdGhlIHNwZWNpZmllZCB0YXJnZXQuXHJcbiAgICogQHBhcmFtIHt1bmtub3duW119IHRhcmdldERhdGFzZXQgLSBUaGUgZGF0YXNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICogQHBhcmFtIHthbnl9IHRhcmdldERhdGEgLSBUaGUgZGF0YSBmb3IgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkcm9wKHRhcmdldERhdGFzZXQ6IHVua25vd25bXSwgdGFyZ2V0TmFtZTogc3RyaW5nLCB0YXJnZXREYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1hcHBpbmcgPSB0aGlzLmdldE1hcHBpbmcodGhpcy5zdGFydERyYWdFdmVudCEuc291cmNlTmFtZSwgdGFyZ2V0TmFtZSk7XHJcbiAgICBjb25zdCBkcm9wQ29udGV4dCA9IHRoaXMuYnVpbGREcm9wQ29udGV4dCh0YXJnZXROYW1lLCB0YXJnZXREYXRhLCB0YXJnZXREYXRhc2V0KVxyXG4gICAgY29uc3QgZHJvcFJlc3VsdCA9IG1hcHBpbmcuZHJvcEZuKGRyb3BDb250ZXh0KS5waXBlKGZpcnN0KCkpO1xyXG4gICAgdGhpcy5kcm9wRXZlbnQgPSB7dGFyZ2V0TmFtZSwgdGFyZ2V0RGF0YSwgZHJvcFJlc3VsdH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuZHMgdGhlIGRyYWcgb3BlcmF0aW9uIGFuZCB1cGRhdGVzIHRoZSBkYXRhc2V0IGlmIHRoZSBkcm9wIHdhcyBzdWNjZXNzZnVsLlxyXG4gICAqIEBwYXJhbSB7dW5rbm93bltdfSBzb3VyY2VEYXRhc2V0IC0gVGhlIGRhdGFzZXQgb2YgdGhlIHNvdXJjZSBlbGVtZW50LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBlbmREcmFnKHNvdXJjZURhdGFzZXQ6IHVua25vd25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcmV2aWV3TWFuYWdlci5yZW1vdmVQcmV2aWV3KCk7XHJcbiAgICBpZiAoIXRoaXMuZHJvcEV2ZW50IHx8ICF0aGlzLnN0YXJ0RHJhZ0V2ZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZHJvcEV2ZW50LmRyb3BSZXN1bHRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGdyYWJDb250ZXh0ID0gdGhpcy5idWlsZEdyYWJDb250ZXh0KHNvdXJjZURhdGFzZXQpO1xyXG4gICAgICAgICAgdGhpcy5jYWxjRGF0YXNldEFmdGVyR3JhYihncmFiQ29udGV4dClcclxuICAgICAgICB9KSxcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRyb3BFdmVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIHRoaXMuc3RhcnREcmFnRXZlbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGREcm9wQ29udGV4dCh0YXJnZXROYW1lOiBzdHJpbmcsIHRhcmdldERhdGE6IGFueSwgdGFyZ2V0RGF0YVNldDogdW5rbm93bltdKTogRHJvcENvbnRleHQ8YW55LCBhbnk+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRhcmdldE5hbWUsXHJcbiAgICAgIHRhcmdldERhdGEsXHJcbiAgICAgIHRhcmdldERhdGFzZXQ6IHRhcmdldERhdGFTZXQsXHJcbiAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc3RhcnREcmFnRXZlbnQhLnNvdXJjZU5hbWUsXHJcbiAgICAgIHNvdXJjZURhdGE6IHRoaXMuc3RhcnREcmFnRXZlbnQhLmRyYWdnZWREYXRhLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEdyYWJDb250ZXh0KHNvdXJjZURhdGFzZXQ6IHVua25vd25bXSk6IEdyYWJDb250ZXh0PGFueSwgYW55PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YXJnZXROYW1lOiB0aGlzLmRyb3BFdmVudCEudGFyZ2V0TmFtZSxcclxuICAgICAgdGFyZ2V0RGF0YTogdGhpcy5kcm9wRXZlbnQhLnRhcmdldERhdGEsXHJcbiAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc3RhcnREcmFnRXZlbnQhLnNvdXJjZU5hbWUsXHJcbiAgICAgIHNvdXJjZURhdGE6IHRoaXMuc3RhcnREcmFnRXZlbnQhLmRyYWdnZWREYXRhLFxyXG4gICAgICBzb3VyY2VEYXRhc2V0OiBzb3VyY2VEYXRhc2V0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGNEYXRhc2V0QWZ0ZXJHcmFiKGdyYWJDdHg6IEdyYWJDb250ZXh0PGFueSwgYW55Pik6IHZvaWQge1xyXG4gICAgY29uc3QgbWFwcGluZyA9IHRoaXMuZ2V0TWFwcGluZyh0aGlzLnN0YXJ0RHJhZ0V2ZW50IS5zb3VyY2VOYW1lLCB0aGlzLmRyb3BFdmVudCEudGFyZ2V0TmFtZSk7XHJcbiAgICBtYXBwaW5nIS5ncmFiRm4oZ3JhYkN0eCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1hcHBpbmcoc291cmNlTmFtZTogc3RyaW5nLCB0YXJnZXROYW1lOiBzdHJpbmcpOiBBdXJEcmFnRHJvcE1hcHBpbmc8YW55LCBhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLm1hcHBpbmdNYW5hZ2VyLmdldChzb3VyY2VOYW1lLCB0YXJnZXROYW1lKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVyLWRyYWctZHJvcC1tYXBwaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWF1ci1tYXQtdGFibGUvc3JjL2xpYi9kcmFnLWRyb3AvbW9kZWwvYXVyLWRyYWctZHJvcC1tYXBwaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7QXVyRHJhZ1ByZXZpZXdDb21wb25lbnR9IGZyb20gXCIuL2F1ci1kcmFnLXByZXZpZXctY29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1ckRyYWdQcmV2aWV3TWFwcGluZ3M8U09VUkNFPiB7XHJcbiAgc291cmNlTmFtZTogc3RyaW5nLFxyXG4gIHJlYWRvbmx5IHByZXZpZXc/OiBuZXcgKCkgPT4gQXVyRHJhZ1ByZXZpZXdDb21wb25lbnQ8U09VUkNFPjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIG1hcHBpbmcgY29uZmlndXJhdGlvbiBmb3IgZHJhZy1hbmQtZHJvcCBmdW5jdGlvbmFsaXR5XHJcbiAqIGJldHdlZW4gY29tcG9uZW50cy4gSXQgZGVmaW5lcyB0aGUgc291cmNlIGNvbXBvbmVudCAoZnJvbSB3aGVyZSBkYXRhIGlzIGdyYWJiZWQpXHJcbiAqIGFuZCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAod2hlcmUgZGF0YSBpcyBkcm9wcGVkKSwgYXMgd2VsbCBhcyB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlXHJcbiAqIHRoZSBncmFiYmluZyBhbmQgZHJvcHBpbmcgb2YgZGF0YS5cclxuICpcclxuICogQHRlbXBsYXRlIFNPVVJDRSAtIFRoZSB0eXBlIG9mIGRhdGEgdXNlZCBieSB0aGUgc291cmNlIGNvbXBvbmVudC5cclxuICogQHRlbXBsYXRlIFRBUkdFVCAtIFRoZSB0eXBlIG9mIGRhdGEgdXNlZCBieSB0aGUgdGFyZ2V0IGNvbXBvbmVudC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXVyRHJhZ0Ryb3BNYXBwaW5nPFNPVVJDRSwgVEFSR0VUPiB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgY29tcG9uZW50IGZyb20gd2hpY2ggZGF0YSBjYW4gYmUgZ3JhYmJlZC5cclxuICAgKiBUaGlzIHJlcHJlc2VudHMgdGhlIGNvbXBvbmVudCB0aGF0IGFsbG93cyBhIHVzZXIgdG8gaW5pdGlhdGUgYSBncmFiIGFjdGlvbi5cclxuICAgKi9cclxuICByZWFkb25seSBzb3VyY2VOYW1lOiBzdHJpbmcsXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgY29tcG9uZW50IHdoZXJlIHRoZSBkYXRhIGNhbiBiZSBkcm9wcGVkLlxyXG4gICAqIFRoaXMgcmVwcmVzZW50cyB0aGUgY29tcG9uZW50IHRoYXQgYWNjZXB0cyB0aGUgZHJvcCBhY3Rpb24uXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgdGFyZ2V0TmFtZTogc3RyaW5nLFxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBjYWxsZWQgdG8gaGFuZGxlIGdyYWJiaW5nIGRhdGEgZnJvbSB0aGUgc291cmNlIGNvbXBvbmVudC5cclxuICAgKiBJdCBpcyBpbnZva2VkIGFmdGVyIGEgZHJvcCBoYXMgb2NjdXJyZWQsIGFuZCBpdCBkZXNjcmliZXMgd2hhdCBzaG91bGRcclxuICAgKiBoYXBwZW4gdG8gdGhlIGRhdGEgaW4gdGhlIHNvdXJjZSB0YWJsZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgZ3JhYiBjb250ZXh0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvdXJjZSBhbmQgdGFyZ2V0LlxyXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGRhdGEgZWxlbWVudHMgb2YgdHlwZSBTT1VSQ0UuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZ3JhYkZuOiAoY3R4OiBHcmFiQ29udGV4dDxTT1VSQ0UsIFRBUkdFVD4pID0+IE9ic2VydmFibGU8U09VUkNFW10+XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCB0byBoYW5kbGUgdGhlIGRyb3AgYWN0aW9uIGluIHRoZSB0YXJnZXQgY29tcG9uZW50LlxyXG4gICAqIEl0IGlzIGludm9rZWQgd2hlbiB0aGUgZHJvcCBldmVudCBvY2N1cnMsIGFuZCBpdCBkZXNjcmliZXMgaG93IHRvIHByb2Nlc3NcclxuICAgKiB0aGUgZGF0YSBpbnRvIHRoZSB0YXJnZXQgY29tcG9uZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBkcm9wIGNvbnRleHQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc291cmNlIGFuZCB0YXJnZXQuXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZGF0YSBlbGVtZW50cyBvZiB0eXBlIFRBUkdFVC5cclxuICAgKi9cclxuICByZWFkb25seSBkcm9wRm46IChjdHg6IERyb3BDb250ZXh0PFNPVVJDRSwgVEFSR0VUPikgPT4gT2JzZXJ2YWJsZTxBdXJEcm9wUmVzdWx0PFRBUkdFVD4+LFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1ckRyb3BSZXN1bHQ8VEFSR0VUPiB7XHJcbiAgaXNWYWxpZDogYm9vbGVhbjtcclxuICB1cGRhdGVkRGF0YXNldDogVEFSR0VUW11cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcmFiQ29udGV4dDxTT1VSQ0UsIFRBUkdFVD4ge1xyXG4gIHJlYWRvbmx5IHNvdXJjZU5hbWU6IHN0cmluZyxcclxuICByZWFkb25seSBzb3VyY2VEYXRhOiBTT1VSQ0VbXSxcclxuICByZWFkb25seSBzb3VyY2VEYXRhc2V0OiBTT1VSQ0VbXSxcclxuXHJcbiAgcmVhZG9ubHkgdGFyZ2V0TmFtZTogc3RyaW5nLFxyXG4gIHJlYWRvbmx5IHRhcmdldERhdGE6IFRBUkdFVCxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEcm9wQ29udGV4dDxTT1VSQ0UsIFRBUkdFVD4ge1xyXG4gIHJlYWRvbmx5IHNvdXJjZU5hbWU6IHN0cmluZyxcclxuICByZWFkb25seSBzb3VyY2VEYXRhOiBTT1VSQ0VbXSxcclxuXHJcbiAgcmVhZG9ubHkgdGFyZ2V0RGF0YXNldDogVEFSR0VUW10sXHJcbiAgcmVhZG9ubHkgdGFyZ2V0TmFtZTogc3RyaW5nLFxyXG4gIHJlYWRvbmx5IHRhcmdldERhdGE6IFRBUkdFVCxcclxufVxyXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVyLWRyYWctZHJvcC1tYXBwaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWF1ci1tYXQtdGFibGUvc3JjL2xpYi9kcmFnLWRyb3AvbW9kZWwvYXVyLWRyYWctZHJvcC1tYXBwaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7QXVyRHJhZ1ByZXZpZXdDb21wb25lbnR9IGZyb20gXCIuL2F1ci1kcmFnLXByZXZpZXctY29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1ckRyYWdQcmV2aWV3TWFwcGluZ3M8U09VUkNFPiB7XHJcbiAgc291cmNlTmFtZTogc3RyaW5nLFxyXG4gIHJlYWRvbmx5IHByZXZpZXc/OiBuZXcgKCkgPT4gQXVyRHJhZ1ByZXZpZXdDb21wb25lbnQ8U09VUkNFPjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIG1hcHBpbmcgY29uZmlndXJhdGlvbiBmb3IgZHJhZy1hbmQtZHJvcCBmdW5jdGlvbmFsaXR5XHJcbiAqIGJldHdlZW4gY29tcG9uZW50cy4gSXQgZGVmaW5lcyB0aGUgc291cmNlIGNvbXBvbmVudCAoZnJvbSB3aGVyZSBkYXRhIGlzIGdyYWJiZWQpXHJcbiAqIGFuZCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAod2hlcmUgZGF0YSBpcyBkcm9wcGVkKSwgYXMgd2VsbCBhcyB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlXHJcbiAqIHRoZSBncmFiYmluZyBhbmQgZHJvcHBpbmcgb2YgZGF0YS5cclxuICpcclxuICogQHRlbXBsYXRlIFNPVVJDRSAtIFRoZSB0eXBlIG9mIGRhdGEgdXNlZCBieSB0aGUgc291cmNlIGNvbXBvbmVudC5cclxuICogQHRlbXBsYXRlIFRBUkdFVCAtIFRoZSB0eXBlIG9mIGRhdGEgdXNlZCBieSB0aGUgdGFyZ2V0IGNvbXBvbmVudC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXVyRHJhZ0Ryb3BNYXBwaW5nPFNPVVJDRSwgVEFSR0VUPiB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgY29tcG9uZW50IGZyb20gd2hpY2ggZGF0YSBjYW4gYmUgZ3JhYmJlZC5cclxuICAgKiBUaGlzIHJlcHJlc2VudHMgdGhlIGNvbXBvbmVudCB0aGF0IGFsbG93cyBhIHVzZXIgdG8gaW5pdGlhdGUgYSBncmFiIGFjdGlvbi5cclxuICAgKi9cclxuICByZWFkb25seSBzb3VyY2VOYW1lOiBzdHJpbmcsXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgY29tcG9uZW50IHdoZXJlIHRoZSBkYXRhIGNhbiBiZSBkcm9wcGVkLlxyXG4gICAqIFRoaXMgcmVwcmVzZW50cyB0aGUgY29tcG9uZW50IHRoYXQgYWNjZXB0cyB0aGUgZHJvcCBhY3Rpb24uXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgdGFyZ2V0TmFtZTogc3RyaW5nLFxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBjYWxsZWQgdG8gaGFuZGxlIGdyYWJiaW5nIGRhdGEgZnJvbSB0aGUgc291cmNlIGNvbXBvbmVudC5cclxuICAgKiBJdCBpcyBpbnZva2VkIGFmdGVyIGEgZHJvcCBoYXMgb2NjdXJyZWQsIGFuZCBpdCBkZXNjcmliZXMgd2hhdCBzaG91bGRcclxuICAgKiBoYXBwZW4gdG8gdGhlIGRhdGEgaW4gdGhlIHNvdXJjZSB0YWJsZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgZ3JhYiBjb250ZXh0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNvdXJjZSBhbmQgdGFyZ2V0LlxyXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGRhdGEgZWxlbWVudHMgb2YgdHlwZSBTT1VSQ0UuXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZ3JhYkZuOiAoY3R4OiBHcmFiQ29udGV4dDxTT1VSQ0UsIFRBUkdFVD4pID0+IHZvaWRcclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gY2FsbGVkIHRvIGhhbmRsZSB0aGUgZHJvcCBhY3Rpb24gaW4gdGhlIHRhcmdldCBjb21wb25lbnQuXHJcbiAgICogSXQgaXMgaW52b2tlZCB3aGVuIHRoZSBkcm9wIGV2ZW50IG9jY3VycywgYW5kIGl0IGRlc2NyaWJlcyBob3cgdG8gcHJvY2Vzc1xyXG4gICAqIHRoZSBkYXRhIGludG8gdGhlIHRhcmdldCBjb21wb25lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGRyb3AgY29udGV4dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb3VyY2UgYW5kIHRhcmdldC5cclxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBkYXRhIGVsZW1lbnRzIG9mIHR5cGUgVEFSR0VULlxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGRyb3BGbjogKGN0eDogRHJvcENvbnRleHQ8U09VUkNFLCBUQVJHRVQ+KSA9PiBPYnNlcnZhYmxlPEF1ckRyb3BSZXN1bHQ+LFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1ckRyb3BSZXN1bHQge1xyXG4gIGlzVmFsaWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR3JhYkNvbnRleHQ8U09VUkNFLCBUQVJHRVQ+IHtcclxuICByZWFkb25seSBzb3VyY2VOYW1lOiBzdHJpbmcsXHJcbiAgcmVhZG9ubHkgc291cmNlRGF0YTogU09VUkNFW10sXHJcbiAgcmVhZG9ubHkgc291cmNlRGF0YXNldDogU09VUkNFW10sXHJcblxyXG4gIHJlYWRvbmx5IHRhcmdldE5hbWU6IHN0cmluZyxcclxuICByZWFkb25seSB0YXJnZXREYXRhOiBUQVJHRVQsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRHJvcENvbnRleHQ8U09VUkNFLCBUQVJHRVQ+IHtcclxuICByZWFkb25seSBzb3VyY2VOYW1lOiBzdHJpbmcsXHJcbiAgcmVhZG9ubHkgc291cmNlRGF0YTogU09VUkNFW10sXHJcblxyXG4gIHJlYWRvbmx5IHRhcmdldERhdGFzZXQ6IFRBUkdFVFtdLFxyXG4gIHJlYWRvbmx5IHRhcmdldE5hbWU6IHN0cmluZyxcclxuICByZWFkb25seSB0YXJnZXREYXRhOiBUQVJHRVQsXHJcbn1cclxuIl19
@@ -309,24 +309,10 @@ export class NgxAurMatTableComponent {
309
309
  this.dragDropProvider.manager.canDropPreventDefault(this._tableName, $event);
310
310
  }
311
311
  onDrop($event, row) {
312
- this.dragDropProvider.manager.drop(this.tableDataSource.data, this._tableName, row)
313
- .subscribe(dropResult => {
314
- if (dropResult.isValid) {
315
- this.tableData = dropResult.updatedDataset.map(row => row.rowSrc);
316
- this.refreshTable();
317
- this.cdr.detectChanges();
318
- }
319
- });
312
+ this.dragDropProvider.manager.drop(this.tableDataSource.data, this._tableName, row);
320
313
  }
321
314
  onDragEnd($event, row) {
322
- this.dragDropProvider.manager.endDrag(this.tableDataSource.data)
323
- .subscribe(dropResult => {
324
- if (dropResult.isValid) {
325
- this.tableData = dropResult.updatedDataset.map(row => row.rowSrc);
326
- this.refreshTable();
327
- this.cdr.detectChanges();
328
- }
329
- });
315
+ this.dragDropProvider.manager.endDrag(this.tableDataSource.data);
330
316
  }
331
317
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: NgxAurMatTableComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
332
318
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: NgxAurMatTableComponent, selector: "aur-mat-table", inputs: { displayColumns: "displayColumns", extraHeaderCellTopTemplate: "extraHeaderCellTopTemplate", extraHeaderCellBottomTemplate: "extraHeaderCellBottomTemplate", tableConfig: "tableConfig", tableData: "tableData", extendedRowTemplate: "extendedRowTemplate", paginatorState: "paginatorState", isTableBodyHide: "isTableBodyHide", highlight: "highlight" }, outputs: { sort: "sort", pageChange: "pageChange", onRowAction: "onRowAction", selected: "selected", onSelect: "onSelect", onDeselect: "onDeselect", onSelectedRowsAction: "onSelectedRowsAction", selectionModel: "selectionModel", onRowClick: "onRowClick", onFilter: "onFilter", columnOffsets: "columnOffsets", onHeaderButton: "onHeaderButton" }, queries: [{ propertyName: "subFooterRowTemplate", first: true, predicate: NgxTableSubFooterRowDirective, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "rows", predicate: ["rowLink"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"aur-mat-table\"\r\n [ngClass]=\"{'bottom-pagination': paginationProvider.isEnabled && paginationProvider.position === 'bottom'}\">\r\n <ng-container>\r\n <!-- Filter -->\r\n <ng-container *ngIf=\"tableConfig.filterCfg?.enable ?? false\">\r\n <div class=\"search-container\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSearchPrefix]\"></ng-content>\r\n </ng-container>\r\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\r\n <input matInput (keyup)=\"applySearchFilter($event)\"\r\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\r\n style=\"font-size: 18px;\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n </mat-form-field>\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSearchSuffix]\"></ng-content>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <div class=\"table-container\"\r\n [ngClass]=\"{'bottom-pagination': paginationProvider.isEnabled && paginationProvider.position === 'bottom'}\">\r\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\r\n class=\"table-settings-button\"\r\n [style.color]=\"headerButtonProvider.color\"\r\n [style.background-color]=\"headerButtonProvider.background\"\r\n (click)=\"onHeaderButton.emit($event)\">\r\n {{ headerButtonProvider.icon }}\r\n </mat-icon>\r\n\r\n <!-- Table -->\r\n <table #table mat-table matSort\r\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\r\n [dataSource]=\"tableDataSource\"\r\n (matSortChange)=\"sortTable($event)\"\r\n [style.height]=\"tableConfig.tableView?.height\"\r\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\r\n [style.min-height]=\"tableConfig.tableView?.minHeight\"\r\n [ngClass]=\"{'hide-table-body': isTableBodyHide}\">\r\n\r\n\r\n <!-- drag-column-->\r\n <ng-container *ngIf=\"dragDropProvider.isEnabled && dragDropProvider.draggable\" [matColumnDef]=\"dragDropProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element;\" class=\"drag-column\">\r\n <lib-icon-view draggable=\"true\"\r\n class=\"drag-icon\"\r\n [view]=\"dragDropProvider.dragIconView\"\r\n (dragstart)=\"onDragStart($event, element)\"\r\n (dragend)=\"onDragEnd($event, element)\">\r\n </lib-icon-view>\r\n\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- index-column-->\r\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\r\n\r\n <th mat-header-cell *matHeaderCellDef>\r\n <lib-column-view [config]=\"indexProvider.headerView\">\r\n {{ indexProvider.name }}\r\n </lib-column-view>\r\n </th>\r\n\r\n <td mat-cell *matCellDef=\"let element;\">\r\n {{ element.id + indexProvider.offset }}\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) || '' }}\r\n </td>\r\n </ng-container>\r\n\r\n <!-- selection-column-->\r\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <div class=\"flex-container\">\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n <div\r\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\r\n {{ selectionProvider.selection.selected.length }}\r\n <span\r\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ paginatorState?.length ? paginatorState?.length : tableDataSource.filteredData.length }}</span>\r\n </div>\r\n\r\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\r\n <ng-container *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\r\n <button mat-icon-button\r\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngIf=\"action.display !== 'none'\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\"\r\n (click)=\"$event.stopPropagation(); selectionProvider.selection.toggle(castSrc(row).rowSrc)\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\r\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\r\n </mat-checkbox>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- action column -->\r\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\" (click)=\"$event.stopPropagation()\" style=\"cursor: default\">\r\n <ng-container *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\r\n <button mat-icon-button\r\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\r\n [matTooltip]=\"action.icon.tooltip || ''\"\r\n *ngIf=\"action.display !== 'none'\">\r\n <mat-icon [style.color]=\"action.icon.color\">\r\n {{ action.icon.name }}\r\n </mat-icon>\r\n </button>\r\n </ng-container>\r\n </td>\r\n\r\n <ng-container *ngTemplateOutlet=\"footerCellTemplate; context: {$implicit: rowActionsProvider.COLUMN_NAME}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- value-icon-->\r\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\r\n\r\n <!-- if sortable column header -->\r\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\r\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\r\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\">\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- else not sortable -->\r\n <ng-template #notSortable>\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\r\n </th>\r\n </ng-template>\r\n\r\n <!-- header value-->\r\n <ng-template #headerValue>\r\n <lib-column-view [config]=\"columnConfig.headerView\"\r\n [value]=\"columnConfig.name\">\r\n </lib-column-view>\r\n </ng-template>\r\n\r\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\r\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\r\n <td mat-cell *matCellDef=\"let element;\">\r\n <lib-column-view\r\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\r\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\r\n </lib-column-view>\r\n </td>\r\n\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnConfig.key) || '' }}\r\n </td>\r\n\r\n </ng-container>\r\n\r\n <!-- extra header top cell-->\r\n <ng-container *ngFor=\"let extraTopCell of _displayExtraHeaderTopCell; let index = index\"\r\n [matColumnDef]=\"extraTopCell\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container\r\n *ngTemplateOutlet=\"extraHeaderCellTopTemplate; context: {key: extraTopCell.replace(EXTRA_HEADER_CELL_TOP_SUFFIX, ''), index: index}\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n\r\n <!-- extra header bottom cell-->\r\n <ng-container *ngFor=\"let extraBottomCell of _displayExtraHeaderBottomCell; let index = index\"\r\n [matColumnDef]=\"extraBottomCell\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container\r\n *ngTemplateOutlet=\"extraHeaderCellBottomTemplate; context: {key: extraBottomCell.replace(EXTRA_HEADER_CELL_BOTTOM_SUFFIX, ''), index: index}\"></ng-container>\r\n </th>\r\n </ng-container>\r\n\r\n <!-- extra header top row-->\r\n <ng-container *ngIf=\"extraHeaderCellTopTemplate\">\r\n <tr mat-header-row *matHeaderRowDef=\"_displayExtraHeaderTopCell; sticky: this.tableConfig.stickyCfg?.header\"\r\n class=\"extra-header-top-row\">\r\n </tr>\r\n </ng-container>\r\n\r\n <!-- header row-->\r\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\">\r\n </tr>\r\n\r\n <!-- extra header bottom row -->\r\n <ng-container *ngIf=\"extraHeaderCellBottomTemplate\">\r\n <tr mat-header-row\r\n *matHeaderRowDef=\"_displayExtraHeaderBottomCell; sticky: this.tableConfig.stickyCfg?.header\">\r\n </tr>\r\n </ng-container>\r\n\r\n <tr mat-row #rowLink\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event, row)\"\r\n *matRowDef=\"let row; columns: _displayColumns;\"\r\n (click)=\"rowClick(row)\"\r\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\r\n [ngStyle]=\"{\r\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\r\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\r\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\r\n }\">\r\n </tr>\r\n\r\n <!--expanded-row-->\r\n <ng-container matColumnDef=\"expandedRow\">\r\n <td mat-cell class=\"expanded-cell\" *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\"\r\n style=\"padding-right: 0!important;\">\r\n <div class=\"row-detail\"\r\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\r\n <!-- lazy-load of details -->\r\n <ng-container *ngIf=\"element.rowSrc === highlighted\">\r\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"extendedRowTemplate\">\r\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\r\n </ng-container>\r\n <!--expanded-row-->\r\n\r\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\r\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\r\n [style]=\"totalRowProvider.style\"></tr>\r\n </ng-container>\r\n\r\n <!--sub-footer-row-->\r\n <ng-container matColumnDef=\"subFooterRow\">\r\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\r\n <ng-container>\r\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"subFooterRowTemplate\">\r\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\r\n </ng-container>\r\n <!-- sub-footer-row END-->\r\n </table>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Pagination -->\r\n @if (this.paginationProvider.isEnabled) {\r\n <mat-paginator [ngClass]=\"{'hidePaginator': isTableBodyHide}\"\r\n [pageSizeOptions]=\"paginationProvider.sizes\"\r\n [pageSize]=\"paginationProvider.size\"\r\n [style]=\"tableConfig?.pageableCfg?.style\"\r\n [length]=\"paginatorState?.length\"\r\n [pageIndex]=\"paginatorState?.pageIndex\"\r\n (page)=\"pageChange.emit($event)\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n }\r\n</div>\r\n\r\n<ng-template #footerCellTemplate let-columnName>\r\n <td mat-footer-cell *matFooterCellDef>\r\n {{ totalRowProvider.totals.get(columnName) || '' }}\r\n </td>\r\n</ng-template>\r\n", styles: [".aur-mat-table{display:flex;flex-direction:column}.aur-mat-table.bottom-pagination{height:100%}.aur-mat-table table{border-collapse:collapse}.aur-mat-table .table-container{position:relative}.aur-mat-table .table-container.bottom-pagination{flex-grow:1;overflow:auto}.aur-mat-table th,td{padding-right:4px!important;padding-left:4px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .expanded-row .expanded-cell{padding-right:0!important;padding-left:0!important}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:12px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px;z-index:9999999999}.mat-mdc-header-row th:last-child{padding-right:25px!important}.aur-mat-table .search-container{display:flex;gap:8px;align-items:center}.aur-mat-table .extra-header-top-row th{border-bottom:none}.aur-mat-table .drag-icon{cursor:grab}.hide-table-body tr:not(.mat-mdc-header-row){display:none!important}.hidePaginator{display:none}.aur-mat-table .drag-column{padding-left:8px;padding-right:8px;width:35px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i11.ColumnViewComponent, selector: "lib-column-view", inputs: ["config", "value"] }, { kind: "component", type: i12.IconViewComponent, selector: "lib-icon-view", inputs: ["view"] }, { kind: "pipe", type: i13.DataPropertyGetterPipe, name: "dataPropertyGetter" }], animations: [
@@ -404,4 +390,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
404
390
  }], highlight: [{
405
391
  type: Input
406
392
  }] } });
407
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWF1ci1tYXQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWF1ci1tYXQtdGFibGUvc3JjL2xpYi9uZ3gtYXVyLW1hdC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYXVyLW1hdC10YWJsZS9zcmMvbGliL25neC1hdXItbWF0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxFQUNULFlBQVksRUFFYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsT0FBTyxFQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBWSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3hGLE9BQU8sRUFBYyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRXJHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsVUFB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TUFBTSxFQUFFLElBQUksRUFBQztnQkFFeEIsSUFBSTtzQkFBYixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csV0FBVztzQkFBcEIsTUFBTTtnQkFJRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsY0FBYztzQkFBdkIsTUFBTTtnQkFHRyxVQUFVO3NCQUFuQixNQUFNO2dCQUtHLFFBQVE7c0JBQWpCLE1BQU07Z0JBR0csYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQXlCRSxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29sdW1uVmlldywgVGFibGVDb25maWd9IGZyb20gJy4vbW9kZWwvQ29sdW1uQ29uZmlnJztcclxuaW1wb3J0IHtNYXRTb3J0LCBTb3J0fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHtNYXRUYWJsZURhdGFTb3VyY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHtNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHtTZWxlY3Rpb25Qcm92aWRlciwgU2VsZWN0aW9uUHJvdmlkZXJEdW1teX0gZnJvbSAnLi9wcm92aWRlcnMvU2VsZWN0aW9uUHJvdmlkZXInO1xyXG5pbXBvcnQge0FjdGlvbkV2ZW50LCBSb3dBY3Rpb25Qcm92aWRlciwgUm93QWN0aW9uUHJvdmlkZXJEdW1teX0gZnJvbSAnLi9wcm92aWRlcnMvUm93QWN0aW9uUHJvdmlkZXInO1xyXG5pbXBvcnQge1RhYmxlUm93fSBmcm9tIFwiLi9tb2RlbC9UYWJsZVJvd1wiO1xyXG5pbXBvcnQge1RhYmxlVmlld0ZhY3Rvcnl9IGZyb20gXCIuL21vZGVsL1RhYmxlVmlld0ZhY3RvcnlcIjtcclxuaW1wb3J0IHtJbmRleFByb3ZpZGVyLCBJbmRleFByb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9JbmRleFByb3ZpZGVyXCI7XHJcbmltcG9ydCB7UGFnaW5hdGlvblByb3ZpZGVyLCBQYWdpbmF0aW9uUHJvdmlkZXJEdW1teX0gZnJvbSBcIi4vcHJvdmlkZXJzL1BhZ2luYXRpb25Qcm92aWRlclwiO1xyXG5pbXBvcnQge01hdFRhYmxlRGF0YVNvdXJjZUZhY3Rvcnl9IGZyb20gXCIuL2ZhY3Rvcmllcy9NYXRUYWJsZURhdGFTb3VyY2VGYWN0b3J5XCI7XHJcbmltcG9ydCB7RGlzcGxheUNvbHVtbnNGYWN0b3J5fSBmcm9tIFwiLi9mYWN0b3JpZXMvRGlzcGxheUNvbHVtbnNGYWN0b3J5XCI7XHJcbmltcG9ydCB7RW1wdHlWYWx1ZX0gZnJvbSBcIi4vbW9kZWwvRW1wdHlWYWx1ZVwiO1xyXG5pbXBvcnQge1RvdGFsUm93UHJvdmlkZXIsIFRvdGFsUm93UHJvdmlkZXJEdW1teX0gZnJvbSBcIi4vcHJvdmlkZXJzL1RvdGFsUm93UHJvdmlkZXJcIjtcclxuaW1wb3J0IHtOZ3hBdXJGaWx0ZXJzfSBmcm9tIFwiLi9maWx0ZXJzL05neEF1ckZpbHRlcnNcIjtcclxuaW1wb3J0IHtOZ3hBdXJNYXRUYWJsZVB1YmxpY30gZnJvbSBcIi4vbmd4LWF1ci1tYXQtdGFibGUtcHVibGljXCI7XHJcbmltcG9ydCB7T2Zmc2V0VXRpbH0gZnJvbSBcIi4vdXRpbHMvb2Zmc2V0LnV0aWxcIjtcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcbmltcG9ydCB7Tmd4VGFibGVTdWJGb290ZXJSb3dEaXJlY3RpdmV9IGZyb20gXCIuL2RpcmVjdGl2ZS9uZ3gtdGFibGUtc3ViLWZvb3Rlci1yb3cuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7U2VsZWN0aW9uTW9kZWx9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIjtcclxuaW1wb3J0IHtIZWFkZXJCdXR0b25Qcm92aWRlciwgSGVhZGVyQnV0dG9uUHJvdmlkZXJEdW1teX0gZnJvbSBcIi4vcHJvdmlkZXJzL0hlYWRlckJ1dHRvblByb3ZpZGVyXCI7XHJcbmltcG9ydCB7RHJhZ0Ryb3BQcm92aWRlciwgRHJhZ1Byb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9EcmFnRHJvcFByb3ZpZGVyXCI7XHJcbmltcG9ydCB7QXVyRHJhZ0Ryb3BDb21wb25lbnR9IGZyb20gXCIuL2RyYWctZHJvcC9hdXItZHJhZy1kcm9wLWNvbXBvbmVudFwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBQYWdpbmF0b3JTdGF0ZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xlbmd0aDogbnVtYmVyLCBwcml2YXRlIF9wYWdlSW5kZXg6IG51bWJlcikge1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xlbmd0aDtcclxuICB9XHJcblxyXG4gIGdldCBwYWdlSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdlSW5kZXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGVtcHR5KCk6IFBhZ2luYXRvclN0YXRlIHtcclxuICAgIHJldHVybiBuZXcgUGFnaW5hdG9yU3RhdGUoMCwgMCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhpZ2hsaWdodENvbnRhaW5lcjxUPiB7XHJcbiAgdmFsdWU6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5PZmZzZXQge1xyXG4gIGxlZnQ6IG51bWJlcixcclxuICB3aWR0aDogbnVtYmVyLFxyXG4gIGtleTogc3RyaW5nXHJcbn1cclxuXHJcbmVudW0gRXhwYW5kU3RhdGUge1xyXG4gIENPTExBUFNFRCA9ICdjb2xsYXBzZWQnLFxyXG4gIEVYUEFOREVEID0gJ2V4cGFuZGVkJ1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F1ci1tYXQtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtYXVyLW1hdC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LWF1ci1tYXQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXHJcbiAgICAgIHN0YXRlKEV4cGFuZFN0YXRlLkNPTExBUFNFRCwgc3R5bGUoe2hlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnfSkpLFxyXG4gICAgICBzdGF0ZShFeHBhbmRTdGF0ZS5FWFBBTkRFRCwgc3R5bGUoe2hlaWdodDogJyonfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKGAke0V4cGFuZFN0YXRlLkVYUEFOREVEfSA8PT4gJHtFeHBhbmRTdGF0ZS5DT0xMQVBTRUR9YCwgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxyXG4gICAgXSksXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neEF1ck1hdFRhYmxlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSwgTmd4QXVyTWF0VGFibGVQdWJsaWM8VD4sIEF1ckRyYWdEcm9wQ29tcG9uZW50PFRhYmxlUm93PFQ+PiB7XHJcblxyXG4gIGV4cGFuZGVkU3RhdGVFbnVtID0gRXhwYW5kU3RhdGU7XHJcblxyXG4gIHJlYWRvbmx5IEVYVFJBX0hFQURFUl9DRUxMX1RPUF9TVUZGSVggPSAnX2V4dHJhX2hlYWRlcl9jZWxsX3RvcCc7XHJcbiAgcmVhZG9ubHkgRVhUUkFfSEVBREVSX0NFTExfQk9UVE9NX1NVRkZJWCA9ICdfZXh0cmFfaGVhZGVyX2NlbGxfYm90dG9tJztcclxuXHJcbiAgcHVibGljIHRhYmxlRGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8VGFibGVSb3c8VD4+KFtdKTtcclxuICBfZGlzcGxheUNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgX2Rpc3BsYXlFeHRyYUhlYWRlclRvcENlbGw6IHN0cmluZ1tdID0gW107XHJcbiAgX2Rpc3BsYXlFeHRyYUhlYWRlckJvdHRvbUNlbGw6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIF9jdXN0b21EaXNwbGF5Q29sdW1uc0VuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgX3RhYmxlTmFtZSA9ICd1bmtub3duLXRhYmxlLW5hbWUnO1xyXG5cclxuICBASW5wdXQoKSBzZXQgZGlzcGxheUNvbHVtbnMoY29sdW1uczogc3RyaW5nW10pIHtcclxuICAgIGlmIChjb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuX2Rpc3BsYXlDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xyXG4gICAgICB0aGlzLl9jdXN0b21EaXNwbGF5Q29sdW1uc0VuYWJsZWQgPSBjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRhYmxlVmlldzogTWFwPHN0cmluZywgQ29sdW1uVmlldzxzdHJpbmc+PltdID0gW107XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoTmd4VGFibGVTdWJGb290ZXJSb3dEaXJlY3RpdmUpIHN1YkZvb3RlclJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBJbnB1dCgpIGV4dHJhSGVhZGVyQ2VsbFRvcFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBJbnB1dCgpIGV4dHJhSGVhZGVyQ2VsbEJvdHRvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3Jvd0xpbmsnLCB7cmVhZDogRWxlbWVudFJlZn0pIHJvd3M6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7cmVhZDogRWxlbWVudFJlZn0pIHRhYmxlOiBFbGVtZW50UmVmO1xyXG5cclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQElucHV0KCkgdGFibGVDb25maWc6IFRhYmxlQ29uZmlnPFQ+O1xyXG5cclxuICBASW5wdXQoKSB0YWJsZURhdGE6IFRbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBleHRlbmRlZFJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vINC10YHQu9C4INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDRgdC10YDQstC10YDQvdGL0Lkg0L/QsNCz0LjQvdCw0YLQvtGALCDRgdGO0LTQsCDQv9C10YDQtdC00LDQtdGC0YHRjyDRgtC10LrRg9GJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUg0L/QsNCz0LjQvdCw0YLQvtGA0LBcclxuICBASW5wdXQoKSBwYWdpbmF0b3JTdGF0ZTogUGFnaW5hdG9yU3RhdGUgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpIGlzVGFibGVCb2R5SGlkZSA9IGZhbHNlO1xyXG5cclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHtzdGF0aWM6IGZhbHNlfSkgbWF0UGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCwge3N0YXRpYzogdHJ1ZX0pIG1hdFNvcnQ6IE1hdFNvcnQ7XHJcblxyXG4gIEBPdXRwdXQoKSBzb3J0OiBFdmVudEVtaXR0ZXI8U29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XHJcblxyXG4gIC8vIGV2ZW50cyBpZiBlbmFibGVkIGFjdGlvbnNcclxuICBAT3V0cHV0KCkgb25Sb3dBY3Rpb246IEV2ZW50RW1pdHRlcjxBY3Rpb25FdmVudDxUPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbkV2ZW50PFQ+PigpO1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8vIGV2ZW50cyBpZiBlbmFibGVkIHNlbGVjdCBldmVudFxyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xyXG4gIEBPdXRwdXQoKSBvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xyXG4gIEBPdXRwdXQoKSBvbkRlc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvblNlbGVjdGVkUm93c0FjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uRXZlbnQ8VFtdPj4oKTtcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbk1vZGVsID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb25Nb2RlbDxUPj4oKTtcclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBAT3V0cHV0KCkgb25Sb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogcmV0dXJuIGZpbHRlcmVkIHJvd3NcclxuICAgKi9cclxuICBAT3V0cHV0KCkgb25GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcclxuXHJcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBleHRyYUhlYWRlckNlbGxUb3BUZW1wbGF0ZSBvciBleHRyYUhlYWRlckNlbGxCb3R0b21UZW1wbGF0ZSAqL1xyXG4gIEBPdXRwdXQoKSBjb2x1bW5PZmZzZXRzID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5PZmZzZXRbXT4oKTtcclxuICBwcml2YXRlIHByZXZDb2x1bW5PZmZzZXRzOiBDb2x1bW5PZmZzZXRbXSA9IFtdO1xyXG5cclxuICBoZWFkZXJCdXR0b25Qcm92aWRlciA9IG5ldyBIZWFkZXJCdXR0b25Qcm92aWRlckR1bW15KCk7XHJcbiAgQE91dHB1dCgpIG9uSGVhZGVyQnV0dG9uID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xyXG5cclxuICAvLyBAdHMtaWdub3JlXHJcbiAgcHJpdmF0ZSByZXNpemVDb2x1bW5PZmZzZXRzT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyID0gRW1wdHlWYWx1ZS5SRVNJWkVfT0JTRVJWRVI7XHJcblxyXG4gIGRyYWdEcm9wUHJvdmlkZXI6IERyYWdEcm9wUHJvdmlkZXI8VD4gPSBuZXcgRHJhZ1Byb3ZpZGVyRHVtbXkoKTtcclxuXHJcbiAgc2VsZWN0aW9uUHJvdmlkZXI6IFNlbGVjdGlvblByb3ZpZGVyPFQ+ID0gbmV3IFNlbGVjdGlvblByb3ZpZGVyRHVtbXkoKTtcclxuXHJcbiAgcm93QWN0aW9uc1Byb3ZpZGVyOiBSb3dBY3Rpb25Qcm92aWRlcjxUPiA9IG5ldyBSb3dBY3Rpb25Qcm92aWRlckR1bW15PFQ+KCk7XHJcblxyXG4gIGluZGV4UHJvdmlkZXI6IEluZGV4UHJvdmlkZXIgPSBuZXcgSW5kZXhQcm92aWRlckR1bW15KCk7XHJcblxyXG4gIHBhZ2luYXRpb25Qcm92aWRlcjogUGFnaW5hdGlvblByb3ZpZGVyID0gbmV3IFBhZ2luYXRpb25Qcm92aWRlckR1bW15KCk7XHJcblxyXG4gIHRvdGFsUm93UHJvdmlkZXI6IFRvdGFsUm93UHJvdmlkZXI8VD4gPSBuZXcgVG90YWxSb3dQcm92aWRlckR1bW15KCk7XHJcblxyXG4gIGhpZ2hsaWdodGVkOiBUIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIGN1c3RvbVNvcnRGdW5jdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgKGRhdGE6IFRhYmxlUm93PFQ+LCBrZXk6IHN0cmluZykgPT4gYW55PigpO1xyXG5cclxuICBwcml2YXRlIGZpbHRlclN0b3JhZ2UgPSBuZXcgTWFwPHN0cmluZywgTmd4QXVyRmlsdGVycy5CYXNlPFQ+PigpO1xyXG5cclxuICAvL9C30L3QsNGH0LXQvdC40LUg0L/QtdGA0LXQtNCw0LXRgtGB0Y8g0LIg0LrQvtC90YLQtdC50L3QtdGA0LUg0LjQvdCw0YfQtSBPbkNoYW5nZSDQvdC1INCy0LjQtNC40YIg0LjQt9C80LXQvdC10L3QuNC5INC60L7Qs9C00LAg0L/QtdGA0LXQtNCw0Y7RgtGB0Y8g0L7QtNC40L3QsNC60L7QstGL0LUg0LfQvdCw0YfQtdC90LjQtSDQuCDQv9C+0LTRgdCy0LXRgtC60LAg0YHRgtGA0L7QutC4INC90LUg0L7RgtC60LvRjtGH0LDQtdGC0YHRj1xyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBASW5wdXQoKSBoaWdobGlnaHQ6IEhpZ2hsaWdodENvbnRhaW5lcjxUPiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKChjaGFuZ2VzWyd0YWJsZURhdGEnXSAmJiB0aGlzLnRhYmxlRGF0YSkgfHwgKGNoYW5nZXNbJ2Rpc3BsYXlDb2x1bW5zJ10gJiYgdGhpcy5fZGlzcGxheUNvbHVtbnMpKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snaGlnaGxpZ2h0J10gJiYgdGhpcy5oaWdobGlnaHQpIHtcclxuICAgICAgdGhpcy5oYW5kbGVIaWdobGlnaHRDaGFuZ2UodGhpcy5oaWdobGlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0UGFnaW5hdG9yUGFnZUluZGV4KCkge1xyXG4gICAgaWYgKHRoaXMubWF0UGFnaW5hdG9yKSB7XHJcbiAgICAgIHRoaXMubWF0UGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZnJlc2hUYWJsZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb25Qcm92aWRlcj8uc2VsZWN0aW9uPy5zZWxlY3RlZCA/PyBbXTtcclxuICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy50YWJsZURhdGEgfHwgW107XHJcbiAgICB0aGlzLnByZXBhcmVUYWJsZURhdGEoc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVIaWdobGlnaHRDaGFuZ2UoaDogSGlnaGxpZ2h0Q29udGFpbmVyPFQ+KSB7XHJcbiAgICBpZiAodGhpcy5oaWdobGlnaHRlZCA9PT0gaC52YWx1ZSkge1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodCA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5oaWdobGlnaHRlZCA9IHVuZGVmaW5lZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWQgPSBoLnZhbHVlO1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMudGFibGVEYXRhU291cmNlLmRhdGEuZmluZEluZGV4KHJvdyA9PiByb3cucm93U3JjID09PSBoLnZhbHVlKTtcclxuICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICB0aGlzLnJvd3M/LnRvQXJyYXkoKVtpbmRleF0/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xyXG4gICAgICAgICAgYmVoYXZpb3I6IFwic21vb3RoXCIsXHJcbiAgICAgICAgICBibG9jazogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGlubGluZTogXCJjZW50ZXJcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50YWJsZUNvbmZpZykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbml0IGlucHV0cyBbdGFibGVDb25maWddIGlzIG1hbmRhdG9yeSFcIilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHdlIG5lZWQgdGhpcywgaW4gb3JkZXIgdG8gbWFrZSBwYWdpbmF0aW9uIHdvcmsgd2l0aCAqbmdJZlxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdFBhZ2luYXRvcigpXHJcbiAgICB0aGlzLmluaXRTb3J0aW5nRGF0YUFjY2Vzc29yKCk7XHJcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbk9mZnNldHNPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB0aGlzLnVwZGF0ZUNvbHVtbk9mZnNldHMoKSk7XHJcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbk9mZnNldHNPYnNlcnZlci5vYnNlcnZlKHRoaXMudGFibGUubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbk9mZnNldHMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFBhZ2luYXRvcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRhYmxlRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLm1hdFBhZ2luYXRvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFNvcnRpbmdEYXRhQWNjZXNzb3IoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50YWJsZURhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2Uuc29ydCA9IHRoaXMubWF0U29ydDtcclxuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChkYXRhLCBrZXkpID0+IHtcclxuICAgICAgICBjb25zdCBjdXN0b21Tb3J0RnVuY3Rpb24gPSB0aGlzLmN1c3RvbVNvcnRGdW5jdGlvbnMuZ2V0KGtleSk7XHJcbiAgICAgICAgcmV0dXJuIGN1c3RvbVNvcnRGdW5jdGlvbiA/IGN1c3RvbVNvcnRGdW5jdGlvbihkYXRhLCBrZXkpIDogZGF0YVtrZXldO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5PZmZzZXRzKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGU/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJykpIHtcclxuICAgICAgY29uc3Qgb2Zmc2V0czogQ29sdW1uT2Zmc2V0W10gPSBBcnJheS5mcm9tKHRoaXMudGFibGUubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpKVxyXG4gICAgICAgIC5tYXAoKGMpID0+IChjIGFzIEhUTUxFbGVtZW50KSlcclxuICAgICAgICAubWFwKChjLCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgIGxlZnQ6IGMub2Zmc2V0TGVmdCxcclxuICAgICAgICAgIHdpZHRoOiBjLm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAga2V5OiB0aGlzLl9kaXNwbGF5Q29sdW1uc1tpbmRleF1cclxuICAgICAgICB9KSk7XHJcbiAgICAgIGlmIChPZmZzZXRVdGlsLmFyZU5vdEVxdWFsKHRoaXMucHJldkNvbHVtbk9mZnNldHMsIG9mZnNldHMpKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2Q29sdW1uT2Zmc2V0cyA9IG9mZnNldHM7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5PZmZzZXRzLmVtaXQob2Zmc2V0cyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZVRhYmxlRGF0YShpbml0U2VsZWN0aW9uOiBUW10gPSBbXSkge1xyXG4gICAgdGhpcy5pbml0VGFibGUoKTtcclxuICAgIHRoaXMuaW5pdEN1c3RvbVNvcnRGdW5jdGlvbnNNYXAoKTtcclxuICAgIGlmICghdGhpcy5wYWdpbmF0b3JTdGF0ZSkge1xyXG4gICAgICAvLyDQtdGB0LvQuCDQv9Cw0LPQuNC90LDRgtC+0YAg0L3QtSDRgdC10YDQstC10YDQvdGL0Lkg0YLQviDQtdCz0L4g0Y8g0LfQtNC10YHRjCDQuNC90LjRhtC40LDQu9C40LfQuNGA0YPRjiDQuNC90LDRh9C1INC/0YDQuCDQvtCx0L3QvtCy0LvQtdC90LjQuCDQtNCw0L3QvdGL0YUg0L/QsNCz0LjQvdCw0YLQvtGAINC70L7QvNCw0LXRgtGB0Y8g0Lgg0L7RgtC+0LHRgNCw0LbQsNGO0YLRgdGPINCy0YHQtSDRjdC70LXQvNC10L3RgtGLXHJcbiAgICAgIHRoaXMuaW5pdFBhZ2luYXRvcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0U29ydGluZ0RhdGFBY2Nlc3NvcigpO1xyXG5cclxuICAgIHRoaXMuaW5kZXhQcm92aWRlciA9IEluZGV4UHJvdmlkZXIuY3JlYXRlKHRoaXMudGFibGVDb25maWcpXHJcbiAgICAgIC5hZGRJbmRleENvbHVtbih0aGlzLl9kaXNwbGF5Q29sdW1ucyk7XHJcblxyXG4gICAgdGhpcy5yb3dBY3Rpb25zUHJvdmlkZXIgPSBSb3dBY3Rpb25Qcm92aWRlci5jcmVhdGUodGhpcy50YWJsZUNvbmZpZylcclxuICAgICAgLmFkZEFjdGlvbkNvbHVtbih0aGlzLl9kaXNwbGF5Q29sdW1ucylcclxuICAgICAgLnNldFZpZXcodGhpcy50YWJsZURhdGFTb3VyY2UuZGF0YSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3Rpb25Qcm92aWRlciA9IFNlbGVjdGlvblByb3ZpZGVyLmNyZWF0ZSh0aGlzLnRhYmxlQ29uZmlnLCB0aGlzLnRhYmxlRGF0YVNvdXJjZSwgaW5pdFNlbGVjdGlvbilcclxuICAgICAgLmFkZENoZWNrYm94Q29sdW1uKHRoaXMuX2Rpc3BsYXlDb2x1bW5zKVxyXG4gICAgICAuYmluZEV2ZW50RW1pdHRlcnModGhpcy5zZWxlY3RlZCwgdGhpcy5vblNlbGVjdCwgdGhpcy5vbkRlc2VsZWN0LCB0aGlzLnNlbGVjdGlvbk1vZGVsKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25Qcm92aWRlciA9IFBhZ2luYXRpb25Qcm92aWRlci5jcmVhdGUodGhpcy50YWJsZUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy50b3RhbFJvd1Byb3ZpZGVyID0gVG90YWxSb3dQcm92aWRlci5jcmVhdGUodGhpcy50YWJsZUNvbmZpZywgdGhpcy50YWJsZURhdGFTb3VyY2UpXHJcbiAgICAgIC5zZXRTdHlsZSgpXHJcbiAgICAgIC5zZXRUb3RhbFJvdygpO1xyXG5cclxuICAgIHRoaXMuaGVhZGVyQnV0dG9uUHJvdmlkZXIgPSBuZXcgSGVhZGVyQnV0dG9uUHJvdmlkZXIodGhpcy50YWJsZUNvbmZpZy50YWJsZUhlYWRlckJ1dHRvbkNmZylcclxuXHJcbiAgICB0aGlzLmRyYWdEcm9wUHJvdmlkZXIgPSBEcmFnRHJvcFByb3ZpZGVyLmNyZWF0ZSh0aGlzLnZpZXdDb250YWluZXJSZWYsIHRoaXMudGFibGVDb25maWcpXHJcbiAgICAgIC5hZGRDb2x1bW4odGhpcy5fZGlzcGxheUNvbHVtbnMpO1xyXG5cclxuICAgIHRoaXMuZW1pdEZpbHRlcmVkVmFsdWVzKCk7XHJcblxyXG4gICAgdGhpcy5fZGlzcGxheUV4dHJhSGVhZGVyVG9wQ2VsbCA9IHRoaXMuX2Rpc3BsYXlDb2x1bW5zLm1hcChjb2wgPT4gY29sICsgdGhpcy5FWFRSQV9IRUFERVJfQ0VMTF9UT1BfU1VGRklYKVxyXG4gICAgdGhpcy5fZGlzcGxheUV4dHJhSGVhZGVyQm90dG9tQ2VsbCA9IHRoaXMuX2Rpc3BsYXlDb2x1bW5zLm1hcChjb2wgPT4gY29sICsgdGhpcy5FWFRSQV9IRUFERVJfQ0VMTF9CT1RUT01fU1VGRklYKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q3VzdG9tU29ydEZ1bmN0aW9uc01hcCgpIHtcclxuICAgIHRoaXMudGFibGVDb25maWcuY29sdW1uc0NmZ1xyXG4gICAgICAuZmlsdGVyKGMgPT4gYy5zb3J0ICYmIGMuc29ydC5lbmFibGUgJiYgYy5zb3J0LmN1c3RvbVNvcnQpXHJcbiAgICAgIC5mb3JFYWNoKGMgPT4gdGhpcy5jdXN0b21Tb3J0RnVuY3Rpb25zLnNldChjLmtleSwgYy5zb3J0IS5jdXN0b21Tb3J0ISkpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRUYWJsZSgpIHtcclxuICAgIHRoaXMuX3RhYmxlTmFtZSA9IHRoaXMudGFibGVDb25maWcubmFtZSA/PyAndW5rbm93bi10YWJsZS1uYW1lJztcclxuICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gTWF0VGFibGVEYXRhU291cmNlRmFjdG9yeS5jb252ZXJ0KHRoaXMudGFibGVEYXRhLCB0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnNDZmcpO1xyXG4gICAgdGhpcy50YWJsZVZpZXcgPSBUYWJsZVZpZXdGYWN0b3J5LnRvVmlldyh0aGlzLnRhYmxlRGF0YVNvdXJjZS5kYXRhLCB0aGlzLnRhYmxlQ29uZmlnKVxyXG4gICAgaWYgKCF0aGlzLl9jdXN0b21EaXNwbGF5Q29sdW1uc0VuYWJsZWQpIHtcclxuICAgICAgdGhpcy5fZGlzcGxheUNvbHVtbnMgPSBEaXNwbGF5Q29sdW1uc0ZhY3RvcnkuY3JlYXRlKHRoaXMudGFibGVDb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlTZWFyY2hGaWx0ZXIoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5maWx0ZXIgPSBmaWx0ZXJWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMuZW1pdEZpbHRlcmVkVmFsdWVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGZpbHRlck5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyU3RvcmFnZS5nZXQoZmlsdGVyTmFtZSkpIHtcclxuICAgICAgdGhpcy5maWx0ZXJTdG9yYWdlLmRlbGV0ZShmaWx0ZXJOYW1lKTtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnNJbnRlcm5hbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGx5RmlsdGVyKGZpbHRlck5hbWU6IHN0cmluZywgZmlsdGVyOiBOZ3hBdXJGaWx0ZXJzLkJhc2U8VD4pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWx0ZXJTdG9yYWdlLmdldChmaWx0ZXJOYW1lKSB8fCAoIXRoaXMuZmlsdGVyU3RvcmFnZS5nZXQoZmlsdGVyTmFtZSkhLmVxdWFscyhmaWx0ZXIpKSkge1xyXG4gICAgICB0aGlzLmZpbHRlclN0b3JhZ2Uuc2V0KGZpbHRlck5hbWUsIGZpbHRlcik7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzSW50ZXJuYWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlclN0b3JhZ2UuY2xlYXIoKTtcclxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzSW50ZXJuYWwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzSW50ZXJuYWwoKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJBY3Rpb25zID0gWy4uLnRoaXMuZmlsdGVyU3RvcmFnZS52YWx1ZXMoKV07XHJcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAoZGF0YSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmlsdGVyQWN0aW9ucy5ldmVyeShmaWx0ZXJBY3Rpb24gPT4gZmlsdGVyQWN0aW9uLmZpbHRlckZuKCkoZGF0YSkpO1xyXG4gICAgfTtcclxuICAgIC8vINCf0YDQuNC80LXQvdC10L3QuNC1INGE0LjQu9GM0YLRgNCw0YbQuNC4LiDQvdGD0LbQvdC+INC/0LXRgNC10LTQsNGC0Ywg0YPQvdC40LrQsNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDRh9GC0L7QsdGLINGE0LjQu9GM0YLRgNCw0YbQuNGPINC30LDQv9GD0YHRgtC40LvQsNGB0YxcclxuICAgIHRoaXMudGFibGVEYXRhU291cmNlLmZpbHRlciA9ICd0cmlnZ2VyLScgKyBNYXRoLnJhbmRvbSgpO1xyXG4gICAgdGhpcy5lbWl0RmlsdGVyZWRWYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdEZpbHRlcmVkVmFsdWVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHRoaXMudGFibGVEYXRhU291cmNlLmZpbHRlcmVkRGF0YS5tYXAoZiA9PiBmLnJvd1NyYykpXHJcbiAgfVxyXG5cclxuICBzb3J0VGFibGUoc29ydFBhcmFtZXRlcnM6IFNvcnQpIHtcclxuICAgIHRoaXMuc29ydC5lbWl0KHNvcnRQYXJhbWV0ZXJzKTtcclxuICB9XHJcblxyXG4gIGVtaXRTZWxlY3RlZFJvd3NBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIHJvd3M6IFRbXSkge1xyXG4gICAgdGhpcy5vblNlbGVjdGVkUm93c0FjdGlvbi5lbWl0KHthY3Rpb24sIHZhbHVlOiByb3dzfSk7XHJcbiAgfVxyXG5cclxuICBlbWl0Um93QWN0aW9uKGFjdGlvbjogc3RyaW5nLCByb3c6IFQsICRldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vblJvd0FjdGlvbi5lbWl0KHthY3Rpb24sIHZhbHVlOiByb3d9KTtcclxuICB9XHJcblxyXG4gIG1hc3RlclRvZ2dsZSgpIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIubWFzdGVyVG9nZ2xlKCk7XHJcbiAgfVxyXG5cclxuICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIuaXNBbGxTZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgY2FzdFNyYyhyb3c6IGFueSk6IFRhYmxlUm93PFQ+IHtcclxuICAgIHJldHVybiByb3c7XHJcbiAgfVxyXG5cclxuICByb3dDbGljayhyb3c6IFRhYmxlUm93PFQ+KSB7XHJcbiAgICBpZiAocm93LnJvd1NyYyAhPT0gdGhpcy5oaWdobGlnaHRlZCB8fCAocm93LnJvd1NyYyA9PT0gdGhpcy5oaWdobGlnaHRlZCAmJiAhdGhpcy50YWJsZUNvbmZpZy5jbGlja0NmZz8uY2FuY2VsYWJsZSkpIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrLmVtaXQocm93LnJvd1NyYyk7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWQgPSByb3cucm93U3JjO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrLmVtaXQodW5kZWZpbmVkKTtcclxuICAgICAgdGhpcy5oaWdobGlnaHRlZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb25Nb2RlbCgpOiBTZWxlY3Rpb25Nb2RlbDxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhvdmVyVGltZXI6IGFueSA9IG51bGw7XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaG92ZXJUaW1lcik7XHJcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbk9mZnNldHNPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdTdGFydCgkZXZlbnQ6IERyYWdFdmVudCwgcm93OiBUYWJsZVJvdzxUPikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIuaXNFbmFibGVkICYmIHRoaXMuZHJhZ0Ryb3BQcm92aWRlci5tdWx0aXBsZSAmJiB0aGlzLnNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCBzZWxlY3RlZFJvd3MgPSB0aGlzLnNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGVkUm93cygpO1xyXG4gICAgICBpZiAoc2VsZWN0ZWRSb3dzLmZpbmQociA9PiByLmlkID09PSByb3cuaWQpKSB7XHJcbiAgICAgICAgdGhpcy5kcmFnRHJvcFByb3ZpZGVyLm1hbmFnZXIuc3RhcnREcmFnKHRoaXMuX3RhYmxlTmFtZSwgc2VsZWN0ZWRSb3dzLCAkZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kcmFnRHJvcFByb3ZpZGVyLm1hbmFnZXIuc3RhcnREcmFnKHRoaXMuX3RhYmxlTmFtZSwgW3Jvd10sICRldmVudCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdPdmVyKCRldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICB0aGlzLmRyYWdEcm9wUHJvdmlkZXIubWFuYWdlci5jYW5Ecm9wUHJldmVudERlZmF1bHQodGhpcy5fdGFibGVOYW1lLCAkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Ecm9wKCRldmVudDogRHJhZ0V2ZW50LCByb3c6IFRhYmxlUm93PFQ+KSB7XHJcbiAgICB0aGlzLmRyYWdEcm9wUHJvdmlkZXIubWFuYWdlci5kcm9wKHRoaXMudGFibGVEYXRhU291cmNlLmRhdGEsIHRoaXMuX3RhYmxlTmFtZSwgcm93KVxyXG4gICAgICAuc3Vic2NyaWJlKGRyb3BSZXN1bHQgPT4ge1xyXG4gICAgICAgIGlmIChkcm9wUmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gZHJvcFJlc3VsdC51cGRhdGVkRGF0YXNldC5tYXAocm93ID0+ICg8VGFibGVSb3c8VD4+cm93KS5yb3dTcmMpXHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIG9uRHJhZ0VuZCgkZXZlbnQ6IERyYWdFdmVudCwgcm93OiBUYWJsZVJvdzxUPikge1xyXG4gICAgdGhpcy5kcmFnRHJvcFByb3ZpZGVyLm1hbmFnZXIuZW5kRHJhZyh0aGlzLnRhYmxlRGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICAuc3Vic2NyaWJlKGRyb3BSZXN1bHQgPT4ge1xyXG4gICAgICAgIGlmIChkcm9wUmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gZHJvcFJlc3VsdC51cGRhdGVkRGF0YXNldC5tYXAocm93ID0+ICg8VGFibGVSb3c8VD4+cm93KS5yb3dTcmMpO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoVGFibGUoKTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhdXItbWF0LXRhYmxlXCJcclxuICAgICBbbmdDbGFzc109XCJ7J2JvdHRvbS1wYWdpbmF0aW9uJzogcGFnaW5hdGlvblByb3ZpZGVyLmlzRW5hYmxlZCAmJiBwYWdpbmF0aW9uUHJvdmlkZXIucG9zaXRpb24gPT09ICdib3R0b20nfVwiPlxyXG4gIDxuZy1jb250YWluZXI+XHJcbiAgICA8IS0tIEZpbHRlciAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZUNvbmZpZy5maWx0ZXJDZmc/LmVuYWJsZSA/PyBmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmd4QXVyVGFibGVTZWFyY2hQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgdGFibGVDb25maWcuZmlsdGVyQ2ZnPy5sYWJlbCB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseVNlYXJjaEZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7dGFibGVDb25maWcuZmlsdGVyQ2ZnPy5wbGFjZWhvbGRlcn19XCJcclxuICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmd4QXVyVGFibGVTZWFyY2hTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCJcclxuICAgICAgICAgW25nQ2xhc3NdPVwieydib3R0b20tcGFnaW5hdGlvbic6IHBhZ2luYXRpb25Qcm92aWRlci5pc0VuYWJsZWQgJiYgcGFnaW5hdGlvblByb3ZpZGVyLnBvc2l0aW9uID09PSAnYm90dG9tJ31cIj5cclxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaGVhZGVyQnV0dG9uUHJvdmlkZXIuaXNFbmFibGVkXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtc2V0dGluZ3MtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJoZWFkZXJCdXR0b25Qcm92aWRlci5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJoZWFkZXJCdXR0b25Qcm92aWRlci5iYWNrZ3JvdW5kXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkhlYWRlckJ1dHRvbi5lbWl0KCRldmVudClcIj5cclxuICAgICAgICB7eyBoZWFkZXJCdXR0b25Qcm92aWRlci5pY29uIH19XHJcbiAgICAgIDwvbWF0LWljb24+XHJcblxyXG4gICAgICA8IS0tIFRhYmxlIC0tPlxyXG4gICAgICA8dGFibGUgI3RhYmxlIG1hdC10YWJsZSBtYXRTb3J0XHJcbiAgICAgICAgICAgICBbbXVsdGlUZW1wbGF0ZURhdGFSb3dzXT1cImV4dGVuZGVkUm93VGVtcGxhdGUgIT09IG51bGxcIlxyXG4gICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwidGFibGVEYXRhU291cmNlXCJcclxuICAgICAgICAgICAgIChtYXRTb3J0Q2hhbmdlKT1cInNvcnRUYWJsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwidGFibGVDb25maWcudGFibGVWaWV3Py5oZWlnaHRcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwidGFibGVDb25maWcudGFibGVWaWV3Py5tYXhIZWlnaHRcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwidGFibGVDb25maWcudGFibGVWaWV3Py5taW5IZWlnaHRcIlxyXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwieydoaWRlLXRhYmxlLWJvZHknOiBpc1RhYmxlQm9keUhpZGV9XCI+XHJcblxyXG5cclxuICAgICAgICA8IS0tICAgICAgICBkcmFnLWNvbHVtbi0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcmFnRHJvcFByb3ZpZGVyLmlzRW5hYmxlZCAmJiBkcmFnRHJvcFByb3ZpZGVyLmRyYWdnYWJsZVwiIFttYXRDb2x1bW5EZWZdPVwiZHJhZ0Ryb3BQcm92aWRlci5DT0xVTU5fTkFNRVwiPlxyXG5cclxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICA8L3RoPlxyXG5cclxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50O1wiIGNsYXNzPVwiZHJhZy1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPGxpYi1pY29uLXZpZXcgIGRyYWdnYWJsZT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZpZXddPVwiZHJhZ0Ryb3BQcm92aWRlci5kcmFnSWNvblZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnZW5kKT1cIm9uRHJhZ0VuZCgkZXZlbnQsIGVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgIDwvbGliLWljb24tdmlldz5cclxuXHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tICAgICAgICBpbmRleC1jb2x1bW4tLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5kZXhQcm92aWRlci5pc0VuYWJsZWRcIiBbbWF0Q29sdW1uRGVmXT1cImluZGV4UHJvdmlkZXIuQ09MVU1OX05BTUVcIj5cclxuXHJcbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICAgICAgICA8bGliLWNvbHVtbi12aWV3IFtjb25maWddPVwiaW5kZXhQcm92aWRlci5oZWFkZXJWaWV3XCI+XHJcbiAgICAgICAgICAgICAge3sgaW5kZXhQcm92aWRlci5uYW1lIH19XHJcbiAgICAgICAgICAgIDwvbGliLWNvbHVtbi12aWV3PlxyXG4gICAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDtcIj5cclxuICAgICAgICAgICAge3sgZWxlbWVudC5pZCArIGluZGV4UHJvdmlkZXIub2Zmc2V0IH19XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XHJcbiAgICAgICAgICAgIHt7IHRvdGFsUm93UHJvdmlkZXIudG90YWxzLmdldChpbmRleFByb3ZpZGVyLkNPTFVNTl9OQU1FKSB8fCAnJyB9fVxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSAgICAgICAgc2VsZWN0aW9uLWNvbHVtbi0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJzZWxlY3Rpb25Qcm92aWRlci5DT0xVTU5fTkFNRVwiICpuZ0lmPVwic2VsZWN0aW9uUHJvdmlkZXIuaXNFbmFibGVkXCI+XHJcbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwiJGV2ZW50ID8gbWFzdGVyVG9nZ2xlKCkgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIGlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZy5zZWxlY3Rpb25DZmc/LnNob3dTZWxlY3RlZENvdW50ICYmIHNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5oYXNWYWx1ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlQ29uZmlnLnNlbGVjdGlvbkNmZz8uc2hvd1RvdGFsQ291bnQgIT09IGZhbHNlXCI+L3t7IHBhZ2luYXRvclN0YXRlPy5sZW5ndGggPyBwYWdpbmF0b3JTdGF0ZT8ubGVuZ3RoIDogdGFibGVEYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiB0YWJsZUNvbmZpZz8uc2VsZWN0aW9uQ2ZnPy5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdGFibGVDb25maWcuc2VsZWN0aW9uQ2ZnIS5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVtaXRTZWxlY3RlZFJvd3NBY3Rpb24oYWN0aW9uLmFjdGlvbiwgc2VsZWN0aW9uUHJvdmlkZXIuc2VsZWN0aW9uLnNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYWN0aW9uLmljb24udG9vbHRpcCB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uZGlzcGxheSAhPT0gJ25vbmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtzdHlsZS5jb2xvcl09XCJhY3Rpb24uaWNvbi5jb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLmljb24ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24udG9nZ2xlKGNhc3RTcmMocm93KS5yb3dTcmMpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24udG9nZ2xlKGNhc3RTcmMocm93KS5yb3dTcmMpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uUHJvdmlkZXIuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoY2FzdFNyYyhyb3cpLnJvd1NyYylcIj5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIGFjdGlvbiBjb2x1bW4gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0FjdGlvbnNQcm92aWRlci5pc0VuYWJsZWRcIiBbbWF0Q29sdW1uRGVmXT1cInJvd0FjdGlvbnNQcm92aWRlci5DT0xVTU5fTkFNRVwiPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L3RoPlxyXG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgc3R5bGU9XCJjdXJzb3I6IGRlZmF1bHRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHJvd0FjdGlvbnNQcm92aWRlci5hY3Rpb25WaWV3LmdldChlbGVtZW50LmlkKVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW1pdFJvd0FjdGlvbihhY3Rpb24uYWN0aW9uLCBlbGVtZW50LnJvd1NyYywgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJhY3Rpb24uaWNvbi50b29sdGlwIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLmRpc3BsYXkgIT09ICdub25lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIFtzdHlsZS5jb2xvcl09XCJhY3Rpb24uaWNvbi5jb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBhY3Rpb24uaWNvbi5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlckNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogcm93QWN0aW9uc1Byb3ZpZGVyLkNPTFVNTl9OQU1FfVwiPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gICAgdmFsdWUtaWNvbi0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbkNvbmZpZyBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zQ2ZnXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW5Db25maWcua2V5XCI+XHJcblxyXG4gICAgICAgICAgPCEtLSBpZiBzb3J0YWJsZSBjb2x1bW4gaGVhZGVyIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkNvbmZpZy5zb3J0ICYmIGNvbHVtbkNvbmZpZy5zb3J0LmVuYWJsZTsgZWxzZSBub3RTb3J0YWJsZVwiPlxyXG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFttYXQtc29ydC1oZWFkZXJdPVwiY29sdW1uQ29uZmlnLmtleVwiXHJcbiAgICAgICAgICAgICAgICBbYXJyb3dQb3NpdGlvbl09XCJjb2x1bW5Db25maWcuc29ydC5wb3NpdGlvbiA9PT0gJ3JpZ2h0JyA/ICdiZWZvcmUnIDogJ2FmdGVyJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJWYWx1ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPCEtLSBlbHNlIG5vdCBzb3J0YWJsZSAtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90U29ydGFibGU+XHJcbiAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclZhbHVlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDwhLS0gICAgICBoZWFkZXIgdmFsdWUtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyVmFsdWU+XHJcbiAgICAgICAgICAgIDxsaWItY29sdW1uLXZpZXcgW2NvbmZpZ109XCJjb2x1bW5Db25maWcuaGVhZGVyVmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbHVtbkNvbmZpZy5uYW1lXCI+XHJcbiAgICAgICAgICAgIDwvbGliLWNvbHVtbi12aWV3PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICA8IS0tIGNvbHVtbiB2YWx1ZSDQv9C+0LvRg9GH0LDRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQutC+0LvQvtC90L7QuiDQvdGD0LbQvdC+INGH0LXRgNC10LcgZ2V0Vmlldyhyb3dJbmRleCwgY29sdW1uQ29uZmlnLmtleSkg0YLQsNC8INC90LDRhdC+0LTRj9GC0YHRjyDRg9C20LVcclxuICAgICAgICAgINC/0L7QtNCz0L7RgtC+0LLQu9C10L3QvdGL0LUg0LfQvdCw0YfQtdC90LjRjyDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8tLT5cclxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50O1wiPlxyXG4gICAgICAgICAgICA8bGliLWNvbHVtbi12aWV3XHJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ0YWJsZVZpZXdbZWxlbWVudC5pZF0/LmdldChjb2x1bW5Db25maWcua2V5KVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImVsZW1lbnQgfCBkYXRhUHJvcGVydHlHZXR0ZXI6IGNvbHVtbkNvbmZpZy5rZXlcIj5cclxuICAgICAgICAgICAgPC9saWItY29sdW1uLXZpZXc+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XHJcbiAgICAgICAgICAgIHt7IHRvdGFsUm93UHJvdmlkZXIudG90YWxzLmdldChjb2x1bW5Db25maWcua2V5KSB8fCAnJyB9fVxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gICAgICAgIGV4dHJhIGhlYWRlciB0b3AgY2VsbC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGV4dHJhVG9wQ2VsbCBvZiBfZGlzcGxheUV4dHJhSGVhZGVyVG9wQ2VsbDsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdENvbHVtbkRlZl09XCJleHRyYVRvcENlbGxcIj5cclxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImV4dHJhSGVhZGVyQ2VsbFRvcFRlbXBsYXRlOyBjb250ZXh0OiB7a2V5OiBleHRyYVRvcENlbGwucmVwbGFjZShFWFRSQV9IRUFERVJfQ0VMTF9UT1BfU1VGRklYLCAnJyksIGluZGV4OiBpbmRleH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICA8IS0tICAgICAgICBleHRyYSBoZWFkZXIgYm90dG9tIGNlbGwtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBleHRyYUJvdHRvbUNlbGwgIG9mIF9kaXNwbGF5RXh0cmFIZWFkZXJCb3R0b21DZWxsOyBsZXQgaW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImV4dHJhQm90dG9tQ2VsbFwiPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXh0cmFIZWFkZXJDZWxsQm90dG9tVGVtcGxhdGU7IGNvbnRleHQ6IHtrZXk6IGV4dHJhQm90dG9tQ2VsbC5yZXBsYWNlKEVYVFJBX0hFQURFUl9DRUxMX0JPVFRPTV9TVUZGSVgsICcnKSwgaW5kZXg6IGluZGV4fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSAgICAgICAgZXh0cmEgaGVhZGVyIHRvcCByb3ctLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXh0cmFIZWFkZXJDZWxsVG9wVGVtcGxhdGVcIj5cclxuICAgICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiX2Rpc3BsYXlFeHRyYUhlYWRlclRvcENlbGw7ICBzdGlja3k6IHRoaXMudGFibGVDb25maWcuc3RpY2t5Q2ZnPy5oZWFkZXJcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXh0cmEtaGVhZGVyLXRvcC1yb3dcIj5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gICAgICAgIGhlYWRlciAgcm93LS0+XHJcbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJfZGlzcGxheUNvbHVtbnM7ICBzdGlja3k6IHRoaXMudGFibGVDb25maWcuc3RpY2t5Q2ZnPy5oZWFkZXJcIj5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICA8IS0tICAgICAgICBleHRyYSBoZWFkZXIgYm90dG9tIHJvdyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXh0cmFIZWFkZXJDZWxsQm90dG9tVGVtcGxhdGVcIj5cclxuICAgICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJfZGlzcGxheUV4dHJhSGVhZGVyQm90dG9tQ2VsbDsgIHN0aWNreTogdGhpcy50YWJsZUNvbmZpZy5zdGlja3lDZmc/LmhlYWRlclwiPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPHRyIG1hdC1yb3cgI3Jvd0xpbmtcclxuICAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQsIHJvdylcIlxyXG4gICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogX2Rpc3BsYXlDb2x1bW5zO1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJyb3dDbGljayhyb3cpXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydwb2ludGVyJzogdGFibGVDb25maWcuY2xpY2tDZmc/LnBvaW50ZXIgfHwgZmFsc2UsICduZXctY29sb3InOiBoaWdobGlnaHRlZD09PXJvdy5yb3dTcmMgJiYgdGFibGVDb25maWc/LmNsaWNrQ2ZnPy5oaWdobGlnaHRDbGlja2VkPy5jb2xvcn1cIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAnY29sb3InOiBoaWdobGlnaHRlZD09PXJvdy5yb3dTcmM/IHRhYmxlQ29uZmlnPy5jbGlja0NmZz8uaGlnaGxpZ2h0Q2xpY2tlZD8uY29sb3IgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGhpZ2hsaWdodGVkID09PSByb3cucm93U3JjPyB0YWJsZUNvbmZpZz8uY2xpY2tDZmc/LmhpZ2hsaWdodENsaWNrZWQ/LmJhY2tncm91bmQgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAnYm9yZGVyJzogaGlnaGxpZ2h0ZWQgPT09IHJvdy5yb3dTcmM/IHRhYmxlQ29uZmlnPy5jbGlja0NmZz8uaGlnaGxpZ2h0Q2xpY2tlZD8uYm9yZGVyIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICB9XCI+XHJcbiAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgPCEtLWV4cGFuZGVkLXJvdy0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWRSb3dcIj5cclxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cImV4cGFuZGVkLWNlbGxcIiAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCIgW2F0dHIuY29sc3Bhbl09XCJfZGlzcGxheUNvbHVtbnMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWRldGFpbFwiXHJcbiAgICAgICAgICAgICAgICAgW0BkZXRhaWxFeHBhbmRdPVwiZWxlbWVudC5yb3dTcmMgPT09IGhpZ2hsaWdodGVkID8gZXhwYW5kZWRTdGF0ZUVudW0uRVhQQU5ERUQgOiBleHBhbmRlZFN0YXRlRW51bS5DT0xMQVBTRURcIj5cclxuICAgICAgICAgICAgICA8IS0tIGxhenktbG9hZCBvZiBkZXRhaWxzIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbGVtZW50LnJvd1NyYyA9PT0gaGlnaGxpZ2h0ZWRcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHRlbmRlZFJvd1RlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBlbGVtZW50fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJleHRlbmRlZFJvd1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICA8dHIgbWF0LXJvdyBjbGFzcz1cImV4cGFuZGVkLXJvd1wiICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkUm93J11cIj48L3RyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS1leHBhbmRlZC1yb3ctLT5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvdGFsUm93UHJvdmlkZXIuaXNFbmFibGVkXCI+XHJcbiAgICAgICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cIl9kaXNwbGF5Q29sdW1uczsgc3RpY2t5OiB0aGlzLnRhYmxlQ29uZmlnLnN0aWNreUNmZz8udG90YWxcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZV09XCJ0b3RhbFJvd1Byb3ZpZGVyLnN0eWxlXCI+PC90cj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLXN1Yi1mb290ZXItcm93LS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdWJGb290ZXJSb3dcIj5cclxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW2F0dHIuY29sc3Bhbl09XCJfZGlzcGxheUNvbHVtbnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25neEF1clRhYmxlU3ViRm9vdGVyUm93XVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViRm9vdGVyUm93VGVtcGxhdGVcIj5cclxuICAgICAgICAgIDx0ciBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwiWydzdWJGb290ZXJSb3cnXTsgc3RpY2t5OiB0aGlzLnRhYmxlQ29uZmlnLnN0aWNreUNmZz8uc3ViRm9vdGVyXCI+PC90cj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tICAgICAgc3ViLWZvb3Rlci1yb3cgRU5ELS0+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBQYWdpbmF0aW9uIC0tPlxyXG4gIEBpZiAodGhpcy5wYWdpbmF0aW9uUHJvdmlkZXIuaXNFbmFibGVkKSB7XHJcbiAgICA8bWF0LXBhZ2luYXRvciBbbmdDbGFzc109XCJ7J2hpZGVQYWdpbmF0b3InOiBpc1RhYmxlQm9keUhpZGV9XCJcclxuICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdGlvblByb3ZpZGVyLnNpemVzXCJcclxuICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdpbmF0aW9uUHJvdmlkZXIuc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwidGFibGVDb25maWc/LnBhZ2VhYmxlQ2ZnPy5zdHlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbbGVuZ3RoXT1cInBhZ2luYXRvclN0YXRlPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdpbmF0b3JTdGF0ZT8ucGFnZUluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgIChwYWdlKT1cInBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgIHNob3dGaXJzdExhc3RCdXR0b25zPlxyXG4gICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2Zvb3RlckNlbGxUZW1wbGF0ZSBsZXQtY29sdW1uTmFtZT5cclxuICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxyXG4gICAge3sgdG90YWxSb3dQcm92aWRlci50b3RhbHMuZ2V0KGNvbHVtbk5hbWUpIHx8ICcnIH19XHJcbiAgPC90ZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWF1ci1tYXQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWF1ci1tYXQtdGFibGUvc3JjL2xpYi9uZ3gtYXVyLW1hdC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYXVyLW1hdC10YWJsZS9zcmMvbGliL25neC1hdXItbWF0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBSU4sU0FBUyxFQUNULFlBQVksRUFFYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsT0FBTyxFQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBWSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3hGLE9BQU8sRUFBYyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRXJHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxhQUFhLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsVUFB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ckMsS0FBSztnQkFHdUMsSUFBSTtzQkFBaEQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDO2dCQUVILEtBQUs7c0JBQTVDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQztnQkFHN0IsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR29DLFlBQVk7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFFSixPQUFPO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBRXhCLElBQUk7c0JBQWIsTUFBTTtnQkFFRyxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFdBQVc7c0JBQXBCLE1BQU07Z0JBSUcsUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUcsb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR0csVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxRQUFRO3NCQUFqQixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTTtnQkF5QkUsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbHVtblZpZXcsIFRhYmxlQ29uZmlnfSBmcm9tICcuL21vZGVsL0NvbHVtbkNvbmZpZyc7XHJcbmltcG9ydCB7TWF0U29ydCwgU29ydH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7TWF0VGFibGVEYXRhU291cmNlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7TWF0UGFnaW5hdG9yLCBQYWdlRXZlbnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7U2VsZWN0aW9uUHJvdmlkZXIsIFNlbGVjdGlvblByb3ZpZGVyRHVtbXl9IGZyb20gJy4vcHJvdmlkZXJzL1NlbGVjdGlvblByb3ZpZGVyJztcclxuaW1wb3J0IHtBY3Rpb25FdmVudCwgUm93QWN0aW9uUHJvdmlkZXIsIFJvd0FjdGlvblByb3ZpZGVyRHVtbXl9IGZyb20gJy4vcHJvdmlkZXJzL1Jvd0FjdGlvblByb3ZpZGVyJztcclxuaW1wb3J0IHtUYWJsZVJvd30gZnJvbSBcIi4vbW9kZWwvVGFibGVSb3dcIjtcclxuaW1wb3J0IHtUYWJsZVZpZXdGYWN0b3J5fSBmcm9tIFwiLi9tb2RlbC9UYWJsZVZpZXdGYWN0b3J5XCI7XHJcbmltcG9ydCB7SW5kZXhQcm92aWRlciwgSW5kZXhQcm92aWRlckR1bW15fSBmcm9tIFwiLi9wcm92aWRlcnMvSW5kZXhQcm92aWRlclwiO1xyXG5pbXBvcnQge1BhZ2luYXRpb25Qcm92aWRlciwgUGFnaW5hdGlvblByb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9QYWdpbmF0aW9uUHJvdmlkZXJcIjtcclxuaW1wb3J0IHtNYXRUYWJsZURhdGFTb3VyY2VGYWN0b3J5fSBmcm9tIFwiLi9mYWN0b3JpZXMvTWF0VGFibGVEYXRhU291cmNlRmFjdG9yeVwiO1xyXG5pbXBvcnQge0Rpc3BsYXlDb2x1bW5zRmFjdG9yeX0gZnJvbSBcIi4vZmFjdG9yaWVzL0Rpc3BsYXlDb2x1bW5zRmFjdG9yeVwiO1xyXG5pbXBvcnQge0VtcHR5VmFsdWV9IGZyb20gXCIuL21vZGVsL0VtcHR5VmFsdWVcIjtcclxuaW1wb3J0IHtUb3RhbFJvd1Byb3ZpZGVyLCBUb3RhbFJvd1Byb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9Ub3RhbFJvd1Byb3ZpZGVyXCI7XHJcbmltcG9ydCB7Tmd4QXVyRmlsdGVyc30gZnJvbSBcIi4vZmlsdGVycy9OZ3hBdXJGaWx0ZXJzXCI7XHJcbmltcG9ydCB7Tmd4QXVyTWF0VGFibGVQdWJsaWN9IGZyb20gXCIuL25neC1hdXItbWF0LXRhYmxlLXB1YmxpY1wiO1xyXG5pbXBvcnQge09mZnNldFV0aWx9IGZyb20gXCIuL3V0aWxzL29mZnNldC51dGlsXCI7XHJcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5pbXBvcnQge05neFRhYmxlU3ViRm9vdGVyUm93RGlyZWN0aXZlfSBmcm9tIFwiLi9kaXJlY3RpdmUvbmd4LXRhYmxlLXN1Yi1mb290ZXItcm93LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zXCI7XHJcbmltcG9ydCB7SGVhZGVyQnV0dG9uUHJvdmlkZXIsIEhlYWRlckJ1dHRvblByb3ZpZGVyRHVtbXl9IGZyb20gXCIuL3Byb3ZpZGVycy9IZWFkZXJCdXR0b25Qcm92aWRlclwiO1xyXG5pbXBvcnQge0RyYWdEcm9wUHJvdmlkZXIsIERyYWdQcm92aWRlckR1bW15fSBmcm9tIFwiLi9wcm92aWRlcnMvRHJhZ0Ryb3BQcm92aWRlclwiO1xyXG5pbXBvcnQge0F1ckRyYWdEcm9wQ29tcG9uZW50fSBmcm9tIFwiLi9kcmFnLWRyb3AvYXVyLWRyYWctZHJvcC1jb21wb25lbnRcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgUGFnaW5hdG9yU3RhdGUge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sZW5ndGg6IG51bWJlciwgcHJpdmF0ZSBfcGFnZUluZGV4OiBudW1iZXIpIHtcclxuICB9XHJcblxyXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFnZUluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFnZUluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBlbXB0eSgpOiBQYWdpbmF0b3JTdGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IFBhZ2luYXRvclN0YXRlKDAsIDApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIaWdobGlnaHRDb250YWluZXI8VD4ge1xyXG4gIHZhbHVlOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uT2Zmc2V0IHtcclxuICBsZWZ0OiBudW1iZXIsXHJcbiAgd2lkdGg6IG51bWJlcixcclxuICBrZXk6IHN0cmluZ1xyXG59XHJcblxyXG5lbnVtIEV4cGFuZFN0YXRlIHtcclxuICBDT0xMQVBTRUQgPSAnY29sbGFwc2VkJyxcclxuICBFWFBBTkRFRCA9ICdleHBhbmRlZCdcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhdXItbWF0LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LWF1ci1tYXQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25neC1hdXItbWF0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xyXG4gICAgICBzdGF0ZShFeHBhbmRTdGF0ZS5DT0xMQVBTRUQsIHN0eWxlKHtoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJ30pKSxcclxuICAgICAgc3RhdGUoRXhwYW5kU3RhdGUuRVhQQU5ERUQsIHN0eWxlKHtoZWlnaHQ6ICcqJ30pKSxcclxuICAgICAgdHJhbnNpdGlvbihgJHtFeHBhbmRTdGF0ZS5FWFBBTkRFRH0gPD0+ICR7RXhwYW5kU3RhdGUuQ09MTEFQU0VEfWAsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hBdXJNYXRUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3ksIE5neEF1ck1hdFRhYmxlUHVibGljPFQ+LCBBdXJEcmFnRHJvcENvbXBvbmVudDxUYWJsZVJvdzxUPj4ge1xyXG5cclxuICBleHBhbmRlZFN0YXRlRW51bSA9IEV4cGFuZFN0YXRlO1xyXG5cclxuICByZWFkb25seSBFWFRSQV9IRUFERVJfQ0VMTF9UT1BfU1VGRklYID0gJ19leHRyYV9oZWFkZXJfY2VsbF90b3AnO1xyXG4gIHJlYWRvbmx5IEVYVFJBX0hFQURFUl9DRUxMX0JPVFRPTV9TVUZGSVggPSAnX2V4dHJhX2hlYWRlcl9jZWxsX2JvdHRvbSc7XHJcblxyXG4gIHB1YmxpYyB0YWJsZURhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFRhYmxlUm93PFQ+PihbXSk7XHJcbiAgX2Rpc3BsYXlDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIF9kaXNwbGF5RXh0cmFIZWFkZXJUb3BDZWxsOiBzdHJpbmdbXSA9IFtdO1xyXG4gIF9kaXNwbGF5RXh0cmFIZWFkZXJCb3R0b21DZWxsOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBfY3VzdG9tRGlzcGxheUNvbHVtbnNFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gIF90YWJsZU5hbWUgPSAndW5rbm93bi10YWJsZS1uYW1lJztcclxuXHJcbiAgQElucHV0KCkgc2V0IGRpc3BsYXlDb2x1bW5zKGNvbHVtbnM6IHN0cmluZ1tdKSB7XHJcbiAgICBpZiAoY29sdW1ucykge1xyXG4gICAgICB0aGlzLl9kaXNwbGF5Q29sdW1ucyA9IFsuLi5jb2x1bW5zXTtcclxuICAgICAgdGhpcy5fY3VzdG9tRGlzcGxheUNvbHVtbnNFbmFibGVkID0gY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0YWJsZVZpZXc6IE1hcDxzdHJpbmcsIENvbHVtblZpZXc8c3RyaW5nPj5bXSA9IFtdO1xyXG5cclxuICBAQ29udGVudENoaWxkKE5neFRhYmxlU3ViRm9vdGVyUm93RGlyZWN0aXZlKSBzdWJGb290ZXJSb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBASW5wdXQoKSBleHRyYUhlYWRlckNlbGxUb3BUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XHJcblxyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBASW5wdXQoKSBleHRyYUhlYWRlckNlbGxCb3R0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XHJcblxyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBAVmlld0NoaWxkcmVuKCdyb3dMaW5rJywge3JlYWQ6IEVsZW1lbnRSZWZ9KSByb3dzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywge3JlYWQ6IEVsZW1lbnRSZWZ9KSB0YWJsZTogRWxlbWVudFJlZjtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBJbnB1dCgpIHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZzxUPjtcclxuXHJcbiAgQElucHV0KCkgdGFibGVEYXRhOiBUW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgZXh0ZW5kZWRSb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvLyDQtdGB0LvQuCDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0YHQtdGA0LLQtdGA0L3Ri9C5INC/0LDQs9C40L3QsNGC0L7RgCwg0YHRjtC00LAg0L/QtdGA0LXQtNCw0LXRgtGB0Y8g0YLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC/0LDQs9C40L3QsNGC0L7RgNCwXHJcbiAgQElucHV0KCkgcGFnaW5hdG9yU3RhdGU6IFBhZ2luYXRvclN0YXRlIHwgdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKSBpc1RhYmxlQm9keUhpZGUgPSBmYWxzZTtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7c3RhdGljOiBmYWxzZX0pIG1hdFBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBAVmlld0NoaWxkKE1hdFNvcnQsIHtzdGF0aWM6IHRydWV9KSBtYXRTb3J0OiBNYXRTb3J0O1xyXG5cclxuICBAT3V0cHV0KCkgc29ydDogRXZlbnRFbWl0dGVyPFNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PigpO1xyXG5cclxuICAvLyBldmVudHMgaWYgZW5hYmxlZCBhY3Rpb25zXHJcbiAgQE91dHB1dCgpIG9uUm93QWN0aW9uOiBFdmVudEVtaXR0ZXI8QWN0aW9uRXZlbnQ8VD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb25FdmVudDxUPj4oKTtcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvLyBldmVudHMgaWYgZW5hYmxlZCBzZWxlY3QgZXZlbnRcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcclxuICBAT3V0cHV0KCkgb25EZXNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25TZWxlY3RlZFJvd3NBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbkV2ZW50PFRbXT4+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25Nb2RlbCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uTW9kZWw8VD4+KCk7XHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgQE91dHB1dCgpIG9uUm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybiBmaWx0ZXJlZCByb3dzXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9uRmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcblxyXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgZXh0cmFIZWFkZXJDZWxsVG9wVGVtcGxhdGUgb3IgZXh0cmFIZWFkZXJDZWxsQm90dG9tVGVtcGxhdGUgKi9cclxuICBAT3V0cHV0KCkgY29sdW1uT2Zmc2V0cyA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uT2Zmc2V0W10+KCk7XHJcbiAgcHJpdmF0ZSBwcmV2Q29sdW1uT2Zmc2V0czogQ29sdW1uT2Zmc2V0W10gPSBbXTtcclxuXHJcbiAgaGVhZGVyQnV0dG9uUHJvdmlkZXIgPSBuZXcgSGVhZGVyQnV0dG9uUHJvdmlkZXJEdW1teSgpO1xyXG4gIEBPdXRwdXQoKSBvbkhlYWRlckJ1dHRvbiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcclxuXHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIHByaXZhdGUgcmVzaXplQ29sdW1uT2Zmc2V0c09ic2VydmVyOiBSZXNpemVPYnNlcnZlciA9IEVtcHR5VmFsdWUuUkVTSVpFX09CU0VSVkVSO1xyXG5cclxuICBkcmFnRHJvcFByb3ZpZGVyOiBEcmFnRHJvcFByb3ZpZGVyPFQ+ID0gbmV3IERyYWdQcm92aWRlckR1bW15KCk7XHJcblxyXG4gIHNlbGVjdGlvblByb3ZpZGVyOiBTZWxlY3Rpb25Qcm92aWRlcjxUPiA9IG5ldyBTZWxlY3Rpb25Qcm92aWRlckR1bW15KCk7XHJcblxyXG4gIHJvd0FjdGlvbnNQcm92aWRlcjogUm93QWN0aW9uUHJvdmlkZXI8VD4gPSBuZXcgUm93QWN0aW9uUHJvdmlkZXJEdW1teTxUPigpO1xyXG5cclxuICBpbmRleFByb3ZpZGVyOiBJbmRleFByb3ZpZGVyID0gbmV3IEluZGV4UHJvdmlkZXJEdW1teSgpO1xyXG5cclxuICBwYWdpbmF0aW9uUHJvdmlkZXI6IFBhZ2luYXRpb25Qcm92aWRlciA9IG5ldyBQYWdpbmF0aW9uUHJvdmlkZXJEdW1teSgpO1xyXG5cclxuICB0b3RhbFJvd1Byb3ZpZGVyOiBUb3RhbFJvd1Byb3ZpZGVyPFQ+ID0gbmV3IFRvdGFsUm93UHJvdmlkZXJEdW1teSgpO1xyXG5cclxuICBoaWdobGlnaHRlZDogVCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBjdXN0b21Tb3J0RnVuY3Rpb25zID0gbmV3IE1hcDxzdHJpbmcsIChkYXRhOiBUYWJsZVJvdzxUPiwga2V5OiBzdHJpbmcpID0+IGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJTdG9yYWdlID0gbmV3IE1hcDxzdHJpbmcsIE5neEF1ckZpbHRlcnMuQmFzZTxUPj4oKTtcclxuXHJcbiAgLy/Qt9C90LDRh9C10L3QuNC1INC/0LXRgNC10LTQsNC10YLRgdGPINCyINC60L7QvdGC0LXQudC90LXRgNC1INC40L3QsNGH0LUgT25DaGFuZ2Ug0L3QtSDQstC40LTQuNGCINC40LfQvNC10L3QtdC90LjQuSDQutC+0LPQtNCwINC/0LXRgNC10LTQsNGO0YLRgdGPINC+0LTQuNC90LDQutC+0LLRi9C1INC30L3QsNGH0LXQvdC40LUg0Lgg0L/QvtC00YHQstC10YLQutCwINGB0YLRgNC+0LrQuCDQvdC1INC+0YLQutC70Y7Rh9Cw0LXRgtGB0Y9cclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0OiBIaWdobGlnaHRDb250YWluZXI8VD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICgoY2hhbmdlc1sndGFibGVEYXRhJ10gJiYgdGhpcy50YWJsZURhdGEpIHx8IChjaGFuZ2VzWydkaXNwbGF5Q29sdW1ucyddICYmIHRoaXMuX2Rpc3BsYXlDb2x1bW5zKSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2hpZ2hsaWdodCddICYmIHRoaXMuaGlnaGxpZ2h0KSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlSGlnaGxpZ2h0Q2hhbmdlKHRoaXMuaGlnaGxpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldFBhZ2luYXRvclBhZ2VJbmRleCgpIHtcclxuICAgIGlmICh0aGlzLm1hdFBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLm1hdFBhZ2luYXRvci5maXJzdFBhZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoVGFibGUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uUHJvdmlkZXI/LnNlbGVjdGlvbj8uc2VsZWN0ZWQgPz8gW107XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMudGFibGVEYXRhIHx8IFtdO1xyXG4gICAgdGhpcy5wcmVwYXJlVGFibGVEYXRhKHNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlSGlnaGxpZ2h0Q2hhbmdlKGg6IEhpZ2hsaWdodENvbnRhaW5lcjxUPikge1xyXG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWQgPT09IGgudmFsdWUpIHtcclxuICAgICAgdGhpcy5oaWdobGlnaHQgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodGVkID0gaC52YWx1ZTtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYmxlRGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChyb3cgPT4gcm93LnJvd1NyYyA9PT0gaC52YWx1ZSk7XHJcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5yb3dzPy50b0FycmF5KClbaW5kZXhdPy5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtcclxuICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxyXG4gICAgICAgICAgYmxvY2s6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBpbmxpbmU6IFwiY2VudGVyXCJcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudGFibGVDb25maWcpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW5pdCBpbnB1dHMgW3RhYmxlQ29uZmlnXSBpcyBtYW5kYXRvcnkhXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyB3ZSBuZWVkIHRoaXMsIGluIG9yZGVyIHRvIG1ha2UgcGFnaW5hdGlvbiB3b3JrIHdpdGggKm5nSWZcclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRQYWdpbmF0b3IoKVxyXG4gICAgdGhpcy5pbml0U29ydGluZ0RhdGFBY2Nlc3NvcigpO1xyXG4gICAgdGhpcy5yZXNpemVDb2x1bW5PZmZzZXRzT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdGhpcy51cGRhdGVDb2x1bW5PZmZzZXRzKCkpO1xyXG4gICAgdGhpcy5yZXNpemVDb2x1bW5PZmZzZXRzT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgdGhpcy51cGRhdGVDb2x1bW5PZmZzZXRzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRQYWdpbmF0b3IoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50YWJsZURhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5tYXRQYWdpbmF0b3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRTb3J0aW5nRGF0YUFjY2Vzc29yKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudGFibGVEYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3IgPSAoZGF0YSwga2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tU29ydEZ1bmN0aW9uID0gdGhpcy5jdXN0b21Tb3J0RnVuY3Rpb25zLmdldChrZXkpO1xyXG4gICAgICAgIHJldHVybiBjdXN0b21Tb3J0RnVuY3Rpb24gPyBjdXN0b21Tb3J0RnVuY3Rpb24oZGF0YSwga2V5KSA6IGRhdGFba2V5XTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uT2Zmc2V0cygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldHM6IENvbHVtbk9mZnNldFtdID0gQXJyYXkuZnJvbSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndGgnKSlcclxuICAgICAgICAubWFwKChjKSA9PiAoYyBhcyBIVE1MRWxlbWVudCkpXHJcbiAgICAgICAgLm1hcCgoYywgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICBsZWZ0OiBjLm9mZnNldExlZnQsXHJcbiAgICAgICAgICB3aWR0aDogYy5vZmZzZXRXaWR0aCxcclxuICAgICAgICAgIGtleTogdGhpcy5fZGlzcGxheUNvbHVtbnNbaW5kZXhdXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICBpZiAoT2Zmc2V0VXRpbC5hcmVOb3RFcXVhbCh0aGlzLnByZXZDb2x1bW5PZmZzZXRzLCBvZmZzZXRzKSkge1xyXG4gICAgICAgIHRoaXMucHJldkNvbHVtbk9mZnNldHMgPSBvZmZzZXRzO1xyXG4gICAgICAgIHRoaXMuY29sdW1uT2Zmc2V0cy5lbWl0KG9mZnNldHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVUYWJsZURhdGEoaW5pdFNlbGVjdGlvbjogVFtdID0gW10pIHtcclxuICAgIHRoaXMuaW5pdFRhYmxlKCk7XHJcbiAgICB0aGlzLmluaXRDdXN0b21Tb3J0RnVuY3Rpb25zTWFwKCk7XHJcbiAgICBpZiAoIXRoaXMucGFnaW5hdG9yU3RhdGUpIHtcclxuICAgICAgLy8g0LXRgdC70Lgg0L/QsNCz0LjQvdCw0YLQvtGAINC90LUg0YHQtdGA0LLQtdGA0L3Ri9C5INGC0L4g0LXQs9C+INGPINC30LTQtdGB0Ywg0LjQvdC40YbQuNCw0LvQuNC30LjRgNGD0Y4g0LjQvdCw0YfQtSDQv9GA0Lgg0L7QsdC90L7QstC70LXQvdC40Lgg0LTQsNC90L3Ri9GFINC/0LDQs9C40L3QsNGC0L7RgCDQu9C+0LzQsNC10YLRgdGPINC4INC+0YLQvtCx0YDQsNC20LDRjtGC0YHRjyDQstGB0LUg0Y3Qu9C10LzQtdC90YLRi1xyXG4gICAgICB0aGlzLmluaXRQYWdpbmF0b3IoKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdFNvcnRpbmdEYXRhQWNjZXNzb3IoKTtcclxuXHJcbiAgICB0aGlzLmluZGV4UHJvdmlkZXIgPSBJbmRleFByb3ZpZGVyLmNyZWF0ZSh0aGlzLnRhYmxlQ29uZmlnKVxyXG4gICAgICAuYWRkSW5kZXhDb2x1bW4odGhpcy5fZGlzcGxheUNvbHVtbnMpO1xyXG5cclxuICAgIHRoaXMucm93QWN0aW9uc1Byb3ZpZGVyID0gUm93QWN0aW9uUHJvdmlkZXIuY3JlYXRlKHRoaXMudGFibGVDb25maWcpXHJcbiAgICAgIC5hZGRBY3Rpb25Db2x1bW4odGhpcy5fZGlzcGxheUNvbHVtbnMpXHJcbiAgICAgIC5zZXRWaWV3KHRoaXMudGFibGVEYXRhU291cmNlLmRhdGEpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIgPSBTZWxlY3Rpb25Qcm92aWRlci5jcmVhdGUodGhpcy50YWJsZUNvbmZpZywgdGhpcy50YWJsZURhdGFTb3VyY2UsIGluaXRTZWxlY3Rpb24pXHJcbiAgICAgIC5hZGRDaGVja2JveENvbHVtbih0aGlzLl9kaXNwbGF5Q29sdW1ucylcclxuICAgICAgLmJpbmRFdmVudEVtaXR0ZXJzKHRoaXMuc2VsZWN0ZWQsIHRoaXMub25TZWxlY3QsIHRoaXMub25EZXNlbGVjdCwgdGhpcy5zZWxlY3Rpb25Nb2RlbCk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0aW9uUHJvdmlkZXIgPSBQYWdpbmF0aW9uUHJvdmlkZXIuY3JlYXRlKHRoaXMudGFibGVDb25maWcpO1xyXG5cclxuICAgIHRoaXMudG90YWxSb3dQcm92aWRlciA9IFRvdGFsUm93UHJvdmlkZXIuY3JlYXRlKHRoaXMudGFibGVDb25maWcsIHRoaXMudGFibGVEYXRhU291cmNlKVxyXG4gICAgICAuc2V0U3R5bGUoKVxyXG4gICAgICAuc2V0VG90YWxSb3coKTtcclxuXHJcbiAgICB0aGlzLmhlYWRlckJ1dHRvblByb3ZpZGVyID0gbmV3IEhlYWRlckJ1dHRvblByb3ZpZGVyKHRoaXMudGFibGVDb25maWcudGFibGVIZWFkZXJCdXR0b25DZmcpXHJcblxyXG4gICAgdGhpcy5kcmFnRHJvcFByb3ZpZGVyID0gRHJhZ0Ryb3BQcm92aWRlci5jcmVhdGUodGhpcy52aWV3Q29udGFpbmVyUmVmLCB0aGlzLnRhYmxlQ29uZmlnKVxyXG4gICAgICAuYWRkQ29sdW1uKHRoaXMuX2Rpc3BsYXlDb2x1bW5zKTtcclxuXHJcbiAgICB0aGlzLmVtaXRGaWx0ZXJlZFZhbHVlcygpO1xyXG5cclxuICAgIHRoaXMuX2Rpc3BsYXlFeHRyYUhlYWRlclRvcENlbGwgPSB0aGlzLl9kaXNwbGF5Q29sdW1ucy5tYXAoY29sID0+IGNvbCArIHRoaXMuRVhUUkFfSEVBREVSX0NFTExfVE9QX1NVRkZJWClcclxuICAgIHRoaXMuX2Rpc3BsYXlFeHRyYUhlYWRlckJvdHRvbUNlbGwgPSB0aGlzLl9kaXNwbGF5Q29sdW1ucy5tYXAoY29sID0+IGNvbCArIHRoaXMuRVhUUkFfSEVBREVSX0NFTExfQk9UVE9NX1NVRkZJWClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEN1c3RvbVNvcnRGdW5jdGlvbnNNYXAoKSB7XHJcbiAgICB0aGlzLnRhYmxlQ29uZmlnLmNvbHVtbnNDZmdcclxuICAgICAgLmZpbHRlcihjID0+IGMuc29ydCAmJiBjLnNvcnQuZW5hYmxlICYmIGMuc29ydC5jdXN0b21Tb3J0KVxyXG4gICAgICAuZm9yRWFjaChjID0+IHRoaXMuY3VzdG9tU29ydEZ1bmN0aW9ucy5zZXQoYy5rZXksIGMuc29ydCEuY3VzdG9tU29ydCEpKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0VGFibGUoKSB7XHJcbiAgICB0aGlzLl90YWJsZU5hbWUgPSB0aGlzLnRhYmxlQ29uZmlnLm5hbWUgPz8gJ3Vua25vd24tdGFibGUtbmFtZSc7XHJcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZSA9IE1hdFRhYmxlRGF0YVNvdXJjZUZhY3RvcnkuY29udmVydCh0aGlzLnRhYmxlRGF0YSwgdGhpcy50YWJsZUNvbmZpZy5jb2x1bW5zQ2ZnKTtcclxuICAgIHRoaXMudGFibGVWaWV3ID0gVGFibGVWaWV3RmFjdG9yeS50b1ZpZXcodGhpcy50YWJsZURhdGFTb3VyY2UuZGF0YSwgdGhpcy50YWJsZUNvbmZpZylcclxuICAgIGlmICghdGhpcy5fY3VzdG9tRGlzcGxheUNvbHVtbnNFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuX2Rpc3BsYXlDb2x1bW5zID0gRGlzcGxheUNvbHVtbnNGYWN0b3J5LmNyZWF0ZSh0aGlzLnRhYmxlQ29uZmlnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5U2VhcmNoRmlsdGVyKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgdGhpcy50YWJsZURhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmVtaXRGaWx0ZXJlZFZhbHVlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUZpbHRlcihmaWx0ZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlclN0b3JhZ2UuZ2V0KGZpbHRlck5hbWUpKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyU3RvcmFnZS5kZWxldGUoZmlsdGVyTmFtZSk7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzSW50ZXJuYWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBseUZpbHRlcihmaWx0ZXJOYW1lOiBzdHJpbmcsIGZpbHRlcjogTmd4QXVyRmlsdGVycy5CYXNlPFQ+KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmlsdGVyU3RvcmFnZS5nZXQoZmlsdGVyTmFtZSkgfHwgKCF0aGlzLmZpbHRlclN0b3JhZ2UuZ2V0KGZpbHRlck5hbWUpIS5lcXVhbHMoZmlsdGVyKSkpIHtcclxuICAgICAgdGhpcy5maWx0ZXJTdG9yYWdlLnNldChmaWx0ZXJOYW1lLCBmaWx0ZXIpO1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVyc0ludGVybmFsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5maWx0ZXJTdG9yYWdlLmNsZWFyKCk7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVyc0ludGVybmFsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RmlsdGVyc0ludGVybmFsKCkge1xyXG4gICAgY29uc3QgZmlsdGVyQWN0aW9ucyA9IFsuLi50aGlzLmZpbHRlclN0b3JhZ2UudmFsdWVzKCldO1xyXG4gICAgdGhpcy50YWJsZURhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gKGRhdGEpID0+IHtcclxuICAgICAgcmV0dXJuIGZpbHRlckFjdGlvbnMuZXZlcnkoZmlsdGVyQWN0aW9uID0+IGZpbHRlckFjdGlvbi5maWx0ZXJGbigpKGRhdGEpKTtcclxuICAgIH07XHJcbiAgICAvLyDQn9GA0LjQvNC10L3QtdC90LjQtSDRhNC40LvRjNGC0YDQsNGG0LjQuC4g0L3Rg9C20L3QviDQv9C10YDQtdC00LDRgtGMINGD0L3QuNC60LDQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0YfRgtC+0LHRiyDRhNC40LvRjNGC0YDQsNGG0LjRjyDQt9Cw0L/Rg9GB0YLQuNC70LDRgdGMXHJcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5maWx0ZXIgPSAndHJpZ2dlci0nICsgTWF0aC5yYW5kb20oKTtcclxuICAgIHRoaXMuZW1pdEZpbHRlcmVkVmFsdWVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRGaWx0ZXJlZFZhbHVlcygpOiB2b2lkIHtcclxuICAgIHRoaXMub25GaWx0ZXIuZW1pdCh0aGlzLnRhYmxlRGF0YVNvdXJjZS5maWx0ZXJlZERhdGEubWFwKGYgPT4gZi5yb3dTcmMpKVxyXG4gIH1cclxuXHJcbiAgc29ydFRhYmxlKHNvcnRQYXJhbWV0ZXJzOiBTb3J0KSB7XHJcbiAgICB0aGlzLnNvcnQuZW1pdChzb3J0UGFyYW1ldGVycyk7XHJcbiAgfVxyXG5cclxuICBlbWl0U2VsZWN0ZWRSb3dzQWN0aW9uKGFjdGlvbjogc3RyaW5nLCByb3dzOiBUW10pIHtcclxuICAgIHRoaXMub25TZWxlY3RlZFJvd3NBY3Rpb24uZW1pdCh7YWN0aW9uLCB2YWx1ZTogcm93c30pO1xyXG4gIH1cclxuXHJcbiAgZW1pdFJvd0FjdGlvbihhY3Rpb246IHN0cmluZywgcm93OiBULCAkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMub25Sb3dBY3Rpb24uZW1pdCh7YWN0aW9uLCB2YWx1ZTogcm93fSk7XHJcbiAgfVxyXG5cclxuICBtYXN0ZXJUb2dnbGUoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGlvblByb3ZpZGVyLm1hc3RlclRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcbiAgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblByb3ZpZGVyLmlzQWxsU2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIGNhc3RTcmMocm93OiBhbnkpOiBUYWJsZVJvdzxUPiB7XHJcbiAgICByZXR1cm4gcm93O1xyXG4gIH1cclxuXHJcbiAgcm93Q2xpY2socm93OiBUYWJsZVJvdzxUPikge1xyXG4gICAgaWYgKHJvdy5yb3dTcmMgIT09IHRoaXMuaGlnaGxpZ2h0ZWQgfHwgKHJvdy5yb3dTcmMgPT09IHRoaXMuaGlnaGxpZ2h0ZWQgJiYgIXRoaXMudGFibGVDb25maWcuY2xpY2tDZmc/LmNhbmNlbGFibGUpKSB7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljay5lbWl0KHJvdy5yb3dTcmMpO1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodGVkID0gcm93LnJvd1NyYztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljay5lbWl0KHVuZGVmaW5lZCk7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0aW9uTW9kZWwoKTogU2VsZWN0aW9uTW9kZWw8VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uUHJvdmlkZXIuc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBob3ZlclRpbWVyOiBhbnkgPSBudWxsO1xyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmhvdmVyVGltZXIpO1xyXG4gICAgdGhpcy5yZXNpemVDb2x1bW5PZmZzZXRzT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnU3RhcnQoJGV2ZW50OiBEcmFnRXZlbnQsIHJvdzogVGFibGVSb3c8VD4pIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvblByb3ZpZGVyLmlzRW5hYmxlZCAmJiB0aGlzLmRyYWdEcm9wUHJvdmlkZXIubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMSkge1xyXG4gICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gdGhpcy5zZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgICAgaWYgKHNlbGVjdGVkUm93cy5maW5kKHIgPT4gci5pZCA9PT0gcm93LmlkKSkge1xyXG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BQcm92aWRlci5tYW5hZ2VyLnN0YXJ0RHJhZyh0aGlzLl90YWJsZU5hbWUsIHNlbGVjdGVkUm93cywgJGV2ZW50KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZHJhZ0Ryb3BQcm92aWRlci5tYW5hZ2VyLnN0YXJ0RHJhZyh0aGlzLl90YWJsZU5hbWUsIFtyb3ddLCAkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnT3ZlcigkZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgdGhpcy5kcmFnRHJvcFByb3ZpZGVyLm1hbmFnZXIuY2FuRHJvcFByZXZlbnREZWZhdWx0KHRoaXMuX3RhYmxlTmFtZSwgJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uRHJvcCgkZXZlbnQ6IERyYWdFdmVudCwgcm93OiBUYWJsZVJvdzxUPikge1xyXG4gICAgdGhpcy5kcmFnRHJvcFByb3ZpZGVyLm1hbmFnZXIuZHJvcCh0aGlzLnRhYmxlRGF0YVNvdXJjZS5kYXRhLCB0aGlzLl90YWJsZU5hbWUsIHJvdyk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbmQoJGV2ZW50OiBEcmFnRXZlbnQsIHJvdzogVGFibGVSb3c8VD4pIHtcclxuICAgIHRoaXMuZHJhZ0Ryb3BQcm92aWRlci5tYW5hZ2VyLmVuZERyYWcodGhpcy50YWJsZURhdGFTb3VyY2UuZGF0YSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhdXItbWF0LXRhYmxlXCJcclxuICAgICBbbmdDbGFzc109XCJ7J2JvdHRvbS1wYWdpbmF0aW9uJzogcGFnaW5hdGlvblByb3ZpZGVyLmlzRW5hYmxlZCAmJiBwYWdpbmF0aW9uUHJvdmlkZXIucG9zaXRpb24gPT09ICdib3R0b20nfVwiPlxyXG4gIDxuZy1jb250YWluZXI+XHJcbiAgICA8IS0tIEZpbHRlciAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZUNvbmZpZy5maWx0ZXJDZmc/LmVuYWJsZSA/PyBmYWxzZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmd4QXVyVGFibGVTZWFyY2hQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgdGFibGVDb25maWcuZmlsdGVyQ2ZnPy5sYWJlbCB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseVNlYXJjaEZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7dGFibGVDb25maWcuZmlsdGVyQ2ZnPy5wbGFjZWhvbGRlcn19XCJcclxuICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmd4QXVyVGFibGVTZWFyY2hTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCJcclxuICAgICAgICAgW25nQ2xhc3NdPVwieydib3R0b20tcGFnaW5hdGlvbic6IHBhZ2luYXRpb25Qcm92aWRlci5pc0VuYWJsZWQgJiYgcGFnaW5hdGlvblByb3ZpZGVyLnBvc2l0aW9uID09PSAnYm90dG9tJ31cIj5cclxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaGVhZGVyQnV0dG9uUHJvdmlkZXIuaXNFbmFibGVkXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtc2V0dGluZ3MtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJoZWFkZXJCdXR0b25Qcm92aWRlci5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJoZWFkZXJCdXR0b25Qcm92aWRlci5iYWNrZ3JvdW5kXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkhlYWRlckJ1dHRvbi5lbWl0KCRldmVudClcIj5cclxuICAgICAgICB7eyBoZWFkZXJCdXR0b25Qcm92aWRlci5pY29uIH19XHJcbiAgICAgIDwvbWF0LWljb24+XHJcblxyXG4gICAgICA8IS0tIFRhYmxlIC0tPlxyXG4gICAgICA8dGFibGUgI3RhYmxlIG1hdC10YWJsZSBtYXRTb3J0XHJcbiAgICAgICAgICAgICBbbXVsdGlUZW1wbGF0ZURhdGFSb3dzXT1cImV4dGVuZGVkUm93VGVtcGxhdGUgIT09IG51bGxcIlxyXG4gICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwidGFibGVEYXRhU291cmNlXCJcclxuICAgICAgICAgICAgIChtYXRTb3J0Q2hhbmdlKT1cInNvcnRUYWJsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwidGFibGVDb25maWcudGFibGVWaWV3Py5oZWlnaHRcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwidGFibGVDb25maWcudGFibGVWaWV3Py5tYXhIZWlnaHRcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwidGFibGVDb25maWcudGFibGVWaWV3Py5taW5IZWlnaHRcIlxyXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwieydoaWRlLXRhYmxlLWJvZHknOiBpc1RhYmxlQm9keUhpZGV9XCI+XHJcblxyXG5cclxuICAgICAgICA8IS0tICAgICAgICBkcmFnLWNvbHVtbi0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcmFnRHJvcFByb3ZpZGVyLmlzRW5hYmxlZCAmJiBkcmFnRHJvcFByb3ZpZGVyLmRyYWdnYWJsZVwiIFttYXRDb2x1bW5EZWZdPVwiZHJhZ0Ryb3BQcm92aWRlci5DT0xVTU5fTkFNRVwiPlxyXG5cclxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICA8L3RoPlxyXG5cclxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50O1wiIGNsYXNzPVwiZHJhZy1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPGxpYi1pY29uLXZpZXcgIGRyYWdnYWJsZT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZpZXddPVwiZHJhZ0Ryb3BQcm92aWRlci5kcmFnSWNvblZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnZW5kKT1cIm9uRHJhZ0VuZCgkZXZlbnQsIGVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgIDwvbGliLWljb24tdmlldz5cclxuXHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tICAgICAgICBpbmRleC1jb2x1bW4tLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5kZXhQcm92aWRlci5pc0VuYWJsZWRcIiBbbWF0Q29sdW1uRGVmXT1cImluZGV4UHJvdmlkZXIuQ09MVU1OX05BTUVcIj5cclxuXHJcbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICAgICAgICA8bGliLWNvbHVtbi12aWV3IFtjb25maWddPVwiaW5kZXhQcm92aWRlci5oZWFkZXJWaWV3XCI+XHJcbiAgICAgICAgICAgICAge3sgaW5kZXhQcm92aWRlci5uYW1lIH19XHJcbiAgICAgICAgICAgIDwvbGliLWNvbHVtbi12aWV3PlxyXG4gICAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDtcIj5cclxuICAgICAgICAgICAge3sgZWxlbWVudC5pZCArIGluZGV4UHJvdmlkZXIub2Zmc2V0IH19XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XHJcbiAgICAgICAgICAgIHt7IHRvdGFsUm93UHJvdmlkZXIudG90YWxzLmdldChpbmRleFByb3ZpZGVyLkNPTFVNTl9OQU1FKSB8fCAnJyB9fVxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSAgICAgICAgc2VsZWN0aW9uLWNvbHVtbi0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJzZWxlY3Rpb25Qcm92aWRlci5DT0xVTU5fTkFNRVwiICpuZ0lmPVwic2VsZWN0aW9uUHJvdmlkZXIuaXNFbmFibGVkXCI+XHJcbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwiJGV2ZW50ID8gbWFzdGVyVG9nZ2xlKCkgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIGlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUNvbmZpZy5zZWxlY3Rpb25DZmc/LnNob3dTZWxlY3RlZENvdW50ICYmIHNlbGVjdGlvblByb3ZpZGVyLnNlbGVjdGlvbi5oYXNWYWx1ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlQ29uZmlnLnNlbGVjdGlvbkNmZz8uc2hvd1RvdGFsQ291bnQgIT09IGZhbHNlXCI+L3t7IHBhZ2luYXRvclN0YXRlPy5sZW5ndGggPyBwYWdpbmF0b3JTdGF0ZT8ubGVuZ3RoIDogdGFibGVEYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiB0YWJsZUNvbmZpZz8uc2VsZWN0aW9uQ2ZnPy5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdGFibGVDb25maWcuc2VsZWN0aW9uQ2ZnIS5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVtaXRTZWxlY3RlZFJvd3NBY3Rpb24oYWN0aW9uLmFjdGlvbiwgc2VsZWN0aW9uUHJvdmlkZXIuc2VsZWN0aW9uLnNlbGVjdGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYWN0aW9uLmljb24udG9vbHRpcCB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uZGlzcGxheSAhPT0gJ25vbmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtzdHlsZS5jb2xvcl09XCJhY3Rpb24uaWNvbi5jb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLmljb24ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24udG9nZ2xlKGNhc3RTcmMocm93KS5yb3dTcmMpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb25Qcm92aWRlci5zZWxlY3Rpb24udG9nZ2xlKGNhc3RTcmMocm93KS5yb3dTcmMpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uUHJvdmlkZXIuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoY2FzdFNyYyhyb3cpLnJvd1NyYylcIj5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIGFjdGlvbiBjb2x1bW4gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0FjdGlvbnNQcm92aWRlci5pc0VuYWJsZWRcIiBbbWF0Q29sdW1uRGVmXT1cInJvd0FjdGlvbnNQcm92aWRlci5DT0xVTU5fTkFNRVwiPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L3RoPlxyXG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgc3R5bGU9XCJjdXJzb3I6IGRlZmF1bHRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHJvd0FjdGlvbnNQcm92aWRlci5hY3Rpb25WaWV3LmdldChlbGVtZW50LmlkKVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW1pdFJvd0FjdGlvbihhY3Rpb24uYWN0aW9uLCBlbGVtZW50LnJvd1NyYywgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJhY3Rpb24uaWNvbi50b29sdGlwIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLmRpc3BsYXkgIT09ICdub25lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIFtzdHlsZS5jb2xvcl09XCJhY3Rpb24uaWNvbi5jb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBhY3Rpb24uaWNvbi5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlckNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogcm93QWN0aW9uc1Byb3ZpZGVyLkNPTFVNTl9OQU1FfVwiPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gICAgdmFsdWUtaWNvbi0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbkNvbmZpZyBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zQ2ZnXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW5Db25maWcua2V5XCI+XHJcblxyXG4gICAgICAgICAgPCEtLSBpZiBzb3J0YWJsZSBjb2x1bW4gaGVhZGVyIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkNvbmZpZy5zb3J0ICYmIGNvbHVtbkNvbmZpZy5zb3J0LmVuYWJsZTsgZWxzZSBub3RTb3J0YWJsZVwiPlxyXG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFttYXQtc29ydC1oZWFkZXJdPVwiY29sdW1uQ29uZmlnLmtleVwiXHJcbiAgICAgICAgICAgICAgICBbYXJyb3dQb3NpdGlvbl09XCJjb2x1bW5Db25maWcuc29ydC5wb3NpdGlvbiA9PT0gJ3JpZ2h0JyA/ICdiZWZvcmUnIDogJ2FmdGVyJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJWYWx1ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPCEtLSBlbHNlIG5vdCBzb3J0YWJsZSAtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90U29ydGFibGU+XHJcbiAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclZhbHVlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDwhLS0gICAgICBoZWFkZXIgdmFsdWUtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyVmFsdWU+XHJcbiAgICAgICAgICAgIDxsaWItY29sdW1uLXZpZXcgW2NvbmZpZ109XCJjb2x1bW5Db25maWcuaGVhZGVyVmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvbHVtbkNvbmZpZy5uYW1lXCI+XHJcbiAgICAgICAgICAgIDwvbGliLWNvbHVtbi12aWV3PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICA8IS0tIGNvbHVtbiB2YWx1ZSDQv9C+0LvRg9GH0LDRgtGMINC90LDRgdGC0YDQvtC50LrQuCDQutC+0LvQvtC90L7QuiDQvdGD0LbQvdC+INGH0LXRgNC10LcgZ2V0Vmlldyhyb3dJbmRleCwgY29sdW1uQ29uZmlnLmtleSkg0YLQsNC8INC90LDRhdC+0LTRj9GC0YHRjyDRg9C20LVcclxuICAgICAgICAgINC/0L7QtNCz0L7RgtC+0LLQu9C10L3QvdGL0LUg0LfQvdCw0YfQtdC90LjRjyDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8tLT5cclxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50O1wiPlxyXG4gICAgICAgICAgICA8bGliLWNvbHVtbi12aWV3XHJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ0YWJsZVZpZXdbZWxlbWVudC5pZF0/LmdldChjb2x1bW5Db25maWcua2V5KVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImVsZW1lbnQgfCBkYXRhUHJvcGVydHlHZXR0ZXI6IGNvbHVtbkNvbmZpZy5rZXlcIj5cclxuICAgICAgICAgICAgPC9saWItY29sdW1uLXZpZXc+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XHJcbiAgICAgICAgICAgIHt7IHRvdGFsUm93UHJvdmlkZXIudG90YWxzLmdldChjb2x1bW5Db25maWcua2V5KSB8fCAnJyB9fVxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gICAgICAgIGV4dHJhIGhlYWRlciB0b3AgY2VsbC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGV4dHJhVG9wQ2VsbCBvZiBfZGlzcGxheUV4dHJhSGVhZGVyVG9wQ2VsbDsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdENvbHVtbkRlZl09XCJleHRyYVRvcENlbGxcIj5cclxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImV4dHJhSGVhZGVyQ2VsbFRvcFRlbXBsYXRlOyBjb250ZXh0OiB7a2V5OiBleHRyYVRvcENlbGwucmVwbGFjZShFWFRSQV9IRUFERVJfQ0VMTF9UT1BfU1VGRklYLCAnJyksIGluZGV4OiBpbmRleH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICA8IS0tICAgICAgICBleHRyYSBoZWFkZXIgYm90dG9tIGNlbGwtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBleHRyYUJvdHRvbUNlbGwgIG9mIF9kaXNwbGF5RXh0cmFIZWFkZXJCb3R0b21DZWxsOyBsZXQgaW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImV4dHJhQm90dG9tQ2VsbFwiPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXh0cmFIZWFkZXJDZWxsQm90dG9tVGVtcGxhdGU7IGNvbnRleHQ6IHtrZXk6IGV4dHJhQm90dG9tQ2VsbC5yZXBsYWNlKEVYVFJBX0hFQURFUl9DRUxMX0JPVFRPTV9TVUZGSVgsICcnKSwgaW5kZXg6IGluZGV4fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSAgICAgICAgZXh0cmEgaGVhZGVyIHRvcCByb3ctLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXh0cmFIZWFkZXJDZWxsVG9wVGVtcGxhdGVcIj5cclxuICAgICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiX2Rpc3BsYXlFeHRyYUhlYWRlclRvcENlbGw7ICBzdGlja3k6IHRoaXMudGFibGVDb25maWcuc3RpY2t5Q2ZnPy5oZWFkZXJcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXh0cmEtaGVhZGVyLXRvcC1yb3dcIj5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gICAgICAgIGhlYWRlciAgcm93LS0+XHJcbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJfZGlzcGxheUNvbHVtbnM7ICBzdGlja3k6IHRoaXMudGFibGVDb25maWcuc3RpY2t5Q2ZnPy5oZWFkZXJcIj5cclxuICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICA8IS0tICAgICAgICBleHRyYSBoZWFkZXIgYm90dG9tIHJvdyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXh0cmFIZWFkZXJDZWxsQm90dG9tVGVtcGxhdGVcIj5cclxuICAgICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJfZGlzcGxheUV4dHJhSGVhZGVyQm90dG9tQ2VsbDsgIHN0aWNreTogdGhpcy50YWJsZUNvbmZpZy5zdGlja3lDZmc/LmhlYWRlclwiPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPHRyIG1hdC1yb3cgI3Jvd0xpbmtcclxuICAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQsIHJvdylcIlxyXG4gICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogX2Rpc3BsYXlDb2x1bW5zO1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJyb3dDbGljayhyb3cpXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydwb2ludGVyJzogdGFibGVDb25maWcuY2xpY2tDZmc/LnBvaW50ZXIgfHwgZmFsc2UsICduZXctY29sb3InOiBoaWdobGlnaHRlZD09PXJvdy5yb3dTcmMgJiYgdGFibGVDb25maWc/LmNsaWNrQ2ZnPy5oaWdobGlnaHRDbGlja2VkPy5jb2xvcn1cIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAnY29sb3InOiBoaWdobGlnaHRlZD09PXJvdy5yb3dTcmM/IHRhYmxlQ29uZmlnPy5jbGlja0NmZz8uaGlnaGxpZ2h0Q2xpY2tlZD8uY29sb3IgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGhpZ2hsaWdodGVkID09PSByb3cucm93U3JjPyB0YWJsZUNvbmZpZz8uY2xpY2tDZmc/LmhpZ2hsaWdodENsaWNrZWQ/LmJhY2tncm91bmQgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAnYm9yZGVyJzogaGlnaGxpZ2h0ZWQgPT09IHJvdy5yb3dTcmM/IHRhYmxlQ29uZmlnPy5jbGlja0NmZz8uaGlnaGxpZ2h0Q2xpY2tlZD8uYm9yZGVyIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICB9XCI+XHJcbiAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgPCEtLWV4cGFuZGVkLXJvdy0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWRSb3dcIj5cclxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cImV4cGFuZGVkLWNlbGxcIiAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCIgW2F0dHIuY29sc3Bhbl09XCJfZGlzcGxheUNvbHVtbnMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWRldGFpbFwiXHJcbiAgICAgICAgICAgICAgICAgW0BkZXRhaWxFeHBhbmRdPVwiZWxlbWVudC5yb3dTcmMgPT09IGhpZ2hsaWdodGVkID8gZXhwYW5kZWRTdGF0ZUVudW0uRVhQQU5ERUQgOiBleHBhbmRlZFN0YXRlRW51bS5DT0xMQVBTRURcIj5cclxuICAgICAgICAgICAgICA8IS0tIGxhenktbG9hZCBvZiBkZXRhaWxzIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbGVtZW50LnJvd1NyYyA9PT0gaGlnaGxpZ2h0ZWRcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHRlbmRlZFJvd1RlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBlbGVtZW50fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJleHRlbmRlZFJvd1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICA8dHIgbWF0LXJvdyBjbGFzcz1cImV4cGFuZGVkLXJvd1wiICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkUm93J11cIj48L3RyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS1leHBhbmRlZC1yb3ctLT5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvdGFsUm93UHJvdmlkZXIuaXNFbmFibGVkXCI+XHJcbiAgICAgICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cIl9kaXNwbGF5Q29sdW1uczsgc3RpY2t5OiB0aGlzLnRhYmxlQ29uZmlnLnN0aWNreUNmZz8udG90YWxcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZV09XCJ0b3RhbFJvd1Byb3ZpZGVyLnN0eWxlXCI+PC90cj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLXN1Yi1mb290ZXItcm93LS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdWJGb290ZXJSb3dcIj5cclxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW2F0dHIuY29sc3Bhbl09XCJfZGlzcGxheUNvbHVtbnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25neEF1clRhYmxlU3ViRm9vdGVyUm93XVwiPjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViRm9vdGVyUm93VGVtcGxhdGVcIj5cclxuICAgICAgICAgIDx0ciBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwiWydzdWJGb290ZXJSb3cnXTsgc3RpY2t5OiB0aGlzLnRhYmxlQ29uZmlnLnN0aWNreUNmZz8uc3ViRm9vdGVyXCI+PC90cj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tICAgICAgc3ViLWZvb3Rlci1yb3cgRU5ELS0+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBQYWdpbmF0aW9uIC0tPlxyXG4gIEBpZiAodGhpcy5wYWdpbmF0aW9uUHJvdmlkZXIuaXNFbmFibGVkKSB7XHJcbiAgICA8bWF0LXBhZ2luYXRvciBbbmdDbGFzc109XCJ7J2hpZGVQYWdpbmF0b3InOiBpc1RhYmxlQm9keUhpZGV9XCJcclxuICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdGlvblByb3ZpZGVyLnNpemVzXCJcclxuICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdpbmF0aW9uUHJvdmlkZXIuc2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwidGFibGVDb25maWc/LnBhZ2VhYmxlQ2ZnPy5zdHlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbbGVuZ3RoXT1cInBhZ2luYXRvclN0YXRlPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdpbmF0b3JTdGF0ZT8ucGFnZUluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgIChwYWdlKT1cInBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgIHNob3dGaXJzdExhc3RCdXR0b25zPlxyXG4gICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gIH1cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2Zvb3RlckNlbGxUZW1wbGF0ZSBsZXQtY29sdW1uTmFtZT5cclxuICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxyXG4gICAge3sgdG90YWxSb3dQcm92aWRlci50b3RhbHMuZ2V0KGNvbHVtbk5hbWUpIHx8ICcnIH19XHJcbiAgPC90ZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19