@jax-data-science/sci-image-visualizer 0.5.0 → 0.7.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 (42) hide show
  1. package/README.md +49 -0
  2. package/esm2022/lib/contracts/display-types.mjs +28 -1
  3. package/esm2022/lib/contracts/plot-type-contribution.contract.mjs +1 -1
  4. package/esm2022/lib/contracts/ports/spatial-data.port.mjs +3 -1
  5. package/esm2022/lib/contracts/spatial-dataset.contract.mjs +3 -1
  6. package/esm2022/lib/contracts/toolbar-tool.contract.mjs +46 -4
  7. package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
  8. package/esm2022/lib/implementations/napari-js/napari-navigator.mjs +195 -0
  9. package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +10 -2
  10. package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +1098 -0
  11. package/esm2022/lib/implementations/napari-js/napari-spatial-tooltip.mjs +6 -3
  12. package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +186 -10
  13. package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +2 -2
  14. package/esm2022/lib/implementations/plotly/plotly.service.mjs +2 -3
  15. package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +120 -2
  16. package/esm2022/lib/implementations/spatial-data-http/spatial-wire.mjs +76 -1
  17. package/esm2022/lib/routing-visualizer.service.mjs +10 -1
  18. package/esm2022/lib/spatial/spatial-tiles.mjs +506 -0
  19. package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +659 -19
  20. package/esm2022/lib/toolbar/brush/brush-tool.service.mjs +44 -3
  21. package/esm2022/lib/toolbar/toolbar.component.mjs +15 -3
  22. package/esm2022/lib/visualizer.component.mjs +221 -7
  23. package/fesm2022/jax-data-science-sci-image-visualizer.mjs +3238 -84
  24. package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
  25. package/lib/contracts/display-types.d.ts +104 -1
  26. package/lib/contracts/plot-type-contribution.contract.d.ts +27 -0
  27. package/lib/contracts/ports/spatial-data.port.d.ts +59 -1
  28. package/lib/contracts/spatial-dataset.contract.d.ts +167 -0
  29. package/lib/contracts/toolbar-tool.contract.d.ts +84 -5
  30. package/lib/contracts/visualizer.contract.d.ts +22 -1
  31. package/lib/implementations/napari-js/napari-navigator.d.ts +72 -0
  32. package/lib/implementations/napari-js/napari-region-overlay.d.ts +3 -0
  33. package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +240 -0
  34. package/lib/implementations/napari-js/napari-visualizer.service.d.ts +42 -2
  35. package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +26 -2
  36. package/lib/implementations/spatial-data-http/spatial-wire.d.ts +34 -1
  37. package/lib/spatial/spatial-tiles.d.ts +222 -0
  38. package/lib/spatial-controls/spatial-controls.component.d.ts +234 -3
  39. package/lib/toolbar/brush/brush-tool.service.d.ts +21 -0
  40. package/lib/toolbar/toolbar.component.d.ts +11 -3
  41. package/lib/visualizer.component.d.ts +54 -2
  42. package/package.json +1 -1
package/README.md CHANGED
@@ -607,6 +607,8 @@ const myMode: PlotTypeContribution = {
607
607
  // ctx.visualizer — the public IVisualizer (regions, region overlay, undo…)
608
608
  // ctx.viewport — overlay container, dataToClient / clientToData, frame$ / settled$
609
609
  // ctx.imageInfo$ — the current image
610
+ // ctx.tools — arm the toolbar brush for a class (0.6.0+):
611
+ // ctx.tools?.armBrush({ label: 'tumour', color: '#1E88E5' })
610
612
  const sub = ctx.viewport.frame$.subscribe((visible) => redraw(visible));
611
613
  return { deactivate: () => sub.unsubscribe() };
612
614
  },
@@ -640,6 +642,53 @@ built-ins. The full contract
640
642
  and its guarantees are documented in
641
643
  [`plot-type-contribution.contract.ts`](./src/lib/contracts/plot-type-contribution.contract.ts).
642
644
 
645
+ ## Contributed dialog tools
646
+
647
+ An interactive tool that is not "set parameters, run once" can be a **dialog
648
+ tool** (0.6.0+). It is provided on `TOOLBAR_TOOLS`, like the run tools, with
649
+ `kind: 'dialog'`:
650
+
651
+ - **Button:** it sits with the host's own projected buttons at the start of the
652
+ toolbar, and shows in the Image view only.
653
+ - **Dialog:** clicking the button opens a floating, non-modal dialog and starts
654
+ a session. The tool fills the dialog body with plain DOM.
655
+ - **Context:** the same one a plot mode gets (the public visualizer, the Image
656
+ view's viewport, the current image), with `ctx.tools` always present.
657
+
658
+ ```ts
659
+ import { TOOLBAR_TOOLS, ToolbarDialogToolContribution } from '@jax-data-science/sci-image-visualizer';
660
+
661
+ const myTool: ToolbarDialogToolContribution = {
662
+ kind: 'dialog',
663
+ id: 'my-tool',
664
+ label: 'My tool',
665
+ icon: { pi: 'pi-pencil' },
666
+ tooltip: 'Open my tool',
667
+ dialog: { title: 'My tool', width: '22rem' },
668
+ activate(ctx) {
669
+ const sub = ctx.viewport.frame$.subscribe((visible) => redraw(visible));
670
+ return { deactivate: () => sub.unsubscribe() };
671
+ },
672
+ // After activate(), once the dialog has rendered: `host` is in the document here,
673
+ // so the body can measure itself.
674
+ mount(host, ctx, session) {
675
+ host.textContent = 'Hello';
676
+ return () => { host.textContent = ''; }; // teardown, before deactivate()
677
+ },
678
+ };
679
+
680
+ providers: [{ provide: TOOLBAR_TOOLS, useValue: myTool, multi: true }]
681
+ ```
682
+
683
+ **Lifecycle:**
684
+ - Clicking the button again, or closing the dialog, tears the body down and then
685
+ calls `session.deactivate()`, exactly once.
686
+ - Re-rendering the Image view (another image or slice) ends the session. The
687
+ dialog stays open, and a fresh session starts on the new view.
688
+ - Leaving the Image view closes the dialog.
689
+ - A failed start closes the dialog with a warning. As with plot modes, nothing
690
+ the tool throws or rejects escapes.
691
+
643
692
  ## Development
644
693
 
645
694
  ```bash
@@ -22,5 +22,32 @@ export const DEFAULT_SPATIAL_VIEW = {
22
22
  geneMapVolume: false,
23
23
  geneMapSmoothing: 1,
24
24
  geneMapOpacity: 0.85,
25
+ showCells: null,
26
+ cellSet: null,
27
+ cellDraw: 'fill',
28
+ cellOpacity: 0.55,
29
+ cellTypeColumn: null,
30
+ transcriptGenes: [],
31
+ transcriptHiddenGenes: [],
32
+ transcriptGeneColors: {},
33
+ transcriptGeneGroups: [],
34
+ transcriptAllGenes: false,
35
+ transcriptBudget: 100_000,
36
+ transcriptMode: 'off',
37
+ transcriptColorBy: 'cellType',
38
+ transcriptGlyphs: {},
39
+ transcriptScale: 1,
40
+ transcriptOpacity: 0.9,
41
+ transcriptQuality: 'high',
42
+ densityOpacity: 0.8,
43
+ densityBin: 10,
44
+ densityRange: null,
45
+ densityColormap: null,
46
+ cellColorMode: 'group',
47
+ cellColorGene: null,
48
+ cellSingleColor: '#4fc3f7',
49
+ hiddenGroups: [],
50
+ showImage: true,
51
+ showAnnotations: true,
25
52
  };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RzL2Rpc3BsYXktdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUEyS0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQXFCO0lBQ3BELE9BQU8sRUFBRSxJQUFJO0lBQ2IsVUFBVSxFQUFFLENBQUM7SUFDYixPQUFPLEVBQUUsQ0FBQztJQUNWLFFBQVEsRUFBRSxLQUFLO0lBQ2YsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUM1QixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLGFBQWEsRUFBRSxHQUFHO0lBQ2xCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLGdCQUFnQixFQUFFLENBQUM7SUFDbkIsT0FBTyxFQUFFLEtBQUs7SUFDZCxjQUFjLEVBQUUsSUFBSTtJQUNwQixhQUFhLEVBQUUsS0FBSztJQUNwQixnQkFBZ0IsRUFBRSxDQUFDO0lBQ25CLGNBQWMsRUFBRSxJQUFJO0NBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1YmxpY2F0aW9uLWNyaXRpY2FsIHR5cGVzIHRoYXQgd2VyZSBgYW55YCBvbiB0aGUgcHVibGljIGNvbnRyYWN0c1xuICogKHJlZmFjdG9yaW5nIHBsYW4sIFN0ZXAgNikuIERlbGliZXJhdGVseSBwZXJtaXNzaXZlIOKAlCBldmVyeSBmaWVsZCBvcHRpb25hbCDigJRcbiAqIHNvIGV4aXN0aW5nIGhvc3RzICh3aGljaCBwYXNzIFByaW1lTkcgYFRyZWVOb2RlYHMgYW5kIHBsYWluIG9wdGlvbiBvYmplY3RzKVxuICoga2VlcCBjb21waWxpbmcgdW5jaGFuZ2VkIHdoaWxlIGNvbnN1bWVycyBmaW5hbGx5IGdldCBuYW1lZCBzaGFwZXMuXG4gKi9cblxuLyoqIEEgY29sb3JtYXAgdmFsdWUgYXMgUGxvdGx5IHVuZGVyc3RhbmRzIGl0OiBhIGJ1aWx0LWluIHNjYWxlIG5hbWUgKGUuZy5cbiAqICAnVmlyaWRpcycpIG9yIGFuIGlubGluZSBhcnJheSBvZiBgW3N0b3AsIGNvbG9yXWAgcGFpcnMuICovXG5leHBvcnQgdHlwZSBDb2xvcm1hcFZhbHVlID0gc3RyaW5nIHwgQXJyYXk8W251bWJlciwgc3RyaW5nXT47XG5cbi8qKiBPbmUgbm9kZSBvZiB0aGUgY29sb3JtYXAgc2VsZWN0b3IgdHJlZSAoc3RydWN0dXJhbGx5IGNvbXBhdGlibGUgd2l0aCB0aGVcbiAqICBQcmltZU5HIGBUcmVlTm9kZWBzIHRoZSBob3N0IHBhc3Nlcyk6IGdyb3VwIG5vZGVzIGNhcnJ5IGBjaGlsZHJlbmAsIGxlYWZcbiAqICBub2RlcyBjYXJyeSB0aGUgc2NhbGUgaW4gYGRhdGEudmFsdWVgICgrIGEgcHJldmlldyBpbWFnZSBpbiBgZGF0YS5zcmNgKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JtYXBOb2RlIHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGRhdGE/OiB7IHZhbHVlPzogQ29sb3JtYXBWYWx1ZTsgc3JjPzogc3RyaW5nIH07XG4gIGNoaWxkcmVuPzogQ29sb3JtYXBOb2RlW107XG59XG5cbi8qKiBNYWdpYy13YW5kIHBpeGVsLWNvbXBhcmlzb24gc3BhY2UuICovXG5leHBvcnQgdHlwZSBXYW5kVHlwZSA9ICdHUkFZJyB8ICdSR0InIHwgJ0xBQl9ESVNUQU5DRSc7XG5cbi8qKiBPcHRpb25zIGZvciB0aGUgbWFnaWMtd2FuZCB0b29sIChRdVBhdGgtc3R5bGUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJV2FuZE9wdGlvbnMge1xuICB0eXBlPzogV2FuZFR5cGU7XG4gIC8qKiBHYXVzc2lhbiBzaWdtYSBhcHBsaWVkIHRvIHRoZSBwYXRjaCBiZWZvcmUgdGhyZXNob2xkaW5nLiAqL1xuICBzaWdtYT86IG51bWJlcjtcbiAgLyoqIEhpZ2hlciA9IHN0cmljdGVyIChzbWFsbGVyIHNlbGVjdGlvbikgZm9yIEdSQVkvUkdCOyBoaWdoZXIgPSBsb29zZXIgZm9yXG4gICAqICBMQUJfRElTVEFOQ0Ug4oCUIG1hdGNoZXMgUXVQYXRoLiAqL1xuICBzZW5zaXRpdml0eT86IG51bWJlcjtcbiAgLyoqIFNxdWFyZSBwYXRjaCBzaXplIGluIHBpeGVscyAobXVzdCBiZSBvZGQpLiAqL1xuICBwYXRjaFNpemU/OiBudW1iZXI7XG4gIC8qKiBXaGVuIHRydWUsIHNraXAgYmx1ci90aHJlc2hvbGQgYW5kIGZsb29kLWZpbGwgYXQgZXhhY3QtbWF0Y2hcbiAgICogIChDbWQvQ3RybC1jbGljayBpbiBRdVBhdGgpLiAqL1xuICBzaW1wbGVNb2RlPzogYm9vbGVhbjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIHRoZSBicnVzaCByZWdpb24gdG9vbCAoUXVQYXRoLXN0eWxlKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUJydXNoT3B0aW9ucyB7XG4gIC8qKiBCcnVzaCBkaWFtZXRlciBpbiBtYXRyaXggKGltYWdlKSBwaXhlbHMuICovXG4gIHNpemU/OiBudW1iZXI7XG59XG5cbi8qKiBXaGF0IGRyaXZlcyBwb2ludCBjb2xvdXIgaW4gdGhlIHNwYXRpYWwtb21pY3MgbW9kZTogYW4gYW5ub3RhdGlvbiBjb2x1bW5cbiAqICBmcm9tIHRoZSBkYXRhc2V0LCBvciBvbmUgZmVhdHVyZSAoZ2VuZSkgdmVjdG9yIGZldGNoZWQgb24gZGVtYW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsQ29sb3JCeSB7XG4gIGtpbmQ6ICdjb2x1bW4nIHwgJ2ZlYXR1cmUnO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBEaXNwbGF5IHN0YXRlIGZvciB0aGUgc3BhdGlhbC1vbWljcyBwbG90IG1vZGUuIExpdmVzIGluIGBWaXN1YWxpemVyU3RvcmVgXG4gKiAgYWxvbmdzaWRlIHRoZSBjb2xvcm1hcC9jaGFubmVsIHN0YXRlIHNvIHRoZSByZW5kZXJlciByZWFjdHMgdG8gZWRpdHMgdGhlXG4gKiAgc2FtZSB3YXkgaXQgZG9lcyBmb3IgYW4gaW1hZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxWaWV3U3RhdGUge1xuICAvKiogQ29sb3VyIHNvdXJjZTsgYG51bGxgIHJlbmRlcnMgZXZlcnkgb2JzZXJ2YXRpb24gaW4gb25lIG5ldXRyYWwgY29sb3VyXG4gICAqICAodXNlZnVsIG9uIGl0cyBvd24g4oCUIGl0IHNob3dzIHdoZXJlIHRoZSB0aXNzdWUgYWN0dWFsbHkgaXMpLiAqL1xuICBjb2xvckJ5OiBTcGF0aWFsQ29sb3JCeSB8IG51bGw7XG4gIC8qKiBNdWx0aXBsaWVyIG9uIHRoZSBkYXRhc2V0J3MgcGh5c2ljYWwgbWFya2VyIHNpemUuIDEgPSB0cnVlIHNpemUsIHdoaWNoIGZvclxuICAgKiAgYSA1NSDCtW0gVmlzaXVtIHNwb3QgaXMgY29ycmVjdCBidXQgY2FuIGJlIGludmlzaWJsZSB3aGVuIHpvb21lZCBvdXQuICovXG4gIHBvaW50U2NhbGU6IG51bWJlcjtcbiAgLyoqIEFscGhhIGZvciBwb2ludHMgdGhhdCBhcmUgbm90IG11dGVkLiAqL1xuICBvcGFjaXR5OiBudW1iZXI7XG4gIC8qKiBMb2ctc2NhbGUgY29udGludW91cyB2YWx1ZXMgYmVmb3JlIG1hcHBpbmcgdGhlbSBvbnRvIHRoZSBjb2xvcm1hcC4gU2VlZGVkXG4gICAqICBmcm9tIHRoZSBjb2x1bW4ncyBgbG9nU2NhbGVIaW50YCDigJQgY291bnQgZGF0YSBuZWVkcyBpdC4gKi9cbiAgbG9nU2NhbGU6IGJvb2xlYW47XG4gIC8qKiBQZXJjZW50aWxlIGNsaXAgZm9yIHRoZSBjb250cmFzdCB3aW5kb3cgYXMgYFtsbywgaGldYCBmcmFjdGlvbnMsIHNvIGFcbiAgICogIGhhbmRmdWwgb2Ygc2F0dXJhdGVkIG9ic2VydmF0aW9ucyBkb24ndCBmbGF0dGVuIHRoZSByZXN0LiAqL1xuICAgcGVyY2VudGlsZUNsaXA6IFtudW1iZXIsIG51bWJlcl07XG4gIC8qKlxuICAgKiBDb2xvcm1hcCBmb3IgQ09OVElOVU9VUyBzcGF0aWFsIGNvbG91cmluZyDigJQgYSBnZW5lLCBhIG51bWVyaWMgY29sdW1uIOKAlCBhcyBhXG4gICAqIHtAbGluayBDb2xvcm1hcFZhbHVlfSwgdGhlIHNhbWUgc2hhcGUgdGhlIGRpc3BsYXkgY29sb3JtYXAgY2FycmllczogYSBzY2FsZVxuICAgKiBOQU1FIGZvciB0aGUgYnVpbHQtaW5zLCBvciBhbiBpbmxpbmUgYFtzdG9wLCBjb2xvdXJdYCBhcnJheSBmb3IgdGhlIHJlc3QuXG4gICAqIE51bGwgZm9sbG93cyB0aGUgZGlzcGxheSBjb2xvcm1hcC5cbiAgICpcbiAgICogSXRzIG93biBzZXR0aW5nIGJlY2F1c2UgdGhlIGRpc3BsYXkgY29sb3JtYXAgYmVsb25ncyB0byB0aGUgdGlzc3VlIGltYWdlIGFuZFxuICAgKiBpcyB1c3VhbGx5IGEgZ3JleSByYW1wLCB3aGljaCBpcyB0aGUgd3JvbmcgdGhpbmcgdG8gcmVhZCBhIG1lYXN1cmVtZW50XG4gICAqIHRocm91Z2g6IGdyZXkgb3ZlciBncmV5IGNhbm5vdCBiZSB0b2xkIGFwYXJ0IGZyb20gdGhlIGFuYXRvbXkuIEZvbGxvd2luZyBpdFxuICAgKiAod2l0aCBhIFZpcmlkaXMgZmFsbGJhY2sgZm9yIGV4YWN0bHkgdGhhdCBjYXNlKSBpcyBhIHJlYXNvbmFibGUgZGVmYXVsdCBhbmQgYVxuICAgKiBwb29yIGNlaWxpbmcsIHNpbmNlIHdoaWNoIGdyYWRpZW50IHJlYWRzIGJlc3QgaXMgYSBqdWRnZW1lbnQgYWJvdXQgdGhlIGRhdGEuXG4gICAqXG4gICAqIE9uZSBzZXR0aW5nIGZvciB0aGUgbWFya2VycywgdGhlIDJEIGdlbmUgbWFwIGFuZCB0aGUgM0QgZ2VuZSBtYXAgdG9nZXRoZXIsIHNvXG4gICAqIHRoZSBmaWVsZCB1bmRlciB0aGUgY2VsbHMgYW5kIHRoZSBjZWxscyBvdmVyIGl0IGNhbm5vdCBkaXNhZ3JlZSBhYm91dCB3aGF0IGFcbiAgICogY29sb3VyIG1lYW5zIOKAlCBhbmQgdGhlIHBhbmVsJ3Mgb3duIGNvbG91ciBiYXIgaXMgYnVpbHQgZnJvbSBpdCB0b28uXG4gICAqL1xuICBjb250aW51b3VzQ29sb3JtYXA6IENvbG9ybWFwVmFsdWUgfCBudWxsO1xuICAvKipcbiAgICogV2hhdCB0aGUgM0Qgc2NlbmUgZHJhd3MuIFRoZSB0aHJlZSB0aGluZ3MgaW4gaXQg4oCUIHRoZSByZWZlcmVuY2Ugdm9sdW1lLCB0aGVcbiAgICogb2JzZXJ2YXRpb24gY2xvdWQgYW5kIHRoZSBjbHVzdGVyIGRlbnNpdHkgdm9sdW1lcyDigJQgb2NjdXB5IHRoZSBzYW1lIHNwYWNlLCBzb1xuICAgKiBhbnkgdHdvIG9mIHRoZW0gaGlkZSBlYWNoIG90aGVyIHRvIHNvbWUgZGVncmVlLiBUaGVzZSBhcmUgaW5kZXBlbmRlbnQgYmVjYXVzZVxuICAgKiB0aGUgdXNlZnVsIHZpZXdzIGFyZSB0aGUgY29tYmluYXRpb25zOiB0aGUgdm9sdW1lcyBhbG9uZSB0byByZWFkIGFuIGVzdGltYXRlZFxuICAgKiBkaXN0cmlidXRpb24sIG9uZSBzZWN0aW9uJ3MgY2VsbHMgb3ZlciB0aGVtIHRvIGNoZWNrIHRoYXQgZXN0aW1hdGUgYWdhaW5zdCB0aGVcbiAgICogbWVhc3VyZW1lbnQsIHRoZSBhbmF0b215IGFsb25lIHRvIGZpbmQgYSBsYW5kbWFyay5cbiAgICpcbiAgICogVmlzaWJpbGl0eSBvbmx5IOKAlCB0aGUgbGF5ZXJzIHN0YXkgYnVpbHQsIHNvIHRvZ2dsaW5nIG9uZSBiYWNrIG9uIGlzIGltbWVkaWF0ZVxuICAgKiBhbmQgZG9lcyBub3QgcmUtcnVuIGEgcmFzdGVyaXNhdGlvbi4ge0BsaW5rIGRlbnNpdHlWb2x1bWV9IGlzIHRoZSBleGNlcHRpb24gYW5kXG4gICAqIGdlbnVpbmVseSBnYXRlcyBjb25zdHJ1Y3Rpb24sIGJlY2F1c2UgYnVpbGRpbmcgc2l4IHZvbHVtZXMgaXMgbm90IGZyZWUuXG4gICAqL1xuICBzaG93Vm9sdW1lOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSB2b2x1bWUncyBvcGFjaXR5LlxuICAgKlxuICAgKiBJdHMgb3duLCBub3Qge0BsaW5rIG9wYWNpdHl9ICh3aGljaCBiZWxvbmdzIHRvIHRoZSBtYXJrZXJzKTogdGhlIHZvbHVtZSBpcyBhXG4gICAqIEJBQ0tEUk9QLCBhbmQgcmVhZGluZyB0aGUgY2xvdWQgb3IgYSBkZW5zaXR5IGZpZWxkIHRocm91Z2ggaXQgbWVhbnMgdHVybmluZ1xuICAgKiB0aGUgYW5hdG9teSBkb3duIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGRhdGEgZHJhd24gb3ZlciBpdC4gUmFuZ2VzIGxvd2VyIHRoYW5cbiAgICogdGhlIG1hcmtlcnMnIHNsaWRlciBmb3IgdGhlIHNhbWUgcmVhc29uIOKAlCBhIGZhaW50IGFuYXRvbWljYWwgaGludCBpcyBhIHVzZWZ1bFxuICAgKiBzZXR0aW5nIGZvciBhIGJhY2tkcm9wIGFuZCBhIHVzZWxlc3Mgb25lIGZvciB0aGUgbWVhc3VyZW1lbnQuXG4gICAqL1xuICB2b2x1bWVPcGFjaXR5OiBudW1iZXI7XG4gIC8qKiBEcmF3IHRoZSBvYnNlcnZhdGlvbiBjbG91ZCAoM0QpLiAqL1xuICBzaG93UG9pbnRzOiBib29sZWFuO1xuICAvKipcbiAgICogUmVzdHJpY3QgdGhlIGNsb3VkIHRvIE9ORSBpbWFnZWQgc2VjdGlvbiwgYnkgaW5kZXggaW50byB0aGUgZGF0YXNldCdzIHNhbXBsZWRcbiAgICogc2VjdGlvbnM7IG51bGwgZHJhd3MgZXZlcnkgc2VjdGlvbi5cbiAgICpcbiAgICogVGhlIHdob2xlIGNsb3VkIGlzIGEgc3RhY2sgb2YgZGlzY3MgdGhhdCBoaWRlcyB3aGF0ZXZlciBpcyBkcmF3biBiZXR3ZWVuIHRoZW0uXG4gICAqIE9uZSBzZWN0aW9uIGF0IGEgdGltZSBpcyB0aGUgdmlldyB0aGF0IGFuc3dlcnMgXCJkb2VzIHRoZSBlc3RpbWF0ZWQgZmllbGRcbiAgICogYWN0dWFsbHkgZm9sbG93IHRoZSBjZWxscyBJIG1lYXN1cmVkXCIg4oCUIGFuZCBpdCBpcyBvbmx5IG9mZmVyZWQgZm9yIGRhdGEgdGhhdFxuICAgKiByZWFsbHkgaXMgc2VjdGlvbmVkIChzZWUgYHNhbXBsZWRTZWN0aW9uc2ApLlxuICAgKi9cbiAgcG9pbnRTZWN0aW9uOiBudW1iZXIgfCBudWxsO1xuICAvKipcbiAgICogRHJhdyBlYWNoIGNsdXN0ZXIgYXMgYSB0cmFuc2x1Y2VudCBERU5TSVRZIHZvbHVtZSBhbG9uZ3NpZGUgdGhlIDNEIGNsb3VkLlxuICAgKlxuICAgKiBTZXJpYWwgc2VjdGlvbnMgaHVuZHJlZHMgb2YgbWljcm9ucyBhcGFydCBtYWtlIGEgY2xvdWQgaGFyZCB0byByZWFkIGFzIGFuXG4gICAqIGFuYXRvbWljYWwgZGlzdHJpYnV0aW9uIOKAlCB0aGUgZXllIGNhbm5vdCBpbnRlZ3JhdGUgZGlzY3MgaW50byBhIHNoYXBlLiBBXG4gICAqIGRlbnNpdHkgZmllbGQgY2FuIGJlIGVzdGltYXRlZCBiZXR3ZWVuIHRoZSBpbWFnZWQgcGxhbmVzIChhIGNvbnRpbnVvdXNcbiAgICogZXN0aW1hdGUsIHVubGlrZSBpbmRpdmlkdWFsIGNlbGxzLCB3aGljaCBoYXZlIG5vIGNvcnJlc3BvbmRlbmNlIHRvXG4gICAqIGludGVycG9sYXRlIGFsb25nKSBhbmQgcmVuZGVycyBhcyBhIGNsb3VkIHRoYXQgcmVhZHMgYXMgYW4gZXN0aW1hdGUuXG4gICAqL1xuICBkZW5zaXR5Vm9sdW1lOiBib29sZWFuO1xuICAvKiogTXVsdGlwbGllciBvbiB0aGUgZGVmYXVsdCBrZXJuZWwgYmFuZHdpZHRoLiBBYm92ZSAxIGlzIHNtb290aGVyIGFuZCBsZXNzXG4gICAqICBjb21taXR0YWw7IGJlbG93IDEgZXhwb3NlcyB0aGUgaW5kaXZpZHVhbCBzZWN0aW9ucy4gKi9cbiAgZGVuc2l0eVNtb290aGluZzogbnVtYmVyO1xuICAvKipcbiAgICogRHJhdyB0aGUgYWN0aXZlIEdFTkUgYXMgYSBjb250aW51b3VzIGZpZWxkIHVuZGVyIHRoZSBvYnNlcnZhdGlvbnMgKDJEKS5cbiAgICpcbiAgICogQ29sb3VyaW5nIHRoZSBtYXJrZXJzIGJ5IGEgZ2VuZSBzYXlzIHdoaWNoIGNlbGxzIGV4cHJlc3MgaXQ7IGl0IGNhbm5vdCBzYXlcbiAgICogd2hlcmUsIGJlY2F1c2UgdGhlIGV5ZSB3aWxsIG5vdCBpbnRlZ3JhdGUgdGhvdXNhbmRzIG9mIGRvdHMgaW50byBhIHRlcnJpdG9yeS5cbiAgICogVGhlIGZpZWxkIGlzIGFuIGVzdGltYXRlIOKAlCBhIGtlcm5lbC13ZWlnaHRlZCBtZWFuIHBlciBjZWxsLCB0cmFuc3BhcmVudCB3aGVyZVxuICAgKiBubyBjZWxsIHdhcyBtZWFzdXJlZCDigJQgYW5kIGl0IGlzIGRyYXduIGJlbmVhdGggdGhlIGNlbGxzLCBub3QgaW5zdGVhZCBvZiB0aGVtLFxuICAgKiBzbyB0aGUgbWVhc3VyZW1lbnQgc3RheXMgb24gc2NyZWVuIG5leHQgdG8gdGhlIGludGVycG9sYXRpb24uXG4gICAqXG4gICAqIElnbm9yZWQgdW5sZXNzIHRoZSBjb2xvdXIgc291cmNlIGlzIGEgZ2VuZTogdGhlcmUgaXMgbm90aGluZyBlbHNlIHRvIG1hcC5cbiAgICovXG4gIGdlbmVNYXA6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXN0cmljdCB0aGUgM0QgZ2VuZSBtYXAgdG8gT05FIGltYWdlZCBzZWN0aW9uLCBieSBpbmRleCBpbnRvIHRoZSBkYXRhc2V0J3NcbiAgICogc2FtcGxlZCBzZWN0aW9uczsgbnVsbCBkcmF3cyBldmVyeSBzZWN0aW9uJ3Mgc2hlZXQuXG4gICAqXG4gICAqIFNlcGFyYXRlIGZyb20ge0BsaW5rIHBvaW50U2VjdGlvbn0gc28gdGhlIGNvbWJpbmF0aW9ucyBzdGF5IG9wZW46IGFsbCB0aGVcbiAgICogc2hlZXRzIHdpdGggb25lIHNlY3Rpb24ncyBjZWxscyBvdmVyIHRoZW0gaXMgYSB1c2VmdWwgdmlldywgYW5kIHNvIGlzIG9uZVxuICAgKiBzaGVldCBpbnNpZGUgdGhlIHdob2xlIGNsb3VkLiBJZ25vcmVkIHdoaWxlIHtAbGluayBnZW5lTWFwVm9sdW1lfSBpcyBzZXQg4oCUXG4gICAqIGludGVycG9sYXRpbmcgYSBzaW5nbGUgc2VjdGlvbiBhbG9uZyB6IHdvdWxkIHNtZWFyIG9uZSBzbGlkZSB0aHJvdWdoIHRoZVxuICAgKiBzcGVjaW1lbidzIHdob2xlIGRlcHRoIGFuZCBjYWxsIGl0IGFuIGVzdGltYXRlLlxuICAgKi9cbiAgZ2VuZU1hcFNlY3Rpb246IG51bWJlciB8IG51bGw7XG4gIC8qKlxuICAgKiBTbW9vdGggdGhlIHBlci1zZWN0aW9uIGdlbmUgbWFwcyBhbG9uZyB6IGludG8gYSBjb250aW51b3VzIFZPTFVNRSAoM0QpLlxuICAgKlxuICAgKiBUaGUgc2hlZXRzIGFyZSB3aGF0IHdhcyBtZWFzdXJlZCDigJQgb25lIGZpZWxkIHBlciBpbWFnZWQgc2xpZGUsIHdpdGggdGhlIGdhcHNcbiAgICogYmV0d2VlbiB0aGVtIGVtcHR5LiBUaGlzIHR1cm5zIHRoZW0gaW50byBhbiBlc3RpbWF0ZSBkZWZpbmVkIGJldHdlZW4gdGhlXG4gICAqIHNsaWRlcywgdGhlIHNhbWUgbW92ZSB0aGUgY2x1c3RlciBkZW5zaXR5IHZvbHVtZXMgbWFrZSBhbmQgd2l0aCB0aGUgc2FtZVxuICAgKiBjYXZlYXQ6IGEgZmllbGQgbWF5IGJlIGludGVycG9sYXRlZCBiZXR3ZWVuIHNlY3Rpb25zLCBpbmRpdmlkdWFsIGNlbGxzIG1heVxuICAgKiBub3QsIGFuZCB0aGUgcmVzdWx0IGlzIGRyYXduIGFzIGEgdHJhbnNsdWNlbnQgY2xvdWQgc28gaXQgY2Fubm90IGJlIG1pc3Rha2VuXG4gICAqIGZvciBtZWFzdXJlbWVudC5cbiAgICovXG4gIGdlbmVNYXBWb2x1bWU6IGJvb2xlYW47XG4gIC8qKiBNdWx0aXBsaWVyIG9uIHRoZSBnZW5lIG1hcCdzIGtlcm5lbCBiYW5kd2lkdGguICovXG4gIGdlbmVNYXBTbW9vdGhpbmc6IG51bWJlcjtcbiAgLyoqIFRoZSBnZW5lIG1hcCdzIG93biBvcGFjaXR5LiBTZXBhcmF0ZSBmcm9tIHtAbGluayBvcGFjaXR5fSwgd2hpY2ggYmVsb25ncyB0b1xuICAgKiAgdGhlIG1hcmtlcnM6IHR1cm5pbmcgdGhlIGNlbGxzIGRvd24gdG8gcmVhZCB0aGUgZmllbGQgdW5kZXJuZWF0aCBtdXN0IG5vdFxuICAgKiAgdHVybiB0aGUgZmllbGQgZG93biB3aXRoIHRoZW0uICovXG4gIGdlbmVNYXBPcGFjaXR5OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NQQVRJQUxfVklFVzogU3BhdGlhbFZpZXdTdGF0ZSA9IHtcbiAgY29sb3JCeTogbnVsbCxcbiAgcG9pbnRTY2FsZTogMSxcbiAgb3BhY2l0eTogMSxcbiAgbG9nU2NhbGU6IGZhbHNlLFxuICBwZXJjZW50aWxlQ2xpcDogWzAuMDEsIDAuOTldLFxuICBjb250aW51b3VzQ29sb3JtYXA6IG51bGwsXG4gIHNob3dWb2x1bWU6IHRydWUsXG4gIHZvbHVtZU9wYWNpdHk6IDAuNSxcbiAgc2hvd1BvaW50czogdHJ1ZSxcbiAgcG9pbnRTZWN0aW9uOiBudWxsLFxuICBkZW5zaXR5Vm9sdW1lOiBmYWxzZSxcbiAgZGVuc2l0eVNtb290aGluZzogMSxcbiAgZ2VuZU1hcDogZmFsc2UsXG4gIGdlbmVNYXBTZWN0aW9uOiBudWxsLFxuICBnZW5lTWFwVm9sdW1lOiBmYWxzZSxcbiAgZ2VuZU1hcFNtb290aGluZzogMSxcbiAgZ2VuZU1hcE9wYWNpdHk6IDAuODUsXG59O1xuIl19
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RzL2Rpc3BsYXktdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFrUkgsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQXFCO0lBQ3BELE9BQU8sRUFBRSxJQUFJO0lBQ2IsVUFBVSxFQUFFLENBQUM7SUFDYixPQUFPLEVBQUUsQ0FBQztJQUNWLFFBQVEsRUFBRSxLQUFLO0lBQ2YsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUM1QixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLGFBQWEsRUFBRSxHQUFHO0lBQ2xCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLGdCQUFnQixFQUFFLENBQUM7SUFDbkIsT0FBTyxFQUFFLEtBQUs7SUFDZCxjQUFjLEVBQUUsSUFBSTtJQUNwQixhQUFhLEVBQUUsS0FBSztJQUNwQixnQkFBZ0IsRUFBRSxDQUFDO0lBQ25CLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLFNBQVMsRUFBRSxJQUFJO0lBQ2YsT0FBTyxFQUFFLElBQUk7SUFDYixRQUFRLEVBQUUsTUFBTTtJQUNoQixXQUFXLEVBQUUsSUFBSTtJQUNqQixjQUFjLEVBQUUsSUFBSTtJQUNwQixlQUFlLEVBQUUsRUFBRTtJQUNuQixxQkFBcUIsRUFBRSxFQUFFO0lBQ3pCLG9CQUFvQixFQUFFLEVBQUU7SUFDeEIsb0JBQW9CLEVBQUUsRUFBRTtJQUN4QixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLGdCQUFnQixFQUFFLE9BQU87SUFDekIsY0FBYyxFQUFFLEtBQUs7SUFDckIsaUJBQWlCLEVBQUUsVUFBVTtJQUM3QixnQkFBZ0IsRUFBRSxFQUFFO0lBQ3BCLGVBQWUsRUFBRSxDQUFDO0lBQ2xCLGlCQUFpQixFQUFFLEdBQUc7SUFDdEIsaUJBQWlCLEVBQUUsTUFBTTtJQUN6QixjQUFjLEVBQUUsR0FBRztJQUNuQixVQUFVLEVBQUUsRUFBRTtJQUNkLFlBQVksRUFBRSxJQUFJO0lBQ2xCLGVBQWUsRUFBRSxJQUFJO0lBQ3JCLGFBQWEsRUFBRSxPQUFPO0lBQ3RCLGFBQWEsRUFBRSxJQUFJO0lBQ25CLGVBQWUsRUFBRSxTQUFTO0lBQzFCLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFNBQVMsRUFBRSxJQUFJO0lBQ2YsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVibGljYXRpb24tY3JpdGljYWwgdHlwZXMgdGhhdCB3ZXJlIGBhbnlgIG9uIHRoZSBwdWJsaWMgY29udHJhY3RzXG4gKiAocmVmYWN0b3JpbmcgcGxhbiwgU3RlcCA2KS4gRGVsaWJlcmF0ZWx5IHBlcm1pc3NpdmUg4oCUIGV2ZXJ5IGZpZWxkIG9wdGlvbmFsIOKAlFxuICogc28gZXhpc3RpbmcgaG9zdHMgKHdoaWNoIHBhc3MgUHJpbWVORyBgVHJlZU5vZGVgcyBhbmQgcGxhaW4gb3B0aW9uIG9iamVjdHMpXG4gKiBrZWVwIGNvbXBpbGluZyB1bmNoYW5nZWQgd2hpbGUgY29uc3VtZXJzIGZpbmFsbHkgZ2V0IG5hbWVkIHNoYXBlcy5cbiAqL1xuXG4vKiogQSBjb2xvcm1hcCB2YWx1ZSBhcyBQbG90bHkgdW5kZXJzdGFuZHMgaXQ6IGEgYnVpbHQtaW4gc2NhbGUgbmFtZSAoZS5nLlxuICogICdWaXJpZGlzJykgb3IgYW4gaW5saW5lIGFycmF5IG9mIGBbc3RvcCwgY29sb3JdYCBwYWlycy4gKi9cbmV4cG9ydCB0eXBlIENvbG9ybWFwVmFsdWUgPSBzdHJpbmcgfCBBcnJheTxbbnVtYmVyLCBzdHJpbmddPjtcblxuLyoqIE9uZSBub2RlIG9mIHRoZSBjb2xvcm1hcCBzZWxlY3RvciB0cmVlIChzdHJ1Y3R1cmFsbHkgY29tcGF0aWJsZSB3aXRoIHRoZVxuICogIFByaW1lTkcgYFRyZWVOb2RlYHMgdGhlIGhvc3QgcGFzc2VzKTogZ3JvdXAgbm9kZXMgY2FycnkgYGNoaWxkcmVuYCwgbGVhZlxuICogIG5vZGVzIGNhcnJ5IHRoZSBzY2FsZSBpbiBgZGF0YS52YWx1ZWAgKCsgYSBwcmV2aWV3IGltYWdlIGluIGBkYXRhLnNyY2ApLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2xvcm1hcE5vZGUge1xuICBsYWJlbD86IHN0cmluZztcbiAgZGF0YT86IHsgdmFsdWU/OiBDb2xvcm1hcFZhbHVlOyBzcmM/OiBzdHJpbmcgfTtcbiAgY2hpbGRyZW4/OiBDb2xvcm1hcE5vZGVbXTtcbn1cblxuLyoqIE1hZ2ljLXdhbmQgcGl4ZWwtY29tcGFyaXNvbiBzcGFjZS4gKi9cbmV4cG9ydCB0eXBlIFdhbmRUeXBlID0gJ0dSQVknIHwgJ1JHQicgfCAnTEFCX0RJU1RBTkNFJztcblxuLyoqIE9wdGlvbnMgZm9yIHRoZSBtYWdpYy13YW5kIHRvb2wgKFF1UGF0aC1zdHlsZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIElXYW5kT3B0aW9ucyB7XG4gIHR5cGU/OiBXYW5kVHlwZTtcbiAgLyoqIEdhdXNzaWFuIHNpZ21hIGFwcGxpZWQgdG8gdGhlIHBhdGNoIGJlZm9yZSB0aHJlc2hvbGRpbmcuICovXG4gIHNpZ21hPzogbnVtYmVyO1xuICAvKiogSGlnaGVyID0gc3RyaWN0ZXIgKHNtYWxsZXIgc2VsZWN0aW9uKSBmb3IgR1JBWS9SR0I7IGhpZ2hlciA9IGxvb3NlciBmb3JcbiAgICogIExBQl9ESVNUQU5DRSDigJQgbWF0Y2hlcyBRdVBhdGguICovXG4gIHNlbnNpdGl2aXR5PzogbnVtYmVyO1xuICAvKiogU3F1YXJlIHBhdGNoIHNpemUgaW4gcGl4ZWxzIChtdXN0IGJlIG9kZCkuICovXG4gIHBhdGNoU2l6ZT86IG51bWJlcjtcbiAgLyoqIFdoZW4gdHJ1ZSwgc2tpcCBibHVyL3RocmVzaG9sZCBhbmQgZmxvb2QtZmlsbCBhdCBleGFjdC1tYXRjaFxuICAgKiAgKENtZC9DdHJsLWNsaWNrIGluIFF1UGF0aCkuICovXG4gIHNpbXBsZU1vZGU/OiBib29sZWFuO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgdGhlIGJydXNoIHJlZ2lvbiB0b29sIChRdVBhdGgtc3R5bGUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQnJ1c2hPcHRpb25zIHtcbiAgLyoqIEJydXNoIGRpYW1ldGVyIGluIG1hdHJpeCAoaW1hZ2UpIHBpeGVscy4gKi9cbiAgc2l6ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBhaW50IGFzIG9uZSBjbGFzczogbmV3IHJlZ2lvbnMgdGFrZSB0aGlzIGxhYmVsLCBhbmQgYSBzdHJva2Ugb25seSBleHRlbmRzXG4gICAqIG9yIG1lcmdlcyByZWdpb25zIHdpdGggdGhlIHNhbWUgbGFiZWwuIFVuc2V0ID0gdGhlIHBsYWluIGJydXNoIChsYWJlbFxuICAgKiBgJ1JlZ2lvbidgLCBleHRlbmRzIGFueSByZWdpb24pLiBgc2V0QnJ1c2hNb2RlKHRydWUsIOKApilgIHNldHMgdGhlIGNsYXNzIGluXG4gICAqIGZ1bGw7IGBzZXRCcnVzaE9wdGlvbnNgIGNoYW5nZXMgaXQgb25seSB3aGVuIGBsYWJlbGAgb3IgYGNvbG9yYCBpcyBwYXNzZWQsXG4gICAqIHNvIGEgc2l6ZS1vbmx5IHVwZGF0ZSBrZWVwcyBpdC5cbiAgICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogQ29sb3VyIGZvciB0aGUgcGFpbnRlZCByZWdpb25zIGluc3RlYWQgb2YgdGhlIHNoYXBlIGNvbG91ci4gS2VwdCBhZ2FpbnN0IHByZXNldCByZS1hcHBseS4gKi9cbiAgY29sb3I/OiBzdHJpbmc7XG59XG5cbi8qKiBXaGF0IGRyaXZlcyBwb2ludCBjb2xvdXIgaW4gdGhlIHNwYXRpYWwtb21pY3MgbW9kZTogYW4gYW5ub3RhdGlvbiBjb2x1bW5cbiAqICBmcm9tIHRoZSBkYXRhc2V0LCBvciBvbmUgZmVhdHVyZSAoZ2VuZSkgdmVjdG9yIGZldGNoZWQgb24gZGVtYW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsQ29sb3JCeSB7XG4gIGtpbmQ6ICdjb2x1bW4nIHwgJ2ZlYXR1cmUnO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBEaXNwbGF5IHN0YXRlIGZvciB0aGUgc3BhdGlhbC1vbWljcyBwbG90IG1vZGUuIExpdmVzIGluIGBWaXN1YWxpemVyU3RvcmVgXG4gKiAgYWxvbmdzaWRlIHRoZSBjb2xvcm1hcC9jaGFubmVsIHN0YXRlIHNvIHRoZSByZW5kZXJlciByZWFjdHMgdG8gZWRpdHMgdGhlXG4gKiAgc2FtZSB3YXkgaXQgZG9lcyBmb3IgYW4gaW1hZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxWaWV3U3RhdGUge1xuICAvKiogQ29sb3VyIHNvdXJjZTsgYG51bGxgIHJlbmRlcnMgZXZlcnkgb2JzZXJ2YXRpb24gaW4gb25lIG5ldXRyYWwgY29sb3VyXG4gICAqICAodXNlZnVsIG9uIGl0cyBvd24g4oCUIGl0IHNob3dzIHdoZXJlIHRoZSB0aXNzdWUgYWN0dWFsbHkgaXMpLiAqL1xuICBjb2xvckJ5OiBTcGF0aWFsQ29sb3JCeSB8IG51bGw7XG4gIC8qKiBNdWx0aXBsaWVyIG9uIHRoZSBkYXRhc2V0J3MgcGh5c2ljYWwgbWFya2VyIHNpemUuIDEgPSB0cnVlIHNpemUsIHdoaWNoIGZvclxuICAgKiAgYSA1NSDCtW0gVmlzaXVtIHNwb3QgaXMgY29ycmVjdCBidXQgY2FuIGJlIGludmlzaWJsZSB3aGVuIHpvb21lZCBvdXQuICovXG4gIHBvaW50U2NhbGU6IG51bWJlcjtcbiAgLyoqIEFscGhhIGZvciBwb2ludHMgdGhhdCBhcmUgbm90IG11dGVkLiAqL1xuICBvcGFjaXR5OiBudW1iZXI7XG4gIC8qKiBMb2ctc2NhbGUgY29udGludW91cyB2YWx1ZXMgYmVmb3JlIG1hcHBpbmcgdGhlbSBvbnRvIHRoZSBjb2xvcm1hcC4gU2VlZGVkXG4gICAqICBmcm9tIHRoZSBjb2x1bW4ncyBgbG9nU2NhbGVIaW50YCDigJQgY291bnQgZGF0YSBuZWVkcyBpdC4gKi9cbiAgbG9nU2NhbGU6IGJvb2xlYW47XG4gIC8qKiBQZXJjZW50aWxlIGNsaXAgZm9yIHRoZSBjb250cmFzdCB3aW5kb3cgYXMgYFtsbywgaGldYCBmcmFjdGlvbnMsIHNvIGFcbiAgICogIGhhbmRmdWwgb2Ygc2F0dXJhdGVkIG9ic2VydmF0aW9ucyBkb24ndCBmbGF0dGVuIHRoZSByZXN0LiAqL1xuICAgcGVyY2VudGlsZUNsaXA6IFtudW1iZXIsIG51bWJlcl07XG4gIC8qKlxuICAgKiBDb2xvcm1hcCBmb3IgQ09OVElOVU9VUyBzcGF0aWFsIGNvbG91cmluZyDigJQgYSBnZW5lLCBhIG51bWVyaWMgY29sdW1uIOKAlCBhcyBhXG4gICAqIHtAbGluayBDb2xvcm1hcFZhbHVlfSwgdGhlIHNhbWUgc2hhcGUgdGhlIGRpc3BsYXkgY29sb3JtYXAgY2FycmllczogYSBzY2FsZVxuICAgKiBOQU1FIGZvciB0aGUgYnVpbHQtaW5zLCBvciBhbiBpbmxpbmUgYFtzdG9wLCBjb2xvdXJdYCBhcnJheSBmb3IgdGhlIHJlc3QuXG4gICAqIE51bGwgZm9sbG93cyB0aGUgZGlzcGxheSBjb2xvcm1hcC5cbiAgICpcbiAgICogSXRzIG93biBzZXR0aW5nIGJlY2F1c2UgdGhlIGRpc3BsYXkgY29sb3JtYXAgYmVsb25ncyB0byB0aGUgdGlzc3VlIGltYWdlIGFuZFxuICAgKiBpcyB1c3VhbGx5IGEgZ3JleSByYW1wLCB3aGljaCBpcyB0aGUgd3JvbmcgdGhpbmcgdG8gcmVhZCBhIG1lYXN1cmVtZW50XG4gICAqIHRocm91Z2g6IGdyZXkgb3ZlciBncmV5IGNhbm5vdCBiZSB0b2xkIGFwYXJ0IGZyb20gdGhlIGFuYXRvbXkuIEZvbGxvd2luZyBpdFxuICAgKiAod2l0aCBhIFZpcmlkaXMgZmFsbGJhY2sgZm9yIGV4YWN0bHkgdGhhdCBjYXNlKSBpcyBhIHJlYXNvbmFibGUgZGVmYXVsdCBhbmQgYVxuICAgKiBwb29yIGNlaWxpbmcsIHNpbmNlIHdoaWNoIGdyYWRpZW50IHJlYWRzIGJlc3QgaXMgYSBqdWRnZW1lbnQgYWJvdXQgdGhlIGRhdGEuXG4gICAqXG4gICAqIE9uZSBzZXR0aW5nIGZvciB0aGUgbWFya2VycywgdGhlIDJEIGdlbmUgbWFwIGFuZCB0aGUgM0QgZ2VuZSBtYXAgdG9nZXRoZXIsIHNvXG4gICAqIHRoZSBmaWVsZCB1bmRlciB0aGUgY2VsbHMgYW5kIHRoZSBjZWxscyBvdmVyIGl0IGNhbm5vdCBkaXNhZ3JlZSBhYm91dCB3aGF0IGFcbiAgICogY29sb3VyIG1lYW5zIOKAlCBhbmQgdGhlIHBhbmVsJ3Mgb3duIGNvbG91ciBiYXIgaXMgYnVpbHQgZnJvbSBpdCB0b28uXG4gICAqL1xuICBjb250aW51b3VzQ29sb3JtYXA6IENvbG9ybWFwVmFsdWUgfCBudWxsO1xuICAvKipcbiAgICogV2hhdCB0aGUgM0Qgc2NlbmUgZHJhd3MuIFRoZSB0aHJlZSB0aGluZ3MgaW4gaXQg4oCUIHRoZSByZWZlcmVuY2Ugdm9sdW1lLCB0aGVcbiAgICogb2JzZXJ2YXRpb24gY2xvdWQgYW5kIHRoZSBjbHVzdGVyIGRlbnNpdHkgdm9sdW1lcyDigJQgb2NjdXB5IHRoZSBzYW1lIHNwYWNlLCBzb1xuICAgKiBhbnkgdHdvIG9mIHRoZW0gaGlkZSBlYWNoIG90aGVyIHRvIHNvbWUgZGVncmVlLiBUaGVzZSBhcmUgaW5kZXBlbmRlbnQgYmVjYXVzZVxuICAgKiB0aGUgdXNlZnVsIHZpZXdzIGFyZSB0aGUgY29tYmluYXRpb25zOiB0aGUgdm9sdW1lcyBhbG9uZSB0byByZWFkIGFuIGVzdGltYXRlZFxuICAgKiBkaXN0cmlidXRpb24sIG9uZSBzZWN0aW9uJ3MgY2VsbHMgb3ZlciB0aGVtIHRvIGNoZWNrIHRoYXQgZXN0aW1hdGUgYWdhaW5zdCB0aGVcbiAgICogbWVhc3VyZW1lbnQsIHRoZSBhbmF0b215IGFsb25lIHRvIGZpbmQgYSBsYW5kbWFyay5cbiAgICpcbiAgICogVmlzaWJpbGl0eSBvbmx5IOKAlCB0aGUgbGF5ZXJzIHN0YXkgYnVpbHQsIHNvIHRvZ2dsaW5nIG9uZSBiYWNrIG9uIGlzIGltbWVkaWF0ZVxuICAgKiBhbmQgZG9lcyBub3QgcmUtcnVuIGEgcmFzdGVyaXNhdGlvbi4ge0BsaW5rIGRlbnNpdHlWb2x1bWV9IGlzIHRoZSBleGNlcHRpb24gYW5kXG4gICAqIGdlbnVpbmVseSBnYXRlcyBjb25zdHJ1Y3Rpb24sIGJlY2F1c2UgYnVpbGRpbmcgc2l4IHZvbHVtZXMgaXMgbm90IGZyZWUuXG4gICAqL1xuICBzaG93Vm9sdW1lOiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSB2b2x1bWUncyBvcGFjaXR5LlxuICAgKlxuICAgKiBJdHMgb3duLCBub3Qge0BsaW5rIG9wYWNpdHl9ICh3aGljaCBiZWxvbmdzIHRvIHRoZSBtYXJrZXJzKTogdGhlIHZvbHVtZSBpcyBhXG4gICAqIEJBQ0tEUk9QLCBhbmQgcmVhZGluZyB0aGUgY2xvdWQgb3IgYSBkZW5zaXR5IGZpZWxkIHRocm91Z2ggaXQgbWVhbnMgdHVybmluZ1xuICAgKiB0aGUgYW5hdG9teSBkb3duIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGRhdGEgZHJhd24gb3ZlciBpdC4gUmFuZ2VzIGxvd2VyIHRoYW5cbiAgICogdGhlIG1hcmtlcnMnIHNsaWRlciBmb3IgdGhlIHNhbWUgcmVhc29uIOKAlCBhIGZhaW50IGFuYXRvbWljYWwgaGludCBpcyBhIHVzZWZ1bFxuICAgKiBzZXR0aW5nIGZvciBhIGJhY2tkcm9wIGFuZCBhIHVzZWxlc3Mgb25lIGZvciB0aGUgbWVhc3VyZW1lbnQuXG4gICAqL1xuICB2b2x1bWVPcGFjaXR5OiBudW1iZXI7XG4gIC8qKiBEcmF3IHRoZSBvYnNlcnZhdGlvbiBtYXJrZXJzIOKAlCB0aGUgM0QgY2xvdWQsIG9yIHRoZSAyRCBjaXJjbGVzLiBJbiAyRCB0aGV5IGFsc29cbiAgICogIHN0YW5kIGluIGZvciBjZWxscyB0b28gc21hbGwgb24gc2NyZWVuIHRvIG91dGxpbmUuICovXG4gIHNob3dQb2ludHM6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXN0cmljdCB0aGUgY2xvdWQgdG8gT05FIGltYWdlZCBzZWN0aW9uLCBieSBpbmRleCBpbnRvIHRoZSBkYXRhc2V0J3Mgc2FtcGxlZFxuICAgKiBzZWN0aW9uczsgbnVsbCBkcmF3cyBldmVyeSBzZWN0aW9uLlxuICAgKlxuICAgKiBUaGUgd2hvbGUgY2xvdWQgaXMgYSBzdGFjayBvZiBkaXNjcyB0aGF0IGhpZGVzIHdoYXRldmVyIGlzIGRyYXduIGJldHdlZW4gdGhlbS5cbiAgICogT25lIHNlY3Rpb24gYXQgYSB0aW1lIGlzIHRoZSB2aWV3IHRoYXQgYW5zd2VycyBcImRvZXMgdGhlIGVzdGltYXRlZCBmaWVsZFxuICAgKiBhY3R1YWxseSBmb2xsb3cgdGhlIGNlbGxzIEkgbWVhc3VyZWRcIiDigJQgYW5kIGl0IGlzIG9ubHkgb2ZmZXJlZCBmb3IgZGF0YSB0aGF0XG4gICAqIHJlYWxseSBpcyBzZWN0aW9uZWQgKHNlZSBgc2FtcGxlZFNlY3Rpb25zYCkuXG4gICAqL1xuICBwb2ludFNlY3Rpb246IG51bWJlciB8IG51bGw7XG4gIC8qKlxuICAgKiBEcmF3IGVhY2ggY2x1c3RlciBhcyBhIHRyYW5zbHVjZW50IERFTlNJVFkgdm9sdW1lIGFsb25nc2lkZSB0aGUgM0QgY2xvdWQuXG4gICAqXG4gICAqIFNlcmlhbCBzZWN0aW9ucyBodW5kcmVkcyBvZiBtaWNyb25zIGFwYXJ0IG1ha2UgYSBjbG91ZCBoYXJkIHRvIHJlYWQgYXMgYW5cbiAgICogYW5hdG9taWNhbCBkaXN0cmlidXRpb24g4oCUIHRoZSBleWUgY2Fubm90IGludGVncmF0ZSBkaXNjcyBpbnRvIGEgc2hhcGUuIEFcbiAgICogZGVuc2l0eSBmaWVsZCBjYW4gYmUgZXN0aW1hdGVkIGJldHdlZW4gdGhlIGltYWdlZCBwbGFuZXMgKGEgY29udGludW91c1xuICAgKiBlc3RpbWF0ZSwgdW5saWtlIGluZGl2aWR1YWwgY2VsbHMsIHdoaWNoIGhhdmUgbm8gY29ycmVzcG9uZGVuY2UgdG9cbiAgICogaW50ZXJwb2xhdGUgYWxvbmcpIGFuZCByZW5kZXJzIGFzIGEgY2xvdWQgdGhhdCByZWFkcyBhcyBhbiBlc3RpbWF0ZS5cbiAgICovXG4gIGRlbnNpdHlWb2x1bWU6IGJvb2xlYW47XG4gIC8qKiBNdWx0aXBsaWVyIG9uIHRoZSBkZWZhdWx0IGtlcm5lbCBiYW5kd2lkdGguIEFib3ZlIDEgaXMgc21vb3RoZXIgYW5kIGxlc3NcbiAgICogIGNvbW1pdHRhbDsgYmVsb3cgMSBleHBvc2VzIHRoZSBpbmRpdmlkdWFsIHNlY3Rpb25zLiAqL1xuICBkZW5zaXR5U21vb3RoaW5nOiBudW1iZXI7XG4gIC8qKlxuICAgKiBEcmF3IHRoZSBhY3RpdmUgR0VORSBhcyBhIGNvbnRpbnVvdXMgZmllbGQgdW5kZXIgdGhlIG9ic2VydmF0aW9ucyAoMkQpLlxuICAgKlxuICAgKiBDb2xvdXJpbmcgdGhlIG1hcmtlcnMgYnkgYSBnZW5lIHNheXMgd2hpY2ggY2VsbHMgZXhwcmVzcyBpdDsgaXQgY2Fubm90IHNheVxuICAgKiB3aGVyZSwgYmVjYXVzZSB0aGUgZXllIHdpbGwgbm90IGludGVncmF0ZSB0aG91c2FuZHMgb2YgZG90cyBpbnRvIGEgdGVycml0b3J5LlxuICAgKiBUaGUgZmllbGQgaXMgYW4gZXN0aW1hdGUg4oCUIGEga2VybmVsLXdlaWdodGVkIG1lYW4gcGVyIGNlbGwsIHRyYW5zcGFyZW50IHdoZXJlXG4gICAqIG5vIGNlbGwgd2FzIG1lYXN1cmVkIOKAlCBhbmQgaXQgaXMgZHJhd24gYmVuZWF0aCB0aGUgY2VsbHMsIG5vdCBpbnN0ZWFkIG9mIHRoZW0sXG4gICAqIHNvIHRoZSBtZWFzdXJlbWVudCBzdGF5cyBvbiBzY3JlZW4gbmV4dCB0byB0aGUgaW50ZXJwb2xhdGlvbi5cbiAgICpcbiAgICogSWdub3JlZCB1bmxlc3MgdGhlIGNvbG91ciBzb3VyY2UgaXMgYSBnZW5lOiB0aGVyZSBpcyBub3RoaW5nIGVsc2UgdG8gbWFwLlxuICAgKi9cbiAgZ2VuZU1hcDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlc3RyaWN0IHRoZSAzRCBnZW5lIG1hcCB0byBPTkUgaW1hZ2VkIHNlY3Rpb24sIGJ5IGluZGV4IGludG8gdGhlIGRhdGFzZXQnc1xuICAgKiBzYW1wbGVkIHNlY3Rpb25zOyBudWxsIGRyYXdzIGV2ZXJ5IHNlY3Rpb24ncyBzaGVldC5cbiAgICpcbiAgICogU2VwYXJhdGUgZnJvbSB7QGxpbmsgcG9pbnRTZWN0aW9ufSBzbyB0aGUgY29tYmluYXRpb25zIHN0YXkgb3BlbjogYWxsIHRoZVxuICAgKiBzaGVldHMgd2l0aCBvbmUgc2VjdGlvbidzIGNlbGxzIG92ZXIgdGhlbSBpcyBhIHVzZWZ1bCB2aWV3LCBhbmQgc28gaXMgb25lXG4gICAqIHNoZWV0IGluc2lkZSB0aGUgd2hvbGUgY2xvdWQuIElnbm9yZWQgd2hpbGUge0BsaW5rIGdlbmVNYXBWb2x1bWV9IGlzIHNldCDigJRcbiAgICogaW50ZXJwb2xhdGluZyBhIHNpbmdsZSBzZWN0aW9uIGFsb25nIHogd291bGQgc21lYXIgb25lIHNsaWRlIHRocm91Z2ggdGhlXG4gICAqIHNwZWNpbWVuJ3Mgd2hvbGUgZGVwdGggYW5kIGNhbGwgaXQgYW4gZXN0aW1hdGUuXG4gICAqL1xuICBnZW5lTWFwU2VjdGlvbjogbnVtYmVyIHwgbnVsbDtcbiAgLyoqXG4gICAqIFNtb290aCB0aGUgcGVyLXNlY3Rpb24gZ2VuZSBtYXBzIGFsb25nIHogaW50byBhIGNvbnRpbnVvdXMgVk9MVU1FICgzRCkuXG4gICAqXG4gICAqIFRoZSBzaGVldHMgYXJlIHdoYXQgd2FzIG1lYXN1cmVkIOKAlCBvbmUgZmllbGQgcGVyIGltYWdlZCBzbGlkZSwgd2l0aCB0aGUgZ2Fwc1xuICAgKiBiZXR3ZWVuIHRoZW0gZW1wdHkuIFRoaXMgdHVybnMgdGhlbSBpbnRvIGFuIGVzdGltYXRlIGRlZmluZWQgYmV0d2VlbiB0aGVcbiAgICogc2xpZGVzLCB0aGUgc2FtZSBtb3ZlIHRoZSBjbHVzdGVyIGRlbnNpdHkgdm9sdW1lcyBtYWtlIGFuZCB3aXRoIHRoZSBzYW1lXG4gICAqIGNhdmVhdDogYSBmaWVsZCBtYXkgYmUgaW50ZXJwb2xhdGVkIGJldHdlZW4gc2VjdGlvbnMsIGluZGl2aWR1YWwgY2VsbHMgbWF5XG4gICAqIG5vdCwgYW5kIHRoZSByZXN1bHQgaXMgZHJhd24gYXMgYSB0cmFuc2x1Y2VudCBjbG91ZCBzbyBpdCBjYW5ub3QgYmUgbWlzdGFrZW5cbiAgICogZm9yIG1lYXN1cmVtZW50LlxuICAgKi9cbiAgZ2VuZU1hcFZvbHVtZTogYm9vbGVhbjtcbiAgLyoqIE11bHRpcGxpZXIgb24gdGhlIGdlbmUgbWFwJ3Mga2VybmVsIGJhbmR3aWR0aC4gKi9cbiAgZ2VuZU1hcFNtb290aGluZzogbnVtYmVyO1xuICAvKiogVGhlIGdlbmUgbWFwJ3Mgb3duIG9wYWNpdHkuIFNlcGFyYXRlIGZyb20ge0BsaW5rIG9wYWNpdHl9LCB3aGljaCBiZWxvbmdzIHRvXG4gICAqICB0aGUgbWFya2VyczogdHVybmluZyB0aGUgY2VsbHMgZG93biB0byByZWFkIHRoZSBmaWVsZCB1bmRlcm5lYXRoIG11c3Qgbm90XG4gICAqICB0dXJuIHRoZSBmaWVsZCBkb3duIHdpdGggdGhlbS4gKi9cbiAgZ2VuZU1hcE9wYWNpdHk6IG51bWJlcjtcbiAgLyoqXG4gICAqIERyYXcgY2VsbCBib3VuZGFyaWVzIChmb3IgYSBkYXRhc2V0IHdpdGggYHBvbHlnb25UaWxlc2Agb3IgYHBvbHlnb25zYCkuXG4gICAqXG4gICAqIE91dGxpbmVzIGFyZSBsZXZlbC1vZi1kZXRhaWw6IGNvYXJzZSByaW5ncyB3aGVuIHpvb21lZCBvdXQsIGV2ZXJ5IHZlcnRleCBhdCB0aGVcbiAgICogZmluZXN0IHpvb20sIGFuZCBub25lIGF0IGFsbCBvbmNlIGEgY2VsbCBpcyBhIGZldyBwaXhlbHMgd2lkZSDigJQgdGhlcmUgdGhlXG4gICAqIG9ic2VydmF0aW9uIG1hcmtlcnMgYWxyZWFkeSBkcmF3IGl0IGFzIGEgZG90LlxuICAgKlxuICAgKiBgbnVsbGAgKHRoZSBkZWZhdWx0KSBtZWFucyBhdXRvbWF0aWM6IG9uIGZvciBhbnkgZGF0YXNldCB0aGF0IGhhcyBvdXRsaW5lcywgc2luY2UgYVxuICAgKiBzZWdtZW50ZWQgY2VsbCBpcyBiZXR0ZXIgc2hvd24gYXMgaXRzIHNoYXBlIHRoYW4gYXMgYSBjaXJjbGUuIEEgYm9vbGVhbiBpcyB0aGVcbiAgICogdXNlcidzIGV4cGxpY2l0IGNob2ljZS5cbiAgICovXG4gIHNob3dDZWxsczogYm9vbGVhbiB8IG51bGw7XG4gIC8qKiBXaGljaCBib3VuZGFyeSBzZXQgKGBjZWxsYCwgYG51Y2xldXNgLCBvciBgYm90aGAg4oCUIGNlbGxzIGFzIHNldCBieVxuICAgKiAge0BsaW5rIGNlbGxEcmF3fSwgbnVjbGVpIG91dGxpbmVkIG92ZXIgdGhlbSk7IG51bGwgdGFrZXMgdGhlIGRhdGFzZXQncyBkZWZhdWx0LiAqL1xuICBjZWxsU2V0OiBzdHJpbmcgfCBudWxsO1xuICAvKipcbiAgICogV2hhdCBjb2xvdXJzIHRoZSBjZWxscyDigJQgWGVuaXVtIEV4cGxvcmVyJ3MgXCJDZWxsIENvbG9yXCI6IHRoZSBhY3RpdmUgZ3JvdXBcbiAgICogKHtAbGluayBjZWxsVHlwZUNvbHVtbn0pLCBvbmUgZ2VuZSdzIGV4cHJlc3Npb24gKHtAbGluayBjZWxsQ29sb3JHZW5lfSksIHRoZSBjZWxsJ3NcbiAgICogdHJhbnNjcmlwdCBkZW5zaXR5LCBvbmUgZmxhdCBjb2xvdXIsIG9yIGhvdyB0aGUgY2VsbCB3YXMgc2VnbWVudGVkLlxuICAgKi9cbiAgY2VsbENvbG9yTW9kZTogJ2dyb3VwJyB8ICdnZW5lJyB8ICd0cmFuc2NyaXB0RGVuc2l0eScgfCAnc2luZ2xlJyB8ICdzZWdtZW50YXRpb24nO1xuICBjZWxsQ29sb3JHZW5lOiBzdHJpbmcgfCBudWxsO1xuICAvKiogYCNycmdnYmJgIGZvciB7QGxpbmsgY2VsbENvbG9yTW9kZX0gYHNpbmdsZWAuICovXG4gIGNlbGxTaW5nbGVDb2xvcjogc3RyaW5nO1xuICAvKipcbiAgICogQ2F0ZWdvcmllcyBvZiB7QGxpbmsgY2VsbFR5cGVDb2x1bW59IHN3aXRjaGVkIG9mZiBpbiB0aGUgZ3JvdXBzIGxpc3Q6IHRoZWlyIGNlbGxzIGFyZVxuICAgKiBub3QgZHJhd24sIG5vciB0aGUgdHJhbnNjcmlwdHMgaW5zaWRlIHRoZW0uIENsZWFyZWQgd2hlbiB0aGUgZ3JvdXAgY29sdW1uIGNoYW5nZXMuXG4gICAqL1xuICBoaWRkZW5Hcm91cHM6IHN0cmluZ1tdO1xuICAvKiogRHJhdyB0aGUgdGlzc3VlIGltYWdlICh0aGUgSW1hZ2VzIHNlY3Rpb24ncyBzd2l0Y2gpLiAqL1xuICBzaG93SW1hZ2U6IGJvb2xlYW47XG4gIC8qKiBEcmF3IHRoZSBhbm5vdGF0aW9uIHJlZ2lvbnMgKHRoZSBBbm5vdGF0aW9ucyBzZWN0aW9uJ3Mgc3dpdGNoKS4gU2VsZWN0aW5nIGZyb20gdGhlbVxuICAgKiAgc3RpbGwgd29ya3Mgd2hpbGUgdGhleSBhcmUgaGlkZGVuLiAqL1xuICBzaG93QW5ub3RhdGlvbnM6IGJvb2xlYW47XG4gIC8qKiBGaWxsIHRoZSBjZWxscyB3aXRoIHRoZWlyIGNvbG91ciwgb3V0bGluZSB0aGVtLCBvciBib3RoLiAqL1xuICBjZWxsRHJhdzogJ2ZpbGwnIHwgJ291dGxpbmUnIHwgJ2JvdGgnO1xuICAvKiogT3BhY2l0eSBvZiB0aGUgY2VsbCBmaWxsIChvdXRsaW5lcyBkcmF3IG9wYXF1ZSkuICovXG4gIGNlbGxPcGFjaXR5OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgY2F0ZWdvcmljYWwgY29sdW1uIHRoYXQgc2F5cyB3aGF0IFRZUEUgZWFjaCBjZWxsIGlzOiBpdCBjb2xvdXJzIHRoZSBjZWxsc1xuICAgKiB3aGVuZXZlciBub3RoaW5nIGVsc2UgaXMgY2hvc2VuLCBhbmQgaXQgY29sb3VycyBldmVyeSB0cmFuc2NyaXB0IGJ5IHRoZSBjZWxsIGl0XG4gICAqIGZhbGxzIGluLiBOdWxsIHBpY2tzIHRoZSBkYXRhc2V0J3MgZmlyc3QgY2F0ZWdvcmljYWwgY29sdW1uLiBTd2FwcGluZyBiZXR3ZWVuIGFcbiAgICogcGlwZWxpbmUncyBjbHVzdGVyaW5nIGFuZCBhIGN1cmF0ZWQgYW5ub3RhdGlvbiBpcyBzd2FwcGluZyB0aGlzLlxuICAgKi9cbiAgY2VsbFR5cGVDb2x1bW46IHN0cmluZyB8IG51bGw7XG4gIC8qKiBHZW5lcyB3aG9zZSB0cmFuc2NyaXB0cyBhcmUgZHJhd24uICovXG4gIHRyYW5zY3JpcHRHZW5lczogc3RyaW5nW107XG4gIC8qKiBTZWxlY3RlZCBnZW5lcyBzd2l0Y2hlZCBvZmYgd2l0aCB0aGVpciBleWUgdG9nZ2xlIOKAlCBrZXB0IGluIHRoZSBsaXN0LCBub3QgZHJhd24uICovXG4gIHRyYW5zY3JpcHRIaWRkZW5HZW5lczogc3RyaW5nW107XG4gIC8qKiBQZXItZ2VuZSBtYXJrZXIgY29sb3VyIChgI3JyZ2diYmApOyBnZW5lcyBub3QgbGlzdGVkIHRha2UgdGhlIHBhbGV0dGUgYnkgcG9zaXRpb24uICovXG4gIHRyYW5zY3JpcHRHZW5lQ29sb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogTmFtZWQgZ2VuZSBncm91cHMgKGUuZy4gbWFya2VyIGdlbmVzIHBlciBjZWxsIHR5cGUpIGZvciB0aGUgc2VsZWN0ZWQtZ2VuZXMgdHJlZS4gKi9cbiAgdHJhbnNjcmlwdEdlbmVHcm91cHM6IHsgbmFtZTogc3RyaW5nOyBnZW5lczogc3RyaW5nW10gfVtdO1xuICAvKipcbiAgICogRHJhdyBFVkVSWSBnZW5lJ3MgdHJhbnNjcmlwdHMgaW5zdGVhZCBvZiB7QGxpbmsgdHJhbnNjcmlwdEdlbmVzfTogZ3JvdXBlZCBpbnRvIGJpbnNcbiAgICogc2l6ZWQgYnkgaG93IG1hbnkgdHJhbnNjcmlwdHMgdGhleSBob2xkLCBmaW5lciBhcyB0aGUgY2FtZXJhIHpvb21zIGluLCBkb3duIHRvIG9uZVxuICAgKiBtYXJrZXIgcGVyIHRyYW5zY3JpcHQgb25jZSB0aG9zZSBmaXQge0BsaW5rIHRyYW5zY3JpcHRCdWRnZXR9LlxuICAgKi9cbiAgdHJhbnNjcmlwdEFsbEdlbmVzOiBib29sZWFuO1xuICAvKipcbiAgICogTW9zdCB0cmFuc2NyaXB0IG1hcmtlcnMgZHJhd24gYXQgb25jZS4gVGhlIGxldmVsIG9mIGRldGFpbCBpcyBjaG9zZW4gdG8gc3RheSB1bmRlciBpdCxcbiAgICogd2hpY2ggaXMgd2hhdCBrZWVwcyBwYW4gYW5kIHpvb20gcmVzcG9uc2l2ZSBob3dldmVyIGRlbnNlIHRoZSBkYXRhIGlzLlxuICAgKi9cbiAgdHJhbnNjcmlwdEJ1ZGdldDogbnVtYmVyO1xuICAvKipcbiAgICogSG93IHRyYW5zY3JpcHRzIGFyZSBkcmF3bjogYGNpcmNsZXNgIHNpemVkIGJ5IGhvdyBtYW55IHRyYW5zY3JpcHRzIGVhY2ggc3RhbmRzIGZvcixcbiAgICogYGdseXBoc2AgKG9uZSBpY29uIHNoYXBlIHBlciBnZW5lKSwgb3IgYSBgZGVuc2l0eWAgcmFzdGVyLiBDaXJjbGVzIGFuZCBnbHlwaHMgYXJlXG4gICAqIGxldmVsLW9mLWRldGFpbCDigJQgYWdncmVnYXRlZCB3aGVuIHpvb21lZCBvdXQsIG9uZSBwZXIgdHJhbnNjcmlwdCBhdCB0aGUgZmluZXN0IHpvb20uXG4gICAqL1xuICB0cmFuc2NyaXB0TW9kZTogJ29mZicgfCAnY2lyY2xlcycgfCAnZ2x5cGhzJyB8ICdkZW5zaXR5JztcbiAgLyoqIENvbG91ciB0cmFuc2NyaXB0cyBieSB0aGUgdHlwZSBvZiB0aGUgY2VsbCB0aGV5IGZhbGwgaW4sIG9yIGJ5IGdlbmUuICovXG4gIHRyYW5zY3JpcHRDb2xvckJ5OiAnY2VsbFR5cGUnIHwgJ2dlbmUnO1xuICAvKiogR2x5cGggcGVyIGdlbmUgZm9yIGBnbHlwaHNgIG1vZGU7IGdlbmVzIG5vdCBsaXN0ZWQgdGFrZSBvbmUgYnkgcG9zaXRpb24uICovXG4gIHRyYW5zY3JpcHRHbHlwaHM6IFJlY29yZDxzdHJpbmcsIFRyYW5zY3JpcHRHbHlwaE5hbWU+O1xuICAvKiogTXVsdGlwbGllciBvbiB0cmFuc2NyaXB0IG1hcmtlciBzaXplLiAqL1xuICB0cmFuc2NyaXB0U2NhbGU6IG51bWJlcjtcbiAgdHJhbnNjcmlwdE9wYWNpdHk6IG51bWJlcjtcbiAgLyoqIGBoaWdoYCBrZWVwcyBvbmx5IGNvbmZpZGVudGx5IGRlY29kZWQgdHJhbnNjcmlwdHMuICovXG4gIHRyYW5zY3JpcHRRdWFsaXR5OiAnaGlnaCcgfCAnYWxsJztcbiAgLyoqIE9wYWNpdHkgb2YgdGhlIHRyYW5zY3JpcHQgZGVuc2l0eSByYXN0ZXIuICovXG4gIGRlbnNpdHlPcGFjaXR5OiBudW1iZXI7XG4gIC8qKiBEZW5zaXR5IGJpbiBlZGdlIGluIG9ic2VydmF0aW9uIHVuaXRzICjCtW0pOiAxMCwgMjAsIDQwIG9yIDgwLiAqL1xuICBkZW5zaXR5QmluOiBudW1iZXI7XG4gIC8qKiBDb2xvdXIgd2luZG93IGluIHRyYW5zY3JpcHRzIHBlciB1bml0wrIgKMK1bcKyKTsgbnVsbCBkZXJpdmVzIGl0IGZyb20gdGhlIGRhdGEuICovXG4gIGRlbnNpdHlSYW5nZTogW251bWJlciwgbnVtYmVyXSB8IG51bGw7XG4gIC8qKiBDb2xvcm1hcCBmb3IgdGhlIGRlbnNpdHkgYmluczsgbnVsbCB1c2VzIEluZmVybm8uICovXG4gIGRlbnNpdHlDb2xvcm1hcDogQ29sb3JtYXBWYWx1ZSB8IG51bGw7XG59XG5cbi8qKiBUcmFuc2NyaXB0IGdseXBoIG5hbWVzIOKAlCBzZWUgYFRSQU5TQ1JJUFRfR0xZUEhTYCBpbiBgc3BhdGlhbC9zcGF0aWFsLXRpbGVzLnRzYC4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zY3JpcHRHbHlwaE5hbWUgPVxuICB8ICdjaXJjbGUnIHwgJ3N0YXInIHwgJ3RyaWFuZ2xlJyB8ICdzcXVhcmUnIHwgJ2RpYW1vbmQnIHwgJ2Nyb3NzJyB8ICdoZXhhZ29uJ1xuICB8ICd0cmlhbmdsZS1kb3duJyB8ICdwZW50YWdvbicgfCAneCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NQQVRJQUxfVklFVzogU3BhdGlhbFZpZXdTdGF0ZSA9IHtcbiAgY29sb3JCeTogbnVsbCxcbiAgcG9pbnRTY2FsZTogMSxcbiAgb3BhY2l0eTogMSxcbiAgbG9nU2NhbGU6IGZhbHNlLFxuICBwZXJjZW50aWxlQ2xpcDogWzAuMDEsIDAuOTldLFxuICBjb250aW51b3VzQ29sb3JtYXA6IG51bGwsXG4gIHNob3dWb2x1bWU6IHRydWUsXG4gIHZvbHVtZU9wYWNpdHk6IDAuNSxcbiAgc2hvd1BvaW50czogdHJ1ZSxcbiAgcG9pbnRTZWN0aW9uOiBudWxsLFxuICBkZW5zaXR5Vm9sdW1lOiBmYWxzZSxcbiAgZGVuc2l0eVNtb290aGluZzogMSxcbiAgZ2VuZU1hcDogZmFsc2UsXG4gIGdlbmVNYXBTZWN0aW9uOiBudWxsLFxuICBnZW5lTWFwVm9sdW1lOiBmYWxzZSxcbiAgZ2VuZU1hcFNtb290aGluZzogMSxcbiAgZ2VuZU1hcE9wYWNpdHk6IDAuODUsXG4gIHNob3dDZWxsczogbnVsbCxcbiAgY2VsbFNldDogbnVsbCxcbiAgY2VsbERyYXc6ICdmaWxsJyxcbiAgY2VsbE9wYWNpdHk6IDAuNTUsXG4gIGNlbGxUeXBlQ29sdW1uOiBudWxsLFxuICB0cmFuc2NyaXB0R2VuZXM6IFtdLFxuICB0cmFuc2NyaXB0SGlkZGVuR2VuZXM6IFtdLFxuICB0cmFuc2NyaXB0R2VuZUNvbG9yczoge30sXG4gIHRyYW5zY3JpcHRHZW5lR3JvdXBzOiBbXSxcbiAgdHJhbnNjcmlwdEFsbEdlbmVzOiBmYWxzZSxcbiAgdHJhbnNjcmlwdEJ1ZGdldDogMTAwXzAwMCxcbiAgdHJhbnNjcmlwdE1vZGU6ICdvZmYnLFxuICB0cmFuc2NyaXB0Q29sb3JCeTogJ2NlbGxUeXBlJyxcbiAgdHJhbnNjcmlwdEdseXBoczoge30sXG4gIHRyYW5zY3JpcHRTY2FsZTogMSxcbiAgdHJhbnNjcmlwdE9wYWNpdHk6IDAuOSxcbiAgdHJhbnNjcmlwdFF1YWxpdHk6ICdoaWdoJyxcbiAgZGVuc2l0eU9wYWNpdHk6IDAuOCxcbiAgZGVuc2l0eUJpbjogMTAsXG4gIGRlbnNpdHlSYW5nZTogbnVsbCxcbiAgZGVuc2l0eUNvbG9ybWFwOiBudWxsLFxuICBjZWxsQ29sb3JNb2RlOiAnZ3JvdXAnLFxuICBjZWxsQ29sb3JHZW5lOiBudWxsLFxuICBjZWxsU2luZ2xlQ29sb3I6ICcjNGZjM2Y3JyxcbiAgaGlkZGVuR3JvdXBzOiBbXSxcbiAgc2hvd0ltYWdlOiB0cnVlLFxuICBzaG93QW5ub3RhdGlvbnM6IHRydWUsXG59O1xuIl19
@@ -63,4 +63,4 @@ export const PLOT_MODE_SESSION = new InjectionToken('PLOT_MODE_SESSION');
63
63
  export function contributedPlotTypeOption(d, base) {
64
64
  return { ...d, source: base.source };
65
65
  }
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxvdC10eXBlLWNvbnRyaWJ1dGlvbi5jb250cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RzL3Bsb3QtdHlwZS1jb250cmlidXRpb24uY29udHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQXNHckQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQ2xDLElBQUksY0FBYyxDQUFrQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ2pGLGtFQUFrRTtBQUNsRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBa0IsbUJBQW1CLENBQUMsQ0FBQztBQUMxRixrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQWtCLG1CQUFtQixDQUFDLENBQUM7QUFhMUYsbUZBQW1GO0FBQ25GLE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsQ0FBZ0MsRUFDaEMsSUFBd0I7SUFFeEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSG93IGEgcGxvdCBtb2RlIGdldHMgaW50byB0aGUgcGxvdC10eXBlIHNlbGVjdG9yIHdpdGhvdXQgdGhpcyBsaWJyYXJ5IGtub3dpbmdcbiAqIHdoYXQgaXQgaXMuXG4gKlxuICogQSBwYWNrYWdlIGNvbnRyaWJ1dGVzIGEgbW9kZSBieSBwcm92aWRpbmcgYSB7QGxpbmsgUGxvdFR5cGVDb250cmlidXRpb259IG9uIHRoZVxuICoge0BsaW5rIFBMT1RfVFlQRV9DT05UUklCVVRJT05TfSBtdWx0aS1wcm92aWRlciB0b2tlbiwgdGhlIHNhbWUgd2F5XG4gKiBgVE9PTEJBUl9UT09MU2AgY29udHJpYnV0ZXMgdG9vbGJhciB0b29scy4gTm90aGluZyByZWdpc3RlcnMgYXQgaW1wb3J0IHRpbWU6XG4gKiBpbnN0YWxsaW5nIGEgcGFja2FnZSBtYWtlcyBhIG1vZGUgYXZhaWxhYmxlLCBhbmQgYWRkaW5nIGl0cyBwcm92aWRlciB0dXJucyBpdFxuICogb24uIEEgcGxhaW4gb2JqZWN0IHdvcmtzLCBzbyB0aGUgY29udHJpYnV0aW5nIHBhY2thZ2UgbmVlZHMgbm8gQW5ndWxhclxuICogY29tcGlsZXIgYW5kIG5vIGRlY29yYXRvcnM6XG4gKlxuICogICAgIHsgcHJvdmlkZTogUExPVF9UWVBFX0NPTlRSSUJVVElPTlMsIHVzZVZhbHVlOiBteUNvbnRyaWJ1dGlvbiwgbXVsdGk6IHRydWUgfVxuICogICAgIHsgcHJvdmlkZTogUExPVF9UWVBFX0NPTlRSSUJVVElPTlMsIHVzZUZhY3Rvcnk6ICgpID0+IG1ha2VDb250cmlidXRpb24oKSwgbXVsdGk6IHRydWUgfVxuICpcbiAqIFByb3ZpZGUgbm90aGluZyBhbmQgdGhlIHNlbGVjdG9yLCB0aGUgcmVuZGVyIHBhdGggYW5kIHRoZSBwYW5lbCBhcmVhIGJlaGF2ZVxuICogZXhhY3RseSBhcyB0aGV5IGRpZCBiZWZvcmUgdGhpcyBleHRlbnNpb24gcG9pbnQgZXhpc3RlZC5cbiAqXG4gKiBXSFkgQSBDT05UUklCVVRFRCBNT0RFIFJJREVTIE9OIEEgQlVJTFQtSU4gT05FXG4gKiBBIGNvbnRyaWJ1dGVkIG1vZGUgZG9lcyBub3QgYnJpbmcgYSByZW5kZXJlci4gSXQgbmFtZXMgYSBidWlsdC1pblxuICoge0BsaW5rIENvbnRyaWJ1dGVkUGxvdFR5cGVEZXNjcmlwdG9yLmJhc2VUeXBlfSDigJQgaW4gdjEgb25seSBgUGxvdFR5cGUuSU1BR0VgLFxuICogdGhlIE9wZW5TZWFkcmFnb24gdmlldyDigJQgYW5kIHRoZSB2aXN1YWxpemVyIHBsb3RzIGV4YWN0bHkgYXMgaWYgdGhhdCB0eXBlIGhhZFxuICogYmVlbiBzZWxlY3RlZDogc2FtZSBiYWNrZW5kLCBzYW1lIHRvb2xiYXIsIHNhbWUgcmVnaW9uIHRvb2xzLCBzYW1lIHdoZWVsXG4gKiBoYW5kbGluZy4gVGhlIGNvbnRyaWJ1dGlvbiB0aGVuIGRyYXdzIG92ZXIgaXQgdGhyb3VnaCB0aGVcbiAqIHtAbGluayBQbG90TW9kZVZpZXdwb3J0fSBhbmQgdGFsa3MgdG8gdGhlIHZpZXdlciB0aHJvdWdoIHRoZSBwdWJsaWNcbiAqIHtAbGluayBJVmlzdWFsaXplcn0uIFRoYXQga2VlcHMgZXZlcnkgcmVuZGVyaW5nIGRlY2lzaW9uIGluIG9uZSBwbGFjZSBhbmQgbWVhbnNcbiAqIGEgY29udHJpYnV0aW9uIGNhbiBuZXZlciBiZSBoYWxmLXN1cHBvcnRlZCBieSBzb21lIGNvZGUgcGF0aCB0aGF0IHN3aXRjaGVzIG9uXG4gKiB0aGUgcGxvdCB0eXBlLlxuICpcbiAqIFdIQVQgVEhFIFZJU1VBTElaRVIgR1VBUkFOVEVFU1xuICogIDEuIENvbnRyaWJ1dGVkIGRlc2NyaXB0b3JzIGFyZSBhcHBlbmRlZCBhZnRlciB0aGUgYnVpbHQtaW4gb25lcyBhbmQgY3VyYXRlZCBieVxuICogICAgIHRoZSBzYW1lIGBwcm9kdWN0aW9uTGFiZWxgIC8gdGVzdC1tb2RlIC8gYHJlcXVpcmVzKmAgcnVsZXMuXG4gKiAgMi4gU2VsZWN0aW5nIG9uZSBwbG90cyB3aXRoIGBiYXNlVHlwZWAncyBiYWNrZW5kLCB0aGVuIGNhbGxzIGBhY3RpdmF0ZShjdHgpYFxuICogICAgIG9uY2UgdGhlIHZpZXdwb3J0IGlzIHJlYWR5LlxuICogIDMuIExlYXZpbmcgdGhlIG1vZGUg4oCUIGFub3RoZXIgdHlwZSwgYW4gaW1hZ2Ugc3dpdGNoIChvciBhbnkgcmUtcmVuZGVyIG9mIHRoZVxuICogICAgIGJhc2UgdmlldyksIG9yIHRoZSB2aXN1YWxpemVyIGJlaW5nIGRlc3Ryb3llZCDigJQgY2FsbHMgYHNlc3Npb24uZGVhY3RpdmF0ZSgpYFxuICogICAgIGV4YWN0bHkgb25jZSwgYmVmb3JlIHRoZSBuZXh0IG1vZGUgZHJhd3MuIElmIHRoZSBtb2RlIGlzIHN0aWxsIHNlbGVjdGVkXG4gKiAgICAgd2hlbiB0aGUgbmV3IGltYWdlIGhhcyBwbG90dGVkLCBhIGZyZXNoIHNlc3Npb24gaXMgYWN0aXZhdGVkIGZvciBpdC5cbiAqICA0LiBgcGFuZWxgIGlzIHNob3duIG9ubHkgd2hpbGUgYSBzZXNzaW9uIGlzIGxpdmUuXG4gKiAgNS4gQSB0aHJvd24gZXJyb3Igb3IgcmVqZWN0ZWQgcHJvbWlzZSBmcm9tIGBhY3RpdmF0ZWAsIGBkZWFjdGl2YXRlYCwgYG1vdW50YFxuICogICAgIG9yIGEgbW91bnQncyB0ZWFyZG93biBpcyBjYXVnaHQgYW5kIGxvZ2dlZDsgbm9uZSBlc2NhcGVzLCBzbyBhIGNvbnRyaWJ1dGlvblxuICogICAgIGNhbm5vdCBicmVhayB0aGUgdmlld2VyLiBGYWlsaW5nIHRvIHN0YXJ0IChgYWN0aXZhdGVgLCBgbW91bnRgLCBvciBhIHBhbmVsXG4gKiAgICAgY29tcG9uZW50IHRocm93aW5nIHdoaWxlIGl0IGlzIGNyZWF0ZWQgLyBmaXJzdCByZW5kZXJlZCkgZmFsbHMgYmFja1xuICogICAgIHRvIGBiYXNlVHlwZWAuIEZhaWxpbmcgdG8gY2xlYW4gdXAgZmFsbHMgYmFjayB3aGVuIHRoYXQgc2FtZSBtb2RlIGlzIGJlaW5nXG4gKiAgICAgcmUtYWN0aXZhdGVkIChiYXNlIHJlLXJlbmRlciwgaW1hZ2Ugc3dpdGNoKSDigJQgaW1tZWRpYXRlbHkgaWYgaXQgYWxyZWFkeSBpc1xuICogICAgIGxpdmUgYWdhaW4g4oCUIGFuZCBpcyBvbmx5IGxvZ2dlZCB3aGVuIHRoZSB1c2VyIGhhcyBtb3ZlZCB0byBhbm90aGVyIG1vZGU7IHRoZVxuICogICAgIHVzZXIgZXhwbGljaXRseSBzZWxlY3RpbmcgaXQgYWdhaW4gZ2V0cyBhIGZyZXNoIGF0dGVtcHQuXG4gKiAgNi4ge0BsaW5rIFBMT1RfVFlQRV9DT05UUklCVVRJT05TfSBoYXMgbm8gZmFjdG9yeTogbm8gcHJvdmlkZXJzLCBubyBtb2Rlcy5cbiAqL1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgdHlwZSB7IElJbWFnZUluZm8gfSBmcm9tICcuL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB0eXBlIHsgUGxvdFR5cGUsIFBsb3RUeXBlRGVzY3JpcHRvciwgUGxvdFR5cGVJZCB9IGZyb20gJy4vcGxvdC10eXBlJztcbmltcG9ydCB0eXBlIHsgSVZpc3VhbGl6ZXIgfSBmcm9tICcuL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuXG4vKiogQSByZWN0YW5nbGUgaW4gbGV2ZWwtMCBpbWFnZSBwaXhlbHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsb3RNb2RlUmVjdCB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLyoqIFNlbGVjdG9yIG1ldGFkYXRhIGZvciBhIGNvbnRyaWJ1dGVkIHBsb3QgbW9kZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJpYnV0ZWRQbG90VHlwZURlc2NyaXB0b3Ige1xuICAvKiogVW5pcXVlIGlkLCBuYW1lc3BhY2VkLCBlLmcuICdkaWFubmUnLiBNdXN0IG5vdCBjbGFzaCB3aXRoIFBsb3RUeXBlIHZhbHVlcy4gKi9cbiAgdHlwZTogc3RyaW5nO1xuICAvKiogVGVzdC1tb2RlIGxhYmVsLCBlLmcuICdEaWdpdGFsIFBhdGhvbG9neSAtIERJQU5ORScuICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0LXNlbGVjdG9yIGxhYmVsOyBvbWl0IHRvIG1ha2UgdGhlIG1vZGUgdGVzdC1vbmx5IChzYW1lIHJ1bGUgYXMgYnVpbHQtaW5zKS4gKi9cbiAgcHJvZHVjdGlvbkxhYmVsPzogc3RyaW5nO1xuICAvKiogJ3BpIHBpLeKApicgY2xhc3Mgb3IgYXNzZXQgcGF0aCwgc2FtZSBhcyBQbG90VHlwZURlc2NyaXB0b3IuaWNvbi4gKi9cbiAgaWNvbj86IHN0cmluZztcbiAgLyoqIEFsd2F5cyAnMmQnIGluIHYxLiAqL1xuICBkaW1lbnNpb25zOiAnMmQnO1xuICAvKiogQnVpbHQtaW4gdHlwZSB3aG9zZSBiYWNrZW5kIHJlbmRlcnMgdGhlIGJhc2UgaW1hZ2UuIHYxIHN1cHBvcnRzIFBsb3RUeXBlLklNQUdFIChPU0QpLiAqL1xuICBiYXNlVHlwZTogUGxvdFR5cGU7XG4gIC8qKiBTYW1lIGdhdGVzIGFzIFBsb3RUeXBlRGVzY3JpcHRvciwgZXZhbHVhdGVkIGluIGFkZGl0aW9uIHRvIHRoZSBiYXNlIHR5cGUncyBvd24uICovXG4gIHJlcXVpcmVzR3JheXNjYWxlPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTdGFjaz86IGJvb2xlYW47XG4gIC8qKiBIaWRkZW4gdW50aWwgYSBgU3BhdGlhbERhdGFzZXRgIGlzIHB1Ymxpc2hlZCBvbiBTUEFUSUFMX0RBVEFfUE9SVCAoYW4gb3ZlcmxheSBvZiBzcGF0aWFsIG9ic2VydmF0aW9ucykuICovXG4gIHJlcXVpcmVzU3BhdGlhbERhdGE/OiBib29sZWFuO1xuICAvKiogSGlkZGVuIHVubGVzcyB0aGUgcHVibGlzaGVkIGRhdGFzZXQgY2FycmllcyBgb2JzZXJ2YXRpb25zLnpgLiAqL1xuICByZXF1aXJlc1NwYXRpYWwzZD86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgYmFzZSB2aWV3J3Mgdmlld3BvcnQsIGFzIGEgY29udHJpYnV0ZWQgbW9kZSBzZWVzIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG90TW9kZVZpZXdwb3J0IHtcbiAgLyoqIEVsZW1lbnQgdGhlIG1vZGUncyBvdmVybGF5IGNhbnZhcy9TVkcgYXR0YWNoZXMgdG87IGZpbGxzIHRoZSBwbG90IGFyZWEuICovXG4gIGdldE92ZXJsYXlDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsO1xuICAvKiogTGV2ZWwtMCBpbWFnZSBweCAtPiBjbGllbnQgcHgsIGFuZCB0aGUgcmV2ZXJzZS4gKi9cbiAgZGF0YVRvQ2xpZW50KHg6IG51bWJlciwgeTogbnVtYmVyKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuICBjbGllbnRUb0RhdGEoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gIC8qKiBTY3JlZW4gcHggcGVyIGltYWdlIHB4IGF0IHRoZSBjdXJyZW50IHpvb20uICovXG4gIGRhdGFMZW5ndGhUb1NjcmVlbihsZW46IG51bWJlcik6IG51bWJlcjtcbiAgaXNSZWFkeSgpOiBib29sZWFuO1xuICAvKiogVmlzaWJsZSBpbWFnZSByZWN0IGluIGxldmVsLTAgcHgsIGVtaXR0ZWQgb24gZXZlcnkgcmVkcmF3IGZyYW1lIChwYW4vem9vbSBhbmltYXRpb24pLlxuICAgKiAgQSBuZXcgc3Vic2NyaWJlciBmaXJzdCByZWNlaXZlcyB0aGUgY3VycmVudCByZWN0IHdoZW4gdGhlIHZpZXdwb3J0IGlzIHJlYWR5LiAqL1xuICBmcmFtZSQ6IE9ic2VydmFibGU8UGxvdE1vZGVSZWN0PjtcbiAgLyoqIFNhbWUgcmVjdCwgZW1pdHRlZCBvbmNlIHRoZSB2aWV3cG9ydCBzZXR0bGVzIChleGlzdGluZyBnZXRWaWV3cG9ydENoYW5nZSQgc2VtYW50aWNzKS5cbiAgICogIEEgbmV3IHN1YnNjcmliZXIgZmlyc3QgcmVjZWl2ZXMgdGhlIGN1cnJlbnQgcmVjdCB3aGVuIHRoZSB2aWV3cG9ydCBpcyByZWFkeS4gKi9cbiAgc2V0dGxlZCQ6IE9ic2VydmFibGU8UGxvdE1vZGVSZWN0Pjtcbn1cblxuLyoqIEV2ZXJ5dGhpbmcgYSBjb250cmlidXRlZCBtb2RlIGdldHMgdG8gd29yayB3aXRoIHdoaWxlIGl0IGlzIGFjdGl2ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvdE1vZGVDb250ZXh0IHtcbiAgLyoqIEZ1bGwgcHVibGljIHZpc3VhbGl6ZXIgQVBJOiByZWdpb25zLCByZWdpb24gb3ZlcmxheSAodG9vbCBtb2RlcyksIHVuZG8sIGV0Yy4gKi9cbiAgdmlzdWFsaXplcjogSVZpc3VhbGl6ZXI7XG4gIHZpZXdwb3J0OiBQbG90TW9kZVZpZXdwb3J0O1xuICAvKiogQ3VycmVudCBpbWFnZSBpbmZvIGZyb20gSU1BR0VfU1RBVEVfUE9SVCAobnVsbCB1bnRpbCBhbiBpbWFnZSBpcyBsb2FkZWQpLiAqL1xuICBpbWFnZUluZm8kOiBPYnNlcnZhYmxlPElJbWFnZUluZm8gfCBudWxsPjtcbn1cblxuLyoqIEEgbGl2ZSBhY3RpdmF0aW9uIG9mIGEgY29udHJpYnV0ZWQgbW9kZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvdE1vZGVTZXNzaW9uIHtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGxlYXZlcyB0aGUgbW9kZSwgdGhlIGltYWdlIGNoYW5nZXMsIG9yIHRoZSB2aXN1YWxpemVyIGlzIGRlc3Ryb3llZC4gKi9cbiAgZGVhY3RpdmF0ZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBtb2RlJ3Mgc2lkZSBwYW5lbCwgc2hvd24gaW4gdGhlIHZpc3VhbGl6ZXIncyByaWdodC1oYW5kIHBhbmVsIGFyZWEgd2hpbGVcbiAqIGEgc2Vzc2lvbiBpcyBsaXZlLiBUd28gZm9ybXM6XG4gKlxuICogIC0gYGNvbXBvbmVudGA6IGFuIEFuZ3VsYXIgY29tcG9uZW50LCByZW5kZXJlZCB0aHJvdWdoIGBOZ0NvbXBvbmVudE91dGxldGBcbiAqICAgIHdpdGgge0BsaW5rIFBMT1RfTU9ERV9DT05URVhUfSBhbmQge0BsaW5rIFBMT1RfTU9ERV9TRVNTSU9OfSBpbiBpdHNcbiAqICAgIGluamVjdG9yLiBOZWVkcyBhbiBBT1QtY29tcGlsZWQgKHBhcnRpYWwtSXZ5KSBjb21wb25lbnQuXG4gKiAgLSBgbW91bnRgOiBmcmFtZXdvcmstYWdub3N0aWMuIFRoZSB2aXN1YWxpemVyIGhhbmRzIG92ZXIgYW4gZW1wdHkgaG9zdFxuICogICAgZWxlbWVudCBhZnRlciBgYWN0aXZhdGVgIHJlc29sdmVzOyB0aGUgZnVuY3Rpb24gcmVuZGVycyBpbnRvIGl0IGFuZCByZXR1cm5zXG4gKiAgICBhIHRlYXJkb3duLiBUaGUgdGVhcmRvd24gaXMgY2FsbGVkIGV4YWN0bHkgb25jZSB3aGVuIHRoZSBtb2RlIGRlYWN0aXZhdGVzLFxuICogICAgYmVmb3JlIGBzZXNzaW9uLmRlYWN0aXZhdGUoKWAsIGFuZCB0aGUgaG9zdCBlbGVtZW50IGlzIHRoZW4gcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGxvdE1vZGVQYW5lbCA9XG4gIHwgeyB0aXRsZTogc3RyaW5nOyBjb21wb25lbnQ6IFR5cGU8dW5rbm93bj4gfVxuICB8IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBtb3VudChob3N0OiBIVE1MRWxlbWVudCwgY3R4OiBQbG90TW9kZUNvbnRleHQsIHNlc3Npb246IFBsb3RNb2RlU2Vzc2lvbik6ICgpID0+IHZvaWQ7XG4gICAgfTtcblxuLyoqIEEgcGxvdCBtb2RlIGNvbnRyaWJ1dGVkIHRvIHRoZSBzZWxlY3Rvci4gQSBwbGFpbiBvYmplY3QgaXMgZW5vdWdoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG90VHlwZUNvbnRyaWJ1dGlvbiB7XG4gIGRlc2NyaXB0b3I6IENvbnRyaWJ1dGVkUGxvdFR5cGVEZXNjcmlwdG9yO1xuICAvKiogQ2FsbGVkIGFmdGVyIHRoZSBiYXNlIGJhY2tlbmQgaGFzIHBsb3R0ZWQgdGhlIGltYWdlIGluIHRoaXMgbW9kZS4gKi9cbiAgYWN0aXZhdGUoY3R4OiBQbG90TW9kZUNvbnRleHQpOiBQbG90TW9kZVNlc3Npb24gfCBQcm9taXNlPFBsb3RNb2RlU2Vzc2lvbj47XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzaWRlIHBhbmVsLCByZW5kZXJlZCBpbiB0aGUgdmlzdWFsaXplcidzIHJpZ2h0LWhhbmQgcGFuZWwgYXJlYSB3aGlsZSB0aGVcbiAgICogbW9kZSBpcyBhY3RpdmUuIEEgY29tcG9uZW50IHBhbmVsIGNhbiBpbmplY3QgUExPVF9NT0RFX0NPTlRFWFQgYW5kIFBMT1RfTU9ERV9TRVNTSU9OLlxuICAgKi9cbiAgcGFuZWw/OiBQbG90TW9kZVBhbmVsO1xufVxuXG4vKipcbiAqIE11bHRpLXByb3ZpZGVyIHRva2VuIGZvciBjb250cmlidXRlZCBwbG90IG1vZGVzLlxuICpcbiAqIERlbGliZXJhdGVseSBoYXMgbm8gYGZhY3RvcnlgOiB1bnJlZ2lzdGVyZWQgbWVhbnMgbm8gY29udHJpYnV0ZWQgbW9kZXMsIGFuZCB0aGVcbiAqIGxpYnJhcnkgYmVoYXZlcyBleGFjdGx5IGFzIGJlZm9yZS4gVGhlIHZpc3VhbGl6ZXIgaW5qZWN0cyBpdCBgeyBvcHRpb25hbDogdHJ1ZSB9YFxuICogYW5kIHRyZWF0cyBudWxsIGFzIGVtcHR5LlxuICovXG5leHBvcnQgY29uc3QgUExPVF9UWVBFX0NPTlRSSUJVVElPTlMgPVxuICBuZXcgSW5qZWN0aW9uVG9rZW48cmVhZG9ubHkgUGxvdFR5cGVDb250cmlidXRpb25bXT4oJ1BMT1RfVFlQRV9DT05UUklCVVRJT05TJyk7XG4vKiogVGhlIGFjdGl2ZSBtb2RlJ3MgY29udGV4dCwgaW4gYSBjb21wb25lbnQgcGFuZWwncyBpbmplY3Rvci4gKi9cbmV4cG9ydCBjb25zdCBQTE9UX01PREVfQ09OVEVYVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQbG90TW9kZUNvbnRleHQ+KCdQTE9UX01PREVfQ09OVEVYVCcpO1xuLyoqIFRoZSBhY3RpdmUgbW9kZSdzIHNlc3Npb24sIGluIGEgY29tcG9uZW50IHBhbmVsJ3MgaW5qZWN0b3IuICovXG5leHBvcnQgY29uc3QgUExPVF9NT0RFX1NFU1NJT04gPSBuZXcgSW5qZWN0aW9uVG9rZW48UGxvdE1vZGVTZXNzaW9uPignUExPVF9NT0RFX1NFU1NJT04nKTtcblxuLyoqXG4gKiBPbmUgZW50cnkgaW4gdGhlIHBsb3QtdHlwZSBzZWxlY3RvcjogYSBidWlsdC1pbiB7QGxpbmsgUGxvdFR5cGVEZXNjcmlwdG9yfVxuICogYXMtaXMsIG9yIGEgY29udHJpYnV0ZWQgZGVzY3JpcHRvciBjb21wbGV0ZWQgd2l0aCBpdHMgYmFzZSB0eXBlJ3MgYHNvdXJjZWAuXG4gKiBFdmVyeSBlbnRyeSB0aGVyZWZvcmUgY2FycmllcyB0aGUgc2FtZSBmaWVsZHMgdGhlIHNlbGVjdG9yIGN1cmF0ZXMgYnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvdFR5cGVPcHRpb24gZXh0ZW5kcyBPbWl0PFBsb3RUeXBlRGVzY3JpcHRvciwgJ3R5cGUnPiB7XG4gIHR5cGU6IFBsb3RUeXBlSWQ7XG4gIC8qKiBTZXQgb25seSBmb3IgYSBjb250cmlidXRlZCBtb2RlOiB0aGUgYnVpbHQtaW4gdHlwZSB0aGF0IHJlbmRlcnMgaXQuICovXG4gIGJhc2VUeXBlPzogUGxvdFR5cGU7XG59XG5cbi8qKiBUaGUgc2VsZWN0b3IgZW50cnkgZm9yIGEgY29udHJpYnV0ZWQgbW9kZSwgZ2l2ZW4gaXRzIGJhc2UgdHlwZSdzIGRlc2NyaXB0b3IuICovXG5leHBvcnQgZnVuY3Rpb24gY29udHJpYnV0ZWRQbG90VHlwZU9wdGlvbihcbiAgZDogQ29udHJpYnV0ZWRQbG90VHlwZURlc2NyaXB0b3IsXG4gIGJhc2U6IFBsb3RUeXBlRGVzY3JpcHRvcixcbik6IFBsb3RUeXBlT3B0aW9uIHtcbiAgcmV0dXJuIHsgLi4uZCwgc291cmNlOiBiYXNlLnNvdXJjZSB9O1xufVxuIl19
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxvdC10eXBlLWNvbnRyaWJ1dGlvbi5jb250cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29udHJhY3RzL3Bsb3QtdHlwZS1jb250cmlidXRpb24uY29udHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQW1JckQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQ2xDLElBQUksY0FBYyxDQUFrQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ2pGLGtFQUFrRTtBQUNsRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBa0IsbUJBQW1CLENBQUMsQ0FBQztBQUMxRixrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQWtCLG1CQUFtQixDQUFDLENBQUM7QUFhMUYsbUZBQW1GO0FBQ25GLE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsQ0FBZ0MsRUFDaEMsSUFBd0I7SUFFeEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSG93IGEgcGxvdCBtb2RlIGdldHMgaW50byB0aGUgcGxvdC10eXBlIHNlbGVjdG9yIHdpdGhvdXQgdGhpcyBsaWJyYXJ5IGtub3dpbmdcbiAqIHdoYXQgaXQgaXMuXG4gKlxuICogQSBwYWNrYWdlIGNvbnRyaWJ1dGVzIGEgbW9kZSBieSBwcm92aWRpbmcgYSB7QGxpbmsgUGxvdFR5cGVDb250cmlidXRpb259IG9uIHRoZVxuICoge0BsaW5rIFBMT1RfVFlQRV9DT05UUklCVVRJT05TfSBtdWx0aS1wcm92aWRlciB0b2tlbiwgdGhlIHNhbWUgd2F5XG4gKiBgVE9PTEJBUl9UT09MU2AgY29udHJpYnV0ZXMgdG9vbGJhciB0b29scy4gTm90aGluZyByZWdpc3RlcnMgYXQgaW1wb3J0IHRpbWU6XG4gKiBpbnN0YWxsaW5nIGEgcGFja2FnZSBtYWtlcyBhIG1vZGUgYXZhaWxhYmxlLCBhbmQgYWRkaW5nIGl0cyBwcm92aWRlciB0dXJucyBpdFxuICogb24uIEEgcGxhaW4gb2JqZWN0IHdvcmtzLCBzbyB0aGUgY29udHJpYnV0aW5nIHBhY2thZ2UgbmVlZHMgbm8gQW5ndWxhclxuICogY29tcGlsZXIgYW5kIG5vIGRlY29yYXRvcnM6XG4gKlxuICogICAgIHsgcHJvdmlkZTogUExPVF9UWVBFX0NPTlRSSUJVVElPTlMsIHVzZVZhbHVlOiBteUNvbnRyaWJ1dGlvbiwgbXVsdGk6IHRydWUgfVxuICogICAgIHsgcHJvdmlkZTogUExPVF9UWVBFX0NPTlRSSUJVVElPTlMsIHVzZUZhY3Rvcnk6ICgpID0+IG1ha2VDb250cmlidXRpb24oKSwgbXVsdGk6IHRydWUgfVxuICpcbiAqIFByb3ZpZGUgbm90aGluZyBhbmQgdGhlIHNlbGVjdG9yLCB0aGUgcmVuZGVyIHBhdGggYW5kIHRoZSBwYW5lbCBhcmVhIGJlaGF2ZVxuICogZXhhY3RseSBhcyB0aGV5IGRpZCBiZWZvcmUgdGhpcyBleHRlbnNpb24gcG9pbnQgZXhpc3RlZC5cbiAqXG4gKiBXSFkgQSBDT05UUklCVVRFRCBNT0RFIFJJREVTIE9OIEEgQlVJTFQtSU4gT05FXG4gKiBBIGNvbnRyaWJ1dGVkIG1vZGUgZG9lcyBub3QgYnJpbmcgYSByZW5kZXJlci4gSXQgbmFtZXMgYSBidWlsdC1pblxuICoge0BsaW5rIENvbnRyaWJ1dGVkUGxvdFR5cGVEZXNjcmlwdG9yLmJhc2VUeXBlfSDigJQgaW4gdjEgb25seSBgUGxvdFR5cGUuSU1BR0VgLFxuICogdGhlIE9wZW5TZWFkcmFnb24gdmlldyDigJQgYW5kIHRoZSB2aXN1YWxpemVyIHBsb3RzIGV4YWN0bHkgYXMgaWYgdGhhdCB0eXBlIGhhZFxuICogYmVlbiBzZWxlY3RlZDogc2FtZSBiYWNrZW5kLCBzYW1lIHRvb2xiYXIsIHNhbWUgcmVnaW9uIHRvb2xzLCBzYW1lIHdoZWVsXG4gKiBoYW5kbGluZy4gVGhlIGNvbnRyaWJ1dGlvbiB0aGVuIGRyYXdzIG92ZXIgaXQgdGhyb3VnaCB0aGVcbiAqIHtAbGluayBQbG90TW9kZVZpZXdwb3J0fSBhbmQgdGFsa3MgdG8gdGhlIHZpZXdlciB0aHJvdWdoIHRoZSBwdWJsaWNcbiAqIHtAbGluayBJVmlzdWFsaXplcn0uIFRoYXQga2VlcHMgZXZlcnkgcmVuZGVyaW5nIGRlY2lzaW9uIGluIG9uZSBwbGFjZSBhbmQgbWVhbnNcbiAqIGEgY29udHJpYnV0aW9uIGNhbiBuZXZlciBiZSBoYWxmLXN1cHBvcnRlZCBieSBzb21lIGNvZGUgcGF0aCB0aGF0IHN3aXRjaGVzIG9uXG4gKiB0aGUgcGxvdCB0eXBlLlxuICpcbiAqIFdIQVQgVEhFIFZJU1VBTElaRVIgR1VBUkFOVEVFU1xuICogIDEuIENvbnRyaWJ1dGVkIGRlc2NyaXB0b3JzIGFyZSBhcHBlbmRlZCBhZnRlciB0aGUgYnVpbHQtaW4gb25lcyBhbmQgY3VyYXRlZCBieVxuICogICAgIHRoZSBzYW1lIGBwcm9kdWN0aW9uTGFiZWxgIC8gdGVzdC1tb2RlIC8gYHJlcXVpcmVzKmAgcnVsZXMuXG4gKiAgMi4gU2VsZWN0aW5nIG9uZSBwbG90cyB3aXRoIGBiYXNlVHlwZWAncyBiYWNrZW5kLCB0aGVuIGNhbGxzIGBhY3RpdmF0ZShjdHgpYFxuICogICAgIG9uY2UgdGhlIHZpZXdwb3J0IGlzIHJlYWR5LlxuICogIDMuIExlYXZpbmcgdGhlIG1vZGUg4oCUIGFub3RoZXIgdHlwZSwgYW4gaW1hZ2Ugc3dpdGNoIChvciBhbnkgcmUtcmVuZGVyIG9mIHRoZVxuICogICAgIGJhc2UgdmlldyksIG9yIHRoZSB2aXN1YWxpemVyIGJlaW5nIGRlc3Ryb3llZCDigJQgY2FsbHMgYHNlc3Npb24uZGVhY3RpdmF0ZSgpYFxuICogICAgIGV4YWN0bHkgb25jZSwgYmVmb3JlIHRoZSBuZXh0IG1vZGUgZHJhd3MuIElmIHRoZSBtb2RlIGlzIHN0aWxsIHNlbGVjdGVkXG4gKiAgICAgd2hlbiB0aGUgbmV3IGltYWdlIGhhcyBwbG90dGVkLCBhIGZyZXNoIHNlc3Npb24gaXMgYWN0aXZhdGVkIGZvciBpdC5cbiAqICA0LiBgcGFuZWxgIGlzIHNob3duIG9ubHkgd2hpbGUgYSBzZXNzaW9uIGlzIGxpdmUuXG4gKiAgNS4gQSB0aHJvd24gZXJyb3Igb3IgcmVqZWN0ZWQgcHJvbWlzZSBmcm9tIGBhY3RpdmF0ZWAsIGBkZWFjdGl2YXRlYCwgYG1vdW50YFxuICogICAgIG9yIGEgbW91bnQncyB0ZWFyZG93biBpcyBjYXVnaHQgYW5kIGxvZ2dlZDsgbm9uZSBlc2NhcGVzLCBzbyBhIGNvbnRyaWJ1dGlvblxuICogICAgIGNhbm5vdCBicmVhayB0aGUgdmlld2VyLiBGYWlsaW5nIHRvIHN0YXJ0IChgYWN0aXZhdGVgLCBgbW91bnRgLCBvciBhIHBhbmVsXG4gKiAgICAgY29tcG9uZW50IHRocm93aW5nIHdoaWxlIGl0IGlzIGNyZWF0ZWQgLyBmaXJzdCByZW5kZXJlZCkgZmFsbHMgYmFja1xuICogICAgIHRvIGBiYXNlVHlwZWAuIEZhaWxpbmcgdG8gY2xlYW4gdXAgZmFsbHMgYmFjayB3aGVuIHRoYXQgc2FtZSBtb2RlIGlzIGJlaW5nXG4gKiAgICAgcmUtYWN0aXZhdGVkIChiYXNlIHJlLXJlbmRlciwgaW1hZ2Ugc3dpdGNoKSDigJQgaW1tZWRpYXRlbHkgaWYgaXQgYWxyZWFkeSBpc1xuICogICAgIGxpdmUgYWdhaW4g4oCUIGFuZCBpcyBvbmx5IGxvZ2dlZCB3aGVuIHRoZSB1c2VyIGhhcyBtb3ZlZCB0byBhbm90aGVyIG1vZGU7IHRoZVxuICogICAgIHVzZXIgZXhwbGljaXRseSBzZWxlY3RpbmcgaXQgYWdhaW4gZ2V0cyBhIGZyZXNoIGF0dGVtcHQuXG4gKiAgNi4ge0BsaW5rIFBMT1RfVFlQRV9DT05UUklCVVRJT05TfSBoYXMgbm8gZmFjdG9yeTogbm8gcHJvdmlkZXJzLCBubyBtb2Rlcy5cbiAqL1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgdHlwZSB7IElJbWFnZUluZm8gfSBmcm9tICcuL2ltYWdlLmNvbnRyYWN0JztcbmltcG9ydCB0eXBlIHsgUGxvdFR5cGUsIFBsb3RUeXBlRGVzY3JpcHRvciwgUGxvdFR5cGVJZCB9IGZyb20gJy4vcGxvdC10eXBlJztcbmltcG9ydCB0eXBlIHsgSVZpc3VhbGl6ZXIgfSBmcm9tICcuL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuXG4vKiogQSByZWN0YW5nbGUgaW4gbGV2ZWwtMCBpbWFnZSBwaXhlbHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsb3RNb2RlUmVjdCB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuLyoqIFNlbGVjdG9yIG1ldGFkYXRhIGZvciBhIGNvbnRyaWJ1dGVkIHBsb3QgbW9kZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJpYnV0ZWRQbG90VHlwZURlc2NyaXB0b3Ige1xuICAvKiogVW5pcXVlIGlkLCBuYW1lc3BhY2VkLCBlLmcuICdkaWFubmUnLiBNdXN0IG5vdCBjbGFzaCB3aXRoIFBsb3RUeXBlIHZhbHVlcy4gKi9cbiAgdHlwZTogc3RyaW5nO1xuICAvKiogVGVzdC1tb2RlIGxhYmVsLCBlLmcuICdEaWdpdGFsIFBhdGhvbG9neSAtIERJQU5ORScuICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0LXNlbGVjdG9yIGxhYmVsOyBvbWl0IHRvIG1ha2UgdGhlIG1vZGUgdGVzdC1vbmx5IChzYW1lIHJ1bGUgYXMgYnVpbHQtaW5zKS4gKi9cbiAgcHJvZHVjdGlvbkxhYmVsPzogc3RyaW5nO1xuICAvKiogJ3BpIHBpLeKApicgY2xhc3Mgb3IgYXNzZXQgcGF0aCwgc2FtZSBhcyBQbG90VHlwZURlc2NyaXB0b3IuaWNvbi4gKi9cbiAgaWNvbj86IHN0cmluZztcbiAgLyoqIEFsd2F5cyAnMmQnIGluIHYxLiAqL1xuICBkaW1lbnNpb25zOiAnMmQnO1xuICAvKiogQnVpbHQtaW4gdHlwZSB3aG9zZSBiYWNrZW5kIHJlbmRlcnMgdGhlIGJhc2UgaW1hZ2UuIHYxIHN1cHBvcnRzIFBsb3RUeXBlLklNQUdFIChPU0QpLiAqL1xuICBiYXNlVHlwZTogUGxvdFR5cGU7XG4gIC8qKiBTYW1lIGdhdGVzIGFzIFBsb3RUeXBlRGVzY3JpcHRvciwgZXZhbHVhdGVkIGluIGFkZGl0aW9uIHRvIHRoZSBiYXNlIHR5cGUncyBvd24uICovXG4gIHJlcXVpcmVzR3JheXNjYWxlPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTdGFjaz86IGJvb2xlYW47XG4gIC8qKiBIaWRkZW4gdW50aWwgYSBgU3BhdGlhbERhdGFzZXRgIGlzIHB1Ymxpc2hlZCBvbiBTUEFUSUFMX0RBVEFfUE9SVCAoYW4gb3ZlcmxheSBvZiBzcGF0aWFsIG9ic2VydmF0aW9ucykuICovXG4gIHJlcXVpcmVzU3BhdGlhbERhdGE/OiBib29sZWFuO1xuICAvKiogSGlkZGVuIHVubGVzcyB0aGUgcHVibGlzaGVkIGRhdGFzZXQgY2FycmllcyBgb2JzZXJ2YXRpb25zLnpgLiAqL1xuICByZXF1aXJlc1NwYXRpYWwzZD86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgYmFzZSB2aWV3J3Mgdmlld3BvcnQsIGFzIGEgY29udHJpYnV0ZWQgbW9kZSBzZWVzIGl0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG90TW9kZVZpZXdwb3J0IHtcbiAgLyoqIEVsZW1lbnQgdGhlIG1vZGUncyBvdmVybGF5IGNhbnZhcy9TVkcgYXR0YWNoZXMgdG87IGZpbGxzIHRoZSBwbG90IGFyZWEuICovXG4gIGdldE92ZXJsYXlDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCBudWxsO1xuICAvKiogTGV2ZWwtMCBpbWFnZSBweCAtPiBjbGllbnQgcHgsIGFuZCB0aGUgcmV2ZXJzZS4gKi9cbiAgZGF0YVRvQ2xpZW50KHg6IG51bWJlciwgeTogbnVtYmVyKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuICBjbGllbnRUb0RhdGEoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gIC8qKiBTY3JlZW4gcHggcGVyIGltYWdlIHB4IGF0IHRoZSBjdXJyZW50IHpvb20uICovXG4gIGRhdGFMZW5ndGhUb1NjcmVlbihsZW46IG51bWJlcik6IG51bWJlcjtcbiAgaXNSZWFkeSgpOiBib29sZWFuO1xuICAvKiogVmlzaWJsZSBpbWFnZSByZWN0IGluIGxldmVsLTAgcHgsIGVtaXR0ZWQgb24gZXZlcnkgcmVkcmF3IGZyYW1lIChwYW4vem9vbSBhbmltYXRpb24pLlxuICAgKiAgQSBuZXcgc3Vic2NyaWJlciBmaXJzdCByZWNlaXZlcyB0aGUgY3VycmVudCByZWN0IHdoZW4gdGhlIHZpZXdwb3J0IGlzIHJlYWR5LiAqL1xuICBmcmFtZSQ6IE9ic2VydmFibGU8UGxvdE1vZGVSZWN0PjtcbiAgLyoqIFNhbWUgcmVjdCwgZW1pdHRlZCBvbmNlIHRoZSB2aWV3cG9ydCBzZXR0bGVzIChleGlzdGluZyBnZXRWaWV3cG9ydENoYW5nZSQgc2VtYW50aWNzKS5cbiAgICogIEEgbmV3IHN1YnNjcmliZXIgZmlyc3QgcmVjZWl2ZXMgdGhlIGN1cnJlbnQgcmVjdCB3aGVuIHRoZSB2aWV3cG9ydCBpcyByZWFkeS4gKi9cbiAgc2V0dGxlZCQ6IE9ic2VydmFibGU8UGxvdE1vZGVSZWN0Pjtcbn1cblxuLyoqIFRoZSBjbGFzcyBhIHtAbGluayBQbG90TW9kZVRvb2xzLmFybUJydXNofSBzdHJva2UgcGFpbnRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG90TW9kZUJydXNoQ2xhc3Mge1xuICAvKiogTGFiZWwgZm9yIHRoZSBwYWludGVkIHJlZ2lvbnM7IHRoZSBzdHJva2Ugb25seSBleHRlbmRzIG9yIG1lcmdlcyByZWdpb25zIHdpdGggaXQuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogQ29sb3VyIGZvciB0aGUgcGFpbnRlZCByZWdpb25zIChpbnN0ZWFkIG9mIHRoZSB0b29sYmFyJ3Mgc2hhcGUgY29sb3VyKS4gKi9cbiAgY29sb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHZpc3VhbGl6ZXIncyBvd24gdG9vbGJhciB0b29scywgYXJtZWQgb24gYSBtb2RlJ3MgYmVoYWxmLiBHb2luZyB0aHJvdWdoXG4gKiB0aGlzIHJhdGhlciB0aGFuIHtAbGluayBJVmlzdWFsaXplcn0ga2VlcHMgdGhlIHRvb2xiYXIgaW4gc3RlcDogdGhlIGFybWVkXG4gKiB0b29sJ3MgYnV0dG9uIGlzIGhpZ2hsaWdodGVkIGFuZCBpdHMgY29udHJvbHMgKGUuZy4gdGhlIGJydXNoIHNpemUpIHNob3cuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvdE1vZGVUb29scyB7XG4gIC8qKlxuICAgKiBBcm0gdGhlIHRvb2xiYXIgYnJ1c2gsIHBhaW50aW5nIGBicnVzaENsYXNzYC4gQ2FsbGluZyBpdCBhZ2FpbiB3aGlsZSB0aGVcbiAgICogYnJ1c2ggaXMgYXJtZWQgc3dpdGNoZXMgY2xhc3M7IHRoZSBuZXh0IHN0cm9rZSBzdGFydHMgYSByZWdpb24gb2YgaXQuXG4gICAqIFRoZSB1c2VyIHBpY2tpbmcgYW55IHRvb2wgZnJvbSB0aGUgdG9vbGJhciAoaW5jbHVkaW5nIHRoZSBicnVzaCkgcmVwbGFjZXNcbiAgICogdGhpcyB3aXRoIHRoZSBwbGFpbiB0b29sLlxuICAgKi9cbiAgYXJtQnJ1c2goYnJ1c2hDbGFzcz86IFBsb3RNb2RlQnJ1c2hDbGFzcyk6IHZvaWQ7XG4gIC8qKiBEaXNhcm0gd2hhdGV2ZXIgdG9vbCBpcyBhcm1lZCwgYXMgaWYgdGhlIHVzZXIgdG9nZ2xlZCBpdCBvZmYuICovXG4gIGRpc2FybSgpOiB2b2lkO1xuICAvKiogVGhlIGFybWVkIHRvb2xiYXIgdG9vbCBpZCAoJ2JydXNoJywgJ3BhbicsIOKApiBvciBudWxsKS4gUmVwbGF5cyB0aGUgY3VycmVudCB2YWx1ZS4gKi9cbiAgYWN0aXZlVG9vbCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD47XG59XG5cbi8qKiBFdmVyeXRoaW5nIGEgY29udHJpYnV0ZWQgbW9kZSBnZXRzIHRvIHdvcmsgd2l0aCB3aGlsZSBpdCBpcyBhY3RpdmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsb3RNb2RlQ29udGV4dCB7XG4gIC8qKiBGdWxsIHB1YmxpYyB2aXN1YWxpemVyIEFQSTogcmVnaW9ucywgcmVnaW9uIG92ZXJsYXkgKHRvb2wgbW9kZXMpLCB1bmRvLCBldGMuICovXG4gIHZpc3VhbGl6ZXI6IElWaXN1YWxpemVyO1xuICB2aWV3cG9ydDogUGxvdE1vZGVWaWV3cG9ydDtcbiAgLyoqIEN1cnJlbnQgaW1hZ2UgaW5mbyBmcm9tIElNQUdFX1NUQVRFX1BPUlQgKG51bGwgdW50aWwgYW4gaW1hZ2UgaXMgbG9hZGVkKS4gKi9cbiAgaW1hZ2VJbmZvJDogT2JzZXJ2YWJsZTxJSW1hZ2VJbmZvIHwgbnVsbD47XG4gIC8qKiBUb29sYmFyIHRvb2xzIChzaW5jZSAwLjYuMCkuIE9wdGlvbmFsIHNvIGEgY29udGV4dCBidWlsdCBmb3IgMC41LjAgc3RpbGwgdHlwZS1jaGVja3MuICovXG4gIHRvb2xzPzogUGxvdE1vZGVUb29scztcbn1cblxuLyoqIEEgbGl2ZSBhY3RpdmF0aW9uIG9mIGEgY29udHJpYnV0ZWQgbW9kZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvdE1vZGVTZXNzaW9uIHtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGxlYXZlcyB0aGUgbW9kZSwgdGhlIGltYWdlIGNoYW5nZXMsIG9yIHRoZSB2aXN1YWxpemVyIGlzIGRlc3Ryb3llZC4gKi9cbiAgZGVhY3RpdmF0ZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBtb2RlJ3Mgc2lkZSBwYW5lbCwgc2hvd24gaW4gdGhlIHZpc3VhbGl6ZXIncyByaWdodC1oYW5kIHBhbmVsIGFyZWEgd2hpbGVcbiAqIGEgc2Vzc2lvbiBpcyBsaXZlLiBUd28gZm9ybXM6XG4gKlxuICogIC0gYGNvbXBvbmVudGA6IGFuIEFuZ3VsYXIgY29tcG9uZW50LCByZW5kZXJlZCB0aHJvdWdoIGBOZ0NvbXBvbmVudE91dGxldGBcbiAqICAgIHdpdGgge0BsaW5rIFBMT1RfTU9ERV9DT05URVhUfSBhbmQge0BsaW5rIFBMT1RfTU9ERV9TRVNTSU9OfSBpbiBpdHNcbiAqICAgIGluamVjdG9yLiBOZWVkcyBhbiBBT1QtY29tcGlsZWQgKHBhcnRpYWwtSXZ5KSBjb21wb25lbnQuXG4gKiAgLSBgbW91bnRgOiBmcmFtZXdvcmstYWdub3N0aWMuIFRoZSB2aXN1YWxpemVyIGhhbmRzIG92ZXIgYW4gZW1wdHkgaG9zdFxuICogICAgZWxlbWVudCBhZnRlciBgYWN0aXZhdGVgIHJlc29sdmVzOyB0aGUgZnVuY3Rpb24gcmVuZGVycyBpbnRvIGl0IGFuZCByZXR1cm5zXG4gKiAgICBhIHRlYXJkb3duLiBUaGUgdGVhcmRvd24gaXMgY2FsbGVkIGV4YWN0bHkgb25jZSB3aGVuIHRoZSBtb2RlIGRlYWN0aXZhdGVzLFxuICogICAgYmVmb3JlIGBzZXNzaW9uLmRlYWN0aXZhdGUoKWAsIGFuZCB0aGUgaG9zdCBlbGVtZW50IGlzIHRoZW4gcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGxvdE1vZGVQYW5lbCA9XG4gIHwgeyB0aXRsZTogc3RyaW5nOyBjb21wb25lbnQ6IFR5cGU8dW5rbm93bj4gfVxuICB8IHtcbiAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICBtb3VudChob3N0OiBIVE1MRWxlbWVudCwgY3R4OiBQbG90TW9kZUNvbnRleHQsIHNlc3Npb246IFBsb3RNb2RlU2Vzc2lvbik6ICgpID0+IHZvaWQ7XG4gICAgfTtcblxuLyoqIEEgcGxvdCBtb2RlIGNvbnRyaWJ1dGVkIHRvIHRoZSBzZWxlY3Rvci4gQSBwbGFpbiBvYmplY3QgaXMgZW5vdWdoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG90VHlwZUNvbnRyaWJ1dGlvbiB7XG4gIGRlc2NyaXB0b3I6IENvbnRyaWJ1dGVkUGxvdFR5cGVEZXNjcmlwdG9yO1xuICAvKiogQ2FsbGVkIGFmdGVyIHRoZSBiYXNlIGJhY2tlbmQgaGFzIHBsb3R0ZWQgdGhlIGltYWdlIGluIHRoaXMgbW9kZS4gKi9cbiAgYWN0aXZhdGUoY3R4OiBQbG90TW9kZUNvbnRleHQpOiBQbG90TW9kZVNlc3Npb24gfCBQcm9taXNlPFBsb3RNb2RlU2Vzc2lvbj47XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzaWRlIHBhbmVsLCByZW5kZXJlZCBpbiB0aGUgdmlzdWFsaXplcidzIHJpZ2h0LWhhbmQgcGFuZWwgYXJlYSB3aGlsZSB0aGVcbiAgICogbW9kZSBpcyBhY3RpdmUuIEEgY29tcG9uZW50IHBhbmVsIGNhbiBpbmplY3QgUExPVF9NT0RFX0NPTlRFWFQgYW5kIFBMT1RfTU9ERV9TRVNTSU9OLlxuICAgKi9cbiAgcGFuZWw/OiBQbG90TW9kZVBhbmVsO1xufVxuXG4vKipcbiAqIE11bHRpLXByb3ZpZGVyIHRva2VuIGZvciBjb250cmlidXRlZCBwbG90IG1vZGVzLlxuICpcbiAqIERlbGliZXJhdGVseSBoYXMgbm8gYGZhY3RvcnlgOiB1bnJlZ2lzdGVyZWQgbWVhbnMgbm8gY29udHJpYnV0ZWQgbW9kZXMsIGFuZCB0aGVcbiAqIGxpYnJhcnkgYmVoYXZlcyBleGFjdGx5IGFzIGJlZm9yZS4gVGhlIHZpc3VhbGl6ZXIgaW5qZWN0cyBpdCBgeyBvcHRpb25hbDogdHJ1ZSB9YFxuICogYW5kIHRyZWF0cyBudWxsIGFzIGVtcHR5LlxuICovXG5leHBvcnQgY29uc3QgUExPVF9UWVBFX0NPTlRSSUJVVElPTlMgPVxuICBuZXcgSW5qZWN0aW9uVG9rZW48cmVhZG9ubHkgUGxvdFR5cGVDb250cmlidXRpb25bXT4oJ1BMT1RfVFlQRV9DT05UUklCVVRJT05TJyk7XG4vKiogVGhlIGFjdGl2ZSBtb2RlJ3MgY29udGV4dCwgaW4gYSBjb21wb25lbnQgcGFuZWwncyBpbmplY3Rvci4gKi9cbmV4cG9ydCBjb25zdCBQTE9UX01PREVfQ09OVEVYVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQbG90TW9kZUNvbnRleHQ+KCdQTE9UX01PREVfQ09OVEVYVCcpO1xuLyoqIFRoZSBhY3RpdmUgbW9kZSdzIHNlc3Npb24sIGluIGEgY29tcG9uZW50IHBhbmVsJ3MgaW5qZWN0b3IuICovXG5leHBvcnQgY29uc3QgUExPVF9NT0RFX1NFU1NJT04gPSBuZXcgSW5qZWN0aW9uVG9rZW48UGxvdE1vZGVTZXNzaW9uPignUExPVF9NT0RFX1NFU1NJT04nKTtcblxuLyoqXG4gKiBPbmUgZW50cnkgaW4gdGhlIHBsb3QtdHlwZSBzZWxlY3RvcjogYSBidWlsdC1pbiB7QGxpbmsgUGxvdFR5cGVEZXNjcmlwdG9yfVxuICogYXMtaXMsIG9yIGEgY29udHJpYnV0ZWQgZGVzY3JpcHRvciBjb21wbGV0ZWQgd2l0aCBpdHMgYmFzZSB0eXBlJ3MgYHNvdXJjZWAuXG4gKiBFdmVyeSBlbnRyeSB0aGVyZWZvcmUgY2FycmllcyB0aGUgc2FtZSBmaWVsZHMgdGhlIHNlbGVjdG9yIGN1cmF0ZXMgYnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxvdFR5cGVPcHRpb24gZXh0ZW5kcyBPbWl0PFBsb3RUeXBlRGVzY3JpcHRvciwgJ3R5cGUnPiB7XG4gIHR5cGU6IFBsb3RUeXBlSWQ7XG4gIC8qKiBTZXQgb25seSBmb3IgYSBjb250cmlidXRlZCBtb2RlOiB0aGUgYnVpbHQtaW4gdHlwZSB0aGF0IHJlbmRlcnMgaXQuICovXG4gIGJhc2VUeXBlPzogUGxvdFR5cGU7XG59XG5cbi8qKiBUaGUgc2VsZWN0b3IgZW50cnkgZm9yIGEgY29udHJpYnV0ZWQgbW9kZSwgZ2l2ZW4gaXRzIGJhc2UgdHlwZSdzIGRlc2NyaXB0b3IuICovXG5leHBvcnQgZnVuY3Rpb24gY29udHJpYnV0ZWRQbG90VHlwZU9wdGlvbihcbiAgZDogQ29udHJpYnV0ZWRQbG90VHlwZURlc2NyaXB0b3IsXG4gIGJhc2U6IFBsb3RUeXBlRGVzY3JpcHRvcixcbik6IFBsb3RUeXBlT3B0aW9uIHtcbiAgcmV0dXJuIHsgLi4uZCwgc291cmNlOiBiYXNlLnNvdXJjZSB9O1xufVxuIl19
@@ -1,3 +1,5 @@
1
1
  import { InjectionToken } from '@angular/core';
2
+ /** {@link TranscriptTileQuery.genes} value meaning "every gene". */
3
+ export const ALL_GENES = '*';
2
4
  export const SPATIAL_DATA_PORT = new InjectionToken('SPATIAL_DATA_PORT');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1kYXRhLnBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBa0cvQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBa0IsbUJBQW1CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIFNwYXRpYWxDb2x1bW4sIFNwYXRpYWxEYXRhc2V0LCBTcGF0aWFsRW1iZWRkaW5nLCBTcGF0aWFsUG9seWdvbnMsXG59IGZyb20gJy4uL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5cbi8qKlxuICogU3BhdGlhbC1vbWljcyBkYXRhIGFjY2VzcywgaW52ZXJ0ZWQgYXMgYSBwb3J0IHNvIHRoZSB2aXN1YWxpemF0aW9uIGxpYnJhcnlcbiAqIG5ldmVyIGxlYXJucyBob3cgdGhlIGRhdGEgaXMgc3RvcmVkIG9yIHNlcnZlZCDigJQgZXhhY3RseSBsaWtlXG4gKiBgVElMRV9BQ0NFU1NfUE9SVGAgZm9yIHRpbGVzIGFuZCBgUkVHSU9OX0lPX1BPUlRgIGZvciBhbm5vdGF0aW9ucy4gVGhlIGhvc3RcbiAqIHN1cHBsaWVzIGFuIGFkYXB0ZXI7IHRoZSBsaWJyYXJ5IGNvbnN1bWVzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBXSFkgQSBQT1JUIEFORCBOT1QgQSBSRUFERVJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVGhlIGludGVyY2hhbmdlIGZvcm1hdCBmb3IgdGhpcyBkYXRhIChTcGF0aWFsRGF0YSBaYXJyIHYzICsgQW5uRGF0YVxuICogY29udmVudGlvbnMgKyBHZW9QYXJxdWV0IHNoYXBlcykgbmVlZHMgdGhyZWUgcGFyc2VycywgYW5kIGl0cyBleHByZXNzaW9uXG4gKiBtYXRyaXggaXMgc3RvcmVkIG9ic2VydmF0aW9uLW1ham9yIOKAlCBzbyByZWFkaW5nIGEgc2luZ2xlIGdlbmUncyBjb2x1bW4gbWVhbnNcbiAqIHRvdWNoaW5nIGV2ZXJ5IHJvdy4gQSBzZXJ2ZXIgY2FuIHByZS1pbmRleCB0aGF0IG9uY2U7IGEgYnJvd3NlciBjYW5ub3QuIFNvXG4gKiB0aGUgbGlicmFyeSB0YWtlcyB2ZWN0b3JzIGl0IGNhbiByZW5kZXIgYW5kIGxlYXZlcyBpbmdlc3QgdG8gd2hvZXZlciBvd25zIHRoZVxuICogZGF0YS4gYFNwYXRpYWxEYXRhSHR0cFNlcnZpY2VgIGlzIGEgcmVhZHktbWFkZSBhZGFwdGVyIGZvciB0aGUgd2lyZSBmb3JtYXRcbiAqIHRoZSBidW5kbGVkIGV4YW1wbGUgc2VydmVyIHNwZWFrczsgYSBob3N0IHdpdGggaXRzIG93biBiYWNrZW5kIGltcGxlbWVudHNcbiAqIHRoaXMgaW50ZXJmYWNlIGluc3RlYWQuXG4gKlxuICogTEFaSU5FU1MgSVMgVEhFIFBPSU5UXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGBnZXREYXRhc2V0JCgpYCB5aWVsZHMgb25seSB3aGF0IGlzIGNoZWFwIHRvIGhvbGQ6IGNvb3JkaW5hdGVzIHBsdXMgY29sdW1uXG4gKiBhbmQgZmVhdHVyZSAqbWV0YWRhdGEqLiBFdmVyeSBhY2Nlc3NvciBiZWxvdyBmZXRjaGVzIG9uZSB2ZWN0b3IgYXQgYSB0aW1lLFxuICogZm9yIHRoZSBvbmUgY29sdW1uIG9yIGdlbmUgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsRGF0YVBvcnQge1xuICAvKipcbiAgICogVGhlIGRhdGFzZXQgY3VycmVudGx5IGJlaW5nIHZpc3VhbGl6ZWQsIG9yIG51bGwgd2hlbiBub25lIGlzIHNlbGVjdGVkLlxuICAgKiBFbWl0cyBhZ2FpbiB3aGVuIHRoZSBob3N0IHN3aXRjaGVzIGRhdGFzZXRzLCBzbyB0aGUgdmlldyBjYW4gcmVidWlsZC5cbiAgICovXG4gIGdldERhdGFzZXQkKCk6IE9ic2VydmFibGU8U3BhdGlhbERhdGFzZXQgfCBudWxsPjtcblxuICAvKipcbiAgICogVmFsdWVzIGZvciBvbmUgYW5ub3RhdGlvbiBjb2x1bW4sIGluZGV4LWFsaWduZWQgd2l0aCB0aGUgb2JzZXJ2YXRpb25zLlxuICAgKiBUaGUgY29sdW1uIG11c3QgYmUgb25lIGFkdmVydGlzZWQgaW4gYFNwYXRpYWxEYXRhc2V0LmNvbHVtbnNgOyByZWplY3RcbiAgICogKGRvbid0IHJlc29sdmUgZW1wdHkpIHdoZW4gaXQgaXNuJ3QsIHNvIGEgdHlwbyBzdXJmYWNlcyBpbnN0ZWFkIG9mXG4gICAqIHJlbmRlcmluZyBhcyBcIm5vIGRhdGFcIi5cbiAgICpcbiAgICogSW1wbGVtZW50YXRpb25zIHNob3VsZCBjYWNoZSDigJQgY29sb3VyaW5nIGJ5IGNsdXN0ZXIsIHRoZW4gYnkgYSBnZW5lLCB0aGVuXG4gICAqIGJhY2sgYnkgY2x1c3RlciBtdXN0IG5vdCByZWZldGNoLlxuICAgKi9cbiAgZ2V0Q29sdW1uKG5hbWU6IHN0cmluZyk6IFByb21pc2U8U3BhdGlhbENvbHVtbj47XG5cbiAgLyoqXG4gICAqIE9uZSBmZWF0dXJlJ3MgKGdlbmUncykgZXhwcmVzc2lvbiB2ZWN0b3IsIGluZGV4LWFsaWduZWQgd2l0aCB0aGVcbiAgICogb2JzZXJ2YXRpb25zLiBSZWplY3RzIGZvciBhbiB1bmtub3duIGZlYXR1cmUuXG4gICAqL1xuICBnZXRGZWF0dXJlVmVjdG9yKG5hbWU6IHN0cmluZyk6IFByb21pc2U8RmxvYXQzMkFycmF5PjtcblxuICAvKipcbiAgICogT25lIGVtYmVkZGluZydzIGNvb3JkaW5hdGVzLCBpbmRleC1hbGlnbmVkIHdpdGggdGhlIG9ic2VydmF0aW9ucy5cbiAgICpcbiAgICogVGhlIG5hbWUgbXVzdCBiZSBvbmUgYWR2ZXJ0aXNlZCBpbiBgU3BhdGlhbERhdGFzZXQuZW1iZWRkaW5nc2A7IHJlamVjdHMgb3RoZXJ3aXNlLCBmb3IgdGhlXG4gICAqIHNhbWUgcmVhc29uIGBnZXRDb2x1bW5gIGRvZXMg4oCUIGEgdHlwbyBzaG91bGQgc3VyZmFjZSByYXRoZXIgdGhhbiByZW5kZXIgYXMgYW4gZW1wdHkgcGxvdC5cbiAgICpcbiAgICogT3B0aW9uYWw6IGEgaG9zdCB3aXRoIG5vIGVtYmVkZGluZ3Mgc2ltcGx5IG9taXRzIGl0LCBhbmQgdGhlIFVJIG9mZmVycyBubyBlbWJlZGRpbmcgdmlld3MuXG4gICAqL1xuICBnZXRFbWJlZGRpbmc/KG5hbWU6IHN0cmluZyk6IFByb21pc2U8U3BhdGlhbEVtYmVkZGluZz47XG5cbiAgLyoqXG4gICAqIFR5cGVhaGVhZCBvdmVyIGZlYXR1cmUgbmFtZXMsIGZvciBkYXRhc2V0cyB0b28gd2lkZSB0byBpbmxpbmUgdGhlIGxpc3RcbiAgICogKGBTcGF0aWFsRmVhdHVyZU1ldGEubmFtZXNgIGFic2VudCkuIE9wdGlvbmFsOiBhIGhvc3Qgd2hvc2UgcGFuZWwgaXMgc21hbGxcbiAgICogZW5vdWdoIHRvIGlubGluZSBldmVyeSBuYW1lIG5lZWQgbm90IGltcGxlbWVudCBpdCDigJQgdGhlIFVJIGZhbGxzIGJhY2sgdG9cbiAgICogZmlsdGVyaW5nIGBuYW1lc2AgbG9jYWxseS5cbiAgICovXG4gIHNlYXJjaEZlYXR1cmVzPyhxdWVyeTogc3RyaW5nLCBsaW1pdD86IG51bWJlcik6IFByb21pc2U8c3RyaW5nW10+O1xuXG4gIC8qKlxuICAgKiBQZXItb2JzZXJ2YXRpb24gYm91bmRhcnkgZ2VvbWV0cnksIHdoZW4gdGhlIGRhdGFzZXQgYWR2ZXJ0aXNlc1xuICAgKiBgcG9seWdvbnNgLiBPcHRpb25hbCDigJQgYSBzcG90LWJhc2VkIGFzc2F5IChWaXNpdW0pIGhhcyBubyBzZWdtZW50YXRpb24uXG4gICAqL1xuICBnZXRQb2x5Z29ucz8oKTogUHJvbWlzZTxTcGF0aWFsUG9seWdvbnM+O1xuXG4gIC8qKlxuICAgKiBUaGUgcmVmZXJlbmNlIHZvbHVtZSdzIHZveGVsczogYSB1aW50OCBzY2FsYXIgZmllbGQsIHgtZmFzdGVzdCwgb2YgZXhhY3RseVxuICAgKiBgd2lkdGggKiBoZWlnaHQgKiBkZXB0aGAgYnl0ZXMgYXMgdGhlIGRhdGFzZXQncyB7QGxpbmsgU3BhdGlhbFZvbHVtZU1ldGF9XG4gICAqIGRlY2xhcmVzLlxuICAgKlxuICAgKiBPcHRpb25hbCwgYW5kIG9ubHkgbWVhbmluZ2Z1bCB3aGVuIHRoZSBkYXRhc2V0IGFkdmVydGlzZXMgYSB2b2x1bWUuIFNlcGFyYXRlXG4gICAqIGZyb20gYGdldERhdGFzZXQkKClgIGJlY2F1c2UgaXQgaXMgbWVnYWJ5dGVzOiBhIGhvc3QgdGhhdCBuZXZlciBvcGVucyB0aGUgM0RcbiAgICogbW9kZSBzaG91bGQgbmV2ZXIgcGF5IGZvciBpdC5cbiAgICovXG4gIGdldFZvbHVtZT8oKTogUHJvbWlzZTxVaW50OEFycmF5PjtcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgXCJ3aGljaCBvYnNlcnZhdGlvbnMgZmFsbCBpbnNpZGUgdGhpcyBwb2x5Z29uXCIsIGZvciBkYXRhc2V0c1xuICAgKiB0b28gbGFyZ2UgdG8gaGl0LXRlc3QgY2xpZW50LXNpZGUuIE9wdGlvbmFsOiB3aXRob3V0IGl0IHRoZSBsaWJyYXJ5XG4gICAqIHBvaW50LWluLXBvbHlnb25zIHRoZSByZXNpZGVudCBjb29yZGluYXRlcyBpdHNlbGYsIHdoaWNoIGlzIGZpbmUgaW50byB0aGVcbiAgICogMTBeNSByYW5nZS4gQ29vcmRpbmF0ZXMgYXJlIGluIHRoZSBzYW1lIHNwYWNlIGFzIHRoZSBvYnNlcnZhdGlvbnMuXG4gICAqL1xuICBxdWVyeVJvaT8ocG9seWdvbjogeyB4OiBudW1iZXJbXTsgeTogbnVtYmVyW10gfSk6IFByb21pc2U8VWludDMyQXJyYXk+O1xufVxuXG5leHBvcnQgY29uc3QgU1BBVElBTF9EQVRBX1BPUlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48U3BhdGlhbERhdGFQb3J0PignU1BBVElBTF9EQVRBX1BPUlQnKTtcbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1kYXRhLnBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBdUIvQyxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztBQTRJN0IsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQWtCLG1CQUFtQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBTcGF0aWFsQ29sdW1uLCBTcGF0aWFsRGF0YXNldCwgU3BhdGlhbERlbnNpdHlSYXN0ZXIsIFNwYXRpYWxFbWJlZGRpbmcsIFNwYXRpYWxQb2x5Z29uVGlsZSxcbiAgQ2F0ZWdvcmljYWxDb2x1bW5NZXRhLCBTcGF0aWFsUG9seWdvbnMsIFNwYXRpYWxUcmFuc2NyaXB0Q291bnRzLCBTcGF0aWFsVHJhbnNjcmlwdFN1bW1hcnksXG4gIFNwYXRpYWxUcmFuc2NyaXB0VGlsZSxcbn0gZnJvbSAnLi4vc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBTcGF0aWFsRGF0YVBvcnQuZ2V0VHJhbnNjcmlwdFRpbGV9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2NyaXB0VGlsZVF1ZXJ5IHtcbiAgLyoqXG4gICAqIEdlbmVzIHRvIGluY2x1ZGUsIGJ5IG5hbWU7IHRoZSB0aWxlJ3MgYGdlbmVgIGNvZGVzIGluZGV4IHRoaXMgbGlzdC4gYFtBTExfR0VORVNdYFxuICAgKiBhc2tzIGZvciBldmVyeSBnZW5lLCB1bmFnZ3JlZ2F0ZWQsIGF0IGxldmVsIDAgb25seSBhbmQgY2xpcHBlZCB0byB7QGxpbmsgYm94fSDigJQgdGhlXG4gICAqIGBnZW5lYCBjb2RlcyBhcmUgdGhlbiB0aGUgZGF0YXNldCdzIG93biBnZW5lIGluZGljZXMuXG4gICAqL1xuICBnZW5lczogc3RyaW5nW107XG4gIC8qKiBgaGlnaGAgKGRlZmF1bHQpIGtlZXBzIG9ubHkgY29uZmlkZW50bHkgZGVjb2RlZCB0cmFuc2NyaXB0cy4gKi9cbiAgcXVhbGl0eT86ICdoaWdoJyB8ICdhbGwnO1xuICAvKiogQ2xpcCB0byBgW3gwLCB5MCwgeDEsIHkxXWAgaW4gb2JzZXJ2YXRpb24gdW5pdHMuICovXG4gIGJveD86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xufVxuXG4vKioge0BsaW5rIFRyYW5zY3JpcHRUaWxlUXVlcnkuZ2VuZXN9IHZhbHVlIG1lYW5pbmcgXCJldmVyeSBnZW5lXCIuICovXG5leHBvcnQgY29uc3QgQUxMX0dFTkVTID0gJyonO1xuXG4vKipcbiAqIFNwYXRpYWwtb21pY3MgZGF0YSBhY2Nlc3MsIGludmVydGVkIGFzIGEgcG9ydCBzbyB0aGUgdmlzdWFsaXphdGlvbiBsaWJyYXJ5XG4gKiBuZXZlciBsZWFybnMgaG93IHRoZSBkYXRhIGlzIHN0b3JlZCBvciBzZXJ2ZWQg4oCUIGV4YWN0bHkgbGlrZVxuICogYFRJTEVfQUNDRVNTX1BPUlRgIGZvciB0aWxlcyBhbmQgYFJFR0lPTl9JT19QT1JUYCBmb3IgYW5ub3RhdGlvbnMuIFRoZSBob3N0XG4gKiBzdXBwbGllcyBhbiBhZGFwdGVyOyB0aGUgbGlicmFyeSBjb25zdW1lcyB0eXBlZCBhcnJheXMuXG4gKlxuICogV0hZIEEgUE9SVCBBTkQgTk9UIEEgUkVBREVSXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFRoZSBpbnRlcmNoYW5nZSBmb3JtYXQgZm9yIHRoaXMgZGF0YSAoU3BhdGlhbERhdGEgWmFyciB2MyArIEFubkRhdGFcbiAqIGNvbnZlbnRpb25zICsgR2VvUGFycXVldCBzaGFwZXMpIG5lZWRzIHRocmVlIHBhcnNlcnMsIGFuZCBpdHMgZXhwcmVzc2lvblxuICogbWF0cml4IGlzIHN0b3JlZCBvYnNlcnZhdGlvbi1tYWpvciDigJQgc28gcmVhZGluZyBhIHNpbmdsZSBnZW5lJ3MgY29sdW1uIG1lYW5zXG4gKiB0b3VjaGluZyBldmVyeSByb3cuIEEgc2VydmVyIGNhbiBwcmUtaW5kZXggdGhhdCBvbmNlOyBhIGJyb3dzZXIgY2Fubm90LiBTb1xuICogdGhlIGxpYnJhcnkgdGFrZXMgdmVjdG9ycyBpdCBjYW4gcmVuZGVyIGFuZCBsZWF2ZXMgaW5nZXN0IHRvIHdob2V2ZXIgb3ducyB0aGVcbiAqIGRhdGEuIGBTcGF0aWFsRGF0YUh0dHBTZXJ2aWNlYCBpcyBhIHJlYWR5LW1hZGUgYWRhcHRlciBmb3IgdGhlIHdpcmUgZm9ybWF0XG4gKiB0aGUgYnVuZGxlZCBleGFtcGxlIHNlcnZlciBzcGVha3M7IGEgaG9zdCB3aXRoIGl0cyBvd24gYmFja2VuZCBpbXBsZW1lbnRzXG4gKiB0aGlzIGludGVyZmFjZSBpbnN0ZWFkLlxuICpcbiAqIExBWklORVNTIElTIFRIRSBQT0lOVFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBgZ2V0RGF0YXNldCQoKWAgeWllbGRzIG9ubHkgd2hhdCBpcyBjaGVhcCB0byBob2xkOiBjb29yZGluYXRlcyBwbHVzIGNvbHVtblxuICogYW5kIGZlYXR1cmUgKm1ldGFkYXRhKi4gRXZlcnkgYWNjZXNzb3IgYmVsb3cgZmV0Y2hlcyBvbmUgdmVjdG9yIGF0IGEgdGltZSxcbiAqIGZvciB0aGUgb25lIGNvbHVtbiBvciBnZW5lIGN1cnJlbnRseSBiZWluZyBkaXNwbGF5ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbERhdGFQb3J0IHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhc2V0IGN1cnJlbnRseSBiZWluZyB2aXN1YWxpemVkLCBvciBudWxsIHdoZW4gbm9uZSBpcyBzZWxlY3RlZC5cbiAgICogRW1pdHMgYWdhaW4gd2hlbiB0aGUgaG9zdCBzd2l0Y2hlcyBkYXRhc2V0cywgc28gdGhlIHZpZXcgY2FuIHJlYnVpbGQuXG4gICAqL1xuICBnZXREYXRhc2V0JCgpOiBPYnNlcnZhYmxlPFNwYXRpYWxEYXRhc2V0IHwgbnVsbD47XG5cbiAgLyoqXG4gICAqIFZhbHVlcyBmb3Igb25lIGFubm90YXRpb24gY29sdW1uLCBpbmRleC1hbGlnbmVkIHdpdGggdGhlIG9ic2VydmF0aW9ucy5cbiAgICogVGhlIGNvbHVtbiBtdXN0IGJlIG9uZSBhZHZlcnRpc2VkIGluIGBTcGF0aWFsRGF0YXNldC5jb2x1bW5zYDsgcmVqZWN0XG4gICAqIChkb24ndCByZXNvbHZlIGVtcHR5KSB3aGVuIGl0IGlzbid0LCBzbyBhIHR5cG8gc3VyZmFjZXMgaW5zdGVhZCBvZlxuICAgKiByZW5kZXJpbmcgYXMgXCJubyBkYXRhXCIuXG4gICAqXG4gICAqIEltcGxlbWVudGF0aW9ucyBzaG91bGQgY2FjaGUg4oCUIGNvbG91cmluZyBieSBjbHVzdGVyLCB0aGVuIGJ5IGEgZ2VuZSwgdGhlblxuICAgKiBiYWNrIGJ5IGNsdXN0ZXIgbXVzdCBub3QgcmVmZXRjaC5cbiAgICovXG4gIGdldENvbHVtbihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFNwYXRpYWxDb2x1bW4+O1xuXG4gIC8qKlxuICAgKiBPbmUgZmVhdHVyZSdzIChnZW5lJ3MpIGV4cHJlc3Npb24gdmVjdG9yLCBpbmRleC1hbGlnbmVkIHdpdGggdGhlXG4gICAqIG9ic2VydmF0aW9ucy4gUmVqZWN0cyBmb3IgYW4gdW5rbm93biBmZWF0dXJlLlxuICAgKi9cbiAgZ2V0RmVhdHVyZVZlY3RvcihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZsb2F0MzJBcnJheT47XG5cbiAgLyoqXG4gICAqIE9uZSBlbWJlZGRpbmcncyBjb29yZGluYXRlcywgaW5kZXgtYWxpZ25lZCB3aXRoIHRoZSBvYnNlcnZhdGlvbnMuXG4gICAqXG4gICAqIFRoZSBuYW1lIG11c3QgYmUgb25lIGFkdmVydGlzZWQgaW4gYFNwYXRpYWxEYXRhc2V0LmVtYmVkZGluZ3NgOyByZWplY3RzIG90aGVyd2lzZSwgZm9yIHRoZVxuICAgKiBzYW1lIHJlYXNvbiBgZ2V0Q29sdW1uYCBkb2VzIOKAlCBhIHR5cG8gc2hvdWxkIHN1cmZhY2UgcmF0aGVyIHRoYW4gcmVuZGVyIGFzIGFuIGVtcHR5IHBsb3QuXG4gICAqXG4gICAqIE9wdGlvbmFsOiBhIGhvc3Qgd2l0aCBubyBlbWJlZGRpbmdzIHNpbXBseSBvbWl0cyBpdCwgYW5kIHRoZSBVSSBvZmZlcnMgbm8gZW1iZWRkaW5nIHZpZXdzLlxuICAgKi9cbiAgZ2V0RW1iZWRkaW5nPyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFNwYXRpYWxFbWJlZGRpbmc+O1xuXG4gIC8qKlxuICAgKiBUeXBlYWhlYWQgb3ZlciBmZWF0dXJlIG5hbWVzLCBmb3IgZGF0YXNldHMgdG9vIHdpZGUgdG8gaW5saW5lIHRoZSBsaXN0XG4gICAqIChgU3BhdGlhbEZlYXR1cmVNZXRhLm5hbWVzYCBhYnNlbnQpLiBPcHRpb25hbDogYSBob3N0IHdob3NlIHBhbmVsIGlzIHNtYWxsXG4gICAqIGVub3VnaCB0byBpbmxpbmUgZXZlcnkgbmFtZSBuZWVkIG5vdCBpbXBsZW1lbnQgaXQg4oCUIHRoZSBVSSBmYWxscyBiYWNrIHRvXG4gICAqIGZpbHRlcmluZyBgbmFtZXNgIGxvY2FsbHkuXG4gICAqL1xuICBzZWFyY2hGZWF0dXJlcz8ocXVlcnk6IHN0cmluZywgbGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZ1tdPjtcblxuICAvKipcbiAgICogUGVyLW9ic2VydmF0aW9uIGJvdW5kYXJ5IGdlb21ldHJ5LCB3aGVuIHRoZSBkYXRhc2V0IGFkdmVydGlzZXNcbiAgICogYHBvbHlnb25zYC4gT3B0aW9uYWwg4oCUIGEgc3BvdC1iYXNlZCBhc3NheSAoVmlzaXVtKSBoYXMgbm8gc2VnbWVudGF0aW9uLlxuICAgKi9cbiAgZ2V0UG9seWdvbnM/KCk6IFByb21pc2U8U3BhdGlhbFBvbHlnb25zPjtcblxuICAvKipcbiAgICogT25lIHRpbGUgb2YgYm91bmRhcmllcyBmcm9tIGBwb2x5Z29uVGlsZXNgLiBBbiBlbXB0eSB0aWxlIHJlc29sdmVzIHdpdGggYGNvdW50YCAwIOKAlFxuICAgKiBhIHRpbGUgb3V0c2lkZSB0aGUgdGlzc3VlIGlzIGFuIGFuc3dlciwgbm90IGFuIGVycm9yLiBPcHRpb25hbDogb25seSBkYXRhc2V0cyB0aGF0XG4gICAqIGFkdmVydGlzZSBgcG9seWdvblRpbGVzYCBuZWVkIGl0LlxuICAgKi9cbiAgZ2V0UG9seWdvblRpbGU/KHNldDogc3RyaW5nLCBsZXZlbDogbnVtYmVyLCBneDogbnVtYmVyLCBneTogbnVtYmVyKTogUHJvbWlzZTxTcGF0aWFsUG9seWdvblRpbGU+O1xuXG4gIC8qKlxuICAgKiBPbmUgdGlsZSBvZiB0cmFuc2NyaXB0cyBmcm9tIGB0cmFuc2NyaXB0VGlsZXNgLCByZXN0cmljdGVkIHRvIGBxdWVyeS5nZW5lc2AuXG4gICAqIE9wdGlvbmFsOiBvbmx5IGRhdGFzZXRzIHRoYXQgYWR2ZXJ0aXNlIGB0cmFuc2NyaXB0VGlsZXNgIG5lZWQgaXQuXG4gICAqL1xuICBnZXRUcmFuc2NyaXB0VGlsZT8oXG4gICAgbGV2ZWw6IG51bWJlciwgZ3g6IG51bWJlciwgZ3k6IG51bWJlciwgcXVlcnk6IFRyYW5zY3JpcHRUaWxlUXVlcnksXG4gICk6IFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRUaWxlPjtcblxuICAvKipcbiAgICogT25lIHRpbGUgb2YgdGhlIGFsbC1nZW5lIGdyb3VwaW5nIHB5cmFtaWQgKGB0cmFuc2NyaXB0Qmluc2ApOiBhbiBlbnRyeSBwZXIgYmluLCB3aXRoXG4gICAqIGB3ZWlnaHRgIGl0cyB0cmFuc2NyaXB0IGNvdW50IGFuZCBgb2JzZXJ2YXRpb25gIGl0cyBkb21pbmFudCBjZWxsLlxuICAgKi9cbiAgZ2V0VHJhbnNjcmlwdEJpbnM/KGxldmVsOiBudW1iZXIsIHR4OiBudW1iZXIsIHR5OiBudW1iZXIpOiBQcm9taXNlPFNwYXRpYWxUcmFuc2NyaXB0VGlsZT47XG5cbiAgLyoqXG4gICAqIFdoYXQgaXMgaW5zaWRlIGBib3hgIChvYnNlcnZhdGlvbiB1bml0cyk6IHRyYW5zY3JpcHQgY291bnQsIGRpc3RpbmN0IGdlbmVzIGFuZCBjZWxscyxcbiAgICogdGhlIG1vc3QgZnJlcXVlbnQgb2YgZWFjaCDigJQgb3B0aW9uYWxseSByZXN0cmljdGVkIHRvIGBnZW5lc2Ag4oCUIHBsdXMgZGlzcGxheSBpZHMgZm9yXG4gICAqIGBjZWxsc2AuIE9taXQgYGJveGAgZm9yIGEgY2VsbC1pZCBsb29rdXAgb25seS4gT3B0aW9uYWw7IGRyaXZlcyB0aGUgaG92ZXIgZGV0YWlscyBvZlxuICAgKiB0cmFuc2NyaXB0IG1hcmtlcnMuXG4gICAqL1xuICBnZXRUcmFuc2NyaXB0U3VtbWFyeT8ocXVlcnk6IHtcbiAgICBib3g/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTsgZ2VuZXM/OiBzdHJpbmdbXTsgY2VsbHM/OiBudW1iZXJbXTtcbiAgfSk6IFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRTdW1tYXJ5PjtcblxuICAvKipcbiAgICogVGhlIHN1bW1lZCB0cmFuc2NyaXB0IGRlbnNpdHkgb2YgYGdlbmVzYCAoYFtBTExfR0VORVNdYCBmb3IgZXZlcnkgZ2VuZSkgb24gdGhlXG4gICAqIGRhdGFzZXQncyBgZGVuc2l0eWAgcmFzdGVyLCByZS1iaW5uZWQgdG8gYGJpblNpemVgIG9ic2VydmF0aW9uIHVuaXRzIHdoZW4gZ2l2ZW4uXG4gICAqIE9wdGlvbmFsOiBvbmx5IGRhdGFzZXRzIHRoYXQgYWR2ZXJ0aXNlIGBkZW5zaXR5YCBuZWVkIGl0LlxuICAgKi9cbiAgZ2V0RGVuc2l0eT8oZ2VuZXM6IHN0cmluZ1tdLCBiaW5TaXplPzogbnVtYmVyKTogUHJvbWlzZTxTcGF0aWFsRGVuc2l0eVJhc3Rlcj47XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIGNlbGwgZ3JvdXBpbmcg4oCUIGEgQ1NWL1RTViBvZiBgY2VsbF9pZGAgYW5kIGBncm91cGAg4oCUIHVuZGVyIGBsYWJlbGAuIFRoZSBuZXdcbiAgICogY2F0ZWdvcmljYWwgY29sdW1uIGlzIGFkZGVkIHRvIHRoZSBkYXRhc2V0ICh3aGljaCByZS1lbWl0cykgYW5kIHJlc29sdmVkLiBPcHRpb25hbC5cbiAgICovXG4gIGltcG9ydEdyb3Vwcz8obGFiZWw6IHN0cmluZywgdGFibGU6IHN0cmluZyk6IFByb21pc2U8eyBjb2x1bW46IENhdGVnb3JpY2FsQ29sdW1uTWV0YTsgbWF0Y2hlZDogbnVtYmVyIH0+O1xuXG4gIC8qKiBUcmFuc2NyaXB0IHRvdGFscyBwZXIgZ2VuZSwgZm9yIGVzdGltYXRpbmcgaG93IG1hbnkgbWFya2VycyBhIHNlbGVjdGlvbiBkcmF3cy4gKi9cbiAgZ2V0VHJhbnNjcmlwdENvdW50cz8oZ2VuZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxTcGF0aWFsVHJhbnNjcmlwdENvdW50cz47XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2Ugdm9sdW1lJ3Mgdm94ZWxzOiBhIHVpbnQ4IHNjYWxhciBmaWVsZCwgeC1mYXN0ZXN0LCBvZiBleGFjdGx5XG4gICAqIGB3aWR0aCAqIGhlaWdodCAqIGRlcHRoYCBieXRlcyBhcyB0aGUgZGF0YXNldCdzIHtAbGluayBTcGF0aWFsVm9sdW1lTWV0YX1cbiAgICogZGVjbGFyZXMuXG4gICAqXG4gICAqIE9wdGlvbmFsLCBhbmQgb25seSBtZWFuaW5nZnVsIHdoZW4gdGhlIGRhdGFzZXQgYWR2ZXJ0aXNlcyBhIHZvbHVtZS4gU2VwYXJhdGVcbiAgICogZnJvbSBgZ2V0RGF0YXNldCQoKWAgYmVjYXVzZSBpdCBpcyBtZWdhYnl0ZXM6IGEgaG9zdCB0aGF0IG5ldmVyIG9wZW5zIHRoZSAzRFxuICAgKiBtb2RlIHNob3VsZCBuZXZlciBwYXkgZm9yIGl0LlxuICAgKi9cbiAgZ2V0Vm9sdW1lPygpOiBQcm9taXNlPFVpbnQ4QXJyYXk+O1xuXG4gIC8qKlxuICAgKiBTZXJ2ZXItc2lkZSBcIndoaWNoIG9ic2VydmF0aW9ucyBmYWxsIGluc2lkZSB0aGlzIHBvbHlnb25cIiwgZm9yIGRhdGFzZXRzXG4gICAqIHRvbyBsYXJnZSB0byBoaXQtdGVzdCBjbGllbnQtc2lkZS4gT3B0aW9uYWw6IHdpdGhvdXQgaXQgdGhlIGxpYnJhcnlcbiAgICogcG9pbnQtaW4tcG9seWdvbnMgdGhlIHJlc2lkZW50IGNvb3JkaW5hdGVzIGl0c2VsZiwgd2hpY2ggaXMgZmluZSBpbnRvIHRoZVxuICAgKiAxMF41IHJhbmdlLiBDb29yZGluYXRlcyBhcmUgaW4gdGhlIHNhbWUgc3BhY2UgYXMgdGhlIG9ic2VydmF0aW9ucy5cbiAgICovXG4gIHF1ZXJ5Um9pPyhwb2x5Z29uOiB7IHg6IG51bWJlcltdOyB5OiBudW1iZXJbXSB9KTogUHJvbWlzZTxVaW50MzJBcnJheT47XG59XG5cbmV4cG9ydCBjb25zdCBTUEFUSUFMX0RBVEFfUE9SVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTcGF0aWFsRGF0YVBvcnQ+KCdTUEFUSUFMX0RBVEFfUE9SVCcpO1xuIl19
@@ -38,8 +38,10 @@ export function isCategoricalColumn(c) {
38
38
  export function isContinuousColumn(c) {
39
39
  return c.meta.kind === 'continuous';
40
40
  }
41
+ /** "No observation" in {@link SpatialTranscriptTile.observation}. */
42
+ export const NO_OBSERVATION = 0xffffffff;
41
43
  /** Look a column's descriptor up by name. */
42
44
  export function findColumnMeta(dataset, name) {
43
45
  return dataset.columns.find((c) => c.name === name);
44
46
  }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQW9FSDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFtQmxDLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxDQUFnQjtJQUNsRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQztBQUN2QyxDQUFDO0FBQ0QsTUFBTSxVQUFVLGtCQUFrQixDQUFDLENBQWdCO0lBQ2pELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDO0FBQ3RDLENBQUM7QUFpTEQsNkNBQTZDO0FBQzdDLE1BQU0sVUFBVSxjQUFjLENBQzVCLE9BQXVCLEVBQUUsSUFBWTtJQUVyQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJhY2tlbmQtbmV1dHJhbCBkYXRhIG1vZGVsIGZvciBhICoqc3BhdGlhbC1vbWljcyBkYXRhc2V0Kio6IE4gb2JzZXJ2YXRpb25zXG4gKiAoVmlzaXVtIHNwb3RzLCBzZWdtZW50ZWQgY2VsbHMsIG51Y2xlaSwg4oCmKSBwb3NpdGlvbmVkIGluIHRoZSBwaXhlbCBzcGFjZSBvZiBhXG4gKiB0aXNzdWUgaW1hZ2UsIGVhY2ggY2FycnlpbmcgY2F0ZWdvcmljYWwgYW5kIGNvbnRpbnVvdXMgYW5ub3RhdGlvbnMsIHBsdXMgYW5cbiAqIG9wdGlvbmFsIGZlYXR1cmUgKGdlbmUpIG1hdHJpeCBhbmQgb3B0aW9uYWwgcGVyLW9ic2VydmF0aW9uIGJvdW5kYXJpZXMuXG4gKlxuICogREVTSUdOXG4gKiAtLS0tLS1cbiAqIDEuICoqU3RydWN0LW9mLWFycmF5cywgbm90IG9iamVjdC1wZXItY2VsbC4qKiBSZWFsIGRhdGFzZXRzIHJ1biAxMF4zIChWaXNpdW0pXG4gKiAgICB0byAxMF42IChYZW5pdW0vQ29zTXgpIG9ic2VydmF0aW9ucy4gYHt4LCB5fVtdYCBhdCA1MDBrIGNlbGxzIGlzIH41MDBrXG4gKiAgICBvYmplY3RzIHRoZSBHQyBoYXMgdG8gd2FsazsgdHdvIGBGbG9hdDMyQXJyYXlgcyBhcmUgdHdvIGFsbG9jYXRpb25zIGFuZFxuICogICAgdXBsb2FkIHRvIHRoZSBHUFUgd2l0aG91dCBhIGNvcHkuXG4gKlxuICogMi4gKipNZXRhZGF0YSBpcyBlYWdlciwgdmFsdWVzIGFyZSBsYXp5LioqIEEgZGF0YXNldCBhZHZlcnRpc2VzICp3aGljaCpcbiAqICAgIGNvbHVtbnMgYW5kIGZlYXR1cmVzIGV4aXN0ICh7QGxpbmsgU3BhdGlhbENvbHVtbk1ldGF9LFxuICogICAge0BsaW5rIFNwYXRpYWxGZWF0dXJlTWV0YX0pOyB0aGUgdmVjdG9ycyB0aGVtc2VsdmVzIGFyZSBmZXRjaGVkIG9uIGRlbWFuZFxuICogICAgdGhyb3VnaCB7QGxpbmsgU3BhdGlhbERhdGFQb3J0fS4gQSBWaXNpdW0gdGFibGUgaXMgfjMwayBnZW5lcyB3aWRlIOKAlCB0aGVcbiAqICAgIGRlbnNlIG1hdHJpeCBpcyB+ODAwIE1CIOKAlCBzbyBcImxvYWQgdGhlIGRhdGFzZXRcIiBjYW4gbmV2ZXIgbWVhbiBcImxvYWQgdGhlXG4gKiAgICBtYXRyaXhcIi4gT25seSB0aGUgaGFuZGZ1bCBvZiBjb2x1bW5zIGFjdHVhbGx5IGJlaW5nIGRpc3BsYXllZCBpcyByZXNpZGVudC5cbiAqXG4gKiAzLiAqKkRhdGEgc3RheXMgZGF0YS4qKiBObyBJL08sIG5vIFJ4SlMsIG5vIEFuZ3VsYXIgaW4gdGhpcyBmaWxlIOKAlCB0aGUgc2FtZVxuICogICAgcnVsZSBgcGxvdGx5LXRyYWNlLWJ1aWxkZXJzLnRzYCBmb2xsb3dzLiBGZXRjaGluZyBsaXZlcyBvbiB0aGUgcG9ydC5cbiAqXG4gKiBUaGUgc2hhcGUgbWlycm9ycyBob3cgdGhlIGZpZWxkIGFscmVhZHkgc3RvcmVzIHRoaXMgKFNwYXRpYWxEYXRhL0FubkRhdGE6XG4gKiBgb2JzYCBhbm5vdGF0aW9ucywgYHZhcmAgZmVhdHVyZXMsIGBvYnNtL3NwYXRpYWxgIGNvb3JkaW5hdGVzLCBzaGFwZXMgd2l0aCBhXG4gKiBjb29yZGluYXRlIHRyYW5zZm9ybSkgc28gYW4gYWRhcHRlciBpcyBhIHByb2plY3Rpb24sIG5vdCBhIHRyYW5zbGF0aW9uLlxuICovXG5cbi8qKlxuICogT2JzZXJ2YXRpb24gcG9zaXRpb25zLiBFdmVyeSBhcnJheSBpcyBsZW5ndGgge0BsaW5rIGNvdW50fSBhbmQgaW5kZXgtYWxpZ25lZDpcbiAqIG9ic2VydmF0aW9uIGBpYCBpcyBhdCBgKHhbaV0sIHlbaV0pYCwgYW5kIGNvbHVtbi9mZWF0dXJlIHZlY3RvcnMgaW5kZXggdGhlXG4gKiBzYW1lIHdheS4gVGhpcyBzaGFyZWQgaW5kZXggaXMgdGhlIGpvaW4ga2V5IGZvciB0aGUgd2hvbGUgbW9kZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbE9ic2VydmF0aW9ucyB7XG4gIC8qKiBOIOKAlCBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zLiAqL1xuICByZWFkb25seSBjb3VudDogbnVtYmVyO1xuICAvKiogWCBpbiB0aGUgcmVmZXJlbmNlIGltYWdlJ3MgcGl4ZWwgc3BhY2UgKHNlZSB7QGxpbmsgU3BhdGlhbEltYWdlUmVmfSkuICovXG4gIHg6IEZsb2F0MzJBcnJheTtcbiAgLyoqIFkgaW4gdGhlIHJlZmVyZW5jZSBpbWFnZSdzIHBpeGVsIHNwYWNlLiAqL1xuICB5OiBGbG9hdDMyQXJyYXk7XG4gIC8qKiBaLCBmb3Igc2VyaWFsIHNlY3Rpb25zIG9yIGdlbnVpbmVseSAzRCBhc3NheXMuIEFic2VudCBmb3IgYSBzaW5nbGUgcGxhbmUuICovXG4gIHo/OiBGbG9hdDMyQXJyYXk7XG4gIC8qKiBTdGFibGUgcGVyLW9ic2VydmF0aW9uIGlkcyAoYmFyY29kZXMsIGNlbGwgaWRzKSBmb3IgdG9vbHRpcHMgYW5kIGV4cG9ydC5cbiAgICogIE9wdGlvbmFsIOKAlCBvbWl0IGZvciBsYXJnZSBkYXRhc2V0cyB3aGVyZSB0aGUgc3RyaW5ncyBjb3N0IG1vcmUgdGhhbiB0aGV5XG4gICAqICBhcmUgd29ydGguICovXG4gIGlkcz86IHN0cmluZ1tdO1xuICAvKiogTWFya2VyIFJBRElVUyBpbiBpbWFnZSBwaXhlbHM6IG9uZSB2YWx1ZSBzaGFyZWQgYnkgYWxsIG9ic2VydmF0aW9ucyAoYVxuICAgKiAgVmlzaXVtIHNwb3QgaXMgYSBmaXhlZCA1NSDCtW0g4oeSIGAyNy41IC8gbXBwWGAgcHgpLCBvciBvbmUgcGVyIG9ic2VydmF0aW9uXG4gICAqICAoc2VnbWVudGVkIGNlbGxzKS4gQWJzZW50IOKHkiB0aGUgcmVuZGVyZXIgcGlja3MgYSBkaXNwbGF5IGRlZmF1bHQuICovXG4gIHJhZGl1cz86IEZsb2F0MzJBcnJheSB8IG51bWJlcjtcbn1cblxuLyoqIEZpZWxkcyBjb21tb24gdG8gZXZlcnkgY29sdW1uIGRlc2NyaXB0b3IuICovXG5pbnRlcmZhY2UgU3BhdGlhbENvbHVtbk1ldGFCYXNlIHtcbiAgLyoqIENvbHVtbiBuYW1lIGFzIHRoZSB1c2VyIHNlZXMgaXQgKGBsZWlkZW5gLCBgdG90YWxfY291bnRzYCkuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIExvbmdlciBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBmb3IgdG9vbHRpcHMvbWVudXMuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgZGlzY3JldGUgYW5ub3RhdGlvbiDigJQgY2x1c3RlciwgY2VsbCB0eXBlLCByZWdpb24sIHNhbXBsZS4gUmVuZGVyZWQgYXMgYVxuICogcGFsZXR0ZSArIGxlZ2VuZDsgYSBsZWdlbmQgY2xpY2sgc2VsZWN0cyB0aGUgY2F0ZWdvcnkncyBvYnNlcnZhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcmljYWxDb2x1bW5NZXRhIGV4dGVuZHMgU3BhdGlhbENvbHVtbk1ldGFCYXNlIHtcbiAga2luZDogJ2NhdGVnb3JpY2FsJztcbiAgLyoqIENhdGVnb3J5IGxhYmVsczsgYSB2YWx1ZSdzIGxhYmVsIGlzIGBjYXRlZ29yaWVzW2NvZGVzW2ldXWAuICovXG4gIGNhdGVnb3JpZXM6IHN0cmluZ1tdO1xuICAvKiogQXV0aG9yZWQgZGlzcGxheSBjb2xvdXJzIGFzIGAjcnJnZ2JiYCwgaW5kZXgtYWxpZ25lZCB3aXRoXG4gICAqICB7QGxpbmsgY2F0ZWdvcmllc30uIFN1cHBseSB0aGVzZSB0byBrZWVwIHRoZSB2aWV3ZXIncyBwYWxldHRlIGlkZW50aWNhbCB0b1xuICAgKiAgdGhlIGZpZ3VyZXMgdGhlIHNhbWUgYW5hbHlzaXMgcHJvZHVjZWQgaW4gUi9QeXRob247IG9taXQgdG8gbGV0IHRoZSB2aWV3ZXJcbiAgICogIGRlcml2ZSBvbmUuICovXG4gIGNvbG9ycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY29udGludW91cyBtZWFzdXJlbWVudCDigJQgZXhwcmVzc2lvbiwgUUMgbWV0cmljLCBhcmVhLCBkZW5zaXR5LiBSZW5kZXJlZFxuICogdGhyb3VnaCB0aGUgc2hhcmVkIGNvbG9ybWFwL0xVVCArIGNvbnRyYXN0IHdpbmRvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250aW51b3VzQ29sdW1uTWV0YSBleHRlbmRzIFNwYXRpYWxDb2x1bW5NZXRhQmFzZSB7XG4gIGtpbmQ6ICdjb250aW51b3VzJztcbiAgLyoqIFVuaXQgZm9yIGF4aXMvdG9vbHRpcCBsYWJlbHMgKGBjb3VudHNgLCBgwrVtwrJgKS4gKi9cbiAgdW5pdD86IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgY29sdW1uIHJlYWRzIGJlc3QgbG9nLXNjYWxlZCDigJQgY291bnQgZGF0YSBhbG1vc3QgYWx3YXlzXG4gICAqICBkb2VzLCBhbmQgYSBsaW5lYXIgc2NhbGUgY29sbGFwc2VzIGl0IGFnYWluc3QgYSBmZXcgYnJpZ2h0IG91dGxpZXJzLiAqL1xuICBsb2dTY2FsZUhpbnQ/OiBib29sZWFuO1xuICAvKiogT2JzZXJ2ZWQgZXh0cmVtZXMsIHdoZW4gdGhlIHByb2R1Y2VyIGtub3dzIHRoZW0uIExldHMgdGhlIFVJIHNlZWQgYVxuICAgKiAgY29udHJhc3Qgd2luZG93IGFuZCBheGlzIHJhbmdlIHdpdGhvdXQgZmlyc3Qgc2Nhbm5pbmcgdGhlIHZlY3Rvci4gKi9cbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFNwYXRpYWxDb2x1bW5NZXRhID0gQ2F0ZWdvcmljYWxDb2x1bW5NZXRhIHwgQ29udGludW91c0NvbHVtbk1ldGE7XG5cbi8qKlxuICogQ29kZSBtZWFuaW5nIFwidGhpcyBvYnNlcnZhdGlvbiBoYXMgbm8gY2F0ZWdvcnlcIiAodW5hc3NpZ25lZCAvIGZpbHRlcmVkIG91dCAvXG4gKiBub3QgaW4gdGlzc3VlKS4gUmVuZGVyZXJzIHNob3VsZCBkcmF3IGl0IGluIHRoZSBtdXRlZCBiYWNrZ3JvdW5kIHN0eWxlIHJhdGhlclxuICogdGhhbiBhcyBhIHJlYWwgY2F0ZWdvcnksIGFuZCBpdCBtdXN0IG5ldmVyIGluZGV4IHtAbGlua1xuICogQ2F0ZWdvcmljYWxDb2x1bW5NZXRhLmNhdGVnb3JpZXN9LlxuICovXG5leHBvcnQgY29uc3QgTk9fQ0FURUdPUlkgPSAweGZmZmY7XG5cbi8qKiBBIGxvYWRlZCBjYXRlZ29yaWNhbCBjb2x1bW46IHBlci1vYnNlcnZhdGlvbiBpbmRpY2VzIGludG8gYG1ldGEuY2F0ZWdvcmllc2AsXG4gKiAgb3Ige0BsaW5rIE5PX0NBVEVHT1JZfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcmljYWxDb2x1bW4ge1xuICBtZXRhOiBDYXRlZ29yaWNhbENvbHVtbk1ldGE7XG4gIC8qKiBMZW5ndGggPSB7QGxpbmsgU3BhdGlhbE9ic2VydmF0aW9ucy5jb3VudH0uICovXG4gIGNvZGVzOiBVaW50MTZBcnJheTtcbn1cblxuLyoqIEEgbG9hZGVkIGNvbnRpbnVvdXMgY29sdW1uLiBgTmFOYCBtYXJrcyBhIG1pc3NpbmcgdmFsdWUuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRpbnVvdXNDb2x1bW4ge1xuICBtZXRhOiBDb250aW51b3VzQ29sdW1uTWV0YTtcbiAgLyoqIExlbmd0aCA9IHtAbGluayBTcGF0aWFsT2JzZXJ2YXRpb25zLmNvdW50fS4gKi9cbiAgdmFsdWVzOiBGbG9hdDMyQXJyYXk7XG59XG5cbmV4cG9ydCB0eXBlIFNwYXRpYWxDb2x1bW4gPSBDYXRlZ29yaWNhbENvbHVtbiB8IENvbnRpbnVvdXNDb2x1bW47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhdGVnb3JpY2FsQ29sdW1uKGM6IFNwYXRpYWxDb2x1bW4pOiBjIGlzIENhdGVnb3JpY2FsQ29sdW1uIHtcbiAgcmV0dXJuIGMubWV0YS5raW5kID09PSAnY2F0ZWdvcmljYWwnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGludW91c0NvbHVtbihjOiBTcGF0aWFsQ29sdW1uKTogYyBpcyBDb250aW51b3VzQ29sdW1uIHtcbiAgcmV0dXJuIGMubWV0YS5raW5kID09PSAnY29udGludW91cyc7XG59XG5cbi8qKlxuICogVGhlIGZlYXR1cmUgKGdlbmUpIG1hdHJpeCwgZGVzY3JpYmVkIGJ1dCBuZXZlciBkZWxpdmVyZWQgd2hvbGUuIFZlY3RvcnMgY29tZVxuICogb25lIGF0IGEgdGltZSBmcm9tIHtAbGluayBTcGF0aWFsRGF0YVBvcnQuZ2V0RmVhdHVyZVZlY3Rvcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbEZlYXR1cmVNZXRhIHtcbiAgLyoqIE51bWJlciBvZiBmZWF0dXJlcyBhdmFpbGFibGUuICovXG4gIGNvdW50OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBbGwgZmVhdHVyZSBuYW1lcywgd2hlbiB0aGUgcHJvZHVjZXIgY2hvc2UgdG8gaW5saW5lIHRoZW0uIFByZXNlbnQgZm9yXG4gICAqIHRhcmdldGVkIHBhbmVscyAoWGVuaXVtL0Nvc014IHNoaXAgMzAw4oCTNSwwMDAgZ2VuZXMg4oeSIGEgZmV3IGRvemVuIEtCKSBhbmRcbiAgICogYWJzZW50IGZvciB3aG9sZS10cmFuc2NyaXB0b21lIGRhdGEgKFZpc2l1bSBzaGlwcyB+MzFrIOKHkiB+MzUwIEtCKSwgd2hlcmVcbiAgICogdGhlIFVJIHNob3VsZCB1c2Uge0BsaW5rIFNwYXRpYWxEYXRhUG9ydC5zZWFyY2hGZWF0dXJlc30gZm9yIHR5cGVhaGVhZFxuICAgKiBpbnN0ZWFkIG9mIGRvd25sb2FkaW5nIHRoZSBsaXN0LiBDb25zdW1lcnMgbXVzdCBoYW5kbGUgYm90aC5cbiAgICovXG4gIG5hbWVzPzogc3RyaW5nW107XG4gIC8qKiBXaGF0IGEgZmVhdHVyZSB2YWx1ZSBtZWFucyAoYGxvZzFwIG5vcm1hbGl6ZWRgLCBgcmF3IGNvdW50c2ApLiAqL1xuICB1bml0Pzogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIGZlYXR1cmUgdmVjdG9ycyByZWFkIGJlc3QgbG9nLXNjYWxlZCAocmF3IGNvdW50cykuICovXG4gIGxvZ1NjYWxlSGludD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGVyLW9ic2VydmF0aW9uIGJvdW5kYXJpZXMgKGNlbGwvbnVjbGV1cyBzZWdtZW50YXRpb24sIHNwb3Qgb3V0bGluZXMpIGFzIGZsYXRcbiAqIHJpbmdzIOKAlCBkZWxpYmVyYXRlbHkgTk9UIEdlb0pTT04gb2JqZWN0cywgd2hpY2ggY29zdCBvbmUgb2JqZWN0ICsgb25lIGFycmF5XG4gKiBwZXIgY2VsbCBhbmQgd291bGQgZG9taW5hdGUgbWVtb3J5IGF0IDEwXjUgcG9seWdvbnMuXG4gKlxuICogUmluZyBgaWAgb2NjdXBpZXMgYGNvb3Jkc1syKm9mZnNldHNbaV0gLi4gMipvZmZzZXRzW2krMV0pYCBhcyBgeDAseTAseDEseTEs4oCmYFxuICogYW5kIGlzIGltcGxpY2l0bHkgY2xvc2VkLiBgb2Zmc2V0c2AgaGFzIGxlbmd0aCBgY291bnQgKyAxYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsUG9seWdvbnMge1xuICBjb29yZHM6IEZsb2F0MzJBcnJheTtcbiAgb2Zmc2V0czogVWludDMyQXJyYXk7XG4gIC8qKiBOdW1iZXIgb2YgcmluZ3Mg4oCUIGBvZmZzZXRzLmxlbmd0aCAtIDFgLiAqL1xuICByZWFkb25seSBjb3VudDogbnVtYmVyO1xufVxuXG4vKiogUHJlc2VuY2Uvc2l6ZSBvZiB0aGUgYm91bmRhcnkgZ2VvbWV0cnksIHdpdGhvdXQgbG9hZGluZyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbFBvbHlnb25zTWV0YSB7XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogSG93IG9ic2VydmF0aW9uIGNvb3JkaW5hdGVzIHJlbGF0ZSB0byB0aGUgdGlzc3VlIGltYWdlIHRoZXkgYXJlIGRyYXduIG92ZXIuXG4gKiBBcHBsaWVkIGFzIGB3b3JsZCA9IGNvb3JkICogc2NhbGUgKyB0cmFuc2xhdGVgLCBtYXRjaGluZyB0aGUgYWZmaW5lIHRoYXRcbiAqIFNwYXRpYWxEYXRhIHJlY29yZHMgcGVyIGNvb3JkaW5hdGUgc3lzdGVtIOKAlCBhbmQgdGhlIGZ1bGwtcmVzb2x1dGlvbiB3b3JsZFxuICogY29udmVudGlvbiB0aGUgbmFwYXJpLWpzIGJhY2tlbmQgYWxyZWFkeSB1c2VzIHNvIHByZS1zYXZlZCByZWdpb25zIGFsaWduIG9uXG4gKiBweXJhbWlkYWwgc2xpZGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxJbWFnZVJlZiB7XG4gIC8qKiBIb3N0LWRlZmluZWQgaWQgb2YgdGhlIGltYWdlIHRoZXNlIGNvb3JkaW5hdGVzIGxpdmUgaW4sIHNvIHRoZSBob3N0IGNhblxuICAgKiAgcmVzb2x2ZSBpdCB0byBhbiBgSUltYWdlSW5mb2AuICovXG4gIGltYWdlSWQ/OiBzdHJpbmc7XG4gIC8qKiBEYXRh4oaSd29ybGQgc2NhbGUuIERlZmF1bHRzIHRvIGBbMSwgMV1gIChjb29yZGluYXRlcyBhbHJlYWR5IGluXG4gICAqICBmdWxsLXJlc29sdXRpb24gaW1hZ2UgcGl4ZWxzKS4gKi9cbiAgc2NhbGU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKiogRGF0YeKGkndvcmxkIHRyYW5zbGF0aW9uLCBpbiB0aGUgc2FtZSB1bml0cyBhcyB7QGxpbmsgc2NhbGV9J3Mgb3V0cHV0LiAqL1xuICB0cmFuc2xhdGU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKiogUGh5c2ljYWwgcGl4ZWwgc2l6ZSBpbiDCtW0g4oCUIGRyaXZlcyB0aGUgc2NhbGUgYmFyIGFuZCBwaHlzaWNhbCBtYXJrZXJcbiAgICogIHNpemluZyAoYSA1NSDCtW0gVmlzaXVtIHNwb3QpLiAqL1xuICBtcHBYPzogbnVtYmVyO1xuICBtcHBZPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgc3BhdGlhbC1vbWljcyBkYXRhc2V0OiBldmVyeXRoaW5nIGNoZWFwIGVub3VnaCB0byBob2xkIHJlc2lkZW50LiBDb2x1bW4gYW5kXG4gKiBmZWF0dXJlICp2YWx1ZXMqLCBhbmQgcG9seWdvbiAqZ2VvbWV0cnkqLCBhcmUgZmV0Y2hlZCB0aHJvdWdoXG4gKiB7QGxpbmsgU3BhdGlhbERhdGFQb3J0fSBhcyB0aGV5IGFyZSBkaXNwbGF5ZWQuXG4gKi9cbi8qKlxuICogQSBwcmVjb21wdXRlZCBsb3ctZGltZW5zaW9uYWwgZW1iZWRkaW5nIG92ZXIgdGhlIFNBTUUgb2JzZXJ2YXRpb25zIOKAlCBVTUFQLCB0LVNORSwgUENBLlxuICpcbiAqIEFubm91bmNlZCBpbiB0aGUgZGF0YXNldCBhbmQgZmV0Y2hlZCBvbiBkZW1hbmQsIGV4YWN0bHkgbGlrZSBhIGNvbHVtbiBvciBhIGdlbmU6IHRoZVxuICogY29vcmRpbmF0ZXMgYXJlIGFub3RoZXIgcGVyLW9ic2VydmF0aW9uIHZlY3RvciwgYW5kIGEgZGF0YXNldCBtYXkgY2Fycnkgc2V2ZXJhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsRW1iZWRkaW5nTWV0YSB7XG4gIC8qKiBLZXkgYXMgdGhlIHNvdXJjZSBuYW1lcyBpdCwgZS5nLiBgWF91bWFwYC4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU2hvcnQgbGFiZWwgZm9yIG1lbnVzOyBmYWxscyBiYWNrIHRvIHtAbGluayBuYW1lfS4gKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiAyIGZvciBhIHBsYW5lLCAzIGZvciBhIGNsb3VkLiAqL1xuICBkaW1zOiAyIHwgMztcbiAgLyoqXG4gICAqIFRydWUgd2hlbiB0aGUgY29vcmRpbmF0ZXMgd2VyZSBDT01QVVRFRCBmb3IgdGhpcyBidW5kbGUgcmF0aGVyIHRoYW4gcHVibGlzaGVkIHdpdGggdGhlXG4gICAqIGRhdGFzZXQuIFdvcnRoIHN1cmZhY2luZzogYSBVTUFQIHJlY29tcHV0ZWQgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycyBpcyBhIGRpZmZlcmVudCBwaWN0dXJlLFxuICAgKiBhbmQgYSByZWFkZXIgY29tcGFyaW5nIGFnYWluc3QgYSBwYXBlcidzIGZpZ3VyZSBuZWVkcyB0byBrbm93IHdoaWNoIHRoZXkgYXJlIGxvb2tpbmcgYXQuXG4gICAqL1xuICBkZXJpdmVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZyYWN0aW9uIG9mIHRvdGFsIHZhcmlhbmNlIGVhY2ggYXhpcyBhY2NvdW50cyBmb3IsIGluZGV4LWFsaWduZWQgd2l0aCB0aGUgZGltZW5zaW9ucy5cbiAgICpcbiAgICogT25seSBtZWFuaW5nZnVsIGZvciBhIExJTkVBUiBlbWJlZGRpbmcg4oCUIFBDQS4gSXRzIGF4ZXMgYXJlIG9yZGVyZWQsIGFuZCBlYWNoIG9uZSBleHBsYWlucyBhXG4gICAqIG1lYXN1cmFibGUgc2hhcmUgb2YgdGhlIHZhcmlhbmNlLCB3aGljaCBpcyB0aGUgd2hvbGUgcmVhc29uIHRvIGxvb2sgYXQgYSBQQ0EgcmF0aGVyIHRoYW4gYVxuICAgKiBVTUFQOiBcIlBDMSAoMjMlKVwiIHNheXMgc29tZXRoaW5nLCB3aGVyZSBcIlVNQVAgMVwiIHNheXMgbm90aGluZyBhdCBhbGwuIEEgVU1BUCdzIGNvb3JkaW5hdGVzXG4gICAqIGFyZSBhbiBhcmJpdHJhcnkgb3V0cHV0IG9mIGFuIG9wdGltaXNhdGlvbiB3aXRoIG5vIHZhcmlhbmNlIHRvIHJlcG9ydCwgc28gdGhpcyBzdGF5cyBhYnNlbnRcbiAgICogdGhlcmUgcmF0aGVyIHRoYW4gYmVpbmcgZmFrZWQuXG4gICAqL1xuICB2YXJpYW5jZVJhdGlvPzogbnVtYmVyW107XG4gIC8qKlxuICAgKiBIb3cgYSBkZXJpdmVkIGVtYmVkZGluZyB3YXMgY29tcHV0ZWQsIGluIGEgZmV3IHdvcmRzIOKAlCBlLmcuIFwiUENBKDUwKSB0aGVuIHBlcnBsZXhpdHkgMzAsXG4gICAqIHNlZWQgMFwiLlxuICAgKlxuICAgKiBOb3QgZGVjb3JhdGlvbi4gQSB0LVNORSBvciBVTUFQIGlzIHN0b2NoYXN0aWMsIGFuZCBpdHMgcGljdHVyZSBjaGFuZ2VzIG1hdGVyaWFsbHkgd2l0aFxuICAgKiBwZXJwbGV4aXR5IG9yIGBuX25laWdoYm9yc2A7IHR3byBydW5zIGF0IGRpZmZlcmVudCBzZXR0aW5ncyBhcmUgZGlmZmVyZW50IHBpY3R1cmVzIG9mIHRoZSBzYW1lXG4gICAqIGNlbGxzLCBhbmQgbmVpdGhlciBpcyBtb3JlIGNvcnJlY3QuIFNheWluZyBcImNvbXB1dGVkIGhlcmVcIiB3aXRob3V0IHNheWluZyBIT1cgbGVhdmVzIGEgcmVhZGVyXG4gICAqIHVuYWJsZSB0byByZXByb2R1Y2Ugb3IgY29tcGFyZSBpdC4gQWJzZW50IGZvciBhIHB1Ymxpc2hlZCBlbWJlZGRpbmcsIHdob3NlIHBhcmFtZXRlcnMgYmVsb25nXG4gICAqIHRvIHdob2V2ZXIgcHVibGlzaGVkIGl0LlxuICAgKi9cbiAgcGFyYW1zPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSBlbWJlZGRpbmcncyBjb29yZGluYXRlcy5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgc2hhcGVkIGxpa2Uge0BsaW5rIFNwYXRpYWxPYnNlcnZhdGlvbnN9JyBgeGAvYHlgL2B6YCByYXRoZXIgdGhhbiBhbiAoTiwgRCkgbWF0cml4OlxuICogdGhlIHBvaW50IG9mIGFuIGVtYmVkZGluZyBoZXJlIGlzIHRvIGJlIHN3YXBwZWQgaW4gYXMgdGhlIHNjYXR0ZXIncyBjb29yZGluYXRlIHNvdXJjZSwgYW5kXG4gKiBtYXRjaGluZyB0aGF0IHNoYXBlIG1lYW5zIHRoZSByZW5kZXJlciwgdGhlIGhvdmVyIGhpdC10ZXN0IGFuZCB0aGUgc2VsZWN0aW9uIGNvZGUgbmVlZCBub1xuICogdmFyaWFudCBmb3IgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbEVtYmVkZGluZyB7XG4gIG1ldGE6IFNwYXRpYWxFbWJlZGRpbmdNZXRhO1xuICB4OiBGbG9hdDMyQXJyYXk7XG4gIHk6IEZsb2F0MzJBcnJheTtcbiAgej86IEZsb2F0MzJBcnJheTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsRGF0YXNldCB7XG4gIC8qKiBTdGFibGUgaWQg4oCUIHRoZSBrZXkgdGhlIHBvcnQncyBsYXp5IGFjY2Vzc29ycyBhcmUgc2NvcGVkIHRvLiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgbWVudXMuICovXG4gIG5hbWU6IHN0cmluZztcbiAgb2JzZXJ2YXRpb25zOiBTcGF0aWFsT2JzZXJ2YXRpb25zO1xuICAvKiogRXZlcnkgY29sdW1uIGF2YWlsYWJsZSwgd2hldGhlciBvciBub3QgaXRzIHZhbHVlcyBhcmUgbG9hZGVkLiAqL1xuICBjb2x1bW5zOiBTcGF0aWFsQ29sdW1uTWV0YVtdO1xuICBmZWF0dXJlcz86IFNwYXRpYWxGZWF0dXJlTWV0YTtcbiAgcG9seWdvbnM/OiBTcGF0aWFsUG9seWdvbnNNZXRhO1xuICBpbWFnZVJlZj86IFNwYXRpYWxJbWFnZVJlZjtcbiAgLyoqIFByZXNlbmNlICsgZ2VvbWV0cnkgb2YgYSByZWZlcmVuY2Ugdm9sdW1lIHRoZSBvYnNlcnZhdGlvbnMgc2l0IGluc2lkZS4gKi9cbiAgdm9sdW1lPzogU3BhdGlhbFZvbHVtZU1ldGE7XG4gIC8qKiBFbWJlZGRpbmdzIGF2YWlsYWJsZSBmb3IgdGhlc2Ugb2JzZXJ2YXRpb25zLCB3aG9zZSBjb29yZGluYXRlcyBhcmUgZmV0Y2hlZCBvbiBkZW1hbmQuICovXG4gIGVtYmVkZGluZ3M/OiBTcGF0aWFsRW1iZWRkaW5nTWV0YVtdO1xuICAvKipcbiAgICogTWljcm9ucyBwZXIgb2JzZXJ2YXRpb24gY29vcmRpbmF0ZSB1bml0IOKAlCB3aGF0IG1ha2VzIGEgc2NhbGUgYmFyIHBvc3NpYmxlLlxuICAgKlxuICAgKiBUaGUgMkQgcGF0aCBnZXRzIHRoaXMgZnJvbSBgaW1hZ2VSZWYubXBwWGAsIGJlY2F1c2UgdGhlcmUgdGhlIGNvb3JkaW5hdGVzIGFyZVxuICAgKiBpbWFnZSBwaXhlbHMuIEEgM0QgY2xvdWQgaGFzIG5vIGltYWdlLCBzbyBpdCBoYXMgdG8gc2F5IGZvciBpdHNlbGY6IGAxYCBtZWFuc1xuICAgKiB0aGUgY29vcmRpbmF0ZXMgYXJlIGFscmVhZHkgbWljcm9ucy5cbiAgICpcbiAgICogQWJzZW50IG1lYW5zIHRoZSB1bml0IGlzIFVOS05PV04sIGFuZCBhIHJlbmRlcmVyIG11c3QgdGhlbiBkcmF3IG5vIHNjYWxlIGJhclxuICAgKiByYXRoZXIgdGhhbiBhc3N1bWUgb25lLiBBIGJhciBsYWJlbGxlZCBpbiBtaWNyb25zIG92ZXIgcGl4ZWwtc3BhY2VcbiAgICogY29vcmRpbmF0ZXMgaXMgd29yc2UgdGhhbiBubyBiYXI6IGl0IGxvb2tzIGxpa2UgYSBtZWFzdXJlbWVudC5cbiAgICovXG4gIG1pY3JvbnNQZXJVbml0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgM0Qgc2NhbGFyIHJlZmVyZW5jZSB2b2x1bWUgcmVnaXN0ZXJlZCB0byB0aGUgb2JzZXJ2YXRpb24gY29vcmRpbmF0ZXMg4oCUIHRoZVxuICogYW5hdG9taWNhbCBiYWNrZHJvcCBmb3IgYSBwb2ludCBjbG91ZCAoYW4gYXRsYXMgdGVtcGxhdGUsIG9yIGFuIGltYWdlIHotc3RhY2spLlxuICpcbiAqIEdlb21ldHJ5IG9ubHk7IHRoZSB2b3hlbHMgYXJlIGZldGNoZWQgdGhyb3VnaFxuICoge0BsaW5rIFNwYXRpYWxEYXRhUG9ydC5nZXRWb2x1bWV9IHdoZW4gc29tZXRoaW5nIGlzIGdvaW5nIHRvIGRyYXcgdGhlbS4gQSBjbG91ZFxuICogd2l0aG91dCBvbmUgc3RpbGwgcmVuZGVycywganVzdCBpbiBlbXB0eSBzcGFjZS5cbiAqXG4gKiBUaGUgb2JzZXJ2YXRpb25zJyBjb29yZGluYXRlIGZyYW1lIG11c3QgYmUgdGhlIHZvbHVtZSdzIG93bjogdm94ZWwgYChpLCBqLCBrKWBcbiAqIGNvdmVycyBgW2kgKiB2b3hlbFNpemVbMF0sIChpICsgMSkgKiB2b3hlbFNpemVbMF0pYCBvbiB4LCBhbmQgc28gb24uIFRoYXQgbWVhbnNcbiAqIHRoZSB2b2x1bWUncyBuZWFyIGNvcm5lciBzaXRzIGF0IHRoZSBjb29yZGluYXRlIG9yaWdpbiwgc28gYSByZW5kZXJlciBjYW4gcGxhY2VcbiAqIHRoZSB0d28gdG9nZXRoZXIga25vd2luZyBub3RoaW5nIGVsc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbFZvbHVtZU1ldGEge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZGVwdGg6IG51bWJlcjtcbiAgLyoqIFdvcmxkIHNpemUgb2Ygb25lIHZveGVsIHBlciBheGlzLCBpbiB0aGUgb2JzZXJ2YXRpb25zJyB1bml0cy4gKi9cbiAgdm94ZWxTaXplOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbi8qKiBMb29rIGEgY29sdW1uJ3MgZGVzY3JpcHRvciB1cCBieSBuYW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb2x1bW5NZXRhKFxuICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCwgbmFtZTogc3RyaW5nLFxuKTogU3BhdGlhbENvbHVtbk1ldGEgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZGF0YXNldC5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZSk7XG59XG4iXX0=
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQThFSDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFtQmxDLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxDQUFnQjtJQUNsRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQztBQUN2QyxDQUFDO0FBQ0QsTUFBTSxVQUFVLGtCQUFrQixDQUFDLENBQWdCO0lBQ2pELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDO0FBQ3RDLENBQUM7QUFxT0QscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFvR3pDLDZDQUE2QztBQUM3QyxNQUFNLFVBQVUsY0FBYyxDQUM1QixPQUF1QixFQUFFLElBQVk7SUFFckMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCYWNrZW5kLW5ldXRyYWwgZGF0YSBtb2RlbCBmb3IgYSAqKnNwYXRpYWwtb21pY3MgZGF0YXNldCoqOiBOIG9ic2VydmF0aW9uc1xuICogKFZpc2l1bSBzcG90cywgc2VnbWVudGVkIGNlbGxzLCBudWNsZWksIOKApikgcG9zaXRpb25lZCBpbiB0aGUgcGl4ZWwgc3BhY2Ugb2YgYVxuICogdGlzc3VlIGltYWdlLCBlYWNoIGNhcnJ5aW5nIGNhdGVnb3JpY2FsIGFuZCBjb250aW51b3VzIGFubm90YXRpb25zLCBwbHVzIGFuXG4gKiBvcHRpb25hbCBmZWF0dXJlIChnZW5lKSBtYXRyaXggYW5kIG9wdGlvbmFsIHBlci1vYnNlcnZhdGlvbiBib3VuZGFyaWVzLlxuICpcbiAqIERFU0lHTlxuICogLS0tLS0tXG4gKiAxLiAqKlN0cnVjdC1vZi1hcnJheXMsIG5vdCBvYmplY3QtcGVyLWNlbGwuKiogUmVhbCBkYXRhc2V0cyBydW4gMTBeMyAoVmlzaXVtKVxuICogICAgdG8gMTBeNiAoWGVuaXVtL0Nvc014KSBvYnNlcnZhdGlvbnMuIGB7eCwgeX1bXWAgYXQgNTAwayBjZWxscyBpcyB+NTAwa1xuICogICAgb2JqZWN0cyB0aGUgR0MgaGFzIHRvIHdhbGs7IHR3byBgRmxvYXQzMkFycmF5YHMgYXJlIHR3byBhbGxvY2F0aW9ucyBhbmRcbiAqICAgIHVwbG9hZCB0byB0aGUgR1BVIHdpdGhvdXQgYSBjb3B5LlxuICpcbiAqIDIuICoqTWV0YWRhdGEgaXMgZWFnZXIsIHZhbHVlcyBhcmUgbGF6eS4qKiBBIGRhdGFzZXQgYWR2ZXJ0aXNlcyAqd2hpY2gqXG4gKiAgICBjb2x1bW5zIGFuZCBmZWF0dXJlcyBleGlzdCAoe0BsaW5rIFNwYXRpYWxDb2x1bW5NZXRhfSxcbiAqICAgIHtAbGluayBTcGF0aWFsRmVhdHVyZU1ldGF9KTsgdGhlIHZlY3RvcnMgdGhlbXNlbHZlcyBhcmUgZmV0Y2hlZCBvbiBkZW1hbmRcbiAqICAgIHRocm91Z2gge0BsaW5rIFNwYXRpYWxEYXRhUG9ydH0uIEEgVmlzaXVtIHRhYmxlIGlzIH4zMGsgZ2VuZXMgd2lkZSDigJQgdGhlXG4gKiAgICBkZW5zZSBtYXRyaXggaXMgfjgwMCBNQiDigJQgc28gXCJsb2FkIHRoZSBkYXRhc2V0XCIgY2FuIG5ldmVyIG1lYW4gXCJsb2FkIHRoZVxuICogICAgbWF0cml4XCIuIE9ubHkgdGhlIGhhbmRmdWwgb2YgY29sdW1ucyBhY3R1YWxseSBiZWluZyBkaXNwbGF5ZWQgaXMgcmVzaWRlbnQuXG4gKlxuICogMy4gKipEYXRhIHN0YXlzIGRhdGEuKiogTm8gSS9PLCBubyBSeEpTLCBubyBBbmd1bGFyIGluIHRoaXMgZmlsZSDigJQgdGhlIHNhbWVcbiAqICAgIHJ1bGUgYHBsb3RseS10cmFjZS1idWlsZGVycy50c2AgZm9sbG93cy4gRmV0Y2hpbmcgbGl2ZXMgb24gdGhlIHBvcnQuXG4gKlxuICogVGhlIHNoYXBlIG1pcnJvcnMgaG93IHRoZSBmaWVsZCBhbHJlYWR5IHN0b3JlcyB0aGlzIChTcGF0aWFsRGF0YS9Bbm5EYXRhOlxuICogYG9ic2AgYW5ub3RhdGlvbnMsIGB2YXJgIGZlYXR1cmVzLCBgb2JzbS9zcGF0aWFsYCBjb29yZGluYXRlcywgc2hhcGVzIHdpdGggYVxuICogY29vcmRpbmF0ZSB0cmFuc2Zvcm0pIHNvIGFuIGFkYXB0ZXIgaXMgYSBwcm9qZWN0aW9uLCBub3QgYSB0cmFuc2xhdGlvbi5cbiAqL1xuXG4vKipcbiAqIE9ic2VydmF0aW9uIHBvc2l0aW9ucy4gRXZlcnkgYXJyYXkgaXMgbGVuZ3RoIHtAbGluayBjb3VudH0gYW5kIGluZGV4LWFsaWduZWQ6XG4gKiBvYnNlcnZhdGlvbiBgaWAgaXMgYXQgYCh4W2ldLCB5W2ldKWAsIGFuZCBjb2x1bW4vZmVhdHVyZSB2ZWN0b3JzIGluZGV4IHRoZVxuICogc2FtZSB3YXkuIFRoaXMgc2hhcmVkIGluZGV4IGlzIHRoZSBqb2luIGtleSBmb3IgdGhlIHdob2xlIG1vZGVsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxPYnNlcnZhdGlvbnMge1xuICAvKiogTiDigJQgbnVtYmVyIG9mIG9ic2VydmF0aW9ucy4gKi9cbiAgcmVhZG9ubHkgY291bnQ6IG51bWJlcjtcbiAgLyoqIFggaW4gdGhlIHJlZmVyZW5jZSBpbWFnZSdzIHBpeGVsIHNwYWNlIChzZWUge0BsaW5rIFNwYXRpYWxJbWFnZVJlZn0pLiAqL1xuICB4OiBGbG9hdDMyQXJyYXk7XG4gIC8qKiBZIGluIHRoZSByZWZlcmVuY2UgaW1hZ2UncyBwaXhlbCBzcGFjZS4gKi9cbiAgeTogRmxvYXQzMkFycmF5O1xuICAvKiogWiwgZm9yIHNlcmlhbCBzZWN0aW9ucyBvciBnZW51aW5lbHkgM0QgYXNzYXlzLiBBYnNlbnQgZm9yIGEgc2luZ2xlIHBsYW5lLiAqL1xuICB6PzogRmxvYXQzMkFycmF5O1xuICAvKiogU3RhYmxlIHBlci1vYnNlcnZhdGlvbiBpZHMgKGJhcmNvZGVzLCBjZWxsIGlkcykgZm9yIHRvb2x0aXBzIGFuZCBleHBvcnQuXG4gICAqICBPcHRpb25hbCDigJQgb21pdCBmb3IgbGFyZ2UgZGF0YXNldHMgd2hlcmUgdGhlIHN0cmluZ3MgY29zdCBtb3JlIHRoYW4gdGhleVxuICAgKiAgYXJlIHdvcnRoLiAqL1xuICBpZHM/OiBzdHJpbmdbXTtcbiAgLyoqIE1hcmtlciBSQURJVVMgaW4gaW1hZ2UgcGl4ZWxzOiBvbmUgdmFsdWUgc2hhcmVkIGJ5IGFsbCBvYnNlcnZhdGlvbnMgKGFcbiAgICogIFZpc2l1bSBzcG90IGlzIGEgZml4ZWQgNTUgwrVtIOKHkiBgMjcuNSAvIG1wcFhgIHB4KSwgb3Igb25lIHBlciBvYnNlcnZhdGlvblxuICAgKiAgKHNlZ21lbnRlZCBjZWxscykuIEFic2VudCDih5IgdGhlIHJlbmRlcmVyIHBpY2tzIGEgZGlzcGxheSBkZWZhdWx0LiAqL1xuICByYWRpdXM/OiBGbG9hdDMyQXJyYXkgfCBudW1iZXI7XG59XG5cbi8qKiBGaWVsZHMgY29tbW9uIHRvIGV2ZXJ5IGNvbHVtbiBkZXNjcmlwdG9yLiAqL1xuaW50ZXJmYWNlIFNwYXRpYWxDb2x1bW5NZXRhQmFzZSB7XG4gIC8qKiBDb2x1bW4gbmFtZSBhcyB0aGUgdXNlciBzZWVzIGl0IChgbGVpZGVuYCwgYHRvdGFsX2NvdW50c2ApLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBMb25nZXIgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gZm9yIHRvb2x0aXBzL21lbnVzLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGRpc2NyZXRlIGFubm90YXRpb24g4oCUIGNsdXN0ZXIsIGNlbGwgdHlwZSwgcmVnaW9uLCBzYW1wbGUuIFJlbmRlcmVkIGFzIGFcbiAqIHBhbGV0dGUgKyBsZWdlbmQ7IGEgbGVnZW5kIGNsaWNrIHNlbGVjdHMgdGhlIGNhdGVnb3J5J3Mgb2JzZXJ2YXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhdGVnb3JpY2FsQ29sdW1uTWV0YSBleHRlbmRzIFNwYXRpYWxDb2x1bW5NZXRhQmFzZSB7XG4gIGtpbmQ6ICdjYXRlZ29yaWNhbCc7XG4gIC8qKiBDYXRlZ29yeSBsYWJlbHM7IGEgdmFsdWUncyBsYWJlbCBpcyBgY2F0ZWdvcmllc1tjb2Rlc1tpXV1gLiAqL1xuICBjYXRlZ29yaWVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEhlYWRpbmcgdGhlIGNvbHVtbiBpcyBsaXN0ZWQgdW5kZXIgaW4gYSBncm91cCBwaWNrZXIg4oCUIGUuZy4gXCJYZW5pdW0gT25ib2FyZCBBbmFseXNpc1xuICAgKiBncm91cHNcIiBmb3IgYSBwaXBlbGluZSdzIGNsdXN0ZXJpbmdzLCBcIkltcG9ydGVkIGdyb3Vwc1wiIGZvciBvbmVzIGFkZGVkIGJ5IGEgdXNlci5cbiAgICovXG4gIHNlY3Rpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb2x1bW5zIHRoYXQgYXJlIHZhcmlhbnRzIG9mIG9uZSBjaG9pY2Ug4oCUIGstbWVhbnMgYXQgayA9IDLigKYxMCDigJQgc2hhcmUgYSBmYW1pbHk6IGFcbiAgICogcGlja2VyIGxpc3RzIHRoZSBmYW1pbHkgb25jZSBhbmQgb2ZmZXJzIHRoZSB2YXJpYW50cyBiZXNpZGUgaXQuXG4gICAqL1xuICBmYW1pbHk/OiB7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHZhcmlhbnQ6IHN0cmluZyB9O1xuICAvKiogQXV0aG9yZWQgZGlzcGxheSBjb2xvdXJzIGFzIGAjcnJnZ2JiYCwgaW5kZXgtYWxpZ25lZCB3aXRoXG4gICAqICB7QGxpbmsgY2F0ZWdvcmllc30uIFN1cHBseSB0aGVzZSB0byBrZWVwIHRoZSB2aWV3ZXIncyBwYWxldHRlIGlkZW50aWNhbCB0b1xuICAgKiAgdGhlIGZpZ3VyZXMgdGhlIHNhbWUgYW5hbHlzaXMgcHJvZHVjZWQgaW4gUi9QeXRob247IG9taXQgdG8gbGV0IHRoZSB2aWV3ZXJcbiAgICogIGRlcml2ZSBvbmUuICovXG4gIGNvbG9ycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgY29udGludW91cyBtZWFzdXJlbWVudCDigJQgZXhwcmVzc2lvbiwgUUMgbWV0cmljLCBhcmVhLCBkZW5zaXR5LiBSZW5kZXJlZFxuICogdGhyb3VnaCB0aGUgc2hhcmVkIGNvbG9ybWFwL0xVVCArIGNvbnRyYXN0IHdpbmRvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250aW51b3VzQ29sdW1uTWV0YSBleHRlbmRzIFNwYXRpYWxDb2x1bW5NZXRhQmFzZSB7XG4gIGtpbmQ6ICdjb250aW51b3VzJztcbiAgLyoqIFVuaXQgZm9yIGF4aXMvdG9vbHRpcCBsYWJlbHMgKGBjb3VudHNgLCBgwrVtwrJgKS4gKi9cbiAgdW5pdD86IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgY29sdW1uIHJlYWRzIGJlc3QgbG9nLXNjYWxlZCDigJQgY291bnQgZGF0YSBhbG1vc3QgYWx3YXlzXG4gICAqICBkb2VzLCBhbmQgYSBsaW5lYXIgc2NhbGUgY29sbGFwc2VzIGl0IGFnYWluc3QgYSBmZXcgYnJpZ2h0IG91dGxpZXJzLiAqL1xuICBsb2dTY2FsZUhpbnQ/OiBib29sZWFuO1xuICAvKiogT2JzZXJ2ZWQgZXh0cmVtZXMsIHdoZW4gdGhlIHByb2R1Y2VyIGtub3dzIHRoZW0uIExldHMgdGhlIFVJIHNlZWQgYVxuICAgKiAgY29udHJhc3Qgd2luZG93IGFuZCBheGlzIHJhbmdlIHdpdGhvdXQgZmlyc3Qgc2Nhbm5pbmcgdGhlIHZlY3Rvci4gKi9cbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFNwYXRpYWxDb2x1bW5NZXRhID0gQ2F0ZWdvcmljYWxDb2x1bW5NZXRhIHwgQ29udGludW91c0NvbHVtbk1ldGE7XG5cbi8qKlxuICogQ29kZSBtZWFuaW5nIFwidGhpcyBvYnNlcnZhdGlvbiBoYXMgbm8gY2F0ZWdvcnlcIiAodW5hc3NpZ25lZCAvIGZpbHRlcmVkIG91dCAvXG4gKiBub3QgaW4gdGlzc3VlKS4gUmVuZGVyZXJzIHNob3VsZCBkcmF3IGl0IGluIHRoZSBtdXRlZCBiYWNrZ3JvdW5kIHN0eWxlIHJhdGhlclxuICogdGhhbiBhcyBhIHJlYWwgY2F0ZWdvcnksIGFuZCBpdCBtdXN0IG5ldmVyIGluZGV4IHtAbGlua1xuICogQ2F0ZWdvcmljYWxDb2x1bW5NZXRhLmNhdGVnb3JpZXN9LlxuICovXG5leHBvcnQgY29uc3QgTk9fQ0FURUdPUlkgPSAweGZmZmY7XG5cbi8qKiBBIGxvYWRlZCBjYXRlZ29yaWNhbCBjb2x1bW46IHBlci1vYnNlcnZhdGlvbiBpbmRpY2VzIGludG8gYG1ldGEuY2F0ZWdvcmllc2AsXG4gKiAgb3Ige0BsaW5rIE5PX0NBVEVHT1JZfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcmljYWxDb2x1bW4ge1xuICBtZXRhOiBDYXRlZ29yaWNhbENvbHVtbk1ldGE7XG4gIC8qKiBMZW5ndGggPSB7QGxpbmsgU3BhdGlhbE9ic2VydmF0aW9ucy5jb3VudH0uICovXG4gIGNvZGVzOiBVaW50MTZBcnJheTtcbn1cblxuLyoqIEEgbG9hZGVkIGNvbnRpbnVvdXMgY29sdW1uLiBgTmFOYCBtYXJrcyBhIG1pc3NpbmcgdmFsdWUuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRpbnVvdXNDb2x1bW4ge1xuICBtZXRhOiBDb250aW51b3VzQ29sdW1uTWV0YTtcbiAgLyoqIExlbmd0aCA9IHtAbGluayBTcGF0aWFsT2JzZXJ2YXRpb25zLmNvdW50fS4gKi9cbiAgdmFsdWVzOiBGbG9hdDMyQXJyYXk7XG59XG5cbmV4cG9ydCB0eXBlIFNwYXRpYWxDb2x1bW4gPSBDYXRlZ29yaWNhbENvbHVtbiB8IENvbnRpbnVvdXNDb2x1bW47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhdGVnb3JpY2FsQ29sdW1uKGM6IFNwYXRpYWxDb2x1bW4pOiBjIGlzIENhdGVnb3JpY2FsQ29sdW1uIHtcbiAgcmV0dXJuIGMubWV0YS5raW5kID09PSAnY2F0ZWdvcmljYWwnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGludW91c0NvbHVtbihjOiBTcGF0aWFsQ29sdW1uKTogYyBpcyBDb250aW51b3VzQ29sdW1uIHtcbiAgcmV0dXJuIGMubWV0YS5raW5kID09PSAnY29udGludW91cyc7XG59XG5cbi8qKlxuICogVGhlIGZlYXR1cmUgKGdlbmUpIG1hdHJpeCwgZGVzY3JpYmVkIGJ1dCBuZXZlciBkZWxpdmVyZWQgd2hvbGUuIFZlY3RvcnMgY29tZVxuICogb25lIGF0IGEgdGltZSBmcm9tIHtAbGluayBTcGF0aWFsRGF0YVBvcnQuZ2V0RmVhdHVyZVZlY3Rvcn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbEZlYXR1cmVNZXRhIHtcbiAgLyoqIE51bWJlciBvZiBmZWF0dXJlcyBhdmFpbGFibGUuICovXG4gIGNvdW50OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBbGwgZmVhdHVyZSBuYW1lcywgd2hlbiB0aGUgcHJvZHVjZXIgY2hvc2UgdG8gaW5saW5lIHRoZW0uIFByZXNlbnQgZm9yXG4gICAqIHRhcmdldGVkIHBhbmVscyAoWGVuaXVtL0Nvc014IHNoaXAgMzAw4oCTNSwwMDAgZ2VuZXMg4oeSIGEgZmV3IGRvemVuIEtCKSBhbmRcbiAgICogYWJzZW50IGZvciB3aG9sZS10cmFuc2NyaXB0b21lIGRhdGEgKFZpc2l1bSBzaGlwcyB+MzFrIOKHkiB+MzUwIEtCKSwgd2hlcmVcbiAgICogdGhlIFVJIHNob3VsZCB1c2Uge0BsaW5rIFNwYXRpYWxEYXRhUG9ydC5zZWFyY2hGZWF0dXJlc30gZm9yIHR5cGVhaGVhZFxuICAgKiBpbnN0ZWFkIG9mIGRvd25sb2FkaW5nIHRoZSBsaXN0LiBDb25zdW1lcnMgbXVzdCBoYW5kbGUgYm90aC5cbiAgICovXG4gIG5hbWVzPzogc3RyaW5nW107XG4gIC8qKiBXaGF0IGEgZmVhdHVyZSB2YWx1ZSBtZWFucyAoYGxvZzFwIG5vcm1hbGl6ZWRgLCBgcmF3IGNvdW50c2ApLiAqL1xuICB1bml0Pzogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIGZlYXR1cmUgdmVjdG9ycyByZWFkIGJlc3QgbG9nLXNjYWxlZCAocmF3IGNvdW50cykuICovXG4gIGxvZ1NjYWxlSGludD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGVyLW9ic2VydmF0aW9uIGJvdW5kYXJpZXMgKGNlbGwvbnVjbGV1cyBzZWdtZW50YXRpb24sIHNwb3Qgb3V0bGluZXMpIGFzIGZsYXRcbiAqIHJpbmdzIOKAlCBkZWxpYmVyYXRlbHkgTk9UIEdlb0pTT04gb2JqZWN0cywgd2hpY2ggY29zdCBvbmUgb2JqZWN0ICsgb25lIGFycmF5XG4gKiBwZXIgY2VsbCBhbmQgd291bGQgZG9taW5hdGUgbWVtb3J5IGF0IDEwXjUgcG9seWdvbnMuXG4gKlxuICogUmluZyBgaWAgb2NjdXBpZXMgYGNvb3Jkc1syKm9mZnNldHNbaV0gLi4gMipvZmZzZXRzW2krMV0pYCBhcyBgeDAseTAseDEseTEs4oCmYFxuICogYW5kIGlzIGltcGxpY2l0bHkgY2xvc2VkLiBgb2Zmc2V0c2AgaGFzIGxlbmd0aCBgY291bnQgKyAxYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsUG9seWdvbnMge1xuICBjb29yZHM6IEZsb2F0MzJBcnJheTtcbiAgb2Zmc2V0czogVWludDMyQXJyYXk7XG4gIC8qKiBOdW1iZXIgb2YgcmluZ3Mg4oCUIGBvZmZzZXRzLmxlbmd0aCAtIDFgLiAqL1xuICByZWFkb25seSBjb3VudDogbnVtYmVyO1xufVxuXG4vKiogUHJlc2VuY2Uvc2l6ZSBvZiB0aGUgYm91bmRhcnkgZ2VvbWV0cnksIHdpdGhvdXQgbG9hZGluZyBpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbFBvbHlnb25zTWV0YSB7XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogSG93IG9ic2VydmF0aW9uIGNvb3JkaW5hdGVzIHJlbGF0ZSB0byB0aGUgdGlzc3VlIGltYWdlIHRoZXkgYXJlIGRyYXduIG92ZXIuXG4gKiBBcHBsaWVkIGFzIGB3b3JsZCA9IGNvb3JkICogc2NhbGUgKyB0cmFuc2xhdGVgLCBtYXRjaGluZyB0aGUgYWZmaW5lIHRoYXRcbiAqIFNwYXRpYWxEYXRhIHJlY29yZHMgcGVyIGNvb3JkaW5hdGUgc3lzdGVtIOKAlCBhbmQgdGhlIGZ1bGwtcmVzb2x1dGlvbiB3b3JsZFxuICogY29udmVudGlvbiB0aGUgbmFwYXJpLWpzIGJhY2tlbmQgYWxyZWFkeSB1c2VzIHNvIHByZS1zYXZlZCByZWdpb25zIGFsaWduIG9uXG4gKiBweXJhbWlkYWwgc2xpZGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxJbWFnZVJlZiB7XG4gIC8qKiBIb3N0LWRlZmluZWQgaWQgb2YgdGhlIGltYWdlIHRoZXNlIGNvb3JkaW5hdGVzIGxpdmUgaW4sIHNvIHRoZSBob3N0IGNhblxuICAgKiAgcmVzb2x2ZSBpdCB0byBhbiBgSUltYWdlSW5mb2AuICovXG4gIGltYWdlSWQ/OiBzdHJpbmc7XG4gIC8qKiBEYXRh4oaSd29ybGQgc2NhbGUuIERlZmF1bHRzIHRvIGBbMSwgMV1gIChjb29yZGluYXRlcyBhbHJlYWR5IGluXG4gICAqICBmdWxsLXJlc29sdXRpb24gaW1hZ2UgcGl4ZWxzKS4gKi9cbiAgc2NhbGU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKiogRGF0YeKGkndvcmxkIHRyYW5zbGF0aW9uLCBpbiB0aGUgc2FtZSB1bml0cyBhcyB7QGxpbmsgc2NhbGV9J3Mgb3V0cHV0LiAqL1xuICB0cmFuc2xhdGU/OiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKiogUGh5c2ljYWwgcGl4ZWwgc2l6ZSBpbiDCtW0g4oCUIGRyaXZlcyB0aGUgc2NhbGUgYmFyIGFuZCBwaHlzaWNhbCBtYXJrZXJcbiAgICogIHNpemluZyAoYSA1NSDCtW0gVmlzaXVtIHNwb3QpLiAqL1xuICBtcHBYPzogbnVtYmVyO1xuICBtcHBZPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgc3BhdGlhbC1vbWljcyBkYXRhc2V0OiBldmVyeXRoaW5nIGNoZWFwIGVub3VnaCB0byBob2xkIHJlc2lkZW50LiBDb2x1bW4gYW5kXG4gKiBmZWF0dXJlICp2YWx1ZXMqLCBhbmQgcG9seWdvbiAqZ2VvbWV0cnkqLCBhcmUgZmV0Y2hlZCB0aHJvdWdoXG4gKiB7QGxpbmsgU3BhdGlhbERhdGFQb3J0fSBhcyB0aGV5IGFyZSBkaXNwbGF5ZWQuXG4gKi9cbi8qKlxuICogQSBwcmVjb21wdXRlZCBsb3ctZGltZW5zaW9uYWwgZW1iZWRkaW5nIG92ZXIgdGhlIFNBTUUgb2JzZXJ2YXRpb25zIOKAlCBVTUFQLCB0LVNORSwgUENBLlxuICpcbiAqIEFubm91bmNlZCBpbiB0aGUgZGF0YXNldCBhbmQgZmV0Y2hlZCBvbiBkZW1hbmQsIGV4YWN0bHkgbGlrZSBhIGNvbHVtbiBvciBhIGdlbmU6IHRoZVxuICogY29vcmRpbmF0ZXMgYXJlIGFub3RoZXIgcGVyLW9ic2VydmF0aW9uIHZlY3RvciwgYW5kIGEgZGF0YXNldCBtYXkgY2Fycnkgc2V2ZXJhbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsRW1iZWRkaW5nTWV0YSB7XG4gIC8qKiBLZXkgYXMgdGhlIHNvdXJjZSBuYW1lcyBpdCwgZS5nLiBgWF91bWFwYC4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU2hvcnQgbGFiZWwgZm9yIG1lbnVzOyBmYWxscyBiYWNrIHRvIHtAbGluayBuYW1lfS4gKi9cbiAgbGFiZWw/OiBzdHJpbmc7XG4gIC8qKiAyIGZvciBhIHBsYW5lLCAzIGZvciBhIGNsb3VkLiAqL1xuICBkaW1zOiAyIHwgMztcbiAgLyoqXG4gICAqIFRydWUgd2hlbiB0aGUgY29vcmRpbmF0ZXMgd2VyZSBDT01QVVRFRCBmb3IgdGhpcyBidW5kbGUgcmF0aGVyIHRoYW4gcHVibGlzaGVkIHdpdGggdGhlXG4gICAqIGRhdGFzZXQuIFdvcnRoIHN1cmZhY2luZzogYSBVTUFQIHJlY29tcHV0ZWQgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVycyBpcyBhIGRpZmZlcmVudCBwaWN0dXJlLFxuICAgKiBhbmQgYSByZWFkZXIgY29tcGFyaW5nIGFnYWluc3QgYSBwYXBlcidzIGZpZ3VyZSBuZWVkcyB0byBrbm93IHdoaWNoIHRoZXkgYXJlIGxvb2tpbmcgYXQuXG4gICAqL1xuICBkZXJpdmVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZyYWN0aW9uIG9mIHRvdGFsIHZhcmlhbmNlIGVhY2ggYXhpcyBhY2NvdW50cyBmb3IsIGluZGV4LWFsaWduZWQgd2l0aCB0aGUgZGltZW5zaW9ucy5cbiAgICpcbiAgICogT25seSBtZWFuaW5nZnVsIGZvciBhIExJTkVBUiBlbWJlZGRpbmcg4oCUIFBDQS4gSXRzIGF4ZXMgYXJlIG9yZGVyZWQsIGFuZCBlYWNoIG9uZSBleHBsYWlucyBhXG4gICAqIG1lYXN1cmFibGUgc2hhcmUgb2YgdGhlIHZhcmlhbmNlLCB3aGljaCBpcyB0aGUgd2hvbGUgcmVhc29uIHRvIGxvb2sgYXQgYSBQQ0EgcmF0aGVyIHRoYW4gYVxuICAgKiBVTUFQOiBcIlBDMSAoMjMlKVwiIHNheXMgc29tZXRoaW5nLCB3aGVyZSBcIlVNQVAgMVwiIHNheXMgbm90aGluZyBhdCBhbGwuIEEgVU1BUCdzIGNvb3JkaW5hdGVzXG4gICAqIGFyZSBhbiBhcmJpdHJhcnkgb3V0cHV0IG9mIGFuIG9wdGltaXNhdGlvbiB3aXRoIG5vIHZhcmlhbmNlIHRvIHJlcG9ydCwgc28gdGhpcyBzdGF5cyBhYnNlbnRcbiAgICogdGhlcmUgcmF0aGVyIHRoYW4gYmVpbmcgZmFrZWQuXG4gICAqL1xuICB2YXJpYW5jZVJhdGlvPzogbnVtYmVyW107XG4gIC8qKlxuICAgKiBIb3cgYSBkZXJpdmVkIGVtYmVkZGluZyB3YXMgY29tcHV0ZWQsIGluIGEgZmV3IHdvcmRzIOKAlCBlLmcuIFwiUENBKDUwKSB0aGVuIHBlcnBsZXhpdHkgMzAsXG4gICAqIHNlZWQgMFwiLlxuICAgKlxuICAgKiBOb3QgZGVjb3JhdGlvbi4gQSB0LVNORSBvciBVTUFQIGlzIHN0b2NoYXN0aWMsIGFuZCBpdHMgcGljdHVyZSBjaGFuZ2VzIG1hdGVyaWFsbHkgd2l0aFxuICAgKiBwZXJwbGV4aXR5IG9yIGBuX25laWdoYm9yc2A7IHR3byBydW5zIGF0IGRpZmZlcmVudCBzZXR0aW5ncyBhcmUgZGlmZmVyZW50IHBpY3R1cmVzIG9mIHRoZSBzYW1lXG4gICAqIGNlbGxzLCBhbmQgbmVpdGhlciBpcyBtb3JlIGNvcnJlY3QuIFNheWluZyBcImNvbXB1dGVkIGhlcmVcIiB3aXRob3V0IHNheWluZyBIT1cgbGVhdmVzIGEgcmVhZGVyXG4gICAqIHVuYWJsZSB0byByZXByb2R1Y2Ugb3IgY29tcGFyZSBpdC4gQWJzZW50IGZvciBhIHB1Ymxpc2hlZCBlbWJlZGRpbmcsIHdob3NlIHBhcmFtZXRlcnMgYmVsb25nXG4gICAqIHRvIHdob2V2ZXIgcHVibGlzaGVkIGl0LlxuICAgKi9cbiAgcGFyYW1zPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSBlbWJlZGRpbmcncyBjb29yZGluYXRlcy5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgc2hhcGVkIGxpa2Uge0BsaW5rIFNwYXRpYWxPYnNlcnZhdGlvbnN9JyBgeGAvYHlgL2B6YCByYXRoZXIgdGhhbiBhbiAoTiwgRCkgbWF0cml4OlxuICogdGhlIHBvaW50IG9mIGFuIGVtYmVkZGluZyBoZXJlIGlzIHRvIGJlIHN3YXBwZWQgaW4gYXMgdGhlIHNjYXR0ZXIncyBjb29yZGluYXRlIHNvdXJjZSwgYW5kXG4gKiBtYXRjaGluZyB0aGF0IHNoYXBlIG1lYW5zIHRoZSByZW5kZXJlciwgdGhlIGhvdmVyIGhpdC10ZXN0IGFuZCB0aGUgc2VsZWN0aW9uIGNvZGUgbmVlZCBub1xuICogdmFyaWFudCBmb3IgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbEVtYmVkZGluZyB7XG4gIG1ldGE6IFNwYXRpYWxFbWJlZGRpbmdNZXRhO1xuICB4OiBGbG9hdDMyQXJyYXk7XG4gIHk6IEZsb2F0MzJBcnJheTtcbiAgej86IEZsb2F0MzJBcnJheTtcbn1cblxuLyoqXG4gKiBMZXZlbC1vZi1kZXRhaWwgZ2VvbWV0cnksIHNlcnZlZCBvbmUgZ3JpZCB0aWxlIGF0IGEgdGltZS5cbiAqXG4gKiBXaG9sZS1kYXRhc2V0IHZlY3RvcnMgc3RvcCB3b3JraW5nIHNvbWV3aGVyZSBwYXN0IDEwXjUgb2JzZXJ2YXRpb25zOiA3MTdrIFhlbml1bSBjZWxsXG4gKiBvdXRsaW5lcyBhcmUgfjE0MCBNQiwgYW5kIGEgd2hvbGUtdHJhbnNjcmlwdG9tZSBydW4gaGFzIH4xMF45IHRyYW5zY3JpcHRzLiBXaGF0IHNjYWxlc1xuICogaXMgd2hhdCBtYXAgdGlsZXMgZG8g4oCUIGEgc3F1YXJlIGdyaWQgaW4gdGhlIG9ic2VydmF0aW9ucycgY29vcmRpbmF0ZSBzcGFjZSwgb25lIGdyaWRcbiAqIHBlciBsZXZlbCwgZWFjaCBsZXZlbCdzIHRpbGVzIHR3aWNlIHRoZSBzaXplIG9mIHRoZSBvbmUgYmVsb3cgYW5kIGNhcnJ5aW5nIGNvYXJzZXJcbiAqIGdlb21ldHJ5LiBUaGUgcmVuZGVyZXIgYXNrcyBvbmx5IGZvciB0aGUgdGlsZXMgb24gc2NyZWVuLCBhdCB0aGUgbGV2ZWwgdGhlIHpvb20gbmVlZHMuXG4gKlxuICogVGlsZSBgKGd4LCBneSlgIGF0IGxldmVsIGBsYCBjb3ZlcnMgYFtneMK3cywgKGd4KzEpwrdzKSDDlyBbZ3nCt3MsIChneSsxKcK3cylgIHdpdGhcbiAqIGBzID0gbGV2ZWxzW2xdLnRpbGVTaXplYCwgaW4gdGhlIHNhbWUgdW5pdHMgYXMge0BsaW5rIFNwYXRpYWxPYnNlcnZhdGlvbnMueH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbFRpbGVMZXZlbCB7XG4gIC8qKiBFZGdlIGxlbmd0aCBvZiBvbmUgdGlsZSwgaW4gb2JzZXJ2YXRpb24gY29vcmRpbmF0ZSB1bml0cy4gKi9cbiAgdGlsZVNpemU6IG51bWJlcjtcbn1cblxuLyoqIEF4aXMtYWxpZ25lZCBleHRlbnQgYFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXWAgaW4gb2JzZXJ2YXRpb24gY29vcmRpbmF0ZXMuICovXG5leHBvcnQgdHlwZSBTcGF0aWFsQm91bmRzID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbi8qKiBUaWxlZCBjZWxsL251Y2xldXMgYm91bmRhcmllcy4gTGV2ZWwgMCBpcyB0aGUgZmluZXN0IChldmVyeSB2ZXJ0ZXgpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsUG9seWdvblRpbGVzTWV0YSB7XG4gIGJvdW5kczogU3BhdGlhbEJvdW5kcztcbiAgLyoqIEJvdW5kYXJ5IHNldHMgb24gb2ZmZXIg4oCUIHR5cGljYWxseSBgY2VsbGAgYW5kIGBudWNsZXVzYC4gKi9cbiAgc2V0czogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdO1xuICAvKiogVGhlIHNldCB0byBkcmF3IHdoZW4gdGhlIHVzZXIgaGFzIG5vdCBjaG9zZW4uICovXG4gIGRlZmF1bHRTZXQ/OiBzdHJpbmc7XG4gIGxldmVsczogU3BhdGlhbFRpbGVMZXZlbFtdO1xufVxuXG4vKiogVGlsZWQgdHJhbnNjcmlwdHMuIExldmVsIDAgaXMgb25lIGVudHJ5IHBlciB0cmFuc2NyaXB0OyBjb2Fyc2VyIGxldmVscyBhZ2dyZWdhdGUuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxUcmFuc2NyaXB0VGlsZXNNZXRhIHtcbiAgYm91bmRzOiBTcGF0aWFsQm91bmRzO1xuICAvKiogVG90YWwgdHJhbnNjcmlwdHMsIGZvciBkaXNwbGF5LiAqL1xuICBjb3VudD86IG51bWJlcjtcbiAgLyoqIFJlYWwgZ2VuZXMgKGNvbnRyb2wgcHJvYmVzIGV4Y2x1ZGVkKS4gTmFtZXMgY29tZSBmcm9tIHRoZSBmZWF0dXJlIHNlYXJjaC4gKi9cbiAgZ2VuZUNvdW50OiBudW1iZXI7XG4gIGhhc1o6IGJvb2xlYW47XG4gIGxldmVsczogKFNwYXRpYWxUaWxlTGV2ZWwgJiB7XG4gICAgLyoqIFRydWUgd2hlbiBhbiBlbnRyeSBzdGFuZHMgZm9yIHNldmVyYWwgdHJhbnNjcmlwdHMgKHNlZSB7QGxpbmsgU3BhdGlhbFRyYW5zY3JpcHRUaWxlLndlaWdodH0pLiAqL1xuICAgIGFnZ3JlZ2F0ZWQ6IGJvb2xlYW47XG4gIH0pW107XG4gIC8qKlxuICAgKiBMZXZlbHMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGlzIG9uZSBhc3NpZ24gZWFjaCBlbnRyeSB0byB0aGUgY2VsbCBpdCBsaWVzIGluXG4gICAqIGV4YWN0bHk7IGFib3ZlIGl0IHRoZSBhc3NpZ25tZW50IG5hbWVzIHRoZSBjZWxsIG5lYXJlc3QgYW4gYWdncmVnYXRlJ3MgY2VudHJvaWQuXG4gICAqL1xuICBleGFjdENlbGxMZXZlbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgYWxsLWdlbmUgdHJhbnNjcmlwdCBncm91cGluZyBweXJhbWlkOiBzcXVhcmUgYmlucywgZm91ciB0aW1lcyBjb2Fyc2VyIHBlciBsZXZlbCxcbiAqIGVhY2ggaG9sZGluZyBhIGNvdW50LCBhIGNlbnRyb2lkIGFuZCB0aGUgY2VsbCB0aGF0IGNvbnRyaWJ1dGVkIG1vc3Qgb2YgaXRzIHRyYW5zY3JpcHRzLlxuICogU2VydmVkIHBlciB0aWxlLCBpbiB0aGUge0BsaW5rIFNwYXRpYWxUcmFuc2NyaXB0VGlsZX0gbGF5b3V0IChvbmUgZW50cnkgcGVyIGJpbikuXG4gKlxuICogVGlsZSBgKHR4LCB0eSlgIG9mIGxldmVsIGBsYCBjb3ZlcnMgYG9yaWdpbiArIFt0eMK3cywgKHR4KzEpwrdzKSDDlyBbdHnCt3MsICh0eSsxKcK3cylgIHdpdGhcbiAqIGBzID0gbGV2ZWxzW2xdLnRpbGVTaXplYCDigJQgbm90ZSB0aGUgb3JpZ2luLCB3aGljaCB0aGUgcGVyLWdlbmUgdGlsZXMgZG8gbm90IGhhdmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbFRyYW5zY3JpcHRCaW5zTWV0YSB7XG4gIGJvdW5kczogU3BhdGlhbEJvdW5kcztcbiAgb3JpZ2luOiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKiogVHJhbnNjcmlwdHMgdGhlIHB5cmFtaWQgd2FzIGJ1aWx0IGZyb20uICovXG4gIGNvdW50OiBudW1iZXI7XG4gIGxldmVsczogeyBiaW5TaXplOiBudW1iZXI7IHRpbGVTaXplOiBudW1iZXIgfVtdO1xufVxuXG4vKipcbiAqIEEgZ3JvdXBpbmcgcHlyYW1pZCB0aGUgc2VydmVyIGlzIHN0aWxsIGJ1aWxkaW5nIChpdCBidWlsZHMgb25lIGl0c2VsZiB3aGVuIGEgZGF0YXNldFxuICogYXJyaXZlcyB3aXRob3V0IGl0KS4gXCJBbGwgZ2VuZXNcIiBiZWNvbWVzIGF2YWlsYWJsZSBvbmNlIGl0IGlzIGRvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbFRyYW5zY3JpcHRCaW5zU3RhdHVzIHtcbiAgc3RhdGU6ICdxdWV1ZWQnIHwgJ2J1aWxkaW5nJyB8ICdmYWlsZWQnO1xuICAvKiogU291cmNlIHRpbGVzIHByb2Nlc3NlZCBzbyBmYXIsIG9mIGB0b3RhbGAuICovXG4gIGRvbmU/OiBudW1iZXI7XG4gIHRvdGFsPzogbnVtYmVyO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKiogV2hhdCBpcyBpbiBhbiBhcmVhIOKAlCB0aGUgaG92ZXIgZGV0YWlscyBvZiBhIHRyYW5zY3JpcHQgbWFya2VyIG9yIGdyb3VwZWQgYmluLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsVHJhbnNjcmlwdFN1bW1hcnkge1xuICAvKiogQWJzZW50IGZvciBhIHB1cmUgY2VsbC1pZCBsb29rdXAuICovXG4gIHRyYW5zY3JpcHRzPzogbnVtYmVyO1xuICAvKiogRGlzdGluY3QgZ2VuZXMgYW1vbmcgdGhlbS4gKi9cbiAgZ2VuZXM/OiBudW1iZXI7XG4gIHRvcEdlbmVzPzogeyBuYW1lOiBzdHJpbmc7IGNvdW50OiBudW1iZXIgfVtdO1xuICAvKiogRGlzdGluY3QgY2VsbHMgdGhleSBmYWxsIGluLCBhbmQgaG93IG1hbnkgZmFsbCBpbiBub25lLiAqL1xuICBjZWxscz86IG51bWJlcjtcbiAgdW5hc3NpZ25lZD86IG51bWJlcjtcbiAgdG9wQ2VsbHM/OiB7IGluZGV4OiBudW1iZXI7IGlkPzogc3RyaW5nOyBjb3VudDogbnVtYmVyIH1bXTtcbiAgLyoqIERpc3BsYXkgaWRzIG9mIHRoZSBjZWxscyBhc2tlZCBmb3IsIGJ5IG9ic2VydmF0aW9uIGluZGV4LiAqL1xuICBjZWxsSWRzPzogUmVjb3JkPG51bWJlciwgc3RyaW5nPjtcbn1cblxuLyoqIEEgcGVyLWdlbmUgdHJhbnNjcmlwdC1jb3VudCByYXN0ZXIgY292ZXJpbmcgdGhlIHNlY3Rpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxEZW5zaXR5TWV0YSB7XG4gIC8qKiBTaXplIG9mIG9uZSByYXN0ZXIgY2VsbCwgaW4gb2JzZXJ2YXRpb24gdW5pdHMsIGBbeCwgeV1gLiAqL1xuICBncmlkU2l6ZTogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqIE9ic2VydmF0aW9uLXNwYWNlIHBvc2l0aW9uIG9mIHJhc3RlciBjZWxsICgwLCAwKSdzIG5lYXIgY29ybmVyLiAqL1xuICBvcmlnaW46IFtudW1iZXIsIG51bWJlcl07XG4gIHJvd3M6IG51bWJlcjtcbiAgY29sczogbnVtYmVyO1xufVxuXG4vKiogXCJObyBvYnNlcnZhdGlvblwiIGluIHtAbGluayBTcGF0aWFsVHJhbnNjcmlwdFRpbGUub2JzZXJ2YXRpb259LiAqL1xuZXhwb3J0IGNvbnN0IE5PX09CU0VSVkFUSU9OID0gMHhmZmZmZmZmZjtcblxuLyoqIE9uZSB0aWxlIG9mIGJvdW5kYXJpZXM6IHJpbmdzIGFzIGluIHtAbGluayBTcGF0aWFsUG9seWdvbnN9LCBwbHVzIHdobyBvd25zIGVhY2ggcmluZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbFBvbHlnb25UaWxlIGV4dGVuZHMgU3BhdGlhbFBvbHlnb25zIHtcbiAgLyoqIE9ic2VydmF0aW9uIGluZGV4IG9mIHJpbmcgYGlgIOKAlCB0aGUgam9pbiBrZXkgdG8gY29sdW1ucyBhbmQgZmVhdHVyZXMuICovXG4gIG9ic2VydmF0aW9uOiBVaW50MzJBcnJheTtcbn1cblxuLyoqIE9uZSB0aWxlIG9mIHRyYW5zY3JpcHRzIChvciBhZ2dyZWdhdGVzIG9mIHRoZW0pLiBFdmVyeSBhcnJheSBoYXMgbGVuZ3RoIHtAbGluayBjb3VudH0uICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxUcmFuc2NyaXB0VGlsZSB7XG4gIHJlYWRvbmx5IGNvdW50OiBudW1iZXI7XG4gIGFnZ3JlZ2F0ZWQ6IGJvb2xlYW47XG4gIHg6IEZsb2F0MzJBcnJheTtcbiAgeTogRmxvYXQzMkFycmF5O1xuICB6OiBGbG9hdDMyQXJyYXk7XG4gIC8qKiBUcmFuc2NyaXB0cyBlYWNoIGVudHJ5IHN0YW5kcyBmb3Ig4oCUIDEgYXQgYW4gdW5hZ2dyZWdhdGVkIGxldmVsLiAqL1xuICB3ZWlnaHQ6IFVpbnQzMkFycmF5O1xuICAvKiogT2JzZXJ2YXRpb24gKGNlbGwpIHRoZSBlbnRyeSBmYWxscyBpbiwgb3Ige0BsaW5rIE5PX09CU0VSVkFUSU9OfS4gKi9cbiAgb2JzZXJ2YXRpb246IFVpbnQzMkFycmF5O1xuICAvKiogSW5kZXggaW50byB0aGUgYGdlbmVzYCBsaXN0IHRoZSB0aWxlIHdhcyByZXF1ZXN0ZWQgd2l0aC4gKi9cbiAgZ2VuZTogVWludDE2QXJyYXk7XG59XG5cbi8qKiBUcmFuc2NyaXB0IHRvdGFscyBmb3IgYW4gZXN0aW1hdGUgb2YgaG93IG1hbnkgbWFya2VycyBhIHNlbGVjdGlvbiB3b3VsZCBkcmF3LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsVHJhbnNjcmlwdENvdW50cyB7XG4gIC8qKiBUb3RhbCB0cmFuc2NyaXB0cyBwZXIgcmVxdWVzdGVkIGdlbmUsIG92ZXIgdGhlIHdob2xlIGRhdGFzZXQuICovXG4gIGNvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgLyoqIFRvdGFsIG92ZXIgZXZlcnkgZ2VuZS4gKi9cbiAgdG90YWw6IG51bWJlcjtcbiAgLyoqIEV4dGVudCB0aGUgdG90YWxzIGFyZSBzcHJlYWQgb3ZlciAob2JzZXJ2YXRpb24gdW5pdHMpLiAqL1xuICBib3VuZHM6IFNwYXRpYWxCb3VuZHM7XG59XG5cbi8qKiBBIHN1bW1lZCBkZW5zaXR5IHJhc3RlciBmb3IgYSBsaXN0IG9mIGdlbmVzOyBgdmFsdWVzYCBpcyByb3ctbWFqb3IgYHJvd3Mgw5cgY29sc2AuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxEZW5zaXR5UmFzdGVyIHtcbiAgbWV0YTogU3BhdGlhbERlbnNpdHlNZXRhO1xuICBnZW5lczogc3RyaW5nW107XG4gIHZhbHVlczogRmxvYXQzMkFycmF5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxEYXRhc2V0IHtcbiAgLyoqIFN0YWJsZSBpZCDigJQgdGhlIGtleSB0aGUgcG9ydCdzIGxhenkgYWNjZXNzb3JzIGFyZSBzY29wZWQgdG8uICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBuYW1lIGZvciBtZW51cy4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICBvYnNlcnZhdGlvbnM6IFNwYXRpYWxPYnNlcnZhdGlvbnM7XG4gIC8qKiBFdmVyeSBjb2x1bW4gYXZhaWxhYmxlLCB3aGV0aGVyIG9yIG5vdCBpdHMgdmFsdWVzIGFyZSBsb2FkZWQuICovXG4gIGNvbHVtbnM6IFNwYXRpYWxDb2x1bW5NZXRhW107XG4gIGZlYXR1cmVzPzogU3BhdGlhbEZlYXR1cmVNZXRhO1xuICBwb2x5Z29ucz86IFNwYXRpYWxQb2x5Z29uc01ldGE7XG4gIGltYWdlUmVmPzogU3BhdGlhbEltYWdlUmVmO1xuICAvKiogUHJlc2VuY2UgKyBnZW9tZXRyeSBvZiBhIHJlZmVyZW5jZSB2b2x1bWUgdGhlIG9ic2VydmF0aW9ucyBzaXQgaW5zaWRlLiAqL1xuICB2b2x1bWU/OiBTcGF0aWFsVm9sdW1lTWV0YTtcbiAgLyoqIEVtYmVkZGluZ3MgYXZhaWxhYmxlIGZvciB0aGVzZSBvYnNlcnZhdGlvbnMsIHdob3NlIGNvb3JkaW5hdGVzIGFyZSBmZXRjaGVkIG9uIGRlbWFuZC4gKi9cbiAgZW1iZWRkaW5ncz86IFNwYXRpYWxFbWJlZGRpbmdNZXRhW107XG4gIC8qKiBMZXZlbC1vZi1kZXRhaWwgYm91bmRhcmllcywgZmV0Y2hlZCBwZXIgdGlsZSDigJQgc2VlIHtAbGluayBTcGF0aWFsUG9seWdvblRpbGVzTWV0YX0uICovXG4gIHBvbHlnb25UaWxlcz86IFNwYXRpYWxQb2x5Z29uVGlsZXNNZXRhO1xuICAvKiogTGV2ZWwtb2YtZGV0YWlsIHRyYW5zY3JpcHRzLCBmZXRjaGVkIHBlciB0aWxlIOKAlCBzZWUge0BsaW5rIFNwYXRpYWxUcmFuc2NyaXB0VGlsZXNNZXRhfS4gKi9cbiAgdHJhbnNjcmlwdFRpbGVzPzogU3BhdGlhbFRyYW5zY3JpcHRUaWxlc01ldGE7XG4gIC8qKiBBIHNlcnZlZCBwZXItZ2VuZSB0cmFuc2NyaXB0IGRlbnNpdHkgcmFzdGVyLiAqL1xuICBkZW5zaXR5PzogU3BhdGlhbERlbnNpdHlNZXRhO1xuICAvKiogVGhlIGFsbC1nZW5lIHRyYW5zY3JpcHQgZ3JvdXBpbmcgcHlyYW1pZCwgd2hlbiBpdCBoYXMgYmVlbiBidWlsdC4gKi9cbiAgdHJhbnNjcmlwdEJpbnM/OiBTcGF0aWFsVHJhbnNjcmlwdEJpbnNNZXRhO1xuICAvKiogUHJlc2VudCB3aGlsZSB0aGUgc2VydmVyIGlzIHN0aWxsIGJ1aWxkaW5nIHtAbGluayB0cmFuc2NyaXB0Qmluc30uICovXG4gIHRyYW5zY3JpcHRCaW5zU3RhdHVzPzogU3BhdGlhbFRyYW5zY3JpcHRCaW5zU3RhdHVzO1xuICAvKipcbiAgICogTWljcm9ucyBwZXIgb2JzZXJ2YXRpb24gY29vcmRpbmF0ZSB1bml0IOKAlCB3aGF0IG1ha2VzIGEgc2NhbGUgYmFyIHBvc3NpYmxlLlxuICAgKlxuICAgKiBUaGUgMkQgcGF0aCBnZXRzIHRoaXMgZnJvbSBgaW1hZ2VSZWYubXBwWGAsIGJlY2F1c2UgdGhlcmUgdGhlIGNvb3JkaW5hdGVzIGFyZVxuICAgKiBpbWFnZSBwaXhlbHMuIEEgM0QgY2xvdWQgaGFzIG5vIGltYWdlLCBzbyBpdCBoYXMgdG8gc2F5IGZvciBpdHNlbGY6IGAxYCBtZWFuc1xuICAgKiB0aGUgY29vcmRpbmF0ZXMgYXJlIGFscmVhZHkgbWljcm9ucy5cbiAgICpcbiAgICogQWJzZW50IG1lYW5zIHRoZSB1bml0IGlzIFVOS05PV04sIGFuZCBhIHJlbmRlcmVyIG11c3QgdGhlbiBkcmF3IG5vIHNjYWxlIGJhclxuICAgKiByYXRoZXIgdGhhbiBhc3N1bWUgb25lLiBBIGJhciBsYWJlbGxlZCBpbiBtaWNyb25zIG92ZXIgcGl4ZWwtc3BhY2VcbiAgICogY29vcmRpbmF0ZXMgaXMgd29yc2UgdGhhbiBubyBiYXI6IGl0IGxvb2tzIGxpa2UgYSBtZWFzdXJlbWVudC5cbiAgICovXG4gIG1pY3JvbnNQZXJVbml0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgM0Qgc2NhbGFyIHJlZmVyZW5jZSB2b2x1bWUgcmVnaXN0ZXJlZCB0byB0aGUgb2JzZXJ2YXRpb24gY29vcmRpbmF0ZXMg4oCUIHRoZVxuICogYW5hdG9taWNhbCBiYWNrZHJvcCBmb3IgYSBwb2ludCBjbG91ZCAoYW4gYXRsYXMgdGVtcGxhdGUsIG9yIGFuIGltYWdlIHotc3RhY2spLlxuICpcbiAqIEdlb21ldHJ5IG9ubHk7IHRoZSB2b3hlbHMgYXJlIGZldGNoZWQgdGhyb3VnaFxuICoge0BsaW5rIFNwYXRpYWxEYXRhUG9ydC5nZXRWb2x1bWV9IHdoZW4gc29tZXRoaW5nIGlzIGdvaW5nIHRvIGRyYXcgdGhlbS4gQSBjbG91ZFxuICogd2l0aG91dCBvbmUgc3RpbGwgcmVuZGVycywganVzdCBpbiBlbXB0eSBzcGFjZS5cbiAqXG4gKiBUaGUgb2JzZXJ2YXRpb25zJyBjb29yZGluYXRlIGZyYW1lIG11c3QgYmUgdGhlIHZvbHVtZSdzIG93bjogdm94ZWwgYChpLCBqLCBrKWBcbiAqIGNvdmVycyBgW2kgKiB2b3hlbFNpemVbMF0sIChpICsgMSkgKiB2b3hlbFNpemVbMF0pYCBvbiB4LCBhbmQgc28gb24uIFRoYXQgbWVhbnNcbiAqIHRoZSB2b2x1bWUncyBuZWFyIGNvcm5lciBzaXRzIGF0IHRoZSBjb29yZGluYXRlIG9yaWdpbiwgc28gYSByZW5kZXJlciBjYW4gcGxhY2VcbiAqIHRoZSB0d28gdG9nZXRoZXIga25vd2luZyBub3RoaW5nIGVsc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbFZvbHVtZU1ldGEge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgZGVwdGg6IG51bWJlcjtcbiAgLyoqIFdvcmxkIHNpemUgb2Ygb25lIHZveGVsIHBlciBheGlzLCBpbiB0aGUgb2JzZXJ2YXRpb25zJyB1bml0cy4gKi9cbiAgdm94ZWxTaXplOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbi8qKiBMb29rIGEgY29sdW1uJ3MgZGVzY3JpcHRvciB1cCBieSBuYW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb2x1bW5NZXRhKFxuICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCwgbmFtZTogc3RyaW5nLFxuKTogU3BhdGlhbENvbHVtbk1ldGEgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZGF0YXNldC5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZSk7XG59XG4iXX0=
@@ -35,6 +35,17 @@
35
35
  * than an escape hatch that returns a component — the moment one tool draws
36
36
  * itself, the toolbar stops being able to lay tools out consistently.
37
37
  *
38
+ * DIALOG TOOLS
39
+ * Some tools are not "set parameters, run once" but an interactive session: the
40
+ * user paints, the tool retrains and redraws, over and over (DIANNE). A schema
41
+ * cannot describe that, so {@link ToolbarDialogToolContribution} is the one
42
+ * variant that renders its own body. The toolbar still owns the button, its
43
+ * placement and the dialog chrome; the tool only fills the dialog, with plain
44
+ * DOM (`mount`), so it needs neither Angular nor this library's PrimeNG version.
45
+ * Its button sits with the host's own actions at the start of the toolbar, and
46
+ * shows only in the Image view, the view its context ({@link ToolDialogContext})
47
+ * draws over.
48
+ *
38
49
  * WHY AN EMPTY MODEL LIST HIDES THE TOOL
39
50
  * {@link ToolbarToolContribution.models} returning `[]` removes the tool from
40
51
  * the toolbar entirely. This preserves the behaviour the built-in tools already
@@ -43,8 +54,14 @@
43
54
  * not require unregistering the provider.
44
55
  */
45
56
  import { InjectionToken } from '@angular/core';
57
+ /** Whether a contribution is a {@link ToolbarDialogToolContribution}. */
58
+ export function isDialogToolContribution(c) {
59
+ return !!c && c.kind === 'dialog';
60
+ }
46
61
  /**
47
- * Multi-provider token for contributed tools.
62
+ * Multi-provider token for contributed tools: run tools
63
+ * ({@link ToolbarToolContribution}) and, since 0.6.0, dialog tools
64
+ * ({@link ToolbarDialogToolContribution}).
48
65
  *
49
66
  * Deliberately has no `factory`: unregistered means no tools, which is what
50
67
  * makes this library shippable without the closed model packages. Inject it
@@ -57,8 +74,33 @@ export function sortToolContributions(tools) {
57
74
  // provider order without having to invent numbers.
58
75
  return tools.map((t, i) => ({ t, i })).sort((a, b) => (a.t.order ?? 100) - (b.t.order ?? 100) || a.i - b.i).map(({ t }) => t);
59
76
  }
60
- /** The tools a toolbar should actually show: those with at least one model. */
77
+ /** The run tools a toolbar should actually show: those with at least one model.
78
+ * Dialog tools are left out (see {@link dialogToolContributions}). */
61
79
  export function visibleToolContributions(tools) {
62
- return sortToolContributions(tools ?? []).filter((t) => t.models().length > 0);
80
+ const run = (tools ?? []).filter((t) => !isDialogToolContribution(t) && typeof t?.models === 'function');
81
+ return sortToolContributions(run).filter((t) => t.models().length > 0);
82
+ }
83
+ /**
84
+ * The dialog tools, in display order. A malformed one (no string `id`, no
85
+ * `activate` or `mount` function) or a repeated `id` is dropped with a warning
86
+ * rather than breaking the toolbar.
87
+ */
88
+ export function dialogToolContributions(tools, log = console) {
89
+ const seen = new Set();
90
+ const out = [];
91
+ for (const t of (tools ?? []).filter(isDialogToolContribution)) {
92
+ if (typeof t.id !== 'string' || !t.id || typeof t.activate !== 'function'
93
+ || typeof t.mount !== 'function') {
94
+ log.warn('[visualizer] dialog tool ignored: it needs a string `id` and `activate` and `mount` functions.', t);
95
+ continue;
96
+ }
97
+ if (seen.has(t.id)) {
98
+ log.warn(`[visualizer] dialog tool '${t.id}' ignored: another dialog tool already uses that id.`);
99
+ continue;
100
+ }
101
+ seen.add(t.id);
102
+ out.push(t);
103
+ }
104
+ return sortToolContributions(out);
63
105
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci10b29sLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvdG9vbGJhci10b29sLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkNHO0FBQ0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTRJL0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksY0FBYyxDQUFxQyxlQUFlLENBQUMsQ0FBQztBQUVyRyxpREFBaUQ7QUFDakQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxLQUF5QztJQUV6Qyw2RUFBNkU7SUFDN0UsbURBQW1EO0lBQ25ELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNuRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNyRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxLQUE0RDtJQUU1RCxPQUFPLHFCQUFxQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSG93IGEgdG9vbCBnZXRzIGludG8gdGhlIHRvb2xiYXIgd2l0aG91dCB0aGlzIGxpYnJhcnkga25vd2luZyB3aGF0IGl0IGlzLlxuICpcbiAqIFdIWSBUSElTIEVYSVNUU1xuICogVGhlIFlPTE8gZGV0ZWN0b3IgYW5kIHRoZSByZXRpbmFsLWxheWVyIHNlZ21lbnRlciB1c2VkIHRvIGJlIGJ1aWx0IGluOiB0aGVpclxuICogYnV0dG9ucyB3ZXJlIGhhcmRjb2RlZCBpbiB0aGUgdG9vbGJhciB0ZW1wbGF0ZSwgdGhlaXIgbW9kZWwgcmVnaXN0cmllcyBuYW1lZFxuICogSkFYIGNoZWNrcG9pbnRzLCBhbmQgdGhlIGBJTlNUQU5DRV9TRUdNRU5URVJgIC8gYFNFTUFOVElDX1NFR01FTlRFUmAgdG9rZW5zXG4gKiBkZWZhdWx0ZWQgdG8gaW4tbGlicmFyeSBzZXJ2aWNlcyB0aGF0IGltcG9ydGVkIGB5b2xvLXNlZ2RldGVjdC1qc2AgYW5kXG4gKiBgamF4LWFpLWpzYC4gVGhvc2UgZGVmYXVsdCBmYWN0b3JpZXMgd2VyZSB0aGUgb25seSB0aGluZyBwdWxsaW5nIGVpdGhlclxuICogcGFja2FnZSBpbnRvIHRoZSBidW5kbGUg4oCUIHRoZSBjb250cmFjdHMgdGhlbXNlbHZlcyB3ZXJlIGFscmVhZHkgY2xlYW4uXG4gKlxuICogVGhhdCBhcnJhbmdlbWVudCBjYW5ub3Qgc2hpcCBpbiBhbiBvcGVuIGxpYnJhcnkgd2hpbGUgdGhlIG1vZGVscyBhcmUgY2xvc2VkLlxuICogU28gdGhlIHRvb2xzIG1vdmUgb3V0LCBpbnRvIGEgcGFja2FnZSB0aGF0IGRlcGVuZHMgb24gdGhpcyBvbmUsIGFuZCBhcnJpdmVcbiAqIGJhY2sgdGhyb3VnaCB7QGxpbmsgVE9PTEJBUl9UT09MU30uIFRoaXMgbGlicmFyeSBrZWVwcyB0aGUgY29udHJhY3RzLCB0aGVcbiAqIGNocm9tZSBhbmQgdGhlIHJlZ2lvbiBwbHVtYmluZzsgaXQgbm8gbG9uZ2VyIGtub3dzIHRoYXQgWU9MTyBleGlzdHMuXG4gKlxuICogQSBob3N0IHJlZ2lzdGVycyB0b29scyB3aXRoIGEgbXVsdGktcHJvdmlkZXI6XG4gKlxuICogICAgIHsgcHJvdmlkZTogVE9PTEJBUl9UT09MUywgdXNlRXhpc3Rpbmc6IFlvbG9Ub29sQ29udHJpYnV0aW9uLCBtdWx0aTogdHJ1ZSB9XG4gKlxuICogUmVnaXN0ZXIgbm90aGluZyBhbmQgdGhlIHRvb2xiYXIgaGFzIG5vIHNlZ21lbnRhdGlvbiB0b29scywgdGhlIGhlbHAgZGlhbG9nXG4gKiBsaXN0cyBub25lLCBhbmQgbmVpdGhlciBtb2RlbCBwYWNrYWdlIGlzIGluIHRoZSBncmFwaC5cbiAqXG4gKiBXSFkgUEFSQU1TIEFSRSBERUNMQVJFRCwgTk9UIFJFTkRFUkVEXG4gKiBBIGNvbnRyaWJ1dGlvbiBkZXNjcmliZXMgaXRzIHBhcmFtZXRlcnMgKHtAbGluayBUb29sUGFyYW1TcGVjfSkgaW5zdGVhZCBvZlxuICogc3VwcGx5aW5nIGEgY29tcG9uZW50IHRvIGRyYXcgdGhlbS4gVGhlIHRvb2xiYXIgcmVuZGVycyBvbmUgZ2VuZXJpYyBkaWFsb2dcbiAqIGZyb20gdGhhdCBkZXNjcmlwdGlvbi4gVGhlIGFsdGVybmF0aXZlIOKAlCBlYWNoIHBsdWdpbiBzaGlwcGluZyBpdHMgb3duIGRpYWxvZ1xuICogY29tcG9uZW50IOKAlCB3b3VsZCBtYWtlIGV2ZXJ5IHBsdWdpbiBkZXBlbmQgb24gdGhpcyBsaWJyYXJ5J3MgZXhhY3QgUHJpbWVOR1xuICogdmVyc2lvbiBhbmQgc3R5bGluZyBpbnRlcm5hbHMgdG8gbG9vayBsaWtlIHRoZSByZXN0IG9mIHRoZSB0b29sYmFyLCBhbmQgdGhlXG4gKiB0d28gZGlhbG9ncyB0aGF0IGV4aXN0IHRvZGF5IGFyZSBlbnRpcmVseSBudW1iZXJzIGFuZCBvbmUgY2hlY2tib3guIEEgc2NoZW1hXG4gKiBjb3ZlcnMgdGhlbSwgYW5kIGl0IGlzIHRoZSBzYW1lIHNoYXBlIGppdC11aSBhbHJlYWR5IHVzZXMgZm9yIGl0cyBwaXBlbGluZVxuICogc3RlcCBwYXJhbWV0ZXJzLCBzbyB0aGUgdm9jYWJ1bGFyeSBpcyBmYW1pbGlhci5cbiAqXG4gKiBJZiBhIHRvb2wgZXZlciBuZWVkcyBhIGNvbnRyb2wgdGhpcyBjYW5ub3QgZXhwcmVzcywgYWRkIGEgdmFyaWFudCBoZXJlIHJhdGhlclxuICogdGhhbiBhbiBlc2NhcGUgaGF0Y2ggdGhhdCByZXR1cm5zIGEgY29tcG9uZW50IOKAlCB0aGUgbW9tZW50IG9uZSB0b29sIGRyYXdzXG4gKiBpdHNlbGYsIHRoZSB0b29sYmFyIHN0b3BzIGJlaW5nIGFibGUgdG8gbGF5IHRvb2xzIG91dCBjb25zaXN0ZW50bHkuXG4gKlxuICogV0hZIEFOIEVNUFRZIE1PREVMIExJU1QgSElERVMgVEhFIFRPT0xcbiAqIHtAbGluayBUb29sYmFyVG9vbENvbnRyaWJ1dGlvbi5tb2RlbHN9IHJldHVybmluZyBgW11gIHJlbW92ZXMgdGhlIHRvb2wgZnJvbVxuICogdGhlIHRvb2xiYXIgZW50aXJlbHkuIFRoaXMgcHJlc2VydmVzIHRoZSBiZWhhdmlvdXIgdGhlIGJ1aWx0LWluIHRvb2xzIGFscmVhZHlcbiAqIGhhZCAodGhlaXIgYnV0dG9ucyB3ZXJlIGAqbmdJZmAnZCBvbiBhIGZpbHRlcmVkIHJlZ2lzdHJ5KSwgYW5kIGl0IGdpdmVzIGEgaG9zdFxuICogb25lIHN3aXRjaCBmb3IgXCJ0aGUgd2VpZ2h0cyBhcmUgbm90IGNvbmZpZ3VyZWQgaW4gdGhpcyBkZXBsb3ltZW50XCIgdGhhdCBkb2VzXG4gKiBub3QgcmVxdWlyZSB1bnJlZ2lzdGVyaW5nIHRoZSBwcm92aWRlci5cbiAqL1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgdHlwZSB7IElWaXN1YWxpemVyIH0gZnJvbSAnLi92aXN1YWxpemVyLmNvbnRyYWN0JztcblxuLyoqIEEgbnVtYmVyIGZpZWxkLiBSZW5kZXJlZCBhcyBhIHN0ZXBwZXIsIG1hdGNoaW5nIHRoZSBidWlsdC1pbiBkaWFsb2dzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdW1iZXJQYXJhbVNwZWMge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiAnbnVtYmVyJztcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIHN0ZXA/OiBudW1iZXI7XG4gIC8qKiBEZWNpbWFsIHBsYWNlcyB0byBzaG93LiBPbWl0IGZvciBpbnRlZ2Vycy4gKi9cbiAgZnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gIC8qKiBIb3ZlciBoZWxwLiBQbGFpbiB0ZXh0OyBpdCBpcyBub3QgcmVuZGVyZWQgYXMgSFRNTC4gKi9cbiAgdG9vbHRpcD86IHN0cmluZztcbn1cblxuLyoqIEEgY2hlY2tib3guIGBsYWJlbGAgc2l0cyBiZXNpZGUgaXQgYW5kIG1heSBydW4gdG8gYSBzZW50ZW5jZSBvciB0d28uICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb2xlYW5QYXJhbVNwZWMge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiAnYm9vbGVhbic7XG4gIHRvb2x0aXA/OiBzdHJpbmc7XG59XG5cbi8qKiBBIGZpeGVkIHNldCBvZiBjaG9pY2VzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RQYXJhbVNwZWMge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiAnc2VsZWN0JztcbiAgb3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH1bXTtcbiAgdG9vbHRpcD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgVG9vbFBhcmFtU3BlYyA9IE51bWJlclBhcmFtU3BlYyB8IEJvb2xlYW5QYXJhbVNwZWMgfCBTZWxlY3RQYXJhbVNwZWM7XG5cbi8qKiBPbmUgc2VsZWN0YWJsZSBjaGVja3BvaW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sTW9kZWxPcHRpb24ge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogRGVzY3JpYmVzIHRoZSBjaGVja3BvaW50IGluIHRoZSBwaWNrZXIncyBob3ZlciB0b29sdGlwIOKAlCBzaXplLCBzcGVlZCxcbiAgICogdHJhaW5pbmcgZG9tYWluLCBhY2N1cmFjeS4gKipSZW5kZXJlZCBhcyBIVE1MKiosIHNvIGl0IGlzIHRydXN0ZWQgY29udGVudFxuICAgKiBmcm9tIHRoZSBjb250cmlidXRpbmcgcGFja2FnZSwgbmV2ZXIgYW55dGhpbmcgdXNlci1zdXBwbGllZC5cbiAgICovXG4gIGluZm8/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQYXJhbWV0ZXIgdmFsdWVzIHRoaXMgY2hlY2twb2ludCB3YW50cywgbWVyZ2VkIG92ZXJcbiAgICoge0BsaW5rIFRvb2xiYXJUb29sQ29udHJpYnV0aW9uLmRlZmF1bHRQYXJhbXN9IHdoZW4gaXQgaXMgc2VsZWN0ZWQuIERlZmF1bHRzXG4gICAqIGJlbG9uZyB0byB0aGUgbW9kZWwgcmF0aGVyIHRoYW4gdGhlIHRvb2wg4oCUIGEgZGV0ZWN0b3IgdHJhaW5lZCBvbiBuYXRpdmUgNDB4XG4gICAqIHBhdGNoZXMgd2FudHMgZGlmZmVyZW50IHRpbGluZyBmcm9tIG9uZSB0cmFpbmVkIG9uIHRodW1ibmFpbHMuXG4gICAqL1xuICBkZWZhdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFRoZSBgc3RhdHVzJGAgLyBgYnVzeSRgIC8gYHByb2dyZXNzJGAgc3VyZmFjZSB0aGUgdG9vbGJhciBkcml2ZXMgaXRzIHN0aWNreVxuICogdG9hc3QgYW5kIHByb2dyZXNzIGJhciBmcm9tLiBgcHJvZ3Jlc3MkYCBpcyBhIDAuLjEgZnJhY3Rpb24sIG9yIC0xIGZvclxuICogaW5kZXRlcm1pbmF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sUHJvZ3Jlc3Mge1xuICBzdGF0dXMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGJ1c3kkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwcm9ncmVzcyQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbn1cblxuLyoqIFRvb2xiYXIgaWNvbjogYSBwdWJsaXNoZWQgYXNzZXQsIG9yIGEgUHJpbWVJY29uIGNsYXNzIG5hbWUuICovXG5leHBvcnQgdHlwZSBUb29sSWNvbiA9IHsgc3JjOiBzdHJpbmc7IHBpPzogbmV2ZXIgfSB8IHsgcGk6IHN0cmluZzsgc3JjPzogbmV2ZXIgfTtcblxuLyoqXG4gKiBBIHRvb2wgY29udHJpYnV0ZWQgdG8gdGhlIHRvb2xiYXIuXG4gKlxuICogSW1wbGVtZW50IGl0IG9uIGFuIGBASW5qZWN0YWJsZSgpYCBzZXJ2aWNlIGluIHRoZSBjb250cmlidXRpbmcgcGFja2FnZSwgc28gaXRcbiAqIGNhbiBpbmplY3QgaXRzIG93biBzZWdtZW50ZXIgYW5kIG1vZGVsIHJlZ2lzdHJ5IOKAlCB0aGlzIGxpYnJhcnkgcHJvdmlkZXNcbiAqIG5laXRoZXIgYW5kIG11c3Qgbm90IGxlYXJuIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xiYXJUb29sQ29udHJpYnV0aW9uIHtcbiAgLyoqIFN0YWJsZSBpZGVudGl0eSwgdXNlZCBmb3IgdHJhY2tpbmcgYW5kIHBlcnNpc3RlZCBwcmVmZXJlbmNlcy4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFNob3J0IG5hbWUsIHVzZWQgaW4gdGhlIHRvYXN0IGFuZCB0aGUgaGVscCBkaWFsb2cgaGVhZGluZy4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbjogVG9vbEljb247XG5cbiAgLyoqIFRvb2x0aXAgb24gdGhlIHJ1biBidXR0b24g4oCUIHNheSB3aGF0IGl0IGRvZXMgdG8gdGhlIGN1cnJlbnQgdmlldy4gKi9cbiAgcnVuVG9vbHRpcDogc3RyaW5nO1xuICAvKiogVG9vbHRpcCBvbiB0aGUgY2hlY2twb2ludCBwaWNrZXIuIERlZmF1bHRzIHRvIFwiUGljayB0aGUgbW9kZWxcIi4gKi9cbiAgbW9kZWxUb29sdGlwPzogc3RyaW5nO1xuICAvKiogVG9vbHRpcCBvbiB0aGUgcGFyYW1ldGVycyBidXR0b24uIERlZmF1bHRzIHRvIFwiUGFyYW1ldGVyc1wiLiAqL1xuICBwYXJhbXNUb29sdGlwPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVyZSBpdCBzaXRzIGFtb25nIHRoZSBzZWdtZW50YXRpb24gdG9vbHMuIExvd2VyIHNvcnRzIGZpcnN0OyB0aWVzIGZhbGxcbiAgICogYmFjayB0byByZWdpc3RyYXRpb24gb3JkZXIuIFRoZSBidWlsdC1pbiBwcm9tcHRlZCB0b29scyBvY2N1cHkgMC05OSwgc29cbiAgICogY29udHJpYnV0ZWQgdG9vbHMgc2hvdWxkIHN0YXJ0IGF0IDEwMCB0byBsYW5kIGFmdGVyIHRoZW0uXG4gICAqL1xuICBvcmRlcj86IG51bWJlcjtcblxuICAvKiogU2VsZWN0YWJsZSBjaGVja3BvaW50cy4gKipFbXB0eSBoaWRlcyB0aGUgdG9vbC4qKiAqL1xuICBtb2RlbHMoKTogVG9vbE1vZGVsT3B0aW9uW107XG4gIC8qKiBXaGljaCBjaGVja3BvaW50IHJ1bnMgd2hlbiB0aGUgdXNlciBoYXMgbm90IGNob3Nlbi4gKi9cbiAgZGVmYXVsdE1vZGVsSWQoKTogc3RyaW5nO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgcGlja3MgYSBjaGVja3BvaW50LCBiZWZvcmUgcGFyYW1ldGVycyBhcmUgcmUtc2VlZGVkLlxuICAgKiBVc2UgaXQgdG8gcmVjb3JkIHRoZSBjaG9pY2UgaW4gdGhlIGNvbnRyaWJ1dGluZyBwYWNrYWdlJ3Mgb3duIHJlZ2lzdHJ5LlxuICAgKi9cbiAgb25Nb2RlbENoYW5nZT8obW9kZWxJZDogc3RyaW5nKTogdm9pZDtcblxuICAvKiogUGFyYW1ldGVyIGZpZWxkcywgaW4gZGlhbG9nIG9yZGVyLiBFbXB0eSBoaWRlcyB0aGUgcGFyYW1ldGVycyBidXR0b24uICovXG4gIHBhcmFtczogVG9vbFBhcmFtU3BlY1tdO1xuICAvKipcbiAgICogQmFzZWxpbmUgcGFyYW1ldGVyIHZhbHVlcyBmb3IgYSBjaGVja3BvaW50LiBDYWxsZWQgb24gZmlyc3QgdXNlIGFuZCBhZ2FpblxuICAgKiBvbiBcIlJlc2V0IHRvIG1vZGVsIGRlZmF1bHRzXCIsIHNvIGl0IG11c3QgYmUgcHVyZSBhbmQgbXVzdCByZXR1cm4gZXZlcnkga2V5XG4gICAqIHRoZSB0b29sIHJlYWRzIOKAlCBhIHBhcmFtZXRlciB0aGUgZGlhbG9nIHNob3dzIGJ1dCB0aGlzIG9taXRzIHJlbmRlcnMgYXNcbiAgICogZW1wdHkgYW5kIHJlYWNoZXMgYHJ1bmAgYXMgdW5kZWZpbmVkLlxuICAgKi9cbiAgZGVmYXVsdFBhcmFtcyhtb2RlbElkOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogRW50cnkgZm9yIHRoZSBoZWxwIGRpYWxvZydzIHRvb2wgbGlzdC4gYGJvZHlgIGlzIHJlbmRlcmVkIGFzIEhUTUwgYW5kIG1heVxuICAgKiByZWZlcmVuY2UgcHVibGlzaGVkIGFzc2V0cyAoZS5nLiB0aGUgdG9vbCdzIG93biBpY29uKS5cbiAgICovXG4gIGhlbHA/OiB7IGJvZHk6IHN0cmluZyB9O1xuXG4gIC8qKiBQcm9ncmVzcyBzdXJmYWNlIGZvciB0aGUgdG9hc3QuICovXG4gIHByb2dyZXNzOiBUb29sUHJvZ3Jlc3M7XG5cbiAgLyoqXG4gICAqIFJ1biBvdmVyIHdoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZCwgYW5kIHdyaXRlIHdoYXRldmVyIGl0IGZpbmRzIHRocm91Z2hcbiAgICogYHZpemAuIFJlc29sdmVzIHdpdGggdGhlIG51bWJlciBvZiByZWdpb25zIGFkZGVkLlxuICAgKlxuICAgKiBFdmVyeXRoaW5nIHRoZSB0b29sIG5lZWRzIGlzIG9uIHtAbGluayBJVmlzdWFsaXplcn0sIHdoaWNoIGlzIHBhcnQgb2YgdGhpc1xuICAgKiBsaWJyYXJ5J3MgcHVibGljIHN1cmZhY2Ug4oCUIGEgY29udHJpYnV0aW9uIG5ldmVyIHJlYWNoZXMgaW50byBpbnRlcm5hbHMuXG4gICAqIFJlZ2lvbiB3cml0ZXMgZ28gdGhyb3VnaCB0aGUgc2FtZSBwYXRoIHRoZSBidWlsdC1pbiB0b29scyB1c2UsIHNvIHRoZVxuICAgKiBpbmRleC1iYXNlZCBvdmVybGF5cyBhbmQgdGhlIFJlZ2lvbnMgdGFibGUgc3RheSBjb25zaXN0ZW50LlxuICAgKi9cbiAgcnVuKHZpejogSVZpc3VhbGl6ZXIsIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPG51bWJlcj47XG59XG5cbi8qKlxuICogTXVsdGktcHJvdmlkZXIgdG9rZW4gZm9yIGNvbnRyaWJ1dGVkIHRvb2xzLlxuICpcbiAqIERlbGliZXJhdGVseSBoYXMgbm8gYGZhY3RvcnlgOiB1bnJlZ2lzdGVyZWQgbWVhbnMgbm8gdG9vbHMsIHdoaWNoIGlzIHdoYXRcbiAqIG1ha2VzIHRoaXMgbGlicmFyeSBzaGlwcGFibGUgd2l0aG91dCB0aGUgY2xvc2VkIG1vZGVsIHBhY2thZ2VzLiBJbmplY3QgaXRcbiAqIGB7IG9wdGlvbmFsOiB0cnVlIH1gIGFuZCB0cmVhdCBudWxsIGFzIGVtcHR5LlxuICovXG5leHBvcnQgY29uc3QgVE9PTEJBUl9UT09MUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxyZWFkb25seSBUb29sYmFyVG9vbENvbnRyaWJ1dGlvbltdPignVE9PTEJBUl9UT09MUycpO1xuXG4vKiogU29ydCBjb250cmlidXRlZCB0b29scyBpbnRvIGRpc3BsYXkgb3JkZXIuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRvb2xDb250cmlidXRpb25zKFxuICB0b29sczogcmVhZG9ubHkgVG9vbGJhclRvb2xDb250cmlidXRpb25bXSxcbik6IFRvb2xiYXJUb29sQ29udHJpYnV0aW9uW10ge1xuICAvLyBTdGFibGU6IGVxdWFsIGBvcmRlcmAga2VlcHMgcmVnaXN0cmF0aW9uIG9yZGVyLCBzbyBhIGhvc3QgY29udHJvbHMgdGllcyBieVxuICAvLyBwcm92aWRlciBvcmRlciB3aXRob3V0IGhhdmluZyB0byBpbnZlbnQgbnVtYmVycy5cbiAgcmV0dXJuIHRvb2xzLm1hcCgodCwgaSkgPT4gKHsgdCwgaSB9KSkuc29ydCgoYSwgYikgPT5cbiAgICAoYS50Lm9yZGVyID8/IDEwMCkgLSAoYi50Lm9yZGVyID8/IDEwMCkgfHwgYS5pIC0gYi5pLFxuICApLm1hcCgoeyB0IH0pID0+IHQpO1xufVxuXG4vKiogVGhlIHRvb2xzIGEgdG9vbGJhciBzaG91bGQgYWN0dWFsbHkgc2hvdzogdGhvc2Ugd2l0aCBhdCBsZWFzdCBvbmUgbW9kZWwuICovXG5leHBvcnQgZnVuY3Rpb24gdmlzaWJsZVRvb2xDb250cmlidXRpb25zKFxuICB0b29sczogcmVhZG9ubHkgVG9vbGJhclRvb2xDb250cmlidXRpb25bXSB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBUb29sYmFyVG9vbENvbnRyaWJ1dGlvbltdIHtcbiAgcmV0dXJuIHNvcnRUb29sQ29udHJpYnV0aW9ucyh0b29scyA/PyBbXSkuZmlsdGVyKCh0KSA9PiB0Lm1vZGVscygpLmxlbmd0aCA+IDApO1xufVxuIl19
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci10b29sLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvdG9vbGJhci10b29sLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzREc7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBaU0vQyx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLHdCQUF3QixDQUFDLENBQVU7SUFDakQsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQXdCLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztBQUM1RCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQWlDLGVBQWUsQ0FBQyxDQUFDO0FBRWpHLGlEQUFpRDtBQUNqRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLEtBQW1CO0lBRW5CLDZFQUE2RTtJQUM3RSxtREFBbUQ7SUFDbkQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ25ELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ3JELENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVEO3VFQUN1RTtBQUN2RSxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLEtBQXdEO0lBRXhELE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxDQUFDLEVBQWdDLEVBQUUsQ0FDbEMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFRLENBQTZCLEVBQUUsTUFBTSxLQUFLLFVBQVUsQ0FDL0YsQ0FBQztJQUNGLE9BQU8scUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxLQUF3RCxFQUN4RCxNQUEwQyxPQUFPO0lBRWpELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQW9DLEVBQUUsQ0FBQztJQUNoRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7UUFDL0QsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVTtlQUNsRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDckMsR0FBRyxDQUFDLElBQUksQ0FBQyxnR0FBZ0csRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RyxTQUFTO1FBQ1gsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsRUFBRSxzREFBc0QsQ0FBQyxDQUFDO1lBQ2xHLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8scUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSG93IGEgdG9vbCBnZXRzIGludG8gdGhlIHRvb2xiYXIgd2l0aG91dCB0aGlzIGxpYnJhcnkga25vd2luZyB3aGF0IGl0IGlzLlxuICpcbiAqIFdIWSBUSElTIEVYSVNUU1xuICogVGhlIFlPTE8gZGV0ZWN0b3IgYW5kIHRoZSByZXRpbmFsLWxheWVyIHNlZ21lbnRlciB1c2VkIHRvIGJlIGJ1aWx0IGluOiB0aGVpclxuICogYnV0dG9ucyB3ZXJlIGhhcmRjb2RlZCBpbiB0aGUgdG9vbGJhciB0ZW1wbGF0ZSwgdGhlaXIgbW9kZWwgcmVnaXN0cmllcyBuYW1lZFxuICogSkFYIGNoZWNrcG9pbnRzLCBhbmQgdGhlIGBJTlNUQU5DRV9TRUdNRU5URVJgIC8gYFNFTUFOVElDX1NFR01FTlRFUmAgdG9rZW5zXG4gKiBkZWZhdWx0ZWQgdG8gaW4tbGlicmFyeSBzZXJ2aWNlcyB0aGF0IGltcG9ydGVkIGB5b2xvLXNlZ2RldGVjdC1qc2AgYW5kXG4gKiBgamF4LWFpLWpzYC4gVGhvc2UgZGVmYXVsdCBmYWN0b3JpZXMgd2VyZSB0aGUgb25seSB0aGluZyBwdWxsaW5nIGVpdGhlclxuICogcGFja2FnZSBpbnRvIHRoZSBidW5kbGUg4oCUIHRoZSBjb250cmFjdHMgdGhlbXNlbHZlcyB3ZXJlIGFscmVhZHkgY2xlYW4uXG4gKlxuICogVGhhdCBhcnJhbmdlbWVudCBjYW5ub3Qgc2hpcCBpbiBhbiBvcGVuIGxpYnJhcnkgd2hpbGUgdGhlIG1vZGVscyBhcmUgY2xvc2VkLlxuICogU28gdGhlIHRvb2xzIG1vdmUgb3V0LCBpbnRvIGEgcGFja2FnZSB0aGF0IGRlcGVuZHMgb24gdGhpcyBvbmUsIGFuZCBhcnJpdmVcbiAqIGJhY2sgdGhyb3VnaCB7QGxpbmsgVE9PTEJBUl9UT09MU30uIFRoaXMgbGlicmFyeSBrZWVwcyB0aGUgY29udHJhY3RzLCB0aGVcbiAqIGNocm9tZSBhbmQgdGhlIHJlZ2lvbiBwbHVtYmluZzsgaXQgbm8gbG9uZ2VyIGtub3dzIHRoYXQgWU9MTyBleGlzdHMuXG4gKlxuICogQSBob3N0IHJlZ2lzdGVycyB0b29scyB3aXRoIGEgbXVsdGktcHJvdmlkZXI6XG4gKlxuICogICAgIHsgcHJvdmlkZTogVE9PTEJBUl9UT09MUywgdXNlRXhpc3Rpbmc6IFlvbG9Ub29sQ29udHJpYnV0aW9uLCBtdWx0aTogdHJ1ZSB9XG4gKlxuICogUmVnaXN0ZXIgbm90aGluZyBhbmQgdGhlIHRvb2xiYXIgaGFzIG5vIHNlZ21lbnRhdGlvbiB0b29scywgdGhlIGhlbHAgZGlhbG9nXG4gKiBsaXN0cyBub25lLCBhbmQgbmVpdGhlciBtb2RlbCBwYWNrYWdlIGlzIGluIHRoZSBncmFwaC5cbiAqXG4gKiBXSFkgUEFSQU1TIEFSRSBERUNMQVJFRCwgTk9UIFJFTkRFUkVEXG4gKiBBIGNvbnRyaWJ1dGlvbiBkZXNjcmliZXMgaXRzIHBhcmFtZXRlcnMgKHtAbGluayBUb29sUGFyYW1TcGVjfSkgaW5zdGVhZCBvZlxuICogc3VwcGx5aW5nIGEgY29tcG9uZW50IHRvIGRyYXcgdGhlbS4gVGhlIHRvb2xiYXIgcmVuZGVycyBvbmUgZ2VuZXJpYyBkaWFsb2dcbiAqIGZyb20gdGhhdCBkZXNjcmlwdGlvbi4gVGhlIGFsdGVybmF0aXZlIOKAlCBlYWNoIHBsdWdpbiBzaGlwcGluZyBpdHMgb3duIGRpYWxvZ1xuICogY29tcG9uZW50IOKAlCB3b3VsZCBtYWtlIGV2ZXJ5IHBsdWdpbiBkZXBlbmQgb24gdGhpcyBsaWJyYXJ5J3MgZXhhY3QgUHJpbWVOR1xuICogdmVyc2lvbiBhbmQgc3R5bGluZyBpbnRlcm5hbHMgdG8gbG9vayBsaWtlIHRoZSByZXN0IG9mIHRoZSB0b29sYmFyLCBhbmQgdGhlXG4gKiB0d28gZGlhbG9ncyB0aGF0IGV4aXN0IHRvZGF5IGFyZSBlbnRpcmVseSBudW1iZXJzIGFuZCBvbmUgY2hlY2tib3guIEEgc2NoZW1hXG4gKiBjb3ZlcnMgdGhlbSwgYW5kIGl0IGlzIHRoZSBzYW1lIHNoYXBlIGppdC11aSBhbHJlYWR5IHVzZXMgZm9yIGl0cyBwaXBlbGluZVxuICogc3RlcCBwYXJhbWV0ZXJzLCBzbyB0aGUgdm9jYWJ1bGFyeSBpcyBmYW1pbGlhci5cbiAqXG4gKiBJZiBhIHRvb2wgZXZlciBuZWVkcyBhIGNvbnRyb2wgdGhpcyBjYW5ub3QgZXhwcmVzcywgYWRkIGEgdmFyaWFudCBoZXJlIHJhdGhlclxuICogdGhhbiBhbiBlc2NhcGUgaGF0Y2ggdGhhdCByZXR1cm5zIGEgY29tcG9uZW50IOKAlCB0aGUgbW9tZW50IG9uZSB0b29sIGRyYXdzXG4gKiBpdHNlbGYsIHRoZSB0b29sYmFyIHN0b3BzIGJlaW5nIGFibGUgdG8gbGF5IHRvb2xzIG91dCBjb25zaXN0ZW50bHkuXG4gKlxuICogRElBTE9HIFRPT0xTXG4gKiBTb21lIHRvb2xzIGFyZSBub3QgXCJzZXQgcGFyYW1ldGVycywgcnVuIG9uY2VcIiBidXQgYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbjogdGhlXG4gKiB1c2VyIHBhaW50cywgdGhlIHRvb2wgcmV0cmFpbnMgYW5kIHJlZHJhd3MsIG92ZXIgYW5kIG92ZXIgKERJQU5ORSkuIEEgc2NoZW1hXG4gKiBjYW5ub3QgZGVzY3JpYmUgdGhhdCwgc28ge0BsaW5rIFRvb2xiYXJEaWFsb2dUb29sQ29udHJpYnV0aW9ufSBpcyB0aGUgb25lXG4gKiB2YXJpYW50IHRoYXQgcmVuZGVycyBpdHMgb3duIGJvZHkuIFRoZSB0b29sYmFyIHN0aWxsIG93bnMgdGhlIGJ1dHRvbiwgaXRzXG4gKiBwbGFjZW1lbnQgYW5kIHRoZSBkaWFsb2cgY2hyb21lOyB0aGUgdG9vbCBvbmx5IGZpbGxzIHRoZSBkaWFsb2csIHdpdGggcGxhaW5cbiAqIERPTSAoYG1vdW50YCksIHNvIGl0IG5lZWRzIG5laXRoZXIgQW5ndWxhciBub3IgdGhpcyBsaWJyYXJ5J3MgUHJpbWVORyB2ZXJzaW9uLlxuICogSXRzIGJ1dHRvbiBzaXRzIHdpdGggdGhlIGhvc3QncyBvd24gYWN0aW9ucyBhdCB0aGUgc3RhcnQgb2YgdGhlIHRvb2xiYXIsIGFuZFxuICogc2hvd3Mgb25seSBpbiB0aGUgSW1hZ2UgdmlldywgdGhlIHZpZXcgaXRzIGNvbnRleHQgKHtAbGluayBUb29sRGlhbG9nQ29udGV4dH0pXG4gKiBkcmF3cyBvdmVyLlxuICpcbiAqIFdIWSBBTiBFTVBUWSBNT0RFTCBMSVNUIEhJREVTIFRIRSBUT09MXG4gKiB7QGxpbmsgVG9vbGJhclRvb2xDb250cmlidXRpb24ubW9kZWxzfSByZXR1cm5pbmcgYFtdYCByZW1vdmVzIHRoZSB0b29sIGZyb21cbiAqIHRoZSB0b29sYmFyIGVudGlyZWx5LiBUaGlzIHByZXNlcnZlcyB0aGUgYmVoYXZpb3VyIHRoZSBidWlsdC1pbiB0b29scyBhbHJlYWR5XG4gKiBoYWQgKHRoZWlyIGJ1dHRvbnMgd2VyZSBgKm5nSWZgJ2Qgb24gYSBmaWx0ZXJlZCByZWdpc3RyeSksIGFuZCBpdCBnaXZlcyBhIGhvc3RcbiAqIG9uZSBzd2l0Y2ggZm9yIFwidGhlIHdlaWdodHMgYXJlIG5vdCBjb25maWd1cmVkIGluIHRoaXMgZGVwbG95bWVudFwiIHRoYXQgZG9lc1xuICogbm90IHJlcXVpcmUgdW5yZWdpc3RlcmluZyB0aGUgcHJvdmlkZXIuXG4gKi9cbmltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHR5cGUgeyBJVmlzdWFsaXplciB9IGZyb20gJy4vdmlzdWFsaXplci5jb250cmFjdCc7XG5pbXBvcnQgdHlwZSB7IFBsb3RNb2RlQ29udGV4dCwgUGxvdE1vZGVTZXNzaW9uLCBQbG90TW9kZVRvb2xzIH0gZnJvbSAnLi9wbG90LXR5cGUtY29udHJpYnV0aW9uLmNvbnRyYWN0JztcblxuLyoqIEEgbnVtYmVyIGZpZWxkLiBSZW5kZXJlZCBhcyBhIHN0ZXBwZXIsIG1hdGNoaW5nIHRoZSBidWlsdC1pbiBkaWFsb2dzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdW1iZXJQYXJhbVNwZWMge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiAnbnVtYmVyJztcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIHN0ZXA/OiBudW1iZXI7XG4gIC8qKiBEZWNpbWFsIHBsYWNlcyB0byBzaG93LiBPbWl0IGZvciBpbnRlZ2Vycy4gKi9cbiAgZnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gIC8qKiBIb3ZlciBoZWxwLiBQbGFpbiB0ZXh0OyBpdCBpcyBub3QgcmVuZGVyZWQgYXMgSFRNTC4gKi9cbiAgdG9vbHRpcD86IHN0cmluZztcbn1cblxuLyoqIEEgY2hlY2tib3guIGBsYWJlbGAgc2l0cyBiZXNpZGUgaXQgYW5kIG1heSBydW4gdG8gYSBzZW50ZW5jZSBvciB0d28uICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb2xlYW5QYXJhbVNwZWMge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiAnYm9vbGVhbic7XG4gIHRvb2x0aXA/OiBzdHJpbmc7XG59XG5cbi8qKiBBIGZpeGVkIHNldCBvZiBjaG9pY2VzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RQYXJhbVNwZWMge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiAnc2VsZWN0JztcbiAgb3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH1bXTtcbiAgdG9vbHRpcD86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgVG9vbFBhcmFtU3BlYyA9IE51bWJlclBhcmFtU3BlYyB8IEJvb2xlYW5QYXJhbVNwZWMgfCBTZWxlY3RQYXJhbVNwZWM7XG5cbi8qKiBPbmUgc2VsZWN0YWJsZSBjaGVja3BvaW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sTW9kZWxPcHRpb24ge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogRGVzY3JpYmVzIHRoZSBjaGVja3BvaW50IGluIHRoZSBwaWNrZXIncyBob3ZlciB0b29sdGlwIOKAlCBzaXplLCBzcGVlZCxcbiAgICogdHJhaW5pbmcgZG9tYWluLCBhY2N1cmFjeS4gKipSZW5kZXJlZCBhcyBIVE1MKiosIHNvIGl0IGlzIHRydXN0ZWQgY29udGVudFxuICAgKiBmcm9tIHRoZSBjb250cmlidXRpbmcgcGFja2FnZSwgbmV2ZXIgYW55dGhpbmcgdXNlci1zdXBwbGllZC5cbiAgICovXG4gIGluZm8/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQYXJhbWV0ZXIgdmFsdWVzIHRoaXMgY2hlY2twb2ludCB3YW50cywgbWVyZ2VkIG92ZXJcbiAgICoge0BsaW5rIFRvb2xiYXJUb29sQ29udHJpYnV0aW9uLmRlZmF1bHRQYXJhbXN9IHdoZW4gaXQgaXMgc2VsZWN0ZWQuIERlZmF1bHRzXG4gICAqIGJlbG9uZyB0byB0aGUgbW9kZWwgcmF0aGVyIHRoYW4gdGhlIHRvb2wg4oCUIGEgZGV0ZWN0b3IgdHJhaW5lZCBvbiBuYXRpdmUgNDB4XG4gICAqIHBhdGNoZXMgd2FudHMgZGlmZmVyZW50IHRpbGluZyBmcm9tIG9uZSB0cmFpbmVkIG9uIHRodW1ibmFpbHMuXG4gICAqL1xuICBkZWZhdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIFRoZSBgc3RhdHVzJGAgLyBgYnVzeSRgIC8gYHByb2dyZXNzJGAgc3VyZmFjZSB0aGUgdG9vbGJhciBkcml2ZXMgaXRzIHN0aWNreVxuICogdG9hc3QgYW5kIHByb2dyZXNzIGJhciBmcm9tLiBgcHJvZ3Jlc3MkYCBpcyBhIDAuLjEgZnJhY3Rpb24sIG9yIC0xIGZvclxuICogaW5kZXRlcm1pbmF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb29sUHJvZ3Jlc3Mge1xuICBzdGF0dXMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGJ1c3kkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwcm9ncmVzcyQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbn1cblxuLyoqIFRvb2xiYXIgaWNvbjogYSBwdWJsaXNoZWQgYXNzZXQsIG9yIGEgUHJpbWVJY29uIGNsYXNzIG5hbWUuICovXG5leHBvcnQgdHlwZSBUb29sSWNvbiA9IHsgc3JjOiBzdHJpbmc7IHBpPzogbmV2ZXIgfSB8IHsgcGk6IHN0cmluZzsgc3JjPzogbmV2ZXIgfTtcblxuLyoqXG4gKiBBIHRvb2wgY29udHJpYnV0ZWQgdG8gdGhlIHRvb2xiYXIuXG4gKlxuICogSW1wbGVtZW50IGl0IG9uIGFuIGBASW5qZWN0YWJsZSgpYCBzZXJ2aWNlIGluIHRoZSBjb250cmlidXRpbmcgcGFja2FnZSwgc28gaXRcbiAqIGNhbiBpbmplY3QgaXRzIG93biBzZWdtZW50ZXIgYW5kIG1vZGVsIHJlZ2lzdHJ5IOKAlCB0aGlzIGxpYnJhcnkgcHJvdmlkZXNcbiAqIG5laXRoZXIgYW5kIG11c3Qgbm90IGxlYXJuIHRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xiYXJUb29sQ29udHJpYnV0aW9uIHtcbiAgLyoqIFN0YWJsZSBpZGVudGl0eSwgdXNlZCBmb3IgdHJhY2tpbmcgYW5kIHBlcnNpc3RlZCBwcmVmZXJlbmNlcy4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFNob3J0IG5hbWUsIHVzZWQgaW4gdGhlIHRvYXN0IGFuZCB0aGUgaGVscCBkaWFsb2cgaGVhZGluZy4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbjogVG9vbEljb247XG5cbiAgLyoqIFRvb2x0aXAgb24gdGhlIHJ1biBidXR0b24g4oCUIHNheSB3aGF0IGl0IGRvZXMgdG8gdGhlIGN1cnJlbnQgdmlldy4gKi9cbiAgcnVuVG9vbHRpcDogc3RyaW5nO1xuICAvKiogVG9vbHRpcCBvbiB0aGUgY2hlY2twb2ludCBwaWNrZXIuIERlZmF1bHRzIHRvIFwiUGljayB0aGUgbW9kZWxcIi4gKi9cbiAgbW9kZWxUb29sdGlwPzogc3RyaW5nO1xuICAvKiogVG9vbHRpcCBvbiB0aGUgcGFyYW1ldGVycyBidXR0b24uIERlZmF1bHRzIHRvIFwiUGFyYW1ldGVyc1wiLiAqL1xuICBwYXJhbXNUb29sdGlwPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVyZSBpdCBzaXRzIGFtb25nIHRoZSBzZWdtZW50YXRpb24gdG9vbHMuIExvd2VyIHNvcnRzIGZpcnN0OyB0aWVzIGZhbGxcbiAgICogYmFjayB0byByZWdpc3RyYXRpb24gb3JkZXIuIFRoZSBidWlsdC1pbiBwcm9tcHRlZCB0b29scyBvY2N1cHkgMC05OSwgc29cbiAgICogY29udHJpYnV0ZWQgdG9vbHMgc2hvdWxkIHN0YXJ0IGF0IDEwMCB0byBsYW5kIGFmdGVyIHRoZW0uXG4gICAqL1xuICBvcmRlcj86IG51bWJlcjtcblxuICAvKiogU2VsZWN0YWJsZSBjaGVja3BvaW50cy4gKipFbXB0eSBoaWRlcyB0aGUgdG9vbC4qKiAqL1xuICBtb2RlbHMoKTogVG9vbE1vZGVsT3B0aW9uW107XG4gIC8qKiBXaGljaCBjaGVja3BvaW50IHJ1bnMgd2hlbiB0aGUgdXNlciBoYXMgbm90IGNob3Nlbi4gKi9cbiAgZGVmYXVsdE1vZGVsSWQoKTogc3RyaW5nO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgcGlja3MgYSBjaGVja3BvaW50LCBiZWZvcmUgcGFyYW1ldGVycyBhcmUgcmUtc2VlZGVkLlxuICAgKiBVc2UgaXQgdG8gcmVjb3JkIHRoZSBjaG9pY2UgaW4gdGhlIGNvbnRyaWJ1dGluZyBwYWNrYWdlJ3Mgb3duIHJlZ2lzdHJ5LlxuICAgKi9cbiAgb25Nb2RlbENoYW5nZT8obW9kZWxJZDogc3RyaW5nKTogdm9pZDtcblxuICAvKiogUGFyYW1ldGVyIGZpZWxkcywgaW4gZGlhbG9nIG9yZGVyLiBFbXB0eSBoaWRlcyB0aGUgcGFyYW1ldGVycyBidXR0b24uICovXG4gIHBhcmFtczogVG9vbFBhcmFtU3BlY1tdO1xuICAvKipcbiAgICogQmFzZWxpbmUgcGFyYW1ldGVyIHZhbHVlcyBmb3IgYSBjaGVja3BvaW50LiBDYWxsZWQgb24gZmlyc3QgdXNlIGFuZCBhZ2FpblxuICAgKiBvbiBcIlJlc2V0IHRvIG1vZGVsIGRlZmF1bHRzXCIsIHNvIGl0IG11c3QgYmUgcHVyZSBhbmQgbXVzdCByZXR1cm4gZXZlcnkga2V5XG4gICAqIHRoZSB0b29sIHJlYWRzIOKAlCBhIHBhcmFtZXRlciB0aGUgZGlhbG9nIHNob3dzIGJ1dCB0aGlzIG9taXRzIHJlbmRlcnMgYXNcbiAgICogZW1wdHkgYW5kIHJlYWNoZXMgYHJ1bmAgYXMgdW5kZWZpbmVkLlxuICAgKi9cbiAgZGVmYXVsdFBhcmFtcyhtb2RlbElkOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogRW50cnkgZm9yIHRoZSBoZWxwIGRpYWxvZydzIHRvb2wgbGlzdC4gYGJvZHlgIGlzIHJlbmRlcmVkIGFzIEhUTUwgYW5kIG1heVxuICAgKiByZWZlcmVuY2UgcHVibGlzaGVkIGFzc2V0cyAoZS5nLiB0aGUgdG9vbCdzIG93biBpY29uKS5cbiAgICovXG4gIGhlbHA/OiB7IGJvZHk6IHN0cmluZyB9O1xuXG4gIC8qKiBQcm9ncmVzcyBzdXJmYWNlIGZvciB0aGUgdG9hc3QuICovXG4gIHByb2dyZXNzOiBUb29sUHJvZ3Jlc3M7XG5cbiAgLyoqXG4gICAqIFJ1biBvdmVyIHdoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZCwgYW5kIHdyaXRlIHdoYXRldmVyIGl0IGZpbmRzIHRocm91Z2hcbiAgICogYHZpemAuIFJlc29sdmVzIHdpdGggdGhlIG51bWJlciBvZiByZWdpb25zIGFkZGVkLlxuICAgKlxuICAgKiBFdmVyeXRoaW5nIHRoZSB0b29sIG5lZWRzIGlzIG9uIHtAbGluayBJVmlzdWFsaXplcn0sIHdoaWNoIGlzIHBhcnQgb2YgdGhpc1xuICAgKiBsaWJyYXJ5J3MgcHVibGljIHN1cmZhY2Ug4oCUIGEgY29udHJpYnV0aW9uIG5ldmVyIHJlYWNoZXMgaW50byBpbnRlcm5hbHMuXG4gICAqIFJlZ2lvbiB3cml0ZXMgZ28gdGhyb3VnaCB0aGUgc2FtZSBwYXRoIHRoZSBidWlsdC1pbiB0b29scyB1c2UsIHNvIHRoZVxuICAgKiBpbmRleC1iYXNlZCBvdmVybGF5cyBhbmQgdGhlIFJlZ2lvbnMgdGFibGUgc3RheSBjb25zaXN0ZW50LlxuICAgKi9cbiAgcnVuKHZpejogSVZpc3VhbGl6ZXIsIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPG51bWJlcj47XG59XG5cbi8qKlxuICogV2hhdCBhIGRpYWxvZyB0b29sIGdldHMgd2hpbGUgaXRzIGRpYWxvZyBpcyBvcGVuOiB0aGUgc2FtZSBzdXJmYWNlIGFcbiAqIGNvbnRyaWJ1dGVkIHBsb3QgbW9kZSBnZXRzICh0aGUgcHVibGljIHZpc3VhbGl6ZXIsIHRoZSBJbWFnZSB2aWV3J3Mgdmlld3BvcnRcbiAqIGFuZCB0aGUgY3VycmVudCBpbWFnZSksIHdpdGggdGhlIHRvb2xiYXIgdG9vbHMgYWx3YXlzIHByZXNlbnQuXG4gKi9cbmV4cG9ydCB0eXBlIFRvb2xEaWFsb2dDb250ZXh0ID0gUGxvdE1vZGVDb250ZXh0ICYgeyB0b29sczogUGxvdE1vZGVUb29scyB9O1xuXG4vKiogQSBsaXZlIGRpYWxvZy10b29sIHNlc3Npb24uIGBkZWFjdGl2YXRlKClgIHJ1bnMgZXhhY3RseSBvbmNlLCBhZnRlciB0aGUgYm9keSdzIHRlYXJkb3duLiAqL1xuZXhwb3J0IHR5cGUgVG9vbERpYWxvZ1Nlc3Npb24gPSBQbG90TW9kZVNlc3Npb247XG5cbi8qKlxuICogQSB0b29sYmFyIHRvb2wgdGhhdCBvcGVucyBhIGRpYWxvZyBpbnN0ZWFkIG9mIHJ1bm5pbmcgb25jZSAoc2VlIERJQUxPRyBUT09MU1xuICogYWJvdmUpLiBDbGlja2luZyBpdHMgYnV0dG9uIG9wZW5zIHRoZSBkaWFsb2cgYW5kIHN0YXJ0cyBhIHNlc3Npb247IGNsaWNraW5nIGl0XG4gKiBhZ2Fpbiwgb3IgY2xvc2luZyB0aGUgZGlhbG9nLCBlbmRzIGl0LlxuICpcbiAqIFRoZSBzZXNzaW9uIGlzIGJvdW5kIHRvIHRoZSBJbWFnZSB2aWV3IG9uIHNjcmVlbi4gV2hlbiB0aGF0IHZpZXcgaXMgcmUtcmVuZGVyZWRcbiAqIChhbm90aGVyIGltYWdlLCBhbm90aGVyIHNsaWNlKSB0aGUgc2Vzc2lvbiBlbmRzIGFuZCwgd2l0aCB0aGUgZGlhbG9nIHN0aWxsXG4gKiBvcGVuLCBhIGZyZXNoIG9uZSBzdGFydHMgb25jZSB0aGUgbmV3IHZpZXcgaXMgcmVhZHkuIExlYXZpbmcgdGhlIEltYWdlIHZpZXdcbiAqIGNsb3NlcyB0aGUgZGlhbG9nLiBBcyB3aXRoIHBsb3QgbW9kZXMsIG5vdGhpbmcgdGhlIHRvb2wgdGhyb3dzIG9yIHJlamVjdHNcbiAqIGVzY2FwZXM6IGEgZmFpbGVkIHN0YXJ0IGNsb3NlcyB0aGUgZGlhbG9nIHdpdGggYSB3YXJuaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xiYXJEaWFsb2dUb29sQ29udHJpYnV0aW9uIHtcbiAga2luZDogJ2RpYWxvZyc7XG4gIC8qKiBTdGFibGUgaWRlbnRpdHkuIE11c3Qgbm90IGNsYXNoIHdpdGggYW5vdGhlciB0b29sYmFyIHRvb2wuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBTaG9ydCBuYW1lOyB0aGUgZGlhbG9nIHRpdGxlIHVubGVzcyBgZGlhbG9nLnRpdGxlYCBpcyBzZXQuICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIGljb246IFRvb2xJY29uO1xuICAvKiogVG9vbHRpcCBvbiB0aGUgYnV0dG9uLiAqL1xuICB0b29sdGlwOiBzdHJpbmc7XG4gIC8qKiBPcmRlciBhbW9uZyB0aGUgZGlhbG9nIHRvb2xzLiBMb3dlciBzb3J0cyBmaXJzdDsgdGllcyBrZWVwIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgb3JkZXI/OiBudW1iZXI7XG4gIGRpYWxvZz86IHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICAvKiogQ1NTIHdpZHRoIG9mIHRoZSBkaWFsb2cuIERlZmF1bHQgYCcyMnJlbSdgLiAqL1xuICAgIHdpZHRoPzogc3RyaW5nO1xuICB9O1xuICAvKiogRW50cnkgZm9yIHRoZSBoZWxwIGRpYWxvZydzIHRvb2wgbGlzdCwgcmVuZGVyZWQgYXMgSFRNTCAodHJ1c3RlZCBjb250ZW50KS4gKi9cbiAgaGVscD86IHsgYm9keTogc3RyaW5nIH07XG4gIC8qKiBTdGFydCBhIHNlc3Npb24sIG9uY2UgdGhlIEltYWdlIHZpZXcncyB2aWV3cG9ydCBpcyByZWFkeS4gKi9cbiAgYWN0aXZhdGUoY3R4OiBUb29sRGlhbG9nQ29udGV4dCk6IFRvb2xEaWFsb2dTZXNzaW9uIHwgUHJvbWlzZTxUb29sRGlhbG9nU2Vzc2lvbj47XG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGRpYWxvZyBib2R5IGludG8gYGhvc3RgOyByZXR1cm4gaXRzIHRlYXJkb3duIChjYWxsZWQgYmVmb3JlXG4gICAqIGBkZWFjdGl2YXRlKClgKS4gQ2FsbGVkIGFmdGVyIGBhY3RpdmF0ZWAgcmVzb2x2ZXMsIG9uY2UgdGhlIGRpYWxvZyBoYXMgcmVuZGVyZWQgYW5kXG4gICAqIGBob3N0YCBpcyBpbiB0aGUgZG9jdW1lbnQsIHNvIHRoZSBib2R5IGNhbiBtZWFzdXJlIGl0c2VsZi5cbiAgICovXG4gIG1vdW50KGhvc3Q6IEhUTUxFbGVtZW50LCBjdHg6IFRvb2xEaWFsb2dDb250ZXh0LCBzZXNzaW9uOiBUb29sRGlhbG9nU2Vzc2lvbik6ICgpID0+IHZvaWQ7XG59XG5cbi8qKiBBbnl0aGluZyBwcm92aWRlZCBvbiB7QGxpbmsgVE9PTEJBUl9UT09MU30uIEEgcnVuIHRvb2wgaGFzIG5vIGBraW5kYC4gKi9cbmV4cG9ydCB0eXBlIFRvb2xiYXJDb250cmlidXRpb24gPSBUb29sYmFyVG9vbENvbnRyaWJ1dGlvbiB8IFRvb2xiYXJEaWFsb2dUb29sQ29udHJpYnV0aW9uO1xuXG4vKiogV2hldGhlciBhIGNvbnRyaWJ1dGlvbiBpcyBhIHtAbGluayBUb29sYmFyRGlhbG9nVG9vbENvbnRyaWJ1dGlvbn0uICovXG5leHBvcnQgZnVuY3Rpb24gaXNEaWFsb2dUb29sQ29udHJpYnV0aW9uKGM6IHVua25vd24pOiBjIGlzIFRvb2xiYXJEaWFsb2dUb29sQ29udHJpYnV0aW9uIHtcbiAgcmV0dXJuICEhYyAmJiAoYyBhcyB7IGtpbmQ/OiB1bmtub3duIH0pLmtpbmQgPT09ICdkaWFsb2cnO1xufVxuXG4vKipcbiAqIE11bHRpLXByb3ZpZGVyIHRva2VuIGZvciBjb250cmlidXRlZCB0b29sczogcnVuIHRvb2xzXG4gKiAoe0BsaW5rIFRvb2xiYXJUb29sQ29udHJpYnV0aW9ufSkgYW5kLCBzaW5jZSAwLjYuMCwgZGlhbG9nIHRvb2xzXG4gKiAoe0BsaW5rIFRvb2xiYXJEaWFsb2dUb29sQ29udHJpYnV0aW9ufSkuXG4gKlxuICogRGVsaWJlcmF0ZWx5IGhhcyBubyBgZmFjdG9yeWA6IHVucmVnaXN0ZXJlZCBtZWFucyBubyB0b29scywgd2hpY2ggaXMgd2hhdFxuICogbWFrZXMgdGhpcyBsaWJyYXJ5IHNoaXBwYWJsZSB3aXRob3V0IHRoZSBjbG9zZWQgbW9kZWwgcGFja2FnZXMuIEluamVjdCBpdFxuICogYHsgb3B0aW9uYWw6IHRydWUgfWAgYW5kIHRyZWF0IG51bGwgYXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBjb25zdCBUT09MQkFSX1RPT0xTID0gbmV3IEluamVjdGlvblRva2VuPHJlYWRvbmx5IFRvb2xiYXJDb250cmlidXRpb25bXT4oJ1RPT0xCQVJfVE9PTFMnKTtcblxuLyoqIFNvcnQgY29udHJpYnV0ZWQgdG9vbHMgaW50byBkaXNwbGF5IG9yZGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUb29sQ29udHJpYnV0aW9uczxUIGV4dGVuZHMgeyBvcmRlcj86IG51bWJlciB9PihcbiAgdG9vbHM6IHJlYWRvbmx5IFRbXSxcbik6IFRbXSB7XG4gIC8vIFN0YWJsZTogZXF1YWwgYG9yZGVyYCBrZWVwcyByZWdpc3RyYXRpb24gb3JkZXIsIHNvIGEgaG9zdCBjb250cm9scyB0aWVzIGJ5XG4gIC8vIHByb3ZpZGVyIG9yZGVyIHdpdGhvdXQgaGF2aW5nIHRvIGludmVudCBudW1iZXJzLlxuICByZXR1cm4gdG9vbHMubWFwKCh0LCBpKSA9PiAoeyB0LCBpIH0pKS5zb3J0KChhLCBiKSA9PlxuICAgIChhLnQub3JkZXIgPz8gMTAwKSAtIChiLnQub3JkZXIgPz8gMTAwKSB8fCBhLmkgLSBiLmksXG4gICkubWFwKCh7IHQgfSkgPT4gdCk7XG59XG5cbi8qKiBUaGUgcnVuIHRvb2xzIGEgdG9vbGJhciBzaG91bGQgYWN0dWFsbHkgc2hvdzogdGhvc2Ugd2l0aCBhdCBsZWFzdCBvbmUgbW9kZWwuXG4gKiAgRGlhbG9nIHRvb2xzIGFyZSBsZWZ0IG91dCAoc2VlIHtAbGluayBkaWFsb2dUb29sQ29udHJpYnV0aW9uc30pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpc2libGVUb29sQ29udHJpYnV0aW9ucyhcbiAgdG9vbHM6IHJlYWRvbmx5IFRvb2xiYXJDb250cmlidXRpb25bXSB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBUb29sYmFyVG9vbENvbnRyaWJ1dGlvbltdIHtcbiAgY29uc3QgcnVuID0gKHRvb2xzID8/IFtdKS5maWx0ZXIoXG4gICAgKHQpOiB0IGlzIFRvb2xiYXJUb29sQ29udHJpYnV0aW9uID0+XG4gICAgICAhaXNEaWFsb2dUb29sQ29udHJpYnV0aW9uKHQpICYmIHR5cGVvZiAodCBhcyBUb29sYmFyVG9vbENvbnRyaWJ1dGlvbik/Lm1vZGVscyA9PT0gJ2Z1bmN0aW9uJyxcbiAgKTtcbiAgcmV0dXJuIHNvcnRUb29sQ29udHJpYnV0aW9ucyhydW4pLmZpbHRlcigodCkgPT4gdC5tb2RlbHMoKS5sZW5ndGggPiAwKTtcbn1cblxuLyoqXG4gKiBUaGUgZGlhbG9nIHRvb2xzLCBpbiBkaXNwbGF5IG9yZGVyLiBBIG1hbGZvcm1lZCBvbmUgKG5vIHN0cmluZyBgaWRgLCBub1xuICogYGFjdGl2YXRlYCBvciBgbW91bnRgIGZ1bmN0aW9uKSBvciBhIHJlcGVhdGVkIGBpZGAgaXMgZHJvcHBlZCB3aXRoIGEgd2FybmluZ1xuICogcmF0aGVyIHRoYW4gYnJlYWtpbmcgdGhlIHRvb2xiYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWFsb2dUb29sQ29udHJpYnV0aW9ucyhcbiAgdG9vbHM6IHJlYWRvbmx5IFRvb2xiYXJDb250cmlidXRpb25bXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGxvZzogeyB3YXJuKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQgfSA9IGNvbnNvbGUsXG4pOiBUb29sYmFyRGlhbG9nVG9vbENvbnRyaWJ1dGlvbltdIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBvdXQ6IFRvb2xiYXJEaWFsb2dUb29sQ29udHJpYnV0aW9uW10gPSBbXTtcbiAgZm9yIChjb25zdCB0IG9mICh0b29scyA/PyBbXSkuZmlsdGVyKGlzRGlhbG9nVG9vbENvbnRyaWJ1dGlvbikpIHtcbiAgICBpZiAodHlwZW9mIHQuaWQgIT09ICdzdHJpbmcnIHx8ICF0LmlkIHx8IHR5cGVvZiB0LmFjdGl2YXRlICE9PSAnZnVuY3Rpb24nXG4gICAgICAgIHx8IHR5cGVvZiB0Lm1vdW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsb2cud2FybignW3Zpc3VhbGl6ZXJdIGRpYWxvZyB0b29sIGlnbm9yZWQ6IGl0IG5lZWRzIGEgc3RyaW5nIGBpZGAgYW5kIGBhY3RpdmF0ZWAgYW5kIGBtb3VudGAgZnVuY3Rpb25zLicsIHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChzZWVuLmhhcyh0LmlkKSkge1xuICAgICAgbG9nLndhcm4oYFt2aXN1YWxpemVyXSBkaWFsb2cgdG9vbCAnJHt0LmlkfScgaWdub3JlZDogYW5vdGhlciBkaWFsb2cgdG9vbCBhbHJlYWR5IHVzZXMgdGhhdCBpZC5gKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBzZWVuLmFkZCh0LmlkKTtcbiAgICBvdXQucHVzaCh0KTtcbiAgfVxuICByZXR1cm4gc29ydFRvb2xDb250cmlidXRpb25zKG91dCk7XG59XG4iXX0=