@guiexpert/table 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/esm2020/index.mjs +26 -20
  2. package/esm2020/lib/table/checkbox/tree-checkbox-model.mjs +2 -2
  3. package/esm2020/lib/table/data/common/args-adjust-columns-to-row-parent-params.mjs +1 -1
  4. package/esm2020/lib/table/data/options/auto-restore-options.if.mjs +1 -1
  5. package/esm2020/lib/table/data/options/table-options.if.mjs +1 -1
  6. package/esm2020/lib/table/data/options/table-options.mjs +7 -8
  7. package/esm2020/lib/table/data/options/tree-options.mjs +2 -2
  8. package/esm2020/lib/table/data/tablemodel/area-ident.type.mjs +6 -6
  9. package/esm2020/lib/table/data/tablemodel/areamodel/abstract-area-model.mjs +22 -22
  10. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-array-array.mjs +3 -3
  11. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-hidden.mjs +25 -21
  12. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.mjs +2 -2
  13. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array.mjs +8 -8
  14. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-tree.mjs +13 -13
  15. package/esm2020/lib/table/data/tablemodel/areamodel/area-model.if.mjs +1 -1
  16. package/esm2020/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.mjs +1 -1
  17. package/esm2020/lib/table/data/tablemodel/column/column-def.if.mjs +1 -1
  18. package/esm2020/lib/table/data/tablemodel/column/column-def.mjs +3 -3
  19. package/esm2020/lib/table/data/tablemodel/table-model.if.mjs +1 -1
  20. package/esm2020/lib/table/data/tablemodel/table-model.mjs +24 -18
  21. package/esm2020/lib/table/event-adapter.mjs +17 -0
  22. package/esm2020/lib/table/mouse-handler.mjs +1 -7
  23. package/esm2020/lib/table/render-scope.mjs +164 -144
  24. package/esm2020/lib/table/renderer/cell-render.if.mjs +1 -1
  25. package/esm2020/lib/table/renderer/checkbox-cell-renderer.mjs +2 -2
  26. package/esm2020/lib/table/renderer/date-to-int-date-cell-renderer.mjs +2 -2
  27. package/esm2020/lib/table/renderer/date-to-iso-cell-renderer.mjs +2 -2
  28. package/esm2020/lib/table/renderer/date-to-locale-date-cell-renderer.mjs +2 -2
  29. package/esm2020/lib/table/renderer/date-to-tec-cell-renderer.mjs +12 -0
  30. package/esm2020/lib/table/renderer/edit/input-cell-renderer.mjs +2 -2
  31. package/esm2020/lib/table/renderer/edit/select-cell-renderer.mjs +2 -2
  32. package/esm2020/lib/table/renderer/male-female-to-icon-cell-renderer.mjs +2 -2
  33. package/esm2020/lib/table/renderer/number-cell-renderer.mjs +2 -2
  34. package/esm2020/lib/table/renderer/true-false-cell-renderer.mjs +15 -0
  35. package/esm2020/lib/table/service/convenience-dom.service.mjs +32 -24
  36. package/esm2020/lib/table/service/simple-dom-service.mjs +34 -0
  37. package/esm2020/lib/table/table-api.mjs +7 -7
  38. package/esm2020/lib/table/table-model-factory.mjs +6 -7
  39. package/esm2020/lib/table/table-scope.mjs +61 -55
  40. package/index.d.ts +25 -21
  41. package/lib/table/action/action-id.type.d.ts +1 -1
  42. package/lib/table/action/shortcut-actionid-mapping.type.d.ts +1 -1
  43. package/lib/table/checkbox/tree-checkbox-model.d.ts +1 -1
  44. package/lib/table/data/common/area-map.type.d.ts +1 -1
  45. package/lib/table/data/common/args-adjust-columns-to-row-parent-params.d.ts +0 -1
  46. package/lib/table/data/common/boolean-function.d.ts +1 -1
  47. package/lib/table/data/common/checked-type.d.ts +1 -1
  48. package/lib/table/data/common/filter-function.d.ts +1 -1
  49. package/lib/table/data/common/get-t.d.ts +1 -1
  50. package/lib/table/data/common/sort-state.type.d.ts +1 -1
  51. package/lib/table/data/common/tree-arrow.type.d.ts +1 -1
  52. package/lib/table/data/div-scope.type.d.ts +1 -1
  53. package/lib/table/data/options/auto-restore-options.if.d.ts +6 -3
  54. package/lib/table/data/options/table-options.d.ts +5 -6
  55. package/lib/table/data/options/table-options.if.d.ts +5 -6
  56. package/lib/table/data/side-ident.type.d.ts +1 -1
  57. package/lib/table/data/tablemodel/area-ident.type.d.ts +1 -1
  58. package/lib/table/data/tablemodel/areamodel/abstract-area-model.d.ts +12 -12
  59. package/lib/table/data/tablemodel/areamodel/area-model-array-array.d.ts +4 -4
  60. package/lib/table/data/tablemodel/areamodel/area-model-hidden.d.ts +23 -18
  61. package/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.d.ts +2 -2
  62. package/lib/table/data/tablemodel/areamodel/area-model-object-array.d.ts +4 -4
  63. package/lib/table/data/tablemodel/areamodel/area-model-tree.d.ts +4 -4
  64. package/lib/table/data/tablemodel/areamodel/area-model.if.d.ts +114 -1
  65. package/lib/table/data/tablemodel/column/column-def.d.ts +3 -3
  66. package/lib/table/data/tablemodel/table-model.d.ts +1 -0
  67. package/lib/table/data/tablemodel/table-model.if.d.ts +1 -0
  68. package/lib/table/event-adapter.d.ts +12 -0
  69. package/lib/table/focus/focus.type.d.ts +1 -1
  70. package/lib/table/mouse-handler.d.ts +0 -2
  71. package/lib/table/render-scope.d.ts +11 -6
  72. package/lib/table/renderer/cell-render.if.d.ts +1 -1
  73. package/lib/table/renderer/checkbox-cell-renderer.d.ts +1 -1
  74. package/lib/table/renderer/date-to-int-date-cell-renderer.d.ts +1 -1
  75. package/lib/table/renderer/date-to-iso-cell-renderer.d.ts +1 -1
  76. package/lib/table/renderer/date-to-locale-date-cell-renderer.d.ts +1 -1
  77. package/lib/table/renderer/date-to-tec-cell-renderer.d.ts +8 -0
  78. package/lib/table/renderer/edit/edit-cell-renderer.type.d.ts +1 -1
  79. package/lib/table/renderer/edit/input-cell-renderer.d.ts +1 -1
  80. package/lib/table/renderer/edit/select-cell-renderer.d.ts +1 -1
  81. package/lib/table/renderer/male-female-to-icon-cell-renderer.d.ts +1 -1
  82. package/lib/table/renderer/number-cell-renderer.d.ts +1 -1
  83. package/lib/table/renderer/renderer-cleanup-fn.type.d.ts +1 -1
  84. package/lib/table/renderer/true-false-cell-renderer.d.ts +8 -0
  85. package/lib/table/selection/selection.type.d.ts +2 -2
  86. package/lib/table/service/convenience-dom.service.d.ts +3 -1
  87. package/lib/table/service/data/html-style.type.d.ts +1 -1
  88. package/lib/table/service/simple-dom-service.d.ts +10 -0
  89. package/lib/table/table-api.d.ts +6 -6
  90. package/lib/table/table-model-factory.d.ts +1 -2
  91. package/lib/table/table-scope.d.ts +3 -2
  92. package/package.json +2 -3
@@ -32,6 +32,9 @@ export class TableModel {
32
32
  // in case of a fixed header, left or right column, footer:
33
33
  this.padding = new Padding(0, 0, 0, 0); // the dimension of the 'body/center'
34
34
  this.xPositions = [];
35
+ headerAreaModel.areaIdent = "header";
36
+ bodyAreaModel.areaIdent = "body";
37
+ footerAreaModel.areaIdent = "footer";
35
38
  if (!this.columnCount) {
36
39
  if (this.columnDefs?.length) {
37
40
  this.columnCount = this.columnDefs.length;
@@ -95,15 +98,15 @@ export class TableModel {
95
98
  }
96
99
  if (this.columnDefs?.length) {
97
100
  this.columnSizes = this.columnDefs.map(def => {
98
- if (def.width.unit === '%' && clientWidth) {
101
+ if (def.width.unit === "%" && clientWidth) {
99
102
  // only for a % value we have to check min and max:
100
103
  let px = Math.floor(def.width.value * clientWidth / 100);
101
104
  if (def.minWidth) {
102
- let pxMin = def.minWidth.unit === 'px' ? def.minWidth.value : Math.floor(def.minWidth.value * clientWidth / 100);
105
+ let pxMin = def.minWidth.unit === "px" ? def.minWidth.value : Math.floor(def.minWidth.value * clientWidth / 100);
103
106
  px = Math.max(pxMin, px);
104
107
  }
105
108
  if (def.maxWidth) {
106
- let pxMax = def.maxWidth.unit === 'px' ? def.maxWidth.value : Math.floor(def.maxWidth.value * clientWidth / 100);
109
+ let pxMax = def.maxWidth.unit === "px" ? def.maxWidth.value : Math.floor(def.maxWidth.value * clientWidth / 100);
107
110
  px = Math.min(pxMax, px);
108
111
  }
109
112
  return px;
@@ -111,14 +114,17 @@ export class TableModel {
111
114
  return def.width.value;
112
115
  });
113
116
  }
114
- const bodyModel = this.getAreaModel('body');
117
+ const bodyModel = this.getAreaModel("body");
115
118
  this.rowCount = bodyModel.getRowCount();
116
- this.contentHeightInPx = this.getAreaHeight('body');
119
+ this.contentHeightInPx = this.getAreaHeight("body");
117
120
  this.recalcContentWidthInPx();
118
- const westWidth = this.getSideAreaWidth('west');
119
- const eastWidth = this.getSideAreaWidth('east');
120
- const headerHeight = this.getAreaHeight('header');
121
- const footerHeight = this.getAreaHeight('footer');
121
+ this.recalcPadding();
122
+ }
123
+ recalcPadding() {
124
+ const westWidth = this.getSideAreaWidth("west");
125
+ const eastWidth = this.getSideAreaWidth("east");
126
+ const headerHeight = this.getAreaHeight("header");
127
+ const footerHeight = this.getAreaHeight("footer");
122
128
  this.padding = new Padding(headerHeight, eastWidth, footerHeight, westWidth);
123
129
  }
124
130
  getPadding() {
@@ -161,10 +167,10 @@ export class TableModel {
161
167
  const c2 = this.getFixedRightColumnCount();
162
168
  let cStart = 0;
163
169
  let cEnd = this.columnCount - 1;
164
- if (sideIdent === 'west') {
170
+ if (sideIdent === "west") {
165
171
  cEnd = c1 - 1;
166
172
  }
167
- else if (sideIdent === 'east') {
173
+ else if (sideIdent === "east") {
168
174
  cStart = this.columnCount - c2;
169
175
  }
170
176
  else {
@@ -187,13 +193,13 @@ export class TableModel {
187
193
  return this.fixedRightColumnCount;
188
194
  }
189
195
  getAreaModel(area) {
190
- if (area === 'header') {
196
+ if (area === "header") {
191
197
  return this.headerAreaModel;
192
198
  }
193
- if (area === 'body') {
199
+ if (area === "body") {
194
200
  return this.bodyAreaModel;
195
201
  }
196
- if (area === 'footer') {
202
+ if (area === "footer") {
197
203
  return this.footerAreaModel;
198
204
  }
199
205
  throw new Error("Wrong ident.");
@@ -211,10 +217,10 @@ export class TableModel {
211
217
  return this.rowCheckboxVisible;
212
218
  }
213
219
  externalFilterChanged(predictFn) {
214
- this.getAreaModel('body').externalFilterChanged(predictFn);
220
+ this.getAreaModel("body").externalFilterChanged(predictFn);
215
221
  }
216
222
  doSort(sortItems) {
217
- return this.getAreaModel('body').doSort(sortItems);
223
+ return this.getAreaModel("body").doSort(sortItems);
218
224
  }
219
225
  getColumnDefs() {
220
226
  return this.columnDefs;
@@ -248,7 +254,7 @@ export class TableModel {
248
254
  return arr;
249
255
  }
250
256
  recalcContentWidthInPx() {
251
- this.contentWidthInPx = this.getSideAreaWidth('center');
257
+ this.contentWidthInPx = this.getSideAreaWidth("center");
252
258
  }
253
259
  calcXPositions() {
254
260
  const columnCount = this.getColumnCount();
@@ -259,4 +265,4 @@ export class TableModel {
259
265
  }
260
266
  }
261
267
  }
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvZGF0YS90YWJsZW1vZGVsL3RhYmxlLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFLbEMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFNakU7Ozs7Ozs7Ozs7OztFQVlFO0FBQ0YsTUFBTSxPQUFPLFVBQVU7SUFVckIsWUFDa0IsZUFBNEIsRUFDNUIsYUFBMEIsRUFDMUIsZUFBNEIsRUFDNUIsdUJBQStCLENBQUMsRUFDaEMsd0JBQWdDLENBQUMsRUFDakMscUJBQThCLEtBQUssRUFDbkMsb0JBQXlDLElBQUksaUJBQWlCLEVBQUUsRUFDekUsYUFBNEIsRUFBRSxFQUM5QixjQUF3QixFQUFFLEVBQ3ZCLHdCQUFnQyxDQUFDLENBQUMsRUFDbEMsY0FBc0IsQ0FBQztRQVZqQixvQkFBZSxHQUFmLGVBQWUsQ0FBYTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBYTtRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBYTtRQUM1Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVk7UUFDaEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFZO1FBQ2pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBaUI7UUFDbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUErQztRQUN6RSxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUN2QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQWE7UUFDbEMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFuQnpCLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDdEIscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FB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Q0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RhYmxlTW9kZWxJZn0gZnJvbSBcIi4vdGFibGUtbW9kZWwuaWZcIjtcbmltcG9ydCB7UGFkZGluZ30gZnJvbSBcIi4vcGFkZGluZ1wiO1xuaW1wb3J0IHtBcmVhSWRlbnR9IGZyb20gXCIuL2FyZWEtaWRlbnQudHlwZVwiO1xuaW1wb3J0IHtBcmVhTW9kZWxJZn0gZnJvbSBcIi4vYXJlYW1vZGVsL2FyZWEtbW9kZWwuaWZcIjtcbmltcG9ydCB7U2lkZUlkZW50fSBmcm9tIFwiLi4vc2lkZS1pZGVudC50eXBlXCI7XG5pbXBvcnQge0RlZmF1bHRSb3dIZWlnaHRzSWZ9IGZyb20gXCIuLi9vcHRpb25zL2RlZmF1bHQtcm93LWhlaWdodHMuaWZcIjtcbmltcG9ydCB7RGVmYXVsdFJvd0hlaWdodHN9IGZyb20gXCIuLi9vcHRpb25zL2RlZmF1bHQtcm93LWhlaWdodHNcIjtcbmltcG9ydCB7Q29sdW1uRGVmSWZ9IGZyb20gXCIuL2NvbHVtbi9jb2x1bW4tZGVmLmlmXCI7XG5pbXBvcnQge0ZpbHRlckZ1bmN0aW9ufSBmcm9tIFwiLi4vY29tbW9uL2ZpbHRlci1mdW5jdGlvblwiO1xuaW1wb3J0IHtTb3J0SXRlbX0gZnJvbSBcIi4uL2NvbW1vbi9zb3J0LWl0ZW1cIjtcblxuXG4vKlxuXG4gKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLStcbiB8ICBoZWFkZXIvd2VzdCAgIHwgIGhlYWRlci9jZW50ZXIgICAgfCBoZWFkZXIvZWFzdCAgfFxuICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rXG4gfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHxcbiB8ICBib2R5L3dlc3QgICAgIHwgIGJvZHkvY2VudGVyICAgICAgfCBib2R5L2Vhc3QgICAgfFxuIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8XG4gKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLStcbiB8ICBmb290ZXIvd2VzdCAgIHwgIGZvb3Rlci9jZW50ZXIgICAgfCBmb290ZXIvZWFzdCAgfFxuICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rXG5cbiovXG5leHBvcnQgY2xhc3MgVGFibGVNb2RlbCBpbXBsZW1lbnRzIFRhYmxlTW9kZWxJZiB7XG5cbiAgcHJvdGVjdGVkIHJvd0NvdW50ID0gMDtcbiAgcHJvdGVjdGVkIGNvbnRlbnRIZWlnaHRJblB4ID0gMDtcbiAgcHJvdGVjdGVkIGNvbnRlbnRXaWR0aEluUHggPSAwO1xuXG4gIC8vIGluIGNhc2Ugb2YgYSBmaXhlZCBoZWFkZXIsIGxlZnQgb3IgcmlnaHQgY29sdW1uLCBmb290ZXI6XG4gIHByb3RlY3RlZCBwYWRkaW5nID0gbmV3IFBhZGRpbmcoMCwgMCwgMCwgMCk7IC8vIHRoZSBkaW1lbnNpb24gb2YgdGhlICdib2R5L2NlbnRlcidcbiAgcHJvdGVjdGVkIHhQb3NpdGlvbnM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGhlYWRlckFyZWFNb2RlbDogQXJlYU1vZGVsSWYsXG4gICAgcHVibGljIHJlYWRvbmx5IGJvZHlBcmVhTW9kZWw6IEFyZWFNb2RlbElmLFxuICAgIHB1YmxpYyByZWFkb25seSBmb290ZXJBcmVhTW9kZWw6IEFyZWFNb2RlbElmLFxuICAgIHB1YmxpYyByZWFkb25seSBmaXhlZExlZnRDb2x1bW5Db3VudDogbnVtYmVyID0gMCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZml4ZWRSaWdodENvbHVtbkNvdW50OiBudW1iZXIgPSAwLFxuICAgIHB1YmxpYyByZWFkb25seSByb3dDaGVja2JveFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFJvd0hlaWdodHM6IERlZmF1bHRSb3dIZWlnaHRzSWYgPSBuZXcgRGVmYXVsdFJvd0hlaWdodHMoKSxcbiAgICBwdWJsaWMgY29sdW1uRGVmczogQ29sdW1uRGVmSWZbXSA9IFtdLFxuICAgIHB1YmxpYyBjb2x1bW5TaXplczogbnVtYmVyW10gPSBbXSxcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGluZ0NvbHVtbldpZHRoOiBudW1iZXIgPSAtMSxcbiAgICBwcm90ZWN0ZWQgY29sdW1uQ291bnQ6IG51bWJlciA9IDBcbiAgKSB7XG5cbiAgICBpZiAoIXRoaXMuY29sdW1uQ291bnQpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbkRlZnM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNvbHVtbkNvdW50ID0gdGhpcy5jb2x1bW5EZWZzLmxlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW5TaXplcz8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY29sdW1uQ291bnQgPSB0aGlzLmNvbHVtblNpemVzPy5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW5pdCgpIHtcbiAgICB0aGlzLnJlY2FsY1NpemUoNDAwKTtcbiAgICBpZiAodGhpcy5vdmVycmlkaW5nQ29sdW1uV2lkdGggPT09IC0xKSB7XG4gICAgICB0aGlzLmNhbGNYUG9zaXRpb25zKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhlYWRlckFyZWFNb2RlbCkge1xuICAgICAgdGhpcy5oZWFkZXJBcmVhTW9kZWwuaW5pdCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib2R5QXJlYU1vZGVsKSB7XG4gICAgICB0aGlzLmJvZHlBcmVhTW9kZWwuaW5pdCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb290ZXJBcmVhTW9kZWwpIHtcbiAgICAgIHRoaXMuZm9vdGVyQXJlYU1vZGVsLmluaXQoKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW5Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkNvdW50O1xuICB9O1xuXG4gIHNldENvbHVtbldpZHRoKGNvbHVtbkluZGV4OiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICB3aWR0aCA9IE1hdGgubWF4KDAsIHdpZHRoKTtcbiAgICBpZiAodGhpcy5vdmVycmlkaW5nQ29sdW1uV2lkdGggIT09IC0xKSB7XG4gICAgICB0aGlzLm92ZXJyaWRpbmdDb2x1bW5XaWR0aCA9IHdpZHRoO1xuICAgIH1cbiAgICBpZiAoY29sdW1uSW5kZXggPiAtMSAmJiBjb2x1bW5JbmRleCA8IHRoaXMuY29sdW1uU2l6ZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5TaXplc1tjb2x1bW5JbmRleF0gPSB3aWR0aDtcbiAgICB9XG4gICAgdGhpcy5yZWNhbGNDb250ZW50V2lkdGhJblB4KCk7XG4gIH1cblxuICBnZXRDb2x1bW5XaWR0aChjb2x1bW5JbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5vdmVycmlkaW5nQ29sdW1uV2lkdGggIT09IC0xKSB7XG4gICAgICByZXR1cm4gdGhpcy5vdmVycmlkaW5nQ29sdW1uV2lkdGg7XG4gICAgfVxuICAgIGlmIChjb2x1bW5JbmRleCA+IC0xICYmIGNvbHVtbkluZGV4IDwgdGhpcy5jb2x1bW5TaXplcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5TaXplc1tjb2x1bW5JbmRleF07XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIGdldFhQb3NCeUNvbHVtbkluZGV4KGNvbHVtbkluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChjb2x1bW5JbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGlmICh0aGlzLm92ZXJyaWRpbmdDb2x1bW5XaWR0aCA+IC0xKSB7XG4gICAgICByZXR1cm4gdGhpcy5vdmVycmlkaW5nQ29sdW1uV2lkdGggKiBjb2x1bW5JbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMueFBvc2l0aW9uc1tjb2x1bW5JbmRleF07XG4gIH1cblxuICByZWNhbGNTaXplKGNsaWVudFdpZHRoOiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uRGVmcz8ubGVuZ3RoICYmICF0aGlzLmNvbHVtblNpemVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29sdW1uU2l6ZXMgPSBuZXcgQXJyYXkodGhpcy5nZXRDb2x1bW5Db3VudCgpKS5maWxsKHRoaXMub3ZlcnJpZGluZ0NvbHVtbldpZHRoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sdW1uRGVmcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbHVtblNpemVzID0gdGhpcy5jb2x1bW5EZWZzLm1hcChkZWYgPT4ge1xuICAgICAgICBpZiAoZGVmLndpZHRoLnVuaXQgPT09ICclJyAmJiBjbGllbnRXaWR0aCkge1xuICAgICAgICAgIC8vIG9ubHkgZm9yIGEgJSB2YWx1ZSB3ZSBoYXZlIHRvIGNoZWNrIG1pbiBhbmQgbWF4OlxuICAgICAgICAgIGxldCBweCA9IE1hdGguZmxvb3IoZGVmLndpZHRoLnZhbHVlICogY2xpZW50V2lkdGggLyAxMDApO1xuICAgICAgICAgIGlmIChkZWYubWluV2lkdGgpIHtcbiAgICAgICAgICAgIGxldCBweE1pbiA9IGRlZi5taW5XaWR0aC51bml0ID09PSAncHgnID8gZGVmLm1pbldpZHRoLnZhbHVlIDogTWF0aC5mbG9vcihkZWYubWluV2lkdGgudmFsdWUgKiBjbGllbnRXaWR0aCAvIDEwMCk7XG4gICAgICAgICAgICBweCA9IE1hdGgubWF4KHB4TWluLCBweCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZWYubWF4V2lkdGgpIHtcbiAgICAgICAgICAgIGxldCBweE1heCA9IGRlZi5tYXhXaWR0aC51bml0ID09PSAncHgnID8gZGVmLm1heFdpZHRoLnZhbHVlIDogTWF0aC5mbG9vcihkZWYubWF4V2lkdGgudmFsdWUgKiBjbGllbnRXaWR0aCAvIDEwMCk7XG4gICAgICAgICAgICBweCA9IE1hdGgubWluKHB4TWF4LCBweCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBweDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmLndpZHRoLnZhbHVlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keU1vZGVsID0gdGhpcy5nZXRBcmVhTW9kZWwoJ2JvZHknKTtcbiAgICB0aGlzLnJvd0NvdW50ID0gYm9keU1vZGVsLmdldFJvd0NvdW50KCk7XG4gICAgdGhpcy5jb250ZW50SGVpZ2h0SW5QeCA9IHRoaXMuZ2V0QXJlYUhlaWdodCgnYm9keScpO1xuICAgIHRoaXMucmVjYWxjQ29udGVudFdpZHRoSW5QeCgpO1xuXG4gICAgY29uc3Qgd2VzdFdpZHRoID0gdGhpcy5nZXRTaWRlQXJlYVdpZHRoKCd3ZXN0Jyk7XG4gICAgY29uc3QgZWFzdFdpZHRoID0gdGhpcy5nZXRTaWRlQXJlYVdpZHRoKCdlYXN0Jyk7XG4gICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gdGhpcy5nZXRBcmVhSGVpZ2h0KCdoZWFkZXInKTtcbiAgICBjb25zdCBmb290ZXJIZWlnaHQgPSB0aGlzLmdldEFyZWFIZWlnaHQoJ2Zvb3RlcicpO1xuXG4gICAgdGhpcy5wYWRkaW5nID0gbmV3IFBhZGRpbmcoXG4gICAgICBoZWFkZXJIZWlnaHQsXG4gICAgICBlYXN0V2lkdGgsXG4gICAgICBmb290ZXJIZWlnaHQsXG4gICAgICB3ZXN0V2lkdGgpO1xuICB9XG5cbiAgZ2V0UGFkZGluZygpOiBQYWRkaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYWRkaW5nO1xuICB9XG5cbiAgZ2V0Q29udGVudEhlaWdodEluUGl4ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50SGVpZ2h0SW5QeDtcbiAgfVxuXG4gIGdldENvbnRlbnRXaWR0aEluUGl4ZWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50V2lkdGhJblB4O1xuICB9XG5cbiAgZ2V0Um93SGVpZ2h0KHJvd0FyZWFJZGVudDogQXJlYUlkZW50LCByb3dJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBcmVhTW9kZWwocm93QXJlYUlkZW50KS5nZXRSb3dIZWlnaHQocm93SW5kZXgpO1xuICB9XG5cbiAgZ2V0TW9kZWwocm93QXJlYUlkZW50OiBBcmVhSWRlbnQpOiBBcmVhTW9kZWxJZiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXJlYU1vZGVsKHJvd0FyZWFJZGVudCk7XG4gIH1cblxuICBnZXRBcmVhSGVpZ2h0KGFyZWFJZGVudDogQXJlYUlkZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoYXJlYUlkZW50KTtcbiAgICBjb25zdCByb3dDb3VudCA9IG1vZGVsLmdldFJvd0NvdW50KCk7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFJvd0hlaWdodHNbYXJlYUlkZW50XSkge1xuICAgICAgcmV0dXJuIHJvd0NvdW50ICogdGhpcy5kZWZhdWx0Um93SGVpZ2h0c1thcmVhSWRlbnRdO1xuICAgIH1cblxuICAgIGxldCByZXQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xuICAgICAgcmV0ID0gcmV0ICsgbW9kZWwuZ2V0Um93SGVpZ2h0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZ2V0U2lkZUFyZWFXaWR0aChzaWRlSWRlbnQ6IFNpZGVJZGVudCk6IG51bWJlciB7XG4gICAgY29uc3QgW2NTdGFydCwgY0VuZF0gPSB0aGlzLmdldFNpZGVTdGFydEFuZEVuZENvbHVtbkluZGV4KHNpZGVJZGVudCk7XG4gICAgbGV0IHJldCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IGNTdGFydDsgaSA8PSBjRW5kOyBpKyspIHtcbiAgICAgIHJldCA9IHJldCArIHRoaXMuZ2V0Q29sdW1uV2lkdGgoaSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBnZXRTaWRlU3RhcnRBbmRFbmRDb2x1bW5JbmRleChzaWRlSWRlbnQ6IFNpZGVJZGVudCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIGNvbnN0IGMxID0gdGhpcy5nZXRGaXhlZExlZnRDb2x1bW5Db3VudCgpO1xuICAgIGNvbnN0IGMyID0gdGhpcy5nZXRGaXhlZFJpZ2h0Q29sdW1uQ291bnQoKTtcblxuICAgIGxldCBjU3RhcnQgPSAwO1xuICAgIGxldCBjRW5kID0gdGhpcy5jb2x1bW5Db3VudCAtIDE7XG4gICAgaWYgKHNpZGVJZGVudCA9PT0gJ3dlc3QnKSB7XG4gICAgICBjRW5kID0gYzEgLSAxO1xuICAgIH0gZWxzZSBpZiAoc2lkZUlkZW50ID09PSAnZWFzdCcpIHtcbiAgICAgIGNTdGFydCA9IHRoaXMuY29sdW1uQ291bnQgLSBjMjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2VudGVyOlxuICAgICAgY1N0YXJ0ID0gYzE7XG4gICAgICBjRW5kID0gdGhpcy5jb2x1bW5Db3VudCAtIGMyIC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIFtjU3RhcnQsIGNFbmRdO1xuICB9XG5cbiAgZ2V0Q29sdW1uRGVmKGluZGV4OiBudW1iZXIpOiBDb2x1bW5EZWZJZiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGluZGV4IDwgdGhpcy5jb2x1bW5EZWZzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1uRGVmc1tpbmRleF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRGaXhlZExlZnRDb2x1bW5Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZpeGVkTGVmdENvbHVtbkNvdW50O1xuICB9XG5cbiAgZ2V0Rml4ZWRSaWdodENvbHVtbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZml4ZWRSaWdodENvbHVtbkNvdW50O1xuICB9XG5cbiAgZ2V0QXJlYU1vZGVsKGFyZWE6IEFyZWFJZGVudCk6IEFyZWFNb2RlbElmIHtcbiAgICBpZiAoYXJlYSA9PT0gJ2hlYWRlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLmhlYWRlckFyZWFNb2RlbDtcbiAgICB9XG4gICAgaWYgKGFyZWEgPT09ICdib2R5Jykge1xuICAgICAgcmV0dXJuIHRoaXMuYm9keUFyZWFNb2RlbDtcbiAgICB9XG4gICAgaWYgKGFyZWEgPT09ICdmb290ZXInKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb290ZXJBcmVhTW9kZWw7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlkZW50LlwiKTtcbiAgfVxuXG4gIGdldEJvZHlNb2RlbCgpOiBBcmVhTW9kZWxJZiB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUFyZWFNb2RlbDtcbiAgfVxuXG4gIGlzRm9vdGVyVmlzaWJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5mb290ZXJBcmVhTW9kZWw/LmdldFJvd0NvdW50KCkgPz8gMCkgPiAwO1xuICB9XG5cbiAgaXNIZWFkZXJWaXNpYmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmhlYWRlckFyZWFNb2RlbD8uZ2V0Um93Q291bnQoKSA/PyAwKSA+IDA7XG4gIH1cblxuICBpc1Jvd0NoZWNrYm94VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb3dDaGVja2JveFZpc2libGU7XG4gIH1cblxuICBleHRlcm5hbEZpbHRlckNoYW5nZWQ8VD4ocHJlZGljdEZuOiBGaWx0ZXJGdW5jdGlvbjxUPik6IHZvaWQge1xuICAgIHRoaXMuZ2V0QXJlYU1vZGVsKCdib2R5JykuZXh0ZXJuYWxGaWx0ZXJDaGFuZ2VkKHByZWRpY3RGbik7XG4gIH1cblxuICBkb1NvcnQoc29ydEl0ZW1zOiBTb3J0SXRlbVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXJlYU1vZGVsKCdib2R5JykuZG9Tb3J0KHNvcnRJdGVtcyk7XG4gIH1cblxuICBnZXRDb2x1bW5EZWZzKCk6IENvbHVtbkRlZklmW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkRlZnM7XG4gIH1cblxuICBnZXRDb2x1bW5Qcm9wZXJ0eShjb2x1bW5JbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5EZWZzW2NvbHVtbkluZGV4XS5wcm9wZXJ0eTtcbiAgfVxuXG4gIGdldEJvZHlSb3dCeUluZGV4KHJvd0luZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldEJvZHlNb2RlbCgpLmdldFJvd0J5SW5kZXgocm93SW5kZXgpO1xuICB9XG5cbiAgaXNTb3J0YWJsZShjb2x1bW5JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29sdW1uRGVmc1xuICAgICAgJiYgY29sdW1uSW5kZXggPCB0aGlzLmNvbHVtbkRlZnMubGVuZ3RoXG4gICAgICAmJiB0aGlzLmNvbHVtbkRlZnNbY29sdW1uSW5kZXhdLnNvcnRhYmxlKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5EZWZzW2NvbHVtbkluZGV4XS5zb3J0YWJsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjaGFuZ2VDb2x1bW5PcmRlcihzb3VyY2VDb2x1bW5JbmRleDogbnVtYmVyLCB0YXJnZXRDb2x1bW5JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5hcnJheU1vdmUodGhpcy5jb2x1bW5EZWZzLCBzb3VyY2VDb2x1bW5JbmRleCwgdGFyZ2V0Q29sdW1uSW5kZXgpO1xuICAgIHRoaXMuYXJyYXlNb3ZlKHRoaXMuY29sdW1uU2l6ZXMsIHNvdXJjZUNvbHVtbkluZGV4LCB0YXJnZXRDb2x1bW5JbmRleCk7XG4gICAgdGhpcy5oZWFkZXJBcmVhTW9kZWw/LmNoYW5nZUNvbHVtbk9yZGVyKHNvdXJjZUNvbHVtbkluZGV4LCB0YXJnZXRDb2x1bW5JbmRleCk7XG4gICAgdGhpcy5ib2R5QXJlYU1vZGVsPy5jaGFuZ2VDb2x1bW5PcmRlcihzb3VyY2VDb2x1bW5JbmRleCwgdGFyZ2V0Q29sdW1uSW5kZXgpO1xuICAgIHRoaXMuZm9vdGVyQXJlYU1vZGVsPy5jaGFuZ2VDb2x1bW5PcmRlcihzb3VyY2VDb2x1bW5JbmRleCwgdGFyZ2V0Q29sdW1uSW5kZXgpO1xuICAgIHRoaXMuY2FsY1hQb3NpdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXJyYXlNb3ZlKGFycjogYW55W10sIGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyLnNwbGljZShmcm9tSW5kZXgsIDEpWzBdO1xuICAgIGFyci5zcGxpY2UodG9JbmRleCwgMCwgZWxlbWVudCk7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjQ29udGVudFdpZHRoSW5QeCgpIHtcbiAgICB0aGlzLmNvbnRlbnRXaWR0aEluUHggPSB0aGlzLmdldFNpZGVBcmVhV2lkdGgoJ2NlbnRlcicpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjWFBvc2l0aW9ucygpIHtcbiAgICBjb25zdCBjb2x1bW5Db3VudCA9IHRoaXMuZ2V0Q29sdW1uQ291bnQoKTtcbiAgICB0aGlzLnhQb3NpdGlvbnMgPSBuZXcgQXJyYXkoY29sdW1uQ291bnQgKyAxKTtcbiAgICB0aGlzLnhQb3NpdGlvbnNbMF0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykge1xuICAgICAgdGhpcy54UG9zaXRpb25zW2kgKyAxXSA9IHRoaXMuZ2V0Q29sdW1uV2lkdGgoaSkgKyB0aGlzLnhQb3NpdGlvbnNbaV07XG4gICAgfVxuICB9XG5cblxufVxuXG5cbiJdfQ==
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvZGF0YS90YWJsZW1vZGVsL3RhYmxlLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFLcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFNbkU7Ozs7Ozs7Ozs7OztFQVlFO0FBQ0YsTUFBTSxPQUFPLFVBQVU7SUFVckIsWUFDa0IsZUFBNEIsRUFDNUIsYUFBMEIsRUFDMUIsZUFBNEIsRUFDNUIsdUJBQStCLENBQUMsRUFDaEMsd0JBQWdDLENBQUMsRUFDakMscUJBQThCLEtBQUssRUFDbkMsb0JBQXlDLElBQUksaUJBQWlCLEVBQUUsRUFDekUsYUFBNEIsRUFBRSxFQUM5QixjQUF3QixFQUFFLEVBQ3ZCLHdCQUFnQyxDQUFDLENBQUMsRUFDbEMsY0FBc0IsQ0FBQztRQVZqQixvQkFBZSxHQUFmLGVBQWUsQ0FBYTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBYTtRQUMxQixvQkFBZSxHQUFmLGVBQWUsQ0FBYTtRQUM1Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVk7UUFDaEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFZO1FBQ2pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBaUI7UUFDbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUErQztRQUN6RSxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUN2QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQWE7UUFDbEMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFuQnpCLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDdEIscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FB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QUFDLENBQUM7UUFDNUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhYmxlTW9kZWxJZiB9IGZyb20gXCIuL3RhYmxlLW1vZGVsLmlmXCI7XG5pbXBvcnQgeyBQYWRkaW5nIH0gZnJvbSBcIi4vcGFkZGluZ1wiO1xuaW1wb3J0IHsgQXJlYUlkZW50IH0gZnJvbSBcIi4vYXJlYS1pZGVudC50eXBlXCI7XG5pbXBvcnQgeyBBcmVhTW9kZWxJZiB9IGZyb20gXCIuL2FyZWFtb2RlbC9hcmVhLW1vZGVsLmlmXCI7XG5pbXBvcnQgeyBTaWRlSWRlbnQgfSBmcm9tIFwiLi4vc2lkZS1pZGVudC50eXBlXCI7XG5pbXBvcnQgeyBEZWZhdWx0Um93SGVpZ2h0c0lmIH0gZnJvbSBcIi4uL29wdGlvbnMvZGVmYXVsdC1yb3ctaGVpZ2h0cy5pZlwiO1xuaW1wb3J0IHsgRGVmYXVsdFJvd0hlaWdodHMgfSBmcm9tIFwiLi4vb3B0aW9ucy9kZWZhdWx0LXJvdy1oZWlnaHRzXCI7XG5pbXBvcnQgeyBDb2x1bW5EZWZJZiB9IGZyb20gXCIuL2NvbHVtbi9jb2x1bW4tZGVmLmlmXCI7XG5pbXBvcnQgeyBGaWx0ZXJGdW5jdGlvbiB9IGZyb20gXCIuLi9jb21tb24vZmlsdGVyLWZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBTb3J0SXRlbSB9IGZyb20gXCIuLi9jb21tb24vc29ydC1pdGVtXCI7XG5cblxuLypcblxuICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rXG4gfCAgaGVhZGVyL3dlc3QgICB8ICBoZWFkZXIvY2VudGVyICAgIHwgaGVhZGVyL2Vhc3QgIHxcbiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tK1xuIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8XG4gfCAgYm9keS93ZXN0ICAgICB8ICBib2R5L2NlbnRlciAgICAgIHwgYm9keS9lYXN0ICAgIHxcbiB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rXG4gfCAgZm9vdGVyL3dlc3QgICB8ICBmb290ZXIvY2VudGVyICAgIHwgZm9vdGVyL2Vhc3QgIHxcbiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tK1xuXG4qL1xuZXhwb3J0IGNsYXNzIFRhYmxlTW9kZWwgaW1wbGVtZW50cyBUYWJsZU1vZGVsSWYge1xuXG4gIHByb3RlY3RlZCByb3dDb3VudCA9IDA7XG4gIHByb3RlY3RlZCBjb250ZW50SGVpZ2h0SW5QeCA9IDA7XG4gIHByb3RlY3RlZCBjb250ZW50V2lkdGhJblB4ID0gMDtcblxuICAvLyBpbiBjYXNlIG9mIGEgZml4ZWQgaGVhZGVyLCBsZWZ0IG9yIHJpZ2h0IGNvbHVtbiwgZm9vdGVyOlxuICBwcm90ZWN0ZWQgcGFkZGluZyA9IG5ldyBQYWRkaW5nKDAsIDAsIDAsIDApOyAvLyB0aGUgZGltZW5zaW9uIG9mIHRoZSAnYm9keS9jZW50ZXInXG4gIHByb3RlY3RlZCB4UG9zaXRpb25zOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBoZWFkZXJBcmVhTW9kZWw6IEFyZWFNb2RlbElmLFxuICAgIHB1YmxpYyByZWFkb25seSBib2R5QXJlYU1vZGVsOiBBcmVhTW9kZWxJZixcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9vdGVyQXJlYU1vZGVsOiBBcmVhTW9kZWxJZixcbiAgICBwdWJsaWMgcmVhZG9ubHkgZml4ZWRMZWZ0Q29sdW1uQ291bnQ6IG51bWJlciA9IDAsXG4gICAgcHVibGljIHJlYWRvbmx5IGZpeGVkUmlnaHRDb2x1bW5Db3VudDogbnVtYmVyID0gMCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93Q2hlY2tib3hWaXNpYmxlOiBib29sZWFuID0gZmFsc2UsXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSb3dIZWlnaHRzOiBEZWZhdWx0Um93SGVpZ2h0c0lmID0gbmV3IERlZmF1bHRSb3dIZWlnaHRzKCksXG4gICAgcHVibGljIGNvbHVtbkRlZnM6IENvbHVtbkRlZklmW10gPSBbXSxcbiAgICBwdWJsaWMgY29sdW1uU2l6ZXM6IG51bWJlcltdID0gW10sXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRpbmdDb2x1bW5XaWR0aDogbnVtYmVyID0gLTEsXG4gICAgcHJvdGVjdGVkIGNvbHVtbkNvdW50OiBudW1iZXIgPSAwXG4gICkge1xuICAgIGhlYWRlckFyZWFNb2RlbC5hcmVhSWRlbnQgPSBcImhlYWRlclwiO1xuICAgIGJvZHlBcmVhTW9kZWwuYXJlYUlkZW50ID0gXCJib2R5XCI7XG4gICAgZm9vdGVyQXJlYU1vZGVsLmFyZWFJZGVudCA9IFwiZm9vdGVyXCI7XG4gICAgaWYgKCF0aGlzLmNvbHVtbkNvdW50KSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5EZWZzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5Db3VudCA9IHRoaXMuY29sdW1uRGVmcy5sZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uU2l6ZXM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNvbHVtbkNvdW50ID0gdGhpcy5jb2x1bW5TaXplcz8ubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgdGhpcy5yZWNhbGNTaXplKDQwMCk7XG4gICAgaWYgKHRoaXMub3ZlcnJpZGluZ0NvbHVtbldpZHRoID09PSAtMSkge1xuICAgICAgdGhpcy5jYWxjWFBvc2l0aW9ucygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oZWFkZXJBcmVhTW9kZWwpIHtcbiAgICAgIHRoaXMuaGVhZGVyQXJlYU1vZGVsLmluaXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9keUFyZWFNb2RlbCkge1xuICAgICAgdGhpcy5ib2R5QXJlYU1vZGVsLmluaXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9vdGVyQXJlYU1vZGVsKSB7XG4gICAgICB0aGlzLmZvb3RlckFyZWFNb2RlbC5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29sdW1uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5Db3VudDtcbiAgfTtcblxuICBzZXRDb2x1bW5XaWR0aChjb2x1bW5JbmRleDogbnVtYmVyLCB3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgd2lkdGggPSBNYXRoLm1heCgwLCB3aWR0aCk7XG4gICAgaWYgKHRoaXMub3ZlcnJpZGluZ0NvbHVtbldpZHRoICE9PSAtMSkge1xuICAgICAgdGhpcy5vdmVycmlkaW5nQ29sdW1uV2lkdGggPSB3aWR0aDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbkluZGV4ID4gLTEgJiYgY29sdW1uSW5kZXggPCB0aGlzLmNvbHVtblNpemVzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29sdW1uU2l6ZXNbY29sdW1uSW5kZXhdID0gd2lkdGg7XG4gICAgfVxuICAgIHRoaXMucmVjYWxjQ29udGVudFdpZHRoSW5QeCgpO1xuICB9XG5cbiAgZ2V0Q29sdW1uV2lkdGgoY29sdW1uSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMub3ZlcnJpZGluZ0NvbHVtbldpZHRoICE9PSAtMSkge1xuICAgICAgcmV0dXJuIHRoaXMub3ZlcnJpZGluZ0NvbHVtbldpZHRoO1xuICAgIH1cbiAgICBpZiAoY29sdW1uSW5kZXggPiAtMSAmJiBjb2x1bW5JbmRleCA8IHRoaXMuY29sdW1uU2l6ZXM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1uU2l6ZXNbY29sdW1uSW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfTtcblxuICBnZXRYUG9zQnlDb2x1bW5JbmRleChjb2x1bW5JbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoY29sdW1uSW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAodGhpcy5vdmVycmlkaW5nQ29sdW1uV2lkdGggPiAtMSkge1xuICAgICAgcmV0dXJuIHRoaXMub3ZlcnJpZGluZ0NvbHVtbldpZHRoICogY29sdW1uSW5kZXg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnhQb3NpdGlvbnNbY29sdW1uSW5kZXhdO1xuICB9XG5cbiAgcmVjYWxjU2l6ZShjbGllbnRXaWR0aDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbkRlZnM/Lmxlbmd0aCAmJiAhdGhpcy5jb2x1bW5TaXplcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbHVtblNpemVzID0gbmV3IEFycmF5KHRoaXMuZ2V0Q29sdW1uQ291bnQoKSkuZmlsbCh0aGlzLm92ZXJyaWRpbmdDb2x1bW5XaWR0aCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbHVtbkRlZnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5TaXplcyA9IHRoaXMuY29sdW1uRGVmcy5tYXAoZGVmID0+IHtcbiAgICAgICAgaWYgKGRlZi53aWR0aC51bml0ID09PSBcIiVcIiAmJiBjbGllbnRXaWR0aCkge1xuICAgICAgICAgIC8vIG9ubHkgZm9yIGEgJSB2YWx1ZSB3ZSBoYXZlIHRvIGNoZWNrIG1pbiBhbmQgbWF4OlxuICAgICAgICAgIGxldCBweCA9IE1hdGguZmxvb3IoZGVmLndpZHRoLnZhbHVlICogY2xpZW50V2lkdGggLyAxMDApO1xuICAgICAgICAgIGlmIChkZWYubWluV2lkdGgpIHtcbiAgICAgICAgICAgIGxldCBweE1pbiA9IGRlZi5taW5XaWR0aC51bml0ID09PSBcInB4XCIgPyBkZWYubWluV2lkdGgudmFsdWUgOiBNYXRoLmZsb29yKGRlZi5taW5XaWR0aC52YWx1ZSAqIGNsaWVudFdpZHRoIC8gMTAwKTtcbiAgICAgICAgICAgIHB4ID0gTWF0aC5tYXgocHhNaW4sIHB4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRlZi5tYXhXaWR0aCkge1xuICAgICAgICAgICAgbGV0IHB4TWF4ID0gZGVmLm1heFdpZHRoLnVuaXQgPT09IFwicHhcIiA/IGRlZi5tYXhXaWR0aC52YWx1ZSA6IE1hdGguZmxvb3IoZGVmLm1heFdpZHRoLnZhbHVlICogY2xpZW50V2lkdGggLyAxMDApO1xuICAgICAgICAgICAgcHggPSBNYXRoLm1pbihweE1heCwgcHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcHg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZi53aWR0aC52YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHlNb2RlbCA9IHRoaXMuZ2V0QXJlYU1vZGVsKFwiYm9keVwiKTtcbiAgICB0aGlzLnJvd0NvdW50ID0gYm9keU1vZGVsLmdldFJvd0NvdW50KCk7XG4gICAgdGhpcy5jb250ZW50SGVpZ2h0SW5QeCA9IHRoaXMuZ2V0QXJlYUhlaWdodChcImJvZHlcIik7XG4gICAgdGhpcy5yZWNhbGNDb250ZW50V2lkdGhJblB4KCk7XG5cbiAgICB0aGlzLnJlY2FsY1BhZGRpbmcoKTtcbiAgfVxuXG4gIHJlY2FsY1BhZGRpbmcoKSB7XG4gICAgY29uc3Qgd2VzdFdpZHRoID0gdGhpcy5nZXRTaWRlQXJlYVdpZHRoKFwid2VzdFwiKTtcbiAgICBjb25zdCBlYXN0V2lkdGggPSB0aGlzLmdldFNpZGVBcmVhV2lkdGgoXCJlYXN0XCIpO1xuICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IHRoaXMuZ2V0QXJlYUhlaWdodChcImhlYWRlclwiKTtcbiAgICBjb25zdCBmb290ZXJIZWlnaHQgPSB0aGlzLmdldEFyZWFIZWlnaHQoXCJmb290ZXJcIik7XG5cbiAgICB0aGlzLnBhZGRpbmcgPSBuZXcgUGFkZGluZyhcbiAgICAgIGhlYWRlckhlaWdodCxcbiAgICAgIGVhc3RXaWR0aCxcbiAgICAgIGZvb3RlckhlaWdodCxcbiAgICAgIHdlc3RXaWR0aCk7XG4gIH1cblxuICBnZXRQYWRkaW5nKCk6IFBhZGRpbmcge1xuICAgIHJldHVybiB0aGlzLnBhZGRpbmc7XG4gIH1cblxuICBnZXRDb250ZW50SGVpZ2h0SW5QaXhlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRIZWlnaHRJblB4O1xuICB9XG5cbiAgZ2V0Q29udGVudFdpZHRoSW5QaXhlbCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRXaWR0aEluUHg7XG4gIH1cblxuICBnZXRSb3dIZWlnaHQocm93QXJlYUlkZW50OiBBcmVhSWRlbnQsIHJvd0luZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldEFyZWFNb2RlbChyb3dBcmVhSWRlbnQpLmdldFJvd0hlaWdodChyb3dJbmRleCk7XG4gIH1cblxuICBnZXRNb2RlbChyb3dBcmVhSWRlbnQ6IEFyZWFJZGVudCk6IEFyZWFNb2RlbElmIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBcmVhTW9kZWwocm93QXJlYUlkZW50KTtcbiAgfVxuXG4gIGdldEFyZWFIZWlnaHQoYXJlYUlkZW50OiBBcmVhSWRlbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5nZXRNb2RlbChhcmVhSWRlbnQpO1xuICAgIGNvbnN0IHJvd0NvdW50ID0gbW9kZWwuZ2V0Um93Q291bnQoKTtcbiAgICBpZiAodGhpcy5kZWZhdWx0Um93SGVpZ2h0c1thcmVhSWRlbnRdKSB7XG4gICAgICByZXR1cm4gcm93Q291bnQgKiB0aGlzLmRlZmF1bHRSb3dIZWlnaHRzW2FyZWFJZGVudF07XG4gICAgfVxuXG4gICAgbGV0IHJldCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICByZXQgPSByZXQgKyBtb2RlbC5nZXRSb3dIZWlnaHQoaSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBnZXRTaWRlQXJlYVdpZHRoKHNpZGVJZGVudDogU2lkZUlkZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCBbY1N0YXJ0LCBjRW5kXSA9IHRoaXMuZ2V0U2lkZVN0YXJ0QW5kRW5kQ29sdW1uSW5kZXgoc2lkZUlkZW50KTtcbiAgICBsZXQgcmV0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gY1N0YXJ0OyBpIDw9IGNFbmQ7IGkrKykge1xuICAgICAgcmV0ID0gcmV0ICsgdGhpcy5nZXRDb2x1bW5XaWR0aChpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGdldFNpZGVTdGFydEFuZEVuZENvbHVtbkluZGV4KHNpZGVJZGVudDogU2lkZUlkZW50KTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgY29uc3QgYzEgPSB0aGlzLmdldEZpeGVkTGVmdENvbHVtbkNvdW50KCk7XG4gICAgY29uc3QgYzIgPSB0aGlzLmdldEZpeGVkUmlnaHRDb2x1bW5Db3VudCgpO1xuXG4gICAgbGV0IGNTdGFydCA9IDA7XG4gICAgbGV0IGNFbmQgPSB0aGlzLmNvbHVtbkNvdW50IC0gMTtcbiAgICBpZiAoc2lkZUlkZW50ID09PSBcIndlc3RcIikge1xuICAgICAgY0VuZCA9IGMxIC0gMTtcbiAgICB9IGVsc2UgaWYgKHNpZGVJZGVudCA9PT0gXCJlYXN0XCIpIHtcbiAgICAgIGNTdGFydCA9IHRoaXMuY29sdW1uQ291bnQgLSBjMjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2VudGVyOlxuICAgICAgY1N0YXJ0ID0gYzE7XG4gICAgICBjRW5kID0gdGhpcy5jb2x1bW5Db3VudCAtIGMyIC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIFtjU3RhcnQsIGNFbmRdO1xuICB9XG5cbiAgZ2V0Q29sdW1uRGVmKGluZGV4OiBudW1iZXIpOiBDb2x1bW5EZWZJZiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGluZGV4IDwgdGhpcy5jb2x1bW5EZWZzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1uRGVmc1tpbmRleF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRGaXhlZExlZnRDb2x1bW5Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZpeGVkTGVmdENvbHVtbkNvdW50O1xuICB9XG5cbiAgZ2V0Rml4ZWRSaWdodENvbHVtbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZml4ZWRSaWdodENvbHVtbkNvdW50O1xuICB9XG5cbiAgZ2V0QXJlYU1vZGVsKGFyZWE6IEFyZWFJZGVudCk6IEFyZWFNb2RlbElmIHtcbiAgICBpZiAoYXJlYSA9PT0gXCJoZWFkZXJcIikge1xuICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyQXJlYU1vZGVsO1xuICAgIH1cbiAgICBpZiAoYXJlYSA9PT0gXCJib2R5XCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHlBcmVhTW9kZWw7XG4gICAgfVxuICAgIGlmIChhcmVhID09PSBcImZvb3RlclwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb290ZXJBcmVhTW9kZWw7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlkZW50LlwiKTtcbiAgfVxuXG4gIGdldEJvZHlNb2RlbCgpOiBBcmVhTW9kZWxJZiB7XG4gICAgcmV0dXJuIHRoaXMuYm9keUFyZWFNb2RlbDtcbiAgfVxuXG4gIGlzRm9vdGVyVmlzaWJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5mb290ZXJBcmVhTW9kZWw/LmdldFJvd0NvdW50KCkgPz8gMCkgPiAwO1xuICB9XG5cbiAgaXNIZWFkZXJWaXNpYmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmhlYWRlckFyZWFNb2RlbD8uZ2V0Um93Q291bnQoKSA/PyAwKSA+IDA7XG4gIH1cblxuICBpc1Jvd0NoZWNrYm94VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb3dDaGVja2JveFZpc2libGU7XG4gIH1cblxuICBleHRlcm5hbEZpbHRlckNoYW5nZWQ8VD4ocHJlZGljdEZuOiBGaWx0ZXJGdW5jdGlvbjxUPik6IHZvaWQge1xuICAgIHRoaXMuZ2V0QXJlYU1vZGVsKFwiYm9keVwiKS5leHRlcm5hbEZpbHRlckNoYW5nZWQocHJlZGljdEZuKTtcbiAgfVxuXG4gIGRvU29ydChzb3J0SXRlbXM6IFNvcnRJdGVtW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBcmVhTW9kZWwoXCJib2R5XCIpLmRvU29ydChzb3J0SXRlbXMpO1xuICB9XG5cbiAgZ2V0Q29sdW1uRGVmcygpOiBDb2x1bW5EZWZJZltdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5EZWZzO1xuICB9XG5cbiAgZ2V0Q29sdW1uUHJvcGVydHkoY29sdW1uSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRGVmc1tjb2x1bW5JbmRleF0ucHJvcGVydHk7XG4gIH1cblxuICBnZXRCb2R5Um93QnlJbmRleChyb3dJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb2R5TW9kZWwoKS5nZXRSb3dCeUluZGV4KHJvd0luZGV4KTtcbiAgfVxuXG4gIGlzU29ydGFibGUoY29sdW1uSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNvbHVtbkRlZnNcbiAgICAgICYmIGNvbHVtbkluZGV4IDwgdGhpcy5jb2x1bW5EZWZzLmxlbmd0aFxuICAgICAgJiYgdGhpcy5jb2x1bW5EZWZzW2NvbHVtbkluZGV4XS5zb3J0YWJsZSkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIHRoaXMuY29sdW1uRGVmc1tjb2x1bW5JbmRleF0uc29ydGFibGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY2hhbmdlQ29sdW1uT3JkZXIoc291cmNlQ29sdW1uSW5kZXg6IG51bWJlciwgdGFyZ2V0Q29sdW1uSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuYXJyYXlNb3ZlKHRoaXMuY29sdW1uRGVmcywgc291cmNlQ29sdW1uSW5kZXgsIHRhcmdldENvbHVtbkluZGV4KTtcbiAgICB0aGlzLmFycmF5TW92ZSh0aGlzLmNvbHVtblNpemVzLCBzb3VyY2VDb2x1bW5JbmRleCwgdGFyZ2V0Q29sdW1uSW5kZXgpO1xuICAgIHRoaXMuaGVhZGVyQXJlYU1vZGVsPy5jaGFuZ2VDb2x1bW5PcmRlcihzb3VyY2VDb2x1bW5JbmRleCwgdGFyZ2V0Q29sdW1uSW5kZXgpO1xuICAgIHRoaXMuYm9keUFyZWFNb2RlbD8uY2hhbmdlQ29sdW1uT3JkZXIoc291cmNlQ29sdW1uSW5kZXgsIHRhcmdldENvbHVtbkluZGV4KTtcbiAgICB0aGlzLmZvb3RlckFyZWFNb2RlbD8uY2hhbmdlQ29sdW1uT3JkZXIoc291cmNlQ29sdW1uSW5kZXgsIHRhcmdldENvbHVtbkluZGV4KTtcbiAgICB0aGlzLmNhbGNYUG9zaXRpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIGFycmF5TW92ZShhcnI6IGFueVtdLCBmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFyci5zcGxpY2UoZnJvbUluZGV4LCAxKVswXTtcbiAgICBhcnIuc3BsaWNlKHRvSW5kZXgsIDAsIGVsZW1lbnQpO1xuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICBwcml2YXRlIHJlY2FsY0NvbnRlbnRXaWR0aEluUHgoKSB7XG4gICAgdGhpcy5jb250ZW50V2lkdGhJblB4ID0gdGhpcy5nZXRTaWRlQXJlYVdpZHRoKFwiY2VudGVyXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjWFBvc2l0aW9ucygpIHtcbiAgICBjb25zdCBjb2x1bW5Db3VudCA9IHRoaXMuZ2V0Q29sdW1uQ291bnQoKTtcbiAgICB0aGlzLnhQb3NpdGlvbnMgPSBuZXcgQXJyYXkoY29sdW1uQ291bnQgKyAxKTtcbiAgICB0aGlzLnhQb3NpdGlvbnNbMF0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykge1xuICAgICAgdGhpcy54UG9zaXRpb25zW2kgKyAxXSA9IHRoaXMuZ2V0Q29sdW1uV2lkdGgoaSkgKyB0aGlzLnhQb3NpdGlvbnNbaV07XG4gICAgfVxuICB9XG5cblxufVxuXG5cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ export class EventAdapter {
2
+ onCheckboxChanged(_evt) {
3
+ }
4
+ onContextmenu(_evt) {
5
+ }
6
+ onModelChanged(_evt) {
7
+ }
8
+ onMouseClicked(_evt) {
9
+ }
10
+ onMouseDragging(_evt) {
11
+ }
12
+ onMouseDraggingEnd(_evt) {
13
+ }
14
+ onMouseMoved(_evt) {
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGFibGUvc3JjL2xpYi90YWJsZS9ldmVudC1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sT0FBTyxZQUFZO0lBRXZCLGlCQUFpQixDQUFDLElBQVc7SUFDN0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFrQjtJQUNoQyxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQXdCO0lBQ3ZDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBa0I7SUFDakMsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFrQjtJQUNsQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBa0I7SUFDckMsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFrQjtJQUMvQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0dlTW9kZWxDaGFuZ2VFdmVudH0gZnJvbSBcIi4vZGF0YS9jb21tb24vZXZlbnQvZ2UtbW9kZWwtY2hhbmdlLWV2ZW50XCI7XG5pbXBvcnQge0dlTW91c2VFdmVudH0gZnJvbSBcIi4vZGF0YS9jb21tb24vZXZlbnQvZ2UtbW91c2UtZXZlbnRcIjtcbmltcG9ydCB7RXZlbnRMaXN0ZW5lcklmfSBmcm9tIFwiLi9ldmVudC1saXN0ZW5lci5pZlwiO1xuXG5leHBvcnQgY2xhc3MgRXZlbnRBZGFwdGVyIGltcGxlbWVudHMgRXZlbnRMaXN0ZW5lcklmIHtcblxuICBvbkNoZWNrYm94Q2hhbmdlZChfZXZ0OiBhbnlbXSk6IHZvaWQge1xuICB9XG5cbiAgb25Db250ZXh0bWVudShfZXZ0OiBHZU1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2VkKF9ldnQ6IEdlTW9kZWxDaGFuZ2VFdmVudCk6IHZvaWQge1xuICB9XG5cbiAgb25Nb3VzZUNsaWNrZWQoX2V2dDogR2VNb3VzZUV2ZW50KTogdm9pZCB7XG4gIH1cblxuICBvbk1vdXNlRHJhZ2dpbmcoX2V2dDogR2VNb3VzZUV2ZW50KTogdm9pZCB7XG4gIH1cblxuICBvbk1vdXNlRHJhZ2dpbmdFbmQoX2V2dDogR2VNb3VzZUV2ZW50KTogdm9pZCB7XG4gIH1cblxuICBvbk1vdXNlTW92ZWQoX2V2dDogR2VNb3VzZUV2ZW50KTogdm9pZCB7XG4gIH1cblxufVxuIl19
@@ -1,12 +1,9 @@
1
1
  import { TreeRow } from "./data/common/tree-row";
2
2
  import { getAreaIdentByString } from "./data/tablemodel/area-ident.type";
3
- // TODO dragging: https://mail.google.com/mail/u/0/?tab=rm&ogbl#inbox/QgrcJHsblSWwBjHVBvdvkrRQGnHVMvpLDDQ
4
3
  export class MouseHandler {
5
4
  constructor(tableScope) {
6
5
  this.tableScope = tableScope;
7
6
  this.expandedAll = true;
8
- this.lastRowIndex = -1;
9
- this.lastColumnIndex = -1;
10
7
  this.mouseDown = false;
11
8
  this.dragging = false;
12
9
  this.tableScope.hostElement.addEventListener("click", this.onHostElementClicked.bind(this));
@@ -64,15 +61,12 @@ export class MouseHandler {
64
61
  }
65
62
  }
66
63
  }
67
- this.lastRowIndex = rowIdx;
68
- this.lastColumnIndex = colIdx;
69
64
  }
70
65
  }
71
66
  this.publishGeMouseEvent(event, 1);
72
67
  }
73
68
  ;
74
69
  onHostElementDblClicked(event) {
75
- console.info('onHostElementDblClicked...'); // TODO weg
76
70
  if (event.target instanceof HTMLElement) {
77
71
  const target = event.target;
78
72
  const area = target.getAttribute('data-area');
@@ -194,4 +188,4 @@ export class MouseHandler {
194
188
  }
195
189
  }
196
190
  }
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW91c2UtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGFibGUvc3JjL2xpYi90YWJsZS9tb3VzZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQVksb0JBQW9CLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUdsRiwwR0FBMEc7QUFFMUcsTUFBTSxPQUFPLFlBQVk7SUFjdkIsWUFDWSxVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBUjFCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGlCQUFZLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDMUIsb0JBQWUsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUU3QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFLdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTNGLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUV0SCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FDM0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUNyRyxDQUFDO0lBQ0osQ0FBQztJQUVPLGFBQWEsQ0FBQyxHQUFlO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFBQSxDQUFDO0lBRU0sb0JBQW9CLENBQUMsS0FBaUI7UUFDNUMsSUFBSSxLQUFLLENBQUMsTUFBTSxZQUFZLFdBQVcsRUFBRTtZQUN2QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztZQUUzQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyx5QkFBeUIsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMxRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU87YUFDUjtZQUVELElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxJQUFJLEVBQUU7b0JBRVIsTUFBTSxTQUFTLEdBQWMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDckUsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFNUMsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEtBQUssVUFBVSxFQUFFO3dCQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7d0JBQzdELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTztxQkFDUjtvQkFFRCxJQUFJLEdBQUcsWUFBWSxPQUFPLEVBQUU7d0JBQzFCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7d0JBQ2pGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUM7d0JBRTFFLElBQUksa0JBQWtCLElBQUksWUFBWSxFQUFFOzRCQUN0Qyw2QkFBNkI7NEJBQzdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0QkFDdkIsTUFBTSxFQUFFLEdBQWlCLEdBQW1CLENBQUM7NEJBQzdDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDOzRCQUUzQixJQUFJLHVCQUF1QixJQUFJLFNBQVMsRUFBRTtnQ0FDeEMsYUFBYTtnQ0FDYixTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs2QkFDbkM7NEJBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUMvRSxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUM7NEJBQzFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDdkM7cUJBQ0Y7aUJBQ0Y7Z0JBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO2FBQy9CO1NBQ0Y7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFBQSxDQUFDO0lBR00sdUJBQXVCLENBQUMsS0FBaUI7UUFDL0MsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsV0FBVztRQUV2RCxJQUFJLEtBQUssQ0FBQyxNQUFNLFlBQVksV0FBVyxFQUFFO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1lBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUMsTUFBTSxTQUFTLEdBQWMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUM3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFckUsSUFBSSxJQUFJLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRTtnQkFDbEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ2pELElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDM0Q7YUFFRjtpQkFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDaEQsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFNUMsSUFBSSxJQUFJLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRTtvQkFDaEMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7cUJBQ2xEO2lCQUNGO2dCQUVELElBQUksR0FBRyxZQUFZLE9BQU8sRUFBRTtvQkFDMUIsSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7d0JBQ3pDLDZCQUE2Qjt3QkFDN0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixNQUFNLEVBQUUsR0FBaUIsR0FBbUIsQ0FBQzt3QkFDN0MsRUFBRSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUM7d0JBRTNCLElBQUksdUJBQXVCLElBQUksU0FBUyxFQUFFOzRCQUN4QyxhQUFhOzRCQUNiLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3lCQUNuQzt3QkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQy9FLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzt3QkFFMUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUN2QztpQkFDRjthQUNGO1NBQ0Y7UUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFBQSxDQUFDO0lBR00sbUJBQW1CLENBQUMsS0FBaUIsRUFBRSxVQUFrQjtRQUMvRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7U0FDM0M7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBR08sNEJBQTRCLENBQUMsRUFBZ0I7UUFDbkQsNEJBQTRCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztRQUM1RSxJQUFJLFFBQVEsRUFBRTtZQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDaEcsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUYsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUYsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxFQUFFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hGO2lCQUFNLElBQUksTUFBTSxFQUFFO2dCQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxFQUFFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xGO1NBQ0Y7SUFDSCxDQUFDO0lBR08sbUJBQW1CO1FBQ3pCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM3RSxPQUFPLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBR08sV0FBVyxDQUFDLEdBQWU7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUdPLFdBQVcsQ0FBQyxHQUFlO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDN0Q7YUFBTTtZQUNMLHFCQUFxQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUM7SUFHTyxTQUFTLENBQUMsR0FBZTtRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIscUJBQXFCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUdPLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkUsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRTtnQkFDdkMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7Z0JBQzVGLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO2FBQzdGO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUU7Z0JBQ3ZDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO2dCQUM1RixVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQzthQUM3RjtZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBR08sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VGFibGVTY29wZX0gZnJvbSBcIi4vdGFibGUtc2NvcGVcIjtcbmltcG9ydCB7VHJlZVJvd30gZnJvbSBcIi4vZGF0YS9jb21tb24vdHJlZS1yb3dcIjtcbmltcG9ydCB7QXJlYUlkZW50LCBnZXRBcmVhSWRlbnRCeVN0cmluZ30gZnJvbSBcIi4vZGF0YS90YWJsZW1vZGVsL2FyZWEtaWRlbnQudHlwZVwiO1xuaW1wb3J0IHtHZU1vdXNlRXZlbnR9IGZyb20gXCIuL2RhdGEvY29tbW9uL2V2ZW50L2dlLW1vdXNlLWV2ZW50XCI7XG5cbi8vIFRPRE8gZHJhZ2dpbmc6ICBodHRwczovL21haWwuZ29vZ2xlLmNvbS9tYWlsL3UvMC8/dGFiPXJtJm9nYmwjaW5ib3gvUWdyY0pIc2JsU1d3QmpIVkJ2ZHZrclJRR25IVk12cExERFFcblxuZXhwb3J0IGNsYXNzIE1vdXNlSGFuZGxlciB7XG5cbiAgbW91c2VFdmVudD86IE1vdXNlRXZlbnQ7XG4gIHN0YXJ0TW91c2VFdmVudD86IEdlTW91c2VFdmVudDtcbiAgZ2VNb3VzZUV2ZW50PzogR2VNb3VzZUV2ZW50O1xuICBnZU1vdXNlRXZlbnRPbGQ/OiBHZU1vdXNlRXZlbnQ7XG5cbiAgcHJpdmF0ZSBleHBhbmRlZEFsbCA9IHRydWU7XG4gIHByaXZhdGUgbGFzdFJvd0luZGV4OiBudW1iZXIgPSAtMTtcbiAgcHJpdmF0ZSBsYXN0Q29sdW1uSW5kZXg6IG51bWJlciA9IC0xO1xuXG4gIHByaXZhdGUgbW91c2VEb3duID0gZmFsc2U7XG4gIHByaXZhdGUgZHJhZ2dpbmcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdGFibGVTY29wZTogVGFibGVTY29wZVxuICApIHtcbiAgICB0aGlzLnRhYmxlU2NvcGUuaG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMub25Ib3N0RWxlbWVudENsaWNrZWQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy50YWJsZVNjb3BlLmhvc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJkYmxjbGlja1wiLCB0aGlzLm9uSG9zdEVsZW1lbnREYmxDbGlja2VkLmJpbmQodGhpcykpO1xuICAgIHRoaXMudGFibGVTY29wZS5ob3N0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIHRoaXMub25Nb3VzZURvd24uYmluZCh0aGlzKSk7XG4gICAgdGhpcy50YWJsZVNjb3BlLmhvc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnRhYmxlU2NvcGUuaG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKSk7XG4gICAgdGhpcy50YWJsZVNjb3BlLmhvc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLm9uQ29udGV4dG1lbnUuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLnRhYmxlU2NvcGUuc2Nyb2xsVmlld3BvcnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLnRhYmxlU2NvcGUuYWRqdXN0QWZ0ZXJTY3JvbGxpbmcuYmluZCh0aGlzLnRhYmxlU2NvcGUpKTtcblxuICAgIFt3aW5kb3csIHRoaXMudGFibGVTY29wZS5ob3N0RWxlbWVudF0uZm9yRWFjaChcbiAgICAgIGVsZSA9PiBlbGUuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLnRhYmxlU2NvcGUuYWRqdXN0Q29udGFpbmVyc0FuZFJvd3MuYmluZCh0aGlzLnRhYmxlU2NvcGUpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGV4dG1lbnUoZXZ0OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5tb3VzZUV2ZW50ID0gZXZ0O1xuICAgIGNvbnN0IG1vdXNlTW92ZUV2ZW50ID0gdGhpcy50YWJsZVNjb3BlLmNyZWF0ZUdlTW91c2VFdmVudCh0aGlzLm1vdXNlRXZlbnQpO1xuICAgIHRoaXMudGFibGVTY29wZS5jb250ZXh0bWVudShtb3VzZU1vdmVFdmVudCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBvbkhvc3RFbGVtZW50Q2xpY2tlZChldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICBpZiAodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1nZS1hY3Rpb24nKSA9PT0gJ3RvZ2dsZUV4cGFuZENvbGxhcHNlQWxsJykge1xuICAgICAgICB0aGlzLmV4cGFuZGVkQWxsID0gIXRoaXMuZXhwYW5kZWRBbGw7XG4gICAgICAgIHRoaXMudGFibGVTY29wZS50b2dnbGVFeHBhbmRDb2xsYXBzZUFsbCh0aGlzLmV4cGFuZGVkQWxsKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3ctaW5kZXgnKSkge1xuICAgICAgICBjb25zdCByb3dJZHggPSBOdW1iZXIodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3ctaW5kZXgnKSk7XG4gICAgICAgIGNvbnN0IGNvbElkeCA9IE51bWJlcih0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pbmRleCcpKTtcbiAgICAgICAgY29uc3QgYXJlYSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYXJlYScpO1xuICAgICAgICBpZiAoYXJlYSkge1xuXG4gICAgICAgICAgY29uc3QgYXJlYUlkZW50OiBBcmVhSWRlbnQgPSBnZXRBcmVhSWRlbnRCeVN0cmluZyhhcmVhKTtcbiAgICAgICAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlU2NvcGUudGFibGVNb2RlbC5nZXRBcmVhTW9kZWwoYXJlYUlkZW50KTtcbiAgICAgICAgICBjb25zdCByb3cgPSBhcmVhTW9kZWwuZ2V0Um93QnlJbmRleChyb3dJZHgpO1xuXG4gICAgICAgICAgaWYgKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5wdXQtdHlwZScpID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlU2NvcGUudG9nZ2xlUm93Q2hlY2tib3gocm93SWR4LCBjb2xJZHgsIGFyZWFJZGVudCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyb3cgaW5zdGFuY2VvZiBUcmVlUm93KSB7XG4gICAgICAgICAgICBjb25zdCBhbHRDbGlja09uRmlyc3RDb2wgPSBjb2xJZHggPT09IHRoaXMuZ2V0QXJyb3dDb2x1bW5JbmRleCgpICYmIGV2ZW50LmFsdEtleTtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrT25BcnJvdyA9IHRhcmdldC5jbGFzc05hbWUuaW5jbHVkZXMoJ2dlLXRhYmxlLXRyZWUtYXJyb3ctZGl2Jyk7XG5cbiAgICAgICAgICAgIGlmIChhbHRDbGlja09uRmlyc3RDb2wgfHwgY2xpY2tPbkFycm93KSB7XG4gICAgICAgICAgICAgIC8vIHRvZ2dsZSBjb2xsYXBzZWQvZXhwYW5kZWQ6XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IHRyOiBUcmVlUm93PGFueT4gPSByb3cgYXMgVHJlZVJvdzxhbnk+O1xuICAgICAgICAgICAgICB0ci5leHBhbmRlZCA9ICF0ci5leHBhbmRlZDtcblxuICAgICAgICAgICAgICBpZiAoJ3JlY2FsY1Zpc2libGVUcmVlUm93cycgaW4gYXJlYU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGFyZWFNb2RlbC5yZWNhbGNWaXNpYmxlVHJlZVJvd3MoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnRhYmxlU2NvcGUudGFibGVNb2RlbC5yZWNhbGNTaXplKHRoaXMudGFibGVTY29wZS5ob3N0RWxlbWVudC5jbGllbnRXaWR0aCk7XG4gICAgICAgICAgICAgIHRoaXMudGFibGVTY29wZS5hZGp1c3RDb250YWluZXJzQW5kUm93cygpO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbGxhcHNlZEV4cGFuZGVkU3RhdGUodHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGFzdFJvd0luZGV4ID0gcm93SWR4O1xuICAgICAgICB0aGlzLmxhc3RDb2x1bW5JbmRleCA9IGNvbElkeDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wdWJsaXNoR2VNb3VzZUV2ZW50KGV2ZW50LCAxKTtcbiAgfTtcblxuXG4gIHByaXZhdGUgb25Ib3N0RWxlbWVudERibENsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zb2xlLmluZm8oJ29uSG9zdEVsZW1lbnREYmxDbGlja2VkLi4uJyk7IC8vIFRPRE8gd2VnXG5cbiAgICBpZiAoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGFyZWEgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWFyZWEnKTtcbiAgICAgIGNvbnN0IGFyZWFJZGVudDogQXJlYUlkZW50ID0gZ2V0QXJlYUlkZW50QnlTdHJpbmcoYXJlYSk7XG4gICAgICBjb25zdCByb3dJZHggPSBOdW1iZXIodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3ctaW5kZXgnKSk7XG4gICAgICBjb25zdCBjb2xJZHggPSBOdW1iZXIodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaW5kZXgnKSk7XG4gICAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlU2NvcGUudGFibGVNb2RlbC5nZXRBcmVhTW9kZWwoYXJlYUlkZW50KTtcblxuICAgICAgaWYgKGFyZWEgJiYgYXJlYUlkZW50ID09PSAnaGVhZGVyJykge1xuICAgICAgICBpZiAodGhpcy50YWJsZVNjb3BlLnRhYmxlTW9kZWwuaXNTb3J0YWJsZShjb2xJZHgpKSB7XG4gICAgICAgICAgdGhpcy50YWJsZVNjb3BlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgdGhpcy50YWJsZVNjb3BlLm9uSGVhZGVyRGJsQ2xpY2tlZChldmVudCwgcm93SWR4LCBjb2xJZHgpO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3ctaW5kZXgnKSkge1xuICAgICAgICBjb25zdCByb3cgPSBhcmVhTW9kZWwuZ2V0Um93QnlJbmRleChyb3dJZHgpO1xuXG4gICAgICAgIGlmIChhcmVhICYmIGFyZWFJZGVudCA9PT0gJ2JvZHknKSB7XG4gICAgICAgICAgaWYgKGFyZWFNb2RlbC5pc0VkaXRhYmxlKHJvd0lkeCwgY29sSWR4KSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZVNjb3BlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnRhYmxlU2NvcGUuaW5pdFJlbmRlckVkaXRvcihyb3dJZHgsIGNvbElkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdyBpbnN0YW5jZW9mIFRyZWVSb3cpIHtcbiAgICAgICAgICBpZiAoY29sSWR4ID09PSB0aGlzLmdldEFycm93Q29sdW1uSW5kZXgoKSkge1xuICAgICAgICAgICAgLy8gdG9nZ2xlIGNvbGxhcHNlZC9leHBhbmRlZDpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCB0cjogVHJlZVJvdzxhbnk+ID0gcm93IGFzIFRyZWVSb3c8YW55PjtcbiAgICAgICAgICAgIHRyLmV4cGFuZGVkID0gIXRyLmV4cGFuZGVkO1xuXG4gICAgICAgICAgICBpZiAoJ3JlY2FsY1Zpc2libGVUcmVlUm93cycgaW4gYXJlYU1vZGVsKSB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgYXJlYU1vZGVsLnJlY2FsY1Zpc2libGVUcmVlUm93cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50YWJsZVNjb3BlLnRhYmxlTW9kZWwucmVjYWxjU2l6ZSh0aGlzLnRhYmxlU2NvcGUuaG9zdEVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgICAgICAgICAgdGhpcy50YWJsZVNjb3BlLmFkanVzdENvbnRhaW5lcnNBbmRSb3dzKCk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSh0cik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wdWJsaXNoR2VNb3VzZUV2ZW50KGV2ZW50LCAyKTtcbiAgfTtcblxuXG4gIHByaXZhdGUgcHVibGlzaEdlTW91c2VFdmVudChldmVudDogTW91c2VFdmVudCwgY2xpY2tDb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5tb3VzZUV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5nZU1vdXNlRXZlbnRPbGQgPSB0aGlzLmdlTW91c2VFdmVudD8uY2xvbmUoKTtcbiAgICB0aGlzLmdlTW91c2VFdmVudCA9IHRoaXMudGFibGVTY29wZS5jcmVhdGVHZU1vdXNlRXZlbnQoZXZlbnQpO1xuICAgIGlmICh0aGlzLmdlTW91c2VFdmVudCkge1xuICAgICAgdGhpcy5nZU1vdXNlRXZlbnQuY2xpY2tDb3VudCA9IGNsaWNrQ291bnQ7XG4gICAgfVxuICAgIHRoaXMudGFibGVTY29wZS5vbk1vdXNlQ2xpY2tlZCh0aGlzLmdlTW91c2VFdmVudCwgdGhpcy5nZU1vdXNlRXZlbnRPbGQpO1xuICB9XG5cblxuICBwcml2YXRlIHVwZGF0ZUNvbGxhcHNlZEV4cGFuZGVkU3RhdGUodHI6IFRyZWVSb3c8YW55Pikge1xuICAgIC8vIHN0b3JlIGV4cGFuZGVkL2NvbGxhcHNlZDpcbiAgICBjb25zdCBnZXRSb3dJZCA9IHRoaXMudGFibGVTY29wZS50YWJsZU9wdGlvbnM/LmF1dG9SZXN0b3JlT3B0aW9ucz8uZ2V0Um93SWQ7XG4gICAgaWYgKGdldFJvd0lkKSB7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy50YWJsZVNjb3BlLnN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlPy5jb2xsYXBzZWRFeHBhbmRlZFN0YXRlR2V0KCkubW9kZTtcbiAgICAgIGNvbnN0IHB1c2ggPSAobW9kZSA9PT0gJ2NvbGxhcHNlZCcgJiYgIXRyLmV4cGFuZGVkKSB8fCAobW9kZSA9PT0gJ2V4cGFuZGVkJyAmJiB0ci5leHBhbmRlZCk7XG4gICAgICBjb25zdCByZW1vdmUgPSAobW9kZSA9PT0gJ2NvbGxhcHNlZCcgJiYgdHIuZXhwYW5kZWQpIHx8IChtb2RlID09PSAnZXhwYW5kZWQnICYmICF0ci5leHBhbmRlZCk7XG4gICAgICBjb25zdCByb3dJZCA9IGdldFJvd0lkKHRyLmRhdGEpO1xuICAgICAgaWYgKHB1c2gpIHtcbiAgICAgICAgdGhpcy50YWJsZVNjb3BlLnN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlPy5jb2xsYXBzZWRTdGF0ZUlkc1B1c2gocm93SWQpO1xuICAgICAgfSBlbHNlIGlmIChyZW1vdmUpIHtcbiAgICAgICAgdGhpcy50YWJsZVNjb3BlLnN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlPy5jb2xsYXBzZWRTdGF0ZUlkc1JlbW92ZShyb3dJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIGdldEFycm93Q29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICBjb25zdCByb3dDaGVja2JveFZpc2libGUgPSB0aGlzLnRhYmxlU2NvcGUudGFibGVNb2RlbC5pc1Jvd0NoZWNrYm94VmlzaWJsZSgpO1xuICAgIHJldHVybiByb3dDaGVja2JveFZpc2libGUgPyAxIDogMDtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBvbk1vdXNlRG93bihldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm1vdXNlRXZlbnQgPSBldnQ7XG4gICAgdGhpcy5zdGFydE1vdXNlRXZlbnQgPSB0aGlzLnRhYmxlU2NvcGUuY3JlYXRlR2VNb3VzZUV2ZW50KHRoaXMubW91c2VFdmVudCk7XG4gICAgdGhpcy50YWJsZVNjb3BlLm9uTW91c2VEb3duKHRoaXMuc3RhcnRNb3VzZUV2ZW50KTtcbiAgICB0aGlzLm1vdXNlRG93biA9IHRydWU7XG4gIH1cblxuXG4gIHByaXZhdGUgb25Nb3VzZU1vdmUoZXZ0OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5tb3VzZUV2ZW50ID0gZXZ0O1xuICAgIGlmICh0aGlzLm1vdXNlRG93bikge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5tb3VzZURyYWdnaW5nT25GcmFtZS5iaW5kKHRoaXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMubW91c2VNb3ZlT25GcmFtZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgb25Nb3VzZVVwKGV2dDogTW91c2VFdmVudCkge1xuICAgIHRoaXMubW91c2VFdmVudCA9IGV2dDtcbiAgICBpZiAodGhpcy5kcmFnZ2luZykge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMubW91c2VEcmFnZ2luZ0VuZE9uRnJhbWUuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIHRoaXMubW91c2VEb3duID0gZmFsc2U7XG4gICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICB9XG5cblxuICBwcml2YXRlIG1vdXNlRHJhZ2dpbmdPbkZyYW1lKCkge1xuICAgIGlmICh0aGlzLm1vdXNlRXZlbnQpIHtcbiAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSB0aGlzLnRhYmxlU2NvcGUuY3JlYXRlR2VNb3VzZUV2ZW50KHRoaXMubW91c2VFdmVudCk7XG4gICAgICBpZiAodGhpcy5zdGFydE1vdXNlRXZlbnQ/Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgbW91c2VFdmVudC5kcmFnZ2luZ1ggPSB0aGlzLm1vdXNlRXZlbnQuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZUV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WDtcbiAgICAgICAgbW91c2VFdmVudC5kcmFnZ2luZ1kgPSB0aGlzLm1vdXNlRXZlbnQuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZUV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGVTY29wZS5tb3VzZURyYWdnaW5nT25GcmFtZShtb3VzZUV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdXNlRHJhZ2dpbmdFbmRPbkZyYW1lKCkge1xuICAgIGlmICh0aGlzLm1vdXNlRXZlbnQpIHtcbiAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSB0aGlzLnRhYmxlU2NvcGUuY3JlYXRlR2VNb3VzZUV2ZW50KHRoaXMubW91c2VFdmVudCk7XG4gICAgICBpZiAodGhpcy5zdGFydE1vdXNlRXZlbnQ/Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgbW91c2VFdmVudC5kcmFnZ2luZ1ggPSB0aGlzLm1vdXNlRXZlbnQuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZUV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WDtcbiAgICAgICAgbW91c2VFdmVudC5kcmFnZ2luZ1kgPSB0aGlzLm1vdXNlRXZlbnQuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZUV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGVTY29wZS5tb3VzZURyYWdnaW5nRW5kT25GcmFtZShtb3VzZUV2ZW50KTtcbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgbW91c2VNb3ZlT25GcmFtZSgpIHtcbiAgICBpZiAodGhpcy5tb3VzZUV2ZW50KSB7XG4gICAgICBjb25zdCBtb3VzZU1vdmVFdmVudCA9IHRoaXMudGFibGVTY29wZS5jcmVhdGVHZU1vdXNlRXZlbnQodGhpcy5tb3VzZUV2ZW50KTtcbiAgICAgIHRoaXMudGFibGVTY29wZS5tb3VzZU1vdmUobW91c2VNb3ZlRXZlbnQpO1xuICAgIH1cbiAgfVxuXG5cbn1cbiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW91c2UtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdGFibGUvc3JjL2xpYi90YWJsZS9tb3VzZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQWEsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUlwRixNQUFNLE9BQU8sWUFBWTtJQVd2QixZQUNZLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFMMUIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBS3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJ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QUMsT0FBTyxDQUFDO2FBQzdGO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUU7Z0JBQ3ZDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO2dCQUM1RixVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQzthQUM3RjtZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBR08sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhYmxlU2NvcGUgfSBmcm9tIFwiLi90YWJsZS1zY29wZVwiO1xuaW1wb3J0IHsgVHJlZVJvdyB9IGZyb20gXCIuL2RhdGEvY29tbW9uL3RyZWUtcm93XCI7XG5pbXBvcnQgeyBBcmVhSWRlbnQsIGdldEFyZWFJZGVudEJ5U3RyaW5nIH0gZnJvbSBcIi4vZGF0YS90YWJsZW1vZGVsL2FyZWEtaWRlbnQudHlwZVwiO1xuaW1wb3J0IHsgR2VNb3VzZUV2ZW50IH0gZnJvbSBcIi4vZGF0YS9jb21tb24vZXZlbnQvZ2UtbW91c2UtZXZlbnRcIjtcblxuXG5leHBvcnQgY2xhc3MgTW91c2VIYW5kbGVyIHtcblxuICBtb3VzZUV2ZW50PzogTW91c2VFdmVudDtcbiAgc3RhcnRNb3VzZUV2ZW50PzogR2VNb3VzZUV2ZW50O1xuICBnZU1vdXNlRXZlbnQ/OiBHZU1vdXNlRXZlbnQ7XG4gIGdlTW91c2VFdmVudE9sZD86IEdlTW91c2VFdmVudDtcblxuICBwcml2YXRlIGV4cGFuZGVkQWxsID0gdHJ1ZTtcbiAgcHJpdmF0ZSBtb3VzZURvd24gPSBmYWxzZTtcbiAgcHJpdmF0ZSBkcmFnZ2luZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0YWJsZVNjb3BlOiBUYWJsZVNjb3BlXG4gICkge1xuICAgIHRoaXMudGFibGVTY29wZS5ob3N0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5vbkhvc3RFbGVtZW50Q2xpY2tlZC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnRhYmxlU2NvcGUuaG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImRibGNsaWNrXCIsIHRoaXMub25Ib3N0RWxlbWVudERibENsaWNrZWQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy50YWJsZVNjb3BlLmhvc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnRhYmxlU2NvcGUuaG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcykpO1xuICAgIHRoaXMudGFibGVTY29wZS5ob3N0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCB0aGlzLm9uTW91c2VVcC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnRhYmxlU2NvcGUuaG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMub25Db250ZXh0bWVudS5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMudGFibGVTY29wZS5zY3JvbGxWaWV3cG9ydC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMudGFibGVTY29wZS5hZGp1c3RBZnRlclNjcm9sbGluZy5iaW5kKHRoaXMudGFibGVTY29wZSkpO1xuXG4gICAgW3dpbmRvdywgdGhpcy50YWJsZVNjb3BlLmhvc3RFbGVtZW50XS5mb3JFYWNoKFxuICAgICAgZWxlID0+IGVsZS5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMudGFibGVTY29wZS5hZGp1c3RDb250YWluZXJzQW5kUm93cy5iaW5kKHRoaXMudGFibGVTY29wZSkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db250ZXh0bWVudShldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm1vdXNlRXZlbnQgPSBldnQ7XG4gICAgY29uc3QgbW91c2VNb3ZlRXZlbnQgPSB0aGlzLnRhYmxlU2NvcGUuY3JlYXRlR2VNb3VzZUV2ZW50KHRoaXMubW91c2VFdmVudCk7XG4gICAgdGhpcy50YWJsZVNjb3BlLmNvbnRleHRtZW51KG1vdXNlTW92ZUV2ZW50KTtcbiAgfTtcblxuICBwcml2YXRlIG9uSG9zdEVsZW1lbnRDbGlja2VkKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgIGlmICh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWdlLWFjdGlvbicpID09PSAndG9nZ2xlRXhwYW5kQ29sbGFwc2VBbGwnKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRBbGwgPSAhdGhpcy5leHBhbmRlZEFsbDtcbiAgICAgICAgdGhpcy50YWJsZVNjb3BlLnRvZ2dsZUV4cGFuZENvbGxhcHNlQWxsKHRoaXMuZXhwYW5kZWRBbGwpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdy1pbmRleCcpKSB7XG4gICAgICAgIGNvbnN0IHJvd0lkeCA9IE51bWJlcih0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdy1pbmRleCcpKTtcbiAgICAgICAgY29uc3QgY29sSWR4ID0gTnVtYmVyKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWluZGV4JykpO1xuICAgICAgICBjb25zdCBhcmVhID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1hcmVhJyk7XG4gICAgICAgIGlmIChhcmVhKSB7XG5cbiAgICAgICAgICBjb25zdCBhcmVhSWRlbnQ6IEFyZWFJZGVudCA9IGdldEFyZWFJZGVudEJ5U3RyaW5nKGFyZWEpO1xuICAgICAgICAgIGNvbnN0IGFyZWFNb2RlbCA9IHRoaXMudGFibGVTY29wZS50YWJsZU1vZGVsLmdldEFyZWFNb2RlbChhcmVhSWRlbnQpO1xuICAgICAgICAgIGNvbnN0IHJvdyA9IGFyZWFNb2RlbC5nZXRSb3dCeUluZGV4KHJvd0lkeCk7XG5cbiAgICAgICAgICBpZiAodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1pbnB1dC10eXBlJykgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVTY29wZS50b2dnbGVSb3dDaGVja2JveChyb3dJZHgsIGNvbElkeCwgYXJlYUlkZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJvdyBpbnN0YW5jZW9mIFRyZWVSb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsdENsaWNrT25GaXJzdENvbCA9IGNvbElkeCA9PT0gdGhpcy5nZXRBcnJvd0NvbHVtbkluZGV4KCkgJiYgZXZlbnQuYWx0S2V5O1xuICAgICAgICAgICAgY29uc3QgY2xpY2tPbkFycm93ID0gdGFyZ2V0LmNsYXNzTmFtZS5pbmNsdWRlcygnZ2UtdGFibGUtdHJlZS1hcnJvdy1kaXYnKTtcblxuICAgICAgICAgICAgaWYgKGFsdENsaWNrT25GaXJzdENvbCB8fCBjbGlja09uQXJyb3cpIHtcbiAgICAgICAgICAgICAgLy8gdG9nZ2xlIGNvbGxhcHNlZC9leHBhbmRlZDpcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgY29uc3QgdHI6IFRyZWVSb3c8YW55PiA9IHJvdyBhcyBUcmVlUm93PGFueT47XG4gICAgICAgICAgICAgIHRyLmV4cGFuZGVkID0gIXRyLmV4cGFuZGVkO1xuXG4gICAgICAgICAgICAgIGlmICgncmVjYWxjVmlzaWJsZVRyZWVSb3dzJyBpbiBhcmVhTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgYXJlYU1vZGVsLnJlY2FsY1Zpc2libGVUcmVlUm93cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMudGFibGVTY29wZS50YWJsZU1vZGVsLnJlY2FsY1NpemUodGhpcy50YWJsZVNjb3BlLmhvc3RFbGVtZW50LmNsaWVudFdpZHRoKTtcbiAgICAgICAgICAgICAgdGhpcy50YWJsZVNjb3BlLmFkanVzdENvbnRhaW5lcnNBbmRSb3dzKCk7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSh0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHVibGlzaEdlTW91c2VFdmVudChldmVudCwgMSk7XG4gIH07XG5cblxuICBwcml2YXRlIG9uSG9zdEVsZW1lbnREYmxDbGlja2VkKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cbiAgICBpZiAoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGFyZWEgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWFyZWEnKTtcbiAgICAgIGNvbnN0IGFyZWFJZGVudDogQXJlYUlkZW50ID0gZ2V0QXJlYUlkZW50QnlTdHJpbmcoYXJlYSk7XG4gICAgICBjb25zdCByb3dJZHggPSBOdW1iZXIodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3ctaW5kZXgnKSk7XG4gICAgICBjb25zdCBjb2xJZHggPSBOdW1iZXIodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaW5kZXgnKSk7XG4gICAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlU2NvcGUudGFibGVNb2RlbC5nZXRBcmVhTW9kZWwoYXJlYUlkZW50KTtcblxuICAgICAgaWYgKGFyZWEgJiYgYXJlYUlkZW50ID09PSAnaGVhZGVyJykge1xuICAgICAgICBpZiAodGhpcy50YWJsZVNjb3BlLnRhYmxlTW9kZWwuaXNTb3J0YWJsZShjb2xJZHgpKSB7XG4gICAgICAgICAgdGhpcy50YWJsZVNjb3BlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgdGhpcy50YWJsZVNjb3BlLm9uSGVhZGVyRGJsQ2xpY2tlZChldmVudCwgcm93SWR4LCBjb2xJZHgpO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3ctaW5kZXgnKSkge1xuICAgICAgICBjb25zdCByb3cgPSBhcmVhTW9kZWwuZ2V0Um93QnlJbmRleChyb3dJZHgpO1xuXG4gICAgICAgIGlmIChhcmVhICYmIGFyZWFJZGVudCA9PT0gJ2JvZHknKSB7XG4gICAgICAgICAgaWYgKGFyZWFNb2RlbC5pc0VkaXRhYmxlKHJvd0lkeCwgY29sSWR4KSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZVNjb3BlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnRhYmxlU2NvcGUuaW5pdFJlbmRlckVkaXRvcihyb3dJZHgsIGNvbElkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdyBpbnN0YW5jZW9mIFRyZWVSb3cpIHtcbiAgICAgICAgICBpZiAoY29sSWR4ID09PSB0aGlzLmdldEFycm93Q29sdW1uSW5kZXgoKSkge1xuICAgICAgICAgICAgLy8gdG9nZ2xlIGNvbGxhcHNlZC9leHBhbmRlZDpcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCB0cjogVHJlZVJvdzxhbnk+ID0gcm93IGFzIFRyZWVSb3c8YW55PjtcbiAgICAgICAgICAgIHRyLmV4cGFuZGVkID0gIXRyLmV4cGFuZGVkO1xuXG4gICAgICAgICAgICBpZiAoJ3JlY2FsY1Zpc2libGVUcmVlUm93cycgaW4gYXJlYU1vZGVsKSB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgYXJlYU1vZGVsLnJlY2FsY1Zpc2libGVUcmVlUm93cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50YWJsZVNjb3BlLnRhYmxlTW9kZWwucmVjYWxjU2l6ZSh0aGlzLnRhYmxlU2NvcGUuaG9zdEVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgICAgICAgICAgdGhpcy50YWJsZVNjb3BlLmFkanVzdENvbnRhaW5lcnNBbmRSb3dzKCk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSh0cik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wdWJsaXNoR2VNb3VzZUV2ZW50KGV2ZW50LCAyKTtcbiAgfTtcblxuXG4gIHByaXZhdGUgcHVibGlzaEdlTW91c2VFdmVudChldmVudDogTW91c2VFdmVudCwgY2xpY2tDb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5tb3VzZUV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5nZU1vdXNlRXZlbnRPbGQgPSB0aGlzLmdlTW91c2VFdmVudD8uY2xvbmUoKTtcbiAgICB0aGlzLmdlTW91c2VFdmVudCA9IHRoaXMudGFibGVTY29wZS5jcmVhdGVHZU1vdXNlRXZlbnQoZXZlbnQpO1xuICAgIGlmICh0aGlzLmdlTW91c2VFdmVudCkge1xuICAgICAgdGhpcy5nZU1vdXNlRXZlbnQuY2xpY2tDb3VudCA9IGNsaWNrQ291bnQ7XG4gICAgfVxuICAgIHRoaXMudGFibGVTY29wZS5vbk1vdXNlQ2xpY2tlZCh0aGlzLmdlTW91c2VFdmVudCwgdGhpcy5nZU1vdXNlRXZlbnRPbGQpO1xuICB9XG5cblxuICBwcml2YXRlIHVwZGF0ZUNvbGxhcHNlZEV4cGFuZGVkU3RhdGUodHI6IFRyZWVSb3c8YW55Pikge1xuICAgIC8vIHN0b3JlIGV4cGFuZGVkL2NvbGxhcHNlZDpcbiAgICBjb25zdCBnZXRSb3dJZCA9IHRoaXMudGFibGVTY29wZS50YWJsZU9wdGlvbnM/LmF1dG9SZXN0b3JlT3B0aW9ucz8uZ2V0Um93SWQ7XG4gICAgaWYgKGdldFJvd0lkKSB7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy50YWJsZVNjb3BlLnN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlPy5jb2xsYXBzZWRFeHBhbmRlZFN0YXRlR2V0KCkubW9kZTtcbiAgICAgIGNvbnN0IHB1c2ggPSAobW9kZSA9PT0gJ2NvbGxhcHNlZCcgJiYgIXRyLmV4cGFuZGVkKSB8fCAobW9kZSA9PT0gJ2V4cGFuZGVkJyAmJiB0ci5leHBhbmRlZCk7XG4gICAgICBjb25zdCByZW1vdmUgPSAobW9kZSA9PT0gJ2NvbGxhcHNlZCcgJiYgdHIuZXhwYW5kZWQpIHx8IChtb2RlID09PSAnZXhwYW5kZWQnICYmICF0ci5leHBhbmRlZCk7XG4gICAgICBjb25zdCByb3dJZCA9IGdldFJvd0lkKHRyLmRhdGEpO1xuICAgICAgaWYgKHB1c2gpIHtcbiAgICAgICAgdGhpcy50YWJsZVNjb3BlLnN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlPy5jb2xsYXBzZWRTdGF0ZUlkc1B1c2gocm93SWQpO1xuICAgICAgfSBlbHNlIGlmIChyZW1vdmUpIHtcbiAgICAgICAgdGhpcy50YWJsZVNjb3BlLnN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlPy5jb2xsYXBzZWRTdGF0ZUlkc1JlbW92ZShyb3dJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIGdldEFycm93Q29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICBjb25zdCByb3dDaGVja2JveFZpc2libGUgPSB0aGlzLnRhYmxlU2NvcGUudGFibGVNb2RlbC5pc1Jvd0NoZWNrYm94VmlzaWJsZSgpO1xuICAgIHJldHVybiByb3dDaGVja2JveFZpc2libGUgPyAxIDogMDtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBvbk1vdXNlRG93bihldnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm1vdXNlRXZlbnQgPSBldnQ7XG4gICAgdGhpcy5zdGFydE1vdXNlRXZlbnQgPSB0aGlzLnRhYmxlU2NvcGUuY3JlYXRlR2VNb3VzZUV2ZW50KHRoaXMubW91c2VFdmVudCk7XG4gICAgdGhpcy50YWJsZVNjb3BlLm9uTW91c2VEb3duKHRoaXMuc3RhcnRNb3VzZUV2ZW50KTtcbiAgICB0aGlzLm1vdXNlRG93biA9IHRydWU7XG4gIH1cblxuXG4gIHByaXZhdGUgb25Nb3VzZU1vdmUoZXZ0OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5tb3VzZUV2ZW50ID0gZXZ0O1xuICAgIGlmICh0aGlzLm1vdXNlRG93bikge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5tb3VzZURyYWdnaW5nT25GcmFtZS5iaW5kKHRoaXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMubW91c2VNb3ZlT25GcmFtZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgb25Nb3VzZVVwKGV2dDogTW91c2VFdmVudCkge1xuICAgIHRoaXMubW91c2VFdmVudCA9IGV2dDtcbiAgICBpZiAodGhpcy5kcmFnZ2luZykge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMubW91c2VEcmFnZ2luZ0VuZE9uRnJhbWUuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIHRoaXMubW91c2VEb3duID0gZmFsc2U7XG4gICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICB9XG5cblxuICBwcml2YXRlIG1vdXNlRHJhZ2dpbmdPbkZyYW1lKCkge1xuICAgIGlmICh0aGlzLm1vdXNlRXZlbnQpIHtcbiAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSB0aGlzLnRhYmxlU2NvcGUuY3JlYXRlR2VNb3VzZUV2ZW50KHRoaXMubW91c2VFdmVudCk7XG4gICAgICBpZiAodGhpcy5zdGFydE1vdXNlRXZlbnQ/Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgbW91c2VFdmVudC5kcmFnZ2luZ1ggPSB0aGlzLm1vdXNlRXZlbnQuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZUV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WDtcbiAgICAgICAgbW91c2VFdmVudC5kcmFnZ2luZ1kgPSB0aGlzLm1vdXNlRXZlbnQuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZUV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGVTY29wZS5tb3VzZURyYWdnaW5nT25GcmFtZShtb3VzZUV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdXNlRHJhZ2dpbmdFbmRPbkZyYW1lKCkge1xuICAgIGlmICh0aGlzLm1vdXNlRXZlbnQpIHtcbiAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSB0aGlzLnRhYmxlU2NvcGUuY3JlYXRlR2VNb3VzZUV2ZW50KHRoaXMubW91c2VFdmVudCk7XG4gICAgICBpZiAodGhpcy5zdGFydE1vdXNlRXZlbnQ/Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgbW91c2VFdmVudC5kcmFnZ2luZ1ggPSB0aGlzLm1vdXNlRXZlbnQuY2xpZW50WCAtIHRoaXMuc3RhcnRNb3VzZUV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WDtcbiAgICAgICAgbW91c2VFdmVudC5kcmFnZ2luZ1kgPSB0aGlzLm1vdXNlRXZlbnQuY2xpZW50WSAtIHRoaXMuc3RhcnRNb3VzZUV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGVTY29wZS5tb3VzZURyYWdnaW5nRW5kT25GcmFtZShtb3VzZUV2ZW50KTtcbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgbW91c2VNb3ZlT25GcmFtZSgpIHtcbiAgICBpZiAodGhpcy5tb3VzZUV2ZW50KSB7XG4gICAgICBjb25zdCBtb3VzZU1vdmVFdmVudCA9IHRoaXMudGFibGVTY29wZS5jcmVhdGVHZU1vdXNlRXZlbnQodGhpcy5tb3VzZUV2ZW50KTtcbiAgICAgIHRoaXMudGFibGVTY29wZS5tb3VzZU1vdmUobW91c2VNb3ZlRXZlbnQpO1xuICAgIH1cbiAgfVxuXG5cbn1cbiJdfQ==