@jax-data-science/sci-image-visualizer 0.12.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/esm2022/lib/contracts/channel-histogram-api.contract.mjs +19 -1
  2. package/esm2022/lib/contracts/display-types.mjs +7 -1
  3. package/esm2022/lib/contracts/image.contract.mjs +1 -1
  4. package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
  5. package/esm2022/lib/contracts/spatial-dataset.contract.mjs +1 -1
  6. package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
  7. package/esm2022/lib/geometry/reconstruct.mjs +11 -1
  8. package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +17 -2
  9. package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +88 -10
  10. package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +62 -13
  11. package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +21 -1
  12. package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +5 -1
  13. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +9 -1
  14. package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +26 -3
  15. package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +3 -2
  16. package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +20 -4
  17. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +4 -2
  18. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +4 -2
  19. package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +42 -15
  20. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +3 -1
  21. package/esm2022/lib/region-editor/region-editor.component.mjs +13 -1
  22. package/esm2022/lib/routing-visualizer.service.mjs +4 -1
  23. package/esm2022/lib/spatial/lod.mjs +6 -3
  24. package/esm2022/lib/spatial/spatial-controls.facade.mjs +78 -23
  25. package/esm2022/lib/spatial/spatial-gene-filter.mjs +138 -0
  26. package/esm2022/lib/spatial/spatial-selection.mjs +70 -1
  27. package/esm2022/lib/spatial/spatial-tile-merge.mjs +42 -1
  28. package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +3 -3
  29. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +54 -11
  30. package/esm2022/lib/spatial-controls/spatial-gene-style/spatial-gene-style.component.mjs +66 -0
  31. package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +106 -26
  32. package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +3 -3
  33. package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +3 -3
  34. package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +3 -3
  35. package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +110 -8
  36. package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +41 -9
  37. package/esm2022/lib/store/region-selection.mjs +21 -4
  38. package/esm2022/lib/store/region-store.service.mjs +22 -3
  39. package/esm2022/lib/store/spatial-selection.service.mjs +13 -1
  40. package/esm2022/lib/store/visualizer-store.service.mjs +50 -1
  41. package/esm2022/lib/toolbar/toolbar-help-dialog/toolbar-help-dialog.component.mjs +3 -3
  42. package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DnPlIP2F.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DvFp1jNH.mjs} +1777 -793
  43. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DvFp1jNH.mjs.map +1 -0
  44. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bs987_-E.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-D7lSUAM1.mjs} +2 -2
  45. package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bs987_-E.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-D7lSUAM1.mjs.map} +1 -1
  46. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +2 -2
  47. package/lib/contracts/channel-histogram-api.contract.d.ts +14 -0
  48. package/lib/contracts/display-types.d.ts +27 -0
  49. package/lib/contracts/image.contract.d.ts +2 -0
  50. package/lib/contracts/region-editor-api.contract.d.ts +3 -0
  51. package/lib/contracts/spatial-dataset.contract.d.ts +7 -0
  52. package/lib/contracts/visualizer.contract.d.ts +28 -2
  53. package/lib/geometry/reconstruct.d.ts +6 -0
  54. package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +7 -0
  55. package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +13 -2
  56. package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +5 -0
  57. package/lib/implementations/napari-js/napari-spatial-scene.d.ts +4 -0
  58. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +5 -0
  59. package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +6 -1
  60. package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +4 -0
  61. package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +3 -1
  62. package/lib/routing-visualizer.service.d.ts +1 -0
  63. package/lib/spatial/lod.d.ts +3 -1
  64. package/lib/spatial/spatial-controls.facade.d.ts +19 -2
  65. package/lib/spatial/spatial-gene-filter.d.ts +44 -0
  66. package/lib/spatial/spatial-selection.d.ts +16 -1
  67. package/lib/spatial/spatial-tile-merge.d.ts +17 -0
  68. package/lib/spatial-controls/spatial-controls.component.d.ts +14 -3
  69. package/lib/spatial-controls/spatial-gene-style/spatial-gene-style.component.d.ts +30 -0
  70. package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +39 -7
  71. package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +33 -1
  72. package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +13 -1
  73. package/lib/store/region-selection.d.ts +14 -3
  74. package/lib/store/region-store.service.d.ts +14 -1
  75. package/lib/store/spatial-selection.service.d.ts +8 -0
  76. package/lib/store/visualizer-store.service.d.ts +13 -0
  77. package/package.json +1 -1
  78. package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DnPlIP2F.mjs.map +0 -1
@@ -130,6 +130,26 @@ export function encodeSpatialContinuous(values, view, lut, windows, muted = null
130
130
  export function isPerPoint(colors) {
131
131
  return colors instanceof Float32Array;
132
132
  }
133
+ /**
134
+ * `colors` with every observation `shown` leaves at 0 made transparent: the observations a gene
135
+ * filter leaves out. A broadcast colour becomes per-point, since the points now differ.
136
+ */
137
+ export function hideUnshown(colors, shown) {
138
+ const count = shown.length;
139
+ let out;
140
+ if (isPerPoint(colors)) {
141
+ out = colors.slice(); // the input may be held elsewhere
142
+ }
143
+ else {
144
+ out = new Float32Array(count * 4);
145
+ for (let i = 0; i < count; i++)
146
+ out.set(colors, i * 4);
147
+ }
148
+ for (let i = 0; i < count; i++)
149
+ if (!shown[i])
150
+ out[4 * i + 3] = 0;
151
+ return out;
152
+ }
133
153
  /** Per-point colours for the drawn subset. A broadcast tuple stays broadcast —
134
154
  * it is one colour for every point either way. */
135
155
  export function gatherColors(colors, indices) {
@@ -196,4 +216,4 @@ export function rankDensityGroups(columnName, column, count, selection) {
196
216
  };
197
217
  });
198
218
  }
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNwYXRpYWwtZW5jb2RpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLXNwYXRpYWwtZW5jb2RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUk1QyxPQUFPLEVBQXFCLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTFGLE9BQU8sRUFDTCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixxQkFBcUIsR0FFdEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQXdCLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRGOzs7O0dBSUc7QUFFSCwrRkFBK0Y7QUFDL0YsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDOzs7NkZBRzZGO0FBQzdGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLEdBQUcsQ0FBQztBQUNqRDs7MEVBRTBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUNyQzsrREFDK0Q7QUFDL0QsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUNsQzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUN4QztpRkFDaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDO29EQUNvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUM7QUFDL0Msa0ZBQWtGO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUV0Qzt1Q0FDdUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQXFDLENB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QU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDL0IsSUFBSSxXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUFFLFNBQVM7WUFDN0MsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7Z0JBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNsQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVM7WUFDaEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNoQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29sb3JtYXBGcm9tTHV0IH0gZnJvbSAnbmFwYXJpLWpzJztcbmltcG9ydCB0eXBlIHsgQ29sb3JtYXAgfSBmcm9tICduYXBhcmktanMnO1xuXG5pbXBvcnQgeyBSZ2IgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvY29sb3JtYXAtbHV0JztcbmltcG9ydCB7IENhdGVnb3JpY2FsQ29sdW1uLCBOT19DQVRFR09SWSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHsgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB7XG4gIGNvbnRyYXN0V2luZG93LFxuICBlbmNvZGVDYXRlZ29yaWNhbCxcbiAgZW5jb2RlQ29udGludW91cyxcbiAgcmVzb2x2ZUNhdGVnb3J5Q29sb3JzLFxuICB0eXBlIFJHQkEsXG59IGZyb20gJy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1lbmNvZGluZyc7XG5pbXBvcnQgeyBTcGF0aWFsU2VsZWN0aW9uTWFzaywgbWFza1RvSW5kaWNlcyB9IGZyb20gJy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1zZWxlY3Rpb24nO1xuXG4vKipcbiAqIFRoZSBzcGF0aWFsIHNjZW5lcycgcHVyZSBjb2xvdXIgYW5kIGdyb3VwaW5nIG1hdGg6IHdoYXQgdGhlIDJEIG1hcmtlcnMsIHRoZSAzRCBjbG91ZCBhbmQgdGhlXG4gKiBkZW5zaXR5IHZvbHVtZXMgYXJlIGNvbG91cmVkIHdpdGgsIGFzIGZ1bmN0aW9ucyBvZiB0aGUgZGF0YSwgdGhlIHZpZXcgYW5kIGEgTFVULiBObyB2aWV3ZXIsIG5vXG4gKiBwb3J0LCBubyBzdG9yZSAocmV2aWV3IEFwcGVuZGl4IEIsIHN0ZXAgMSkuXG4gKi9cblxuLyoqIE1hcmtlciByYWRpdXMgKGltYWdlIHB4KSBmb3IgYSBkYXRhc2V0IHRoYXQgZGVjbGFyZXMgbm9uZSDigJQgc2VnbWVudGVkIGNlbGxzIG9mdGVuIGRvbid0LiAqL1xuZXhwb3J0IGNvbnN0IFNQQVRJQUxfRkFMTEJBQ0tfUkFESVVTID0gNDtcbi8qKiBTbWFsbGVzdCBtYXJrZXIgRElBTUVURVIsIGluIHNsaWNlIHBpeGVscywgb3ZlciBhIHZvbHVtZS1iYWNrZWQgZGF0YXNldC4gQSBjZWxsJ3MgcmVhbFxuICogIHNpemUgaXMgaG9ub3VyZWQgd2hlcmV2ZXIgaXQgc3Vydml2ZXMgdGhlIGdyaWQ6IHRoZSBBQkMgYXRsYXMgc2VydmVzIDUgwrVtIHJhZGlpIG9uIGFcbiAqICA0MCDCtW0vcHggdGVtcGxhdGUsIHNvIGRyYXdpbmcgdGhlbSB0byBzY2FsZSB3b3VsZCBwdXQgZXZlcnkgY2VsbCBhIGZpZnRoIG9mIGEgcGl4ZWwgd2lkZVxuICogIGFuZCB0aGUgc2VjdGlvbiB3b3VsZCBjb21lIHVwIGVtcHR5LiBUaGUgcG9pbnQtc2l6ZSBjb250cm9sIHNjYWxlcyB1cCBmcm9tIHRoaXMgZmxvb3IuICovXG5leHBvcnQgY29uc3QgU1BBVElBTF9TTElDRV9NSU5fRElBTUVURVJfUFggPSAxLjU7XG4vKiogTG9uZ2VzdCBzaWRlIG9mIHRoZSBnZW5lLW1hcCByYXN0ZXIsIGluIGZpZWxkIHBpeGVscy4gQSBnZW5lIG1hcCBpcyBhIHNtb290aFxuICogIGZpZWxkIHJlYWQgYXMgdGVycml0b3J5LCBzbyBpdCBnYWlucyBub3RoaW5nIGZyb20gbWF0Y2hpbmcgYSAyIEdweCBzbGlkZSdzXG4gKiAgcmVzb2x1dGlvbiDigJQgYW5kIHRoZSBlc3RpbWF0ZSBjb3N0cyBvbmUgcGFzcyBvdmVyIHRoaXMgbWFueSBwaXhlbHMuICovXG5leHBvcnQgY29uc3QgR0VORV9NQVBfTUFYX1NJREUgPSA1MTI7XG4vKiogS2VybmVsIM+DIGluIGZpZWxkIHBpeGVscyBhdCBzbW9vdGhpbmcgMTogd2lkZSBlbm91Z2ggdG8gcmVhZCBiZXR3ZWVuIGNlbGxzLFxuICogIHRpZ2h0IGVub3VnaCB0byBrZWVwIGEgbnVjbGV1cy1zY2FsZSBzdHJ1Y3R1cmUgZGlzdGluY3QuICovXG5leHBvcnQgY29uc3QgR0VORV9NQVBfU0lHTUEgPSAyLjU7XG4vKipcbiAqIEluLXBsYW5lIGNvYXJzZW5pbmcgb2YgdGhlIDNEIGdlbmUgbWFwJ3MgbGF0dGljZSwgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZVxuICogdm9sdW1lLiBUaGUgZmllbGQgaXMgc21vb3RoLCBzbyBpdHMgZGV0YWlsIGlzIHNldCBieSB0aGUga2VybmVsIHJhdGhlciB0aGFuIHRoZVxuICogcmFzdGVyIOKAlCBhbmQgdGhlIGVzdGltYXRlIGlzIGEgcGFpciBvZiBzZXBhcmFibGUgYmx1cnMsIHdoaWNoIGF0IHRoZSB0ZW1wbGF0ZSdzXG4gKiBmdWxsIHJlc29sdXRpb24gbWVhbnMgc2Vjb25kcyBvZiB3b3JrIHBlciB0b2dnbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBHRU5FX01BUF9WT0xVTUVfU1RSSURFID0gMjtcbi8qKiBDbHVzdGVycyBkcmF3biBhcyBkZW5zaXR5IHZvbHVtZXMgYXQgb25jZS4gUGFzdCBhIGhhbmRmdWwsIGFkZGl0aXZlIHRyYW5zbHVjZW50XG4gKiAgY2xvdWRzIHN0b3AgYmVpbmcgc2VwYXJhYmxlIGJ5IGV5ZSDigJQgYW5kIGVhY2ggb25lIGlzIGEgZnVsbCByYXN0ZXJpc2F0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IERFTlNJVFlfTUFYX0NMVVNURVJTID0gNjtcbi8qKiBIb3cgbXVjaCBsYXJnZXIgYSBzZWxlY3RlZCBtYXJrZXIgaXMgZHJhd24sIHNvIGEgc21hbGwgc2VsZWN0aW9uIGlzIGZpbmRhYmxlIGluc2lkZSBhXG4gKiAgMy43TS1wb2ludCBjbG91ZCByYXRoZXIgdGhhbiBtZXJlbHkgYnJpZ2h0ZXIuICovXG5leHBvcnQgY29uc3QgU1BBVElBTF9TRUxFQ1RFRF9TSVpFX1NDQUxFID0gMS42O1xuLyoqIEJhc2UgbWFya2VyIGRpYW1ldGVyIGZvciB0aGUgM0QgY2xvdWQsIGluIFNDUkVFTiBwaXhlbHMgKHRoZSBsYXllcidzIHVuaXQpLiAqL1xuZXhwb3J0IGNvbnN0IFNQQVRJQUxfM0RfQkFTRV9TSVpFID0gMztcblxuLyoqIENvbG91ciBmb3Igb2JzZXJ2YXRpb25zIHdoZW4gbm90aGluZyBpcyBzZWxlY3RlZCB0byBjb2xvdXIgYnk6IHZpc2libGUsIG5ldXRyYWwsIGFuZFxuICogIG9idmlvdXNseSBub3QgZW5jb2RpbmcgYW55dGhpbmcuICovXG5leHBvcnQgY29uc3QgU1BBVElBTF9ORVVUUkFMX0NPTE9SOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFswLjM1LCAwLjcyLCAwLjk1LCAwLjldO1xuLyoqIHtAbGluayBTUEFUSUFMX05FVVRSQUxfQ09MT1J9IGFzIGEgaGV4IGNvbG91ciAoYWxwaGEgZHJvcHBlZCksIGZvciB0aGUgZW5jb2RlcnMgYW5kIHRoZVxuICogIGRlbnNpdHktdm9sdW1lIHRpbnQuICovXG5leHBvcnQgY29uc3QgU1BBVElBTF9ORVVUUkFMX0hFWCA9IGAjJHtTUEFUSUFMX05FVVRSQUxfQ09MT1Iuc2xpY2UoMCwgMylcbiAgLm1hcCgoYykgPT5cbiAgICBNYXRoLnJvdW5kKGMgKiAyNTUpXG4gICAgICAudG9TdHJpbmcoMTYpXG4gICAgICAucGFkU3RhcnQoMiwgJzAnKSxcbiAgKVxuICAuam9pbignJyl9YDtcblxuLyoqXG4gKiBDb250cmFzdCB3aW5kb3dzIG1lbW9pc2VkIHBlciAodmFsdWVzIGFycmF5LCBsbywgaGksIGxvZykuIGBjb250cmFzdFdpbmRvd2Agc29ydHMgZXZlcnkgdmFsdWUsXG4gKiBhbmQgdGhlIHNwYXRpYWwgY29sb3VyaW5nIHJlLXJ1bnMgaXQgb24gZWFjaCBvcGFjaXR5LCBzZWxlY3Rpb24gb3IgY29sb3JtYXAgY2hhbmdlIHdoaWxlIHRoZVxuICogY29sb3VyZWQgdmVjdG9yIGl0c2VsZiBpcyB1bmNoYW5nZWQgKHJldmlldyBTUEFUSUFMLTEyKS4gS2V5ZWQgYnkgdGhlIHZlY3RvcidzIGlkZW50aXR5LCBzbyBhXG4gKiBuZXcgY29sdW1uIG9yIGdlbmUgdmVjdG9yIGlzIGEgbWlzcyBhbmQgYW4gb2xkIG9uZSBpcyBjb2xsZWN0ZWQgd2l0aCBpdHMgd2luZG93cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRyYXN0V2luZG93Q2FjaGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGJ5VmVjdG9yID0gbmV3IFdlYWtNYXA8RmxvYXQzMkFycmF5LCBNYXA8c3RyaW5nLCBbbnVtYmVyLCBudW1iZXJdPj4oKTtcblxuICBnZXQoXG4gICAgdmFsdWVzOiBGbG9hdDMyQXJyYXksXG4gICAgbG86IG51bWJlcixcbiAgICBoaTogbnVtYmVyLFxuICAgIGxvZzogYm9vbGVhbixcbiAgICBjb21wdXRlOiAoKSA9PiBbbnVtYmVyLCBudW1iZXJdLFxuICApOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICBsZXQgd2luZG93cyA9IHRoaXMuYnlWZWN0b3IuZ2V0KHZhbHVlcyk7XG4gICAgaWYgKCF3aW5kb3dzKSB7XG4gICAgICB3aW5kb3dzID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5ieVZlY3Rvci5zZXQodmFsdWVzLCB3aW5kb3dzKTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gYCR7bG99fCR7aGl9fCR7bG9nID8gMSA6IDB9YDtcbiAgICBsZXQgdyA9IHdpbmRvd3MuZ2V0KGtleSk7XG4gICAgaWYgKCF3KSB7XG4gICAgICB3ID0gY29tcHV0ZSgpO1xuICAgICAgd2luZG93cy5zZXQoa2V5LCB3KTtcbiAgICB9XG4gICAgcmV0dXJuIHc7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGF0IHRoZSAzRCBwb2ludHMgbGF5ZXIgbmVlZHMgdG8gY29sb3VyIGEgY2xvdWQ6IGZvciBjb250aW51b3VzIGRhdGEsIG9uZSBzY2FsYXIgcGVyIHBvaW50LCBhXG4gKiBjb2xvcm1hcCBhbmQgdGhlIHdpbmRvdyB0aGF0IG1hcHMgc2NhbGFycyBvbnRvIGl0OyBmb3IgY2F0ZWdvcmljYWwgZGF0YSwgb25lIHBhY2tlZCBSR0JBIHBlclxuICogcG9pbnQgKGBQb2ludHMzRExheWVyLmNvbG9yc2AsIHdoaWNoIHdpbnMgb3ZlciB0aGUgc2NhbGFycykuXG4gKi9cbmV4cG9ydCB0eXBlIFNwYXRpYWwzZEVuY29kaW5nID0gU3BhdGlhbDNkU2NhbGFycyB8IFNwYXRpYWwzZENvbG9ycztcblxuLyoqIEEgY2xvdWQgY29sb3VyZWQgdGhyb3VnaCB0aGUgY29sb3JtYXA6IHNjYWxhcnMsIGNvbG9ybWFwIGFuZCB3aW5kb3cuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWwzZFNjYWxhcnMge1xuICBraW5kOiAnc2NhbGFycyc7XG4gIHZhbHVlczogRmxvYXQzMkFycmF5O1xuICBjb2xvcm1hcDogQ29sb3JtYXA7XG4gIGNvbnRyYXN0TGltaXRzOiBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG4vKiogQSBjbG91ZCBjb2xvdXJlZCBwb2ludCBieSBwb2ludDogcGFja2VkIFJHQkEsIDQgZmxvYXRzIHBlciBwb2ludC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbDNkQ29sb3JzIHtcbiAga2luZDogJ2NvbG9ycyc7XG4gIGNvbG9yczogRmxvYXQzMkFycmF5O1xufVxuXG4vKiogQSBvbmUtY29sb3VyIGNvbG9ybWFwLCBmb3IgdGhlIFwibm90aGluZyB0byBjb2xvdXIgYnlcIiBzdGF0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGF0aWFsRmxhdENvbG9ybWFwKCk6IENvbG9ybWFwIHtcbiAgY29uc3QgW3IsIGcsIGJdID0gU1BBVElBTF9ORVVUUkFMX0NPTE9SO1xuICBjb25zdCByZ2I6IFJnYiA9IFtNYXRoLnJvdW5kKHIgKiAyNTUpLCBNYXRoLnJvdW5kKGcgKiAyNTUpLCBNYXRoLnJvdW5kKGIgKiAyNTUpXTtcbiAgLy8gVHdvIGlkZW50aWNhbCBzdG9wczogY29sb3JtYXBGcm9tTHV0IG5lZWRzIGF0IGxlYXN0IHR3bywgYW5kIGVxdWFsIGVuZHNcbiAgLy8gbWFrZSBldmVyeSB2YWx1ZSByZXNvbHZlIHRvIHRoZSBzYW1lIGNvbG91ci5cbiAgcmV0dXJuIGNvbG9ybWFwRnJvbUx1dCgnc3BhdGlhbC1mbGF0JywgW3JnYiwgcmdiXSk7XG59XG5cbi8qKlxuICogQ2F0ZWdvcnkgY29kZXMg4oaSIG9uZSBSR0JBIHBlciBwb2ludCwgZm9yIGFueSBudW1iZXIgb2YgY2F0ZWdvcmllcy5cbiAqXG4gKiBUaGUgMkQgbWFya2VycycgZW5jb2RpbmcsIHdpdGggb25lIGRpZmZlcmVuY2U6IGEgcG9pbnQgd2l0aCBubyBjYXRlZ29yeSBzdGF5cyBvcGFxdWUgKGdyZXkpLFxuICogYXMgaXQgYWx3YXlzIGhhcyBpbiB0aGUgY2xvdWQsIHdoZXJlIHRoZSBzZWxlY3Rpb24gZGltcyB0aHJvdWdoIHRoZSBsYXllcidzIHBlci1wb2ludCBhbHBoYXNcbiAqIGluc3RlYWQuIEl0IHVzZWQgdG8gYmUgc211Z2dsZWQgdGhyb3VnaCB0aGUgc2NhbGFyIGNoYW5uZWwgYXMgYSBzdGVwcGVkIDI1Ni1lbnRyeSBMVVQsIHdoaWNoXG4gKiBrZXB0IGF0IG1vc3QgOTUgY2F0ZWdvcmllcyBhcGFydCAocmV2aWV3IFNQQVRJQUwtMTEsIE5BUEFSSS1TVkMtMTgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU3BhdGlhbDNkQ2F0ZWdvcmljYWwoY29kZXM6IFVpbnQxNkFycmF5LCBjb2xvcnM6IHN0cmluZ1tdKTogU3BhdGlhbDNkQ29sb3JzIHtcbiAgcmV0dXJuIHsga2luZDogJ2NvbG9ycycsIGNvbG9yczogZW5jb2RlQ2F0ZWdvcmljYWwoY29kZXMsIHsgY29sb3JzLCBtdXRlZE9wYWNpdHk6IDEgfSkgfTtcbn1cblxuLyoqIENvbnRpbnVvdXMgdmFsdWVzIOKGkiBgbHV0YCBvdmVyIGEgcGVyY2VudGlsZS1jbGlwcGVkIHdpbmRvdyAobG9nMXAgZmlyc3Qgd2hlbiB0aGUgdmlldydzIGxvZ1xuICogIHNjYWxlIGlzIG9uKSwgZm9yIHRoZSAzRCBjbG91ZCdzIHNjYWxhciBjaGFubmVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVNwYXRpYWwzZENvbnRpbnVvdXMoXG4gIHNvdXJjZTogRmxvYXQzMkFycmF5LFxuICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICBsdXQ6IFJnYltdLFxuICB3aW5kb3dzOiBDb250cmFzdFdpbmRvd0NhY2hlLFxuKTogU3BhdGlhbDNkU2NhbGFycyB7XG4gIGNvbnN0IFtsbywgaGldID0gdmlldy5wZXJjZW50aWxlQ2xpcCA/PyBbMC4wMSwgMC45OV07XG4gIGNvbnN0IGxvZyA9ICEhdmlldy5sb2dTY2FsZTtcbiAgbGV0IHZhbHVlcyA9IHNvdXJjZTtcbiAgaWYgKGxvZykge1xuICAgIHZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoc291cmNlLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHZhbHVlc1tpXSA9IE1hdGgubG9nMXAoTWF0aC5tYXgoMCwgc291cmNlW2ldKSk7XG4gIH1cbiAgLy8gS2V5ZWQgYnkgdGhlIFNPVVJDRSB2ZWN0b3I6IHRoZSBsb2cgY29weSBhYm92ZSBpcyBuZXcgb24gZXZlcnkgY2FsbC5cbiAgY29uc3QgW21pbiwgbWF4XSA9IHdpbmRvd3MuZ2V0KHNvdXJjZSwgbG8sIGhpLCBsb2csICgpID0+IGNvbnRyYXN0V2luZG93KHZhbHVlcywgbG8sIGhpKSk7XG4gIHJldHVybiB7XG4gICAga2luZDogJ3NjYWxhcnMnLFxuICAgIHZhbHVlcyxcbiAgICBjb2xvcm1hcDogY29sb3JtYXBGcm9tTHV0KCdzcGF0aWFsLWNvbnRpbnVvdXMnLCBsdXQpLFxuICAgIC8vIEEgZGVnZW5lcmF0ZSB3aW5kb3cgd291bGQgZGl2aWRlIGJ5IHplcm8gaW4gdGhlIHNoYWRlcidzIG5vcm1hbGlzYXRpb24uXG4gICAgY29udHJhc3RMaW1pdHM6IG1heCA+IG1pbiA/IFttaW4sIG1heF0gOiBbbWluLCBtaW4gKyAxXSxcbiAgfTtcbn1cblxuLyoqIENvbnRpbnVvdXMgdmFsdWVzIOKGkiBwZXItcG9pbnQgUkdCQSB0aHJvdWdoIGBsdXRgIGFuZCBhIGNsaXBwZWQgd2luZG93IChsb2cgc2NhbGUgcGVyIHRoZVxuICogIHZpZXcpLCBmb3IgdGhlIDJEIG1hcmtlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU3BhdGlhbENvbnRpbnVvdXMoXG4gIHZhbHVlczogRmxvYXQzMkFycmF5LFxuICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICBsdXQ6IFJnYltdLFxuICB3aW5kb3dzOiBDb250cmFzdFdpbmRvd0NhY2hlLFxuICBtdXRlZDogVWludDhBcnJheSB8IG51bGwgPSBudWxsLFxuKTogRmxvYXQzMkFycmF5IHtcbiAgY29uc3QgW2xvLCBoaV0gPSB2aWV3LnBlcmNlbnRpbGVDbGlwID8/IFswLjAxLCAwLjk5XTtcbiAgLy8gVGhlIHdpbmRvdyBpcyB0YWtlbiBvbiB0aGUgcmF3IHZhbHVlcyAoZW5jb2RlQ29udGludW91cyBhcHBsaWVzIHRoZSBsb2cgaXRzZWxmKS5cbiAgY29uc3QgW21pbiwgbWF4XSA9IHdpbmRvd3MuZ2V0KHZhbHVlcywgbG8sIGhpLCBmYWxzZSwgKCkgPT4gY29udHJhc3RXaW5kb3codmFsdWVzLCBsbywgaGkpKTtcbiAgcmV0dXJuIGVuY29kZUNvbnRpbnVvdXModmFsdWVzLCB7XG4gICAgbHV0LFxuICAgIG1pbixcbiAgICBtYXgsXG4gICAgbG9nOiB2aWV3LmxvZ1NjYWxlLFxuICAgIG9wYWNpdHk6IHZpZXcub3BhY2l0eSxcbiAgICBtdXRlZCxcbiAgfSk7XG59XG5cbi8qKiBNYXJrZXIgY29sb3VyczogcGFja2VkIHBlci1wb2ludCBSR0JBICg0IGZsb2F0cyBwZXIgcG9pbnQsIHRoZSBzaGFwZSBuYXBhcmktanMgY29waWVzIHN0cmFpZ2h0XG4gKiAgaW50byBpdHMgaW5zdGFuY2UgYnVmZmVyKSwgb3Igb25lIFJHQkEgYnJvYWRjYXN0IHRvIGV2ZXJ5IHBvaW50LiAqL1xuZXhwb3J0IHR5cGUgUG9pbnRDb2xvcnMgPSBGbG9hdDMyQXJyYXkgfCBSR0JBO1xuXG4vKiogV2hldGhlciBhIGNvbG91ciBpbnB1dCBpcyBvbmUgUkdCQSBwZXIgcG9pbnQgcmF0aGVyIHRoYW4gb25lIGJyb2FkY2FzdCBSR0JBLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGVyUG9pbnQoY29sb3JzOiBQb2ludENvbG9ycyk6IGNvbG9ycyBpcyBGbG9hdDMyQXJyYXkge1xuICByZXR1cm4gY29sb3JzIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5O1xufVxuXG4vKiogUGVyLXBvaW50IGNvbG91cnMgZm9yIHRoZSBkcmF3biBzdWJzZXQuIEEgYnJvYWRjYXN0IHR1cGxlIHN0YXlzIGJyb2FkY2FzdCDigJRcbiAqICBpdCBpcyBvbmUgY29sb3VyIGZvciBldmVyeSBwb2ludCBlaXRoZXIgd2F5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdhdGhlckNvbG9ycyhjb2xvcnM6IFBvaW50Q29sb3JzLCBpbmRpY2VzPzogVWludDMyQXJyYXkpOiBQb2ludENvbG9ycyB7XG4gIGlmICghaW5kaWNlcyB8fCAhaXNQZXJQb2ludChjb2xvcnMpKSByZXR1cm4gY29sb3JzO1xuICBjb25zdCBvdXQgPSBuZXcgRmxvYXQzMkFycmF5KGluZGljZXMubGVuZ3RoICogNCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHMgPSBpbmRpY2VzW2ldICogNDtcbiAgICBjb25zdCBvID0gaSAqIDQ7XG4gICAgb3V0W29dID0gY29sb3JzW3NdO1xuICAgIG91dFtvICsgMV0gPSBjb2xvcnNbcyArIDFdO1xuICAgIG91dFtvICsgMl0gPSBjb2xvcnNbcyArIDJdO1xuICAgIG91dFtvICsgM10gPSBjb2xvcnNbcyArIDNdO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBPbmUgZGVuc2l0eSB2b2x1bWUncyBvYnNlcnZhdGlvbnM6IGEgY2x1c3RlciAob3IgYWxsIGNlbGxzKSwgd2l0aCBpdHMgbGVnZW5kIGNvbG91ci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVuc2l0eUdyb3VwIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICBpbmRpY2VzPzogVWludDMyQXJyYXk7XG59XG5cbi8qKiBUaGUgc2luZ2xlIGdyb3VwIGRyYXduIHdoZW4gdGhlIGNvbG91cmluZyBpcyBub3QgY2F0ZWdvcmljYWw6IHRvdGFsIGNlbGwgZGVuc2l0eSwgd2l0aGluIHRoZVxuICogIHNlbGVjdGlvbiB3aGVuIHRoZXJlIGlzIG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b3RhbERlbnNpdHlHcm91cChzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrKTogRGVuc2l0eUdyb3VwIHtcbiAgY29uc3QgaW5TZWxlY3Rpb24gPSBzZWxlY3Rpb24uY291bnQgPiAwID8gc2VsZWN0aW9uLm1hc2sgOiBudWxsO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGluU2VsZWN0aW9uID8gJ3NlbGVjdGVkIGNlbGxzJyA6ICdhbGwgY2VsbHMnLFxuICAgIGNvbG9yOiBTUEFUSUFMX05FVVRSQUxfSEVYLFxuICAgIGluZGljZXM6IGluU2VsZWN0aW9uID8gbWFza1RvSW5kaWNlcyhpblNlbGVjdGlvbikgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogVGhlIGNsdXN0ZXJzIG9mIGEgY2F0ZWdvcmljYWwgY29sdW1uIHRvIHJhc3RlcmlzZSwgYmlnZ2VzdCBmaXJzdCBhbmQgY2FwcGVkIGF0XG4gKiB7QGxpbmsgREVOU0lUWV9NQVhfQ0xVU1RFUlN9LCBlYWNoIHdpdGggaXRzIGxlZ2VuZCBjb2xvdXIg4oCUIHJlc3RyaWN0ZWQgdG8gdGhlIHNlbGVjdGlvbiB3aGVuXG4gKiB0aGVyZSBpcyBvbmUsIHNvIFwic2VsZWN0IGEgcmVnaW9uLCBjaGVjayB0aGUgYm94XCIgYW5zd2VycyB3aGljaCBjbHVzdGVycyBsaXZlIHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFua0RlbnNpdHlHcm91cHMoXG4gIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgY29sdW1uOiBDYXRlZ29yaWNhbENvbHVtbixcbiAgY291bnQ6IG51bWJlcixcbiAgc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayxcbik6IERlbnNpdHlHcm91cFtdIHtcbiAgY29uc3QgaW5TZWxlY3Rpb24gPSBzZWxlY3Rpb24uY291bnQgPiAwID8gc2VsZWN0aW9uLm1hc2sgOiBudWxsO1xuICBjb25zdCBjb2xvcnMgPSByZXNvbHZlQ2F0ZWdvcnlDb2xvcnMoY29sdW1uLm1ldGEpO1xuICBjb25zdCBjb3VudHMgPSBuZXcgVWludDMyQXJyYXkoY29sdW1uLm1ldGEuY2F0ZWdvcmllcy5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBpZiAoaW5TZWxlY3Rpb24gJiYgIWluU2VsZWN0aW9uW2ldKSBjb250aW51ZTtcbiAgICBjb25zdCBjb2RlID0gY29sdW1uLmNvZGVzW2ldO1xuICAgIGlmIChjb2RlICE9PSBOT19DQVRFR09SWSAmJiBjb2RlIDwgY291bnRzLmxlbmd0aCkgY291bnRzW2NvZGVdKys7XG4gIH1cbiAgY29uc3QgcmFua2VkID0gQXJyYXkuZnJvbShjb3VudHMsIChuLCBjb2RlKSA9PiAoeyBjb2RlLCBuIH0pKVxuICAgIC5maWx0ZXIoKGMpID0+IGMubiA+IDApXG4gICAgLnNvcnQoKGEsIGIpID0+IGIubiAtIGEubilcbiAgICAuc2xpY2UoMCwgREVOU0lUWV9NQVhfQ0xVU1RFUlMpO1xuICBpZiAoY291bnRzLmZpbHRlcigoYykgPT4gYyA+IDApLmxlbmd0aCA+IHJhbmtlZC5sZW5ndGgpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgW25hcGFyaS1qc10gJHtjb2x1bW5OYW1lfTogZHJhd2luZyB0aGUgJHtyYW5rZWQubGVuZ3RofSBsYXJnZXN0IGNsdXN0ZXJzIGFzIGRlbnNpdHkgYCArXG4gICAgICAgICd2b2x1bWVzOyBtb3JlIHRoYW4gdGhhdCBzdG9wIGJlaW5nIHNlcGFyYWJsZSBieSBleWUnLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJhbmtlZC5tYXAoKHsgY29kZSB9KSA9PiB7XG4gICAgY29uc3QgaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShjb3VudHNbY29kZV0pO1xuICAgIGxldCBrID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpblNlbGVjdGlvbiAmJiAhaW5TZWxlY3Rpb25baV0pIGNvbnRpbnVlO1xuICAgICAgaWYgKGNvbHVtbi5jb2Rlc1tpXSA9PT0gY29kZSkgaW5kaWNlc1trKytdID0gaTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGNvbHVtbi5tZXRhLmNhdGVnb3JpZXNbY29kZV0sXG4gICAgICBjb2xvcjogY29sb3JzW2NvZGVdID8/ICcjODg4ODg4JyxcbiAgICAgIGluZGljZXM6IGluZGljZXMuc3ViYXJyYXkoMCwgayksXG4gICAgfTtcbiAgfSk7XG59XG4iXX0=
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNwYXRpYWwtZW5jb2RpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLXNwYXRpYWwtZW5jb2RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUk1QyxPQUFPLEVBQXFCLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTFGLE9BQU8sRUFDTCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixxQkFBcUIsR0FFdEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQXdCLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRGOzs7O0dBSUc7QUFFSCwrRkFBK0Y7QUFDL0YsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDOzs7NkZBRzZGO0FBQzdGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLEdBQUcsQ0FBQztBQUNqRDs7MEVBRTBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUNyQzsrREFDK0Q7QUFDL0QsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUNsQzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUN4QztpRkFDaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDO29EQUNvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUM7QUFDL0Msa0ZBQWtGO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUV0Qzt1Q0FDdUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQXFDLENB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QUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNsQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVM7WUFDaEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNoQyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29sb3JtYXBGcm9tTHV0IH0gZnJvbSAnbmFwYXJpLWpzJztcbmltcG9ydCB0eXBlIHsgQ29sb3JtYXAgfSBmcm9tICduYXBhcmktanMnO1xuXG5pbXBvcnQgeyBSZ2IgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvY29sb3JtYXAtbHV0JztcbmltcG9ydCB7IENhdGVnb3JpY2FsQ29sdW1uLCBOT19DQVRFR09SWSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHsgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB7XG4gIGNvbnRyYXN0V2luZG93LFxuICBlbmNvZGVDYXRlZ29yaWNhbCxcbiAgZW5jb2RlQ29udGludW91cyxcbiAgcmVzb2x2ZUNhdGVnb3J5Q29sb3JzLFxuICB0eXBlIFJHQkEsXG59IGZyb20gJy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1lbmNvZGluZyc7XG5pbXBvcnQgeyBTcGF0aWFsU2VsZWN0aW9uTWFzaywgbWFza1RvSW5kaWNlcyB9IGZyb20gJy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1zZWxlY3Rpb24nO1xuXG4vKipcbiAqIFRoZSBzcGF0aWFsIHNjZW5lcycgcHVyZSBjb2xvdXIgYW5kIGdyb3VwaW5nIG1hdGg6IHdoYXQgdGhlIDJEIG1hcmtlcnMsIHRoZSAzRCBjbG91ZCBhbmQgdGhlXG4gKiBkZW5zaXR5IHZvbHVtZXMgYXJlIGNvbG91cmVkIHdpdGgsIGFzIGZ1bmN0aW9ucyBvZiB0aGUgZGF0YSwgdGhlIHZpZXcgYW5kIGEgTFVULiBObyB2aWV3ZXIsIG5vXG4gKiBwb3J0LCBubyBzdG9yZSAocmV2aWV3IEFwcGVuZGl4IEIsIHN0ZXAgMSkuXG4gKi9cblxuLyoqIE1hcmtlciByYWRpdXMgKGltYWdlIHB4KSBmb3IgYSBkYXRhc2V0IHRoYXQgZGVjbGFyZXMgbm9uZSDigJQgc2VnbWVudGVkIGNlbGxzIG9mdGVuIGRvbid0LiAqL1xuZXhwb3J0IGNvbnN0IFNQQVRJQUxfRkFMTEJBQ0tfUkFESVVTID0gNDtcbi8qKiBTbWFsbGVzdCBtYXJrZXIgRElBTUVURVIsIGluIHNsaWNlIHBpeGVscywgb3ZlciBhIHZvbHVtZS1iYWNrZWQgZGF0YXNldC4gQSBjZWxsJ3MgcmVhbFxuICogIHNpemUgaXMgaG9ub3VyZWQgd2hlcmV2ZXIgaXQgc3Vydml2ZXMgdGhlIGdyaWQ6IHRoZSBBQkMgYXRsYXMgc2VydmVzIDUgwrVtIHJhZGlpIG9uIGFcbiAqICA0MCDCtW0vcHggdGVtcGxhdGUsIHNvIGRyYXdpbmcgdGhlbSB0byBzY2FsZSB3b3VsZCBwdXQgZXZlcnkgY2VsbCBhIGZpZnRoIG9mIGEgcGl4ZWwgd2lkZVxuICogIGFuZCB0aGUgc2VjdGlvbiB3b3VsZCBjb21lIHVwIGVtcHR5LiBUaGUgcG9pbnQtc2l6ZSBjb250cm9sIHNjYWxlcyB1cCBmcm9tIHRoaXMgZmxvb3IuICovXG5leHBvcnQgY29uc3QgU1BBVElBTF9TTElDRV9NSU5fRElBTUVURVJfUFggPSAxLjU7XG4vKiogTG9uZ2VzdCBzaWRlIG9mIHRoZSBnZW5lLW1hcCByYXN0ZXIsIGluIGZpZWxkIHBpeGVscy4gQSBnZW5lIG1hcCBpcyBhIHNtb290aFxuICogIGZpZWxkIHJlYWQgYXMgdGVycml0b3J5LCBzbyBpdCBnYWlucyBub3RoaW5nIGZyb20gbWF0Y2hpbmcgYSAyIEdweCBzbGlkZSdzXG4gKiAgcmVzb2x1dGlvbiDigJQgYW5kIHRoZSBlc3RpbWF0ZSBjb3N0cyBvbmUgcGFzcyBvdmVyIHRoaXMgbWFueSBwaXhlbHMuICovXG5leHBvcnQgY29uc3QgR0VORV9NQVBfTUFYX1NJREUgPSA1MTI7XG4vKiogS2VybmVsIM+DIGluIGZpZWxkIHBpeGVscyBhdCBzbW9vdGhpbmcgMTogd2lkZSBlbm91Z2ggdG8gcmVhZCBiZXR3ZWVuIGNlbGxzLFxuICogIHRpZ2h0IGVub3VnaCB0byBrZWVwIGEgbnVjbGV1cy1zY2FsZSBzdHJ1Y3R1cmUgZGlzdGluY3QuICovXG5leHBvcnQgY29uc3QgR0VORV9NQVBfU0lHTUEgPSAyLjU7XG4vKipcbiAqIEluLXBsYW5lIGNvYXJzZW5pbmcgb2YgdGhlIDNEIGdlbmUgbWFwJ3MgbGF0dGljZSwgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZVxuICogdm9sdW1lLiBUaGUgZmllbGQgaXMgc21vb3RoLCBzbyBpdHMgZGV0YWlsIGlzIHNldCBieSB0aGUga2VybmVsIHJhdGhlciB0aGFuIHRoZVxuICogcmFzdGVyIOKAlCBhbmQgdGhlIGVzdGltYXRlIGlzIGEgcGFpciBvZiBzZXBhcmFibGUgYmx1cnMsIHdoaWNoIGF0IHRoZSB0ZW1wbGF0ZSdzXG4gKiBmdWxsIHJlc29sdXRpb24gbWVhbnMgc2Vjb25kcyBvZiB3b3JrIHBlciB0b2dnbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBHRU5FX01BUF9WT0xVTUVfU1RSSURFID0gMjtcbi8qKiBDbHVzdGVycyBkcmF3biBhcyBkZW5zaXR5IHZvbHVtZXMgYXQgb25jZS4gUGFzdCBhIGhhbmRmdWwsIGFkZGl0aXZlIHRyYW5zbHVjZW50XG4gKiAgY2xvdWRzIHN0b3AgYmVpbmcgc2VwYXJhYmxlIGJ5IGV5ZSDigJQgYW5kIGVhY2ggb25lIGlzIGEgZnVsbCByYXN0ZXJpc2F0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IERFTlNJVFlfTUFYX0NMVVNURVJTID0gNjtcbi8qKiBIb3cgbXVjaCBsYXJnZXIgYSBzZWxlY3RlZCBtYXJrZXIgaXMgZHJhd24sIHNvIGEgc21hbGwgc2VsZWN0aW9uIGlzIGZpbmRhYmxlIGluc2lkZSBhXG4gKiAgMy43TS1wb2ludCBjbG91ZCByYXRoZXIgdGhhbiBtZXJlbHkgYnJpZ2h0ZXIuICovXG5leHBvcnQgY29uc3QgU1BBVElBTF9TRUxFQ1RFRF9TSVpFX1NDQUxFID0gMS42O1xuLyoqIEJhc2UgbWFya2VyIGRpYW1ldGVyIGZvciB0aGUgM0QgY2xvdWQsIGluIFNDUkVFTiBwaXhlbHMgKHRoZSBsYXllcidzIHVuaXQpLiAqL1xuZXhwb3J0IGNvbnN0IFNQQVRJQUxfM0RfQkFTRV9TSVpFID0gMztcblxuLyoqIENvbG91ciBmb3Igb2JzZXJ2YXRpb25zIHdoZW4gbm90aGluZyBpcyBzZWxlY3RlZCB0byBjb2xvdXIgYnk6IHZpc2libGUsIG5ldXRyYWwsIGFuZFxuICogIG9idmlvdXNseSBub3QgZW5jb2RpbmcgYW55dGhpbmcuICovXG5leHBvcnQgY29uc3QgU1BBVElBTF9ORVVUUkFMX0NPTE9SOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFswLjM1LCAwLjcyLCAwLjk1LCAwLjldO1xuLyoqIHtAbGluayBTUEFUSUFMX05FVVRSQUxfQ09MT1J9IGFzIGEgaGV4IGNvbG91ciAoYWxwaGEgZHJvcHBlZCksIGZvciB0aGUgZW5jb2RlcnMgYW5kIHRoZVxuICogIGRlbnNpdHktdm9sdW1lIHRpbnQuICovXG5leHBvcnQgY29uc3QgU1BBVElBTF9ORVVUUkFMX0hFWCA9IGAjJHtTUEFUSUFMX05FVVRSQUxfQ09MT1Iuc2xpY2UoMCwgMylcbiAgLm1hcCgoYykgPT5cbiAgICBNYXRoLnJvdW5kKGMgKiAyNTUpXG4gICAgICAudG9TdHJpbmcoMTYpXG4gICAgICAucGFkU3RhcnQoMiwgJzAnKSxcbiAgKVxuICAuam9pbignJyl9YDtcblxuLyoqXG4gKiBDb250cmFzdCB3aW5kb3dzIG1lbW9pc2VkIHBlciAodmFsdWVzIGFycmF5LCBsbywgaGksIGxvZykuIGBjb250cmFzdFdpbmRvd2Agc29ydHMgZXZlcnkgdmFsdWUsXG4gKiBhbmQgdGhlIHNwYXRpYWwgY29sb3VyaW5nIHJlLXJ1bnMgaXQgb24gZWFjaCBvcGFjaXR5LCBzZWxlY3Rpb24gb3IgY29sb3JtYXAgY2hhbmdlIHdoaWxlIHRoZVxuICogY29sb3VyZWQgdmVjdG9yIGl0c2VsZiBpcyB1bmNoYW5nZWQgKHJldmlldyBTUEFUSUFMLTEyKS4gS2V5ZWQgYnkgdGhlIHZlY3RvcidzIGlkZW50aXR5LCBzbyBhXG4gKiBuZXcgY29sdW1uIG9yIGdlbmUgdmVjdG9yIGlzIGEgbWlzcyBhbmQgYW4gb2xkIG9uZSBpcyBjb2xsZWN0ZWQgd2l0aCBpdHMgd2luZG93cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRyYXN0V2luZG93Q2FjaGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGJ5VmVjdG9yID0gbmV3IFdlYWtNYXA8RmxvYXQzMkFycmF5LCBNYXA8c3RyaW5nLCBbbnVtYmVyLCBudW1iZXJdPj4oKTtcblxuICBnZXQoXG4gICAgdmFsdWVzOiBGbG9hdDMyQXJyYXksXG4gICAgbG86IG51bWJlcixcbiAgICBoaTogbnVtYmVyLFxuICAgIGxvZzogYm9vbGVhbixcbiAgICBjb21wdXRlOiAoKSA9PiBbbnVtYmVyLCBudW1iZXJdLFxuICApOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICBsZXQgd2luZG93cyA9IHRoaXMuYnlWZWN0b3IuZ2V0KHZhbHVlcyk7XG4gICAgaWYgKCF3aW5kb3dzKSB7XG4gICAgICB3aW5kb3dzID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5ieVZlY3Rvci5zZXQodmFsdWVzLCB3aW5kb3dzKTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gYCR7bG99fCR7aGl9fCR7bG9nID8gMSA6IDB9YDtcbiAgICBsZXQgdyA9IHdpbmRvd3MuZ2V0KGtleSk7XG4gICAgaWYgKCF3KSB7XG4gICAgICB3ID0gY29tcHV0ZSgpO1xuICAgICAgd2luZG93cy5zZXQoa2V5LCB3KTtcbiAgICB9XG4gICAgcmV0dXJuIHc7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGF0IHRoZSAzRCBwb2ludHMgbGF5ZXIgbmVlZHMgdG8gY29sb3VyIGEgY2xvdWQ6IGZvciBjb250aW51b3VzIGRhdGEsIG9uZSBzY2FsYXIgcGVyIHBvaW50LCBhXG4gKiBjb2xvcm1hcCBhbmQgdGhlIHdpbmRvdyB0aGF0IG1hcHMgc2NhbGFycyBvbnRvIGl0OyBmb3IgY2F0ZWdvcmljYWwgZGF0YSwgb25lIHBhY2tlZCBSR0JBIHBlclxuICogcG9pbnQgKGBQb2ludHMzRExheWVyLmNvbG9yc2AsIHdoaWNoIHdpbnMgb3ZlciB0aGUgc2NhbGFycykuXG4gKi9cbmV4cG9ydCB0eXBlIFNwYXRpYWwzZEVuY29kaW5nID0gU3BhdGlhbDNkU2NhbGFycyB8IFNwYXRpYWwzZENvbG9ycztcblxuLyoqIEEgY2xvdWQgY29sb3VyZWQgdGhyb3VnaCB0aGUgY29sb3JtYXA6IHNjYWxhcnMsIGNvbG9ybWFwIGFuZCB3aW5kb3cuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWwzZFNjYWxhcnMge1xuICBraW5kOiAnc2NhbGFycyc7XG4gIHZhbHVlczogRmxvYXQzMkFycmF5O1xuICBjb2xvcm1hcDogQ29sb3JtYXA7XG4gIGNvbnRyYXN0TGltaXRzOiBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG4vKiogQSBjbG91ZCBjb2xvdXJlZCBwb2ludCBieSBwb2ludDogcGFja2VkIFJHQkEsIDQgZmxvYXRzIHBlciBwb2ludC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbDNkQ29sb3JzIHtcbiAga2luZDogJ2NvbG9ycyc7XG4gIGNvbG9yczogRmxvYXQzMkFycmF5O1xufVxuXG4vKiogQSBvbmUtY29sb3VyIGNvbG9ybWFwLCBmb3IgdGhlIFwibm90aGluZyB0byBjb2xvdXIgYnlcIiBzdGF0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGF0aWFsRmxhdENvbG9ybWFwKCk6IENvbG9ybWFwIHtcbiAgY29uc3QgW3IsIGcsIGJdID0gU1BBVElBTF9ORVVUUkFMX0NPTE9SO1xuICBjb25zdCByZ2I6IFJnYiA9IFtNYXRoLnJvdW5kKHIgKiAyNTUpLCBNYXRoLnJvdW5kKGcgKiAyNTUpLCBNYXRoLnJvdW5kKGIgKiAyNTUpXTtcbiAgLy8gVHdvIGlkZW50aWNhbCBzdG9wczogY29sb3JtYXBGcm9tTHV0IG5lZWRzIGF0IGxlYXN0IHR3bywgYW5kIGVxdWFsIGVuZHNcbiAgLy8gbWFrZSBldmVyeSB2YWx1ZSByZXNvbHZlIHRvIHRoZSBzYW1lIGNvbG91ci5cbiAgcmV0dXJuIGNvbG9ybWFwRnJvbUx1dCgnc3BhdGlhbC1mbGF0JywgW3JnYiwgcmdiXSk7XG59XG5cbi8qKlxuICogQ2F0ZWdvcnkgY29kZXMg4oaSIG9uZSBSR0JBIHBlciBwb2ludCwgZm9yIGFueSBudW1iZXIgb2YgY2F0ZWdvcmllcy5cbiAqXG4gKiBUaGUgMkQgbWFya2VycycgZW5jb2RpbmcsIHdpdGggb25lIGRpZmZlcmVuY2U6IGEgcG9pbnQgd2l0aCBubyBjYXRlZ29yeSBzdGF5cyBvcGFxdWUgKGdyZXkpLFxuICogYXMgaXQgYWx3YXlzIGhhcyBpbiB0aGUgY2xvdWQsIHdoZXJlIHRoZSBzZWxlY3Rpb24gZGltcyB0aHJvdWdoIHRoZSBsYXllcidzIHBlci1wb2ludCBhbHBoYXNcbiAqIGluc3RlYWQuIEl0IHVzZWQgdG8gYmUgc211Z2dsZWQgdGhyb3VnaCB0aGUgc2NhbGFyIGNoYW5uZWwgYXMgYSBzdGVwcGVkIDI1Ni1lbnRyeSBMVVQsIHdoaWNoXG4gKiBrZXB0IGF0IG1vc3QgOTUgY2F0ZWdvcmllcyBhcGFydCAocmV2aWV3IFNQQVRJQUwtMTEsIE5BUEFSSS1TVkMtMTgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU3BhdGlhbDNkQ2F0ZWdvcmljYWwoY29kZXM6IFVpbnQxNkFycmF5LCBjb2xvcnM6IHN0cmluZ1tdKTogU3BhdGlhbDNkQ29sb3JzIHtcbiAgcmV0dXJuIHsga2luZDogJ2NvbG9ycycsIGNvbG9yczogZW5jb2RlQ2F0ZWdvcmljYWwoY29kZXMsIHsgY29sb3JzLCBtdXRlZE9wYWNpdHk6IDEgfSkgfTtcbn1cblxuLyoqIENvbnRpbnVvdXMgdmFsdWVzIOKGkiBgbHV0YCBvdmVyIGEgcGVyY2VudGlsZS1jbGlwcGVkIHdpbmRvdyAobG9nMXAgZmlyc3Qgd2hlbiB0aGUgdmlldydzIGxvZ1xuICogIHNjYWxlIGlzIG9uKSwgZm9yIHRoZSAzRCBjbG91ZCdzIHNjYWxhciBjaGFubmVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVNwYXRpYWwzZENvbnRpbnVvdXMoXG4gIHNvdXJjZTogRmxvYXQzMkFycmF5LFxuICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICBsdXQ6IFJnYltdLFxuICB3aW5kb3dzOiBDb250cmFzdFdpbmRvd0NhY2hlLFxuKTogU3BhdGlhbDNkU2NhbGFycyB7XG4gIGNvbnN0IFtsbywgaGldID0gdmlldy5wZXJjZW50aWxlQ2xpcCA/PyBbMC4wMSwgMC45OV07XG4gIGNvbnN0IGxvZyA9ICEhdmlldy5sb2dTY2FsZTtcbiAgbGV0IHZhbHVlcyA9IHNvdXJjZTtcbiAgaWYgKGxvZykge1xuICAgIHZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoc291cmNlLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHZhbHVlc1tpXSA9IE1hdGgubG9nMXAoTWF0aC5tYXgoMCwgc291cmNlW2ldKSk7XG4gIH1cbiAgLy8gS2V5ZWQgYnkgdGhlIFNPVVJDRSB2ZWN0b3I6IHRoZSBsb2cgY29weSBhYm92ZSBpcyBuZXcgb24gZXZlcnkgY2FsbC5cbiAgY29uc3QgW21pbiwgbWF4XSA9IHdpbmRvd3MuZ2V0KHNvdXJjZSwgbG8sIGhpLCBsb2csICgpID0+IGNvbnRyYXN0V2luZG93KHZhbHVlcywgbG8sIGhpKSk7XG4gIHJldHVybiB7XG4gICAga2luZDogJ3NjYWxhcnMnLFxuICAgIHZhbHVlcyxcbiAgICBjb2xvcm1hcDogY29sb3JtYXBGcm9tTHV0KCdzcGF0aWFsLWNvbnRpbnVvdXMnLCBsdXQpLFxuICAgIC8vIEEgZGVnZW5lcmF0ZSB3aW5kb3cgd291bGQgZGl2aWRlIGJ5IHplcm8gaW4gdGhlIHNoYWRlcidzIG5vcm1hbGlzYXRpb24uXG4gICAgY29udHJhc3RMaW1pdHM6IG1heCA+IG1pbiA/IFttaW4sIG1heF0gOiBbbWluLCBtaW4gKyAxXSxcbiAgfTtcbn1cblxuLyoqIENvbnRpbnVvdXMgdmFsdWVzIOKGkiBwZXItcG9pbnQgUkdCQSB0aHJvdWdoIGBsdXRgIGFuZCBhIGNsaXBwZWQgd2luZG93IChsb2cgc2NhbGUgcGVyIHRoZVxuICogIHZpZXcpLCBmb3IgdGhlIDJEIG1hcmtlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU3BhdGlhbENvbnRpbnVvdXMoXG4gIHZhbHVlczogRmxvYXQzMkFycmF5LFxuICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICBsdXQ6IFJnYltdLFxuICB3aW5kb3dzOiBDb250cmFzdFdpbmRvd0NhY2hlLFxuICBtdXRlZDogVWludDhBcnJheSB8IG51bGwgPSBudWxsLFxuKTogRmxvYXQzMkFycmF5IHtcbiAgY29uc3QgW2xvLCBoaV0gPSB2aWV3LnBlcmNlbnRpbGVDbGlwID8/IFswLjAxLCAwLjk5XTtcbiAgLy8gVGhlIHdpbmRvdyBpcyB0YWtlbiBvbiB0aGUgcmF3IHZhbHVlcyAoZW5jb2RlQ29udGludW91cyBhcHBsaWVzIHRoZSBsb2cgaXRzZWxmKS5cbiAgY29uc3QgW21pbiwgbWF4XSA9IHdpbmRvd3MuZ2V0KHZhbHVlcywgbG8sIGhpLCBmYWxzZSwgKCkgPT4gY29udHJhc3RXaW5kb3codmFsdWVzLCBsbywgaGkpKTtcbiAgcmV0dXJuIGVuY29kZUNvbnRpbnVvdXModmFsdWVzLCB7XG4gICAgbHV0LFxuICAgIG1pbixcbiAgICBtYXgsXG4gICAgbG9nOiB2aWV3LmxvZ1NjYWxlLFxuICAgIG9wYWNpdHk6IHZpZXcub3BhY2l0eSxcbiAgICBtdXRlZCxcbiAgfSk7XG59XG5cbi8qKiBNYXJrZXIgY29sb3VyczogcGFja2VkIHBlci1wb2ludCBSR0JBICg0IGZsb2F0cyBwZXIgcG9pbnQsIHRoZSBzaGFwZSBuYXBhcmktanMgY29waWVzIHN0cmFpZ2h0XG4gKiAgaW50byBpdHMgaW5zdGFuY2UgYnVmZmVyKSwgb3Igb25lIFJHQkEgYnJvYWRjYXN0IHRvIGV2ZXJ5IHBvaW50LiAqL1xuZXhwb3J0IHR5cGUgUG9pbnRDb2xvcnMgPSBGbG9hdDMyQXJyYXkgfCBSR0JBO1xuXG4vKiogV2hldGhlciBhIGNvbG91ciBpbnB1dCBpcyBvbmUgUkdCQSBwZXIgcG9pbnQgcmF0aGVyIHRoYW4gb25lIGJyb2FkY2FzdCBSR0JBLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGVyUG9pbnQoY29sb3JzOiBQb2ludENvbG9ycyk6IGNvbG9ycyBpcyBGbG9hdDMyQXJyYXkge1xuICByZXR1cm4gY29sb3JzIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5O1xufVxuXG4vKipcbiAqIGBjb2xvcnNgIHdpdGggZXZlcnkgb2JzZXJ2YXRpb24gYHNob3duYCBsZWF2ZXMgYXQgMCBtYWRlIHRyYW5zcGFyZW50OiB0aGUgb2JzZXJ2YXRpb25zIGEgZ2VuZVxuICogZmlsdGVyIGxlYXZlcyBvdXQuIEEgYnJvYWRjYXN0IGNvbG91ciBiZWNvbWVzIHBlci1wb2ludCwgc2luY2UgdGhlIHBvaW50cyBub3cgZGlmZmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZVVuc2hvd24oY29sb3JzOiBQb2ludENvbG9ycywgc2hvd246IFVpbnQ4QXJyYXkpOiBGbG9hdDMyQXJyYXkge1xuICBjb25zdCBjb3VudCA9IHNob3duLmxlbmd0aDtcbiAgbGV0IG91dDogRmxvYXQzMkFycmF5O1xuICBpZiAoaXNQZXJQb2ludChjb2xvcnMpKSB7XG4gICAgb3V0ID0gY29sb3JzLnNsaWNlKCk7IC8vIHRoZSBpbnB1dCBtYXkgYmUgaGVsZCBlbHNld2hlcmVcbiAgfSBlbHNlIHtcbiAgICBvdXQgPSBuZXcgRmxvYXQzMkFycmF5KGNvdW50ICogNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSBvdXQuc2V0KGNvbG9ycywgaSAqIDQpO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgaWYgKCFzaG93bltpXSkgb3V0WzQgKiBpICsgM10gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogUGVyLXBvaW50IGNvbG91cnMgZm9yIHRoZSBkcmF3biBzdWJzZXQuIEEgYnJvYWRjYXN0IHR1cGxlIHN0YXlzIGJyb2FkY2FzdCDigJRcbiAqICBpdCBpcyBvbmUgY29sb3VyIGZvciBldmVyeSBwb2ludCBlaXRoZXIgd2F5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdhdGhlckNvbG9ycyhjb2xvcnM6IFBvaW50Q29sb3JzLCBpbmRpY2VzPzogVWludDMyQXJyYXkpOiBQb2ludENvbG9ycyB7XG4gIGlmICghaW5kaWNlcyB8fCAhaXNQZXJQb2ludChjb2xvcnMpKSByZXR1cm4gY29sb3JzO1xuICBjb25zdCBvdXQgPSBuZXcgRmxvYXQzMkFycmF5KGluZGljZXMubGVuZ3RoICogNCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHMgPSBpbmRpY2VzW2ldICogNDtcbiAgICBjb25zdCBvID0gaSAqIDQ7XG4gICAgb3V0W29dID0gY29sb3JzW3NdO1xuICAgIG91dFtvICsgMV0gPSBjb2xvcnNbcyArIDFdO1xuICAgIG91dFtvICsgMl0gPSBjb2xvcnNbcyArIDJdO1xuICAgIG91dFtvICsgM10gPSBjb2xvcnNbcyArIDNdO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBPbmUgZGVuc2l0eSB2b2x1bWUncyBvYnNlcnZhdGlvbnM6IGEgY2x1c3RlciAob3IgYWxsIGNlbGxzKSwgd2l0aCBpdHMgbGVnZW5kIGNvbG91ci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVuc2l0eUdyb3VwIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICBpbmRpY2VzPzogVWludDMyQXJyYXk7XG59XG5cbi8qKiBUaGUgc2luZ2xlIGdyb3VwIGRyYXduIHdoZW4gdGhlIGNvbG91cmluZyBpcyBub3QgY2F0ZWdvcmljYWw6IHRvdGFsIGNlbGwgZGVuc2l0eSwgd2l0aGluIHRoZVxuICogIHNlbGVjdGlvbiB3aGVuIHRoZXJlIGlzIG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b3RhbERlbnNpdHlHcm91cChzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrKTogRGVuc2l0eUdyb3VwIHtcbiAgY29uc3QgaW5TZWxlY3Rpb24gPSBzZWxlY3Rpb24uY291bnQgPiAwID8gc2VsZWN0aW9uLm1hc2sgOiBudWxsO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGluU2VsZWN0aW9uID8gJ3NlbGVjdGVkIGNlbGxzJyA6ICdhbGwgY2VsbHMnLFxuICAgIGNvbG9yOiBTUEFUSUFMX05FVVRSQUxfSEVYLFxuICAgIGluZGljZXM6IGluU2VsZWN0aW9uID8gbWFza1RvSW5kaWNlcyhpblNlbGVjdGlvbikgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogVGhlIGNsdXN0ZXJzIG9mIGEgY2F0ZWdvcmljYWwgY29sdW1uIHRvIHJhc3RlcmlzZSwgYmlnZ2VzdCBmaXJzdCBhbmQgY2FwcGVkIGF0XG4gKiB7QGxpbmsgREVOU0lUWV9NQVhfQ0xVU1RFUlN9LCBlYWNoIHdpdGggaXRzIGxlZ2VuZCBjb2xvdXIg4oCUIHJlc3RyaWN0ZWQgdG8gdGhlIHNlbGVjdGlvbiB3aGVuXG4gKiB0aGVyZSBpcyBvbmUsIHNvIFwic2VsZWN0IGEgcmVnaW9uLCBjaGVjayB0aGUgYm94XCIgYW5zd2VycyB3aGljaCBjbHVzdGVycyBsaXZlIHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFua0RlbnNpdHlHcm91cHMoXG4gIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgY29sdW1uOiBDYXRlZ29yaWNhbENvbHVtbixcbiAgY291bnQ6IG51bWJlcixcbiAgc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayxcbik6IERlbnNpdHlHcm91cFtdIHtcbiAgY29uc3QgaW5TZWxlY3Rpb24gPSBzZWxlY3Rpb24uY291bnQgPiAwID8gc2VsZWN0aW9uLm1hc2sgOiBudWxsO1xuICBjb25zdCBjb2xvcnMgPSByZXNvbHZlQ2F0ZWdvcnlDb2xvcnMoY29sdW1uLm1ldGEpO1xuICBjb25zdCBjb3VudHMgPSBuZXcgVWludDMyQXJyYXkoY29sdW1uLm1ldGEuY2F0ZWdvcmllcy5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBpZiAoaW5TZWxlY3Rpb24gJiYgIWluU2VsZWN0aW9uW2ldKSBjb250aW51ZTtcbiAgICBjb25zdCBjb2RlID0gY29sdW1uLmNvZGVzW2ldO1xuICAgIGlmIChjb2RlICE9PSBOT19DQVRFR09SWSAmJiBjb2RlIDwgY291bnRzLmxlbmd0aCkgY291bnRzW2NvZGVdKys7XG4gIH1cbiAgY29uc3QgcmFua2VkID0gQXJyYXkuZnJvbShjb3VudHMsIChuLCBjb2RlKSA9PiAoeyBjb2RlLCBuIH0pKVxuICAgIC5maWx0ZXIoKGMpID0+IGMubiA+IDApXG4gICAgLnNvcnQoKGEsIGIpID0+IGIubiAtIGEubilcbiAgICAuc2xpY2UoMCwgREVOU0lUWV9NQVhfQ0xVU1RFUlMpO1xuICBpZiAoY291bnRzLmZpbHRlcigoYykgPT4gYyA+IDApLmxlbmd0aCA+IHJhbmtlZC5sZW5ndGgpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgW25hcGFyaS1qc10gJHtjb2x1bW5OYW1lfTogZHJhd2luZyB0aGUgJHtyYW5rZWQubGVuZ3RofSBsYXJnZXN0IGNsdXN0ZXJzIGFzIGRlbnNpdHkgYCArXG4gICAgICAgICd2b2x1bWVzOyBtb3JlIHRoYW4gdGhhdCBzdG9wIGJlaW5nIHNlcGFyYWJsZSBieSBleWUnLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJhbmtlZC5tYXAoKHsgY29kZSB9KSA9PiB7XG4gICAgY29uc3QgaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShjb3VudHNbY29kZV0pO1xuICAgIGxldCBrID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpblNlbGVjdGlvbiAmJiAhaW5TZWxlY3Rpb25baV0pIGNvbnRpbnVlO1xuICAgICAgaWYgKGNvbHVtbi5jb2Rlc1tpXSA9PT0gY29kZSkgaW5kaWNlc1trKytdID0gaTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGNvbHVtbi5tZXRhLmNhdGVnb3JpZXNbY29kZV0sXG4gICAgICBjb2xvcjogY29sb3JzW2NvZGVdID8/ICcjODg4ODg4JyxcbiAgICAgIGluZGljZXM6IGluZGljZXMuc3ViYXJyYXkoMCwgayksXG4gICAgfTtcbiAgfSk7XG59XG4iXX0=
@@ -31,6 +31,10 @@ export class SpatialSession {
31
31
  this.tileLayers = null;
32
32
  this.tileOwner = null;
33
33
  }
34
+ /** Tell the panel whether the observation gene filter could be applied this rebuild. */
35
+ reportGeneFilter(failed) {
36
+ this.sinks.geneFilterFailed?.(failed);
37
+ }
34
38
  /** The tile layers, if they were ever built. */
35
39
  get tiles() {
36
40
  return this.tileLayers;
@@ -156,4 +160,4 @@ export class SpatialSceneBase {
156
160
  this.hover.dispose();
157
161
  }
158
162
  }
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNwYXRpYWwtc2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLXNwYXRpYWwtc2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTW5FLE9BQU8sRUFBd0IsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHdkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUE4QnJGOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFpQnpCLFlBQ1csSUFBNEIsRUFDNUIsU0FBdUMsRUFDL0IsS0FBdUI7UUFGL0IsU0FBSSxHQUFKLElBQUksQ0FBd0I7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBOEI7UUFDL0IsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFuQjFDO29HQUM0RjtRQUM1RixXQUFNLEdBQXlCLElBQUksQ0FBQztRQUNwQyx5RkFBeUY7UUFDaEYsb0JBQWUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDckQsMEZBQTBGO1FBQ2pGLFlBQU8sR0FBZ0MsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzRSwrQkFBK0I7UUFDdEIsa0JBQWEsR0FBc0MsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvRSxzQkFBaUIsR0FBZ0MsSUFBSSxDQUFDO1FBQ3RELHNCQUFpQixH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dWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQgeyBTcGF0aWFsRGF0YXNldCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHsgQ29sb3JtYXBOb2RlLCBTcGF0aWFsVmlld1N0YXRlIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgRXhwcmVzc2lvbkZpZWxkLCBFeHByZXNzaW9uVm9sdW1lRmllbGQgfSBmcm9tICcuLi8uLi9zcGF0aWFsL3NwYXRpYWwtZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBTcGF0aWFsU2VsZWN0aW9uTWFzaywgZW1wdHlTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9zcGF0aWFsL3NwYXRpYWwtc2VsZWN0aW9uJztcbmltcG9ydCB7IFNwYXRpYWxTZWxlY3Rpb25TdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3NwYXRpYWwtc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmlzdWFsaXplclN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvdmlzdWFsaXplci1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN1cGVyc2VkZSB9IGZyb20gJy4uLy4uL3V0aWwvc3VwZXJzZWRlJztcbmltcG9ydCB7IENvbnRyYXN0V2luZG93Q2FjaGUgfSBmcm9tICcuL25hcGFyaS1zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB7IFNwYXRpYWxIb3ZlciB9IGZyb20gJy4vbmFwYXJpLXNwYXRpYWwtaG92ZXInO1xuaW1wb3J0IHsgTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMsIFRyYW5zY3JpcHRFc3RpbWF0ZSB9IGZyb20gJy4vbmFwYXJpLXNwYXRpYWwtdGlsZXMnO1xuaW1wb3J0IHsgUmdiIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2NvbG9ybWFwLWx1dCc7XG5pbXBvcnQgdHlwZSB7IFNjZW5lQ29udGV4dCB9IGZyb20gJy4vbmFwYXJpLXNjZW5lJztcblxuLyoqIFdoYXQgdGhlIHNwYXRpYWwgc3Vic2NyaXB0aW9uIGxhc3Qgc2F3OiB0aGUgZGF0YXNldCwgdGhlIHZpZXcgc3RhdGUgYW5kIHRoZSBzZWxlY3Rpb24uICovXG5leHBvcnQgdHlwZSBTcGF0aWFsTGF0ZXN0ID0gW1NwYXRpYWxEYXRhc2V0IHwgbnVsbCwgU3BhdGlhbFZpZXdTdGF0ZSwgU3BhdGlhbFNlbGVjdGlvbk1hc2tdO1xuXG4vKiogV2hlcmUgdGhlIHNwYXRpYWwgdGlsZSBsYXllcnMnIHBhbmVsIG91dHB1dHMgZ28gKHRoZSBzZXJ2aWNlJ3Mgc3ViamVjdHMgYW5kIGJhZGdlKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbFRpbGVTaW5rcyB7XG4gIC8qKiBUaGUgY29udGludW91cyBMVVQgdGhlIHZpZXcgaXMgdXNpbmcgKHNvIGNlbGxzIGNvbG91cmVkIGJ5IGEgZ2VuZSBtYXRjaCB0aGUgbWFya2VycykuICovXG4gIGNvbnRpbnVvdXNMdXQodmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IFJnYltdO1xuICBlc3RpbWF0ZUNoYW5nZWQoZXN0aW1hdGU6IFRyYW5zY3JpcHRFc3RpbWF0ZSB8IG51bGwpOiB2b2lkO1xuICBnZW5lQ291bnRzQ2hhbmdlZChjb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfCBudWxsKTogdm9pZDtcbiAgZGVuc2l0eUNoYW5nZWQoc3RhdHM6IHsgbG86IG51bWJlcjsgaGk6IG51bWJlcjsgbWF4OiBudW1iZXIgfSk6IHZvaWQ7XG4gIGxvYWRpbmdDaGFuZ2VkKGxheWVyczogc3RyaW5nW10pOiB2b2lkO1xufVxuXG4vKiogVGhlIDJEIHNjZW5lIHRoZSB0aWxlIGxheWVycyBjdXJyZW50bHkgZHJhdyBpbnRvLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsVGlsZU93bmVyIHtcbiAgY2FudmFzU2l6ZSgpOiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKiogT3V0bGluZXMgYXBwZWFyZWQgb3IgZGlzYXBwZWFyZWQ6IHRoZSBtYXJrZXJzJyB2aXNpYmlsaXR5IGZvbGxvd3MuICovXG4gIHBvbHlnb25zU2hvd25DaGFuZ2VkKCk6IHZvaWQ7XG59XG5cbi8qKiBBbiBlc3RpbWF0ZWQgZmllbGQgYW5kIHRoZSBpbnB1dHMgaXQgd2FzIGVzdGltYXRlZCBmb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkQ2FjaGU8VD4ge1xuICBrZXk6IHN0cmluZyB8IG51bGw7XG4gIGZpZWxkOiBUIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBUaGUgc3BhdGlhbCBzdGF0ZSB0aGF0IG91dGxpdmVzIGEgc2NlbmUgKHJldmlldyBBcHBlbmRpeCBCKTogd2hhdCB0aGUgc3Vic2NyaXB0aW9uIGxhc3Qgc2F3LCB0aGVcbiAqIG1lbW9pc2VkIHBlcmNlbnRpbGUgd2luZG93cywgdGhlIHNlbGVjdGlvbiByZXZpc2lvbiBjb3VudGVyIGFuZCB0aGUgZXN0aW1hdGVkIGdlbmUtbWFwIEZJRUxEUyDigJRcbiAqIHZpZXdlci1pbmRlcGVuZGVudCBhbmQgZXhwZW5zaXZlLCBzbyBhIHJlLXBsb3QgcmVjb2xvdXJzIHRoZSBjYWNoZWQgZmllbGQgaW5zdGVhZCBvZiBlc3RpbWF0aW5nXG4gKiBpdCBhZ2Fpbi4gRXZlcnl0aGluZyB0aGF0IG5hbWVzIGEgbGF5ZXIgb2YgYSB2aWV3ZXIgYmVsb25ncyB0byB0aGUgc2NlbmUgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNwYXRpYWxTZXNzaW9uIHtcbiAgLyoqIExhdGVzdCAoZGF0YXNldCwgdmlldywgc2VsZWN0aW9uKSB0aGUgc3BhdGlhbCBzdWJzY3JpcHRpb24gc2F3IOKAlCBzbyBhIHNsaWNlIGNoYW5nZSBjYW5cbiAgICogIHJlYnVpbGQgdGhlIG1hcmtlcnMgZm9yIHRoZSBuZXcgcGxhbmUsIGFuZCB0aGUgdGlsZSBsYXllcnMgYW5kIHRoZSBob3ZlciBjYW4gcmVhZCBpdC4gKi9cbiAgbGF0ZXN0OiBTcGF0aWFsTGF0ZXN0IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBTcGF0aWFsIGNvbG91cmluZydzIHBlcmNlbnRpbGUgd2luZG93cywgbWVtb2lzZWQgcGVyIGNvbG91cmVkIHZlY3RvciAoU1BBVElBTC0xMikuICovXG4gIHJlYWRvbmx5IGNvbnRyYXN0V2luZG93cyA9IG5ldyBDb250cmFzdFdpbmRvd0NhY2hlKCk7XG4gIC8qKiBUaGUgMkQgZ2VuZSBtYXAncyBmaWVsZCAodGhlIGV4cGVuc2l2ZSBoYWxmOiBpdCBzdXJ2aXZlcyBhIHJlY29sb3VyIGFuZCBhIHJlLXBsb3QpLiAqL1xuICByZWFkb25seSBnZW5lTWFwOiBGaWVsZENhY2hlPEV4cHJlc3Npb25GaWVsZD4gPSB7IGtleTogbnVsbCwgZmllbGQ6IG51bGwgfTtcbiAgLyoqIFRoZSAzRCBnZW5lIG1hcCdzIGZpZWxkLiAqL1xuICByZWFkb25seSBnZW5lTWFwVm9sdW1lOiBGaWVsZENhY2hlPEV4cHJlc3Npb25Wb2x1bWVGaWVsZD4gPSB7IGtleTogbnVsbCwgZmllbGQ6IG51bGwgfTtcbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uU2VlbjogU3BhdGlhbFNlbGVjdGlvbk1hc2sgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25SZXZpc2lvbiA9IDA7XG4gIC8qKiBMZXZlbC1vZi1kZXRhaWwgY2VsbCBvdXRsaW5lcywgdHJhbnNjcmlwdHMgYW5kIGRlbnNpdHkgb3ZlciB0aGUgMkQgdmlldyDigJQgY3JlYXRlZCBvbiBmaXJzdFxuICAgKiAgdXNlLCBvbmx5IHdoZW4gYSBzcGF0aWFsIHBvcnQgaXMgYm91bmQsIGFuZCBrZXB0IGFjcm9zcyBzY2VuZXMgKGl0cyB0aWxlIGNhY2hlcyB3aXRoIGl0KS4gKi9cbiAgcHJpdmF0ZSB0aWxlTGF5ZXJzOiBOYXBhcmlTcGF0aWFsVGlsZUxheWVycyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRpbGVPd25lcjogU3BhdGlhbFRpbGVPd25lciB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCB8IG51bGwsXG4gICAgcmVhZG9ubHkgc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uU3RvcmUgfCBudWxsLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2lua3M6IFNwYXRpYWxUaWxlU2lua3MsXG4gICkge31cblxuICAvKiogVGhlIHRpbGUgbGF5ZXJzLCBpZiB0aGV5IHdlcmUgZXZlciBidWlsdC4gKi9cbiAgZ2V0IHRpbGVzKCk6IE5hcGFyaVNwYXRpYWxUaWxlTGF5ZXJzIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudGlsZUxheWVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGlsZSBsYXllcnMsIGJ1aWx0IG9uIGZpcnN0IHVzZSAobnVsbCB3aXRob3V0IGEgc3BhdGlhbCBwb3J0KSwgbm93IGRyYXdpbmcgZm9yIGBvd25lcmAuXG4gICAqIFRoZWlyIGhvc3QgY2FsbGJhY2tzIHJlYWQgdGhlIHNlc3Npb24ncyBsaXZlIHN0YXRlIGFuZCB0aGUgb3duZXIncyBjYW52YXMsIHNvIHRoZXkgbmV2ZXIgaG9sZFxuICAgKiBhIHN0YWxlIGRhdGFzZXQgb3IgY29sb3JtYXAuXG4gICAqL1xuICBjbGFpbVRpbGVzKG93bmVyOiBTcGF0aWFsVGlsZU93bmVyKTogTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMgfCBudWxsIHtcbiAgICBjb25zdCBwb3J0ID0gdGhpcy5wb3J0O1xuICAgIGlmICghcG9ydCkgcmV0dXJuIG51bGw7XG4gICAgdGhpcy50aWxlT3duZXIgPSBvd25lcjtcbiAgICBjb25zdCBzaW5rcyA9IHRoaXMuc2lua3M7XG4gICAgdGhpcy50aWxlTGF5ZXJzID8/PSBuZXcgTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMocG9ydCwge1xuICAgICAgbGF0ZXN0OiAoKSA9PiB0aGlzLmxhdGVzdCxcbiAgICAgIGNhbnZhc1NpemU6ICgpID0+IHRoaXMudGlsZU93bmVyPy5jYW52YXNTaXplKCkgPz8gWzAsIDBdLFxuICAgICAgY29udGludW91c0x1dDogKHZpZXcpID0+IHNpbmtzLmNvbnRpbnVvdXNMdXQodmlldyksXG4gICAgICBlc3RpbWF0ZUNoYW5nZWQ6IChlKSA9PiBzaW5rcy5lc3RpbWF0ZUNoYW5nZWQoZSksXG4gICAgICBnZW5lQ291bnRzQ2hhbmdlZDogKGMpID0+IHNpbmtzLmdlbmVDb3VudHNDaGFuZ2VkKGMpLFxuICAgICAgbG9hZGluZ0NoYW5nZWQ6IChsYXllcnMpID0+IHNpbmtzLmxvYWRpbmdDaGFuZ2VkKGxheWVycyksXG4gICAgICBkZW5zaXR5Q2hhbmdlZDogKGQpID0+IHNpbmtzLmRlbnNpdHlDaGFuZ2VkKGQpLFxuICAgICAgcG9seWdvbnNTaG93bkNoYW5nZWQ6ICgpID0+IHRoaXMudGlsZU93bmVyPy5wb2x5Z29uc1Nob3duQ2hhbmdlZCgpLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnRpbGVMYXllcnM7XG4gIH1cblxuICAvKiogYG93bmVyYCdzIHNjZW5lIGlzIGdvaW5nIGF3YXk6IHRha2UgdGhlIHRpbGUgbGF5ZXJzIG9mZiBpdHMgdmlld2VyLiAqL1xuICByZWxlYXNlVGlsZXMob3duZXI6IFNwYXRpYWxUaWxlT3duZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aWxlT3duZXIgIT09IG93bmVyKSByZXR1cm47XG4gICAgdGhpcy50aWxlT3duZXIgPSBudWxsO1xuICAgIHRoaXMudGlsZUxheWVycz8uZGV0YWNoKCk7XG4gIH1cblxuICAvKipcbiAgICogQSByZXZpc2lvbiBudW1iZXIgZm9yIGEgc2VsZWN0aW9uIG9iamVjdC5cbiAgICpcbiAgICogVGhlIHN0b3JlIGhhbmRzIG91dCBhIE5FVyBtYXNrIG9iamVjdCBwZXIgY2hhbmdlLCBzbyBvYmplY3QgaWRlbnRpdHkgaXMgdGhlXG4gICAqIGNoZWFwIGFuZCBleGFjdCB3YXkgdG8gdGVsbCB0d28gc2VsZWN0aW9ucyBhcGFydCDigJQgYSBmaW5nZXJwcmludCBvdmVyIDMuN01cbiAgICogbWFzayBieXRlcyB3b3VsZCBiZSBuZWl0aGVyLiBDb3VudGluZyByZXZpc2lvbnMga2VlcHMgdGhlIGNhY2hlIGtleSBhIHNob3J0XG4gICAqIHN0cmluZy5cbiAgICovXG4gIHNlbGVjdGlvblJldihzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrKTogbnVtYmVyIHtcbiAgICBpZiAoc2VsZWN0aW9uICE9PSB0aGlzLmxhc3RTZWxlY3Rpb25TZWVuKSB7XG4gICAgICB0aGlzLmxhc3RTZWxlY3Rpb25TZWVuID0gc2VsZWN0aW9uO1xuICAgICAgdGhpcy5zZWxlY3Rpb25SZXZpc2lvbisrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25SZXZpc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVyeXRoaW5nIGEgc3BhdGlhbCBzY2VuZSByZWRyYXdzIG9uOiB0aGUgZGF0YXNldCwgdGhlIHZpZXcgc3RhdGUsIHRoZSBzZWxlY3Rpb24g4oCUIGFuZCB0aGVcbiAgICogZGlzcGxheSBjb2xvcm1hcCBhbmQgcmV2ZXJzZSBmbGFnLCB3aGljaCBhcmUgaW5wdXRzIGhlcmUsIG5vdCBqdXN0IHNvbWV0aGluZyByZWFkIGF0IGJ1aWxkXG4gICAqIHRpbWU6IGBjb250aW51b3VzQ29sb3JtYXA6IG51bGxgIG1lYW5zIFwiZm9sbG93IHRoZSBpbWFnZSdzIGNvbG9ybWFwXCIsIGFuZCBhIHNldHRpbmcgdGhhdCBvbmx5XG4gICAqIHRha2VzIGVmZmVjdCBhdCB0aGUgbmV4dCB1bnJlbGF0ZWQgcmVidWlsZCBpcyBub3Qgb25lLiBOdWxsIHdpdGhvdXQgYSBzcGF0aWFsIHBvcnQuXG4gICAqL1xuICBjaGFuZ2VzJChcbiAgICBzdG9yZTogVmlzdWFsaXplclN0b3JlLFxuICApOiBPYnNlcnZhYmxlPFtTcGF0aWFsRGF0YXNldCB8IG51bGwsIFNwYXRpYWxWaWV3U3RhdGUsIFNwYXRpYWxTZWxlY3Rpb25NYXNrLCB1bmtub3duLCBib29sZWFuXT4gfCBudWxsIHtcbiAgICBjb25zdCBwb3J0ID0gdGhpcy5wb3J0O1xuICAgIGlmICghcG9ydCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc2VsZWN0aW9uJCA9IHRoaXMuc2VsZWN0aW9uPy5nZXRTZWxlY3Rpb24kKCkgPz8gb2YoZW1wdHlTZWxlY3Rpb24oKSk7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgcG9ydC5nZXREYXRhc2V0JCgpLFxuICAgICAgc3RvcmUuZ2V0U3BhdGlhbFZpZXckKCksXG4gICAgICBzZWxlY3Rpb24kLFxuICAgICAgc3RvcmUuZ2V0Q29sb3JtYXAoKSxcbiAgICAgIHN0b3JlLmdldFJldmVyc2VTY2FsZSgpLFxuICAgIF0pO1xuICB9XG59XG5cbi8qKlxuICogV2hhdCB0aGUgMkQgYW5kIDNEIHNwYXRpYWwgc2NlbmVzIHNoYXJlOiB0aGUgc3Vic2NyaXB0aW9uIHRoYXQgcmVkcmF3cyB0aGVtLCB0aGUgaG92ZXIgb3ZlclxuICogdGhlbSwgYW5kIHRoZSBsYXRlc3Qtd2lucyBzZXF1ZW5jaW5nIG9mIHRoZWlyIChhc3luYykgcmVidWlsZHMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTcGF0aWFsU2NlbmVCYXNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhvdmVyOiBTcGF0aWFsSG92ZXI7XG4gIC8qKiBMYXRlc3Qgd2lucyB3aXRoaW4gdGhlIHNjZW5lOiBhIGNvbG91ciBmZXRjaCBpcyBhIHJvdW5kLXRyaXAsIHNvIGEgZmFzdCBzZXF1ZW5jZSBvZlxuICAgKiAgY29sb3VyLWJ5IGNoYW5nZXMgY2FuIHJlc29sdmUgb3V0IG9mIG9yZGVyLCBhbmQgb25seSB0aGUgbmV3ZXN0IG1heSB0b3VjaCB0aGUgbGF5ZXJzLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVidWlsZHMgPSBuZXcgU3VwZXJzZWRlKCk7XG4gIHByaXZhdGUgc3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGN0eDogU2NlbmVDb250ZXh0LFxuICAgIHByb3RlY3RlZCByZWFkb25seSBzZXNzaW9uOiBTcGF0aWFsU2Vzc2lvbixcbiAgICBpczNkOiBib29sZWFuLFxuICApIHtcbiAgICB0aGlzLmhvdmVyID0gbmV3IFNwYXRpYWxIb3Zlcih7XG4gICAgICBpczNkLFxuICAgICAgdmlld2VyOiBjdHgudmlld2VyLFxuICAgICAgcG9ydDogc2Vzc2lvbi5wb3J0LFxuICAgICAgc2VsZWN0aW9uOiBzZXNzaW9uLnNlbGVjdGlvbixcbiAgICAgIGRhdGFzZXQ6ICgpID0+IHNlc3Npb24ubGF0ZXN0Py5bMF0gPz8gbnVsbCxcbiAgICAgIHBpY2s6IChjbGllbnRYLCBjbGllbnRZLCBzbGFja1B4KSA9PiB0aGlzLnBpY2tPYnNlcnZhdGlvbihjbGllbnRYLCBjbGllbnRZLCBzbGFja1B4KSxcbiAgICAgIHRpbGVzOiAoKSA9PiB0aGlzLmhvdmVyVGlsZXMoKSxcbiAgICAgIHRvb2xBY3RpdmU6ICgpID0+ICEhY3R4LnRvb2xzLnJlZ2lvbk92ZXJsYXk/LnRvb2xBY3RpdmUsXG4gICAgICBvdXRzaWRlWm9uZTogKGZuKSA9PiBjdHgub3V0c2lkZVpvbmUoZm4pLFxuICAgICAgaW5ab25lOiAoZm4pID0+IGN0eC5pblpvbmUoZm4pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJlYnVpbGQgb24gZXZlcnkgZGF0YXNldCwgdmlldywgc2VsZWN0aW9uIG9yIGNvbG9ybWFwIGNoYW5nZS4gKi9cbiAgcHJvdGVjdGVkIHN1YnNjcmliZVNwYXRpYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWIgPVxuICAgICAgdGhpcy5zZXNzaW9uLmNoYW5nZXMkKHRoaXMuY3R4LnN0b3JlKT8uc3Vic2NyaWJlKChbZGF0YXNldCwgdmlldywgc2VsZWN0aW9uLCBjb2xvcm1hcCwgcmV2ZXJzZV0pID0+IHtcbiAgICAgICAgdGhpcy5jdHguZGlzcGxheS5yZWNvcmQoKGNvbG9ybWFwIGFzIENvbG9ybWFwTm9kZSkgPz8gbnVsbCwgISFyZXZlcnNlKTtcbiAgICAgICAgLy8gS2VwdCBzbyBhIHNsaWNlIGNoYW5nZSBjYW4gcmVkcmF3IHRoZSBtYXJrZXJzIGZvciB0aGUgbmV3IHBsYW5lLCB3aGljaFxuICAgICAgICAvLyBhcnJpdmVzIHRocm91Z2ggc2V0WkluZGV4IHJhdGhlciB0aGFuIHRocm91Z2ggYW55IG9mIHRoZXNlIHN0cmVhbXMuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5sYXRlc3QgPSBbZGF0YXNldCwgdmlldywgc2VsZWN0aW9uXTtcbiAgICAgICAgLy8gV2hhdCB0aGUgbWFya2VycyBhcmUgbWF5IGhhdmUgY2hhbmdlZDsgd2hlcmUgdGhleSBhcmUgaXMgdGhlIGxheWVycycgb3duIHBpY2snc1xuICAgICAgICAvLyBidXNpbmVzcyAoaXQgZm9sbG93cyB0aGVpciBkYXRhIGFuZCB0aGUgY2FtZXJhKS5cbiAgICAgICAgdm9pZCB0aGlzLmhvdmVyLnJlc29sdmVTb3VyY2UoZGF0YXNldCwgdmlldyk7XG4gICAgICAgIHZvaWQgdGhpcy5yZWJ1aWxkKGRhdGFzZXQsIHZpZXcsIHNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuYWZ0ZXJDaGFuZ2UoKTtcbiAgICAgIH0pID8/IG51bGw7XG4gIH1cblxuICAvKiogKFJlKWJ1aWxkIHRoZSBzY2VuZSdzIGxheWVycyBmb3IgdGhlIGN1cnJlbnQgZGF0YXNldCArIHZpZXcgc3RhdGUuICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWJ1aWxkKFxuICAgIGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0IHwgbnVsbCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHNlbGVjdGlvbj86IFNwYXRpYWxTZWxlY3Rpb25NYXNrLFxuICApOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogUnVuIGFmdGVyIGVhY2ggcmVidWlsZCBpcyBzdGFydGVkICh0aGUgMkQgdGlsZSBsYXllcnMgcmVmcmVzaCBoZXJlKS4gKi9cbiAgcHJvdGVjdGVkIGFmdGVyQ2hhbmdlKCk6IHZvaWQge1xuICAgIC8qIG5vdGhpbmcgYnkgZGVmYXVsdCAqL1xuICB9XG4gIC8qKiBUaGUgb2JzZXJ2YXRpb24gZHJhd24gdW5kZXIgYSBjbGllbnQgcG9zaXRpb24sIG9yIC0xIChzZWUgYFNwYXRpYWxIb3Zlckhvc3QucGlja2ApLiAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcGlja09ic2VydmF0aW9uKGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyLCBzbGFja1B4OiBudW1iZXIpOiBudW1iZXI7XG4gIHByb3RlY3RlZCBob3ZlclRpbGVzKCk6IE5hcGFyaVNwYXRpYWxUaWxlTGF5ZXJzIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogU3RvcCBmb2xsb3dpbmcgdGhlIGRhdGEsIGRyb3AgdGhlIGhvdmVyLCBhbmQgbWFrZSBldmVyeSByZWJ1aWxkIGluIGZsaWdodCBzdGFsZS4gKi9cbiAgcHJvdGVjdGVkIGRpc3Bvc2VTcGF0aWFsKCk6IHZvaWQge1xuICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3ViID0gbnVsbDtcbiAgICB0aGlzLnJlYnVpbGRzLmNhbmNlbCgpO1xuICAgIHRoaXMuaG92ZXIuZGlzcG9zZSgpO1xuICB9XG59XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNwYXRpYWwtc2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLXNwYXRpYWwtc2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTW5FLE9BQU8sRUFBd0IsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHdkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFnQ3JGOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFpQnpCLFlBQ1csSUFBNEIsRUFDNUIsU0FBdUMsRUFDL0IsS0FBdUI7UUFGL0IsU0FBSSxHQUFKLElBQUksQ0FBd0I7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBOEI7UUFDL0IsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFuQjFDO29HQUM0RjtRQUM1RixXQUFNLEdBQXlCLElBQUksQ0FBQztRQUNwQyx5RkFBeUY7UUFDaEYsb0JBQWUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDckQsMEZBQTBGO1FBQ2pGLFlBQU8sR0FBZ0MsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzRSwrQkFBK0I7UUFDdEIsa0JBQWEsR0FBc0MsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvRSxzQkFBaUIsR0FBZ0MsSUFBSSxDQUFDO1FBQ3RELHNCQUFpQixH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Q0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdCwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU3BhdGlhbERhdGFQb3J0IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB7IFNwYXRpYWxEYXRhc2V0IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgeyBDb2xvcm1hcE5vZGUsIFNwYXRpYWxWaWV3U3RhdGUgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQgeyBFeHByZXNzaW9uRmllbGQsIEV4cHJlc3Npb25Wb2x1bWVGaWVsZCB9IGZyb20gJy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1leHByZXNzaW9uJztcbmltcG9ydCB7IFNwYXRpYWxTZWxlY3Rpb25NYXNrLCBlbXB0eVNlbGVjdGlvbiB9IGZyb20gJy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgU3BhdGlhbFNlbGVjdGlvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvc3BhdGlhbC1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBWaXN1YWxpemVyU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS92aXN1YWxpemVyLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3VwZXJzZWRlIH0gZnJvbSAnLi4vLi4vdXRpbC9zdXBlcnNlZGUnO1xuaW1wb3J0IHsgQ29udHJhc3RXaW5kb3dDYWNoZSB9IGZyb20gJy4vbmFwYXJpLXNwYXRpYWwtZW5jb2RpbmcnO1xuaW1wb3J0IHsgU3BhdGlhbEhvdmVyIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC1ob3Zlcic7XG5pbXBvcnQgeyBOYXBhcmlTcGF0aWFsVGlsZUxheWVycywgVHJhbnNjcmlwdEVzdGltYXRlIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC10aWxlcyc7XG5pbXBvcnQgeyBSZ2IgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvY29sb3JtYXAtbHV0JztcbmltcG9ydCB0eXBlIHsgU2NlbmVDb250ZXh0IH0gZnJvbSAnLi9uYXBhcmktc2NlbmUnO1xuXG4vKiogV2hhdCB0aGUgc3BhdGlhbCBzdWJzY3JpcHRpb24gbGFzdCBzYXc6IHRoZSBkYXRhc2V0LCB0aGUgdmlldyBzdGF0ZSBhbmQgdGhlIHNlbGVjdGlvbi4gKi9cbmV4cG9ydCB0eXBlIFNwYXRpYWxMYXRlc3QgPSBbU3BhdGlhbERhdGFzZXQgfCBudWxsLCBTcGF0aWFsVmlld1N0YXRlLCBTcGF0aWFsU2VsZWN0aW9uTWFza107XG5cbi8qKiBXaGVyZSB0aGUgc3BhdGlhbCB0aWxlIGxheWVycycgcGFuZWwgb3V0cHV0cyBnbyAodGhlIHNlcnZpY2UncyBzdWJqZWN0cyBhbmQgYmFkZ2UpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsVGlsZVNpbmtzIHtcbiAgLyoqIFRoZSBjb250aW51b3VzIExVVCB0aGUgdmlldyBpcyB1c2luZyAoc28gY2VsbHMgY29sb3VyZWQgYnkgYSBnZW5lIG1hdGNoIHRoZSBtYXJrZXJzKS4gKi9cbiAgY29udGludW91c0x1dCh2aWV3OiBTcGF0aWFsVmlld1N0YXRlKTogUmdiW107XG4gIGVzdGltYXRlQ2hhbmdlZChlc3RpbWF0ZTogVHJhbnNjcmlwdEVzdGltYXRlIHwgbnVsbCk6IHZvaWQ7XG4gIGdlbmVDb3VudHNDaGFuZ2VkKGNvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB8IG51bGwpOiB2b2lkO1xuICBkZW5zaXR5Q2hhbmdlZChzdGF0czogeyBsbzogbnVtYmVyOyBoaTogbnVtYmVyOyBtYXg6IG51bWJlciB9KTogdm9pZDtcbiAgbG9hZGluZ0NoYW5nZWQobGF5ZXJzOiBzdHJpbmdbXSk6IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHRoZSBvYnNlcnZhdGlvbiBnZW5lIGZpbHRlciBjb3VsZCBiZSBhcHBsaWVkOyBzZWUge0BsaW5rIFNwYXRpYWxTZXNzaW9uLnJlcG9ydEdlbmVGaWx0ZXJ9LiAqL1xuICBnZW5lRmlsdGVyRmFpbGVkPyhmYWlsZWQ6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKiogVGhlIDJEIHNjZW5lIHRoZSB0aWxlIGxheWVycyBjdXJyZW50bHkgZHJhdyBpbnRvLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsVGlsZU93bmVyIHtcbiAgY2FudmFzU2l6ZSgpOiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKiogT3V0bGluZXMgYXBwZWFyZWQgb3IgZGlzYXBwZWFyZWQ6IHRoZSBtYXJrZXJzJyB2aXNpYmlsaXR5IGZvbGxvd3MuICovXG4gIHBvbHlnb25zU2hvd25DaGFuZ2VkKCk6IHZvaWQ7XG59XG5cbi8qKiBBbiBlc3RpbWF0ZWQgZmllbGQgYW5kIHRoZSBpbnB1dHMgaXQgd2FzIGVzdGltYXRlZCBmb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkQ2FjaGU8VD4ge1xuICBrZXk6IHN0cmluZyB8IG51bGw7XG4gIGZpZWxkOiBUIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBUaGUgc3BhdGlhbCBzdGF0ZSB0aGF0IG91dGxpdmVzIGEgc2NlbmUgKHJldmlldyBBcHBlbmRpeCBCKTogd2hhdCB0aGUgc3Vic2NyaXB0aW9uIGxhc3Qgc2F3LCB0aGVcbiAqIG1lbW9pc2VkIHBlcmNlbnRpbGUgd2luZG93cywgdGhlIHNlbGVjdGlvbiByZXZpc2lvbiBjb3VudGVyIGFuZCB0aGUgZXN0aW1hdGVkIGdlbmUtbWFwIEZJRUxEUyDigJRcbiAqIHZpZXdlci1pbmRlcGVuZGVudCBhbmQgZXhwZW5zaXZlLCBzbyBhIHJlLXBsb3QgcmVjb2xvdXJzIHRoZSBjYWNoZWQgZmllbGQgaW5zdGVhZCBvZiBlc3RpbWF0aW5nXG4gKiBpdCBhZ2Fpbi4gRXZlcnl0aGluZyB0aGF0IG5hbWVzIGEgbGF5ZXIgb2YgYSB2aWV3ZXIgYmVsb25ncyB0byB0aGUgc2NlbmUgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNwYXRpYWxTZXNzaW9uIHtcbiAgLyoqIExhdGVzdCAoZGF0YXNldCwgdmlldywgc2VsZWN0aW9uKSB0aGUgc3BhdGlhbCBzdWJzY3JpcHRpb24gc2F3IOKAlCBzbyBhIHNsaWNlIGNoYW5nZSBjYW5cbiAgICogIHJlYnVpbGQgdGhlIG1hcmtlcnMgZm9yIHRoZSBuZXcgcGxhbmUsIGFuZCB0aGUgdGlsZSBsYXllcnMgYW5kIHRoZSBob3ZlciBjYW4gcmVhZCBpdC4gKi9cbiAgbGF0ZXN0OiBTcGF0aWFsTGF0ZXN0IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBTcGF0aWFsIGNvbG91cmluZydzIHBlcmNlbnRpbGUgd2luZG93cywgbWVtb2lzZWQgcGVyIGNvbG91cmVkIHZlY3RvciAoU1BBVElBTC0xMikuICovXG4gIHJlYWRvbmx5IGNvbnRyYXN0V2luZG93cyA9IG5ldyBDb250cmFzdFdpbmRvd0NhY2hlKCk7XG4gIC8qKiBUaGUgMkQgZ2VuZSBtYXAncyBmaWVsZCAodGhlIGV4cGVuc2l2ZSBoYWxmOiBpdCBzdXJ2aXZlcyBhIHJlY29sb3VyIGFuZCBhIHJlLXBsb3QpLiAqL1xuICByZWFkb25seSBnZW5lTWFwOiBGaWVsZENhY2hlPEV4cHJlc3Npb25GaWVsZD4gPSB7IGtleTogbnVsbCwgZmllbGQ6IG51bGwgfTtcbiAgLyoqIFRoZSAzRCBnZW5lIG1hcCdzIGZpZWxkLiAqL1xuICByZWFkb25seSBnZW5lTWFwVm9sdW1lOiBGaWVsZENhY2hlPEV4cHJlc3Npb25Wb2x1bWVGaWVsZD4gPSB7IGtleTogbnVsbCwgZmllbGQ6IG51bGwgfTtcbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uU2VlbjogU3BhdGlhbFNlbGVjdGlvbk1hc2sgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25SZXZpc2lvbiA9IDA7XG4gIC8qKiBMZXZlbC1vZi1kZXRhaWwgY2VsbCBvdXRsaW5lcywgdHJhbnNjcmlwdHMgYW5kIGRlbnNpdHkgb3ZlciB0aGUgMkQgdmlldyDigJQgY3JlYXRlZCBvbiBmaXJzdFxuICAgKiAgdXNlLCBvbmx5IHdoZW4gYSBzcGF0aWFsIHBvcnQgaXMgYm91bmQsIGFuZCBrZXB0IGFjcm9zcyBzY2VuZXMgKGl0cyB0aWxlIGNhY2hlcyB3aXRoIGl0KS4gKi9cbiAgcHJpdmF0ZSB0aWxlTGF5ZXJzOiBOYXBhcmlTcGF0aWFsVGlsZUxheWVycyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRpbGVPd25lcjogU3BhdGlhbFRpbGVPd25lciB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCB8IG51bGwsXG4gICAgcmVhZG9ubHkgc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uU3RvcmUgfCBudWxsLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2lua3M6IFNwYXRpYWxUaWxlU2lua3MsXG4gICkge31cblxuICAvKiogVGVsbCB0aGUgcGFuZWwgd2hldGhlciB0aGUgb2JzZXJ2YXRpb24gZ2VuZSBmaWx0ZXIgY291bGQgYmUgYXBwbGllZCB0aGlzIHJlYnVpbGQuICovXG4gIHJlcG9ydEdlbmVGaWx0ZXIoZmFpbGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaW5rcy5nZW5lRmlsdGVyRmFpbGVkPy4oZmFpbGVkKTtcbiAgfVxuXG4gIC8qKiBUaGUgdGlsZSBsYXllcnMsIGlmIHRoZXkgd2VyZSBldmVyIGJ1aWx0LiAqL1xuICBnZXQgdGlsZXMoKTogTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50aWxlTGF5ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aWxlIGxheWVycywgYnVpbHQgb24gZmlyc3QgdXNlIChudWxsIHdpdGhvdXQgYSBzcGF0aWFsIHBvcnQpLCBub3cgZHJhd2luZyBmb3IgYG93bmVyYC5cbiAgICogVGhlaXIgaG9zdCBjYWxsYmFja3MgcmVhZCB0aGUgc2Vzc2lvbidzIGxpdmUgc3RhdGUgYW5kIHRoZSBvd25lcidzIGNhbnZhcywgc28gdGhleSBuZXZlciBob2xkXG4gICAqIGEgc3RhbGUgZGF0YXNldCBvciBjb2xvcm1hcC5cbiAgICovXG4gIGNsYWltVGlsZXMob3duZXI6IFNwYXRpYWxUaWxlT3duZXIpOiBOYXBhcmlTcGF0aWFsVGlsZUxheWVycyB8IG51bGwge1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgaWYgKCFwb3J0KSByZXR1cm4gbnVsbDtcbiAgICB0aGlzLnRpbGVPd25lciA9IG93bmVyO1xuICAgIGNvbnN0IHNpbmtzID0gdGhpcy5zaW5rcztcbiAgICB0aGlzLnRpbGVMYXllcnMgPz89IG5ldyBOYXBhcmlTcGF0aWFsVGlsZUxheWVycyhwb3J0LCB7XG4gICAgICBsYXRlc3Q6ICgpID0+IHRoaXMubGF0ZXN0LFxuICAgICAgY2FudmFzU2l6ZTogKCkgPT4gdGhpcy50aWxlT3duZXI/LmNhbnZhc1NpemUoKSA/PyBbMCwgMF0sXG4gICAgICBjb250aW51b3VzTHV0OiAodmlldykgPT4gc2lua3MuY29udGludW91c0x1dCh2aWV3KSxcbiAgICAgIGVzdGltYXRlQ2hhbmdlZDogKGUpID0+IHNpbmtzLmVzdGltYXRlQ2hhbmdlZChlKSxcbiAgICAgIGdlbmVDb3VudHNDaGFuZ2VkOiAoYykgPT4gc2lua3MuZ2VuZUNvdW50c0NoYW5nZWQoYyksXG4gICAgICBsb2FkaW5nQ2hhbmdlZDogKGxheWVycykgPT4gc2lua3MubG9hZGluZ0NoYW5nZWQobGF5ZXJzKSxcbiAgICAgIGRlbnNpdHlDaGFuZ2VkOiAoZCkgPT4gc2lua3MuZGVuc2l0eUNoYW5nZWQoZCksXG4gICAgICBwb2x5Z29uc1Nob3duQ2hhbmdlZDogKCkgPT4gdGhpcy50aWxlT3duZXI/LnBvbHlnb25zU2hvd25DaGFuZ2VkKCksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMudGlsZUxheWVycztcbiAgfVxuXG4gIC8qKiBgb3duZXJgJ3Mgc2NlbmUgaXMgZ29pbmcgYXdheTogdGFrZSB0aGUgdGlsZSBsYXllcnMgb2ZmIGl0cyB2aWV3ZXIuICovXG4gIHJlbGVhc2VUaWxlcyhvd25lcjogU3BhdGlhbFRpbGVPd25lcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbGVPd25lciAhPT0gb3duZXIpIHJldHVybjtcbiAgICB0aGlzLnRpbGVPd25lciA9IG51bGw7XG4gICAgdGhpcy50aWxlTGF5ZXJzPy5kZXRhY2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHJldmlzaW9uIG51bWJlciBmb3IgYSBzZWxlY3Rpb24gb2JqZWN0LlxuICAgKlxuICAgKiBUaGUgc3RvcmUgaGFuZHMgb3V0IGEgTkVXIG1hc2sgb2JqZWN0IHBlciBjaGFuZ2UsIHNvIG9iamVjdCBpZGVudGl0eSBpcyB0aGVcbiAgICogY2hlYXAgYW5kIGV4YWN0IHdheSB0byB0ZWxsIHR3byBzZWxlY3Rpb25zIGFwYXJ0IOKAlCBhIGZpbmdlcnByaW50IG92ZXIgMy43TVxuICAgKiBtYXNrIGJ5dGVzIHdvdWxkIGJlIG5laXRoZXIuIENvdW50aW5nIHJldmlzaW9ucyBrZWVwcyB0aGUgY2FjaGUga2V5IGEgc2hvcnRcbiAgICogc3RyaW5nLlxuICAgKi9cbiAgc2VsZWN0aW9uUmV2KHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvbk1hc2spOiBudW1iZXIge1xuICAgIGlmIChzZWxlY3Rpb24gIT09IHRoaXMubGFzdFNlbGVjdGlvblNlZW4pIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGlvblNlZW4gPSBzZWxlY3Rpb247XG4gICAgICB0aGlzLnNlbGVjdGlvblJldmlzaW9uKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJldmlzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZXJ5dGhpbmcgYSBzcGF0aWFsIHNjZW5lIHJlZHJhd3Mgb246IHRoZSBkYXRhc2V0LCB0aGUgdmlldyBzdGF0ZSwgdGhlIHNlbGVjdGlvbiDigJQgYW5kIHRoZVxuICAgKiBkaXNwbGF5IGNvbG9ybWFwIGFuZCByZXZlcnNlIGZsYWcsIHdoaWNoIGFyZSBpbnB1dHMgaGVyZSwgbm90IGp1c3Qgc29tZXRoaW5nIHJlYWQgYXQgYnVpbGRcbiAgICogdGltZTogYGNvbnRpbnVvdXNDb2xvcm1hcDogbnVsbGAgbWVhbnMgXCJmb2xsb3cgdGhlIGltYWdlJ3MgY29sb3JtYXBcIiwgYW5kIGEgc2V0dGluZyB0aGF0IG9ubHlcbiAgICogdGFrZXMgZWZmZWN0IGF0IHRoZSBuZXh0IHVucmVsYXRlZCByZWJ1aWxkIGlzIG5vdCBvbmUuIE51bGwgd2l0aG91dCBhIHNwYXRpYWwgcG9ydC5cbiAgICovXG4gIGNoYW5nZXMkKFxuICAgIHN0b3JlOiBWaXN1YWxpemVyU3RvcmUsXG4gICk6IE9ic2VydmFibGU8W1NwYXRpYWxEYXRhc2V0IHwgbnVsbCwgU3BhdGlhbFZpZXdTdGF0ZSwgU3BhdGlhbFNlbGVjdGlvbk1hc2ssIHVua25vd24sIGJvb2xlYW5dPiB8IG51bGwge1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgaWYgKCFwb3J0KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzZWxlY3Rpb24kID0gdGhpcy5zZWxlY3Rpb24/LmdldFNlbGVjdGlvbiQoKSA/PyBvZihlbXB0eVNlbGVjdGlvbigpKTtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICBwb3J0LmdldERhdGFzZXQkKCksXG4gICAgICBzdG9yZS5nZXRTcGF0aWFsVmlldyQoKSxcbiAgICAgIHNlbGVjdGlvbiQsXG4gICAgICBzdG9yZS5nZXRDb2xvcm1hcCgpLFxuICAgICAgc3RvcmUuZ2V0UmV2ZXJzZVNjYWxlKCksXG4gICAgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGF0IHRoZSAyRCBhbmQgM0Qgc3BhdGlhbCBzY2VuZXMgc2hhcmU6IHRoZSBzdWJzY3JpcHRpb24gdGhhdCByZWRyYXdzIHRoZW0sIHRoZSBob3ZlciBvdmVyXG4gKiB0aGVtLCBhbmQgdGhlIGxhdGVzdC13aW5zIHNlcXVlbmNpbmcgb2YgdGhlaXIgKGFzeW5jKSByZWJ1aWxkcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNwYXRpYWxTY2VuZUJhc2Uge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaG92ZXI6IFNwYXRpYWxIb3ZlcjtcbiAgLyoqIExhdGVzdCB3aW5zIHdpdGhpbiB0aGUgc2NlbmU6IGEgY29sb3VyIGZldGNoIGlzIGEgcm91bmQtdHJpcCwgc28gYSBmYXN0IHNlcXVlbmNlIG9mXG4gICAqICBjb2xvdXItYnkgY2hhbmdlcyBjYW4gcmVzb2x2ZSBvdXQgb2Ygb3JkZXIsIGFuZCBvbmx5IHRoZSBuZXdlc3QgbWF5IHRvdWNoIHRoZSBsYXllcnMuICovXG4gIHByb3RlY3RlZCByZWFkb25seSByZWJ1aWxkcyA9IG5ldyBTdXBlcnNlZGUoKTtcbiAgcHJpdmF0ZSBzdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3R4OiBTY2VuZUNvbnRleHQsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlc3Npb246IFNwYXRpYWxTZXNzaW9uLFxuICAgIGlzM2Q6IGJvb2xlYW4sXG4gICkge1xuICAgIHRoaXMuaG92ZXIgPSBuZXcgU3BhdGlhbEhvdmVyKHtcbiAgICAgIGlzM2QsXG4gICAgICB2aWV3ZXI6IGN0eC52aWV3ZXIsXG4gICAgICBwb3J0OiBzZXNzaW9uLnBvcnQsXG4gICAgICBzZWxlY3Rpb246IHNlc3Npb24uc2VsZWN0aW9uLFxuICAgICAgZGF0YXNldDogKCkgPT4gc2Vzc2lvbi5sYXRlc3Q/LlswXSA/PyBudWxsLFxuICAgICAgcGljazogKGNsaWVudFgsIGNsaWVudFksIHNsYWNrUHgpID0+IHRoaXMucGlja09ic2VydmF0aW9uKGNsaWVudFgsIGNsaWVudFksIHNsYWNrUHgpLFxuICAgICAgdGlsZXM6ICgpID0+IHRoaXMuaG92ZXJUaWxlcygpLFxuICAgICAgdG9vbEFjdGl2ZTogKCkgPT4gISFjdHgudG9vbHMucmVnaW9uT3ZlcmxheT8udG9vbEFjdGl2ZSxcbiAgICAgIG91dHNpZGVab25lOiAoZm4pID0+IGN0eC5vdXRzaWRlWm9uZShmbiksXG4gICAgICBpblpvbmU6IChmbikgPT4gY3R4LmluWm9uZShmbiksXG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVidWlsZCBvbiBldmVyeSBkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb24gb3IgY29sb3JtYXAgY2hhbmdlLiAqL1xuICBwcm90ZWN0ZWQgc3Vic2NyaWJlU3BhdGlhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YiA9XG4gICAgICB0aGlzLnNlc3Npb24uY2hhbmdlcyQodGhpcy5jdHguc3RvcmUpPy5zdWJzY3JpYmUoKFtkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb24sIGNvbG9ybWFwLCByZXZlcnNlXSkgPT4ge1xuICAgICAgICB0aGlzLmN0eC5kaXNwbGF5LnJlY29yZCgoY29sb3JtYXAgYXMgQ29sb3JtYXBOb2RlKSA/PyBudWxsLCAhIXJldmVyc2UpO1xuICAgICAgICAvLyBLZXB0IHNvIGEgc2xpY2UgY2hhbmdlIGNhbiByZWRyYXcgdGhlIG1hcmtlcnMgZm9yIHRoZSBuZXcgcGxhbmUsIHdoaWNoXG4gICAgICAgIC8vIGFycml2ZXMgdGhyb3VnaCBzZXRaSW5kZXggcmF0aGVyIHRoYW4gdGhyb3VnaCBhbnkgb2YgdGhlc2Ugc3RyZWFtcy5cbiAgICAgICAgdGhpcy5zZXNzaW9uLmxhdGVzdCA9IFtkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb25dO1xuICAgICAgICAvLyBXaGF0IHRoZSBtYXJrZXJzIGFyZSBtYXkgaGF2ZSBjaGFuZ2VkOyB3aGVyZSB0aGV5IGFyZSBpcyB0aGUgbGF5ZXJzJyBvd24gcGljaydzXG4gICAgICAgIC8vIGJ1c2luZXNzIChpdCBmb2xsb3dzIHRoZWlyIGRhdGEgYW5kIHRoZSBjYW1lcmEpLlxuICAgICAgICB2b2lkIHRoaXMuaG92ZXIucmVzb2x2ZVNvdXJjZShkYXRhc2V0LCB2aWV3KTtcbiAgICAgICAgdm9pZCB0aGlzLnJlYnVpbGQoZGF0YXNldCwgdmlldywgc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5hZnRlckNoYW5nZSgpO1xuICAgICAgfSkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKiAoUmUpYnVpbGQgdGhlIHNjZW5lJ3MgbGF5ZXJzIGZvciB0aGUgY3VycmVudCBkYXRhc2V0ICsgdmlldyBzdGF0ZS4gKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYnVpbGQoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQgfCBudWxsLFxuICAgIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsXG4gICAgc2VsZWN0aW9uPzogU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gICk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBSdW4gYWZ0ZXIgZWFjaCByZWJ1aWxkIGlzIHN0YXJ0ZWQgKHRoZSAyRCB0aWxlIGxheWVycyByZWZyZXNoIGhlcmUpLiAqL1xuICBwcm90ZWN0ZWQgYWZ0ZXJDaGFuZ2UoKTogdm9pZCB7XG4gICAgLyogbm90aGluZyBieSBkZWZhdWx0ICovXG4gIH1cbiAgLyoqIFRoZSBvYnNlcnZhdGlvbiBkcmF3biB1bmRlciBhIGNsaWVudCBwb3NpdGlvbiwgb3IgLTEgKHNlZSBgU3BhdGlhbEhvdmVySG9zdC5waWNrYCkuICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwaWNrT2JzZXJ2YXRpb24oY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIsIHNsYWNrUHg6IG51bWJlcik6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGhvdmVyVGlsZXMoKTogTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBTdG9wIGZvbGxvd2luZyB0aGUgZGF0YSwgZHJvcCB0aGUgaG92ZXIsIGFuZCBtYWtlIGV2ZXJ5IHJlYnVpbGQgaW4gZmxpZ2h0IHN0YWxlLiAqL1xuICBwcm90ZWN0ZWQgZGlzcG9zZVNwYXRpYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWIgPSBudWxsO1xuICAgIHRoaXMucmVidWlsZHMuY2FuY2VsKCk7XG4gICAgdGhpcy5ob3Zlci5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==