@bryntum/grid-angular 7.3.5 → 7.3.6

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 (93) hide show
  1. package/README.md +2 -1
  2. package/bundles/bryntum-grid-angular.umd.js +185 -99
  3. package/bundles/bryntum-grid-angular.umd.js.map +1 -1
  4. package/esm2015/lib/bryntum-button-group.component.js +5 -5
  5. package/esm2015/lib/bryntum-chat-panel.component.js +5 -5
  6. package/esm2015/lib/bryntum-checkbox-group.component.js +5 -5
  7. package/esm2015/lib/bryntum-checklist-filter-combo.component.js +1 -1
  8. package/esm2015/lib/bryntum-code-editor.component.js +5 -5
  9. package/esm2015/lib/bryntum-container.component.js +5 -5
  10. package/esm2015/lib/bryntum-date-picker.component.js +5 -5
  11. package/esm2015/lib/bryntum-date-range-field.component.js +1 -1
  12. package/esm2015/lib/bryntum-demo-code-editor.component.js +5 -5
  13. package/esm2015/lib/bryntum-editor.component.js +5 -5
  14. package/esm2015/lib/bryntum-field-filter-picker-group.component.js +5 -5
  15. package/esm2015/lib/bryntum-field-filter-picker.component.js +5 -5
  16. package/esm2015/lib/bryntum-field-set.component.js +5 -5
  17. package/esm2015/lib/bryntum-file-picker.component.js +5 -5
  18. package/esm2015/lib/bryntum-grid-base.component.js +28 -2
  19. package/esm2015/lib/bryntum-grid-field-filter-picker-group.component.js +5 -5
  20. package/esm2015/lib/bryntum-grid-field-filter-picker.component.js +5 -5
  21. package/esm2015/lib/bryntum-grid.component.js +28 -2
  22. package/esm2015/lib/bryntum-hint.component.js +5 -5
  23. package/esm2015/lib/bryntum-menu.component.js +5 -5
  24. package/esm2015/lib/bryntum-month-picker.component.js +5 -5
  25. package/esm2015/lib/bryntum-paging-toolbar.component.js +13 -5
  26. package/esm2015/lib/bryntum-panel.component.js +5 -5
  27. package/esm2015/lib/bryntum-radio-group.component.js +5 -5
  28. package/esm2015/lib/bryntum-tab-panel.component.js +5 -5
  29. package/esm2015/lib/bryntum-time-picker.component.js +5 -5
  30. package/esm2015/lib/bryntum-toolbar.component.js +5 -5
  31. package/esm2015/lib/bryntum-tree-grid.component.js +28 -2
  32. package/esm2015/lib/bryntum-year-picker.component.js +5 -5
  33. package/fesm2015/bryntum-grid-angular.js +185 -99
  34. package/fesm2015/bryntum-grid-angular.js.map +1 -1
  35. package/lib/bryntum-button-group.component.d.ts +3 -3
  36. package/lib/bryntum-chat-panel.component.d.ts +3 -3
  37. package/lib/bryntum-checkbox-group.component.d.ts +3 -3
  38. package/lib/bryntum-checklist-filter-combo.component.d.ts +1 -1
  39. package/lib/bryntum-code-editor.component.d.ts +3 -3
  40. package/lib/bryntum-container.component.d.ts +3 -3
  41. package/lib/bryntum-date-picker.component.d.ts +3 -3
  42. package/lib/bryntum-date-range-field.component.d.ts +4 -3
  43. package/lib/bryntum-demo-code-editor.component.d.ts +3 -3
  44. package/lib/bryntum-editor.component.d.ts +3 -3
  45. package/lib/bryntum-field-filter-picker-group.component.d.ts +3 -3
  46. package/lib/bryntum-field-filter-picker.component.d.ts +3 -3
  47. package/lib/bryntum-field-set.component.d.ts +3 -3
  48. package/lib/bryntum-file-picker.component.d.ts +3 -3
  49. package/lib/bryntum-grid-base.component.d.ts +19 -1
  50. package/lib/bryntum-grid-field-filter-picker-group.component.d.ts +3 -3
  51. package/lib/bryntum-grid-field-filter-picker.component.d.ts +3 -3
  52. package/lib/bryntum-grid.component.d.ts +19 -1
  53. package/lib/bryntum-hint.component.d.ts +3 -3
  54. package/lib/bryntum-menu.component.d.ts +3 -3
  55. package/lib/bryntum-month-picker.component.d.ts +3 -3
  56. package/lib/bryntum-paging-toolbar.component.d.ts +14 -3
  57. package/lib/bryntum-panel.component.d.ts +3 -3
  58. package/lib/bryntum-radio-group.component.d.ts +3 -3
  59. package/lib/bryntum-tab-panel.component.d.ts +3 -3
  60. package/lib/bryntum-time-picker.component.d.ts +3 -3
  61. package/lib/bryntum-toolbar.component.d.ts +3 -3
  62. package/lib/bryntum-tree-grid.component.d.ts +19 -1
  63. package/lib/bryntum-year-picker.component.d.ts +3 -3
  64. package/package.json +1 -1
  65. package/src/lib/bryntum-button-group.component.ts +3 -3
  66. package/src/lib/bryntum-chat-panel.component.ts +3 -3
  67. package/src/lib/bryntum-checkbox-group.component.ts +3 -3
  68. package/src/lib/bryntum-checklist-filter-combo.component.ts +1 -1
  69. package/src/lib/bryntum-code-editor.component.ts +3 -3
  70. package/src/lib/bryntum-container.component.ts +3 -3
  71. package/src/lib/bryntum-date-picker.component.ts +3 -3
  72. package/src/lib/bryntum-date-range-field.component.ts +4 -3
  73. package/src/lib/bryntum-demo-code-editor.component.ts +3 -3
  74. package/src/lib/bryntum-editor.component.ts +3 -3
  75. package/src/lib/bryntum-field-filter-picker-group.component.ts +3 -3
  76. package/src/lib/bryntum-field-filter-picker.component.ts +3 -3
  77. package/src/lib/bryntum-field-set.component.ts +3 -3
  78. package/src/lib/bryntum-file-picker.component.ts +3 -3
  79. package/src/lib/bryntum-grid-base.component.ts +31 -10
  80. package/src/lib/bryntum-grid-field-filter-picker-group.component.ts +3 -3
  81. package/src/lib/bryntum-grid-field-filter-picker.component.ts +3 -3
  82. package/src/lib/bryntum-grid.component.ts +31 -10
  83. package/src/lib/bryntum-hint.component.ts +3 -3
  84. package/src/lib/bryntum-menu.component.ts +3 -3
  85. package/src/lib/bryntum-month-picker.component.ts +3 -3
  86. package/src/lib/bryntum-paging-toolbar.component.ts +18 -3
  87. package/src/lib/bryntum-panel.component.ts +3 -3
  88. package/src/lib/bryntum-radio-group.component.ts +3 -3
  89. package/src/lib/bryntum-tab-panel.component.ts +3 -3
  90. package/src/lib/bryntum-time-picker.component.ts +3 -3
  91. package/src/lib/bryntum-toolbar.component.ts +3 -3
  92. package/src/lib/bryntum-tree-grid.component.ts +31 -10
  93. package/src/lib/bryntum-year-picker.component.ts +3 -3
@@ -753,6 +753,23 @@ export class BryntumTreeGridComponent {
753
753
  * @param {Core.widget.Widget} event.source The widget
754
754
  */
755
755
  this.onHide = new EventEmitter();
756
+ /**
757
+ * Fires when the Grid is scrolling horizontally in one of its SubGrids.
758
+ * @param {object} event Event object
759
+ * @param {Grid.view.GridBase} event.source The firing Grid instance
760
+ * @param {Grid.view.SubGrid} event.subGrid The scrolling SubGrid instance
761
+ * @param {number} event.scrollLeft The horizontal scroll position
762
+ * @param {number} event.scrollX The horizontal scroll position in the RTL-safe coordinate system
763
+ */
764
+ this.onHorizontalScroll = new EventEmitter();
765
+ /**
766
+ * Fires after the Grid is done scrolling horizontally in one of its SubGrids.
767
+ * @param {object} event Event object
768
+ * @param {Grid.view.GridBase} event.source The firing Grid instance
769
+ * @param {Grid.view.SubGrid} event.subGrid The scrolling SubGrid instance
770
+ * @param {number} [event.scrollLeft] The horizontal scroll position. Only supplied when the event follows a SubGrid resize, the scroll driven path does not report a position
771
+ */
772
+ this.onHorizontalScrollEnd = new EventEmitter();
756
773
  /**
757
774
  * Fires when row locking is enabled.
758
775
  * @param {object} event Event object
@@ -1246,6 +1263,8 @@ BryntumTreeGridComponent.bryntumEvents = [
1246
1263
  'onHeaderMenuShow',
1247
1264
  'onHeaderMenuToggleItem',
1248
1265
  'onHide',
1266
+ 'onHorizontalScroll',
1267
+ 'onHorizontalScrollEnd',
1249
1268
  'onLockRows',
1250
1269
  'onMouseOut',
1251
1270
  'onMouseOver',
@@ -1529,6 +1548,7 @@ BryntumTreeGridComponent.bryntumProps = BryntumTreeGridComponent.bryntumFeatureN
1529
1548
  'alignSelf',
1530
1549
  'animateTreeNodeToggle',
1531
1550
  'appendTo',
1551
+ 'autoUpdateRecord',
1532
1552
  'callOnFunctions',
1533
1553
  'catchEventHandlerExceptions',
1534
1554
  'cellEllipsis',
@@ -1590,7 +1610,7 @@ BryntumTreeGridComponent.bryntumProps = BryntumTreeGridComponent.bryntumFeatureN
1590
1610
  'width'
1591
1611
  ]);
1592
1612
  BryntumTreeGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumTreeGridComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1593
- BryntumTreeGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumTreeGridComponent, selector: "bryntum-tree-grid", inputs: { adopt: "adopt", animateFilterRemovals: "animateFilterRemovals", animateRemovingRows: "animateRemovingRows", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", autoHeight: "autoHeight", bbar: "bbar", bodyCls: "bodyCls", border: "border", bubbleEvents: "bubbleEvents", collapsible: "collapsible", color: "color", config: "config", contentElementCls: "contentElementCls", contextMenuTriggerEvent: "contextMenuTriggerEvent", dataField: "dataField", defaultRegion: "defaultRegion", destroyStore: "destroyStore", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", disableGridColumnIdWarning: "disableGridColumnIdWarning", disableGridRowModelWarning: "disableGridRowModelWarning", dock: "dock", drawer: "drawer", elementAttributes: "elementAttributes", enableSticky: "enableSticky", enableTextSelection: "enableTextSelection", fillLastColumn: "fillLastColumn", fixedRowHeight: "fixedRowHeight", footer: "footer", formulaProviders: "formulaProviders", fullRowRefresh: "fullRowRefresh", getRowHeight: "getRowHeight", header: "header", hideHorizontalScrollbar: "hideHorizontalScrollbar", hoverCls: "hoverCls", icon: "icon", ignoreParentReadOnly: "ignoreParentReadOnly", listeners: "listeners", loadMask: "loadMask", loadMaskDefaults: "loadMaskDefaults", loadMaskError: "loadMaskError", localizable: "localizable", maskDefaults: "maskDefaults", masked: "masked", monitorResize: "monitorResize", overflowTwinConfig: "overflowTwinConfig", plugins: "plugins", preserveFocusOnDatasetChange: "preserveFocusOnDatasetChange", preserveScrollOnDatasetChange: "preserveScrollOnDatasetChange", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", resizable: "resizable", resizeToFitIncludesHeader: "resizeToFitIncludesHeader", responsiveLevels: "responsiveLevels", ripple: "ripple", role: "role", rootElement: "rootElement", scrollerClass: "scrollerClass", scrollManager: "scrollManager", showDirty: "showDirty", stateful: "stateful", statefulEvents: "statefulEvents", stateProvider: "stateProvider", strips: "strips", subGridConfigs: "subGridConfigs", syncMask: "syncMask", tab: "tab", tabBarItems: "tabBarItems", tbar: "tbar", type: "type", ui: "ui", weight: "weight", alignSelf: "alignSelf", animateTreeNodeToggle: "animateTreeNodeToggle", appendTo: "appendTo", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cellEllipsis: "cellEllipsis", cls: "cls", collapsed: "collapsed", column: "column", columnLines: "columnLines", columns: "columns", data: "data", dataset: "dataset", disabled: "disabled", emptyText: "emptyText", enableUndoRedoKeys: "enableUndoRedoKeys", extraData: "extraData", flex: "flex", height: "height", hidden: "hidden", hideFooters: "hideFooters", hideHeaders: "hideHeaders", id: "id", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", keyMap: "keyMap", labelPosition: "labelPosition", labelWidth: "labelWidth", longPressTime: "longPressTime", margin: "margin", maxHeight: "maxHeight", maxWidth: "maxWidth", minHeight: "minHeight", minWidth: "minWidth", preserveScroll: "preserveScroll", readOnly: "readOnly", rendition: "rendition", rowHeight: "rowHeight", rowLines: "rowLines", rtl: "rtl", scrollable: "scrollable", selectionMode: "selectionMode", span: "span", stateId: "stateId", stateSettings: "stateSettings", store: "store", title: "title", tools: "tools", transition: "transition", transitionDuration: "transitionDuration", width: "width", centered: "centered", originalStore: "originalStore", parent: "parent", selectedCell: "selectedCell", selectedCells: "selectedCells", selectedRecord: "selectedRecord", selectedRecords: "selectedRecords", selectedRows: "selectedRows", state: "state", tooltip: "tooltip", aiFeature: "aiFeature", aiFilterFeature: "aiFilterFeature", cellCopyPasteFeature: "cellCopyPasteFeature", cellEditFeature: "cellEditFeature", cellMenuFeature: "cellMenuFeature", cellTooltipFeature: "cellTooltipFeature", chartsFeature: "chartsFeature", columnAutoWidthFeature: "columnAutoWidthFeature", columnDragToolbarFeature: "columnDragToolbarFeature", columnPickerFeature: "columnPickerFeature", columnRenameFeature: "columnRenameFeature", columnReorderFeature: "columnReorderFeature", columnResizeFeature: "columnResizeFeature", excelExporterFeature: "excelExporterFeature", fileDropFeature: "fileDropFeature", fillHandleFeature: "fillHandleFeature", filterFeature: "filterFeature", filterBarFeature: "filterBarFeature", groupFeature: "groupFeature", groupSummaryFeature: "groupSummaryFeature", headerMenuFeature: "headerMenuFeature", lockRowsFeature: "lockRowsFeature", mergeCellsFeature: "mergeCellsFeature", pdfExportFeature: "pdfExportFeature", pinColumnsFeature: "pinColumnsFeature", printFeature: "printFeature", quickFindFeature: "quickFindFeature", regionResizeFeature: "regionResizeFeature", rowCopyPasteFeature: "rowCopyPasteFeature", rowEditFeature: "rowEditFeature", rowExpanderFeature: "rowExpanderFeature", rowReorderFeature: "rowReorderFeature", rowResizeFeature: "rowResizeFeature", searchFeature: "searchFeature", sortFeature: "sortFeature", splitFeature: "splitFeature", stickyCellsFeature: "stickyCellsFeature", stripeFeature: "stripeFeature", summaryFeature: "summaryFeature", treeFeature: "treeFeature", treeGroupFeature: "treeGroupFeature" }, outputs: { onBeforeCancelCellEdit: "onBeforeCancelCellEdit", onBeforeCancelRowEdit: "onBeforeCancelRowEdit", onBeforeCellEditStart: "onBeforeCellEditStart", onBeforeCellRangeDelete: "onBeforeCellRangeDelete", onBeforeCellRangeEdit: "onBeforeCellRangeEdit", onBeforeColumnCollapseToggle: "onBeforeColumnCollapseToggle", onBeforeColumnDragStart: "onBeforeColumnDragStart", onBeforeColumnDropFinalize: "onBeforeColumnDropFinalize", onBeforeColumnResize: "onBeforeColumnResize", onBeforeCopy: "onBeforeCopy", onBeforeCSVExport: "onBeforeCSVExport", onBeforeDestroy: "onBeforeDestroy", onBeforeExcelExport: "onBeforeExcelExport", onBeforeFillHandleDragStart: "onBeforeFillHandleDragStart", onBeforeFinishCellEdit: "onBeforeFinishCellEdit", onBeforeFinishRowEdit: "onBeforeFinishRowEdit", onBeforeHide: "onBeforeHide", onBeforePaste: "onBeforePaste", onBeforePdfExport: "onBeforePdfExport", onBeforeRenderRow: "onBeforeRenderRow", onBeforeRenderRows: "onBeforeRenderRows", onBeforeRowCollapse: "onBeforeRowCollapse", onBeforeRowExpand: "onBeforeRowExpand", onBeforeSelectionChange: "onBeforeSelectionChange", onBeforeSetRecord: "onBeforeSetRecord", onBeforeShow: "onBeforeShow", onBeforeStartRowEdit: "onBeforeStartRowEdit", onBeforeStateApply: "onBeforeStateApply", onBeforeStateSave: "onBeforeStateSave", onBeforeToggleGroup: "onBeforeToggleGroup", onBeforeToggleNode: "onBeforeToggleNode", onCancelCellEdit: "onCancelCellEdit", onCatchAll: "onCatchAll", onCellClick: "onCellClick", onCellContextMenu: "onCellContextMenu", onCellDblClick: "onCellDblClick", onCellMenuBeforeShow: "onCellMenuBeforeShow", onCellMenuItem: "onCellMenuItem", onCellMenuShow: "onCellMenuShow", onCellMenuToggleItem: "onCellMenuToggleItem", onCellMouseEnter: "onCellMouseEnter", onCellMouseLeave: "onCellMouseLeave", onCellMouseOut: "onCellMouseOut", onCellMouseOver: "onCellMouseOver", onCollapse: "onCollapse", onCollapseNode: "onCollapseNode", onColumnCollapseToggle: "onColumnCollapseToggle", onColumnDrag: "onColumnDrag", onColumnDragStart: "onColumnDragStart", onColumnDrop: "onColumnDrop", onColumnResize: "onColumnResize", onColumnResizeStart: "onColumnResizeStart", onContextMenuItem: "onContextMenuItem", onContextMenuToggleItem: "onContextMenuToggleItem", onCopy: "onCopy", onDataChange: "onDataChange", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onDragSelecting: "onDragSelecting", onElementCreated: "onElementCreated", onExpand: "onExpand", onExpandNode: "onExpandNode", onFileDrop: "onFileDrop", onFillHandleBeforeDragFinalize: "onFillHandleBeforeDragFinalize", onFillHandleDrag: "onFillHandleDrag", onFillHandleDragAbort: "onFillHandleDragAbort", onFillHandleDragEnd: "onFillHandleDragEnd", onFillHandleDragStart: "onFillHandleDragStart", onFinishCellEdit: "onFinishCellEdit", onFinishRowEdit: "onFinishRowEdit", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onGridRowBeforeDragStart: "onGridRowBeforeDragStart", onGridRowBeforeDropFinalize: "onGridRowBeforeDropFinalize", onGridRowDrag: "onGridRowDrag", onGridRowDragAbort: "onGridRowDragAbort", onGridRowDragStart: "onGridRowDragStart", onGridRowDrop: "onGridRowDrop", onHeaderClick: "onHeaderClick", onHeaderMenuBeforeShow: "onHeaderMenuBeforeShow", onHeaderMenuItem: "onHeaderMenuItem", onHeaderMenuShow: "onHeaderMenuShow", onHeaderMenuToggleItem: "onHeaderMenuToggleItem", onHide: "onHide", onLockRows: "onLockRows", onMouseOut: "onMouseOut", onMouseOver: "onMouseOver", onPaint: "onPaint", onPaste: "onPaste", onPdfExport: "onPdfExport", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onRenderRow: "onRenderRow", onRenderRows: "onRenderRows", onResize: "onResize", onResponsive: "onResponsive", onRowCollapse: "onRowCollapse", onRowExpand: "onRowExpand", onRowMouseEnter: "onRowMouseEnter", onRowMouseLeave: "onRowMouseLeave", onScroll: "onScroll", onSelectionChange: "onSelectionChange", onSelectionModeChange: "onSelectionModeChange", onShow: "onShow", onSplit: "onSplit", onSplitterCollapseClick: "onSplitterCollapseClick", onSplitterDragEnd: "onSplitterDragEnd", onSplitterDragStart: "onSplitterDragStart", onSplitterExpandClick: "onSplitterExpandClick", onStartCellEdit: "onStartCellEdit", onStartRowEdit: "onStartRowEdit", onSubGridCollapse: "onSubGridCollapse", onSubGridExpand: "onSubGridExpand", onToggleGroup: "onToggleGroup", onToggleNode: "onToggleNode", onToolClick: "onToolClick", onTreeGroup: "onTreeGroup", onUnlockRows: "onUnlockRows", onUnsplit: "onUnsplit" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
1613
+ BryntumTreeGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumTreeGridComponent, selector: "bryntum-tree-grid", inputs: { adopt: "adopt", animateFilterRemovals: "animateFilterRemovals", animateRemovingRows: "animateRemovingRows", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", autoHeight: "autoHeight", bbar: "bbar", bodyCls: "bodyCls", border: "border", bubbleEvents: "bubbleEvents", collapsible: "collapsible", color: "color", config: "config", contentElementCls: "contentElementCls", contextMenuTriggerEvent: "contextMenuTriggerEvent", dataField: "dataField", defaultRegion: "defaultRegion", destroyStore: "destroyStore", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", disableGridColumnIdWarning: "disableGridColumnIdWarning", disableGridRowModelWarning: "disableGridRowModelWarning", dock: "dock", drawer: "drawer", elementAttributes: "elementAttributes", enableSticky: "enableSticky", enableTextSelection: "enableTextSelection", fillLastColumn: "fillLastColumn", fixedRowHeight: "fixedRowHeight", footer: "footer", formulaProviders: "formulaProviders", fullRowRefresh: "fullRowRefresh", getRowHeight: "getRowHeight", header: "header", hideHorizontalScrollbar: "hideHorizontalScrollbar", hoverCls: "hoverCls", icon: "icon", ignoreParentReadOnly: "ignoreParentReadOnly", listeners: "listeners", loadMask: "loadMask", loadMaskDefaults: "loadMaskDefaults", loadMaskError: "loadMaskError", localizable: "localizable", maskDefaults: "maskDefaults", masked: "masked", monitorResize: "monitorResize", overflowTwinConfig: "overflowTwinConfig", plugins: "plugins", preserveFocusOnDatasetChange: "preserveFocusOnDatasetChange", preserveScrollOnDatasetChange: "preserveScrollOnDatasetChange", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", resizable: "resizable", resizeToFitIncludesHeader: "resizeToFitIncludesHeader", responsiveLevels: "responsiveLevels", ripple: "ripple", role: "role", rootElement: "rootElement", scrollerClass: "scrollerClass", scrollManager: "scrollManager", showDirty: "showDirty", stateful: "stateful", statefulEvents: "statefulEvents", stateProvider: "stateProvider", strips: "strips", subGridConfigs: "subGridConfigs", syncMask: "syncMask", tab: "tab", tabBarItems: "tabBarItems", tbar: "tbar", type: "type", ui: "ui", weight: "weight", alignSelf: "alignSelf", animateTreeNodeToggle: "animateTreeNodeToggle", appendTo: "appendTo", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cellEllipsis: "cellEllipsis", cls: "cls", collapsed: "collapsed", column: "column", columnLines: "columnLines", columns: "columns", data: "data", dataset: "dataset", disabled: "disabled", emptyText: "emptyText", enableUndoRedoKeys: "enableUndoRedoKeys", extraData: "extraData", flex: "flex", height: "height", hidden: "hidden", hideFooters: "hideFooters", hideHeaders: "hideHeaders", id: "id", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", keyMap: "keyMap", labelPosition: "labelPosition", labelWidth: "labelWidth", longPressTime: "longPressTime", margin: "margin", maxHeight: "maxHeight", maxWidth: "maxWidth", minHeight: "minHeight", minWidth: "minWidth", preserveScroll: "preserveScroll", readOnly: "readOnly", rendition: "rendition", rowHeight: "rowHeight", rowLines: "rowLines", rtl: "rtl", scrollable: "scrollable", selectionMode: "selectionMode", span: "span", stateId: "stateId", stateSettings: "stateSettings", store: "store", title: "title", tools: "tools", transition: "transition", transitionDuration: "transitionDuration", width: "width", autoUpdateRecord: "autoUpdateRecord", centered: "centered", originalStore: "originalStore", parent: "parent", selectedCell: "selectedCell", selectedCells: "selectedCells", selectedRecord: "selectedRecord", selectedRecords: "selectedRecords", selectedRows: "selectedRows", state: "state", tooltip: "tooltip", aiFeature: "aiFeature", aiFilterFeature: "aiFilterFeature", cellCopyPasteFeature: "cellCopyPasteFeature", cellEditFeature: "cellEditFeature", cellMenuFeature: "cellMenuFeature", cellTooltipFeature: "cellTooltipFeature", chartsFeature: "chartsFeature", columnAutoWidthFeature: "columnAutoWidthFeature", columnDragToolbarFeature: "columnDragToolbarFeature", columnPickerFeature: "columnPickerFeature", columnRenameFeature: "columnRenameFeature", columnReorderFeature: "columnReorderFeature", columnResizeFeature: "columnResizeFeature", excelExporterFeature: "excelExporterFeature", fileDropFeature: "fileDropFeature", fillHandleFeature: "fillHandleFeature", filterFeature: "filterFeature", filterBarFeature: "filterBarFeature", groupFeature: "groupFeature", groupSummaryFeature: "groupSummaryFeature", headerMenuFeature: "headerMenuFeature", lockRowsFeature: "lockRowsFeature", mergeCellsFeature: "mergeCellsFeature", pdfExportFeature: "pdfExportFeature", pinColumnsFeature: "pinColumnsFeature", printFeature: "printFeature", quickFindFeature: "quickFindFeature", regionResizeFeature: "regionResizeFeature", rowCopyPasteFeature: "rowCopyPasteFeature", rowEditFeature: "rowEditFeature", rowExpanderFeature: "rowExpanderFeature", rowReorderFeature: "rowReorderFeature", rowResizeFeature: "rowResizeFeature", searchFeature: "searchFeature", sortFeature: "sortFeature", splitFeature: "splitFeature", stickyCellsFeature: "stickyCellsFeature", stripeFeature: "stripeFeature", summaryFeature: "summaryFeature", treeFeature: "treeFeature", treeGroupFeature: "treeGroupFeature" }, outputs: { onBeforeCancelCellEdit: "onBeforeCancelCellEdit", onBeforeCancelRowEdit: "onBeforeCancelRowEdit", onBeforeCellEditStart: "onBeforeCellEditStart", onBeforeCellRangeDelete: "onBeforeCellRangeDelete", onBeforeCellRangeEdit: "onBeforeCellRangeEdit", onBeforeColumnCollapseToggle: "onBeforeColumnCollapseToggle", onBeforeColumnDragStart: "onBeforeColumnDragStart", onBeforeColumnDropFinalize: "onBeforeColumnDropFinalize", onBeforeColumnResize: "onBeforeColumnResize", onBeforeCopy: "onBeforeCopy", onBeforeCSVExport: "onBeforeCSVExport", onBeforeDestroy: "onBeforeDestroy", onBeforeExcelExport: "onBeforeExcelExport", onBeforeFillHandleDragStart: "onBeforeFillHandleDragStart", onBeforeFinishCellEdit: "onBeforeFinishCellEdit", onBeforeFinishRowEdit: "onBeforeFinishRowEdit", onBeforeHide: "onBeforeHide", onBeforePaste: "onBeforePaste", onBeforePdfExport: "onBeforePdfExport", onBeforeRenderRow: "onBeforeRenderRow", onBeforeRenderRows: "onBeforeRenderRows", onBeforeRowCollapse: "onBeforeRowCollapse", onBeforeRowExpand: "onBeforeRowExpand", onBeforeSelectionChange: "onBeforeSelectionChange", onBeforeSetRecord: "onBeforeSetRecord", onBeforeShow: "onBeforeShow", onBeforeStartRowEdit: "onBeforeStartRowEdit", onBeforeStateApply: "onBeforeStateApply", onBeforeStateSave: "onBeforeStateSave", onBeforeToggleGroup: "onBeforeToggleGroup", onBeforeToggleNode: "onBeforeToggleNode", onCancelCellEdit: "onCancelCellEdit", onCatchAll: "onCatchAll", onCellClick: "onCellClick", onCellContextMenu: "onCellContextMenu", onCellDblClick: "onCellDblClick", onCellMenuBeforeShow: "onCellMenuBeforeShow", onCellMenuItem: "onCellMenuItem", onCellMenuShow: "onCellMenuShow", onCellMenuToggleItem: "onCellMenuToggleItem", onCellMouseEnter: "onCellMouseEnter", onCellMouseLeave: "onCellMouseLeave", onCellMouseOut: "onCellMouseOut", onCellMouseOver: "onCellMouseOver", onCollapse: "onCollapse", onCollapseNode: "onCollapseNode", onColumnCollapseToggle: "onColumnCollapseToggle", onColumnDrag: "onColumnDrag", onColumnDragStart: "onColumnDragStart", onColumnDrop: "onColumnDrop", onColumnResize: "onColumnResize", onColumnResizeStart: "onColumnResizeStart", onContextMenuItem: "onContextMenuItem", onContextMenuToggleItem: "onContextMenuToggleItem", onCopy: "onCopy", onDataChange: "onDataChange", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onDragSelecting: "onDragSelecting", onElementCreated: "onElementCreated", onExpand: "onExpand", onExpandNode: "onExpandNode", onFileDrop: "onFileDrop", onFillHandleBeforeDragFinalize: "onFillHandleBeforeDragFinalize", onFillHandleDrag: "onFillHandleDrag", onFillHandleDragAbort: "onFillHandleDragAbort", onFillHandleDragEnd: "onFillHandleDragEnd", onFillHandleDragStart: "onFillHandleDragStart", onFinishCellEdit: "onFinishCellEdit", onFinishRowEdit: "onFinishRowEdit", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onGridRowBeforeDragStart: "onGridRowBeforeDragStart", onGridRowBeforeDropFinalize: "onGridRowBeforeDropFinalize", onGridRowDrag: "onGridRowDrag", onGridRowDragAbort: "onGridRowDragAbort", onGridRowDragStart: "onGridRowDragStart", onGridRowDrop: "onGridRowDrop", onHeaderClick: "onHeaderClick", onHeaderMenuBeforeShow: "onHeaderMenuBeforeShow", onHeaderMenuItem: "onHeaderMenuItem", onHeaderMenuShow: "onHeaderMenuShow", onHeaderMenuToggleItem: "onHeaderMenuToggleItem", onHide: "onHide", onHorizontalScroll: "onHorizontalScroll", onHorizontalScrollEnd: "onHorizontalScrollEnd", onLockRows: "onLockRows", onMouseOut: "onMouseOut", onMouseOver: "onMouseOver", onPaint: "onPaint", onPaste: "onPaste", onPdfExport: "onPdfExport", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onRenderRow: "onRenderRow", onRenderRows: "onRenderRows", onResize: "onResize", onResponsive: "onResponsive", onRowCollapse: "onRowCollapse", onRowExpand: "onRowExpand", onRowMouseEnter: "onRowMouseEnter", onRowMouseLeave: "onRowMouseLeave", onScroll: "onScroll", onSelectionChange: "onSelectionChange", onSelectionModeChange: "onSelectionModeChange", onShow: "onShow", onSplit: "onSplit", onSplitterCollapseClick: "onSplitterCollapseClick", onSplitterDragEnd: "onSplitterDragEnd", onSplitterDragStart: "onSplitterDragStart", onSplitterExpandClick: "onSplitterExpandClick", onStartCellEdit: "onStartCellEdit", onStartRowEdit: "onStartRowEdit", onSubGridCollapse: "onSubGridCollapse", onSubGridExpand: "onSubGridExpand", onToggleGroup: "onToggleGroup", onToggleNode: "onToggleNode", onToolClick: "onToolClick", onTreeGroup: "onTreeGroup", onUnlockRows: "onUnlockRows", onUnsplit: "onUnsplit" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
1594
1614
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumTreeGridComponent, decorators: [{
1595
1615
  type: Component,
1596
1616
  args: [{
@@ -1845,6 +1865,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImpor
1845
1865
  type: Input
1846
1866
  }], width: [{
1847
1867
  type: Input
1868
+ }], autoUpdateRecord: [{
1869
+ type: Input
1848
1870
  }], centered: [{
1849
1871
  type: Input
1850
1872
  }], originalStore: [{
@@ -2115,6 +2137,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImpor
2115
2137
  type: Output
2116
2138
  }], onHide: [{
2117
2139
  type: Output
2140
+ }], onHorizontalScroll: [{
2141
+ type: Output
2142
+ }], onHorizontalScrollEnd: [{
2143
+ type: Output
2118
2144
  }], onLockRows: [{
2119
2145
  type: Output
2120
2146
  }], onMouseOut: [{
@@ -2186,4 +2212,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImpor
2186
2212
  }], onUnsplit: [{
2187
2213
  type: Output
2188
2214
  }] } });
2189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS10cmVlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS10cmVlLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBMjRELFFBQVEsRUFBaUQsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXAvRCxPQUFPLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQTg4QjVELE1BQU0sT0FBTyx3QkFBd0I7SUFtY2pDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUEwTUYsa0JBQWtCO1FBQ2xCOzs7OztXQUtHO1FBQ08sMkJBQXNCLEdBQVEsSUFBSSxZQUFZLEVBQW1GLENBQUM7UUFDNUk7Ozs7OztXQU1HO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQXNHLENBQUM7UUFDOUo7Ozs7O1dBS0c7UUFDTywwQkFBcUIsR0FBUSxJQUFJLFlBQVksRUFBd0YsQ0FBQztRQUNoSjs7Ozs7O1dBTUc7UUFDTyw0QkFBdUIsR0FBUSxJQUFJLFlBQVksRUFBNkYsQ0FBQztRQUN2Sjs7Ozs7O1dBTUc7UUFDTywwQkFBcUIsR0FBUSxJQUFJLFlB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VUcsUUFBUTtzQkFBakIsTUFBTTtnQkFVRyxZQUFZO3NCQUFyQixNQUFNO2dCQU1HLGFBQWE7c0JBQXRCLE1BQU07Z0JBVUcsV0FBVztzQkFBcEIsTUFBTTtnQkFVRyxlQUFlO3NCQUF4QixNQUFNO2dCQVNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBT0csUUFBUTtzQkFBakIsTUFBTTtnQkFjRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBTUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQU1HLE1BQU07c0JBQWYsTUFBTTtnQkFVRyxPQUFPO3NCQUFoQixNQUFNO2dCQVNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFRRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBUUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQVNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFPRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU9HLGVBQWU7c0JBQXhCLE1BQU07Z0JBU0csYUFBYTtzQkFBdEIsTUFBTTtnQkFPRyxZQUFZO3NCQUFyQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBUUcsV0FBVztzQkFBcEIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQUlHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIFRyZWVHcmlkXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IFdyYXBwZXJIZWxwZXIgZnJvbSAnLi93cmFwcGVyLmhlbHBlcic7XG5cbmltcG9ydCB7IEFJLCBBSUNvbmZpZywgQUlGaWx0ZXIsIEFJRmlsdGVyQ29uZmlnLCBBamF4U3RvcmUsIEFqYXhTdG9yZUNvbmZpZywgQmFzZSwgQ2VsbENvcHlQYXN0ZSwgQ2VsbENvcHlQYXN0ZUNvbmZpZywgQ2VsbEVkaXQsIENlbGxFZGl0Q29uZmlnLCBDZWxsRWRpdG9yQ29udGV4dCwgQ2VsbE1lbnUsIENlbGxNZW51Q29uZmlnLCBDZWxsVG9vbHRpcCwgQ2VsbFRvb2x0aXBDb25maWcsIENoYXJ0cywgQ2hhcnRzQ29uZmlnLCBDb2xvciwgQ29sdW1uLCBDb2x1bW5BdXRvV2lkdGgsIENvbHVtbkF1dG9XaWR0aENvbmZpZywgQ29sdW1uRHJhZ1Rvb2xiYXIsIENvbHVtbkRyYWdUb29sYmFyQ29uZmlnLCBDb2x1bW5QaWNrZXIsIENvbHVtblBpY2tlckNvbmZpZywgQ29sdW1uUmVuYW1lLCBDb2x1bW5SZW5hbWVDb25maWcsIENvbHVtblJlb3JkZXIsIENvbHVtblJlb3JkZXJDb25maWcsIENvbHVtblJlc2l6ZSwgQ29sdW1uUmVzaXplQ29uZmlnLCBDb2x1bW5TdG9yZSwgQ29sdW1uU3RvcmVDb25maWcsIENvbnRhaW5lciwgQ29udGFpbmVySXRlbUNvbmZpZywgRG9tQ29uZmlnLCBFbXB0eVRleHREb21Db25maWcsIEV4Y2VsRXhwb3J0ZXIsIEV4Y2VsRXhwb3J0ZXJDb25maWcsIEV4cG9ydENvbmZpZywgRmlsZURyb3AsIEZpbGVEcm9wQ29uZmlnLCBGaWxsSGFuZGxlLCBGaWxsSGFuZGxlQ29uZmlnLCBGaWx0ZXIsIEZpbHRlckJhciwgRmlsdGVyQmFyQ29uZmlnLCBGaWx0ZXJDb25maWcsIEZvcm11bGFQcm92aWRlckNvbmZpZywgR3JpZCwgR3JpZEJhc2UsIEdyaWRDb2x1bW5Db25maWcsIEdyaWRMb2NhdGlvbiwgR3JpZExvY2F0aW9uQ29uZmlnLCBHcmlkU2VsZWN0aW9uTW9kZSwgR3JpZFN0YXRlSW5mbywgR3JvdXAsIEdyb3VwQ29uZmlnLCBHcm91cFN1bW1hcnksIEdyb3VwU3VtbWFyeUNvbmZpZywgSGVhZGVyTWVudSwgSGVhZGVyTWVudUNvbmZpZywgSW5zdGFuY2VQbHVnaW4sIEtleU1hcENvbmZpZywgTG9ja1Jvd3MsIExvY2tSb3dzQ29uZmlnLCBNYXNrLCBNYXNrQ29uZmlnLCBNZW51LCBNZW51SXRlbSwgTWVudUl0ZW1FbnRyeSwgTWVyZ2VDZWxscywgTWVyZ2VDZWxsc0NvbmZpZywgTW9kZWwsIE1vZGVsQ29uZmlnLCBPdmVyZmxvd1R3aW5Db25maWcsIFBhZ2luZ1Rvb2xiYXJDb25maWcsIFBhbmVsLCBQYW5lbENvbGxhcHNlckNvbmZpZywgUGFuZWxDb2xsYXBzZXJPdmVybGF5Q29uZmlnLCBQYW5lbEhlYWRlciwgUGRmRXhwb3J0LCBQZGZFeHBvcnRDb25maWcsIFBpbkNvbHVtbnMsIFBpbkNvbHVtbnNDb25maWcsIFByZXNlcnZlU2Nyb2xsT3B0aW9ucywgUHJpbnQsIFByaW50Q29uZmlnLCBRdWlja0ZpbmQsIFF1aWNrRmluZENvbmZpZywgUmVjb3JkUG9zaXRpb25Db250ZXh0LCBSZWdpb25SZXNpemUsIFJlZ2lvblJlc2l6ZUNvbmZpZywgUmVzcG9uc2l2ZUxldmVsQ29uZmlnLCBSb3csIFJvd0NvcHlQYXN0ZSwgUm93Q29weVBhc3RlQ29uZmlnLCBSb3dFZGl0LCBSb3dFZGl0Q29uZmlnLCBSb3dFZGl0b3JDb250ZXh0LCBSb3dFeHBhbmRlciwgUm93RXhwYW5kZXJDb25maWcsIFJvd1Jlb3JkZXIsIFJvd1Jlb3JkZXJDb25maWcsIFJvd1Jlc2l6ZSwgUm93UmVzaXplQ29uZmlnLCBTY3JvbGxNYW5hZ2VyLCBTY3JvbGxNYW5hZ2VyQ29uZmlnLCBTY3JvbGxlciwgU2Nyb2xsZXJDb25maWcsIFNlYXJjaCwgU2VhcmNoQ29uZmlnLCBTb3J0LCBTb3J0Q29uZmlnLCBTcGxpdCwgU3BsaXRDb25maWcsIFN0YXRlUHJvdmlkZXIsIFN0aWNreUNlbGxzLCBTdGlja3lDZWxsc0NvbmZpZywgU3RvcmUsIFN0b3JlQ29uZmlnLCBTdHJpcGUsIFN0cmlwZUNvbmZpZywgU3ViR3JpZCwgU3ViR3JpZENvbmZpZywgU3VtbWFyeSwgU3VtbWFyeUNvbmZpZywgVGFiQ29uZmlnLCBUb29sLCBUb29sQ29uZmlnLCBUb29sYmFyQ29uZmlnLCBUb29sYmFySXRlbXMsIFRvb2x0aXBDb25maWcsIFRyZWUsIFRyZWVDb25maWcsIFRyZWVHcmlkLCBUcmVlR3JpZExpc3RlbmVycywgVHJlZUdyb3VwLCBUcmVlR3JvdXBDb25maWcsIFdpZGdldCwgWExTQ29sdW1uIH0gZnJvbSAnQGJyeW50dW0vZ3JpZCc7XG5cbmltcG9ydCB7IERvbUhlbHBlciwgU3RyaW5nSGVscGVyIH0gZnJvbSAnQGJyeW50dW0vZ3JpZCc7XG5pbXBvcnQgeyBpbml0VGhlbWVJblNoYWRvd1Jvb3RzIH0gZnJvbSAnLi9zaGFkb3dkb20uaGVscGVyJztcblxuZXhwb3J0IHR5cGUgQnJ5bnR1bVRyZWVHcmlkUHJvcHMgPSB7XG4gICAgLy8gQ29uZmlnc1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFkb3B0IGFzIHRoaXMgV2lkZ2V0J3MgZW5jYXBzdWxhdGluZyBlbGVtZW50LiBUaGUgd2lkZ2V0J3NcbiAgICAgKiBjb250ZW50IHdpbGwgYmUgcGxhY2VkIGluc2lkZSB0aGlzIGVsZW1lbnQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWFkb3B0KVxuICAgICAqL1xuICAgIGFkb3B0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2FsaWduLXNlbGZdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9hbGlnbi1zZWxmKSBzdHlsZS5cbiAgICAgKi9cbiAgICBhbGlnblNlbGYgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYW5pbWF0ZSByb3cgcmVtb3ZhbHMgY2F1c2VkIGJ5IGZpbHRlcmluZy5cbiAgICAgKiBAZGVwcmVjYXRlZCA3LjAuMCBEZXByZWNhdGVkIGBhbmltYXRlRmlsdGVyUmVtb3ZhbHNgLiBVc2UgYHRyYW5zaXRpb24uZmlsdGVyUmVtb3ZhbGAgaW5zdGVhZFxuICAgICAqL1xuICAgIGFuaW1hdGVGaWx0ZXJSZW1vdmFscyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIGlmIHJlbW92aW5nIGFuZCBpbnNlcnRpbmcgcm93cyBzaG91bGQgYmUgYW5pbWF0ZWQuIFNldCB0byBgZmFsc2VgIHRvIHByZXZlbnQgdGhvc2UgYW5pbWF0aW9ucyxcbiAgICAgKiByZW1vdmluZyB0aGUgcmVsYXRlZCBkZWxheXMuXG4gICAgICogQGRlcHJlY2F0ZWQgNy4wLjAgRGVwcmVjYXRlZCBgYW5pbWF0ZVJlbW92aW5nUm93c2AuIFVzZSBgdHJhbnNpdGlvbi5yZW1vdmVSZWNvcmRgIGluc3RlYWRcbiAgICAgKi9cbiAgICBhbmltYXRlUmVtb3ZpbmdSb3dzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGUgW1RyZWVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvVHJlZSkgZmVhdHVyZSBpcyBpbiB1c2UgYW5kIHRoZSBTdG9yZSBpcyBhIHRyZWUgc3RvcmUsIHRoaXNcbiAgICAgKiBjb25maWcgbWF5IGJlIHNldCB0byBgdHJ1ZWAgdG8gdmlzdWFsbHkgYW5pbWF0ZSBicmFuY2ggbm9kZSBleHBhbmQgYW5kIGNvbGxhcHNlIG9wZXJhdGlvbnMuXG4gICAgICogKlRoaXMgaXMgbm90IHN1cHBvcnRlZCBpbiBTY2hlZHVsZXIgYW5kIEdhbnR0KlxuICAgICAqIEBkZXByZWNhdGVkIDcuMC4wIERlcHJlY2F0ZWQgYGFuaW1hdGVUcmVlTm9kZVRvZ2dsZWAuIFVzZSBgdHJhbnNpdGlvbi50b2dnbGVUcmVlTm9kZWAgaW5zdGVhZFxuICAgICAqL1xuICAgIGFuaW1hdGVUcmVlTm9kZVRvZ2dsZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIHRoZSBpZCBvZiBhbiBlbGVtZW50KSB0byBhcHBlbmQgdGhpcyB3aWRnZXQncyBlbGVtZW50IHRvLiBDYW4gYmUgY29uZmlndXJlZCwgb3Igc2V0IG9uY2UgYXRcbiAgICAgKiBydW50aW1lLiBUbyBhY2Nlc3MgdGhlIGVsZW1lbnQgb2YgYSByZW5kZXJlZCB3aWRnZXQsIHNlZSBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KS5cbiAgICAgKiA8ZGl2IGNsYXNzPVwibm90ZVwiPldoZW4gY3JlYXRpbmcgbmVzdGVkIHRyZWVzIG9mIHdpZGdldHMsIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0aGUgb3V0ZXJtb3N0IHdpZGdldC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctYXBwZW5kVG8pXG4gICAgICovXG4gICAgYXBwZW5kVG8gPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgbG9jYWxpemFibGUgc3RyaW5nIChNYXkgY29udGFpbiBgJ0x7fSdgIHRva2VucyB3aGljaCByZXNvbHZlIGluIHRoZSBsb2NhbGUgZmlsZSkgdG8gaW5qZWN0XG4gICAgICogaW50byBhbiBlbGVtZW50IHdoaWNoIHdpbGwgYmUgbGlua2VkIHVzaW5nIHRoZSBgYXJpYS1kZXNjcmliZWRieWAgYXR0cmlidXRlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1hcmlhRGVzY3JpcHRpb24pXG4gICAgICovXG4gICAgYXJpYURlc2NyaXB0aW9uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdCBhc1xuICAgICAqIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1hcmlhTGFiZWwpXG4gICAgICovXG4gICAgYXJpYUxhYmVsID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBdXRvbWF0aWNhbGx5IHNldCBncmlkcyBoZWlnaHQgdG8gZml0IGFsbCByb3dzIChubyBzY3JvbGxpbmcgaW4gdGhlIGdyaWQpLiBJbiBnZW5lcmFsIHlvdSBzaG91bGQgYXZvaWRcbiAgICAgKiB1c2luZyBgYXV0b0hlaWdodDogdHJ1ZWAsIHNpbmNlIGl0IHdpbGwgYnlwYXNzIEdyaWRzIHZpcnR1YWwgcmVuZGVyaW5nIGFuZCByZW5kZXIgYWxsIHJvd3MgYXQgb25jZSwgd2hpY2hcbiAgICAgKiBpbiBhIGxhcmdlciBncmlkIGlzIHJlYWxseSBiYWQgZm9yIHBlcmZvcm1hbmNlLlxuICAgICAqL1xuICAgIGF1dG9IZWlnaHQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIENvbmZpZyBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgW1Rvb2xiYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci4gQW5vdGhlciB3YXkgdG8gYWRkIGEgYmJhciBpcyB0byB1c2UgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1iYmFyKVxuICAgICAqL1xuICAgIGJiYXIgPyA6IChDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gdGhlIHBhbmVsJ3MgYm9keSBlbGVtZW50LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1ib2R5Q2xzKVxuICAgICAqL1xuICAgIGJvZHlDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgYHRydWVgIHRvIGFkZCBhIGJvcmRlciB0byB0aGlzIGNvbnRhaW5lcidzIGVsZW1lbnQuXG4gICAgICovXG4gICAgYm9yZGVyID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdoZXJlIHByb3BlcnR5IG5hbWVzIHdpdGggYSB0cnV0aHkgdmFsdWUgaW5kaWNhdGUgd2hpY2ggZXZlbnRzIHNob3VsZCBidWJibGUgdXAgdGhlIG93bmVyc2hpcFxuICAgICAqIGhpZXJhcmNoeSB3aGVuIHRyaWdnZXJlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctYnViYmxlRXZlbnRzKVxuICAgICAqL1xuICAgIGJ1YmJsZUV2ZW50cyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IGNhbGwgb25YWFggbWV0aG9kIG5hbWVzIChlLmcuIGBvblNob3dgLCBgb25DbGlja2ApLCBhcyBhbiBlYXN5IHdheSB0byBsaXN0ZW4gZm9yIGV2ZW50cy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctY2FsbE9uRnVuY3Rpb25zKVxuICAgICAqL1xuICAgIGNhbGxPbkZ1bmN0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGlmIGFuIGV2ZW50IGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlIGVycm9yIHByb3BhZ2F0ZXMgdXAgdGhlIHN0YWNrIGFuZCB0aGVcbiAgICAgKiBhcHBsaWNhdGlvbiBzdGF0ZSBpcyB1bmRlZmluZWQuIENvZGUgd2hpY2ggZm9sbG93cyB0aGUgZXZlbnQgaGFuZGxlciB3aWxsICpub3QqIGJlIGV4ZWN1dGVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1jYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMpXG4gICAgICovXG4gICAgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gY3JvcCB0ZXh0IGluIGdyaWQgY2VsbHMgd2l0aG91dCBlbGxpcHNpcyAoLi4uKS4gV2hlbiBlbmFibGVkLCBjZWxscyBjb250YWluaW5nIHB1cmVcbiAgICAgKiB1c2UgYGRpc3BsYXkgOiBibG9ja2AsIGluc3RlYWQgb2YgYGRpc3BsYXkgOiBmbGV4YCB0byBhbGxvdyBlbGxpcHNpcyB0byB3b3JrLlxuICAgICAqIDxzdHJvbmc+Tk9URTwvc3Ryb25nPiBPbmx5IHN1cHBvcnRlZCBpbiBicm93c2VycyB0aGF0IHN1cHBvcnQgYDpoYXMoKWAgQ1NTIHNlbGVjdG9yXG4gICAgICovXG4gICAgY2VsbEVsbGlwc2lzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byBlbGVtZW50LlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1jbHMpXG4gICAgICovXG4gICAgY2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgcGFuZWwgaXMgY29sbGFwc2VkICh0aGUgYm9keSBvZiB0aGUgcGFuZWwgaXMgaGlkZGVuIHdoaWxlIG9ubHkgdGhlIGhlYWRlciBpc1xuICAgICAqIHZpc2libGUpLiBPbmx5IHZhbGlkIGlmIHRoZSBwYW5lbCBpcyBbY29sbGFwc2libGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpLlxuICAgICAqL1xuICAgIGNvbGxhcHNlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIGVuYWJsZXMgY29sbGFwc2liaWxpdHkgZm9yIHRoZSBwYW5lbC4gU2VlIFtjb2xsYXBzZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2VkKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctY29sbGFwc2libGUpXG4gICAgICovXG4gICAgY29sbGFwc2libGUgPyA6IGJvb2xlYW58UGFuZWxDb2xsYXBzZXJDb25maWd8UGFuZWxDb2xsYXBzZXJPdmVybGF5Q29uZmlnXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgc3BlY2lmaWVkIGNvbG9yIHRvIHRoZSB3aWRnZXQsIGJ5IHNldHRpbmcgdGhlIGAtLWItcHJpbWFyeWAgQ1NTIHZhcmlhYmxlIGluIHRoZSB3aWRnZXRzXG4gICAgICogYHN0eWxlYCBibG9jay5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctY29sb3IpXG4gICAgICovXG4gICAgY29sb3IgPyA6IENvbG9yXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciB3aGljaCBjb2x1bW4gdG8gc3RhcnQgaW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgY29sdW1uID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgc2hvdyBjb2x1bW4gbGluZXMuIEVuZCByZXN1bHQgbWlnaHQgYmUgb3ZlcnJ1bGVkIGJ5L2RpZmZlciBiZXR3ZWVuIHRoZW1lcy5cbiAgICAgKi9cbiAgICBjb2x1bW5MaW5lcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFjY2VwdHMgY29sdW1uIGRlZmluaXRpb25zIGZvciB0aGUgZ3JpZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoZXkgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZVxuICAgICAqIFtDb2x1bW5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4pIGluc3RhbmNlcyB0aGF0IGFyZSBhZGRlZCB0byBhIFtDb2x1bW5TdG9yZV0oI0dyaWQvZGF0YS9Db2x1bW5TdG9yZSkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWNvbHVtbnMpXG4gICAgICovXG4gICAgY29sdW1ucyA/IDogQ29sdW1uU3RvcmV8R3JpZENvbHVtbkNvbmZpZ1tdfENvbHVtblN0b3JlQ29uZmlnXG4gICAgY29uZmlnID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1jb250ZW50RWxlbWVudENscylcbiAgICAgKi9cbiAgICBjb250ZW50RWxlbWVudENscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIEV2ZW50IHdoaWNoIGlzIHVzZWQgdG8gc2hvdyBjb250ZXh0IG1lbnVzLlxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogJ2NvbnRleHRtZW51JywgJ2NsaWNrJywgJ2RibGNsaWNrJy5cbiAgICAgKi9cbiAgICBjb250ZXh0TWVudVRyaWdnZXJFdmVudCA/IDogJ2NvbnRleHRtZW51J3wnY2xpY2snfCdkYmxjbGljaydcbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW50IHNob3J0Y3V0IHRvIHNldCBkYXRhIGluIGdyaWRzIHN0b3JlIGJvdGggZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBhdCBydW50aW1lLiBDYW4gYWxzbyBiZVxuICAgICAqIHVzZWQgdG8gcmV0cmlldmUgZGF0YSBhdCBydW50aW1lLCBhbHRob3VnaCB3ZSBkbyByZWNvbW1lbmQgaW50ZXJhY3Rpbmcgd2l0aCBHcmlkcyBzdG9yZSBpbnN0ZWFkIHVzaW5nXG4gICAgICogdGhlIFtzdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNwcm9wZXJ0eS1zdG9yZSkgcHJvcGVydHkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWRhdGEpXG4gICAgICovXG4gICAgZGF0YSA/IDogb2JqZWN0W118TW9kZWxbXXxNb2RlbENvbmZpZ1tdXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIFdpZGdldCBjb25maWd1cmF0aW9uIGlzIHVzZWQgaW4gdGhlIEdyaWQncyBSb3dFeHBhbmRlciBmZWF0dXJlJ3MgYHdpZGdldGAgY29uZmlnLCBwcm92aWRlIHRoZVxuICAgICAqIGZpZWxkIG9uIHRoZSBleHBhbmRlZCByZWNvcmQgdG8gdXNlIGZvciBwb3B1bGF0aW5nIHRoaXMgd2lkZ2V0J3Mgc3RvcmUgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gICAgZGF0YUZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gYXBwbHkgdG8gZWxlbWVudHMgZGF0YXNldCAoZWFjaCBrZXkgd2lsbCBiZSB1c2VkIGFzIGEgZGF0YS1hdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQpXG4gICAgICovXG4gICAgZGF0YXNldCA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIFJlZ2lvbiB0byB3aGljaCBjb2x1bW5zIGFyZSBhZGRlZCB3aGVuIHRoZXkgaGF2ZSBub25lIHNwZWNpZmllZFxuICAgICAqL1xuICAgIGRlZmF1bHRSZWdpb24gPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gZGVzdHJveSB0aGUgc3RvcmUgd2hlbiB0aGUgZ3JpZCBpcyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgZGVzdHJveVN0b3JlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgZm9yIENTUyBjb21wYXRpYmlsaXR5IGFuZCBpbmNsdXNpb24gcmVsYXRlZCBpc3N1ZXMgYW5kIHRyeSB0byBhdXRvIGZpeCB0aGVtLiBQZXJmb3JtcyB0aGUgZm9sbG93aW5nXG4gICAgICogY2hlY2tzOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1kZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzKVxuICAgICAqL1xuICAgIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIG9yIGVuYWJsZSB0aGUgd2lkZ2V0LiBJdCBpcyBzaW1pbGFyIHRvIFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcmVhZE9ubHkpIGV4Y2VwdCBhIGRpc2FibGVkIHdpZGdldFxuICAgICAqIGNhbm5vdCBiZSBmb2N1c2VkLCB1c2VzIGEgZGlmZmVyZW50IHJlbmRpdGlvbiAodXN1YWxseSBncmV5aXNoKSBhbmQgZG9lcyBub3QgYWxsb3cgc2VsZWN0aW5nIGl0cyB2YWx1ZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctZGlzYWJsZWQpXG4gICAgICovXG4gICAgZGlzYWJsZWQgPyA6IGJvb2xlYW58J2luZXJ0J1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbm90IGdldCBhIHdhcm5pbmcgd2hlbiBjYWxsaW5nIFtnZXRTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNmdW5jdGlvbi1nZXRTdGF0ZSkgd2hlbiB0aGVyZSBpcyBhIGNvbHVtblxuICAgICAqIGNvbmZpZ3VyZWQgd2l0aG91dCBhbiBgaWRgLiBCdXQgdGhlIHJlY29tbWVuZGVkIGFjdGlvbiBpcyB0byBhbHdheXMgY29uZmlndXJlIGNvbHVtbnMgd2l0aCBhbiBgaWRgIHdoZW5cbiAgICAgKiB1c2luZyBzdGF0ZXMuXG4gICAgICovXG4gICAgZGlzYWJsZUdyaWRDb2x1bW5JZFdhcm5pbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIG5vdCBnZXQgYSB3YXJuaW5nIHdoZW4gdXNpbmcgYW5vdGhlciBiYXNlIGNsYXNzIHRoYW4gR3JpZFJvd01vZGVsIGZvciB5b3VyIGdyaWQgZGF0YS4gSWZcbiAgICAgKiB5b3UgZG8sIGFuZCB3b3VsZCBsaWtlIHRvIHVzZSB0aGUgZnVsbCBmZWF0dXJlIHNldCBvZiB0aGUgZ3JpZCB0aGVuIGluY2x1ZGUgdGhlIGZpZWxkcyBmcm9tIEdyaWRSb3dNb2RlbFxuICAgICAqIGluIHlvdXIgbW9kZWwgZGVmaW5pdGlvbi5cbiAgICAgKi9cbiAgICBkaXNhYmxlR3JpZFJvd01vZGVsV2FybmluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBwbGFjZW1lbnQgb2YgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBhZGRlZCB0byBhIFtwYW5lbCdzIF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsKVxuICAgICAqIFtzdHJpcHMgY29sbGVjdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLiBUeXBpY2FsIHZhbHVlcyBmb3IgdGhpcyBjb25maWcgYXJlIGAndG9wJ2AsXG4gICAgICogYCdib3R0b20nYCwgYCdsZWZ0J2AsIG9yIGAncmlnaHQnYCwgd2hpY2ggY2F1c2UgdGhlIHdpZGdldCB0byBiZSBwbGFjZWQgb24gdGhhdCBzaWRlIG9mIHRoZSBwYW5lbCdzXG4gICAgICogYm9keS4gU3VjaCB3aWRnZXRzIGFyZSBjYWxsZWQgXCJlZGdlIHN0cmlwc1wiLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1kb2NrKVxuICAgICAqL1xuICAgIGRvY2sgPyA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdFxuICAgIC8qKlxuICAgICAqIE1ha2UgdGhpcyBQYW5lbCBhIGRvY2tlZCBkcmF3ZXIgd2hpY2ggc2xpZGVzIG91dCBmcm9tIG9uZSBzaWRlIG9mIHRoZSBicm93c2VyIHZpZXdwb3J0IGJ5IGRlZmF1bHQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWRyYXdlcilcbiAgICAgKiBAcGFyYW0geydzdGFydCcsJ2xlZnQnLCdlbmQnLCdyaWdodCcsJ3RvcCcsJ2JvdHRvbSd9IFtzaWRlXSBUaGUgc2lkZSBvZiB0aGUgdmlld3BvcnQgdG8gZG9jayB0aGUgZHJhd2VyIHRvLiAgKiBgJ3N0YXJ0J2AgbWVhbnMgdGhlIGBpbmxpbmUtc3RhcnRgIHNpZGUuICogYCdlbmQnYCBtZWFucyB0aGUgYGlubGluZS1lbmRgIHNpZGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmcsbnVtYmVyfSBbc2l6ZV0gVGhlIHNpemUgb2YgdGhlIGRyYXdlciBpbiBpdHMgY29sbGFwc2libGUgYXhpcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmxpbmVdIElmIHVzaW5nIHRoZSBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyB0byBwbGFjZSB0aGUgZHJhd2VyIGluc2lkZSBhIGhvc3Qgd2lkZ2V0LCB0aGlzIG1heSBiZSBzZXQgdG8gYHRydWVgIHRvIG1ha2UgdGhlIGRyYXdlciBpbmxpbmUgd2l0aGluIHRoYXQgaG9zdC4gTm90ZSB0aGF0LCBpZiB1c2luZyB0aGlzLCB0aGUgbGF5b3V0IG9mIHRoZSBob3N0IGVsZW1lbnQgbXVzdCBoYXZlIGBmbGV4LWRpcmVjdGlvbmAgc2V0IGFwcHJvcHJpYXRlbHkuXG4gICAgICogQHBhcmFtIHtib29sZWFuLG9iamVjdH0gW2F1dG9DbG9zZV0gU3BlY2lmaWVzIHdoYXQgdXNlciBhY3Rpb25zIHNob3VsZCBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZSBkcmF3ZXIuIERlZmF1bHRzIHRvIGNsb3Npbmcgd2hlbiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgZHJhd2VyIG9yIHdoZW4gZm9jdXMgbW92ZXMgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixzdHJpbmd9IFthdXRvQ2xvc2UubW91c2Vkb3duXSBJZiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLCB0aGUgZHJhd2VyIHdpbGwgYXV0b21hdGljYWxseSBiZSBoaWRkZW4uIElmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZywgaXQgaXMgdXNlZCBhcyBhIENTUyBzZWxlY3RvciB0byBmaWx0ZXIgY2xpY2tzIHdoaWNoIHNob3VsZCBjbG9zZSB0aGUgZHJhd2VyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixzdHJpbmd9IFthdXRvQ2xvc2UuZm9jdXNvdXRdIElmIGZvY3VzIG1vdmVzIG91dHNpZGUgb2YgdGhlIGRyYXdlciwgdGhlIGRyYXdlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaGlkZGVuLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYXV0b0Nsb3NlLm1vdXNlb3V0XSBIaWRlcyB0aGUgZHJhd2VyIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgZHJhd2VyIGFmdGVyIHRoZSBgYXV0b0Nsb3NlRGVsYXlgIHBlcmlvZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2F1dG9DbG9zZURlbGF5XSBXaGVuIHVzaW5nIGBtb3VzZW91dGAsIHRoaXMgaXMgdGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kc1xuICAgICAqL1xuICAgIGRyYXdlciA/IDogYm9vbGVhbnx7IHNpZGU/OiAnc3RhcnQnfCdsZWZ0J3wnZW5kJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nLCBzaXplPzogc3RyaW5nfG51bWJlciwgaW5saW5lPzogYm9vbGVhbiwgYXV0b0Nsb3NlPzogYm9vbGVhbnx7IG1vdXNlZG93bj86IGJvb2xlYW58c3RyaW5nLCBmb2N1c291dD86IGJvb2xlYW58c3RyaW5nLCBtb3VzZW91dD86IHN0cmluZyB9LCBhdXRvQ2xvc2VEZWxheT86IG51bWJlciB9XG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHNwZWNpZnlpbmcgYXR0cmlidXRlcyB0byBhc3NpZ24gdG8gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHdpZGdldC5cbiAgICAgKiBTZXQgYG51bGxgIHZhbHVlIHRvIGF0dHJpYnV0ZSB0byByZW1vdmUgaXQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWVsZW1lbnRBdHRyaWJ1dGVzKVxuICAgICAqL1xuICAgIGVsZW1lbnRBdHRyaWJ1dGVzID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD5cbiAgICAvKipcbiAgICAgKiBUZXh0IG9yIEhUTUwsIG9yIGEgW0VtcHR5VGV4dERvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSN0eXBlZGVmLUVtcHR5VGV4dERvbUNvbmZpZykgYmxvY2sgdG8gZGlzcGxheSB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZC5cbiAgICAgKiBXaGVuIHVzaW5nIG11bHRpcGxlIEdyaWQgcmVnaW9ucywgcHJvdmlkZSB0aGUgYHJlZ2lvbmAgcHJvcGVydHkgdG8gZGVjaWRlIHdoZXJlIHRoZSB0ZXh0IGlzIHNob3duLlxuICAgICAqIEJ5IGRlZmF1bHQsIGl0IGlzIHNob3duIGluIHRoZSBmaXJzdCByZWdpb24uXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWVtcHR5VGV4dClcbiAgICAgKi9cbiAgICBlbXB0eVRleHQgPyA6IHN0cmluZ3xFbXB0eVRleHREb21Db25maWdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSB0aGUgW1N0aWNreUNlbGxzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N0aWNreUNlbGxzKSBmZWF0dXJlLCB3aGljaCBwaW5zIGNlbGxcbiAgICAgKiBjb250ZW50IHRvIHRoZSB0b3Agb2YgdGhlIGdyaWQgd2hpbGUgcm93cyBzY3JvbGwgb2ZmIHRoZSB0b3AgYnV0IHJlbWFpbiB2aXNpYmxlLlxuICAgICAqIEBkZXByZWNhdGVkIDcuMy4wIFVzZSBgZmVhdHVyZXMgOiB7IHN0aWNreUNlbGxzIDogdHJ1ZSB9YCBpbnN0ZWFkXG4gICAgICovXG4gICAgZW5hYmxlU3RpY2t5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBhbGxvdyB0ZXh0IHNlbGVjdGlvbiBpbiB0aGUgZ3JpZCBjZWxscy4gTm90ZSwgdGhpcyBjYW5ub3QgYmUgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIHRoZVxuICAgICAqIGBSb3dSZW9yZGVyYCBmZWF0dXJlLlxuICAgICAqL1xuICAgIGVuYWJsZVRleHRTZWxlY3Rpb24gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGxpc3RlbiBmb3IgQ1RSTC1aIChDTUQtWiBvbiBNYWMgT1MpIGtleWJvYXJkIGV2ZW50IGFuZCB0cmlnZ2VyIHVuZG8gKHJlZG8gd2hlbiBTSElGVCBpc1xuICAgICAqIHByZXNzZWQpLiBPbmx5IGFwcGxpY2FibGUgd2hlbiB1c2luZyBhIFtTdGF0ZVRyYWNraW5nTWFuYWdlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvZGF0YS9zdG0vU3RhdGVUcmFja2luZ01hbmFnZXIpLlxuICAgICAqL1xuICAgIGVuYWJsZVVuZG9SZWRvS2V5cyA/IDogYm9vbGVhblxuICAgIGV4dHJhRGF0YSA/IDogYW55XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBzdHJldGNoIHRoZSBsYXN0IGNvbHVtbiBpbiBhIGdyaWQgd2l0aCBhbGwgZml4ZWQgd2lkdGggY29sdW1uc1xuICAgICAqIHRvIGZpbGwgZXh0cmEgYXZhaWxhYmxlIHNwYWNlIGlmIHRoZSBncmlkJ3Mgd2lkdGggaXMgd2lkZXIgdGhhbiB0aGUgc3VtIG9mIGFsbFxuICAgICAqIGNvbmZpZ3VyZWQgY29sdW1uIHdpZHRocy5cbiAgICAgKi9cbiAgICBmaWxsTGFzdENvbHVtbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFVzZSBmaXhlZCByb3cgaGVpZ2h0LiBTZXR0aW5nIHRoaXMgdG8gYHRydWVgIHdpbGwgY29uZmlndXJlIHRoZSB1bmRlcmx5aW5nIFJvd01hbmFnZXIgdG8gdXNlIGZpeGVkIHJvd1xuICAgICAqIGhlaWdodCwgd2hpY2ggc2FjcmlmaWNlcyB0aGUgYWJpbGl0eSB0byB1c2Ugcm93cyB3aXRoIHZhcmlhYmxlIGhlaWdodCB0byBnYWluIGEgZnJhY3Rpb24gYmV0dGVyXG4gICAgICogcGVyZm9ybWFuY2UuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWZpeGVkUm93SGVpZ2h0KVxuICAgICAqL1xuICAgIGZpeGVkUm93SGVpZ2h0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFtmbGV4XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZmxleCkgc3R5bGUuXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBhIHNpbmdsZSBudW1iZXIgb3IgYSBgJmx0O2ZsZXgtZ3JvdyZndDsgJmx0O2ZsZXgtc2hyaW5rJmd0OyAmbHQ7ZmxleC1iYXNpcyZndDtgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGBmbGV4LWdyb3dgIHZhbHVlLlxuICAgICAqL1xuICAgIGZsZXggPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDb25maWcgb2JqZWN0IG9mIGEgZm9vdGVyLiBNYXkgY29udGFpbiBhIGBkb2NrYCwgYGh0bWxgIGFuZCBhIGBjbHNgIHByb3BlcnR5LiBBIGZvb3RlciBpcyBub3QgYSB3aWRnZXQsXG4gICAgICogYnV0IHJhdGhlciBwbGFpbiBIVE1MIHRoYXQgZm9sbG93cyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYW5lbCdzIGJvZHkgYW5kIFtzdHJpcHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctZm9vdGVyKVxuICAgICAqIEBwcm9wZXJ0eSB7J3RvcCcsJ3JpZ2h0JywnYm90dG9tJywnbGVmdCcsJ3N0YXJ0JywnZW5kJ30gZG9jayBXaGVyZSB0byBkb2NrXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGh0bWwgSHRtbCB0byBwb3B1bGF0ZSB0aGUgZm9vdGVyIHdpdGhcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gY2xzIENTUyBjbGFzcyB0byBhZGQgdG8gdGhlIGZvb3RlclxuICAgICAqL1xuICAgIGZvb3RlciA/IDogb2JqZWN0fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aGljaCBuYW1lcyBmb3JtdWxhIHByZWZpeGVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgY29sdW1ucyBjb25maWd1cmVkIHdpdGhcbiAgICAgKiBgZm9ybXVsYSA6IHRydWVgLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1mb3JtdWxhUHJvdmlkZXJzKVxuICAgICAqL1xuICAgIGZvcm11bGFQcm92aWRlcnMgPyA6IFJlY29yZDxzdHJpbmcsIEZvcm11bGFQcm92aWRlckNvbmZpZz5cbiAgICAvKipcbiAgICAgKiBSZWZyZXNoIGVudGlyZSByb3cgd2hlbiBhIHJlY29yZCBjaGFuZ2VzIChgdHJ1ZWApIG9yLCBpZiBwb3NzaWJsZSwgb25seSB0aGUgY2VsbHMgYWZmZWN0ZWQgKGBmYWxzZWApLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1mdWxsUm93UmVmcmVzaClcbiAgICAgKi9cbiAgICBmdWxsUm93UmVmcmVzaCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIHJvdyB0byBkZXRlcm1pbmUgaXRzIGhlaWdodC4gSXQgaXMgcGFzc2VkIGEgW3JlY29yZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvZGF0YS9Nb2RlbCkgYW5kXG4gICAgICogZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSBkZXNpcmVkIGhlaWdodCBvZiB0aGF0IHJlY29yZHMgcm93LiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBHcmlkc1xuICAgICAqIGNvbmZpZ3VyZWQgW3Jvd0hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcm93SGVpZ2h0KSBpcyB1c2VkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1nZXRSb3dIZWlnaHQpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGdldFJvd0hlaWdodC5yZWNvcmQgUmVjb3JkIHRvIGRldGVybWluZSByb3cgaGVpZ2h0IGZvclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IERlc2lyZWQgcm93IGhlaWdodFxuICAgICAqL1xuICAgIGdldFJvd0hlaWdodCA/IDogKCkgPT4gbnVtYmVyXG4gICAgLyoqXG4gICAgICogQSBjb25maWcgW29iamVjdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI3R5cGVkZWYtUGFuZWxIZWFkZXIpIGZvciB0aGUgcGFuZWwncyBoZWFkZXIgb3IgYSBzdHJpbmcgaW4gcGxhY2Ugb2YgYSBgdGl0bGVgLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1oZWFkZXIpXG4gICAgICovXG4gICAgaGVhZGVyID8gOiBzdHJpbmd8Ym9vbGVhbnxQYW5lbEhlYWRlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIGhlaWdodCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUuaGVpZ2h0YC4gRWl0aGVyIHNwZWNpZnkgYSB2YWxpZCBoZWlnaHQgc3RyaW5nIG9yIGEgbnVtYmVyLFxuICAgICAqIHdoaWNoIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgaGVpZ2h0LCBidXQgaW4gc29tZVxuICAgICAqIGNhc2VzIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgaGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHdpdGggdHJ1ZSB0byBtYWtlIHdpZGdldCBpbml0aWFsbHkgaGlkZGVuLlxuICAgICAqL1xuICAgIGhpZGRlbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaGlkZSB0aGUgZm9vdGVyIGVsZW1lbnRzXG4gICAgICovXG4gICAgaGlkZUZvb3RlcnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGhpZGUgdGhlIGNvbHVtbiBoZWFkZXIgZWxlbWVudHNcbiAgICAgKi9cbiAgICBoaWRlSGVhZGVycyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaGlkZSB0aGUgR3JpZCdzIGhvcml6b250YWwgc2Nyb2xsYmFyKHMpXG4gICAgICovXG4gICAgaGlkZUhvcml6b250YWxTY3JvbGxiYXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIENTUyBjbGFzcyB0byBhZGQgdG8gaG92ZXJlZCByb3cgZWxlbWVudHNcbiAgICAgKi9cbiAgICBob3ZlckNscyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gaWNvbiB0byBzaG93IGJlZm9yZSB0aGUgW3RpdGxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXRpdGxlKS4gRWl0aGVyIHBhc3MgYSBDU1MgY2xhc3MgYXMgYSBzdHJpbmcsIG9yIHBhc3MgYVxuICAgICAqIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIG9iamVjdCBkZXNjcmliaW5nIGFuIGVsZW1lbnQgdG8gcmVwcmVzZW50IHRoZSBpY29uLlxuICAgICAqL1xuICAgIGljb24gPyA6IHN0cmluZ3xEb21Db25maWdcbiAgICAvKipcbiAgICAgKiBXaWRnZXQgaWQsIGlmIG5vdCBzcGVjaWZpZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLiBBbHNvIHVzZWQgZm9yIGxvb2t1cHMgdGhyb3VnaCBXaWRnZXQuZ2V0QnlJZFxuICAgICAqL1xuICAgIGlkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB3aWRnZXRzIHJlYWQtb25seSBzdGF0ZSBzaG91bGQgYmUgY29udHJvbGxlZCBieSBpdHMgcGFyZW50LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1pZ25vcmVQYXJlbnRSZWFkT25seSlcbiAgICAgKi9cbiAgICBpZ25vcmVQYXJlbnRSZWFkT25seSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIHNldHRpbmcgdG8gYWxpZ24gaW5wdXQgZmllbGRzIG9mIGNoaWxkIHdpZGdldHMuIEJ5IGRlZmF1bHQsIHRoZSBGaWVsZCBpbnB1dCBlbGVtZW50IGlzXG4gICAgICogcGxhY2VkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgYGxhYmVsYC4gSWYgeW91IHByZWZlciB0byBoYXZlIGFsbCBpbnB1dCBmaWVsZHMgYWxpZ25lZCB0byB0aGVcbiAgICAgKiByaWdodCwgc2V0IHRoaXMgY29uZmlnIHRvIGAnZW5kJ2AuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWlucHV0RmllbGRBbGlnbilcbiAgICAgKi9cbiAgICBpbnB1dEZpZWxkQWxpZ24gPyA6ICdzdGFydCd8J2VuZCdcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBpbnNlcnQgdGhpcyB3aWRnZXQgYmVmb3JlLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICogPGRpdiBjbGFzcz1cIm5vdGVcIj5XaGVuIGNyZWF0aW5nIG5lc3RlZCB0cmVlcyBvZiB3aWRnZXRzLCB0aGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gdGhlIG91dGVybW9zdCB3aWRnZXQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWluc2VydEJlZm9yZSlcbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICogPGRpdiBjbGFzcz1cIm5vdGVcIj5XaGVuIGNyZWF0aW5nIG5lc3RlZCB0cmVlcyBvZiB3aWRnZXRzLCB0aGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gdGhlIG91dGVybW9zdCB3aWRnZXQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWluc2VydEZpcnN0KVxuICAgICAqL1xuICAgIGluc2VydEZpcnN0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZWUgW0tleWJvYXJkIHNob3J0Y3V0c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkI2tleWJvYXJkLXNob3J0Y3V0cykgZm9yIGRldGFpbHNcbiAgICAgKi9cbiAgICBrZXlNYXAgPyA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzZXR0aW5nIHRvIHVzZSBzYW1lIGxhYmVsIHBsYWNlbWVudCBvbiBhbGwgY2hpbGQgd2lkZ2V0cy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctbGFiZWxQb3NpdGlvbilcbiAgICAgKi9cbiAgICBsYWJlbFBvc2l0aW9uID8gOiAnYmVmb3JlJ3wnYWJvdmUnfCdhbGlnbi1iZWZvcmUnfCdhdXRvJ3xudWxsXG4gICAgLyoqXG4gICAgICogU2V0cyBgbGFiZWxXaWR0aGAgZm9yIGFsbCBjaGlsZHJlbiBvZiB0aGlzIENvbnRhaW5lciwgdGhhdCBkbyBub3QgZGVmaW5lIHRoZWlyIG93biBgbGFiZWxXaWR0aGAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWxhYmVsV2lkdGgpXG4gICAgICovXG4gICAgbGFiZWxXaWR0aCA/IDogbnVtYmVyfG51bGxcbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdGVuZXIgc2V0IGZvciB0aGlzIG9iamVjdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctbGlzdGVuZXJzKVxuICAgICAqL1xuICAgIGxpc3RlbmVycyA/IDogVHJlZUdyaWRMaXN0ZW5lcnNcbiAgICAvKipcbiAgICAgKiBBIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdCwgb3IgYSBtZXNzYWdlIHRvIGJlIHNob3duIHdoZW4gYSBzdG9yZSBpcyBwZXJmb3JtaW5nIGEgcmVtb3RlXG4gICAgICogb3BlcmF0aW9uLCBvciBDcnVkIE1hbmFnZXIgaXMgbG9hZGluZyBkYXRhIGZyb20gdGhlIHNldmVyLiBTZXQgdG8gYG51bGxgIHRvIGRpc2FibGUgZGVmYXVsdCBsb2FkIG1hc2suXG4gICAgICovXG4gICAgbG9hZE1hc2sgPyA6IHN0cmluZ3xNYXNrQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBBIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdCB0byBhZGp1c3QgdGhlIFttYXNrRGVmYXVsdHNdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1hc2tEZWZhdWx0cylcbiAgICAgKiB3aGVuIGRhdGEgaXMgbG9hZGluZy4gVGhlIG1lc3NhZ2UgYW5kIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGVcbiAgICAgKiBbbG9hZE1hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL21peGluL0xvYWRNYXNrYWJsZSNjb25maWctbG9hZE1hc2spIGNvbmZpZyB0YWtlIHByaW9yaXR5IG92ZXIgdGhlc2Ugb3B0aW9ucywganVzdCBhcyB0aGV5IGRvXG4gICAgICogZm9yIGBtYXNrRGVmYXVsdHNgLCByZXNwZWN0aXZlbHkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWxvYWRNYXNrRGVmYXVsdHMpXG4gICAgICovXG4gICAgbG9hZE1hc2tEZWZhdWx0cyA/IDogTWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0IHRvIGFkanVzdCB0aGUgW21hc2tEZWZhdWx0c10oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbWFza0RlZmF1bHRzKVxuICAgICAqIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGxvYWRpbmcgZGF0YS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctbG9hZE1hc2tFcnJvcilcbiAgICAgKi9cbiAgICBsb2FkTWFza0Vycm9yID8gOiBNYXNrQ29uZmlnfE1hc2t8Ym9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGltZSBpbiBtcyB1bnRpbCBhIGxvbmdwcmVzcyBpcyB0cmlnZ2VyZWRcbiAgICAgKi9cbiAgICBsb25nUHJlc3NUaW1lID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBtYXJnaW4uIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYFRSQkxgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgcGl4ZWxzLlxuICAgICAqL1xuICAgIG1hcmdpbiA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEdyaWRzIGNoYW5nZSB0aGUgYG1hc2tEZWZhdWx0c2AgdG8gY292ZXIgb25seSB0aGVpciBgYm9keWAgZWxlbWVudC5cbiAgICAgKi9cbiAgICBtYXNrRGVmYXVsdHMgPyA6IE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFwcGx5IHRoZSBkZWZhdWx0IG1hc2sgdG8gdGhlIHdpZGdldC4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgdGhlIG1hc2sgbWVzc2FnZSBvciBhXG4gICAgICogW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIG1hc2tlZCA/IDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWF4SGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1heFdpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1heFdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogR3JpZCdzIGBtaW4taGVpZ2h0YC4gRGVmYXVsdHMgdG8gYDEwZW1gIHRvIGJlIHN1cmUgdGhhdCB0aGUgR3JpZCBhbHdheXMgaGFzIGEgaGVpZ2h0IHdoZXJldmVyIGl0IGlzXG4gICAgICogaW5zZXJ0ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLW1pbkhlaWdodClcbiAgICAgKi9cbiAgICBtaW5IZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWluV2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluV2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBHcmlkIG1vbml0b3JzIHdpbmRvdyByZXNpemUgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBtb25pdG9yUmVzaXplID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ3VzdG9taXplcyB0aGUgY29uZmlnIG9iamVjdCB1c2VkIHRvIGNyZWF0ZSB0aGlzIHdpZGdldCdzIGNsb25lIGluIGEgW1Rvb2xiYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSdzXG4gICAgICogb3ZlcmZsb3cgbWVudSAoc2VlIFtvdmVyZmxvd10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIjY29uZmlnLW92ZXJmbG93KSkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLW92ZXJmbG93VHdpbkNvbmZpZylcbiAgICAgKi9cbiAgICBvdmVyZmxvd1R3aW5Db25maWcgPyA6IE92ZXJmbG93VHdpbkNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBwbHVnaW5zIChhbiBhcnJheSBvZiBjbGFzc2VzKSBpbiBjb25maWdcbiAgICAgKi9cbiAgICBwbHVnaW5zID8gOiBJbnN0YW5jZVBsdWdpbltdfEluc3RhbmNlUGx1Z2luXG4gICAgLyoqXG4gICAgICogVHJ1ZSB0byBwcmVzZXJ2ZSBmb2N1c2VkIGNlbGwgYWZ0ZXIgbG9hZGluZyBuZXcgZGF0YVxuICAgICAqL1xuICAgIHByZXNlcnZlRm9jdXNPbkRhdGFzZXRDaGFuZ2UgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcmVzZXJ2ZSB0aGUgZ3JpZCdzIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiB3aGVuIGNoYW5nZXNldHMgYXJlIGFwcGxpZWQsIGFzIGluIHRoZSBjYXNlIG9mIHJlbW90ZVxuICAgICAqIGNoYW5nZXMsIG9yIHdoZW4gc3RvcmVzIGFyZSBjb25maWd1cmVkIHdpdGggW3N5bmNEYXRhT25Mb2FkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9kYXRhL1N0b3JlI2NvbmZpZy1zeW5jRGF0YU9uTG9hZCkuXG4gICAgICovXG4gICAgcHJlc2VydmVTY3JvbGwgPyA6IFByZXNlcnZlU2Nyb2xsT3B0aW9uc3xib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gcHJlc2VydmUgdmVydGljYWwgc2Nyb2xsIHBvc2l0aW9uIGFmdGVyIHN0b3JlIGFjdGlvbnMgdGhhdCB0cmlnZ2VyIGEgYHJlZnJlc2hgIGV2ZW50LFxuICAgICAqIHN1Y2ggYXMgbG9hZGluZyBuZXcgZGF0YSBhbmQgZmlsdGVyaW5nLlxuICAgICAqL1xuICAgIHByZXNlcnZlU2Nyb2xsT25EYXRhc2V0Q2hhbmdlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJldmVudCB0b29sdGlwIGZyb20gYmVpbmcgZGlzcGxheWVkIG9uIHRvdWNoIGRldmljZXMuIFVzZWZ1bCBmb3IgZXhhbXBsZSBmb3IgYnV0dG9ucyB0aGF0IGRpc3BsYXkgYVxuICAgICAqIG1lbnUgb24gY2xpY2sgZXRjLCBzaW5jZSB0aGUgdG9vbHRpcCB3b3VsZCBiZSBkaXNwbGF5ZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICAgKi9cbiAgICBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIG1ha2UgdGhlIGdyaWQgcmVhZC1vbmx5LCBieSBkaXNhYmxpbmcgYW55IFVJcyBmb3IgbW9kaWZ5aW5nIGRhdGEuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXJlYWRPbmx5KVxuICAgICAqL1xuICAgIHJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgcmVsYXlTdG9yZUV2ZW50cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVpdGhlciBhIGRlZmF1bHQgYHJlbmRpdGlvbmAgdG8gYXBwbHkgdG8gYWxsIGNoaWxkIHdpZGdldHMsIG9yIGEgbWFwIG9mIHJlbmRpdGlvbnMga2V5ZWQgYnkgY2hpbGQgd2lkZ2V0XG4gICAgICogYHR5cGVgLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1yZW5kaXRpb24pXG4gICAgICovXG4gICAgcmVuZGl0aW9uID8gOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPnxudWxsXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHRoaXMgcHJvcGVydHkgdG8gYWxsb3cgdGhlIHdpZGdldC9jb21wb25lbnQgdG8gYmUgcmVzaXplZC4gUHJlc3NpbmcgPGtiZD5TaGlmdDwva2JkPiB3aGlsZSByZXNpemluZyB3aWxsXG4gICAgICogY29uc3RyYWluIHRoZSBhc3BlY3QgcmF0aW8uXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXJlc2l6YWJsZSlcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW3Jlc2l6YWJsZS5taW5XaWR0aF0gVGhlIG1pbmltdW0gd2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFtyZXNpemFibGUubWF4V2lkdGhdIFRoZSBtYXhpbXVtIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmVzaXphYmxlLm1pbkhlaWdodF0gVGhlIG1pbmltdW0gaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmVzaXphYmxlLm1heEhlaWdodF0gVGhlIG1heGltdW0gaGVpZ2h0IG9mIHRoZSBlbGVtZW50XG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IFtyZXNpemFibGUuaGFuZGxlc10gQW4gb2JqZWN0IGNvbnRyb2xsaW5nIHdoaWNoIGVkZ2VzL2Nvcm5lcnMgYXJlIHJlc2l6YWJsZS5cbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNpemFibGUuaGFuZGxlcy50b3BTdGFydF0gUmVzaXphYmxlIGZyb20gdG9wLXN0YXJ0IGNvcm5lclxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLnRvcF0gUmVzaXphYmxlIGZyb20gdG9wIGVkZ2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNpemFibGUuaGFuZGxlcy50b3BFbmRdIFJlc2l6YWJsZSBmcm9tIHRvcC1lbmQgY29ybmVyXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzaXphYmxlLmhhbmRsZXMuZW5kXSBSZXNpemFibGUgZnJvbSBlbmQgZWRnZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLmJvdHRvbUVuZF0gUmVzaXphYmxlIGZyb20gYm90dG9tLWVuZCBjb3JuZXJcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNpemFibGUuaGFuZGxlcy5ib3R0b21dIFJlc2l6YWJsZSBmcm9tIGJvdHRvbSBlZGdlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzaXphYmxlLmhhbmRsZXMuYm90dG9tU3RhcnRdIFJlc2l6YWJsZSBmcm9tIGJvdHRvbS1zdGFydCBjb3JuZXJcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNpemFibGUuaGFuZGxlcy5zdGFydF0gUmVzaXphYmxlIGZyb20gc3RhcnQgZWRnZVxuICAgICAqL1xuICAgIHJlc2l6YWJsZSA/IDogYm9vbGVhbnx7IG1pbldpZHRoPzogbnVtYmVyLCBtYXhXaWR0aD86IG51bWJlciwgbWluSGVpZ2h0PzogbnVtYmVyLCBtYXhIZWlnaHQ/OiBudW1iZXIsIGhhbmRsZXM/OiB7IHRvcFN0YXJ0PzogYm9vbGVhbiwgdG9wPzogYm9vbGVhbiwgdG9wRW5kPzogYm9vbGVhbiwgZW5kPzogYm9vbGVhbiwgYm90dG9tRW5kPzogYm9vbGVhbiwgYm90dG9tPzogYm9vbGVhbiwgYm90dG9tU3RhcnQ/OiBib29sZWFuLCBzdGFydD86IGJvb2xlYW4gfSB9XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gb25seSBtZWFzdXJlIGNlbGwgY29udGVudHMgd2hlbiBkb3VibGUtY2xpY2tpbmcgdGhlIGVkZ2UgYmV0d2VlbiBjb2x1bW4gaGVhZGVycy5cbiAgICAgKi9cbiAgICByZXNpemVUb0ZpdEluY2x1ZGVzSGVhZGVyID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogXCJCcmVhayBwb2ludHNcIiBmb3Igd2hpY2ggcmVzcG9uc2l2ZSBjb25maWcgdG8gdXNlIGZvciBjb2x1bW5zIGFuZCBjc3MuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXJlc3BvbnNpdmVMZXZlbHMpXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZUxldmVscyA/IDogUmVjb3JkPHN0cmluZywgbnVtYmVyfHN0cmluZ3xSZXNwb25zaXZlTGV2ZWxDb25maWc+XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBjb21wb25lbnQgZGlzcGxheSBhIHRyYW5zbHVjZW50IHJpcHBsZSB3aGVuIGl0c1xuICAgICAqIFtmb2N1c0VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZm9jdXNFbGVtZW50KSwgb3IgW2VsZW1lbnRdKCNDb3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgdGFwcGVkIDxlbT5pZiB0aGVcbiAgICAgKiBjdXJyZW50IHRoZW1lIHN1cHBvcnRzIHJpcHBsZXM8L2VtPi4gT3V0IG9mIHRoZSBib3gsIG9ubHkgdGhlIE1hdGVyaWFsIHRoZW1lIHN1cHBvcnRzIHJpcHBsZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXJpcHBsZSlcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2RlbGVnYXRlXSBBIENTUyBzZWxlY3RvciB0byBmaWx0ZXIgd2hpY2ggY2hpbGQgZWxlbWVudHMgdHJpZ2dlciByaXBwbGVzLiBCeSBkZWZhdWx0LCB0aGUgcmlwcGxlIGlzIGNsaXBwZWQgdG8gdGhlIHRyaWdnZXJpbmcgZWxlbWVudC5cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbG9yXSBBIENTUyBjb2xvciBuYW1lIG9yIHNwZWNpZmljYXRpb24uXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFtyYWRpdXNdIFRoZSBlbmRpbmcgcmFkaXVzIG9mIHRoZSByaXBwbGUuIE5vdGUgdGhhdCBpdCB3aWxsIGJlIGNsaXBwZWQgYnkgdGhlIHRhcmdldCBlbGVtZW50IGJ5IGRlZmF1bHQuXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtjbGlwXSBBIHN0cmluZyB3aGljaCBkZXNjcmliZXMgaG93IHRvIGNsaXAgdGhlIHJpcHBsZSBpZiBpdCBpcyBub3QgdG8gYmUgY2xpcHBlZCB0byB0aGUgZGVmYXVsdCBlbGVtZW50LiBFaXRoZXIgdGhlIHByb3BlcnR5IG9mIHRoZSB3aWRnZXQgdG8gdXNlIGFzIHRoZSBjbGlwcGluZyBlbGVtZW50LCBvciBhIHNlbGVjdG9yIHRvIGFsbG93IGNsaXBwaW5nIHRvIHRoZSBjbG9zZXN0IG1hdGNoaW5nIGFuY2VzdG9yIHRvIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAgICAgKi9cbiAgICByaXBwbGUgPyA6IGJvb2xlYW58b2JqZWN0XG4gICAgLyoqXG4gICAgICogVGhlIEFSSUEgcm9sZSB0byBhcHBseSB0byB0aGlzIHdpZGdldCdzIGVsZW1lbnQuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgc2V0IHRvIGAncHJlc2VudGF0aW9uJ2AgdG8gYXZvaWRcbiAgICAgKiBhY2NpZGVudGFsbHkgYXBwbHlpbmcgYSByb2xlIHdoaWNoIG1heSBpbnRlcmZlcmUgd2l0aCBzY3JlZW4gcmVhZGVycy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctcm9sZSlcbiAgICAgKi9cbiAgICByb2xlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBJZiB5b3UgYXJlIHJlbmRlcmluZyB0aGlzIHdpZGdldCB0byBhIHNoYWRvdyByb290IGluc2lkZSBhIHdlYiBjb21wb25lbnQsIHNldCB0aGlzIGNvbmZpZyB0byB0aGUgc2hhZG93Um9vdC4gSWYgbm90IGluc2lkZSBhIHdlYiBjb21wb25lbnQsIHNldCBpdCB0byBgZG9jdW1lbnQuYm9keWBcbiAgICAgKi9cbiAgICByb290RWxlbWVudCA/IDogU2hhZG93Um9vdHxIVE1MRWxlbWVudFxuICAgIC8qKlxuICAgICAqIFJvdyBoZWlnaHQgaW4gcGl4ZWxzLiBUaGlzIGFsbG93cyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIHJvd3MgdG8gYmUgY29udHJvbGxlZC4gTm90ZSB0aGF0IGl0IG1heSBiZVxuICAgICAqIG92ZXJyaWRkZW4gYnkgc3BlY2lmeWluZyBhIFtyb3dIZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2RhdGEvR3JpZFJvd01vZGVsI2ZpZWxkLXJvd0hlaWdodCkgb24gYSBwZXIgcmVjb3JkIGJhc2lzLCBvciBmcm9tXG4gICAgICogYSBjb2x1bW4gW3JlbmRlcmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vQ29sdW1uI2NvbmZpZy1yZW5kZXJlcikuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXJvd0hlaWdodClcbiAgICAgKi9cbiAgICByb3dIZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBzaG93IHJvdyBsaW5lcy4gRW5kIHJlc3VsdCBtaWdodCBiZSBvdmVycnVsZWQgYnkvZGlmZmVyIGJldHdlZW4gdGhlbWVzLlxuICAgICAqL1xuICAgIHJvd0xpbmVzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBgdHJ1ZWAgdG8gbWFrZSB0aGUgd2lkZ2V0J3MgZWxlbWVudCB1c2UgdGhlIGBkaXJlY3Rpb246cnRsYCBzdHlsZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctcnRsKVxuICAgICAqL1xuICAgIHJ0bCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgd2hldGhlciB0aGUgZ3JpZCBpcyBzY3JvbGxhYmxlIGluIHRoZSBgWWAgYXhpcy4gVGhpcyBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBhIFtTY3JvbGxlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvaGVscGVyL3V0aWwvU2Nyb2xsZXIpLlxuICAgICAqIFNlZSB0aGUgW3Njcm9sbGVyQ2xhc3NdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXNjcm9sbGVyQ2xhc3MpIGNvbmZpZyBvcHRpb24uXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXNjcm9sbGFibGUpXG4gICAgICovXG4gICAgc2Nyb2xsYWJsZSA/IDogYm9vbGVhbnxTY3JvbGxlckNvbmZpZ3xTY3JvbGxlclxuICAgIC8qKlxuICAgICAqIFRoZSBjbGFzcyB0byBpbnN0YW50aWF0ZSB0byB1c2UgYXMgdGhlIFtzY3JvbGxhYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1zY3JvbGxhYmxlKS4gRGVmYXVsdHMgdG8gW1Njcm9sbGVyXSgjQ29yZS9oZWxwZXIvdXRpbC9TY3JvbGxlcikuXG4gICAgICovXG4gICAgc2Nyb2xsZXJDbGFzcyA/IDogdHlwZW9mIFNjcm9sbGVyXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIHRoZSBbU2Nyb2xsTWFuYWdlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvdXRpbC9TY3JvbGxNYW5hZ2VyKSBjbGFzcyBvbiBpbml0aWFsaXphdGlvbi4gUmV0dXJucyB0aGVcbiAgICAgKiBbU2Nyb2xsTWFuYWdlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvdXRpbC9TY3JvbGxNYW5hZ2VyKSBhdCBydW50aW1lLlxuICAgICAqL1xuICAgIHNjcm9sbE1hbmFnZXIgPyA6IFNjcm9sbE1hbmFnZXJDb25maWd8U2Nyb2xsTWFuYWdlclxuICAgIC8qKlxuICAgICAqIFNlbGVjdGlvbiBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBjaGFuZ2UgdGhlc2UgcHJvcGVydGllcyB0byBjb250cm9sIGhvdyBzZWxlY3Rpb24gd29ya3MgYW5kIHdoYXQgY2FuIGJlXG4gICAgICogc2VsZWN0ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXNlbGVjdGlvbk1vZGUpXG4gICAgICovXG4gICAgc2VsZWN0aW9uTW9kZSA/IDogR3JpZFNlbGVjdGlvbk1vZGVcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGhhdmUgdGhlIGdyaWQgc2hvdyBhIHJlZCBcImNoYW5nZWRcIiB0YWcgaW4gY2VsbHMgd2hvc2VcbiAgICAgKiBmaWVsZCB2YWx1ZSBoYXMgY2hhbmdlZCBhbmQgbm90IHlldCBiZWVuIGNvbW1pdHRlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctc2hvd0RpcnR5KVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc2hvd0RpcnR5LmR1cmluZ0VkaXQgU2V0IHRvIGB0cnVlYCB0byBzaG93IHRoZSByZWQgdGFnIHdoaWxlIGVkaXRpbmcgYSBjZWxsXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBzaG93RGlydHkubmV3UmVjb3JkIFNldCB0byBgdHJ1ZWAgdG8gc2hvdyB0aGUgcmVkIHRhZyBmb3IgYWxsIHRoZSBjZWxscyBvZiB0aGUgbmV3IHJlY29yZFxuICAgICAqL1xuICAgIHNob3dEaXJ0eSA/IDogYm9vbGVhbnx7IGR1cmluZ0VkaXQ6IGJvb2xlYW4sIG5ld1JlY29yZDogYm9vbGVhbiB9XG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciBob3cgbWFueSBjb2x1bW5zIHRvIHNwYW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgc3BhbiA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhpcyB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXN0YXRlZnVsKVxuICAgICAqL1xuICAgIHN0YXRlZnVsID8gOiBib29sZWFufG9iamVjdHxzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBldmVudHMgdGhhdCwgd2hlbiBmaXJlZCBieSB0aGlzIGNvbXBvbmVudCwgc2hvdWxkIHRyaWdnZXIgaXQgdG8gc2F2ZSBpdHMgc3RhdGUgYnkgY2FsbGluZ1xuICAgICAqIFtzYXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2Z1bmN0aW9uLXNhdmVTdGF0ZSkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXN0YXRlZnVsRXZlbnRzKVxuICAgICAqL1xuICAgIHN0YXRlZnVsRXZlbnRzID8gOiBvYmplY3R8c3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBUaGUga2V5IHRvIHVzZSB3aGVuIHNhdmluZyB0aGlzIG9iamVjdCdzIHN0YXRlIGluIHRoZSBbc3RhdGVQcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjY29uZmlnLXN0YXRlUHJvdmlkZXIpLiBJZiB0aGlzIGNvbmZpZyBpc1xuICAgICAqIG5vdCBhc3NpZ25lZCwgYW5kIFtzdGF0ZWZ1bF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjY29uZmlnLXN0YXRlZnVsKSBpcyBub3Qgc2V0IHRvIGBmYWxzZWAsIHRoZSBbaWRdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWlkKVxuICAgICAqIChpZiBleHBsaWNpdGx5IHNwZWNpZmllZCkgd2lsbCBiZSB1c2VkIGFzIHRoZSBgc3RhdGVJZGAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXN0YXRlSWQpXG4gICAgICovXG4gICAgc3RhdGVJZCA/IDogc3RyaW5nfG51bGxcbiAgICAvKipcbiAgICAgKiBUaGUgYFN0YXRlUHJvdmlkZXJgIHRvIHVzZSB0byBzYXZlIGFuZCByZXN0b3JlIHRoaXMgb2JqZWN0J3MgW3N0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNwcm9wZXJ0eS1zdGF0ZSkuIEJ5IGRlZmF1bHQsIGBzdGF0ZWBcbiAgICAgKiB3aWxsIGJlIHNhdmVkIHVzaW5nIHRoZSBbZGVmYXVsdCBzdGF0ZSBwcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvc3RhdGUvU3RhdGVQcm92aWRlciNwcm9wZXJ0eS1pbnN0YW5jZS1zdGF0aWMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1zdGF0ZVByb3ZpZGVyKVxuICAgICAqL1xuICAgIHN0YXRlUHJvdmlkZXIgPyA6IFN0YXRlUHJvdmlkZXJcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGlzIHNldHRpbmdzIG9iamVjdCBjb250cm9scyBob3cgZ3JpZCBpcyByZXN0b3JlZCBmcm9tIHN0YXRlIGRhdGEuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXN0YXRlU2V0dGluZ3MpXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzdG9yZVVuY29uZmlndXJlZENvbHVtbnNdIERldGVybWluZXMgd2hldGhlciB0byByZXN0b3JlIGNvbHVtbnMgZnJvbSB0aGUgc3RhdGUgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgZGVmaW5lZCBpbiB0aGUgZ3JpZCBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHN0YXRlU2V0dGluZ3MgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIFRoZSBzdG9yZSBpbnN0YW5jZSBvciBjb25maWcgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlY29yZHMgdG8gYmUgZGlzcGxheWVkIGJ5IHRoaXMgVHJlZUdyaWQuIElmIGFzc2lnbmluZ1xuICAgICAqIGEgc3RvcmUgaW5zdGFuY2UsIGl0IG11c3QgYmUgY29uZmlndXJlZCB3aXRoIGB0cmVlOiB0cnVlYC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctc3RvcmUpXG4gICAgICovXG4gICAgc3RvcmUgPyA6IFN0b3JlfFN0b3JlQ29uZmlnXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgd2lkZ2V0cyBrZXllZCBieSBuYW1lLiBCeSBkZWZhdWx0ICh3aGVuIG5vIGB0eXBlYCBpcyBnaXZlbiksIHN0cmlwcyBhcmVcbiAgICAgKiBbdG9vbGJhcnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKS4gSWYgeW91IHdhbnQgdG8gcGFzcyBhbiBhcnJheSwgeW91IGNhbiB1c2VcbiAgICAgKiB0aGUgdG9vbGJhcidzIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctaXRlbXMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1zdHJpcHMpXG4gICAgICovXG4gICAgc3RyaXBzID8gOiBSZWNvcmQ8c3RyaW5nLCBDb250YWluZXJJdGVtQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHN1YiBncmlkIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyBrZXllZCBieSBhIGByZWdpb25gIHByb3BlcnR5LlxuICAgICAqIEJ5IGRlZmF1bHQsIGdyaWQgaGFzIGEgJ2xvY2tlZCcgcmVnaW9uIChpZiBjb25maWd1cmVkIHdpdGggbG9ja2VkIGNvbHVtbnMpIGFuZCBhICdub3JtYWwnIHJlZ2lvbi5cbiAgICAgKiBUaGUgJ25vcm1hbCcgcmVnaW9uIGRlZmF1bHRzIHRvIHVzZSBgZmxleDogMWAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXN1YkdyaWRDb25maWdzKVxuICAgICAqL1xuICAgIHN1YkdyaWRDb25maWdzID8gOiBSZWNvcmQ8c3RyaW5nLCBTdWJHcmlkQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LCBvciBhIG1lc3NhZ2UgdG8gYmUgc2hvd24gd2hlbiBDcnVkIE1hbmFnZXJcbiAgICAgKiBpcyBwZXJzaXN0aW5nIGNoYW5nZXMgb24gdGhlIHNlcnZlci4gU2V0IHRvIGBudWxsYCB0byBkaXNhYmxlIGRlZmF1bHQgc3luYyBtYXNrLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1zeW5jTWFzaylcbiAgICAgKi9cbiAgICBzeW5jTWFzayA/IDogc3RyaW5nfE1hc2tDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEEgY29uZmlndXJhdGlvbiBmb3IgdGhlIFt0YWJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWIpIGNyZWF0ZWQgZm9yIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgcGxhY2VkIGluIGFcbiAgICAgKiBbVGFiUGFuZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctdGFiKVxuICAgICAqL1xuICAgIHRhYiA/IDogYm9vbGVhbnxUYWJDb25maWdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgY29udGFpbmVyIGlzIHVzZWQgYXMgYSB0YWIgaW4gYSBUYWJQYW5lbCwgdGhlc2UgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZVxuICAgICAqIFtUYWJCYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJCYXIpIHdoZW4gdGhpcyBjb250YWluZXIgaXMgdGhlIGFjdGl2ZSB0YWIuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXRhYkJhckl0ZW1zKVxuICAgICAqL1xuICAgIHRhYkJhckl0ZW1zID8gOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIEEgQ29uZmlnIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBbVG9vbGJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIpLFxuICAgICAqIG9yIGFycmF5IG9mIGNvbmZpZyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgY2hpbGQgaXRlbXMgb2YgYSBUb29sYmFyLlxuICAgICAqIFRoaXMgY3JlYXRlcyBhIHRvb2xiYXIgZG9ja2VkIHRvIHRoZSB0b3Agb2YgdGhlIHBhbmVsIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBoZWFkZXIuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXRiYXIpXG4gICAgICovXG4gICAgdGJhciA/IDogKENvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQSB0aXRsZSB0byBkaXNwbGF5IGluIHRoZSBoZWFkZXIgb3Igb3duaW5nIFRhYlBhbmVsLiBDYXVzZXMgY3JlYXRpb24gYW5kIGRvY2tpbmcgb2YgYSBoZWFkZXJcbiAgICAgKiB0byB0aGUgdG9wIGlmIG5vIGhlYWRlciBpcyBjb25maWd1cmVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy10aXRsZSlcbiAgICAgKi9cbiAgICB0aXRsZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIFt0b29sc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2wpIHRvIGFkZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBgdGl0bGVgIGluIHRoZSBQYW5lbCBoZWFkZXIuIEVhY2hcbiAgICAgKiBwcm9wZXJ0eSBuYW1lIGlzIHRoZSByZWZlcmVuY2UgYnkgd2hpY2ggYW4gaW5zdGFudGlhdGVkIHRvb2wgbWF5IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBsaXZlXG4gICAgICogYFt0b29sc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L21peGluL1Rvb2xhYmxlI3Byb3BlcnR5LXRvb2xzKWAgcHJvcGVydHkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXRvb2xzKVxuICAgICAqL1xuICAgIHRvb2xzID8gOiBSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPnxudWxsXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIFVJIHRyYW5zaXRpb25zIGZvciB2YXJpb3VzIGFjdGlvbnMgaW4gdGhlIGdyaWQuXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBpbnNlcnRSZWNvcmQgVHJhbnNpdGlvbiByZWNvcmQgaW5zZXJ0aW9uc1xuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVtb3ZlUmVjb3JkIFRyYW5zaXRpb24gcmVjb3JkIHJlbW92YWxzXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSB0b2dnbGVDb2x1bW4gVHJhbnNpdGlvbiBjb2x1bW4gdmlzaWJpbGl0eSBjaGFuZ2VzXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBleHBhbmRDb2xsYXBzZUNvbHVtbiBUcmFuc2l0aW9uIHBhcmVudC9ncm91cCBjb2x1bW4gZXhwYW5kL2NvbGxhcHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSB0b2dnbGVSZWdpb24gVHJhbnNpdGlvbiByZWdpb24gZXhwYW5kL2NvbGxhcHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSB0b2dnbGVUcmVlTm9kZSBUcmFuc2l0aW9uIHRyZWUgbm9kZSBleHBhbmQvY29sbGFwc2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHRvZ2dsZUdyb3VwIFRyYW5zaXRpb24gZ3JvdXAgZXhwYW5kL2NvbGxhcHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBmaWx0ZXJSZW1vdmFsIFRyYW5zaXRpb24gcm93IHJlbW92YWxzIGNhdXNlZCBieSBmaWx0ZXJpbmcgKHVuZGVyIHNwZWNpZmljIGNvbmRpdGlvbnMpXG4gICAgICovXG4gICAgdHJhbnNpdGlvbiA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogQW5pbWF0aW9uIHRyYW5zaXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxuICAgICAqL1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA/IDogbnVtYmVyXG4gICAgdHlwZSA/IDogJ3RyZWVncmlkJ1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3MgbmFtZSBzdWZmaXhlcyB0byBhcHBseSB0byB0aGUgZWxlbWVudHMgcmVuZGVyZWQgYnkgdGhpcyB3aWRnZXQuIFRoaXMgbWF5IGJlIHNwZWNpZmllZFxuICAgICAqIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgYW4gYXJyYXkgb2Ygc3RyaW5ncywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzIHdpdGggdHJ1dGh5XG4gICAgICogdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctdWkpXG4gICAgICovXG4gICAgdWkgPyA6ICdwbGFpbid8J3Rvb2xiYXInfHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBIHdpZGdldHMgd2VpZ2h0IGRldGVybWluZXMgaXRzIHBvc2l0aW9uIGFtb25nIHNpYmxpbmdzIHdoZW4gYWRkZWQgdG8gYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKS5cbiAgICAgKiBIaWdoZXIgd2VpZ2h0cyBnbyBmdXJ0aGVyIGRvd24uXG4gICAgICovXG4gICAgd2VpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyB3aWR0aCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUud2lkdGhgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIHdpZHRoIHN0cmluZyBvciBhIG51bWJlciwgd2hpY2hcbiAgICAgKiB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIHdpZHRoLCBidXQgaW4gc29tZSBjYXNlc1xuICAgICAqIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgd2lkdGggPyA6IHN0cmluZ3xudW1iZXJcblxuICAgIC8vIEZlYXR1cmVzXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIEFJIGFnZW50IGZvciBHcmlkLiBJdCBwcm92aWRlcyBhIGNoYXQgcGFuZWwgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VuZCBtZXNzYWdlcyB0byB0aGVcbiAgICAgKiBhZ2VudCBhbmQgc2VlIHRoZSByZXNwb25zZXMuIFdoaWNoIGFsbG93cyB0aGUgdXNlciB0byB1c2UgbmF0dXJhbCBsYW5ndWFnZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBHcmlkIGluIGRpZmZlcmVudFxuICAgICAqIHdheXMuIEZvciBleGFtcGxlLCB0aGUgdXNlciBjYW4gYXNrIHRoZSBhZ2VudCB0byBmaWx0ZXIgdGhlIGRhdGEsIHNvcnQgaXQsIG9yIHNlbGVjdCBzcGVjaWZpYyByZWNvcmRzLiBUaGUgYWdlbnQgY2FuXG4gICAgICogYWxzbyBwZXJmb3JtIGRhdGEgbWFuaXB1bGF0aW9uIG9wZXJhdGlvbnMgc3VjaCBhcyBhZGRpbmcsIHVwZGF0aW5nLCBkZWxldGluZyByZWNvcmRzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0FJKVxuICAgICAqL1xuICAgIGFpRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEFJfEFJQ29uZmlnXG4gICAgLyoqXG4gICAgICogQUktcG93ZXJlZCBmaWx0ZXIgZmVhdHVyZSBmb3IgR3JpZC4gQWxsb3dzIHVzZXJzIHRvIHR5cGUgbmF0dXJhbCBsYW5ndWFnZSBxdWVyaWVzIHRvIGZpbHRlciBncmlkIGRhdGEuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvYWkvQUlGaWx0ZXIpXG4gICAgICovXG4gICAgYWlGaWx0ZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8QUlGaWx0ZXJ8QUlGaWx0ZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdXNpbmcgYFtDdHJsL0NNRCArIENdYCwgYFtDdHJsL0NNRCArIFhdYCBhbmQgYFtDdHJsL0NNRCArIFZdYCB0byBjdXQsIGNvcHkgYW5kIHBhc3RlIGNlbGwgb3IgY2VsbCByYW5nZXMuIEFsc29cbiAgICAgKiBtYWtlcyBjdXQsIGNvcHkgYW5kIHBhc3RlIGFjdGlvbnMgYXZhaWxhYmxlIHZpYSB0aGUgY2VsbCBjb250ZXh0IG1lbnUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbENvcHlQYXN0ZSlcbiAgICAgKi9cbiAgICBjZWxsQ29weVBhc3RlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxDb3B5UGFzdGV8Q2VsbENvcHlQYXN0ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFkZGluZyB0aGlzIGZlYXR1cmUgdG8gdGhlIGdyaWQgYW5kIG90aGVyIEJyeW50dW0gcHJvZHVjdHMgd2hpY2ggYXJlIGJhc2VkIG9uIHRoZSBHcmlkIChpLmUuIFNjaGVkdWxlciwgU2NoZWR1bGVyUHJvLCBhbmQgR2FudHQpXG4gICAgICogZW5hYmxlcyBjZWxsIGVkaXRpbmcuIEFueSBzdWJjbGFzcyBvZiBbRmllbGRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCkgY2FuIGJlIHVzZWRcbiAgICAgKiBhcyBlZGl0b3IgZm9yIHRoZSBbQ29sdW1uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vQ29sdW1uKS4gVGhlIG1vc3QgcG9wdWxhciBhcmU6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbEVkaXQpXG4gICAgICovXG4gICAgY2VsbEVkaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbEVkaXR8Q2VsbEVkaXRDb25maWdcbiAgICAvKipcbiAgICAgKiBSaWdodCBjbGljayB0byBkaXNwbGF5IGNvbnRleHQgbWVudSBmb3IgY2VsbHMuIFRvIGludm9rZSB0aGUgY2VsbCBtZW51IGluIGEga2V5Ym9hcmQtYWNjZXNzaWJsZSBtYW5uZXIsIHVzZSB0aGVcbiAgICAgKiA8a2JkPlNwYWNlPC9rYmQ+IGtleSB3aGVuIHRoZSBjZWxsIGlzIGZvY3VzZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbE1lbnUpXG4gICAgICovXG4gICAgY2VsbE1lbnVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbE1lbnV8Q2VsbE1lbnVDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIHRvb2x0aXAgd2hlbiBob3ZlcmluZyBjZWxscy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsVG9vbHRpcClcbiAgICAgKi9cbiAgICBjZWxsVG9vbHRpcEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsVG9vbHRpcHxDZWxsVG9vbHRpcENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFkZHMgaW50ZXJhY3RpdmUgY2hhcnRpbmcgdG8gYSBHcmlkLiBbQ2hhcnRzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ2hhcnQvd2lkZ2V0L0NoYXJ0KSBjYW4gYmUgY3JlYXRlZCBmcm9tIGEgc2VsZWN0aW9uIG9mIEdyaWQgZGF0YVxuICAgICAqIGFuZCB1cGRhdGVkIGluIHJlYWx0aW1lIGFzIGRhdGEgY2hhbmdlcy4gU3VwcG9ydHMgbWFueSBjb21tb24gY2hhcnQgdHlwZXMgd2l0aCBleHRlbnNpdmUgc3R5bGluZyBhbmQgY3VzdG9taXphdGlvblxuICAgICAqIG9wdGlvbnMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2hhcnRzKVxuICAgICAqL1xuICAgIGNoYXJ0c0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDaGFydHN8Q2hhcnRzQ29uZmlnXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgW2F1dG9XaWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvY29sdW1uL0NvbHVtbiNjb25maWctYXV0b1dpZHRoKSBjb25maWcgZm9yIGEgZ3JpZCdzIGNvbHVtbnMuIFdoZW4gYSBjb2x1bW5cbiAgICAgKiBoYXMgYGF1dG9XaWR0aGAgc2V0LCB0aGlzIGZlYXR1cmUgbWVhc3VyZXMgdGhlIHJlbmRlcmVkIGNvbnRlbnQgb2YgYWxsIHZpc2libGUgY2VsbHMgaW4gdGhhdCBjb2x1bW5cbiAgICAgKiBhbmQgYWRqdXN0cyB0aGUgY29sdW1uIHdpZHRoIHRvIGZpdC4gVGhlIG1lYXN1cmVtZW50IGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gZGF0YSBjaGFuZ2VzXG4gICAgICogb3Igcm93cyBhcmUgcmVuZGVyZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uQXV0b1dpZHRoKVxuICAgICAqL1xuICAgIGNvbHVtbkF1dG9XaWR0aEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5BdXRvV2lkdGh8Q29sdW1uQXV0b1dpZHRoQ29uZmlnXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSB0b29sYmFyIHdoaWxlIGRyYWdnaW5nIGNvbHVtbiBoZWFkZXJzLiBEcm9wIG9uIGEgYnV0dG9uIGluIHRoZSB0b29sYmFyIHRvIGFjdGl2YXRlIGEgY2VydGFpbiBmdW5jdGlvbixcbiAgICAgKiBmb3IgZXhhbXBsZSB0byBncm91cCBieSB0aGF0IGNvbHVtbi4gVGhpcyBmZWF0dXJlIHNpbXBsaWZpZXMgY2VydGFpbiBvcGVyYXRpb25zIG9uIHRvdWNoIGRldmljZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uRHJhZ1Rvb2xiYXIpXG4gICAgICovXG4gICAgY29sdW1uRHJhZ1Rvb2xiYXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uRHJhZ1Rvb2xiYXJ8Q29sdW1uRHJhZ1Rvb2xiYXJDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIGNvbHVtbiBwaWNrZXIgKHRvIHNob3cvaGlkZSBjb2x1bW5zKSBpbiB0aGUgaGVhZGVyIGNvbnRleHQgbWVudS4gQ29sdW1ucyBjYW4gYmUgZGlzcGxheWVkIGluIHN1YiBtZW51c1xuICAgICAqIGJ5IHJlZ2lvbiBvciB0YWcuIEdyb3VwZWQgaGVhZGVycyBhcmUgZGlzcGxheWVkIGFzIG1lbnUgaGllcmFyY2hpZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUGlja2VyKVxuICAgICAqL1xuICAgIGNvbHVtblBpY2tlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5QaWNrZXJ8Q29sdW1uUGlja2VyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gcmVuYW1lIGNvbHVtbnMgYnkgZWl0aGVyIHJpZ2h0LWNsaWNraW5nIGNvbHVtbiBoZWFkZXIgb3IgdXNpbmcga2V5Ym9hcmQgc2hvcnRjdXRzIHdoZW4gY29sdW1uIGhlYWRlclxuICAgICAqIGlzIGZvY3VzZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUmVuYW1lKVxuICAgICAqL1xuICAgIGNvbHVtblJlbmFtZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZW5hbWV8Q29sdW1uUmVuYW1lQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gcmVvcmRlciBjb2x1bW5zIGJ5IGRyYWdnaW5nIGhlYWRlcnMuIENsaWNrIGFuZCBkcmFnIGEgY29sdW1uIGhlYWRlciB0byBtb3ZlIGl0IHRvIGEgbmV3IHBvc2l0aW9uLlxuICAgICAqIFZpc3VhbCBmZWVkYmFjayBzaG93cyB0aGUgZHJvcCB0YXJnZXQgd2hpbGUgZHJhZ2dpbmcuIFRvIGdldCBub3RpZmllZCBhYm91dCBjb2x1bW4gcmVvcmRlciwgbGlzdGVuIHRvIHRoZVxuICAgICAqIGBjaGFuZ2VgIGV2ZW50IG9uIHRoZSBbY29sdW1uc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZGF0YS9Db2x1bW5TdG9yZSkgc3RvcmUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUmVvcmRlcilcbiAgICAgKi9cbiAgICBjb2x1bW5SZW9yZGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlb3JkZXJ8Q29sdW1uUmVvcmRlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdXNlciB0byByZXNpemUgY29sdW1ucyBieSBkcmFnZ2luZyBhIGhhbmRsZSBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBoZWFkZXIuIEEgZHJhZyBoYW5kbGVcbiAgICAgKiBhcHBlYXJzIHdoZW4gaG92ZXJpbmcgbmVhciB0aGUgcmlnaHQgZWRnZSBvZiBhIGNvbHVtbiBoZWFkZXIuIERyYWdnaW5nIGl0IGFkanVzdHMgdGhlIGNvbHVtbiB3aWR0aCwgcmVzcGVjdGluZ1xuICAgICAqIGFueSBbbWluV2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLW1pbldpZHRoKSBvciBbbWF4V2lkdGhdKCNHcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLW1heFdpZHRoKSBjb25zdHJhaW50cy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Db2x1bW5SZXNpemUpXG4gICAgICovXG4gICAgY29sdW1uUmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlc2l6ZXxDb2x1bW5SZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiBBIGZlYXR1cmUgdGhhdCBhbGxvd3MgZXhwb3J0aW5nIEdyaWQgZGF0YSB0byBFeGNlbCBvciBDU1Ygd2l0aG91dCBpbnZvbHZpbmcgdGhlIHNlcnZlci4gSXQgdXNlc1xuICAgICAqIFtUYWJsZUV4cG9ydGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC91dGlsL1RhYmxlRXhwb3J0ZXIpIGNsYXNzIGFzIGRhdGEgcHJvdmlkZXIsIDNyZCBwYXJ0eSBwcm92aWRlciB0byBnZW5lcmF0ZSBYTFMgZmlsZXMsIGFuZFxuICAgICAqIFtNaWNyb3NvZnQgWE1MIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvb2ZmaWNlL2RvY3VtZW50Zm9ybWF0Lm9wZW54bWwuc3ByZWFkc2hlZXQuYXNweCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvZXhwZXJpbWVudGFsL0V4Y2VsRXhwb3J0ZXIpXG4gICAgICovXG4gICAgZXhjZWxFeHBvcnRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xFeGNlbEV4cG9ydGVyfEV4Y2VsRXhwb3J0ZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBBbiBleHBlcmltZW50YWwgZmVhdHVyZSB0aGF0IGxldHMgdXNlcnMgZHJvcCBmaWxlcyBvbiBhIFdpZGdldC4gVGhlIHdpZGdldCBmaXJlcyBhXG4gICAgICogW2ZpbGVEcm9wXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2V4cGVyaW1lbnRhbC9GaWxlRHJvcCNldmVudC1maWxlRHJvcCkgZXZlbnQgd2hlbiBhIGZpbGUgaXMgZHJvcHBlZCBvbnRvIGl0LiBJbiB0aGUgZXZlbnQsIHlvdSBnZXQgYWNjZXNzIHRvIHRoZSByYXdcbiAgICAgKiBmaWxlcyBhcyBzdHJpbmdzLCB0aGF0IHdlcmUgcGFyc2VkIGJ5IGNhbGxpbmcgYHJlYWRBc0JpbmFyeVN0cmluZ2AuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvZXhwZXJpbWVudGFsL0ZpbGVEcm9wKVxuICAgICAqL1xuICAgIGZpbGVEcm9wRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbGVEcm9wfEZpbGVEcm9wQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGFkZHMgYSBmaWxsIGhhbmRsZSB0byBhIEdyaWQgcmFuZ2Ugc2VsZWN0aW9uLCB3aGljaCB3aGVuIGRyYWdnZWQsIGZpbGxzIHRoZSBjZWxscyBiZWluZyBkcmFnZ2VkIG92ZXJcbiAgICAgKiB3aXRoIHZhbHVlcyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSBvcmlnaW5hbCBzZWxlY3RlZCByYW5nZS4gVGhpcyBpcyBzaW1pbGFyIHRvIGZ1bmN0aW9uYWxpdHkgbm9ybWFsbHkgc2VlbiBpblxuICAgICAqIHZhcmlvdXMgc3ByZWFkc2hlZXQgYXBwbGljYXRpb25zLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0ZpbGxIYW5kbGUpXG4gICAgICovXG4gICAgZmlsbEhhbmRsZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWxsSGFuZGxlfEZpbGxIYW5kbGVDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIGZpbHRlcmluZyBvZiB0aGUgZ3JpZCBieSBzZXR0aW5ncyBmaWx0ZXJzIG9uIGNvbHVtbnMuIFRoZSBhY3R1YWwgZmlsdGVyaW5nIGlzIGRvbmUgYnkgdGhlIHN0b3JlLlxuICAgICAqIEZvciBpbmZvIG9uIHByb2dyYW1tYXRpY2FsbHkgaGFuZGxpbmcgZmlsdGVycywgc2VlIFtTdG9yZUZpbHRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvZGF0YS9taXhpbi9TdG9yZUZpbHRlcikuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvRmlsdGVyKVxuICAgICAqL1xuICAgIGZpbHRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWx0ZXJ8RmlsdGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IGFsbG93cyBmaWx0ZXJpbmcgb2YgdGhlIGdyaWQgYnkgZW50ZXJpbmcgZmlsdGVycyBvbiBjb2x1bW4gaGVhZGVycy5cbiAgICAgKiBUaGUgYWN0dWFsIGZpbHRlcmluZyBpcyBkb25lIGJ5IHRoZSBzdG9yZS5cbiAgICAgKiBGb3IgaW5mbyBvbiBwcm9ncmFtbWF0aWNhbGx5IGhhbmRsaW5nIGZpbHRlcnMsIHNlZSBbU3RvcmVGaWx0ZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvbWl4aW4vU3RvcmVGaWx0ZXIpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0ZpbHRlckJhcilcbiAgICAgKi9cbiAgICBmaWx0ZXJCYXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsdGVyQmFyfEZpbHRlckJhckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgcmVuZGVyaW5nIGFuZCBoYW5kbGluZyBvZiByb3cgZ3JvdXBzLiBUaGUgYWN0dWFsIGdyb3VwaW5nIGlzIGRvbmUgaW4gdGhlIHN0b3JlLCBidXQgdHJpZ2dlcmVkIGJ5XG4gICAgICogPGtiZD5TaGlmdDwva2JkPiArIGNsaWNraW5nIGhlYWRlcnMsIG9yIGJ5IHVzaW5nIHRoZSBjb250ZXh0IG1lbnUsIG9yIGJ5IHVzaW5nIHR3byBmaW5nZXIgdGFwIChvbmUgb24gaGVhZGVyLFxuICAgICAqIG9uZSBhbnl3aGVyZSBvbiBncmlkKS4gVXNlIDxrYmQ+U2hpZnQ8L2tiZD4gKyA8a2JkPkFsdDwva2JkPiArIGNsaWNrLCBvciB0aGUgY29udGV4dCBtZW51LCB0byByZW1vdmUgYSBjb2x1bW5cbiAgICAgKiBncm91cGVyLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0dyb3VwKVxuICAgICAqL1xuICAgIGdyb3VwRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyb3VwfEdyb3VwQ29uZmlnXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBzdW1tYXJ5IHJvdyBhcyBhIGdyb3VwIGZvb3RlciBpbiBhIGdyb3VwZWQgZ3JpZC4gVXNlcyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gY29sdW1ucyBhc1xuICAgICAqIFtTdW1tYXJ5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N1bW1hcnkpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0dyb3VwU3VtbWFyeSlcbiAgICAgKi9cbiAgICBncm91cFN1bW1hcnlGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8R3JvdXBTdW1tYXJ5fEdyb3VwU3VtbWFyeUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFJpZ2h0IGNsaWNrIGNvbHVtbiBoZWFkZXIgb3IgZm9jdXMgaXQgYW5kIHByZXNzIFNQQUNFIGtleSB0byBzaG93IHRoZSBjb250ZXh0IG1lbnUgZm9yIGhlYWRlcnMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvSGVhZGVyTWVudSlcbiAgICAgKi9cbiAgICBoZWFkZXJNZW51RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEhlYWRlck1lbnV8SGVhZGVyTWVudUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBhbGxvd3MgcmVjb3JkcyB3aGljaCBzYXRpc2Z5IGEgY2VydGFpbiBjb25kaXRpb24gdG8gYmUgbG9ja2VkIGF0IHRoZSB0b3Agb2YgdGhlIGdyaWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvTG9ja1Jvd3MpXG4gICAgICovXG4gICAgbG9ja1Jvd3NGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TG9ja1Jvd3N8TG9ja1Jvd3NDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgbWVyZ2VzIGNlbGxzIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBpbiBzb3J0ZWQgKG9yIFtvcHRpb25hbGx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL01lcmdlQ2VsbHMjY29uZmlnLXNvcnRlZE9ubHkpIGFueSkgY29sdW1uc1xuICAgICAqIGNvbmZpZ3VyZWQgdG8gW21lcmdlQ2VsbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLW1lcmdlQ2VsbHMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL01lcmdlQ2VsbHMpXG4gICAgICovXG4gICAgbWVyZ2VDZWxsc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xNZXJnZUNlbGxzfE1lcmdlQ2VsbHNDb25maWdcbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgUERGL1BORyBmaWxlcyBmcm9tIHRoZSBHcmlkIGNvbXBvbmVudC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9leHBvcnQvUGRmRXhwb3J0KVxuICAgICAqL1xuICAgIHBkZkV4cG9ydEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQZGZFeHBvcnR8UGRmRXhwb3J0Q29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHBpbm5pbmcgY29sdW1ucyB0byB0aGUgc3RhcnQgb3IgZW5kIHJlZ2lvbiBvZiB0aGUgZ3JpZCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHN1YkdyaWQgY29uZmlndXJhdGlvbnMuXG4gICAgICogV2hlbiBwaW5uaW5nIHRvIGEgcmVnaW9uIHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LCB0aGUgZmVhdHVyZSBjcmVhdGVzIHRoZSByZXF1aXJlZCBzdWJHcmlkIG9uIHRoZSBmbHkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUGluQ29sdW1ucylcbiAgICAgKi9cbiAgICBwaW5Db2x1bW5zRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBpbkNvbHVtbnN8UGluQ29sdW1uc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyBwcmludGluZyBHcmlkIGNvbnRlbnRzIHVzaW5nIGJyb3dzZXIgcHJpbnQgZGlhbG9nLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2V4cG9ydC9QcmludClcbiAgICAgKi9cbiAgICBwcmludEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQcmludHxQcmludENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VhcmNoIGluIGEgY29sdW1uIGJ5IGZvY3VzaW5nIGEgY2VsbCBhbmQgdHlwaW5nLiBOYXZpZ2F0ZSBiZXR3ZWVuIGhpdHMgdXNpbmcgdGhlXG4gICAgICoga2V5Ym9hcmQsIDxrYmQ+ZjM8L2tiZD4gb3IgPGtiZD5jdHJsPC9rYmQ+LzxrYmQ+Y21kPC9rYmQ+ICsgPGtiZD5nPC9rYmQ+IG1vdmVzIHRvIG5leHQsIGFsc28gcHJlc3NpbmdcbiAgICAgKiA8a2JkPnNoaWZ0PC9rYmQ+IG1vdmVzIHRvIHByZXZpb3VzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1F1aWNrRmluZClcbiAgICAgKi9cbiAgICBxdWlja0ZpbmRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UXVpY2tGaW5kfFF1aWNrRmluZENvbmZpZ1xuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBzcGxpdHRlciBiZXR3ZWVuIGdyaWQgW3NlY3Rpb25zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1N1YkdyaWQpIGRyYWdnYWJsZSwgdG8gbGV0IHVzZXJzIHJlc2l6ZSwgYW5kXG4gICAgICogY29sbGFwc2UvZXhwYW5kIHRoZSBzZWN0aW9ucy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9SZWdpb25SZXNpemUpXG4gICAgICovXG4gICAgcmVnaW9uUmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJlZ2lvblJlc2l6ZXxSZWdpb25SZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvdyB1c2luZyBbQ3RybC9DTUQgKyBDL1hdIGFuZCBbQ3RybC9DTUQgKyBWXSB0byBjb3B5L2N1dC1hbmQtcGFzdGUgcm93cy4gQWxzbyBtYWtlcyBjdXQsIGNvcHkgYW5kIHBhc3RlIGFjdGlvbnNcbiAgICAgKiBhdmFpbGFibGUgdmlhIHRoZSBjZWxsIGNvbnRleHQgbWVudS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dDb3B5UGFzdGUpXG4gICAgICovXG4gICAgcm93Q29weVBhc3RlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0NvcHlQYXN0ZXxSb3dDb3B5UGFzdGVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIGVkaXRpbmcgb2YgZW50aXJlIHJvd3MgaW4gYSBncmlkIGluIGEgZG9ja2VkIHBhbmVsIHdoaWNoIGJ5IGRlZmF1bHQgc2xpZGVzIG91dCBmcm9tIHRoZSByaWdodC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dFZGl0KVxuICAgICAqL1xuICAgIHJvd0VkaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Um93RWRpdHxSb3dFZGl0Q29uZmlnXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBleHBhbmRpbmcgb2YgR3JpZCByb3dzIGJ5IGVpdGhlciByb3cgY2xpY2sgb3IgZG91YmxlIGNsaWNrLCBvciBieSBhZGRpbmcgYSBzZXBhcmF0ZSBHcmlkIGNvbHVtbiB3aGljaCByZW5kZXJzXG4gICAgICogYSBidXR0b24gdGhhdCBleHBhbmRzIG9yIGNvbGxhcHNlcyB0aGUgcm93LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd0V4cGFuZGVyKVxuICAgICAqL1xuICAgIHJvd0V4cGFuZGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0V4cGFuZGVyfFJvd0V4cGFuZGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gcmVvcmRlciByb3dzIGJ5IGRyYWdnaW5nIHRoZW0uIFRvIGdldCBub3RpZmllZCBhYm91dCByb3cgcmVvcmRlciBsaXN0ZW4gdG8gYGNoYW5nZWAgZXZlbnRcbiAgICAgKiBvbiB0aGUgZ3JpZCBbc3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd1Jlb3JkZXIpXG4gICAgICovXG4gICAgcm93UmVvcmRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dSZW9yZGVyfFJvd1Jlb3JkZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHVzZXIgdG8gY2hhbmdlIHJvdyBoZWlnaHQgYnkgZHJhZ2dpbmcgdGhlIGJvdHRvbSByb3cgYm9yZGVyLiBBZnRlciBhIHJlc2l6ZSBvcGVyYXRpb24sIHRoZSBbcm93SGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9kYXRhL0dyaWRSb3dNb2RlbCNmaWVsZC1yb3dIZWlnaHQpXG4gICAgICogZmllbGQgb2YgdGhlIHJlY29yZCBpcyB1cGRhdGVkICh3aGVuIFthcHBseVRvQWxsUm93c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dSZXNpemUjY29uZmlnLWFwcGx5VG9BbGxSb3dzKSBpcyBgZmFsc2VgKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dSZXNpemUpXG4gICAgICovXG4gICAgcm93UmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd1Jlc2l6ZXxSb3dSZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiA8ZGl2IGNsYXNzPVwiZXh0ZXJuYWwtZXhhbXBsZSB2ZXJ0aWNhbFwiIGRhdGEtZmlsZT1cIkdyaWQvZmVhdHVyZS9TZWFyY2guanNcIj48L2Rpdj5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TZWFyY2gpXG4gICAgICovXG4gICAgc2VhcmNoRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNlYXJjaHxTZWFyY2hDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3Mgc29ydGluZyBvZiBncmlkIGJ5IGNsaWNraW5nIChvciB0YXBwaW5nKSBoZWFkZXJzLCBhbHNvIGRpc3BsYXlzIHdoaWNoIGNvbHVtbnMgZ3JpZCBpcyBzb3J0ZWQgYnkgKG51bWJlcmVkIGlmXG4gICAgICogdXNpbmcgbXVsdGlzb3J0KS4gVXNlIG1vZGlmaWVyIGtleXMgZm9yIG11bHRpc29ydGluZzogW0N0cmwvQ01EICsgY2xpY2tdIHRvIGFkZCBzb3J0ZXIsIFtDdHJsL0NNRCArIEFsdCArIGNsaWNrXSB0byByZW1vdmUgc29ydGVyLlxuICAgICAqIFRoZSBhY3R1YWwgc29ydGluZyBpcyBkb25lIGJ5IHRoZSBzdG9yZSwgc2VlIFtTdG9yZS5zb3J0KCldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvbWl4aW4vU3RvcmVTb3J0I2Z1bmN0aW9uLXNvcnQpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1NvcnQpXG4gICAgICovXG4gICAgc29ydEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTb3J0fFNvcnRDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIHNwbGl0dGluZyB0aGUgR3JpZCBpbnRvIG11bHRpcGxlIHZpZXdzLCBlaXRoZXIgYnkgdXNpbmcgdGhlIGNlbGwgY29udGV4dCBtZW51LCBvclxuICAgICAqIHByb2dyYW1tYXRpY2FsbHkgYnkgY2FsbGluZyBbc3BsaXQoKV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TcGxpdCNmdW5jdGlvbi1zcGxpdCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3BsaXQpXG4gICAgICovXG4gICAgc3BsaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3BsaXR8U3BsaXRDb25maWdcbiAgICAvKipcbiAgICAgKiBBIGZlYXR1cmUgd2hpY2ggcGlucyBjZWxsIGNvbnRlbnQgdG8gdGhlIHRvcCBvZiB0aGUgZ3JpZCB3aGlsZSB0aGUgcm93IHNjcm9sbHMgb2ZmIHRoZSB0b3AgYnV0IGlzIHN0aWxsIHZpc2libGUuIFZlcnlcbiAgICAgKiBzaW1pbGFyIHRvIG5hdGl2ZSBgcG9zaXRpb246IHN0aWNreWAsIHdoaWNoIGJlY2F1c2Ugb2YgR3JpZCdzIG11bHRpcGxlLXJlZ2lvbiBzZXR1cCB1bmZvcnR1bmF0ZWx5IGNhbm5vdCBiZSB1c2VkIHRvXG4gICAgICogYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3RpY2t5Q2VsbHMpXG4gICAgICovXG4gICAgc3RpY2t5Q2VsbHNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3RpY2t5Q2VsbHN8U3RpY2t5Q2VsbHNDb25maWdcbiAgICAvKipcbiAgICAgKiBTdHJpcGVzIHJvd3MgYnkgYWRkaW5nIGFsdGVybmF0aW5nIENTUyBjbGFzc2VzIHRvIGFsbCByb3cgZWxlbWVudHMgKGBiLWV2ZW5gIGFuZCBgYi1vZGRgKS5cbiAgICAgKiBUaGlzIGltcHJvdmVzIHZpc3VhbCByZWFkYWJpbGl0eSBpbiBkYXRhLWhlYXZ5IGdyaWRzIGJ5IGdpdmluZyBhZGphY2VudCByb3dzIGRpZmZlcmVudCBiYWNrZ3JvdW5kIGNvbG9ycy5cbiAgICAgKiBTdHlsZSB0aGUgc3RyaXBlZCByb3dzIHVzaW5nIHRoZSBgLmItZXZlbmAgYW5kIGAuYi1vZGRgIENTUyBjbGFzc2VzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N0cmlwZSlcbiAgICAgKi9cbiAgICBzdHJpcGVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3RyaXBlfFN0cmlwZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgc3VtbWFyeSByb3cgaW4gdGhlIGdyaWQgZm9vdGVyLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N1bW1hcnkpXG4gICAgICovXG4gICAgc3VtbWFyeUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdW1tYXJ5fFN1bW1hcnlDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgbWFrZXMgdGhlIGdyaWQgd29yayBtb3JlIGxpa2UgYSB0cmVlLiBJbmNsdWRlZCBieSBkZWZhdWx0IGluIFtUcmVlR3JpZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCkuIFJlcXVpcmVzXG4gICAgICogZXhhY3RseSBvbmUgW1RyZWVDb2x1bW5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9UcmVlQ29sdW1uKSBhbW9uZyBncmlkcyBjb2x1bW5zLiBUaGF0IGNvbHVtbiB3aWxsIGhhdmUgaXRzIHJlbmRlcmVyIHJlcGxhY2VkIHdpdGggYVxuICAgICAqIHRyZWUgcmVuZGVyZXIgdGhhdCBhZGRzIHBhZGRpbmcgYW5kIGljb24gdG8gZ2l2ZSB0aGUgYXBwZWFyYW5jZSBvZiBhIHRyZWUuIFRoZSBvcmlnaW5hbCByZW5kZXJlciBpcyBwcmVzZXJ2ZWQgYW5kXG4gICAgICogYWxzbyBjYWxsZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvVHJlZSlcbiAgICAgKi9cbiAgICB0cmVlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWV8VHJlZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgZmVhdHVyZSB0aGF0IGFsbG93cyB0cmFuc2Zvcm1pbmcgYSBmbGF0IGRhdGFzZXQgKG9yIHRoZSBsZWF2ZXMgb2YgYSBoaWVyYXJjaGljYWwpIGludG8gYSB0cmVlIGJ5IHNwZWNpZnlpbmcgYVxuICAgICAqIHJlY29yZCBmaWVsZCBwZXIgcGFyZW50IGxldmVsLiBQYXJlbnRzIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gZWFjaCBsZWFmJ3MgdmFsdWUgZm9yIHRob3NlIGZpZWxkcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9UcmVlR3JvdXApXG4gICAgICovXG4gICAgdHJlZUdyb3VwRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWVHcm91cHxUcmVlR3JvdXBDb25maWdcblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLXRyZWUtZ3JpZCcsXG4gICAgdGVtcGxhdGUgOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtVHJlZUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlQ2xhc3MgPSBUcmVlR3JpZDtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VOYW1lID0gJ1RyZWVHcmlkJztcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1FdmVudHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAnb25CZWZvcmVDYW5jZWxDZWxsRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUNhbmNlbFJvd0VkaXQnLFxuICAgICAgICAnb25CZWZvcmVDZWxsRWRpdFN0YXJ0JyxcbiAgICAgICAgJ29uQmVmb3JlQ2VsbFJhbmdlRGVsZXRlJyxcbiAgICAgICAgJ29uQmVmb3JlQ2VsbFJhbmdlRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUNvbHVtbkNvbGxhcHNlVG9nZ2xlJyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uRHJvcEZpbmFsaXplJyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uUmVzaXplJyxcbiAgICAgICAgJ29uQmVmb3JlQ29weScsXG4gICAgICAgICdvbkJlZm9yZUNTVkV4cG9ydCcsXG4gICAgICAgICdvbkJlZm9yZURlc3Ryb3knLFxuICAgICAgICAnb25CZWZvcmVFeGNlbEV4cG9ydCcsXG4gICAgICAgICdvbkJlZm9yZUZpbGxIYW5kbGVEcmFnU3RhcnQnLFxuICAgICAgICAnb25CZWZvcmVGaW5pc2hDZWxsRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUZpbmlzaFJvd0VkaXQnLFxuICAgICAgICAnb25CZWZvcmVIaWRlJyxcbiAgICAgICAgJ29uQmVmb3JlUGFzdGUnLFxuICAgICAgICAnb25CZWZvcmVQZGZFeHBvcnQnLFxuICAgICAgICAnb25CZWZvcmVSZW5kZXJSb3cnLFxuICAgICAgICAnb25CZWZvcmVSZW5kZXJSb3dzJyxcbiAgICAgICAgJ29uQmVmb3JlUm93Q29sbGFwc2UnLFxuICAgICAgICAnb25CZWZvcmVSb3dFeHBhbmQnLFxuICAgICAgICAnb25CZWZvcmVTZWxlY3Rpb25DaGFuZ2UnLFxuICAgICAgICAnb25CZWZvcmVTZXRSZWNvcmQnLFxuICAgICAgICAnb25CZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhcnRSb3dFZGl0JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhdGVBcHBseScsXG4gICAgICAgICdvbkJlZm9yZVN0YXRlU2F2ZScsXG4gICAgICAgICdvbkJlZm9yZVRvZ2dsZUdyb3VwJyxcbiAgICAgICAgJ29uQmVmb3JlVG9nZ2xlTm9kZScsXG4gICAgICAgICdvbkNhbmNlbENlbGxFZGl0JyxcbiAgICAgICAgJ29uQ2F0Y2hBbGwnLFxuICAgICAgICAnb25DZWxsQ2xpY2snLFxuICAgICAgICAnb25DZWxsQ29udGV4dE1lbnUnLFxuICAgICAgICAnb25DZWxsRGJsQ2xpY2snLFxuICAgICAgICAnb25DZWxsTWVudUJlZm9yZVNob3cnLFxuICAgICAgICAnb25DZWxsTWVudUl0ZW0nLFxuICAgICAgICAnb25DZWxsTWVudVNob3cnLFxuICAgICAgICAnb25DZWxsTWVudVRvZ2dsZUl0ZW0nLFxuICAgICAgICAnb25DZWxsTW91c2VFbnRlcicsXG4gICAgICAgICdvbkNlbGxNb3VzZUxlYXZlJyxcbiAgICAgICAgJ29uQ2VsbE1vdXNlT3V0JyxcbiAgICAgICAgJ29uQ2VsbE1vdXNlT3ZlcicsXG4gICAgICAgICdvbkNvbGxhcHNlJyxcbiAgICAgICAgJ29uQ29sbGFwc2VOb2RlJyxcbiAgICAgICAgJ29uQ29sdW1uQ29sbGFwc2VUb2dnbGUnLFxuICAgICAgICAnb25Db2x1bW5EcmFnJyxcbiAgICAgICAgJ29uQ29sdW1uRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uQ29sdW1uRHJvcCcsXG4gICAgICAgICdvbkNvbHVtblJlc2l6ZScsXG4gICAgICAgICdvbkNvbHVtblJlc2l6ZVN0YXJ0JyxcbiAgICAgICAgJ29uQ29udGV4dE1lbnVJdGVtJyxcbiAgICAgICAgJ29uQ29udGV4dE1lbnVUb2dnbGVJdGVtJyxcbiAgICAgICAgJ29uQ29weScsXG4gICAgICAgICdvbkRhdGFDaGFuZ2UnLFxuICAgICAgICAnb25EZXN0cm95JyxcbiAgICAgICAgJ29uRGlydHlTdGF0ZUNoYW5nZScsXG4gICAgICAgICdvbkRyYWdTZWxlY3RpbmcnLFxuICAgICAgICAnb25FbGVtZW50Q3JlYXRlZCcsXG4gICAgICAgICdvbkV4cGFuZCcsXG4gICAgICAgICdvbkV4cGFuZE5vZGUnLFxuICAgICAgICAnb25GaWxlRHJvcCcsXG4gICAgICAgICdvbkZpbGxIYW5kbGVCZWZvcmVEcmFnRmluYWxpemUnLFxuICAgICAgICAnb25GaWxsSGFuZGxlRHJhZycsXG4gICAgICAgICdvbkZpbGxIYW5kbGVEcmFnQWJvcnQnLFxuICAgICAgICAnb25GaWxsSGFuZGxlRHJhZ0VuZCcsXG4gICAgICAgICdvbkZpbGxIYW5kbGVEcmFnU3RhcnQnLFxuICAgICAgICAnb25GaW5pc2hDZWxsRWRpdCcsXG4gICAgICAgICdvbkZpbmlzaFJvd0VkaXQnLFxuICAgICAgICAnb25Gb2N1c0luJyxcbiAgICAgICAgJ29uRm9jdXNPdXQnLFxuICAgICAgICAnb25HcmlkUm93QmVmb3JlRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uR3JpZFJvd0JlZm9yZURyb3BGaW5hbGl6ZScsXG4gICAgICAgICdvbkdyaWRSb3dEcmFnJyxcbiAgICAgICAgJ29uR3JpZFJvd0RyYWdBYm9ydCcsXG4gICAgICAgICdvbkdyaWRSb3dEcmFnU3RhcnQnLFxuICAgICAgICAnb25HcmlkUm93RHJvcCcsXG4gICAgICAgICdvbkhlYWRlckNsaWNrJyxcbiAgICAgICAgJ29uSGVhZGVyTWVudUJlZm9yZVNob3cnLFxuICAgICAgICAnb25IZWFkZXJNZW51SXRlbScsXG4gICAgICAgICdvbkhlYWRlck1lbnVTaG93JyxcbiAgICAgICAgJ29uSGVhZGVyTWVudVRvZ2dsZUl0ZW0nLFxuICAgICAgICAnb25IaWRlJyxcbiAgICAgICAgJ29uTG9ja1Jvd3MnLFxuICAgICAgICAnb25Nb3VzZU91dCcsXG4gICAgICAgICdvbk1vdXNlT3ZlcicsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUGFzdGUnLFxuICAgICAgICAnb25QZGZFeHBvcnQnLFxuICAgICAgICAnb25SZWFkT25seScsXG4gICAgICAgICdvblJlY29tcG9zZScsXG4gICAgICAgICdvblJlbmRlclJvdycsXG4gICAgICAgICdvblJlbmRlclJvd3MnLFxuICAgICAgICAnb25SZXNpemUnLFxuICAgICAgICAnb25SZXNwb25zaXZlJyxcbiAgICAgICAgJ29uUm93Q29sbGFwc2UnLFxuICAgICAgICAnb25Sb3dFeHBhbmQnLFxuICAgICAgICAnb25Sb3dNb3VzZUVudGVyJyxcbiAgICAgICAgJ29uUm93TW91c2VMZWF2ZScsXG4gICAgICAgICdvblNjcm9sbCcsXG4gICAgICAgICdvblNlbGVjdGlvbkNoYW5nZScsXG4gICAgICAgICdvblNlbGVjdGlvbk1vZGVDaGFuZ2UnLFxuICAgICAgICAnb25TaG93JyxcbiAgICAgICAgJ29uU3BsaXQnLFxuICAgICAgICAnb25TcGxpdHRlckNvbGxhcHNlQ2xpY2snLFxuICAgICAgICAnb25TcGxpdHRlckRyYWdFbmQnLFxuICAgICAgICAnb25TcGxpdHRlckRyYWdTdGFydCcsXG4gICAgICAgICdvblNwbGl0dGVyRXhwYW5kQ2xpY2snLFxuICAgICAgICAnb25TdGFydENlbGxFZGl0JyxcbiAgICAgICAgJ29uU3RhcnRSb3dFZGl0JyxcbiAgICAgICAgJ29uU3ViR3JpZENvbGxhcHNlJyxcbiAgICAgICAgJ29uU3ViR3JpZEV4cGFuZCcsXG4gICAgICAgICdvblRvZ2dsZUdyb3VwJyxcbiAgICAgICAgJ29uVG9nZ2xlTm9kZScsXG4gICAgICAgICdvblRvb2xDbGljaycsXG4gICAgICAgICdvblRyZWVHcm91cCcsXG4gICAgICAgICdvblVubG9ja1Jvd3MnLFxuICAgICAgICAnb25VbnNwbGl0J1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2FpRmVhdHVyZScsXG4gICAgICAgICdhaUZpbHRlckZlYXR1cmUnLFxuICAgICAgICAnY2VsbENvcHlQYXN0ZUZlYXR1cmUnLFxuICAgICAgICAnY2VsbEVkaXRGZWF0dXJlJyxcbiAgICAgICAgJ2NlbGxNZW51RmVhdHVyZScsXG4gICAgICAgICdjZWxsVG9vbHRpcEZlYXR1cmUnLFxuICAgICAgICAnY2hhcnRzRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5BdXRvV2lkdGhGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtbkRyYWdUb29sYmFyRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5QaWNrZXJGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtblJlbmFtZUZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVvcmRlckZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVzaXplRmVhdHVyZScsXG4gICAgICAgICdleGNlbEV4cG9ydGVyRmVhdHVyZScsXG4gICAgICAgICdmaWxlRHJvcEZlYXR1cmUnLFxuICAgICAgICAnZmlsbEhhbmRsZUZlYXR1cmUnLFxuICAgICAgICAnZmlsdGVyRmVhdHVyZScsXG4gICAgICAgICdmaWx0ZXJCYXJGZWF0dXJlJyxcbiAgICAgICAgJ2dyb3VwRmVhdHVyZScsXG4gICAgICAgICdncm91cFN1bW1hcnlGZWF0dXJlJyxcbiAgICAgICAgJ2hlYWRlck1lbnVGZWF0dXJlJyxcbiAgICAgICAgJ2xvY2tSb3dzRmVhdHVyZScsXG4gICAgICAgICdtZXJnZUNlbGxzRmVhdHVyZScsXG4gICAgICAgICdwZGZFeHBvcnRGZWF0dXJlJyxcbiAgICAgICAgJ3BpbkNvbHVtbnNGZWF0dXJlJyxcbiAgICAgICAgJ3ByaW50RmVhdHVyZScsXG4gICAgICAgICdxdWlja0ZpbmRGZWF0dXJlJyxcbiAgICAgICAgJ3JlZ2lvblJlc2l6ZUZlYXR1cmUnLFxuICAgICAgICAncm93Q29weVBhc3RlRmVhdHVyZScsXG4gICAgICAgICdyb3dFZGl0RmVhdHVyZScsXG4gICAgICAgICdyb3dFeHBhbmRlckZlYXR1cmUnLFxuICAgICAgICAncm93UmVvcmRlckZlYXR1cmUnLFxuICAgICAgICAncm93UmVzaXplRmVhdHVyZScsXG4gICAgICAgICdzZWFyY2hGZWF0dXJlJyxcbiAgICAgICAgJ3NvcnRGZWF0dXJlJyxcbiAgICAgICAgJ3NwbGl0RmVhdHVyZScsXG4gICAgICAgICdzdGlja3lDZWxsc0ZlYXR1cmUnLFxuICAgICAgICAnc3RyaXBlRmVhdHVyZScsXG4gICAgICAgICdzdW1tYXJ5RmVhdHVyZScsXG4gICAgICAgICd0cmVlRmVhdHVyZScsXG4gICAgICAgICd0cmVlR3JvdXBGZWF0dXJlJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtVHJlZUdyaWRDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FuaW1hdGVGaWx0ZXJSZW1vdmFscycsXG4gICAgICAgICdhbmltYXRlUmVtb3ZpbmdSb3dzJyxcbiAgICAgICAgJ2FuaW1hdGVUcmVlTm9kZVRvZ2dsZScsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2F1dG9IZWlnaHQnLFxuICAgICAgICAnYmJhcicsXG4gICAgICAgICdib2R5Q2xzJyxcbiAgICAgICAgJ2JvcmRlcicsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZWxsRWxsaXBzaXMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29sdW1uTGluZXMnLFxuICAgICAgICAnY29sdW1ucycsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQnLFxuICAgICAgICAnZGF0YScsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkZWZhdWx0UmVnaW9uJyxcbiAgICAgICAgJ2Rlc3Ryb3lTdG9yZScsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2Rpc2FibGVHcmlkQ29sdW1uSWRXYXJuaW5nJyxcbiAgICAgICAgJ2Rpc2FibGVHcmlkUm93TW9kZWxXYXJuaW5nJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhd2VyJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2VtcHR5VGV4dCcsXG4gICAgICAgICdlbmFibGVTdGlja3knLFxuICAgICAgICAnZW5hYmxlVGV4dFNlbGVjdGlvbicsXG4gICAgICAgICdlbmFibGVVbmRvUmVkb0tleXMnLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZpbGxMYXN0Q29sdW1uJyxcbiAgICAgICAgJ2ZpeGVkUm93SGVpZ2h0JyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2Zvcm11bGFQcm92aWRlcnMnLFxuICAgICAgICAnZnVsbFJvd1JlZnJlc2gnLFxuICAgICAgICAnZ2V0Um93SGVpZ2h0JyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVGb290ZXJzJyxcbiAgICAgICAgJ2hpZGVIZWFkZXJzJyxcbiAgICAgICAgJ2hpZGVIb3Jpem9udGFsU2Nyb2xsYmFyJyxcbiAgICAgICAgJ2hvdmVyQ2xzJyxcbiAgICAgICAgJ2ljb24nLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2FkTWFzaycsXG4gICAgICAgICdsb2FkTWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ2xvYWRNYXNrRXJyb3InLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9uZ1ByZXNzVGltZScsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnb3ZlcmZsb3dUd2luQ29uZmlnJyxcbiAgICAgICAgJ3BsdWdpbnMnLFxuICAgICAgICAncHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbCcsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZW5kaXRpb24nLFxuICAgICAgICAncmVzaXphYmxlJyxcbiAgICAgICAgJ3Jlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXInLFxuICAgICAgICAncmVzcG9uc2l2ZUxldmVscycsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9sZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdyb3dIZWlnaHQnLFxuICAgICAgICAncm93TGluZXMnLFxuICAgICAgICAncnRsJyxcbiAgICAgICAgJ3Njcm9sbGFibGUnLFxuICAgICAgICAnc2Nyb2xsZXJDbGFzcycsXG4gICAgICAgICdzY3JvbGxNYW5hZ2VyJyxcbiAgICAgICAgJ3NlbGVjdGlvbk1vZGUnLFxuICAgICAgICAnc2hvd0RpcnR5JyxcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICAnc3RhdGVmdWwnLFxuICAgICAgICAnc3RhdGVmdWxFdmVudHMnLFxuICAgICAgICAnc3RhdGVJZCcsXG4gICAgICAgICdzdGF0ZVByb3ZpZGVyJyxcbiAgICAgICAgJ3N0YXRlU2V0dGluZ3MnLFxuICAgICAgICAnc3RvcmUnLFxuICAgICAgICAnc3RyaXBzJyxcbiAgICAgICAgJ3N1YkdyaWRDb25maWdzJyxcbiAgICAgICAgJ3N5bmNNYXNrJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YmFyJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3RyYW5zaXRpb24nLFxuICAgICAgICAndHJhbnNpdGlvbkR1cmF0aW9uJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2VpZ2h0JyxcbiAgICAgICAgJ3dpZHRoJ1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3NPbmx5OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FuaW1hdGVGaWx0ZXJSZW1vdmFscycsXG4gICAgICAgICdhbmltYXRlUmVtb3ZpbmdSb3dzJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b0hlaWdodCcsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYm9yZGVyJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RlZmF1bHRSZWdpb24nLFxuICAgICAgICAnZGVzdHJveVN0b3JlJyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZUdyaWRDb2x1bW5JZFdhcm5pbmcnLFxuICAgICAgICAnZGlzYWJsZUdyaWRSb3dNb2RlbFdhcm5pbmcnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW5hYmxlU3RpY2t5JyxcbiAgICAgICAgJ2VuYWJsZVRleHRTZWxlY3Rpb24nLFxuICAgICAgICAnZmlsbExhc3RDb2x1bW4nLFxuICAgICAgICAnZml4ZWRSb3dIZWlnaHQnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2Zvcm11bGFQcm92aWRlcnMnLFxuICAgICAgICAnZnVsbFJvd1JlZnJlc2gnLFxuICAgICAgICAnZ2V0Um93SGVpZ2h0JyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoaWRlSG9yaXpvbnRhbFNjcm9sbGJhcicsXG4gICAgICAgICdob3ZlckNscycsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2FkTWFzaycsXG4gICAgICAgICdsb2FkTWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ2xvYWRNYXNrRXJyb3InLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ292ZXJmbG93VHdpbkNvbmZpZycsXG4gICAgICAgICdwbHVnaW5zJyxcbiAgICAgICAgJ3ByZXNlcnZlRm9jdXNPbkRhdGFzZXRDaGFuZ2UnLFxuICAgICAgICAncHJlc2VydmVTY3JvbGxPbkRhdGFzZXRDaGFuZ2UnLFxuICAgICAgICAncHJldmVudFRvb2x0aXBPblRvdWNoJyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmVzaXphYmxlJyxcbiAgICAgICAgJ3Jlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXInLFxuICAgICAgICAncmVzcG9uc2l2ZUxldmVscycsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9sZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxlckNsYXNzJyxcbiAgICAgICAgJ3Njcm9sbE1hbmFnZXInLFxuICAgICAgICAnc2hvd0RpcnR5JyxcbiAgICAgICAgJ3N0YXRlZnVsJyxcbiAgICAgICAgJ3N0YXRlZnVsRXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RyaXBzJyxcbiAgICAgICAgJ3N1YkdyaWRDb25maWdzJyxcbiAgICAgICAgJ3N5bmNNYXNrJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YmFyJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2VpZ2h0J1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtUHJvcHM6IHN0cmluZ1tdID0gQnJ5bnR1bVRyZWVHcmlkQ29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbmltYXRlVHJlZU5vZGVUb2dnbGUnLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZWxsRWxsaXBzaXMnLFxuICAgICAgICAnY2VudGVyZWQnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29sdW1uTGluZXMnLFxuICAgICAgICAnY29sdW1ucycsXG4gICAgICAgICdkYXRhJyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZW1wdHlUZXh0JyxcbiAgICAgICAgJ2VuYWJsZVVuZG9SZWRvS2V5cycsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVGb290ZXJzJyxcbiAgICAgICAgJ2hpZGVIZWFkZXJzJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2lucHV0RmllbGRBbGlnbicsXG4gICAgICAgICdpbnNlcnRCZWZvcmUnLFxuICAgICAgICAnaW5zZXJ0Rmlyc3QnLFxuICAgICAgICAna2V5TWFwJyxcbiAgICAgICAgJ2xhYmVsUG9zaXRpb24nLFxuICAgICAgICAnbGFiZWxXaWR0aCcsXG4gICAgICAgICdsb25nUHJlc3NUaW1lJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ29yaWdpbmFsU3RvcmUnLFxuICAgICAgICAncGFyZW50JyxcbiAgICAgICAgJ3ByZXNlcnZlU2Nyb2xsJyxcbiAgICAgICAgJ3JlYWRPbmx5JyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdyb3dIZWlnaHQnLFxuICAgICAgICAncm93TGluZXMnLFxuICAgICAgICAncnRsJyxcbiAgICAgICAgJ3Njcm9sbGFibGUnLFxuICAgICAgICAnc2VsZWN0ZWRDZWxsJyxcbiAgICAgICAgJ3NlbGVjdGVkQ2VsbHMnLFxuICAgICAgICAnc2VsZWN0ZWRSZWNvcmQnLFxuICAgICAgICAnc2VsZWN0ZWRSZWNvcmRzJyxcbiAgICAgICAgJ3NlbGVjdGVkUm93cycsXG4gICAgICAgICdzZWxlY3Rpb25Nb2RlJyxcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICAnc3RhdGUnLFxuICAgICAgICAnc3RhdGVJZCcsXG4gICAgICAgICdzdGF0ZVNldHRpbmdzJyxcbiAgICAgICAgJ3N0b3JlJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndHJhbnNpdGlvbicsXG4gICAgICAgICd0cmFuc2l0aW9uRHVyYXRpb24nLFxuICAgICAgICAnd2lkdGgnXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICAgcHVibGljIGluc3RhbmNlITogVHJlZUdyaWQ7XG5cbiAgICBwcml2YXRlIGJyeW50dW1Db25maWcgPSB7XG4gICAgICAgIGFkb3B0ICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFwcGVuZFRvICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGhyZWYgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFuZ3VsYXJDb21wb25lbnQgOiB0aGlzLFxuICAgICAgICBmZWF0dXJlcyAgICAgICAgIDoge30sXG4gICAgICAgIGxpc3RlbmVycyAgICAgICAgOiB7fVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlncyBvbmx5XG4gICAgQElucHV0KCkgYWRvcHQgICAgICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhbmltYXRlRmlsdGVyUmVtb3ZhbHMgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbmltYXRlUmVtb3ZpbmdSb3dzICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcmlhRGVzY3JpcHRpb24gICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b0hlaWdodCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYmJhciAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSBib2R5Q2xzICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBib3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBidWJibGVFdmVudHMgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbGxhcHNpYmxlICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufFBhbmVsQ29sbGFwc2VyQ29uZmlnfFBhbmVsQ29sbGFwc2VyT3ZlcmxheUNvbmZpZztcbiAgICBASW5wdXQoKSBjb2xvciAgICAgICAgICAgICAgICAgICAgICAgICAhIDogQ29sb3I7XG4gICAgQElucHV0KCkgY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjb250ZW50RWxlbWVudENscyAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb250ZXh0TWVudVRyaWdnZXJFdmVudCAgICAgICAhIDogJ2NvbnRleHRtZW51J3wnY2xpY2snfCdkYmxjbGljayc7XG4gICAgQElucHV0KCkgZGF0YUZpZWxkICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0UmVnaW9uICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlc3Ryb3lTdG9yZSAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRpc2FibGVHcmlkQ29sdW1uSWRXYXJuaW5nICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRpc2FibGVHcmlkUm93TW9kZWxXYXJuaW5nICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAndG9wJ3wnYm90dG9tJ3wnbGVmdCd8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnfCdoZWFkZXInfCdwcmUtaGVhZGVyJ3xvYmplY3Q7XG4gICAgQElucHV0KCkgZHJhd2VyICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58eyBzaWRlPzogJ3N0YXJ0J3wnbGVmdCd8J2VuZCd8J3JpZ2h0J3wndG9wJ3wnYm90dG9tJywgc2l6ZT86IHN0cmluZ3xudW1iZXIsIGlubGluZT86IGJvb2xlYW4sIGF1dG9DbG9zZT86IGJvb2xlYW58eyBtb3VzZWRvd24/OiBib29sZWFufHN0cmluZywgZm9jdXNvdXQ/OiBib29sZWFufHN0cmluZywgbW91c2VvdXQ/OiBzdHJpbmcgfSwgYXV0b0Nsb3NlRGVsYXk/OiBudW1iZXIgfTtcbiAgICBASW5wdXQoKSBlbGVtZW50QXR0cmlidXRlcyAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+O1xuICAgIEBJbnB1dCgpIGVuYWJsZVN0aWNreSAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGVuYWJsZVRleHRTZWxlY3Rpb24gICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZpbGxMYXN0Q29sdW1uICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZpeGVkUm93SGVpZ2h0ICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZvb3RlciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGZvcm11bGFQcm92aWRlcnMgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBGb3JtdWxhUHJvdmlkZXJDb25maWc+O1xuICAgIEBJbnB1dCgpIGZ1bGxSb3dSZWZyZXNoICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGdldFJvd0hlaWdodCAgICAgICAgICAgICAgICAgICEgOiAoKSA9PiBudW1iZXI7XG4gICAgQElucHV0KCkgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xib29sZWFufFBhbmVsSGVhZGVyO1xuICAgIEBJbnB1dCgpIGhpZGVIb3Jpem9udGFsU2Nyb2xsYmFyICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhvdmVyQ2xzICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaWNvbiAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xEb21Db25maWc7XG4gICAgQElucHV0KCkgaWdub3JlUGFyZW50UmVhZE9ubHkgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbGlzdGVuZXJzICAgICAgICAgICAgICAgICAgICAgISA6IFRyZWVHcmlkTGlzdGVuZXJzO1xuICAgIEBJbnB1dCgpIGxvYWRNYXNrICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8TWFza0NvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIGxvYWRNYXNrRGVmYXVsdHMgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIGxvYWRNYXNrRXJyb3IgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnfE1hc2t8Ym9vbGVhbjtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZSAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBtYXNrRGVmYXVsdHMgICAgICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtYXNrZWQgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtb25pdG9yUmVzaXplICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBvdmVyZmxvd1R3aW5Db25maWcgICAgICAgICAgICAhIDogT3ZlcmZsb3dUd2luQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgcGx1Z2lucyAgICAgICAgICAgICAgICAgICAgICAgISA6IEluc3RhbmNlUGx1Z2luW118SW5zdGFuY2VQbHVnaW47XG4gICAgQElucHV0KCkgcHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZSAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJlc2VydmVTY3JvbGxPbkRhdGFzZXRDaGFuZ2UgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVsYXlTdG9yZUV2ZW50cyAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVzaXphYmxlICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58eyBtaW5XaWR0aD86IG51bWJlciwgbWF4V2lkdGg/OiBudW1iZXIsIG1pbkhlaWdodD86IG51bWJlciwgbWF4SGVpZ2h0PzogbnVtYmVyLCBoYW5kbGVzPzogeyB0b3BTdGFydD86IGJvb2xlYW4sIHRvcD86IGJvb2xlYW4sIHRvcEVuZD86IGJvb2xlYW4sIGVuZD86IGJvb2xlYW4sIGJvdHRvbUVuZD86IGJvb2xlYW4sIGJvdHRvbT86IGJvb2xlYW4sIGJvdHRvbVN0YXJ0PzogYm9vbGVhbiwgc3RhcnQ/OiBib29sZWFuIH0gfTtcbiAgICBASW5wdXQoKSByZXNpemVUb0ZpdEluY2x1ZGVzSGVhZGVyICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlTGV2ZWxzICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgbnVtYmVyfHN0cmluZ3xSZXNwb25zaXZlTGV2ZWxDb25maWc+O1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSByb2xlICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJvb3RFbGVtZW50ICAgICAgICAgICAgICAgICAgICEgOiBTaGFkb3dSb290fEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIHNjcm9sbGVyQ2xhc3MgICAgICAgICAgICAgICAgICEgOiB0eXBlb2YgU2Nyb2xsZXI7XG4gICAgQElucHV0KCkgc2Nyb2xsTWFuYWdlciAgICAgICAgICAgICAgICAgISA6IFNjcm9sbE1hbmFnZXJDb25maWd8U2Nyb2xsTWFuYWdlcjtcbiAgICBASW5wdXQoKSBzaG93RGlydHkgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7IGR1cmluZ0VkaXQ6IGJvb2xlYW4sIG5ld1JlY29yZDogYm9vbGVhbiB9O1xuICAgIEBJbnB1dCgpIHN0YXRlZnVsICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdHxzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBzdGF0ZWZ1bEV2ZW50cyAgICAgICAgICAgICAgICAhIDogb2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlUHJvdmlkZXIgICAgICAgICAgICAgICAgICEgOiBTdGF0ZVByb3ZpZGVyO1xuICAgIEBJbnB1dCgpIHN0cmlwcyAgICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBDb250YWluZXJJdGVtQ29uZmlnPjtcbiAgICBASW5wdXQoKSBzdWJHcmlkQ29uZmlncyAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgU3ViR3JpZENvbmZpZz47XG4gICAgQElucHV0KCkgc3luY01hc2sgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xNYXNrQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgdGFiICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58VGFiQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhYkJhckl0ZW1zICAgICAgICAgICAgICAgICAgICEgOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXTtcbiAgICBASW5wdXQoKSB0YmFyICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogKENvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAndHJlZWdyaWQnO1xuICAgIEBJbnB1dCgpIHVpICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAncGxhaW4nfCd0b29sYmFyJ3xzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIHdlaWdodCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBDb25maWdzIGFuZCBwcm9wZXJ0aWVzXG4gICAgQElucHV0KCkgYWxpZ25TZWxmICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYW5pbWF0ZVRyZWVOb2RlVG9nZ2xlICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvICAgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGNhbGxPbkZ1bmN0aW9ucyAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2VsbEVsbGlwc2lzICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNscyAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2xsYXBzZWQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgY29sdW1uTGluZXMgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbHVtbnMgICAgICAgICAgICAgICAgICAgICAhIDogQ29sdW1uU3RvcmV8R3JpZENvbHVtbkNvbmZpZ1tdfENvbHVtblN0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0W118TW9kZWxbXXxNb2RlbENvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIGRhdGFzZXQgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgQElucHV0KCkgZGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufCdpbmVydCc7XG4gICAgQElucHV0KCkgZW1wdHlUZXh0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8RW1wdHlUZXh0RG9tQ29uZmlnO1xuICAgIEBJbnB1dCgpIGVuYWJsZVVuZG9SZWRvS2V5cyAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBleHRyYURhdGEgICAgICAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSBmbGV4ICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGRlbiAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWRlRm9vdGVycyAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUhlYWRlcnMgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlucHV0RmllbGRBbGlnbiAgICAgICAgICAgICAhIDogJ3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSBpbnNlcnRCZWZvcmUgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBpbnNlcnRGaXJzdCAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBrZXlNYXAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz47XG4gICAgQElucHV0KCkgbGFiZWxQb3NpdGlvbiAgICAgICAgICAgICAgICEgOiAnYmVmb3JlJ3wnYWJvdmUnfCdhbGlnbi1iZWZvcmUnfCdhdXRvJ3xudWxsO1xuICAgIEBJbnB1dCgpIGxhYmVsV2lkdGggICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfG51bGw7XG4gICAgQElucHV0KCkgbG9uZ1ByZXNzVGltZSAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgbWFyZ2luICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heEhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhXaWR0aCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluSGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBwcmVzZXJ2ZVNjcm9sbCAgICAgICAgICAgICAgISA6IFByZXNlcnZlU2Nyb2xsT3B0aW9uc3xib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlYWRPbmx5ICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZW5kaXRpb24gICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fG51bGw7XG4gICAgQElucHV0KCkgcm93SGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgcm93TGluZXMgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJ0bCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzY3JvbGxhYmxlICAgICAgICAgICAgICAgICAgISA6IFNjcm9sbGVyfGJvb2xlYW58U2Nyb2xsZXJDb25maWc7XG4gICAgQElucHV0KCkgc2VsZWN0aW9uTW9kZSAgICAgICAgICAgICAgICEgOiBHcmlkU2VsZWN0aW9uTW9kZTtcbiAgICBASW5wdXQoKSBzcGFuICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBzdGF0ZUlkICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudWxsO1xuICAgIEBJbnB1dCgpIHN0YXRlU2V0dGluZ3MgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICByZXN0b3JlVW5jb25maWd1cmVkQ29sdW1ucz86IGJvb2xlYW5cbiAgICB9O1xuICAgIEBJbnB1dCgpIHN0b3JlICAgICAgICAgICAgICAgICAgICAgICAhIDogU3RvcmV8U3RvcmVDb25maWd8QWpheFN0b3JlfEFqYXhTdG9yZUNvbmZpZztcbiAgICBASW5wdXQoKSB0aXRsZSAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0b29scyAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIFRvb2x8VG9vbENvbmZpZz58bnVsbHxSZWNvcmQ8c3RyaW5nLCBUb29sPnxSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPjtcbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uICAgICAgICAgICAgICAgICAgISA6IHtcbiAgICAgICAgaW5zZXJ0UmVjb3JkPzogYm9vbGVhblxuICAgICAgICByZW1vdmVSZWNvcmQ/OiBib29sZWFuXG4gICAgICAgIHRvZ2dsZUNvbHVtbj86IGJvb2xlYW5cbiAgICAgICAgZXhwYW5kQ29sbGFwc2VDb2x1bW4/OiBib29sZWFuXG4gICAgICAgIHRvZ2dsZVJlZ2lvbj86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlVHJlZU5vZGU/OiBib29sZWFuXG4gICAgICAgIHRvZ2dsZUdyb3VwPzogYm9vbGVhblxuICAgICAgICBmaWx0ZXJSZW1vdmFsPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgdHJhbnNpdGlvbkR1cmF0aW9uICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgd2lkdGggICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuXG4gICAgLy8gUHJvcGVydGllcyBvbmx5XG4gICAgQElucHV0KCkgY2VudGVyZWQgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgb25jZT86IGJvb2xlYW5cbiAgICB9O1xuICAgIEBJbnB1dCgpIG9yaWdpbmFsU3RvcmUgICAhIDogU3RvcmU7XG4gICAgQElucHV0KCkgcGFyZW50ICAgICAgICAgICEgOiBXaWRnZXQ7XG4gICAgQElucHV0KCkgc2VsZWN0ZWRDZWxsICAgICEgOiBHcmlkTG9jYXRpb258R3JpZExvY2F0aW9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ2VsbHMgICAhIDogR3JpZExvY2F0aW9uW118R3JpZExvY2F0aW9uQ29uZmlnW107XG4gICAgQElucHV0KCkgc2VsZWN0ZWRSZWNvcmQgICEgOiBNb2RlbDtcbiAgICBASW5wdXQoKSBzZWxlY3RlZFJlY29yZHMgISA6IE1vZGVsW118bnVtYmVyW107XG4gICAgQElucHV0KCkgc2VsZWN0ZWRSb3dzICAgICEgOiBNb2RlbFtdfG51bWJlcltdO1xuICAgIEBJbnB1dCgpIHN0YXRlICAgICAgICAgICAhIDogR3JpZFN0YXRlSW5mbztcbiAgICBASW5wdXQoKSB0b29sdGlwICAgICAgICAgISA6IHN0cmluZ3xUb29sdGlwQ29uZmlnO1xuXG4gICAgLy8gRmVhdHVyZXNcbiAgICBASW5wdXQoKSBhaUZlYXR1cmUgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8QUl8QUlDb25maWc7XG4gICAgQElucHV0KCkgYWlGaWx0ZXJGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEFJRmlsdGVyfEFJRmlsdGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNlbGxDb3B5UGFzdGVGZWF0dXJlICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsQ29weVBhc3RlfENlbGxDb3B5UGFzdGVDb25maWc7XG4gICAgQElucHV0KCkgY2VsbEVkaXRGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxFZGl0fENlbGxFZGl0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGNlbGxNZW51RmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsTWVudXxDZWxsTWVudUNvbmZpZztcbiAgICBASW5wdXQoKSBjZWxsVG9vbHRpcEZlYXR1cmUgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbFRvb2x0aXB8Q2VsbFRvb2x0aXBDb25maWc7XG4gICAgQElucHV0KCkgY2hhcnRzRmVhdHVyZSAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENoYXJ0c3xDaGFydHNDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uQXV0b1dpZHRoRmVhdHVyZSAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtbkF1dG9XaWR0aHxDb2x1bW5BdXRvV2lkdGhDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uRHJhZ1Rvb2xiYXJGZWF0dXJlICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtbkRyYWdUb29sYmFyfENvbHVtbkRyYWdUb29sYmFyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbHVtblBpY2tlckZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5QaWNrZXJ8Q29sdW1uUGlja2VyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbHVtblJlbmFtZUZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZW5hbWV8Q29sdW1uUmVuYW1lQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbHVtblJlb3JkZXJGZWF0dXJlICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZW9yZGVyfENvbHVtblJlb3JkZXJDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUmVzaXplRmVhdHVyZSAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlc2l6ZXxDb2x1bW5SZXNpemVDb25maWc7XG4gICAgQElucHV0KCkgZXhjZWxFeHBvcnRlckZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEV4Y2VsRXhwb3J0ZXJ8RXhjZWxFeHBvcnRlckNvbmZpZztcbiAgICBASW5wdXQoKSBmaWxlRHJvcEZlYXR1cmUgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsZURyb3B8RmlsZURyb3BDb25maWc7XG4gICAgQElucHV0KCkgZmlsbEhhbmRsZUZlYXR1cmUgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbGxIYW5kbGV8RmlsbEhhbmRsZUNvbmZpZztcbiAgICBASW5wdXQoKSBmaWx0ZXJGZWF0dXJlICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsdGVyfEZpbHRlckNvbmZpZztcbiAgICBASW5wdXQoKSBmaWx0ZXJCYXJGZWF0dXJlICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsdGVyQmFyfEZpbHRlckJhckNvbmZpZztcbiAgICBASW5wdXQoKSBncm91cEZlYXR1cmUgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8R3JvdXB8R3JvdXBDb25maWc7XG4gICAgQElucHV0KCkgZ3JvdXBTdW1tYXJ5RmVhdHVyZSAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyb3VwU3VtbWFyeXxHcm91cFN1bW1hcnlDb25maWc7XG4gICAgQElucHV0KCkgaGVhZGVyTWVudUZlYXR1cmUgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEhlYWRlck1lbnV8SGVhZGVyTWVudUNvbmZpZztcbiAgICBASW5wdXQoKSBsb2NrUm93c0ZlYXR1cmUgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TG9ja1Jvd3N8TG9ja1Jvd3NDb25maWc7XG4gICAgQElucHV0KCkgbWVyZ2VDZWxsc0ZlYXR1cmUgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfE1lcmdlQ2VsbHN8TWVyZ2VDZWxsc0NvbmZpZztcbiAgICBASW5wdXQoKSBwZGZFeHBvcnRGZWF0dXJlICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UGRmRXhwb3J0fFBkZkV4cG9ydENvbmZpZztcbiAgICBASW5wdXQoKSBwaW5Db2x1bW5zRmVhdHVyZSAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UGluQ29sdW1uc3xQaW5Db2x1bW5zQ29uZmlnO1xuICAgIEBJbnB1dCgpIHByaW50RmVhdHVyZSAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQcmludHxQcmludENvbmZpZztcbiAgICBASW5wdXQoKSBxdWlja0ZpbmRGZWF0dXJlICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UXVpY2tGaW5kfFF1aWNrRmluZENvbmZpZztcbiAgICBASW5wdXQoKSByZWdpb25SZXNpemVGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UmVnaW9uUmVzaXplfFJlZ2lvblJlc2l6ZUNvbmZpZztcbiAgICBASW5wdXQoKSByb3dDb3B5UGFzdGVGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Um93Q29weVBhc3RlfFJvd0NvcHlQYXN0ZUNvbmZpZztcbiAgICBASW5wdXQoKSByb3dFZGl0RmVhdHVyZSAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Um93RWRpdHxSb3dFZGl0Q29uZmlnO1xuICAgIEBJbnB1dCgpIHJvd0V4cGFuZGVyRmVhdHVyZSAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dFeHBhbmRlcnxSb3dFeHBhbmRlckNvbmZpZztcbiAgICBASW5wdXQoKSByb3dSZW9yZGVyRmVhdHVyZSAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Um93UmVvcmRlcnxSb3dSZW9yZGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJvd1Jlc2l6ZUZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dSZXNpemV8Um93UmVzaXplQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNlYXJjaEZlYXR1cmUgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTZWFyY2h8U2VhcmNoQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNvcnRGZWF0dXJlICAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTb3J0fFNvcnRDb25maWc7XG4gICAgQElucHV0KCkgc3BsaXRGZWF0dXJlICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNwbGl0fFNwbGl0Q29uZmlnO1xuICAgIEBJbnB1dCgpIHN0aWNreUNlbGxzRmVhdHVyZSAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdGlja3lDZWxsc3xTdGlja3lDZWxsc0NvbmZpZztcbiAgICBASW5wdXQoKSBzdHJpcGVGZWF0dXJlICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3RyaXBlfFN0cmlwZUNvbmZpZztcbiAgICBASW5wdXQoKSBzdW1tYXJ5RmVhdHVyZSAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3VtbWFyeXxTdW1tYXJ5Q29uZmlnO1xuICAgIEBJbnB1dCgpIHRyZWVGZWF0dXJlICAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUcmVlfFRyZWVDb25maWc7XG4gICAgQElucHV0KCkgdHJlZUdyb3VwRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWVHcm91cHxUcmVlR3JvdXBDb25maWc7XG5cbiAgICAvLyBFdmVudHMgZW1pdHRlcnNcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIHRoZSBjZWxsIGVkaXRpbmcgaXMgY2FuY2VsZWQsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgY2FuY2VsbGF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDYW5jZWxDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogR3JpZExvY2F0aW9uIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIHJvdyBlZGl0aW5nIGlzIGNhbmNlbGVkLCByZXR1cm4gZmFsc2UgdG8gc2lnbmFsIHRoYXQgdGhlIHZhbHVlIGlzIGludmFsaWQgYW5kIGVkaXRpbmcgc2hvdWxkIG5vdCBiZSBmaW5hbGl6ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjZXZlbnQtYmVmb3JlQ2FuY2VsUm93RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUYXJnZXQgZ3JpZFxuICAgICAqIEBwYXJhbSB7Um93RWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDYW5jZWxSb3dFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgZWRpdGluZyBzdGFydHMsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgZWRpdGluZ1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q2VsbEVkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2VsbEVkaXRTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBkZWxldGluZyBhIHJhbmdlIG9mIHNlbGVjdGVkIGNlbGwgdmFsdWVzIGJ5IHByZXNzaW5nIDxrYmQ+QmFja3NwYWNlPC9rYmQ+IG9yIDxrYmQ+RGVsZXRlPC9rYmQ+XG4gICAgICogYnV0dG9ucyB3aGlsZSBbYXV0b0VkaXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbEVkaXQjY29uZmlnLWF1dG9FZGl0KSBpcyBzZXQgdG8gYHRydWVgLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGVkaXRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHsoR3JpZC51dGlsLkdyaWRMb2NhdGlvbnxDb3JlLmRhdGEuTW9kZWwpW119IGV2ZW50LmdyaWRTZWxlY3Rpb24gQW4gYXJyYXkgb2YgY2VsbCBzZWxlY3RvcnMgb3IgcmVjb3JkcyB0aGF0IHdpbGwgaGF2ZSB0aGVpciB2YWx1ZXMgZGVsZXRlZCAodGhlIHJlY29yZHMgdGhlbXNlbHZlcyB3aWxsIG5vdCBnZXQgZGVsZXRlZCwgb25seSB2aXNpYmxlIGNvbHVtbiB2YWx1ZXMpLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNlbGxSYW5nZURlbGV0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZ3JpZFNlbGVjdGlvbjogKEdyaWRMb2NhdGlvbnxNb2RlbClbXSB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBmb3IgZWFjaCBzZWxlY3RlZCByZWNvcmQgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBlZGl0aW5nIGEgcmFuZ2Ugb2Ygc2VsZWN0ZWQgY2VsbCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBDdXJyZW50IHNlbGVjdGVkIHJlY29yZCBmcm9tIHRoZSByYW5nZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5maWVsZCBUaGUgZmllbGQgYmVpbmcgY2hhbmdlZFxuICAgICAqIEBwYXJhbSB7YW55fSBldmVudC52YWx1ZSBUaGUgdmFsdWUgYmVpbmcgc2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2VsbFJhbmdlRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlY29yZDogTW9kZWwsIGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgYmVmb3JlIGEgcGFyZW50IGNvbHVtbiBpcyBjb2xsYXBzZWQgb3IgZXhwYW5kZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbGxhcHNlZCBgdHJ1ZWAgaWYgdGhlIGNvbHVtbiBpcyBiZWluZyBjb2xsYXBzZWQsIGBmYWxzZWAgaWYgZXhwYW5kZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDb2x1bW5Db2xsYXBzZVRvZ2dsZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbHVtbjogQ29sdW1uLCBjb2xsYXBzZWQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgcHJpb3IgdG8gc3RhcnRpbmcgYSBjb2x1bW4gZHJhZyBnZXN0dXJlLiBUaGUgZHJhZyBpcyBjYW5jZWxlZCBpZiBhIGxpc3RlbmVyIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGRyYWdnZWQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvbHVtbkRyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGV2ZW50OiBFdmVudCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjb2x1bW4gaXMgZHJvcHBlZCwgYW5kIHlvdSBjYW4gcmV0dXJuIGZhbHNlIGZyb20gYSBsaXN0ZW5lciB0byBhYm9ydCB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgZHJhZ2dlZCBjb2x1bW4uXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50Lmluc2VydEJlZm9yZSBUaGUgY29sdW1uIGJlZm9yZSB3aGljaCB0aGUgZHJhZ2dlZCBjb2x1bW4gd2lsbCBiZSBpbnNlcnRlZC5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQubmV3UGFyZW50IFRoZSBuZXcgcGFyZW50IGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgYnJvd3NlciBldmVudC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQucmVnaW9uIFRoZSByZWdpb24gd2hlcmUgdGhlIGNvbHVtbiB3YXMgZHJvcHBlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDb2x1bW5Ecm9wRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBpbnNlcnRCZWZvcmU6IENvbHVtbiwgbmV3UGFyZW50OiBDb2x1bW4sIGV2ZW50OiBFdmVudCwgcmVnaW9uOiBzdHJpbmcgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBwcmlvciB0byBzdGFydGluZyBhIGNvbHVtbiByZXNpemUgZ2VzdHVyZS4gVGhlIHJlc2l6ZSBpcyBjYW5jZWxlZCBpZiBhIGxpc3RlbmVyIHJldHVybnNcbiAgICAgKiBgZmFsc2VgLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvbHVtblJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGEgY29weSBhY3Rpb24gaXMgcGVyZm9ybWVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuY2VsbHMgVGhlIGNlbGxzIGFib3V0IHRvIGJlIGNvcGllZCBvciBjdXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZGF0YSBUaGUgc3RyaW5nIGRhdGEgYWJvdXQgdG8gYmUgY29waWVkIG9yIGN1dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuaXNDdXQgYHRydWVgIGlmIHRoaXMgaXMgYSBjdXQgYWN0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmVudGl0eU5hbWUgJ2NlbGwnIHRvIGRpc3Rpbmd1aXNoIHRoaXMgZXZlbnQgZnJvbSBvdGhlciBiZWZvcmVDb3B5IGV2ZW50c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvcHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNlbGxzOiBHcmlkTG9jYXRpb25bXSwgZGF0YTogc3RyaW5nLCBpc0N1dDogYm9vbGVhbiwgZW50aXR5TmFtZTogc3RyaW5nIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBDU1YgZXhwb3J0IHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gY2FuY2VsIHRoZSBleHBvcnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RXhwb3J0Q29uZmlnfSBldmVudC5jb25maWcgRXhwb3J0IGNvbmZpZ1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1uW119IGV2ZW50LmNvbHVtbnMgQW4gYXJyYXkgb2YgY29sdW1ucyB0byBleHBvcnRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5yb3dzIEFuIGFycmF5IG9mIHJlY29yZHMgdG8gZXhwb3J0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmxpbmVEZWxpbWl0ZXIgVGhlIENTViBkZWxpbWl0ZXIgdG8gc2VwYXJhdGUgbGluZXNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY29sdW1uRGVsaW1pdGVyIFRoZSBDU1YgZGVsaW1pdGVyIHRvIHNlcGFyYXRlIHZhbHVlcyBvbiBvbmUgbGluZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNTVkV4cG9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNvbmZpZzogRXhwb3J0Q29uZmlnLCBjb2x1bW5zOiBDb2x1bW5bXSwgcm93czogTW9kZWxbXSwgbGluZURlbGltaXRlcjogc3RyaW5nLCBjb2x1bW5EZWxpbWl0ZXI6IHN0cmluZyB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgRXhjZWwgZXhwb3J0IHN0YXJ0cy4gUmV0dXJuIGBmYWxzZWAgdG8gY2FuY2VsIHRoZSBleHBvcnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RXhwb3J0Q29uZmlnfSBldmVudC5jb25maWcgRXhwb3J0IGNvbmZpZ1xuICAgICAqIEBwYXJhbSB7WExTQ29sdW1uW119IGV2ZW50LmNvbHVtbnMgQW4gYXJyYXkgb2YgY29sdW1ucyB0byBleHBvcnRcbiAgICAgKiBAcGFyYW0ge2FueVtdW119IGV2ZW50LnJvd3MgQW4gYXJyYXkgb2YgcmVjb3JkcyB0byBleHBvcnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVFeGNlbEV4cG9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNvbmZpZzogRXhwb3J0Q29uZmlnLCBjb2x1bW5zOiBYTFNDb2x1bW5bXSwgcm93czogYW55W10gfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIGRyYWdnaW5nIG9mIHRoZSBGaWxsSGFuZGxlIHN0YXJ0cywgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgZHJhZyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuY2VsbCBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sdW1uIC8gcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUZpbGxIYW5kbGVEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjZWxsOiBHcmlkTG9jYXRpb24sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIGNlbGwgZWRpdGluZyBpcyBmaW5pc2hlZCwgcmV0dXJuIGZhbHNlIHRvIHNpZ25hbCB0aGF0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGFuZCBlZGl0aW5nIHNob3VsZCBub3QgYmUgZmluYWxpemVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRhcmdldCBncmlkXG4gICAgICogQHBhcmFtIHtDZWxsRWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVGaW5pc2hDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIHRoZSByb3cgZWRpdGluZyBpcyBmaW5pc2hlZCwgcmV0dXJuIGZhbHNlIHRvIHNpZ25hbCB0aGF0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGFuZCBlZGl0aW5nIHNob3VsZCBub3QgYmUgZmluYWxpemVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2V2ZW50LWJlZm9yZUZpbmlzaFJvd0VkaXQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge1Jvd0VkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRmluaXNoUm93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IFJvd0VkaXRvckNvbnRleHQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIGhpZGRlbi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgaGlkZGVuLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGEgcGFzdGUgYWN0aW9uIGlzIHBlcmZvcm1lZCwgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmNsaXBib2FyZERhdGEgVGhlIGNsaXBib2FyZERhdGEgYWJvdXQgdG8gYmUgcGFzdGVkXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC50YXJnZXRDZWxsIFRoZSBjZWxsIGZyb20gd2hpY2ggdGhlIHBhc3RlIHdpbGwgYmUgc3RhcnRlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5lbnRpdHlOYW1lICdjZWxsJyB0byBkaXN0aW5ndWlzaCB0aGlzIGV2ZW50IGZyb20gb3RoZXIgYmVmb3JlUGFzdGUgZXZlbnRzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnRleHQgVGhlIHJhdyB0ZXh0IGZyb20gY2xpcGJvYXJkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUGFzdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNsaXBib2FyZERhdGE6IHN0cmluZywgdGFyZ2V0Q2VsbDogR3JpZExvY2F0aW9uLCBlbnRpdHlOYW1lOiBzdHJpbmcsIHRleHQ6IHN0cmluZyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgZXhwb3J0IHN0YXJ0ZWQuIFJldHVybiBgZmFsc2VgIHRvIGNhbmNlbCB0aGUgZXhwb3J0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1BkZkV4cG9ydENvbmZpZ30gZXZlbnQuY29uZmlnIEV4cG9ydCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVQZGZFeHBvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjb25maWc6IFBkZkV4cG9ydENvbmZpZyB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYSByb3cgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLnJvdy5Sb3d9IGV2ZW50LnJvdyBUaGUgcm93IGFib3V0IHRvIGJlIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIGZvciB0aGUgcm93XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LnJlY29yZEluZGV4IFRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSZW5kZXJSb3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCByb3c6IFJvdywgcmVjb3JkOiBNb2RlbCwgcmVjb3JkSW5kZXg6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogR3JpZCByb3dzIGFyZSBhYm91dCB0byBiZSByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoaXMgZ3JpZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSZW5kZXJSb3dzOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBiZWZvcmUgcm93IGNvbGxhcHNlIGlzIHN0YXJ0ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjZXZlbnQtYmVmb3JlUm93Q29sbGFwc2UpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUm93Q29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBiZWZvcmUgcm93IGV4cGFuZCBpcyBzdGFydGVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2V2ZW50LWJlZm9yZVJvd0V4cGFuZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSb3dFeHBhbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4gUmV0dXJuaW5nIGBmYWxzZWAgZnJvbSBhIGxpc3RlbmVyIHByZXZlbnRzIHRoZSBjaGFuZ2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmFjdGlvbiBgJ3NlbGVjdCdgL2AnZGVzZWxlY3QnYFxuICAgICAqIEBwYXJhbSB7J3JvdycsJ2NlbGwnfSBldmVudC5tb2RlIGAncm93J2AvYCdjZWxsJ2BcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5kZXNlbGVjdGVkIFRoZSByZWNvcmRzIHRvIGJlIGRlc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuc2VsZWN0ZWQgVGhlIHJlY29yZHMgdG8gYmUgc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuc2VsZWN0aW9uIFRoZSByZWNvcmRzIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgYmVmb3JlIGFwcGx5aW5nIGBzZWxlY3RlZGAgYW5kIGBkZXNlbGVjdGVkYFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5kZXNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIHRvIGJlIGRlc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LnNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIHRvIGJlIHNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5jZWxsU2VsZWN0aW9uIFRoZSBjZWxscyBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24sIGJlZm9yZSBhcHBseWluZyBgc2VsZWN0ZWRDZWxsc2AgYW5kIGBkZXNlbGVjdGVkQ2VsbHNgXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2VsZWN0aW9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgYWN0aW9uOiBzdHJpbmcsIG1vZGU6ICdyb3cnfCdjZWxsJywgc291cmNlOiBHcmlkLCBkZXNlbGVjdGVkOiBNb2RlbFtdLCBzZWxlY3RlZDogTW9kZWxbXSwgc2VsZWN0aW9uOiBNb2RlbFtdLCBkZXNlbGVjdGVkQ2VsbHM6IEdyaWRMb2NhdGlvbltdLCBzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25bXSwgY2VsbFNlbGVjdGlvbjogR3JpZExvY2F0aW9uW10gfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHRoaXMgY29udGFpbmVyIHdpbGwgbG9hZCByZWNvcmQgdmFsdWVzIGludG8gaXRzIGNoaWxkIGZpZWxkcy4gVGhpcyBpcyB1c2VmdWwgaWYgeW91XG4gICAgICogd2FudCB0byBtb2RpZnkgdGhlIFVJIGJlZm9yZSBkYXRhIGlzIGxvYWRlZCAoZS5nLiBzZXQgc29tZSBpbnB1dCBmaWVsZCB0byBiZSByZWFkb25seSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Db250YWluZXJ9IGV2ZW50LnNvdXJjZSBUaGUgY29udGFpbmVyXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2V0UmVjb3JkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIHJlY29yZDogTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgc2hvd24uIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXQsYW55fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBzaG93blxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldHxhbnkgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGVkaXRpbmcgc3RhcnRzLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGVkaXRpbmdcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge1Jvd0VkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU3RhcnRSb3dFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBSb3dFZGl0b3JDb250ZXh0IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIHRoZSBzb3VyY2UuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWRTdGF0ZUluZm99IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZUFwcGx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc3RhdGU6IEdyaWRTdGF0ZUluZm8gfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHN0YXRlIGlzIHNhdmVkIGJ5IHRoZSBTdGF0ZVByb3ZpZGVyLiBBbGxvd3MgZWRpdGluZyB0aGUgc3RhdGUgb2JqZWN0IG9yIHByZXZlbnRpbmcgdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkU3RhdGVJbmZvfSBldmVudC5zdGF0ZSBTdGF0ZSBvYmplY3QgY29uZmlnXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU3RhdGVTYXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc3RhdGU6IEdyaWRTdGF0ZUluZm8gfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIGdyb3VwIGlzIGdvaW5nIHRvIGJlIGV4cGFuZGVkIG9yIGNvbGxhcHNlZCB1c2luZyB0aGUgVUkuXG4gICAgICogUmV0dXJuaW5nIGBmYWxzZWAgZnJvbSBhIGxpc3RlbmVyIHByZXZlbnRzIHRoZSBvcGVyYXRpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50Lmdyb3VwUmVjb3JkIFtERVBSRUNBVEVEXSBVc2UgYGdyb3VwUmVjb3Jkc2AgcGFyYW0gaW5zdGVhZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50Lmdyb3VwUmVjb3JkcyBUaGUgZ3JvdXAgcmVjb3JkcyBiZWluZyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZSBDb2xsYXBzZWQgKHRydWUpIG9yIGV4cGFuZGVkIChmYWxzZSlcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgdXNlciBpbnRlcmFjdGlvbiBldmVudCAoZWcgYSBgY2xpY2tgIGV2ZW50KSBpZiB0aGUgdG9nZ2xlIHJlcXVlc3Qgd2FzIGluc3RpZ2F0ZWQgYnkgdXNlciBpbnRlcmFjdGlvbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVUb2dnbGVHcm91cDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyb3VwUmVjb3JkOiBNb2RlbCwgZ3JvdXBSZWNvcmRzOiBNb2RlbFtdLCBjb2xsYXBzZTogYm9vbGVhbiwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBhIHBhcmVudCBub2RlIHJlY29yZCB0b2dnbGVzIGl0cyBjb2xsYXBzZWQgc3RhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIGJlaW5nIHRvZ2dsZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZSBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYmVpbmcgY29sbGFwc2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRvZ2dsZU5vZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbGxhcHNlOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBlZGl0aW5nIGlzIGNhbmNlbGxlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBJbmNsdWRlZCBpZiB0aGUgY2FuY2VsbGF0aW9uIHdhcyB0cmlnZ2VyZWQgYnkgYSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DYW5jZWxDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogR3JpZExvY2F0aW9uLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW55IG90aGVyIGV2ZW50IGlzIGZpcmVkIGZyb20gdGhlIG9iamVjdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNldmVudC1jYXRjaEFsbClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9fSBldmVudC5ldmVudCBUaGUgT2JqZWN0IHRoYXQgY29udGFpbnMgZXZlbnQgZGV0YWlsc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5ldmVudC50eXBlIFRoZSB0eXBlIG9mIHRoZSBldmVudCB3aGljaCBpcyBjYXVnaHQgYnkgdGhlIGxpc3RlbmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2F0Y2hBbGw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDoge1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdXNlciBjbGlja3MgaW4gYSBncmlkIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiB0byB3aGljaCB0aGUgY2VsbCBiZWxvbmdzXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIGFjdGl2YXRlcyBjb250ZXh0bWVudSBpbiBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxDb250ZXh0TWVudTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHVzZXIgZG91YmxlIGNsaWNrcyBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxEYmxDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgZ3JpZCBiZWZvcmUgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSBjZWxsLlxuICAgICAqIEFsbG93cyBtYW5pcHVsYXRpb24gb2YgdGhlIGl0ZW1zIHRvIHNob3cgaW4gdGhlIHNhbWUgd2F5IGFzIGluIHRoZSBbcHJvY2Vzc0l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NlbGxNZW51I2NvbmZpZy1wcm9jZXNzSXRlbXMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2V2ZW50LWNlbGxNZW51QmVmb3JlU2hvdylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1lbnVCZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIGNvbHVtbjogQ29sdW1uLCByZWNvcmQ6IE1vZGVsIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBncmlkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgY2VsbCBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51SXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNvbHVtbjogQ29sdW1uLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgZ3JpZCBhZnRlciB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhIGNlbGwuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51U2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIGdyaWQgd2hlbiBhIGNoZWNrIGl0ZW0gaXMgdG9nZ2xlZCBpbiB0aGUgY2VsbCBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hlY2tlZCBDaGVja2VkIG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51VG9nZ2xlSXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNvbHVtbjogQ29sdW1uLCByZWNvcmQ6IE1vZGVsLCBjaGVja2VkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYSBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIGhvdmVyZWQgY2VsbFxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiBjdXJyZW50bHkgaG92ZXJlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTW91c2VFbnRlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgY2VsbCB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHJlcHJlc2VudGluZyB0aGUgY2VsbCB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50IHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1vdXNlTGVhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgdXNlciBtb3ZlcyB0aGUgbW91c2Ugb3V0IG9mIGEgZ3JpZCBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gdG8gd2hpY2ggdGhlIGNlbGwgYmVsb25nc1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1vdXNlT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdXNlciBtb3ZlcyB0aGUgbW91c2Ugb3ZlciBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNb3VzZU92ZXI6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIFBhbmVsIGlzIGNvbGxhcHNlZCB1c2luZyB0aGUgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNpYmxlKSBzZXR0aW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlBhbmVsfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUGFuZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBhIHBhcmVudCBub2RlIHJlY29yZCBpcyBjb2xsYXBzZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHdoaWNoIGhhcyBiZWVuIGNvbGxhcHNlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZU5vZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIGFmdGVyIGEgcGFyZW50IGNvbHVtbiBoYXMgYmVlbiBjb2xsYXBzZWQgb3IgZXhwYW5kZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhlIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gYmVpbmcgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2VkIGB0cnVlYCBpZiB0aGUgY29sdW1uIGlzIG5vdyBjb2xsYXBzZWQsIGBmYWxzZWAgaWYgZXhwYW5kZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2x1bW5Db2xsYXBzZVRvZ2dsZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbHVtbjogQ29sdW1uLCBjb2xsYXBzZWQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGNvbHVtbiBpcyBiZWluZyBkcmFnZ2VkLCBhbmQgeW91IGNhbiBzZXQgdGhlIGB2YWxpZGAgZmxhZyBvbiB0aGUgYGNvbnRleHRgIG9iamVjdFxuICAgICAqIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRyb3AgcG9zaXRpb24gaXMgdmFsaWQgb3Igbm90LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgZHJhZ2dlZCBjb2x1bW4uXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50Lmluc2VydEJlZm9yZSBUaGUgY29sdW1uIGJlZm9yZSB3aGljaCB0aGUgZHJhZ2dlZCBjb2x1bW4gd2lsbCBiZSBpbnNlcnRlZCAoaWYgbm90IGxhc3QpLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LnZhbGlkIFNldCB0aGlzIHRvIGB0cnVlYCBvciBgZmFsc2VgIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRyb3AgcG9zaXRpb24gaXMgdmFsaWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uRHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGluc2VydEJlZm9yZTogQ29sdW1uLCBldmVudDogRXZlbnQsIGNvbnRleHQ6IHsgdmFsaWQ6IGJvb2xlYW4gfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIGEgY29sdW1uIGRyYWcgZ2VzdHVyZSBoYXMgc3RhcnRlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGRyYWdnZWQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtbkRyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBhbHdheXMgZmlyZWQgYWZ0ZXIgYSBjb2x1bW4gaXMgZHJvcHBlZC4gVGhlIGB2YWxpZGAgcGFyYW0gaXMgYHRydWVgIGlmIHRoZSBvcGVyYXRpb24gd2FzIG5vdFxuICAgICAqIHZldG9lZCBhbmQgdGhlIGNvbHVtbiB3YXMgbW92ZWQgaW4gdGhlIGNvbHVtbiBzdG9yZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGRyYWdnZWQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5pbnNlcnRCZWZvcmUgVGhlIGNvbHVtbiBiZWZvcmUgd2hpY2ggdGhlIGRyYWdnZWQgY29sdW1uIHdpbGwgYmUgaW5zZXJ0ZWQuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50Lm5ld1BhcmVudCBUaGUgbmV3IHBhcmVudCBjb2x1bW4uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC52YWxpZCBgdHJ1ZWAgaWYgdGhlIG9wZXJhdGlvbiB3YXMgbm90IHZldG9lZC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgYnJvd3NlciBldmVudC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQucmVnaW9uIFRoZSByZWdpb24gd2hlcmUgdGhlIGNvbHVtbiB3YXMgZHJvcHBlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2x1bW5Ecm9wOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgaW5zZXJ0QmVmb3JlOiBDb2x1bW4sIG5ld1BhcmVudDogQ29sdW1uLCB2YWxpZDogYm9vbGVhbiwgZXZlbnQ6IEV2ZW50LCByZWdpb246IHN0cmluZyB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgcmVzaXplIGdlc3R1cmUgaXMgY29tcGxldGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSByZXNpemVkIGNvbHVtblxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjb2x1bW4gcmVzaXplIGdlc3R1cmUgc3RhcnRzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtblJlc2l6ZVN0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgd2lkZ2V0IHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSBvd25pbmcgd2lkZ2V0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db250ZXh0TWVudUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyB3aWRnZXQgd2hlbiBhIGNoZWNrIGl0ZW0gaXMgdG9nZ2xlZCBpbiB0aGUgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSBvd25pbmcgd2lkZ2V0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNoZWNrZWQgQ2hlY2tlZCBvciBub3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db250ZXh0TWVudVRvZ2dsZUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNoZWNrZWQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBhZnRlciBhIGNvcHkgYWN0aW9uIGlzIHBlcmZvcm1lZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuY2VsbHMgVGhlIGNlbGxzIGFib3V0IHRvIGJlIGNvcGllZCBvciBjdXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY29waWVkRGF0YVN0cmluZyBUaGUgY29uY2F0ZW5hdGVkIGRhdGEgc3RyaW5nIHRoYXQgd2FzIGNvcGllZCBvciBjdXRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmlzQ3V0IGB0cnVlYCBpZiB0aGlzIHdhcyBhIGN1dCBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIGNvcHkgZXZlbnRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29weTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY2VsbHM6IEdyaWRMb2NhdGlvbltdLCBjb3BpZWREYXRhU3RyaW5nOiBzdHJpbmcsIGlzQ3V0OiBib29sZWFuLCBlbnRpdHlOYW1lOiBzdHJpbmcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZGF0YSBpbiB0aGUgc3RvcmUgY2hhbmdlcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNldmVudC1kYXRhQ2hhbmdlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIE93bmluZyBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuU3RvcmV9IGV2ZW50LnN0b3JlIFRoZSBvcmlnaW5hdGluZyBzdG9yZVxuICAgICAqIEBwYXJhbSB7J3JlbW92ZScsJ3JlbW92ZUFsbCcsJ2FkZCcsJ2NsZWFyY2hhbmdlcycsJ2ZpbHRlcicsJ3VwZGF0ZScsJ2RhdGFzZXQnLCdyZXBsYWNlJ30gZXZlbnQuYWN0aW9uIE5hbWUgb2YgYWN0aW9uIHdoaWNoIHRyaWdnZXJlZCB0aGUgY2hhbmdlLiBNYXkgYmUgb25lIG9mOiAgKiBgJ3JlbW92ZSdgICogYCdyZW1vdmVBbGwnYCAqIGAnYWRkJ2AgKiBgJ2NsZWFyY2hhbmdlcydgICogYCdmaWx0ZXInYCAqIGAndXBkYXRlJ2AgKiBgJ2RhdGFzZXQnYCAqIGAncmVwbGFjZSdgXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBDaGFuZ2VkIHJlY29yZCwgZm9yIGFjdGlvbnMgdGhhdCBhZmZlY3RzIGV4YWN0bHkgb25lIHJlY29yZCAoYCd1cGRhdGUnYClcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5yZWNvcmRzIENoYW5nZWQgcmVjb3JkcywgcGFzc2VkIGZvciBhbGwgYWN0aW9ucyBleGNlcHQgYCdyZW1vdmVBbGwnYFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jaGFuZ2VzIFBhc3NlZCBmb3IgdGhlIGAndXBkYXRlJ2AgYWN0aW9uLCBpbmZvIG9uIHdoaWNoIHJlY29yZCBmaWVsZHMgY2hhbmdlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRhdGFDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBzdG9yZTogU3RvcmUsIGFjdGlvbjogJ3JlbW92ZSd8J3JlbW92ZUFsbCd8J2FkZCd8J2NsZWFyY2hhbmdlcyd8J2ZpbHRlcid8J3VwZGF0ZSd8J2RhdGFzZXQnfCdyZXBsYWNlJywgcmVjb3JkOiBNb2RlbCwgcmVjb3JkczogTW9kZWxbXSwgY2hhbmdlczogb2JqZWN0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgZmllbGQgaXMgbXV0YXRlZCBhbmQgdGhlIHN0YXRlIG9mIHRoZSBbaGFzQ2hhbmdlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1oYXNDaGFuZ2VzKSBwcm9wZXJ0eSBjaGFuZ2VzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmRpcnR5IFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGUgQ29udGFpbmVyIC0gYHRydWVgIGlmIHRoZXJlIGFyZSBhbnkgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGluaXRpYWwgbG9hZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EaXJ0eVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIGRpcnR5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGlsZSBkcmFnIHNlbGVjdGluZy4gVUkgd2lsbCB1cGRhdGUgd2l0aCBjdXJyZW50IHJhbmdlLCBidXQgdGhlIGNlbGxzIHdpbGwgbm90IGJlIHNlbGVjdGVkIHVudGlsXG4gICAgICogbW91c2UgdXAuIFRoaXMgZXZlbnQgY2FuIGJlIGxpc3RlbmVkIGZvciB0byBwZXJmb3JtIGFjdGlvbnMgd2hpbGUgZHJhZyBzZWxlY3RpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7R3JpZExvY2F0aW9uQ29uZmlnW10sR3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5zZWxlY3RlZENlbGxzIFRoZSBjZWxscyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBkcmFnZ2VkIG92ZXJcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5zZWxlY3RlZFJlY29yZHMgVGhlIHJlY29yZHMgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgZHJhZ2dlZCBvdmVyXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRHJhZ1NlbGVjdGluZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc2VsZWN0ZWRDZWxsczogR3JpZExvY2F0aW9uQ29uZmlnW118R3JpZExvY2F0aW9uW10sIHNlbGVjdGVkUmVjb3JkczogTW9kZWxbXSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSB3aWRnZXQncyBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGhlIFdpZGdldCdzIGVsZW1lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRWxlbWVudENyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIFBhbmVsIGlzIGV4cGFuZGVkIHVzaW5nIHRoZSBbY29sbGFwc2libGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpIHNldHRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuUGFuZWx9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUGFuZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIGEgcGFyZW50IG5vZGUgcmVjb3JkIGlzIGV4cGFuZGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCB3aGljaCBoYXMgYmVlbiBleHBhbmRlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FeHBhbmROb2RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgZmlsZSBpcyBkcm9wcGVkIG9uIHRoZSB3aWRnZXQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIG93bmluZyBHcmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtEYXRhVHJhbnNmZXJJdGVtfSBldmVudC5maWxlIFRoZSBkcm9wcGVkIGZpbGUgZGVzY3JpcHRvclxuICAgICAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERyYWdFdmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGVEcm9wOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBmaWxlOiBEYXRhVHJhbnNmZXJJdGVtLCBkb21FdmVudDogRHJhZ0V2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhlIEZpbGxIYW5kbGUgZHJhZ2dpbmcgaXMgZmluYWxpemVkIGFuZCB2YWx1ZXMgYXJlIGFwcGxpZWQgdG8gY2VsbHMsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlXG4gICAgICogZHJhZyBvcGVyYXRpb24gZnJvbSBhcHBseWluZyBkYXRhIGNoYW5nZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZnJvbSBUaGUgZnJvbSBjZWxsXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC50byBUaGUgdG8gY2VsbFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxsSGFuZGxlQmVmb3JlRHJhZ0ZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZnJvbTogR3JpZExvY2F0aW9uLCB0bzogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoaWxlIGRyYWdnaW5nIHRoZSBGaWxsSGFuZGxlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmZyb20gVGhlIGZyb20gY2VsbFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQudG8gVGhlIHRvIGNlbGxcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSByYXcgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsbEhhbmRsZURyYWc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBmcm9tOiBHcmlkTG9jYXRpb24sIHRvOiBHcmlkTG9jYXRpb24sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgRmlsbEhhbmRsZSBkcmFnIG9wZXJhdGlvbiBpcyBhYm9ydGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVEcmFnQWJvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciBhIEZpbGxIYW5kbGUgZHJhZyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZnJvbSBUaGUgZnJvbSBjZWxsXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC50byBUaGUgdG8gY2VsbFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxsSGFuZGxlRHJhZ0VuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGZyb206IEdyaWRMb2NhdGlvbiwgdG86IEdyaWRMb2NhdGlvbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZHJhZ2dpbmcgb2YgdGhlIEZpbGxIYW5kbGUgc3RhcnRzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmNlbGwgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbHVtbiAvIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxsSGFuZGxlRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2VsbDogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBjZWxsIGVkaXRpbmcgaXMgZmluaXNoZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUYXJnZXQgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q2VsbEVkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmluaXNoQ2VsbEVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgcm93IGVkaXRpbmcgaXMgZmluaXNoZWQsIHJldHVybiBmYWxzZSB0byBzaWduYWwgdGhhdCB0aGUgdmFsdWUgaXMgaW52YWxpZCBhbmQgZWRpdGluZyBzaG91bGQgbm90IGJlIGZpbmFsaXplZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNldmVudC1maW5pc2hSb3dFZGl0KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRhcmdldCBncmlkXG4gICAgICogQHBhcmFtIHtSb3dFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbmlzaFJvd0VkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBSb3dFZGl0b3JDb250ZXh0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBlbnRlcnMgdGhpcyBXaWRnZXQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c0luOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIGBibHVyYCBldmVudC5cbiAgICAgKiBmb2N1cyBtb3ZpbmcgZnJvbSB3aXRoaW4gdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZSwgZXZlbiBpZiB0aGVyZSBhcmUgZmxvYXRpbmcgd2lkZ2V0c1xuICAgICAqIHdpbGwgbm90IHRyaWdnZXIgdGhpcyBldmVudC4gVGhpcyBpcyB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgd2lkZ2V0IGNvbXBsZXRlbHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c091dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgZHJhZ2dpbmcgc3RhcnRzLCByZXR1cm4gZmFsc2UgdG8gcHJldmVudCB0aGUgZHJhZyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudCxUb3VjaEV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dCZWZvcmVEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHJlY29yZHM6IE1vZGVsW10gfSwgZXZlbnQ6IE1vdXNlRXZlbnR8VG91Y2hFdmVudCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhlIHJvdyBkcm9wIG9wZXJhdGlvbiBpcyBmaW5hbGl6ZWQuIFlvdSBjYW4gcmV0dXJuIGZhbHNlIHRvIGFib3J0IHRoZSBkcm9wIG9wZXJhdGlvbiwgb3IgYVxuICAgICAqIFByb21pc2UgeWllbGRpbmcgYHRydWVgIC8gYGZhbHNlYCB3aGljaCBhbGxvd3MgZm9yIGFzeW5jaHJvbm91cyBhYm9ydCAoZS5nLiBmaXJzdCBzaG93IHVzZXIgYSBjb25maXJtYXRpb24gZGlhbG9nKS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LnZhbGlkIFNldCB0aGlzIHRvIHRydWUgb3IgZmFsc2UgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZHJvcCBwb3NpdGlvbiBpcyB2YWxpZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0Lmluc2VydEJlZm9yZSBUaGUgcmVjb3JkIHRvIGluc2VydCBiZWZvcmUgKGBudWxsYCBpZiBpbnNlcnRpbmcgYXQgbGFzdCBwb3NpdGlvbiBvZiBhIHBhcmVudCBub2RlKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0LnBhcmVudCBUaGUgcGFyZW50IHJlY29yZCBvZiB0aGUgY3VycmVudCBkcm9wIHBvc2l0aW9uIChvbmx5IGFwcGxpY2FibGUgZm9yIHRyZWVzKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7UmVjb3JkUG9zaXRpb25Db250ZXh0W119IGV2ZW50LmNvbnRleHQub2xkUG9zaXRpb25Db250ZXh0IEFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJldmlvdXMgdHJlZSBwb3NpdGlvbi4gT2JqZWN0cyBjb250YWluIHRoZSBgcmVjb3JkYCwgYW5kIGl0cyBvcmlnaW5hbCBgcGFyZW50SW5kZXhgIGFuZCBgcGFyZW50SWRgIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93QmVmb3JlRHJvcEZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyB2YWxpZDogYm9vbGVhbiwgaW5zZXJ0QmVmb3JlOiBNb2RlbCwgcGFyZW50OiBNb2RlbCwgcmVjb3JkczogTW9kZWxbXSwgb2xkUG9zaXRpb25Db250ZXh0OiBSZWNvcmRQb3NpdGlvbkNvbnRleHRbXSB9LCBldmVudDogTW91c2VFdmVudCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoaWxlIHRoZSByb3cgaXMgYmVpbmcgZHJhZ2dlZCwgaW4gdGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHlvdSBoYXZlIGFjY2VzcyB0byBgY29udGV4dC5pbnNlcnRCZWZvcmVgIGEgZ3JpZCAvXG4gICAgICogdHJlZSByZWNvcmQsIGFuZCBhZGRpdGlvbmFsbHkgYGNvbnRleHQucGFyZW50YCAoYSBUcmVlTm9kZSkgZm9yIHRyZWVzLiBZb3UgY2FuIHNpZ25hbCB0aGF0IHRoZSBkcm9wIHBvc2l0aW9uIGlzXG4gICAgICogdmFsaWQgb3IgaW52YWxpZCBieSBzZXR0aW5nIGBjb250ZXh0LnZhbGlkID0gZmFsc2U7YFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQudmFsaWQgU2V0IHRoaXMgdG8gdHJ1ZSBvciBmYWxzZSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIGlzIHZhbGlkLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0Lmluc2VydEJlZm9yZSBUaGUgcmVjb3JkIHRvIGluc2VydCBiZWZvcmUgKGBudWxsYCBpZiBpbnNlcnRpbmcgYXQgbGFzdCBwb3NpdGlvbiBvZiBhIHBhcmVudCBub2RlKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0LnBhcmVudCBUaGUgcGFyZW50IHJlY29yZCBvZiB0aGUgY3VycmVudCBkcm9wIHBvc2l0aW9uIChvbmx5IGFwcGxpY2FibGUgZm9yIHRyZWVzKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93RHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgdmFsaWQ6IGJvb2xlYW4sIGluc2VydEJlZm9yZTogTW9kZWwsIHBhcmVudDogTW9kZWwsIHJlY29yZHM6IE1vZGVsW10gfSwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSByb3cgZHJhZyBvcGVyYXRpb24gaXMgYWJvcnRlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0RyYWdBYm9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgcmVjb3JkczogTW9kZWxbXSB9LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBkcmFnZ2luZyBzdGFydHMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudCxUb3VjaEV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHJlY29yZHM6IE1vZGVsW10gfSwgZXZlbnQ6IE1vdXNlRXZlbnR8VG91Y2hFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgdGhlIHJvdyBkcm9wIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLCByZWdhcmRsZXNzIG9mIHZhbGlkaXR5XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC52YWxpZCB0cnVlIG9yIGZhbHNlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIHdhcyB2YWxpZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0Lmluc2VydEJlZm9yZSBUaGUgcmVjb3JkIHRvIGluc2VydCBiZWZvcmUgKGBudWxsYCBpZiBpbnNlcnRpbmcgYXQgbGFzdCBwb3NpdGlvbiBvZiBhIHBhcmVudCBub2RlKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5jb250ZXh0LnBhcmVudCBUaGUgcGFyZW50IHJlY29yZCBvZiB0aGUgY3VycmVudCBkcm9wIHBvc2l0aW9uIChvbmx5IGFwcGxpY2FibGUgZm9yIHRyZWVzKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7UmVjb3JkUG9zaXRpb25Db250ZXh0W119IGV2ZW50LmNvbnRleHQub2xkUG9zaXRpb25Db250ZXh0IEFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJldmlvdXMgdHJlZSBwb3NpdGlvbi4gT2JqZWN0cyBjb250YWluIHRoZSByZWNvcmQsIGFuZCBpdHMgb3JpZ2luYWwgYHBhcmVudEluZGV4YCBhbmQgYHBhcmVudElkYCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0Ryb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHZhbGlkOiBib29sZWFuLCBpbnNlcnRCZWZvcmU6IE1vZGVsLCBwYXJlbnQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdLCBvbGRQb3NpdGlvbkNvbnRleHQ6IFJlY29yZFBvc2l0aW9uQ29udGV4dFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgZ3JpZCBoZWFkZXIgaXMgY2xpY2tlZCBvbi5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNldmVudC1oZWFkZXJDbGljaylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHRyaWdnZXJpbmcgRE9NIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiBjbGlja2VkIG9uLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlckNsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZG9tRXZlbnQ6IEV2ZW50LCBjb2x1bW46IENvbHVtbiB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSBoZWFkZXIuXG4gICAgICogQWxsb3dzIG1hbmlwdWxhdGlvbiBvZiB0aGUgaXRlbXMgdG8gc2hvdyBpbiB0aGUgc2FtZSB3YXkgYXMgaW4gdGhlIFtwcm9jZXNzSXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvSGVhZGVyTWVudSNjb25maWctcHJvY2Vzc0l0ZW1zKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNldmVudC1oZWFkZXJNZW51QmVmb3JlU2hvdylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlck1lbnVCZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIGNvbHVtbjogQ29sdW1uIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCBpbiB0aGUgaGVhZGVyIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlck1lbnVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY29sdW1uOiBDb2x1bW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGFmdGVyIHRoZSBjb250ZXh0IG1lbnUgaXMgc2hvd24gZm9yIGEgaGVhZGVyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IZWFkZXJNZW51U2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBhIGNoZWNrIGl0ZW0gaXMgdG9nZ2xlZCBpbiB0aGUgaGVhZGVyIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hlY2tlZCBDaGVja2VkIG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlck1lbnVUb2dnbGVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY29sdW1uOiBDb2x1bW4sIGNoZWNrZWQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIHdpZGdldCB3YXMgaGlkZGVuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiByb3cgbG9ja2luZyBpcyBlbmFibGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuY2xvbmUgVGhlIGNyZWF0ZWQgY2xvbmVcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Mb2NrUm93czogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNsb25lOiBHcmlkQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogTW91c2UgbW92ZWQgb3V0IGZyb20gZWxlbWVudCBpbiBncmlkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTW91c2VPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogTW91c2UgbW92ZWQgaW4gb3ZlciBlbGVtZW50IGluIGdyaWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Nb3VzZU92ZXI6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSB3aWRnZXQgd2hpY2ggaGFkIGJlZW4gaW4gYSBub24tdmlzaWJsZSBzdGF0ZSBmb3IgYW55IHJlYXNvblxuICAgICAqIGFjaGlldmVzIHZpc2liaWxpdHkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjZXZlbnQtcGFpbnQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBwYWludGVkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuZmlyc3RQYWludCBgdHJ1ZWAgaWYgdGhpcyBpcyB0aGUgZmlyc3QgcGFpbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGFpbnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZmlyc3RQYWludDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGFmdGVyIGEgcGFzdGUgYWN0aW9uIGlzIHBlcmZvcm1lZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY2xpcGJvYXJkRGF0YSBUaGUgY2xpcGJvYXJkRGF0YSB0aGF0IHdhcyBwYXN0ZWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5tb2RpZmllZFJlY29yZHMgVGhlIHJlY29yZHMgd2hpY2ggaGF2ZSBiZWVuIG1vZGlmaWVkIGR1ZSB0byB0aGUgcGFzdGUgYWN0aW9uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC50YXJnZXRDZWxsIFRoZSBjZWxsIGZyb20gd2hpY2ggdGhlIHBhc3RlIHdpbGwgYmUgc3RhcnRlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5lbnRpdHlOYW1lICdjZWxsJyB0byBkaXN0aW5ndWlzaCB0aGlzIGV2ZW50IGZyb20gb3RoZXIgcGFzdGUgZXZlbnRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGFzdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNsaXBib2FyZERhdGE6IHN0cmluZywgbW9kaWZpZWRSZWNvcmRzOiBNb2RlbFtdLCB0YXJnZXRDZWxsOiBHcmlkTG9jYXRpb24sIGVudGl0eU5hbWU6IHN0cmluZyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gZXhwb3J0IGhhcyBmaW5pc2hlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge1Jlc3BvbnNlfSBbZXZlbnQucmVzcG9uc2VdIE9wdGlvbmFsIHJlc3BvbnNlLCBpZiByZWNlaXZlZFxuICAgICAqIEBwYXJhbSB7RXJyb3J9IFtldmVudC5lcnJvcl0gT3B0aW9uYWwgZXJyb3IsIGlmIGV4Y2VwdGlvbiBvY2N1cnJlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBkZkV4cG9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlc3BvbnNlPzogUmVzcG9uc2UsIGVycm9yPzogRXJyb3IgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBXaWRnZXQncyByZWFkIG9ubHkgc3RhdGUgaXMgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnJlYWRPbmx5IFJlYWQgb25seSBvciBub3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWFkT25seTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlYWRPbmx5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgd2lkZ2V0J3MgZWxlbWVudHMgaGF2ZSBiZWVuIHN5bmNocm9uaXplZCBkdWUgdG8gYSBkaXJlY3Qgb3IgaW5kaXJlY3QgY2FsbFxuICAgICAqIHRvIFtyZWNvbXBvc2VdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tcmVjb21wb3NlKSwgaWYgdGhpcyByZXN1bHRzIGluIHNvbWUgY2hhbmdlIHRvIHRoZSB3aWRnZXQncyByZW5kZXJlZCBET00gZWxlbWVudHMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVjb21wb3NlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYWZ0ZXIgYSByb3cgaXMgcmVuZGVyZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLnJvdy5Sb3d9IGV2ZW50LnJvdyBUaGUgcm93IHRoYXQgaGFzIGJlZW4gcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgZm9yIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQucmVjb3JkSW5kZXggVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlbmRlclJvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIHJvdzogUm93LCByZWNvcmQ6IE1vZGVsLCByZWNvcmRJbmRleDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBHcmlkIHJvd3MgaGF2ZSBiZWVuIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhpcyBncmlkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlbmRlclJvd3M6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBlbmNhcHN1bGF0aW5nIGVsZW1lbnQgb2YgYSBXaWRnZXQgcmVzaXplcyAqb25seSB3aGVuIFttb25pdG9yUmVzaXplXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tb25pdG9yUmVzaXplKSBpcyBgdHJ1ZWAqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogR3JpZCByZXNpemUgbGVhZCB0byBhIG5ldyByZXNwb25zaXZlIGxldmVsIGJlaW5nIGFwcGxpZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBHcmlkIHRoYXQgd2FzIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQubGV2ZWwgTmV3IHJlc3BvbnNpdmUgbGV2ZWwgKHNtYWxsLCBsYXJnZSwgZXRjKVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC53aWR0aCBOZXcgd2lkdGggaW4gcHhcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQub2xkTGV2ZWwgT2xkIHJlc3BvbnNpdmUgbGV2ZWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkV2lkdGggT2xkIHdpZHRoIGluIHB4XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzcG9uc2l2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGxldmVsOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIG9sZExldmVsOiBzdHJpbmcsIG9sZFdpZHRoOiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgd2hlbiBhIHJvdyBoYXMgZmluaXNoZWQgY29sbGFwc2luZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Sb3dDb2xsYXBzZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlY29yZDogTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgd2hlbiBhIHJvdyBleHBhbmQgaGFzIGZpbmlzaGVkIGV4cGFuZGluZy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNldmVudC1yb3dFeHBhbmQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmV4cGFuZGVkRWxlbWVudHMgQW4gb2JqZWN0IHdpdGggdGhlIEdyaWQgcmVnaW9uIG5hbWUgYXMgcHJvcGVydHkgYW5kIHRoZSBleHBhbmRlZCBib2R5IGVsZW1lbnQgYXMgdmFsdWVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQud2lkZ2V0IEluIGNhc2Ugb2YgZXhwYW5kaW5nIGEgV2lkZ2V0LCB0aGlzIHdpbGwgYmUgYSByZWZlcmVuY2UgdG8gdGhlIGluc3RhbmNlIGNyZWF0ZWQgYnkgdGhlIGFjdHVhbCBleHBhbnNpb24uIElmIHRoZXJlIGlzIG11bHRpcGxlIEdyaWQgcmVnaW9ucywgdXNlIHRoZSBgd2lkZ2V0c2AgcGFyYW0gaW5zdGVhZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQud2lkZ2V0cyBJbiBjYXNlIG9mIGV4cGFuZGluZyBhIFdpZGdldCwgdGhpcyB3aWxsIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBHcmlkIHJlZ2lvbiBuYW1lIGFzIHByb3BlcnR5IGFuZCB0aGUgcmVmZXJlbmNlIHRvIHRoZSB3aWRnZXQgaW5zdGFuY2UgY3JlYXRlZCBieSB0aGUgYWN0dWFsIGV4cGFuc2lvblxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJvd0V4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlY29yZDogTW9kZWwsIGV4cGFuZGVkRWxlbWVudHM6IG9iamVjdCwgd2lkZ2V0OiBXaWRnZXQsIHdpZGdldHM6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGEgcm93XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIGhvdmVyZWQgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIGN1cnJlbnRseSBob3ZlcmVkXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJvd01vdXNlRW50ZXI6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYSByb3dcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93IHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnQgdGhhdCB0aGUgbW91c2UgbGVmdFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Sb3dNb3VzZUxlYXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBHcmlkIGhhcyBzY3JvbGxlZCB2ZXJ0aWNhbGx5XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5zY3JvbGxUb3AgVGhlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TY3JvbGw6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBzY3JvbGxUb3A6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhlIHNlbGVjdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0geydzZWxlY3QnLCdkZXNlbGVjdCd9IGV2ZW50LmFjdGlvbiBgJ3NlbGVjdCdgL2AnZGVzZWxlY3QnYFxuICAgICAqIEBwYXJhbSB7J3JvdycsJ2NlbGwnfSBldmVudC5tb2RlIGAncm93J2AvYCdjZWxsJ2BcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5kZXNlbGVjdGVkIFRoZSByZWNvcmRzIGRlc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuc2VsZWN0ZWQgVGhlIHJlY29yZHMgc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuc2VsZWN0aW9uIFRoZSByZWNvcmRzIGluIHRoZSBuZXcgc2VsZWN0aW9uLlxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5kZXNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIGRlc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LnNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIHNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5jZWxsU2VsZWN0aW9uIFRoZSBjZWxscyBpbiB0aGUgbmV3IHNlbGVjdGlvbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBhY3Rpb246ICdzZWxlY3QnfCdkZXNlbGVjdCcsIG1vZGU6ICdyb3cnfCdjZWxsJywgc291cmNlOiBHcmlkLCBkZXNlbGVjdGVkOiBNb2RlbFtdLCBzZWxlY3RlZDogTW9kZWxbXSwgc2VsZWN0aW9uOiBNb2RlbFtdLCBkZXNlbGVjdGVkQ2VsbHM6IEdyaWRMb2NhdGlvbltdLCBzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25bXSwgY2VsbFNlbGVjdGlvbjogR3JpZExvY2F0aW9uW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoZSBzZWxlY3Rpb25Nb2RlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LnNlbGVjdGlvbk1vZGUgVGhlIG5ldyBbc2VsZWN0aW9uTW9kZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9taXhpbi9HcmlkU2VsZWN0aW9uI2NvbmZpZy1zZWxlY3Rpb25Nb2RlKVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbk1vZGVDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzZWxlY3Rpb25Nb2RlOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIHdpZGdldCBpcyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHNwbGl0dGluZyB0aGUgR3JpZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2VbXX0gZXZlbnQuc3ViVmlld3MgVGhlIHN1YiB2aWV3cyBjcmVhdGVkIGJ5IHRoZSBzcGxpdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vcHRpb25zIFRoZSBvcHRpb25zIHBhc3NlZCB0byB0aGUgc3BsaXQgY2FsbFxuICAgICAqIEBwYXJhbSB7J2hvcml6b250YWwnLCd2ZXJ0aWNhbCcsJ2JvdGgnfSBldmVudC5vcHRpb25zLmRpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBzcGxpdFxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5vcHRpb25zLmF0Q29sdW1uIFRoZSBjb2x1bW4gdG8gc3BsaXQgYXRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQub3B0aW9ucy5hdFJlY29yZCBUaGUgcmVjb3JkIHRvIHNwbGl0IGF0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdWJWaWV3czogR3JpZEJhc2VbXSwgb3B0aW9uczogeyBkaXJlY3Rpb246ICdob3Jpem9udGFsJ3wndmVydGljYWwnfCdib3RoJywgYXRDb2x1bW46IENvbHVtbiwgYXRSZWNvcmQ6IE1vZGVsIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJ5IHRoZSBHcmlkIHdoZW4gdGhlIGNvbGxhcHNlIGljb24gaXMgY2xpY2tlZC4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBjb2xsYXBzZSBhY3Rpb24sXG4gICAgICogaWYgeW91IHdhbnQgdG8gaW1wbGVtZW50IHlvdXIgb3duIGJlaGF2aW9yLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuU3ViR3JpZH0gZXZlbnQuc3ViR3JpZCBUaGUgc3ViZ3JpZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXR0ZXJDb2xsYXBzZUNsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkLCBkb21FdmVudDogRXZlbnQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYnkgdGhlIEdyaWQgYWZ0ZXIgYSBzdWItZ3JpZCBoYXMgYmVlbiByZXNpemVkIHVzaW5nIHRoZSBzcGxpdHRlclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuU3ViR3JpZH0gZXZlbnQuc3ViR3JpZCBUaGUgcmVzaXplZCBzdWJncmlkXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TcGxpdHRlckRyYWdFbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHN1YkdyaWQ6IFN1YkdyaWQsIGRvbUV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYnkgdGhlIEdyaWQgd2hlbiBhIHN1Yi1ncmlkIHJlc2l6ZSBnZXN0dXJlIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuU3ViR3JpZH0gZXZlbnQuc3ViR3JpZCBUaGUgc3ViZ3JpZCBhYm91dCB0byBiZSByZXNpemVkXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TcGxpdHRlckRyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc3ViR3JpZDogU3ViR3JpZCwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBieSB0aGUgR3JpZCB3aGVuIHRoZSBleHBhbmQgaWNvbiBpcyBjbGlja2VkLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGV4cGFuZCBhY3Rpb24sXG4gICAgICogaWYgeW91IHdhbnQgdG8gaW1wbGVtZW50IHlvdXIgb3duIGJlaGF2aW9yLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuU3ViR3JpZH0gZXZlbnQuc3ViR3JpZCBUaGUgc3ViZ3JpZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXR0ZXJFeHBhbmRDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc3ViR3JpZDogU3ViR3JpZCwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGVkaXRpbmcgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtDZWxsRWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TdGFydENlbGxFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gZWRpdGluZyBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge1Jvd0VkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3RhcnRSb3dFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBSb3dFZGl0b3JDb250ZXh0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBhZnRlciBhIHN1YiBncmlkIGlzIGNvbGxhcHNlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSBzdWIgZ3JpZCBpbnN0YW5jZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN1YkdyaWRDb2xsYXBzZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIHN1YkdyaWQ6IFN1YkdyaWQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIGEgc3ViIGdyaWQgaXMgZXhwYW5kZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuU3ViR3JpZH0gZXZlbnQuc3ViR3JpZCBUaGUgc3ViIGdyaWQgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TdWJHcmlkRXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgc3ViR3JpZDogU3ViR3JpZCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBvbmUgb3IgbW9yZSBncm91cHMgYXJlIGV4cGFuZGVkIG9yIGNvbGxhcHNlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuZ3JvdXBSZWNvcmQgW0RFUFJFQ0FURURdIFVzZSBgZ3JvdXBSZWNvcmRzYCBwYXJhbSBpbnN0ZWFkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuZ3JvdXBSZWNvcmRzIFRoZSBncm91cCByZWNvcmRzIGJlaW5nIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbGxhcHNlIENvbGxhcHNlZCAodHJ1ZSkgb3IgZXhwYW5kZWQgKGZhbHNlKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2V2ZW50LmFsbFJlY29yZHNdIFRydWUgaWYgdGhpcyBldmVudCBpcyBwYXJ0IG9mIHRvZ2dsaW5nIGFsbCBncm91cHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub2dnbGVHcm91cDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyb3VwUmVjb3JkOiBNb2RlbCwgZ3JvdXBSZWNvcmRzOiBNb2RlbFtdLCBjb2xsYXBzZTogYm9vbGVhbiwgYWxsUmVjb3Jkcz86IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIGEgcGFyZW50IG5vZGUgcmVjb3JkIHRvZ2dsZXMgaXRzIGNvbGxhcHNlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIGJlaW5nIHRvZ2dsZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZSBgdHJ1ZWAgaWYgdGhlIG5vZGUgaXMgYmVpbmcgY29sbGFwc2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRvZ2dsZU5vZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsLCBjb2xsYXBzZTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogQSBoZWFkZXIgW3Rvb2xdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctdG9vbHMpIGhhcyBiZWVuIGNsaWNrZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuVG9vbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Ub29sfSBldmVudC50b29sIFRoZSB0b29sIHdoaWNoIGlzIGJlaW5nIGNsaWNrZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVG9vbENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBUb29sLCB0b29sOiBUb29sIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBvbiB0aGUgb3duaW5nIEdyaWQvU2NoZWR1bGVyL0dhbnR0IGFmdGVyIHRyZWUgZ3JvdXBpbmcgbGV2ZWxzIGNoYW5nZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8RnVuY3Rpb24pW119IGV2ZW50Lmdyb3VwZXJzIEFycmF5IG9mIGZpZWxkIG5hbWVzIG9yIGZ1bmN0aW9ucyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZ3JvdXBpbmcgbGV2ZWxzXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfEZ1bmN0aW9uKVtdfSBldmVudC5vbGRHcm91cGVycyBBcnJheSBvZiBmaWVsZCBuYW1lcyBvciBmdW5jdGlvbnMgcmVwcmVzZW50aW5nIHRoZSBwcmV2aW91cyBncm91cGluZyBsZXZlbHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UcmVlR3JvdXA6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGdyb3VwZXJzOiAoc3RyaW5nfEZ1bmN0aW9uKVtdLCBvbGRHcm91cGVyczogKHN0cmluZ3xGdW5jdGlvbilbXSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiByb3cgbG9ja2luZyBpcyBkaXNhYmxlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LmNsb25lIFRoZSBsb2NrZWQgY2xvbmUgdGhhdCB3aWxsIGJlIGRlc3Ryb3llZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblVubG9ja1Jvd3M6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjbG9uZTogR3JpZEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdW4tc3BsaXR0aW5nIHRoZSBHcmlkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblVuc3BsaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbmQgYXBwZW5kIHRoZSB1bmRlcmx5aW5nIHdpZGdldFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgbWUgPSB0aGlzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ1xuICAgICAgICAgICAgfSA9IG1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VOYW1lLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdzLFxuICAgICAgICAgICAgICAgIGJyeW50dW1FdmVudHNcbiAgICAgICAgICAgIH0gPSBCcnludHVtVHJlZUdyaWRDb21wb25lbnQ7XG5cbiAgICAgICAgYnJ5bnR1bUNvbmZpZ3MuZmlsdGVyKHByb3AgPT4gcHJvcCBpbiB0aGlzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShicnludHVtQ29uZmlnLCBwcm9wLCB0aGlzW3Byb3BdKTtcbiAgICAgICAgICAgIGlmIChbJ2ZlYXR1cmVzJywgJ2NvbmZpZyddLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29uZmlnUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBicnludHVtRXZlbnRzLmZpbHRlcihldmVudCA9PiB0aGlzW2V2ZW50XSAmJiB0aGlzW2V2ZW50XS5vYnNlcnZlcnMubGVuZ3RoID4gMCkuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIHVuY2FwaXRhbGl6ZSA9IChzdHI6IHN0cmluZykgPT4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9IChzdHI6IHN0cmluZykgPT4gdW5jYXBpdGFsaXplKHN0ci5zbGljZSgyKSk7XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGJyeW50dW1Db25maWcubGlzdGVuZXJzW2V2ZW50TmFtZShldmVudCldID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIG1lW2V2ZW50XS5lbWl0KGUpO1xuICAgICAgICAgICAgICAgIC8vIEV2ZW50RW1pdHRlciBkb2VzIG5vdCByZXR1cm4gdmFsdWVzIGluIHRoZSBub3JtYWwgd2F5LCB3b3JrIGFyb3VuZCBpdCBieSBzZXR0aW5nIGByZXR1cm5WYWx1ZWAgZmxhZ1xuICAgICAgICAgICAgICAgIC8vIGluIEFuZ3VsYXIgbGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUucmV0dXJuVmFsdWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiBjb21wb25lbnQgaGFzIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQgaW4gY29uZmlnIHRoZW4gdXNlIGFkb3B0IHRvIFdyYXBwZXIncyBlbGVtZW50XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBjb250YWluZXJQYXJhbSA9IFtcbiAgICAgICAgICAgICAgICAnYWRvcHQnLFxuICAgICAgICAgICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICAgICAgICAgJ2luc2VydEFmdGVyJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QmVmb3JlJ1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIF0uZmluZChwcm9wID0+IGJyeW50dW1Db25maWdbcHJvcF0pO1xuICAgICAgICBpZiAoIWNvbnRhaW5lclBhcmFtKSB7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VOYW1lID09PSAnQnV0dG9uJyB8fCBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Um9vdE5vZGUoKSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAvLyBCdXR0b24gc2hvdWxkIGFsd2F5cyBiZSA8YT4gb3IgPGJ1dHRvbj4gaW5zaWRlIG93bmVyIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFwcGVuZFRvID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hZG9wdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbnRhaW5lcihpbnN0YW5jZU5hbWUsIGNvbnRhaW5lclBhcmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluIHNoYWRvdyBET00gKGUuZy4gQW5ndWxhciBWaWV3RW5jYXBzdWxhdGlvbi5TaGFkb3dEb20pLCB0aGVtZSBDU1MgZnJvbSBkb2N1bWVudC5oZWFkXG4gICAgICAgIC8vIGRvZXMgbm90IGNhc2NhZGUgaW50byB0aGUgc2hhZG93IHJvb3QuIEluamVjdCBhIG1hdGNoaW5nIDxsaW5rPiBzbyBCcnludHVtJ3MgQ1NTIGNoZWNrXG4gICAgICAgIC8vIGZpbmRzIHRoZSB0aGVtZS4gVGhlIEBmb250LWZhY2UgcnVsZXMgZnJvbSBjb21wb25lbnQgc3R5bGVzIGFyZSBhbHNvIGV4dHJhY3RlZCB0b1xuICAgICAgICAvLyBkb2N1bWVudCBzY29wZSBzbyBkb2N1bWVudC5mb250cyBkZXRlY3RzIHRoZW0gKHNoYWRvdy1yb290IEBmb250LWZhY2UgaXMgbm90IHJlbGlhYmx5XG4gICAgICAgIC8vIGluY2x1ZGVkIGluIGRvY3VtZW50LmZvbnRzIGFjcm9zcyBhbGwgYnJvd3NlcnMpLlxuICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCk7XG4gICAgICAgIGlmIChzaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgaW5pdFRoZW1lSW5TaGFkb3dSb290cygpO1xuICAgICAgICAgICAgQnJ5bnR1bVRyZWVHcmlkQ29tcG9uZW50LmVuc3VyZUZvbnRzSW5Eb2N1bWVudChzaGFkb3dSb290KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbWUuaW5zdGFuY2UgPSBpbnN0YW5jZU5hbWUgPT09ICdXaWRnZXQnID8gV2lkZ2V0LmNyZWF0ZShicnludHVtQ29uZmlnKSA6IG5ldyBpbnN0YW5jZUNsYXNzKGJyeW50dW1Db25maWcpO1xuXG4gICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBncmlkSW5zdGFuY2UsIHNjaGVkdWxlckluc3RhbmNlIGV0Yy5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBtZVtTdHJpbmdIZWxwZXIudW5jYXBpdGFsaXplKGluc3RhbmNlTmFtZSkgKyAnSW5zdGFuY2UnXSA9IG1lLmluc3RhbmNlO1xuICAgICAgICAvLyBcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyBhbGwgQGZvbnQtZmFjZSBkZWNsYXJhdGlvbnMgZnJvbSBhIHNoYWRvdyByb290J3Mgc3R5bGVzaGVldHMgYW5kIGFkZHMgdGhlbSB0b1xuICAgICAqIGRvY3VtZW50LmhlYWQgYXMgYSBzaW5nbGUgPHN0eWxlPiBlbGVtZW50LiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIEBmb250LWZhY2UgcnVsZXMgaW5zaWRlXG4gICAgICogYSBzaGFkb3cgcm9vdCBhcmUgbm90IHJlbGlhYmx5IGluY2x1ZGVkIGluIGRvY3VtZW50LmZvbnRzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIGNhdXNpbmdcbiAgICAgKiBCcnludHVtJ3MgQ1NTIGNvbXBhdGliaWxpdHkgY2hlY2sgdG8gaW5jb3JyZWN0bHkgcmVwb3J0IG1pc3NpbmcgZm9udHMuXG4gICAgICogU2FmZSB0byBjYWxsIG11bHRpcGxlIHRpbWVzIOKAlCB0aGUgZXh0cmFjdGlvbiBydW5zIG9ubHkgb25jZSBwZXIgcGFnZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBlbnN1cmVGb250c0luRG9jdW1lbnQoc2hhZG93Um9vdDogU2hhZG93Um9vdCk6IHZvaWQge1xuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2Itc2hhZG93LXJvb3QtZm9udHMnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9udEZhY2VSdWxlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBjb25zdCBleHRyYWN0RnJvbVNoZWV0ID0gKHNoZWV0OiBDU1NTdHlsZVNoZWV0KTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gc2hlZXQuY3NzUnVsZXM7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnVsZXNbaV0udHlwZSA9PT0gQ1NTUnVsZS5GT05UX0ZBQ0VfUlVMRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udEZhY2VSdWxlcy5wdXNoKHJ1bGVzW2ldLmNzc1RleHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9lKSB7XG4gICAgICAgICAgICAgICAgLy8gQ3Jvc3Mtb3JpZ2luIGFjY2VzcyBtYXkgdGhyb3c7IHNpbGVudGx5IHNraXBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBhZG9wdGVkU3R5bGVTaGVldHMgKEFuZ3VsYXIgMTQrIC8gbW9kZXJuIGJyb3dzZXJzKVxuICAgICAgICBjb25zdCBhZG9wdGVkU2hlZXRzOiBDU1NTdHlsZVNoZWV0W10gPSAoc2hhZG93Um9vdCBhcyBhbnkpLmFkb3B0ZWRTdHlsZVNoZWV0cyA/PyBbXTtcbiAgICAgICAgYWRvcHRlZFNoZWV0cy5mb3JFYWNoKHNoZWV0ID0+IGV4dHJhY3RGcm9tU2hlZXQoc2hlZXQpKTtcblxuICAgICAgICAvLyA8c3R5bGU+IGVsZW1lbnRzIChvbGRlciBBbmd1bGFyIG9yIGZhbGxiYWNrKVxuICAgICAgICBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ3N0eWxlJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBpZiAoZWwuc2hlZXQpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0RnJvbVNoZWV0KGVsLnNoZWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGZvbnRGYWNlUnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgc3R5bGUuaWQgPSAnYi1zaGFkb3ctcm9vdC1mb250cyc7XG4gICAgICAgICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGZvbnRGYWNlUnVsZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdhdGNoIGZvciBjaGFuZ2VzXG4gICAgICogQHBhcmFtIGNoYW5nZXNcbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgeyBpbnN0YW5jZU5hbWUgfSA9IEJyeW50dW1UcmVlR3JpZENvbXBvbmVudDtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgY2hhbmdlc1xuICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzKS5mb3JFYWNoKChbcHJvcCwgY2hhbmdlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IChjaGFuZ2UgYXMgU2ltcGxlQ2hhbmdlKS5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgICAgICB7IGJyeW50dW1Db25maWdzT25seSwgYnJ5bnR1bVByb3BzIH0gPSBCcnludHVtVHJlZUdyaWRDb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoYnJ5bnR1bVByb3BzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShpbnN0YW5jZSwgcHJvcCwgbmV3VmFsdWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJ5bnR1bUNvbmZpZ3NPbmx5LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ1VwZGF0ZVByb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UuZGVzdHJveSkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
2215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS10cmVlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS10cmVlLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBMjRELFFBQVEsRUFBaUQsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXAvRCxPQUFPLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQTg4QjVELE1BQU0sT0FBTyx3QkFBd0I7SUFzY2pDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUEyTUYsa0JBQWtCO1FBQ2xCOzs7OztXQUtHO1FBQ08sMkJBQXNCLEdBQVEsSUFBSSxZQUFZLEVBQW1GLENBQUM7UUFDNUk7Ozs7OztXQU1HO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQXNHLENBQUM7UUFDOUo7Ozs7O1dBS0c7UUFDTywwQkFBcUIsR0FBUSxJQUFJLFlBQVksRUFBd0YsQ0FBQztRQUNoSjs7Ozs7O1dBTUc7UUFDTyw0QkFBdUIsR0FBUSxJQUFJLFlBQVksRUFBNkYsQ0FBQztRQUN2Sjs7Ozs7O1dBTUc7UUFDTywwQkFBcUIsR0FBUSxJQUFJLFlB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O3NCQUFuQixNQUFNO2dCQU1HLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsV0FBVztzQkFBcEIsTUFBTTtnQkFTRyxPQUFPO3NCQUFoQixNQUFNO2dCQVVHLE9BQU87c0JBQWhCLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTTtnQkFNRyxVQUFVO3NCQUFuQixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBU0csV0FBVztzQkFBcEIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQVVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBVUcsWUFBWTtzQkFBckIsTUFBTTtnQkFNRyxhQUFhO3NCQUF0QixNQUFNO2dCQVVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBVUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFTRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLFFBQVE7c0JBQWpCLE1BQU07Z0JBY0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU1HLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBVUcsT0FBTztzQkFBaEIsTUFBTTtnQkFTRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBUUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQVFHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFTRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBT0csZUFBZTtzQkFBeEIsTUFBTTtnQkFPRyxjQUFjO3NCQUF2QixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxlQUFlO3NCQUF4QixNQUFNO2dCQVNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBT0csWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxXQUFXO3NCQUFwQixNQUFNO2dCQVFHLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUcsWUFBWTtzQkFBckIsTUFBTTtnQkFJRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vKipcbiAqIEFuZ3VsYXIgd3JhcHBlciBmb3IgQnJ5bnR1bSBUcmVlR3JpZFxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBTaW1wbGVDaGFuZ2UsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBXcmFwcGVySGVscGVyIGZyb20gJy4vd3JhcHBlci5oZWxwZXInO1xuXG5pbXBvcnQgeyBBSSwgQUlDb25maWcsIEFJRmlsdGVyLCBBSUZpbHRlckNvbmZpZywgQWpheFN0b3JlLCBBamF4U3RvcmVDb25maWcsIEJhc2UsIENlbGxDb3B5UGFzdGUsIENlbGxDb3B5UGFzdGVDb25maWcsIENlbGxFZGl0LCBDZWxsRWRpdENvbmZpZywgQ2VsbEVkaXRvckNvbnRleHQsIENlbGxNZW51LCBDZWxsTWVudUNvbmZpZywgQ2VsbFRvb2x0aXAsIENlbGxUb29sdGlwQ29uZmlnLCBDaGFydHMsIENoYXJ0c0NvbmZpZywgQ29sb3IsIENvbHVtbiwgQ29sdW1uQXV0b1dpZHRoLCBDb2x1bW5BdXRvV2lkdGhDb25maWcsIENvbHVtbkRyYWdUb29sYmFyLCBDb2x1bW5EcmFnVG9vbGJhckNvbmZpZywgQ29sdW1uUGlja2VyLCBDb2x1bW5QaWNrZXJDb25maWcsIENvbHVtblJlbmFtZSwgQ29sdW1uUmVuYW1lQ29uZmlnLCBDb2x1bW5SZW9yZGVyLCBDb2x1bW5SZW9yZGVyQ29uZmlnLCBDb2x1bW5SZXNpemUsIENvbHVtblJlc2l6ZUNvbmZpZywgQ29sdW1uU3RvcmUsIENvbHVtblN0b3JlQ29uZmlnLCBDb250YWluZXIsIENvbnRhaW5lckl0ZW1Db25maWcsIERvbUNvbmZpZywgRW1wdHlUZXh0RG9tQ29uZmlnLCBFeGNlbEV4cG9ydGVyLCBFeGNlbEV4cG9ydGVyQ29uZmlnLCBFeHBvcnRDb25maWcsIEZpbGVEcm9wLCBGaWxlRHJvcENvbmZpZywgRmlsbEhhbmRsZSwgRmlsbEhhbmRsZUNvbmZpZywgRmlsdGVyLCBGaWx0ZXJCYXIsIEZpbHRlckJhckNvbmZpZywgRmlsdGVyQ29uZmlnLCBGb3JtdWxhUHJvdmlkZXJDb25maWcsIEdyaWQsIEdyaWRCYXNlLCBHcmlkQ29sdW1uQ29uZmlnLCBHcmlkTG9jYXRpb24sIEdyaWRMb2NhdGlvbkNvbmZpZywgR3JpZFNlbGVjdGlvbk1vZGUsIEdyaWRTdGF0ZUluZm8sIEdyb3VwLCBHcm91cENvbmZpZywgR3JvdXBTdW1tYXJ5LCBHcm91cFN1bW1hcnlDb25maWcsIEhlYWRlck1lbnUsIEhlYWRlck1lbnVDb25maWcsIEluc3RhbmNlUGx1Z2luLCBLZXlNYXBDb25maWcsIExvY2tSb3dzLCBMb2NrUm93c0NvbmZpZywgTWFzaywgTWFza0NvbmZpZywgTWVudSwgTWVudUl0ZW0sIE1lbnVJdGVtRW50cnksIE1lcmdlQ2VsbHMsIE1lcmdlQ2VsbHNDb25maWcsIE1vZGVsLCBNb2RlbENvbmZpZywgT3ZlcmZsb3dUd2luQ29uZmlnLCBQYWdpbmdUb29sYmFyQ29uZmlnLCBQYW5lbCwgUGFuZWxDb2xsYXBzZXJDb25maWcsIFBhbmVsQ29sbGFwc2VyT3ZlcmxheUNvbmZpZywgUGFuZWxIZWFkZXIsIFBkZkV4cG9ydCwgUGRmRXhwb3J0Q29uZmlnLCBQaW5Db2x1bW5zLCBQaW5Db2x1bW5zQ29uZmlnLCBQcmVzZXJ2ZVNjcm9sbE9wdGlvbnMsIFByaW50LCBQcmludENvbmZpZywgUXVpY2tGaW5kLCBRdWlja0ZpbmRDb25maWcsIFJlY29yZFBvc2l0aW9uQ29udGV4dCwgUmVnaW9uUmVzaXplLCBSZWdpb25SZXNpemVDb25maWcsIFJlc3BvbnNpdmVMZXZlbENvbmZpZywgUm93LCBSb3dDb3B5UGFzdGUsIFJvd0NvcHlQYXN0ZUNvbmZpZywgUm93RWRpdCwgUm93RWRpdENvbmZpZywgUm93RWRpdG9yQ29udGV4dCwgUm93RXhwYW5kZXIsIFJvd0V4cGFuZGVyQ29uZmlnLCBSb3dSZW9yZGVyLCBSb3dSZW9yZGVyQ29uZmlnLCBSb3dSZXNpemUsIFJvd1Jlc2l6ZUNvbmZpZywgU2Nyb2xsTWFuYWdlciwgU2Nyb2xsTWFuYWdlckNvbmZpZywgU2Nyb2xsZXIsIFNjcm9sbGVyQ29uZmlnLCBTZWFyY2gsIFNlYXJjaENvbmZpZywgU29ydCwgU29ydENvbmZpZywgU3BsaXQsIFNwbGl0Q29uZmlnLCBTdGF0ZVByb3ZpZGVyLCBTdGlja3lDZWxscywgU3RpY2t5Q2VsbHNDb25maWcsIFN0b3JlLCBTdG9yZUNvbmZpZywgU3RyaXBlLCBTdHJpcGVDb25maWcsIFN1YkdyaWQsIFN1YkdyaWRDb25maWcsIFN1bW1hcnksIFN1bW1hcnlDb25maWcsIFRhYkNvbmZpZywgVG9vbCwgVG9vbENvbmZpZywgVG9vbGJhckNvbmZpZywgVG9vbGJhckl0ZW1zLCBUb29sdGlwQ29uZmlnLCBUcmVlLCBUcmVlQ29uZmlnLCBUcmVlR3JpZCwgVHJlZUdyaWRMaXN0ZW5lcnMsIFRyZWVHcm91cCwgVHJlZUdyb3VwQ29uZmlnLCBXaWRnZXQsIFhMU0NvbHVtbiB9IGZyb20gJ0BicnludHVtL2dyaWQnO1xuXG5pbXBvcnQgeyBEb21IZWxwZXIsIFN0cmluZ0hlbHBlciB9IGZyb20gJ0BicnludHVtL2dyaWQnO1xuaW1wb3J0IHsgaW5pdFRoZW1lSW5TaGFkb3dSb290cyB9IGZyb20gJy4vc2hhZG93ZG9tLmhlbHBlcic7XG5cbmV4cG9ydCB0eXBlIEJyeW50dW1UcmVlR3JpZFByb3BzID0ge1xuICAgIC8vIENvbmZpZ3NcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhZG9wdCBhcyB0aGlzIFdpZGdldCdzIGVuY2Fwc3VsYXRpbmcgZWxlbWVudC4gVGhlIHdpZGdldCdzXG4gICAgICogY29udGVudCB3aWxsIGJlIHBsYWNlZCBpbnNpZGUgdGhpcyBlbGVtZW50LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1hZG9wdClcbiAgICAgKi9cbiAgICBhZG9wdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFthbGlnbi1zZWxmXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYWxpZ24tc2VsZikgc3R5bGUuXG4gICAgICovXG4gICAgYWxpZ25TZWxmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFuaW1hdGUgcm93IHJlbW92YWxzIGNhdXNlZCBieSBmaWx0ZXJpbmcuXG4gICAgICogQGRlcHJlY2F0ZWQgNy4wLjAgRGVwcmVjYXRlZCBgYW5pbWF0ZUZpbHRlclJlbW92YWxzYC4gVXNlIGB0cmFuc2l0aW9uLmZpbHRlclJlbW92YWxgIGluc3RlYWRcbiAgICAgKi9cbiAgICBhbmltYXRlRmlsdGVyUmVtb3ZhbHMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiByZW1vdmluZyBhbmQgaW5zZXJ0aW5nIHJvd3Mgc2hvdWxkIGJlIGFuaW1hdGVkLiBTZXQgdG8gYGZhbHNlYCB0byBwcmV2ZW50IHRob3NlIGFuaW1hdGlvbnMsXG4gICAgICogcmVtb3ZpbmcgdGhlIHJlbGF0ZWQgZGVsYXlzLlxuICAgICAqIEBkZXByZWNhdGVkIDcuMC4wIERlcHJlY2F0ZWQgYGFuaW1hdGVSZW1vdmluZ1Jvd3NgLiBVc2UgYHRyYW5zaXRpb24ucmVtb3ZlUmVjb3JkYCBpbnN0ZWFkXG4gICAgICovXG4gICAgYW5pbWF0ZVJlbW92aW5nUm93cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIFtUcmVlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1RyZWUpIGZlYXR1cmUgaXMgaW4gdXNlIGFuZCB0aGUgU3RvcmUgaXMgYSB0cmVlIHN0b3JlLCB0aGlzXG4gICAgICogY29uZmlnIG1heSBiZSBzZXQgdG8gYHRydWVgIHRvIHZpc3VhbGx5IGFuaW1hdGUgYnJhbmNoIG5vZGUgZXhwYW5kIGFuZCBjb2xsYXBzZSBvcGVyYXRpb25zLlxuICAgICAqICpUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU2NoZWR1bGVyIGFuZCBHYW50dCpcbiAgICAgKiBAZGVwcmVjYXRlZCA3LjAuMCBEZXByZWNhdGVkIGBhbmltYXRlVHJlZU5vZGVUb2dnbGVgLiBVc2UgYHRyYW5zaXRpb24udG9nZ2xlVHJlZU5vZGVgIGluc3RlYWRcbiAgICAgKi9cbiAgICBhbmltYXRlVHJlZU5vZGVUb2dnbGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciB0aGUgaWQgb2YgYW4gZWxlbWVudCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0J3MgZWxlbWVudCB0by4gQ2FuIGJlIGNvbmZpZ3VyZWQsIG9yIHNldCBvbmNlIGF0XG4gICAgICogcnVudGltZS4gVG8gYWNjZXNzIHRoZSBlbGVtZW50IG9mIGEgcmVuZGVyZWQgd2lkZ2V0LCBzZWUgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkuXG4gICAgICogPGRpdiBjbGFzcz1cIm5vdGVcIj5XaGVuIGNyZWF0aW5nIG5lc3RlZCB0cmVlcyBvZiB3aWRnZXRzLCB0aGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gdGhlIG91dGVybW9zdCB3aWRnZXQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWFwcGVuZFRvKVxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctYXJpYURlc2NyaXB0aW9uKVxuICAgICAqL1xuICAgIGFyaWFEZXNjcmlwdGlvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3QgYXNcbiAgICAgKiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctYXJpYUxhYmVsKVxuICAgICAqL1xuICAgIGFyaWFMYWJlbCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQXV0b21hdGljYWxseSBzZXQgZ3JpZHMgaGVpZ2h0IHRvIGZpdCBhbGwgcm93cyAobm8gc2Nyb2xsaW5nIGluIHRoZSBncmlkKS4gSW4gZ2VuZXJhbCB5b3Ugc2hvdWxkIGF2b2lkXG4gICAgICogdXNpbmcgYGF1dG9IZWlnaHQ6IHRydWVgLCBzaW5jZSBpdCB3aWxsIGJ5cGFzcyBHcmlkcyB2aXJ0dWFsIHJlbmRlcmluZyBhbmQgcmVuZGVyIGFsbCByb3dzIGF0IG9uY2UsIHdoaWNoXG4gICAgICogaW4gYSBsYXJnZXIgZ3JpZCBpcyByZWFsbHkgYmFkIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgKi9cbiAgICBhdXRvSGVpZ2h0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBDb25maWcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhciksXG4gICAgICogb3IgYXJyYXkgb2YgY29uZmlnIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBjaGlsZCBpdGVtcyBvZiBhIFRvb2xiYXIuIEFub3RoZXIgd2F5IHRvIGFkZCBhIGJiYXIgaXMgdG8gdXNlIFtzdHJpcHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctYmJhcilcbiAgICAgKi9cbiAgICBiYmFyID8gOiAoQ29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBwYW5lbCdzIGJvZHkgZWxlbWVudC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctYm9keUNscylcbiAgICAgKi9cbiAgICBib2R5Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IGB0cnVlYCB0byBhZGQgYSBib3JkZXIgdG8gdGhpcyBjb250YWluZXIncyBlbGVtZW50LlxuICAgICAqL1xuICAgIGJvcmRlciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aGVyZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGEgdHJ1dGh5IHZhbHVlIGluZGljYXRlIHdoaWNoIGV2ZW50cyBzaG91bGQgYnViYmxlIHVwIHRoZSBvd25lcnNoaXBcbiAgICAgKiBoaWVyYXJjaHkgd2hlbiB0cmlnZ2VyZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWJ1YmJsZUV2ZW50cylcbiAgICAgKi9cbiAgICBidWJibGVFdmVudHMgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBjYWxsIG9uWFhYIG1ldGhvZCBuYW1lcyAoZS5nLiBgb25TaG93YCwgYG9uQ2xpY2tgKSwgYXMgYW4gZWFzeSB3YXkgdG8gbGlzdGVuIGZvciBldmVudHMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWNhbGxPbkZ1bmN0aW9ucylcbiAgICAgKi9cbiAgICBjYWxsT25GdW5jdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBpZiBhbiBldmVudCBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24sIHRoZSBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBzdGFjayBhbmQgdGhlXG4gICAgICogYXBwbGljYXRpb24gc3RhdGUgaXMgdW5kZWZpbmVkLiBDb2RlIHdoaWNoIGZvbGxvd3MgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCAqbm90KiBiZSBleGVjdXRlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zKVxuICAgICAqL1xuICAgIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGNyb3AgdGV4dCBpbiBncmlkIGNlbGxzIHdpdGhvdXQgZWxsaXBzaXMgKC4uLikuIFdoZW4gZW5hYmxlZCwgY2VsbHMgY29udGFpbmluZyBwdXJlXG4gICAgICogdXNlIGBkaXNwbGF5IDogYmxvY2tgLCBpbnN0ZWFkIG9mIGBkaXNwbGF5IDogZmxleGAgdG8gYWxsb3cgZWxsaXBzaXMgdG8gd29yay5cbiAgICAgKiA8c3Ryb25nPk5PVEU8L3N0cm9uZz4gT25seSBzdXBwb3J0ZWQgaW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGA6aGFzKClgIENTUyBzZWxlY3RvclxuICAgICAqL1xuICAgIGNlbGxFbGxpcHNpcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gZWxlbWVudC5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctY2xzKVxuICAgICAqL1xuICAgIGNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHBhbmVsIGlzIGNvbGxhcHNlZCAodGhlIGJvZHkgb2YgdGhlIHBhbmVsIGlzIGhpZGRlbiB3aGlsZSBvbmx5IHRoZSBoZWFkZXIgaXNcbiAgICAgKiB2aXNpYmxlKS4gT25seSB2YWxpZCBpZiB0aGUgcGFuZWwgaXMgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNpYmxlKS5cbiAgICAgKi9cbiAgICBjb2xsYXBzZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBlbmFibGVzIGNvbGxhcHNpYmlsaXR5IGZvciB0aGUgcGFuZWwuIFNlZSBbY29sbGFwc2VkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNlZCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWNvbGxhcHNpYmxlKVxuICAgICAqL1xuICAgIGNvbGxhcHNpYmxlID8gOiBib29sZWFufFBhbmVsQ29sbGFwc2VyQ29uZmlnfFBhbmVsQ29sbGFwc2VyT3ZlcmxheUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIHNwZWNpZmllZCBjb2xvciB0byB0aGUgd2lkZ2V0LCBieSBzZXR0aW5nIHRoZSBgLS1iLXByaW1hcnlgIENTUyB2YXJpYWJsZSBpbiB0aGUgd2lkZ2V0c1xuICAgICAqIGBzdHlsZWAgYmxvY2suXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWNvbG9yKVxuICAgICAqL1xuICAgIGNvbG9yID8gOiBDb2xvclxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgd2hpY2ggY29sdW1uIHRvIHN0YXJ0IGluIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIGNvbHVtbiA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgY29sdW1uIGxpbmVzLiBFbmQgcmVzdWx0IG1pZ2h0IGJlIG92ZXJydWxlZCBieS9kaWZmZXIgYmV0d2VlbiB0aGVtZXMuXG4gICAgICovXG4gICAgY29sdW1uTGluZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBY2NlcHRzIGNvbHVtbiBkZWZpbml0aW9ucyBmb3IgdGhlIGdyaWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGV5IHdpbGwgYmUgdXNlZCB0byBjcmVhdGVcbiAgICAgKiBbQ29sdW1uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vQ29sdW1uKSBpbnN0YW5jZXMgdGhhdCBhcmUgYWRkZWQgdG8gYSBbQ29sdW1uU3RvcmVdKCNHcmlkL2RhdGEvQ29sdW1uU3RvcmUpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1jb2x1bW5zKVxuICAgICAqL1xuICAgIGNvbHVtbnMgPyA6IENvbHVtblN0b3JlfEdyaWRDb2x1bW5Db25maWdbXXxDb2x1bW5TdG9yZUNvbmZpZ1xuICAgIGNvbmZpZyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byB0aGUgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctY29udGVudEVsZW1lbnRDbHMpXG4gICAgICovXG4gICAgY29udGVudEVsZW1lbnRDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBFdmVudCB3aGljaCBpcyB1c2VkIHRvIHNob3cgY29udGV4dCBtZW51cy5cbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6ICdjb250ZXh0bWVudScsICdjbGljaycsICdkYmxjbGljaycuXG4gICAgICovXG4gICAgY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQgPyA6ICdjb250ZXh0bWVudSd8J2NsaWNrJ3wnZGJsY2xpY2snXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVudCBzaG9ydGN1dCB0byBzZXQgZGF0YSBpbiBncmlkcyBzdG9yZSBib3RoIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgYXQgcnVudGltZS4gQ2FuIGFsc28gYmVcbiAgICAgKiB1c2VkIHRvIHJldHJpZXZlIGRhdGEgYXQgcnVudGltZSwgYWx0aG91Z2ggd2UgZG8gcmVjb21tZW5kIGludGVyYWN0aW5nIHdpdGggR3JpZHMgc3RvcmUgaW5zdGVhZCB1c2luZ1xuICAgICAqIHRoZSBbc3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjcHJvcGVydHktc3RvcmUpIHByb3BlcnR5LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1kYXRhKVxuICAgICAqL1xuICAgIGRhdGEgPyA6IG9iamVjdFtdfE1vZGVsW118TW9kZWxDb25maWdbXVxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBXaWRnZXQgY29uZmlndXJhdGlvbiBpcyB1c2VkIGluIHRoZSBHcmlkJ3MgUm93RXhwYW5kZXIgZmVhdHVyZSdzIGB3aWRnZXRgIGNvbmZpZywgcHJvdmlkZSB0aGVcbiAgICAgKiBmaWVsZCBvbiB0aGUgZXhwYW5kZWQgcmVjb3JkIHRvIHVzZSBmb3IgcG9wdWxhdGluZyB0aGlzIHdpZGdldCdzIHN0b3JlIChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICAgIGRhdGFGaWVsZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGFwcGx5IHRvIGVsZW1lbnRzIGRhdGFzZXQgKGVhY2gga2V5IHdpbGwgYmUgdXNlZCBhcyBhIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50KVxuICAgICAqL1xuICAgIGRhdGFzZXQgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICAvKipcbiAgICAgKiBSZWdpb24gdG8gd2hpY2ggY29sdW1ucyBhcmUgYWRkZWQgd2hlbiB0aGV5IGhhdmUgbm9uZSBzcGVjaWZpZWRcbiAgICAgKi9cbiAgICBkZWZhdWx0UmVnaW9uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGRlc3Ryb3kgdGhlIHN0b3JlIHdoZW4gdGhlIGdyaWQgaXMgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIGRlc3Ryb3lTdG9yZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENoZWNrIGZvciBDU1MgY29tcGF0aWJpbGl0eSBhbmQgaW5jbHVzaW9uIHJlbGF0ZWQgaXNzdWVzIGFuZCB0cnkgdG8gYXV0byBmaXggdGhlbS4gUGVyZm9ybXMgdGhlIGZvbGxvd2luZ1xuICAgICAqIGNoZWNrczpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcylcbiAgICAgKi9cbiAgICBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBvciBlbmFibGUgdGhlIHdpZGdldC4gSXQgaXMgc2ltaWxhciB0byBbcmVhZE9ubHldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXJlYWRPbmx5KSBleGNlcHQgYSBkaXNhYmxlZCB3aWRnZXRcbiAgICAgKiBjYW5ub3QgYmUgZm9jdXNlZCwgdXNlcyBhIGRpZmZlcmVudCByZW5kaXRpb24gKHVzdWFsbHkgZ3JleWlzaCkgYW5kIGRvZXMgbm90IGFsbG93IHNlbGVjdGluZyBpdHMgdmFsdWUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWRpc2FibGVkKVxuICAgICAqL1xuICAgIGRpc2FibGVkID8gOiBib29sZWFufCdpbmVydCdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIG5vdCBnZXQgYSB3YXJuaW5nIHdoZW4gY2FsbGluZyBbZ2V0U3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZnVuY3Rpb24tZ2V0U3RhdGUpIHdoZW4gdGhlcmUgaXMgYSBjb2x1bW5cbiAgICAgKiBjb25maWd1cmVkIHdpdGhvdXQgYW4gYGlkYC4gQnV0IHRoZSByZWNvbW1lbmRlZCBhY3Rpb24gaXMgdG8gYWx3YXlzIGNvbmZpZ3VyZSBjb2x1bW5zIHdpdGggYW4gYGlkYCB3aGVuXG4gICAgICogdXNpbmcgc3RhdGVzLlxuICAgICAqL1xuICAgIGRpc2FibGVHcmlkQ29sdW1uSWRXYXJuaW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBub3QgZ2V0IGEgd2FybmluZyB3aGVuIHVzaW5nIGFub3RoZXIgYmFzZSBjbGFzcyB0aGFuIEdyaWRSb3dNb2RlbCBmb3IgeW91ciBncmlkIGRhdGEuIElmXG4gICAgICogeW91IGRvLCBhbmQgd291bGQgbGlrZSB0byB1c2UgdGhlIGZ1bGwgZmVhdHVyZSBzZXQgb2YgdGhlIGdyaWQgdGhlbiBpbmNsdWRlIHRoZSBmaWVsZHMgZnJvbSBHcmlkUm93TW9kZWxcbiAgICAgKiBpbiB5b3VyIG1vZGVsIGRlZmluaXRpb24uXG4gICAgICovXG4gICAgZGlzYWJsZUdyaWRSb3dNb2RlbFdhcm5pbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyB0aGUgcGxhY2VtZW50IG9mIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgYWRkZWQgdG8gYSBbcGFuZWwncyBdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbClcbiAgICAgKiBbc3RyaXBzIGNvbGxlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS4gVHlwaWNhbCB2YWx1ZXMgZm9yIHRoaXMgY29uZmlnIGFyZSBgJ3RvcCdgLFxuICAgICAqIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBvciBgJ3JpZ2h0J2AsIHdoaWNoIGNhdXNlIHRoZSB3aWRnZXQgdG8gYmUgcGxhY2VkIG9uIHRoYXQgc2lkZSBvZiB0aGUgcGFuZWwnc1xuICAgICAqIGJvZHkuIFN1Y2ggd2lkZ2V0cyBhcmUgY2FsbGVkIFwiZWRnZSBzdHJpcHNcIi5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctZG9jaylcbiAgICAgKi9cbiAgICBkb2NrID8gOiAndG9wJ3wnYm90dG9tJ3wnbGVmdCd8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnfCdoZWFkZXInfCdwcmUtaGVhZGVyJ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBNYWtlIHRoaXMgUGFuZWwgYSBkb2NrZWQgZHJhd2VyIHdoaWNoIHNsaWRlcyBvdXQgZnJvbSBvbmUgc2lkZSBvZiB0aGUgYnJvd3NlciB2aWV3cG9ydCBieSBkZWZhdWx0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1kcmF3ZXIpXG4gICAgICogQHBhcmFtIHsnc3RhcnQnLCdsZWZ0JywnZW5kJywncmlnaHQnLCd0b3AnLCdib3R0b20nfSBbc2lkZV0gVGhlIHNpZGUgb2YgdGhlIHZpZXdwb3J0IHRvIGRvY2sgdGhlIGRyYXdlciB0by4gICogYCdzdGFydCdgIG1lYW5zIHRoZSBgaW5saW5lLXN0YXJ0YCBzaWRlLiAqIGAnZW5kJ2AgbWVhbnMgdGhlIGBpbmxpbmUtZW5kYCBzaWRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nLG51bWJlcn0gW3NpemVdIFRoZSBzaXplIG9mIHRoZSBkcmF3ZXIgaW4gaXRzIGNvbGxhcHNpYmxlIGF4aXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5saW5lXSBJZiB1c2luZyB0aGUgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgdG8gcGxhY2UgdGhlIGRyYXdlciBpbnNpZGUgYSBob3N0IHdpZGdldCwgdGhpcyBtYXkgYmUgc2V0IHRvIGB0cnVlYCB0byBtYWtlIHRoZSBkcmF3ZXIgaW5saW5lIHdpdGhpbiB0aGF0IGhvc3QuIE5vdGUgdGhhdCwgaWYgdXNpbmcgdGhpcywgdGhlIGxheW91dCBvZiB0aGUgaG9zdCBlbGVtZW50IG11c3QgaGF2ZSBgZmxleC1kaXJlY3Rpb25gIHNldCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixvYmplY3R9IFthdXRvQ2xvc2VdIFNwZWNpZmllcyB3aGF0IHVzZXIgYWN0aW9ucyBzaG91bGQgYXV0b21hdGljYWxseSBjbG9zZSB0aGUgZHJhd2VyLiBEZWZhdWx0cyB0byBjbG9zaW5nIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGRyYXdlciBvciB3aGVuIGZvY3VzIG1vdmVzIG91dHNpZGUgb2YgdGhlIGRyYXdlci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sc3RyaW5nfSBbYXV0b0Nsb3NlLm1vdXNlZG93bl0gSWYgdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGRyYXdlciwgdGhlIGRyYXdlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaGlkZGVuLiBJZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcsIGl0IGlzIHVzZWQgYXMgYSBDU1Mgc2VsZWN0b3IgdG8gZmlsdGVyIGNsaWNrcyB3aGljaCBzaG91bGQgY2xvc2UgdGhlIGRyYXdlci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sc3RyaW5nfSBbYXV0b0Nsb3NlLmZvY3Vzb3V0XSBJZiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIsIHRoZSBkcmF3ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGhpZGRlbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2F1dG9DbG9zZS5tb3VzZW91dF0gSGlkZXMgdGhlIGRyYXdlciB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIGRyYXdlciBhZnRlciB0aGUgYGF1dG9DbG9zZURlbGF5YCBwZXJpb2QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthdXRvQ2xvc2VEZWxheV0gV2hlbiB1c2luZyBgbW91c2VvdXRgLCB0aGlzIGlzIHRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHNcbiAgICAgKi9cbiAgICBkcmF3ZXIgPyA6IGJvb2xlYW58eyBzaWRlPzogJ3N0YXJ0J3wnbGVmdCd8J2VuZCd8J3JpZ2h0J3wndG9wJ3wnYm90dG9tJywgc2l6ZT86IHN0cmluZ3xudW1iZXIsIGlubGluZT86IGJvb2xlYW4sIGF1dG9DbG9zZT86IGJvb2xlYW58eyBtb3VzZWRvd24/OiBib29sZWFufHN0cmluZywgZm9jdXNvdXQ/OiBib29sZWFufHN0cmluZywgbW91c2VvdXQ/OiBzdHJpbmcgfSwgYXV0b0Nsb3NlRGVsYXk/OiBudW1iZXIgfVxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBzcGVjaWZ5aW5nIGF0dHJpYnV0ZXMgdG8gYXNzaWduIHRvIHRoZSByb290IGVsZW1lbnQgb2YgdGhpcyB3aWRnZXQuXG4gICAgICogU2V0IGBudWxsYCB2YWx1ZSB0byBhdHRyaWJ1dGUgdG8gcmVtb3ZlIGl0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1lbGVtZW50QXR0cmlidXRlcylcbiAgICAgKi9cbiAgICBlbGVtZW50QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+XG4gICAgLyoqXG4gICAgICogVGV4dCBvciBIVE1MLCBvciBhIFtFbXB0eVRleHREb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjdHlwZWRlZi1FbXB0eVRleHREb21Db25maWcpIGJsb2NrIHRvIGRpc3BsYXkgd2hlbiB0aGVyZSBpcyBubyBkYXRhIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWQuXG4gICAgICogV2hlbiB1c2luZyBtdWx0aXBsZSBHcmlkIHJlZ2lvbnMsIHByb3ZpZGUgdGhlIGByZWdpb25gIHByb3BlcnR5IHRvIGRlY2lkZSB3aGVyZSB0aGUgdGV4dCBpcyBzaG93bi5cbiAgICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzaG93biBpbiB0aGUgZmlyc3QgcmVnaW9uLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1lbXB0eVRleHQpXG4gICAgICovXG4gICAgZW1wdHlUZXh0ID8gOiBzdHJpbmd8RW1wdHlUZXh0RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBlbmFibGUgdGhlIFtTdGlja3lDZWxsc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TdGlja3lDZWxscykgZmVhdHVyZSwgd2hpY2ggcGlucyBjZWxsXG4gICAgICogY29udGVudCB0byB0aGUgdG9wIG9mIHRoZSBncmlkIHdoaWxlIHJvd3Mgc2Nyb2xsIG9mZiB0aGUgdG9wIGJ1dCByZW1haW4gdmlzaWJsZS5cbiAgICAgKiBAZGVwcmVjYXRlZCA3LjMuMCBVc2UgYGZlYXR1cmVzIDogeyBzdGlja3lDZWxscyA6IHRydWUgfWAgaW5zdGVhZFxuICAgICAqL1xuICAgIGVuYWJsZVN0aWNreSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYWxsb3cgdGV4dCBzZWxlY3Rpb24gaW4gdGhlIGdyaWQgY2VsbHMuIE5vdGUsIHRoaXMgY2Fubm90IGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCB0aGVcbiAgICAgKiBgUm93UmVvcmRlcmAgZmVhdHVyZS5cbiAgICAgKi9cbiAgICBlbmFibGVUZXh0U2VsZWN0aW9uID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBsaXN0ZW4gZm9yIENUUkwtWiAoQ01ELVogb24gTWFjIE9TKSBrZXlib2FyZCBldmVudCBhbmQgdHJpZ2dlciB1bmRvIChyZWRvIHdoZW4gU0hJRlQgaXNcbiAgICAgKiBwcmVzc2VkKS4gT25seSBhcHBsaWNhYmxlIHdoZW4gdXNpbmcgYSBbU3RhdGVUcmFja2luZ01hbmFnZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvc3RtL1N0YXRlVHJhY2tpbmdNYW5hZ2VyKS5cbiAgICAgKi9cbiAgICBlbmFibGVVbmRvUmVkb0tleXMgPyA6IGJvb2xlYW5cbiAgICBleHRyYURhdGEgPyA6IGFueVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gc3RyZXRjaCB0aGUgbGFzdCBjb2x1bW4gaW4gYSBncmlkIHdpdGggYWxsIGZpeGVkIHdpZHRoIGNvbHVtbnNcbiAgICAgKiB0byBmaWxsIGV4dHJhIGF2YWlsYWJsZSBzcGFjZSBpZiB0aGUgZ3JpZCdzIHdpZHRoIGlzIHdpZGVyIHRoYW4gdGhlIHN1bSBvZiBhbGxcbiAgICAgKiBjb25maWd1cmVkIGNvbHVtbiB3aWR0aHMuXG4gICAgICovXG4gICAgZmlsbExhc3RDb2x1bW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBVc2UgZml4ZWQgcm93IGhlaWdodC4gU2V0dGluZyB0aGlzIHRvIGB0cnVlYCB3aWxsIGNvbmZpZ3VyZSB0aGUgdW5kZXJseWluZyBSb3dNYW5hZ2VyIHRvIHVzZSBmaXhlZCByb3dcbiAgICAgKiBoZWlnaHQsIHdoaWNoIHNhY3JpZmljZXMgdGhlIGFiaWxpdHkgdG8gdXNlIHJvd3Mgd2l0aCB2YXJpYWJsZSBoZWlnaHQgdG8gZ2FpbiBhIGZyYWN0aW9uIGJldHRlclxuICAgICAqIHBlcmZvcm1hbmNlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1maXhlZFJvd0hlaWdodClcbiAgICAgKi9cbiAgICBmaXhlZFJvd0hlaWdodCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbZmxleF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZsZXgpIHN0eWxlLlxuICAgICAqIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYCZsdDtmbGV4LWdyb3cmZ3Q7ICZsdDtmbGV4LXNocmluayZndDsgJmx0O2ZsZXgtYmFzaXMmZ3Q7YCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHRoZSBgZmxleC1ncm93YCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmbGV4ID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlnIG9iamVjdCBvZiBhIGZvb3Rlci4gTWF5IGNvbnRhaW4gYSBgZG9ja2AsIGBodG1sYCBhbmQgYSBgY2xzYCBwcm9wZXJ0eS4gQSBmb290ZXIgaXMgbm90IGEgd2lkZ2V0LFxuICAgICAqIGJ1dCByYXRoZXIgcGxhaW4gSFRNTCB0aGF0IGZvbGxvd3MgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGFuZWwncyBib2R5IGFuZCBbc3RyaXBzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXN0cmlwcykuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWZvb3RlcilcbiAgICAgKiBAcHJvcGVydHkgeyd0b3AnLCdyaWdodCcsJ2JvdHRvbScsJ2xlZnQnLCdzdGFydCcsJ2VuZCd9IGRvY2sgV2hlcmUgdG8gZG9ja1xuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBodG1sIEh0bWwgdG8gcG9wdWxhdGUgdGhlIGZvb3RlciB3aXRoXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGNscyBDU1MgY2xhc3MgdG8gYWRkIHRvIHRoZSBmb290ZXJcbiAgICAgKi9cbiAgICBmb290ZXIgPyA6IG9iamVjdHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hpY2ggbmFtZXMgZm9ybXVsYSBwcmVmaXhlcyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGNvbHVtbnMgY29uZmlndXJlZCB3aXRoXG4gICAgICogYGZvcm11bGEgOiB0cnVlYC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctZm9ybXVsYVByb3ZpZGVycylcbiAgICAgKi9cbiAgICBmb3JtdWxhUHJvdmlkZXJzID8gOiBSZWNvcmQ8c3RyaW5nLCBGb3JtdWxhUHJvdmlkZXJDb25maWc+XG4gICAgLyoqXG4gICAgICogUmVmcmVzaCBlbnRpcmUgcm93IHdoZW4gYSByZWNvcmQgY2hhbmdlcyAoYHRydWVgKSBvciwgaWYgcG9zc2libGUsIG9ubHkgdGhlIGNlbGxzIGFmZmVjdGVkIChgZmFsc2VgKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctZnVsbFJvd1JlZnJlc2gpXG4gICAgICovXG4gICAgZnVsbFJvd1JlZnJlc2ggPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCByb3cgdG8gZGV0ZXJtaW5lIGl0cyBoZWlnaHQuIEl0IGlzIHBhc3NlZCBhIFtyZWNvcmRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvTW9kZWwpIGFuZFxuICAgICAqIGV4cGVjdGVkIHRvIHJldHVybiB0aGUgZGVzaXJlZCBoZWlnaHQgb2YgdGhhdCByZWNvcmRzIHJvdy4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmYWxzeSB2YWx1ZSwgR3JpZHNcbiAgICAgKiBjb25maWd1cmVkIFtyb3dIZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXJvd0hlaWdodCkgaXMgdXNlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctZ2V0Um93SGVpZ2h0KVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBnZXRSb3dIZWlnaHQucmVjb3JkIFJlY29yZCB0byBkZXRlcm1pbmUgcm93IGhlaWdodCBmb3JcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBEZXNpcmVkIHJvdyBoZWlnaHRcbiAgICAgKi9cbiAgICBnZXRSb3dIZWlnaHQgPyA6ICgpID0+IG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgY29uZmlnIFtvYmplY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCN0eXBlZGVmLVBhbmVsSGVhZGVyKSBmb3IgdGhlIHBhbmVsJ3MgaGVhZGVyIG9yIGEgc3RyaW5nIGluIHBsYWNlIG9mIGEgYHRpdGxlYC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctaGVhZGVyKVxuICAgICAqL1xuICAgIGhlYWRlciA/IDogc3RyaW5nfGJvb2xlYW58UGFuZWxIZWFkZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBoZWlnaHQsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLmhlaWdodGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgaGVpZ2h0IHN0cmluZyBvciBhIG51bWJlcixcbiAgICAgKiB3aGljaCB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIGhlaWdodCwgYnV0IGluIHNvbWVcbiAgICAgKiBjYXNlcyB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIGhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB3aXRoIHRydWUgdG8gbWFrZSB3aWRnZXQgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKi9cbiAgICBoaWRkZW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGhpZGUgdGhlIGZvb3RlciBlbGVtZW50c1xuICAgICAqL1xuICAgIGhpZGVGb290ZXJzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBoaWRlIHRoZSBjb2x1bW4gaGVhZGVyIGVsZW1lbnRzXG4gICAgICovXG4gICAgaGlkZUhlYWRlcnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGhpZGUgdGhlIEdyaWQncyBob3Jpem9udGFsIHNjcm9sbGJhcihzKVxuICAgICAqL1xuICAgIGhpZGVIb3Jpem9udGFsU2Nyb2xsYmFyID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBDU1MgY2xhc3MgdG8gYWRkIHRvIGhvdmVyZWQgcm93IGVsZW1lbnRzXG4gICAgICovXG4gICAgaG92ZXJDbHMgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIGljb24gdG8gc2hvdyBiZWZvcmUgdGhlIFt0aXRsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy10aXRsZSkuIEVpdGhlciBwYXNzIGEgQ1NTIGNsYXNzIGFzIGEgc3RyaW5nLCBvciBwYXNzIGFcbiAgICAgKiBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3QgZGVzY3JpYmluZyBhbiBlbGVtZW50IHRvIHJlcHJlc2VudCB0aGUgaWNvbi5cbiAgICAgKi9cbiAgICBpY29uID8gOiBzdHJpbmd8RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2lkZ2V0cyByZWFkLW9ubHkgc3RhdGUgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctaWdub3JlUGFyZW50UmVhZE9ubHkpXG4gICAgICovXG4gICAgaWdub3JlUGFyZW50UmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzZXR0aW5nIHRvIGFsaWduIGlucHV0IGZpZWxkcyBvZiBjaGlsZCB3aWRnZXRzLiBCeSBkZWZhdWx0LCB0aGUgRmllbGQgaW5wdXQgZWxlbWVudCBpc1xuICAgICAqIHBsYWNlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGBsYWJlbGAuIElmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgaW5wdXQgZmllbGRzIGFsaWduZWQgdG8gdGhlXG4gICAgICogcmlnaHQsIHNldCB0aGlzIGNvbmZpZyB0byBgJ2VuZCdgLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1pbnB1dEZpZWxkQWxpZ24pXG4gICAgICovXG4gICAgaW5wdXRGaWVsZEFsaWduID8gOiAnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gaW5zZXJ0IHRoaXMgd2lkZ2V0IGJlZm9yZS4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyBpcyBpZ25vcmVkLlxuICAgICAqIDxkaXYgY2xhc3M9XCJub3RlXCI+V2hlbiBjcmVhdGluZyBuZXN0ZWQgdHJlZXMgb2Ygd2lkZ2V0cywgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIG9uIHRoZSBvdXRlcm1vc3Qgd2lkZ2V0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1pbnNlcnRCZWZvcmUpXG4gICAgICovXG4gICAgaW5zZXJ0QmVmb3JlID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhcHBlbmQgdGhpcyB3aWRnZXQgZWxlbWVudCB0bywgYXMgYSBmaXJzdCBjaGlsZC4gSWYgcHJvdmlkZWQsIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyBpcyBpZ25vcmVkLlxuICAgICAqIDxkaXYgY2xhc3M9XCJub3RlXCI+V2hlbiBjcmVhdGluZyBuZXN0ZWQgdHJlZXMgb2Ygd2lkZ2V0cywgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIG9uIHRoZSBvdXRlcm1vc3Qgd2lkZ2V0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1pbnNlcnRGaXJzdClcbiAgICAgKi9cbiAgICBpbnNlcnRGaXJzdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogU2VlIFtLZXlib2FyZCBzaG9ydGN1dHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZCNrZXlib2FyZC1zaG9ydGN1dHMpIGZvciBkZXRhaWxzXG4gICAgICovXG4gICAga2V5TWFwID8gOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+XG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byB1c2Ugc2FtZSBsYWJlbCBwbGFjZW1lbnQgb24gYWxsIGNoaWxkIHdpZGdldHMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWxhYmVsUG9zaXRpb24pXG4gICAgICovXG4gICAgbGFiZWxQb3NpdGlvbiA/IDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbFxuICAgIC8qKlxuICAgICAqIFNldHMgYGxhYmVsV2lkdGhgIGZvciBhbGwgY2hpbGRyZW4gb2YgdGhpcyBDb250YWluZXIsIHRoYXQgZG8gbm90IGRlZmluZSB0aGVpciBvd24gYGxhYmVsV2lkdGhgLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1sYWJlbFdpZHRoKVxuICAgICAqL1xuICAgIGxhYmVsV2lkdGggPyA6IG51bWJlcnxudWxsXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3RlbmVyIHNldCBmb3IgdGhpcyBvYmplY3QuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWxpc3RlbmVycylcbiAgICAgKi9cbiAgICBsaXN0ZW5lcnMgPyA6IFRyZWVHcmlkTGlzdGVuZXJzXG4gICAgLyoqXG4gICAgICogQSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QsIG9yIGEgbWVzc2FnZSB0byBiZSBzaG93biB3aGVuIGEgc3RvcmUgaXMgcGVyZm9ybWluZyBhIHJlbW90ZVxuICAgICAqIG9wZXJhdGlvbiwgb3IgQ3J1ZCBNYW5hZ2VyIGlzIGxvYWRpbmcgZGF0YSBmcm9tIHRoZSBzZXZlci4gU2V0IHRvIGBudWxsYCB0byBkaXNhYmxlIGRlZmF1bHQgbG9hZCBtYXNrLlxuICAgICAqL1xuICAgIGxvYWRNYXNrID8gOiBzdHJpbmd8TWFza0NvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QgdG8gYWRqdXN0IHRoZSBbbWFza0RlZmF1bHRzXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tYXNrRGVmYXVsdHMpXG4gICAgICogd2hlbiBkYXRhIGlzIGxvYWRpbmcuIFRoZSBtZXNzYWdlIGFuZCBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZyb20gdGhlXG4gICAgICogW2xvYWRNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9Mb2FkTWFza2FibGUjY29uZmlnLWxvYWRNYXNrKSBjb25maWcgdGFrZSBwcmlvcml0eSBvdmVyIHRoZXNlIG9wdGlvbnMsIGp1c3QgYXMgdGhleSBkb1xuICAgICAqIGZvciBgbWFza0RlZmF1bHRzYCwgcmVzcGVjdGl2ZWx5LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1sb2FkTWFza0RlZmF1bHRzKVxuICAgICAqL1xuICAgIGxvYWRNYXNrRGVmYXVsdHMgPyA6IE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBBIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdCB0byBhZGp1c3QgdGhlIFttYXNrRGVmYXVsdHNdKCNDb3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1hc2tEZWZhdWx0cylcbiAgICAgKiB3aGVuIGFuIGVycm9yIG9jY3VycyBsb2FkaW5nIGRhdGEuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLWxvYWRNYXNrRXJyb3IpXG4gICAgICovXG4gICAgbG9hZE1hc2tFcnJvciA/IDogTWFza0NvbmZpZ3xNYXNrfGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGxvY2FsaXphdGlvbiBvZiB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRpbWUgaW4gbXMgdW50aWwgYSBsb25ncHJlc3MgaXMgdHJpZ2dlcmVkXG4gICAgICovXG4gICAgbG9uZ1ByZXNzVGltZSA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgbWFyZ2luLiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGBUUkJMYCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXJnaW4gPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBHcmlkcyBjaGFuZ2UgdGhlIGBtYXNrRGVmYXVsdHNgIHRvIGNvdmVyIG9ubHkgdGhlaXIgYGJvZHlgIGVsZW1lbnQuXG4gICAgICovXG4gICAgbWFza0RlZmF1bHRzID8gOiBNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBhcHBseSB0aGUgZGVmYXVsdCBtYXNrIHRvIHRoZSB3aWRnZXQuIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIHRoZSBtYXNrIG1lc3NhZ2Ugb3IgYVxuICAgICAqIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdC5cbiAgICAgKi9cbiAgICBtYXNrZWQgPyA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudCdzIG1heEhlaWdodC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFtoZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWhlaWdodCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1heEhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtYXhXaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhXaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIEdyaWQncyBgbWluLWhlaWdodGAuIERlZmF1bHRzIHRvIGAxMGVtYCB0byBiZSBzdXJlIHRoYXQgdGhlIEdyaWQgYWx3YXlzIGhhcyBhIGhlaWdodCB3aGVyZXZlciBpdCBpc1xuICAgICAqIGluc2VydGVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1taW5IZWlnaHQpXG4gICAgICovXG4gICAgbWluSGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1pbldpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1pbldpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogR3JpZCBtb25pdG9ycyB3aW5kb3cgcmVzaXplIGJ5IGRlZmF1bHQuXG4gICAgICovXG4gICAgbW9uaXRvclJlc2l6ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEN1c3RvbWl6ZXMgdGhlIGNvbmZpZyBvYmplY3QgdXNlZCB0byBjcmVhdGUgdGhpcyB3aWRnZXQncyBjbG9uZSBpbiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhciknc1xuICAgICAqIG92ZXJmbG93IG1lbnUgKHNlZSBbb3ZlcmZsb3ddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyI2NvbmZpZy1vdmVyZmxvdykpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1vdmVyZmxvd1R3aW5Db25maWcpXG4gICAgICovXG4gICAgb3ZlcmZsb3dUd2luQ29uZmlnID8gOiBPdmVyZmxvd1R3aW5Db25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgcGx1Z2lucyAoYW4gYXJyYXkgb2YgY2xhc3NlcykgaW4gY29uZmlnXG4gICAgICovXG4gICAgcGx1Z2lucyA/IDogSW5zdGFuY2VQbHVnaW5bXXxJbnN0YW5jZVBsdWdpblxuICAgIC8qKlxuICAgICAqIFRydWUgdG8gcHJlc2VydmUgZm9jdXNlZCBjZWxsIGFmdGVyIGxvYWRpbmcgbmV3IGRhdGFcbiAgICAgKi9cbiAgICBwcmVzZXJ2ZUZvY3VzT25EYXRhc2V0Q2hhbmdlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJlc2VydmUgdGhlIGdyaWQncyB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24gd2hlbiBjaGFuZ2VzZXRzIGFyZSBhcHBsaWVkLCBhcyBpbiB0aGUgY2FzZSBvZiByZW1vdGVcbiAgICAgKiBjaGFuZ2VzLCBvciB3aGVuIHN0b3JlcyBhcmUgY29uZmlndXJlZCB3aXRoIFtzeW5jRGF0YU9uTG9hZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvZGF0YS9TdG9yZSNjb25maWctc3luY0RhdGFPbkxvYWQpLlxuICAgICAqL1xuICAgIHByZXNlcnZlU2Nyb2xsID8gOiBQcmVzZXJ2ZVNjcm9sbE9wdGlvbnN8Ym9vbGVhblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIHByZXNlcnZlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiBhZnRlciBzdG9yZSBhY3Rpb25zIHRoYXQgdHJpZ2dlciBhIGByZWZyZXNoYCBldmVudCxcbiAgICAgKiBzdWNoIGFzIGxvYWRpbmcgbmV3IGRhdGEgYW5kIGZpbHRlcmluZy5cbiAgICAgKi9cbiAgICBwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByZXZlbnQgdG9vbHRpcCBmcm9tIGJlaW5nIGRpc3BsYXllZCBvbiB0b3VjaCBkZXZpY2VzLiBVc2VmdWwgZm9yIGV4YW1wbGUgZm9yIGJ1dHRvbnMgdGhhdCBkaXNwbGF5IGFcbiAgICAgKiBtZW51IG9uIGNsaWNrIGV0Yywgc2luY2UgdGhlIHRvb2x0aXAgd291bGQgYmUgZGlzcGxheWVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICovXG4gICAgcHJldmVudFRvb2x0aXBPblRvdWNoID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBtYWtlIHRoZSBncmlkIHJlYWQtb25seSwgYnkgZGlzYWJsaW5nIGFueSBVSXMgZm9yIG1vZGlmeWluZyBkYXRhLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1yZWFkT25seSlcbiAgICAgKi9cbiAgICByZWFkT25seSA/IDogYm9vbGVhblxuICAgIHJlbGF5U3RvcmVFdmVudHMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFaXRoZXIgYSBkZWZhdWx0IGByZW5kaXRpb25gIHRvIGFwcGx5IHRvIGFsbCBjaGlsZCB3aWRnZXRzLCBvciBhIG1hcCBvZiByZW5kaXRpb25zIGtleWVkIGJ5IGNoaWxkIHdpZGdldFxuICAgICAqIGB0eXBlYC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctcmVuZGl0aW9uKVxuICAgICAqL1xuICAgIHJlbmRpdGlvbiA/IDogc3RyaW5nfFJlY29yZDxzdHJpbmcsIHN0cmluZz58bnVsbFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIHByb3BlcnR5IHRvIGFsbG93IHRoZSB3aWRnZXQvY29tcG9uZW50IHRvIGJlIHJlc2l6ZWQuIFByZXNzaW5nIDxrYmQ+U2hpZnQ8L2tiZD4gd2hpbGUgcmVzaXppbmcgd2lsbFxuICAgICAqIGNvbnN0cmFpbiB0aGUgYXNwZWN0IHJhdGlvLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1yZXNpemFibGUpXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFtyZXNpemFibGUubWluV2lkdGhdIFRoZSBtaW5pbXVtIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmVzaXphYmxlLm1heFdpZHRoXSBUaGUgbWF4aW11bSB3aWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW3Jlc2l6YWJsZS5taW5IZWlnaHRdIFRoZSBtaW5pbXVtIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW3Jlc2l6YWJsZS5tYXhIZWlnaHRdIFRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgZWxlbWVudFxuICAgICAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBbcmVzaXphYmxlLmhhbmRsZXNdIEFuIG9iamVjdCBjb250cm9sbGluZyB3aGljaCBlZGdlcy9jb3JuZXJzIGFyZSByZXNpemFibGUuXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzaXphYmxlLmhhbmRsZXMudG9wU3RhcnRdIFJlc2l6YWJsZSBmcm9tIHRvcC1zdGFydCBjb3JuZXJcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNpemFibGUuaGFuZGxlcy50b3BdIFJlc2l6YWJsZSBmcm9tIHRvcCBlZGdlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzaXphYmxlLmhhbmRsZXMudG9wRW5kXSBSZXNpemFibGUgZnJvbSB0b3AtZW5kIGNvcm5lclxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLmVuZF0gUmVzaXphYmxlIGZyb20gZW5kIGVkZ2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNpemFibGUuaGFuZGxlcy5ib3R0b21FbmRdIFJlc2l6YWJsZSBmcm9tIGJvdHRvbS1lbmQgY29ybmVyXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzaXphYmxlLmhhbmRsZXMuYm90dG9tXSBSZXNpemFibGUgZnJvbSBib3R0b20gZWRnZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLmJvdHRvbVN0YXJ0XSBSZXNpemFibGUgZnJvbSBib3R0b20tc3RhcnQgY29ybmVyXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzaXphYmxlLmhhbmRsZXMuc3RhcnRdIFJlc2l6YWJsZSBmcm9tIHN0YXJ0IGVkZ2VcbiAgICAgKi9cbiAgICByZXNpemFibGUgPyA6IGJvb2xlYW58eyBtaW5XaWR0aD86IG51bWJlciwgbWF4V2lkdGg/OiBudW1iZXIsIG1pbkhlaWdodD86IG51bWJlciwgbWF4SGVpZ2h0PzogbnVtYmVyLCBoYW5kbGVzPzogeyB0b3BTdGFydD86IGJvb2xlYW4sIHRvcD86IGJvb2xlYW4sIHRvcEVuZD86IGJvb2xlYW4sIGVuZD86IGJvb2xlYW4sIGJvdHRvbUVuZD86IGJvb2xlYW4sIGJvdHRvbT86IGJvb2xlYW4sIGJvdHRvbVN0YXJ0PzogYm9vbGVhbiwgc3RhcnQ/OiBib29sZWFuIH0gfVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG9ubHkgbWVhc3VyZSBjZWxsIGNvbnRlbnRzIHdoZW4gZG91YmxlLWNsaWNraW5nIHRoZSBlZGdlIGJldHdlZW4gY29sdW1uIGhlYWRlcnMuXG4gICAgICovXG4gICAgcmVzaXplVG9GaXRJbmNsdWRlc0hlYWRlciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFwiQnJlYWsgcG9pbnRzXCIgZm9yIHdoaWNoIHJlc3BvbnNpdmUgY29uZmlnIHRvIHVzZSBmb3IgY29sdW1ucyBhbmQgY3NzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1yZXNwb25zaXZlTGV2ZWxzKVxuICAgICAqL1xuICAgIHJlc3BvbnNpdmVMZXZlbHMgPyA6IFJlY29yZDxzdHJpbmcsIG51bWJlcnxzdHJpbmd8UmVzcG9uc2l2ZUxldmVsQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gaGF2ZSB0aGUgY29tcG9uZW50IGRpc3BsYXkgYSB0cmFuc2x1Y2VudCByaXBwbGUgd2hlbiBpdHNcbiAgICAgKiBbZm9jdXNFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWZvY3VzRWxlbWVudCksIG9yIFtlbGVtZW50XSgjQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIHRhcHBlZCA8ZW0+aWYgdGhlXG4gICAgICogY3VycmVudCB0aGVtZSBzdXBwb3J0cyByaXBwbGVzPC9lbT4uIE91dCBvZiB0aGUgYm94LCBvbmx5IHRoZSBNYXRlcmlhbCB0aGVtZSBzdXBwb3J0cyByaXBwbGVzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1yaXBwbGUpXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZWxlZ2F0ZV0gQSBDU1Mgc2VsZWN0b3IgdG8gZmlsdGVyIHdoaWNoIGNoaWxkIGVsZW1lbnRzIHRyaWdnZXIgcmlwcGxlcy4gQnkgZGVmYXVsdCwgdGhlIHJpcHBsZSBpcyBjbGlwcGVkIHRvIHRoZSB0cmlnZ2VyaW5nIGVsZW1lbnQuXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb2xvcl0gQSBDU1MgY29sb3IgbmFtZSBvciBzcGVjaWZpY2F0aW9uLlxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmFkaXVzXSBUaGUgZW5kaW5nIHJhZGl1cyBvZiB0aGUgcmlwcGxlLiBOb3RlIHRoYXQgaXQgd2lsbCBiZSBjbGlwcGVkIGJ5IHRoZSB0YXJnZXQgZWxlbWVudCBieSBkZWZhdWx0LlxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xpcF0gQSBzdHJpbmcgd2hpY2ggZGVzY3JpYmVzIGhvdyB0byBjbGlwIHRoZSByaXBwbGUgaWYgaXQgaXMgbm90IHRvIGJlIGNsaXBwZWQgdG8gdGhlIGRlZmF1bHQgZWxlbWVudC4gRWl0aGVyIHRoZSBwcm9wZXJ0eSBvZiB0aGUgd2lkZ2V0IHRvIHVzZSBhcyB0aGUgY2xpcHBpbmcgZWxlbWVudCwgb3IgYSBzZWxlY3RvciB0byBhbGxvdyBjbGlwcGluZyB0byB0aGUgY2xvc2VzdCBtYXRjaGluZyBhbmNlc3RvciB0byB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gICAgICovXG4gICAgcmlwcGxlID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIFRoZSBBUklBIHJvbGUgdG8gYXBwbHkgdG8gdGhpcyB3aWRnZXQncyBlbGVtZW50LiBCeSBkZWZhdWx0LCB0aGlzIGlzIHNldCB0byBgJ3ByZXNlbnRhdGlvbidgIHRvIGF2b2lkXG4gICAgICogYWNjaWRlbnRhbGx5IGFwcGx5aW5nIGEgcm9sZSB3aGljaCBtYXkgaW50ZXJmZXJlIHdpdGggc2NyZWVuIHJlYWRlcnMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXJvbGUpXG4gICAgICovXG4gICAgcm9sZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSByZW5kZXJpbmcgdGhpcyB3aWRnZXQgdG8gYSBzaGFkb3cgcm9vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgdGhpcyBjb25maWcgdG8gdGhlIHNoYWRvd1Jvb3QuIElmIG5vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgaXQgdG8gYGRvY3VtZW50LmJvZHlgXG4gICAgICovXG4gICAgcm9vdEVsZW1lbnQgPyA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnRcbiAgICAvKipcbiAgICAgKiBSb3cgaGVpZ2h0IGluIHBpeGVscy4gVGhpcyBhbGxvd3MgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciByb3dzIHRvIGJlIGNvbnRyb2xsZWQuIE5vdGUgdGhhdCBpdCBtYXkgYmVcbiAgICAgKiBvdmVycmlkZGVuIGJ5IHNwZWNpZnlpbmcgYSBbcm93SGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9kYXRhL0dyaWRSb3dNb2RlbCNmaWVsZC1yb3dIZWlnaHQpIG9uIGEgcGVyIHJlY29yZCBiYXNpcywgb3IgZnJvbVxuICAgICAqIGEgY29sdW1uIFtyZW5kZXJlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvY29sdW1uL0NvbHVtbiNjb25maWctcmVuZGVyZXIpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1yb3dIZWlnaHQpXG4gICAgICovXG4gICAgcm93SGVpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgc2hvdyByb3cgbGluZXMuIEVuZCByZXN1bHQgbWlnaHQgYmUgb3ZlcnJ1bGVkIGJ5L2RpZmZlciBiZXR3ZWVuIHRoZW1lcy5cbiAgICAgKi9cbiAgICByb3dMaW5lcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYHRydWVgIHRvIG1ha2UgdGhlIHdpZGdldCdzIGVsZW1lbnQgdXNlIHRoZSBgZGlyZWN0aW9uOnJ0bGAgc3R5bGUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXJ0bClcbiAgICAgKi9cbiAgICBydGwgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHdoZXRoZXIgdGhlIGdyaWQgaXMgc2Nyb2xsYWJsZSBpbiB0aGUgYFlgIGF4aXMuIFRoaXMgaXMgdXNlZCB0byBjb25maWd1cmUgYSBbU2Nyb2xsZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2hlbHBlci91dGlsL1Njcm9sbGVyKS5cbiAgICAgKiBTZWUgdGhlIFtzY3JvbGxlckNsYXNzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1zY3JvbGxlckNsYXNzKSBjb25maWcgb3B0aW9uLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1zY3JvbGxhYmxlKVxuICAgICAqL1xuICAgIHNjcm9sbGFibGUgPyA6IGJvb2xlYW58U2Nyb2xsZXJDb25maWd8U2Nyb2xsZXJcbiAgICAvKipcbiAgICAgKiBUaGUgY2xhc3MgdG8gaW5zdGFudGlhdGUgdG8gdXNlIGFzIHRoZSBbc2Nyb2xsYWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc2Nyb2xsYWJsZSkuIERlZmF1bHRzIHRvIFtTY3JvbGxlcl0oI0NvcmUvaGVscGVyL3V0aWwvU2Nyb2xsZXIpLlxuICAgICAqL1xuICAgIHNjcm9sbGVyQ2xhc3MgPyA6IHR5cGVvZiBTY3JvbGxlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciB0aGUgW1Njcm9sbE1hbmFnZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3V0aWwvU2Nyb2xsTWFuYWdlcikgY2xhc3Mgb24gaW5pdGlhbGl6YXRpb24uIFJldHVybnMgdGhlXG4gICAgICogW1Njcm9sbE1hbmFnZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3V0aWwvU2Nyb2xsTWFuYWdlcikgYXQgcnVudGltZS5cbiAgICAgKi9cbiAgICBzY3JvbGxNYW5hZ2VyID8gOiBTY3JvbGxNYW5hZ2VyQ29uZmlnfFNjcm9sbE1hbmFnZXJcbiAgICAvKipcbiAgICAgKiBTZWxlY3Rpb24gY29uZmlndXJhdGlvbiBzZXR0aW5ncywgY2hhbmdlIHRoZXNlIHByb3BlcnRpZXMgdG8gY29udHJvbCBob3cgc2VsZWN0aW9uIHdvcmtzIGFuZCB3aGF0IGNhbiBiZVxuICAgICAqIHNlbGVjdGVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1zZWxlY3Rpb25Nb2RlKVxuICAgICAqL1xuICAgIHNlbGVjdGlvbk1vZGUgPyA6IEdyaWRTZWxlY3Rpb25Nb2RlXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBncmlkIHNob3cgYSByZWQgXCJjaGFuZ2VkXCIgdGFnIGluIGNlbGxzIHdob3NlXG4gICAgICogZmllbGQgdmFsdWUgaGFzIGNoYW5nZWQgYW5kIG5vdCB5ZXQgYmVlbiBjb21taXR0ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXNob3dEaXJ0eSlcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHNob3dEaXJ0eS5kdXJpbmdFZGl0IFNldCB0byBgdHJ1ZWAgdG8gc2hvdyB0aGUgcmVkIHRhZyB3aGlsZSBlZGl0aW5nIGEgY2VsbFxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc2hvd0RpcnR5Lm5ld1JlY29yZCBTZXQgdG8gYHRydWVgIHRvIHNob3cgdGhlIHJlZCB0YWcgZm9yIGFsbCB0aGUgY2VsbHMgb2YgdGhlIG5ldyByZWNvcmRcbiAgICAgKi9cbiAgICBzaG93RGlydHkgPyA6IGJvb2xlYW58eyBkdXJpbmdFZGl0OiBib29sZWFuLCBuZXdSZWNvcmQ6IGJvb2xlYW4gfVxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpYyBjb250cm9sIG92ZXIgaG93IG1hbnkgY29sdW1ucyB0byBzcGFuIHdoZW4gdXNlZCBpbiBhIGdyaWQgbGF5b3V0LlxuICAgICAqL1xuICAgIHNwYW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoaXMgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1zdGF0ZWZ1bClcbiAgICAgKi9cbiAgICBzdGF0ZWZ1bCA/IDogYm9vbGVhbnxvYmplY3R8c3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnRzIHRoYXQsIHdoZW4gZmlyZWQgYnkgdGhpcyBjb21wb25lbnQsIHNob3VsZCB0cmlnZ2VyIGl0IHRvIHNhdmUgaXRzIHN0YXRlIGJ5IGNhbGxpbmdcbiAgICAgKiBbc2F2ZVN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNmdW5jdGlvbi1zYXZlU3RhdGUpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1zdGF0ZWZ1bEV2ZW50cylcbiAgICAgKi9cbiAgICBzdGF0ZWZ1bEV2ZW50cyA/IDogb2JqZWN0fHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGtleSB0byB1c2Ugd2hlbiBzYXZpbmcgdGhpcyBvYmplY3QncyBzdGF0ZSBpbiB0aGUgW3N0YXRlUHJvdmlkZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2NvbmZpZy1zdGF0ZVByb3ZpZGVyKS4gSWYgdGhpcyBjb25maWcgaXNcbiAgICAgKiBub3QgYXNzaWduZWQsIGFuZCBbc3RhdGVmdWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2NvbmZpZy1zdGF0ZWZ1bCkgaXMgbm90IHNldCB0byBgZmFsc2VgLCB0aGUgW2lkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1pZClcbiAgICAgKiAoaWYgZXhwbGljaXRseSBzcGVjaWZpZWQpIHdpbGwgYmUgdXNlZCBhcyB0aGUgYHN0YXRlSWRgLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1zdGF0ZUlkKVxuICAgICAqL1xuICAgIHN0YXRlSWQgPyA6IHN0cmluZ3xudWxsXG4gICAgLyoqXG4gICAgICogVGhlIGBTdGF0ZVByb3ZpZGVyYCB0byB1c2UgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGlzIG9iamVjdCdzIFtzdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjcHJvcGVydHktc3RhdGUpLiBCeSBkZWZhdWx0LCBgc3RhdGVgXG4gICAgICogd2lsbCBiZSBzYXZlZCB1c2luZyB0aGUgW2RlZmF1bHQgc3RhdGUgcHJvdmlkZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3N0YXRlL1N0YXRlUHJvdmlkZXIjcHJvcGVydHktaW5zdGFuY2Utc3RhdGljKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctc3RhdGVQcm92aWRlcilcbiAgICAgKi9cbiAgICBzdGF0ZVByb3ZpZGVyID8gOiBTdGF0ZVByb3ZpZGVyXG4gICAgLyoqXG4gICAgICogVGhlIHByb3BlcnRpZXMgb2YgdGhpcyBzZXR0aW5ncyBvYmplY3QgY29udHJvbHMgaG93IGdyaWQgaXMgcmVzdG9yZWQgZnJvbSBzdGF0ZSBkYXRhLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1zdGF0ZVNldHRpbmdzKVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc3RvcmVVbmNvbmZpZ3VyZWRDb2x1bW5zXSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVzdG9yZSBjb2x1bW5zIGZyb20gdGhlIHN0YXRlIHRoYXQgYXJlIG5vdCBleHBsaWNpdGx5IGRlZmluZWQgaW4gdGhlIGdyaWQgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBzdGF0ZVNldHRpbmdzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBUaGUgc3RvcmUgaW5zdGFuY2Ugb3IgY29uZmlnIG9iamVjdCB0aGF0IGhvbGRzIHRoZSByZWNvcmRzIHRvIGJlIGRpc3BsYXllZCBieSB0aGlzIFRyZWVHcmlkLiBJZiBhc3NpZ25pbmdcbiAgICAgKiBhIHN0b3JlIGluc3RhbmNlLCBpdCBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCBgdHJlZTogdHJ1ZWAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXN0b3JlKVxuICAgICAqL1xuICAgIHN0b3JlID8gOiBTdG9yZXxTdG9yZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHdpZGdldHMga2V5ZWQgYnkgbmFtZS4gQnkgZGVmYXVsdCAod2hlbiBubyBgdHlwZWAgaXMgZ2l2ZW4pLCBzdHJpcHMgYXJlXG4gICAgICogW3Rvb2xiYXJzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhcikuIElmIHlvdSB3YW50IHRvIHBhc3MgYW4gYXJyYXksIHlvdSBjYW4gdXNlXG4gICAgICogdGhlIHRvb2xiYXIncyBbaXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctc3RyaXBzKVxuICAgICAqL1xuICAgIHN0cmlwcyA/IDogUmVjb3JkPHN0cmluZywgQ29udGFpbmVySXRlbUNvbmZpZz5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBzdWIgZ3JpZCBjb25maWd1cmF0aW9uIG9iamVjdHMga2V5ZWQgYnkgYSBgcmVnaW9uYCBwcm9wZXJ0eS5cbiAgICAgKiBCeSBkZWZhdWx0LCBncmlkIGhhcyBhICdsb2NrZWQnIHJlZ2lvbiAoaWYgY29uZmlndXJlZCB3aXRoIGxvY2tlZCBjb2x1bW5zKSBhbmQgYSAnbm9ybWFsJyByZWdpb24uXG4gICAgICogVGhlICdub3JtYWwnIHJlZ2lvbiBkZWZhdWx0cyB0byB1c2UgYGZsZXg6IDFgLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy1zdWJHcmlkQ29uZmlncylcbiAgICAgKi9cbiAgICBzdWJHcmlkQ29uZmlncyA/IDogUmVjb3JkPHN0cmluZywgU3ViR3JpZENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBBIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdCwgb3IgYSBtZXNzYWdlIHRvIGJlIHNob3duIHdoZW4gQ3J1ZCBNYW5hZ2VyXG4gICAgICogaXMgcGVyc2lzdGluZyBjaGFuZ2VzIG9uIHRoZSBzZXJ2ZXIuIFNldCB0byBgbnVsbGAgdG8gZGlzYWJsZSBkZWZhdWx0IHN5bmMgbWFzay5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctc3luY01hc2spXG4gICAgICovXG4gICAgc3luY01hc2sgPyA6IHN0cmluZ3xNYXNrQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBbdGFiXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiKSBjcmVhdGVkIGZvciB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIHBsYWNlZCBpbiBhXG4gICAgICogW1RhYlBhbmVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiUGFuZWwpLiBGb3IgZXhhbXBsZSwgdGhpcyBjb25maWcgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgaWNvbiBvZiB0aGUgYHRhYmAgZm9yXG4gICAgICogdGhpcyB3aWRnZXQ6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXRhYilcbiAgICAgKi9cbiAgICB0YWIgPyA6IGJvb2xlYW58VGFiQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIGNvbnRhaW5lciBpcyB1c2VkIGFzIGEgdGFiIGluIGEgVGFiUGFuZWwsIHRoZXNlIGl0ZW1zIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgKiBbVGFiQmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiQmFyKSB3aGVuIHRoaXMgY29udGFpbmVyIGlzIHRoZSBhY3RpdmUgdGFiLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy10YWJCYXJJdGVtcylcbiAgICAgKi9cbiAgICB0YWJCYXJJdGVtcyA/IDogVG9vbGJhckl0ZW1zW118V2lkZ2V0W11cbiAgICAvKipcbiAgICAgKiBBIENvbmZpZyBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgW1Rvb2xiYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci5cbiAgICAgKiBUaGlzIGNyZWF0ZXMgYSB0b29sYmFyIGRvY2tlZCB0byB0aGUgdG9wIG9mIHRoZSBwYW5lbCBpbW1lZGlhdGVseSBiZWxvdyB0aGUgaGVhZGVyLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy10YmFyKVxuICAgICAqL1xuICAgIHRiYXIgPyA6IChDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEEgdGl0bGUgdG8gZGlzcGxheSBpbiB0aGUgaGVhZGVyIG9yIG93bmluZyBUYWJQYW5lbC4gQ2F1c2VzIGNyZWF0aW9uIGFuZCBkb2NraW5nIG9mIGEgaGVhZGVyXG4gICAgICogdG8gdGhlIHRvcCBpZiBubyBoZWFkZXIgaXMgY29uZmlndXJlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNjb25maWctdGl0bGUpXG4gICAgICovXG4gICAgdGl0bGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBbdG9vbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sKSB0byBhZGQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgYHRpdGxlYCBpbiB0aGUgUGFuZWwgaGVhZGVyLiBFYWNoXG4gICAgICogcHJvcGVydHkgbmFtZSBpcyB0aGUgcmVmZXJlbmNlIGJ5IHdoaWNoIGFuIGluc3RhbnRpYXRlZCB0b29sIG1heSBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgbGl2ZVxuICAgICAqIGBbdG9vbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9Ub29sYWJsZSNwcm9wZXJ0eS10b29scylgIHByb3BlcnR5LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2NvbmZpZy10b29scylcbiAgICAgKi9cbiAgICB0b29scyA/IDogUmVjb3JkPHN0cmluZywgVG9vbENvbmZpZz58bnVsbFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBVSSB0cmFuc2l0aW9ucyBmb3IgdmFyaW91cyBhY3Rpb25zIGluIHRoZSBncmlkLlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaW5zZXJ0UmVjb3JkIFRyYW5zaXRpb24gcmVjb3JkIGluc2VydGlvbnNcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92ZVJlY29yZCBUcmFuc2l0aW9uIHJlY29yZCByZW1vdmFsc1xuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG9nZ2xlQ29sdW1uIFRyYW5zaXRpb24gY29sdW1uIHZpc2liaWxpdHkgY2hhbmdlc1xuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXhwYW5kQ29sbGFwc2VDb2x1bW4gVHJhbnNpdGlvbiBwYXJlbnQvZ3JvdXAgY29sdW1uIGV4cGFuZC9jb2xsYXBzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG9nZ2xlUmVnaW9uIFRyYW5zaXRpb24gcmVnaW9uIGV4cGFuZC9jb2xsYXBzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG9nZ2xlVHJlZU5vZGUgVHJhbnNpdGlvbiB0cmVlIG5vZGUgZXhwYW5kL2NvbGxhcHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSB0b2dnbGVHcm91cCBUcmFuc2l0aW9uIGdyb3VwIGV4cGFuZC9jb2xsYXBzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmlsdGVyUmVtb3ZhbCBUcmFuc2l0aW9uIHJvdyByZW1vdmFscyBjYXVzZWQgYnkgZmlsdGVyaW5nICh1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zKVxuICAgICAqL1xuICAgIHRyYW5zaXRpb24gPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIEFuaW1hdGlvbiB0cmFuc2l0aW9uIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cbiAgICAgKi9cbiAgICB0cmFuc2l0aW9uRHVyYXRpb24gPyA6IG51bWJlclxuICAgIHR5cGUgPyA6ICd0cmVlZ3JpZCdcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjY29uZmlnLXVpKVxuICAgICAqL1xuICAgIHVpID8gOiAncGxhaW4nfCd0b29sYmFyJ3xzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQSB3aWRnZXRzIHdlaWdodCBkZXRlcm1pbmVzIGl0cyBwb3NpdGlvbiBhbW9uZyBzaWJsaW5ncyB3aGVuIGFkZGVkIHRvIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lcikuXG4gICAgICogSGlnaGVyIHdlaWdodHMgZ28gZnVydGhlciBkb3duLlxuICAgICAqL1xuICAgIHdlaWdodCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3Mgd2lkdGgsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLndpZHRoYC4gRWl0aGVyIHNwZWNpZnkgYSB2YWxpZCB3aWR0aCBzdHJpbmcgb3IgYSBudW1iZXIsIHdoaWNoXG4gICAgICogd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCB3aWR0aCwgYnV0IGluIHNvbWUgY2FzZXNcbiAgICAgKiB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIHdpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG5cbiAgICAvLyBGZWF0dXJlc1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBhbiBBSSBhZ2VudCBmb3IgR3JpZC4gSXQgcHJvdmlkZXMgYSBjaGF0IHBhbmVsIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbmQgbWVzc2FnZXMgdG8gdGhlXG4gICAgICogYWdlbnQgYW5kIHNlZSB0aGUgcmVzcG9uc2VzLiBXaGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gdXNlIG5hdHVyYWwgbGFuZ3VhZ2UgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgR3JpZCBpbiBkaWZmZXJlbnRcbiAgICAgKiB3YXlzLiBGb3IgZXhhbXBsZSwgdGhlIHVzZXIgY2FuIGFzayB0aGUgYWdlbnQgdG8gZmlsdGVyIHRoZSBkYXRhLCBzb3J0IGl0LCBvciBzZWxlY3Qgc3BlY2lmaWMgcmVjb3Jkcy4gVGhlIGFnZW50IGNhblxuICAgICAqIGFsc28gcGVyZm9ybSBkYXRhIG1hbmlwdWxhdGlvbiBvcGVyYXRpb25zIHN1Y2ggYXMgYWRkaW5nLCB1cGRhdGluZywgZGVsZXRpbmcgcmVjb3Jkcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9BSSlcbiAgICAgKi9cbiAgICBhaUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xBSXxBSUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFJLXBvd2VyZWQgZmlsdGVyIGZlYXR1cmUgZm9yIEdyaWQuIEFsbG93cyB1c2VycyB0byB0eXBlIG5hdHVyYWwgbGFuZ3VhZ2UgcXVlcmllcyB0byBmaWx0ZXIgZ3JpZCBkYXRhLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2FpL0FJRmlsdGVyKVxuICAgICAqL1xuICAgIGFpRmlsdGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEFJRmlsdGVyfEFJRmlsdGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzaW5nIGBbQ3RybC9DTUQgKyBDXWAsIGBbQ3RybC9DTUQgKyBYXWAgYW5kIGBbQ3RybC9DTUQgKyBWXWAgdG8gY3V0LCBjb3B5IGFuZCBwYXN0ZSBjZWxsIG9yIGNlbGwgcmFuZ2VzLiBBbHNvXG4gICAgICogbWFrZXMgY3V0LCBjb3B5IGFuZCBwYXN0ZSBhY3Rpb25zIGF2YWlsYWJsZSB2aWEgdGhlIGNlbGwgY29udGV4dCBtZW51LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NlbGxDb3B5UGFzdGUpXG4gICAgICovXG4gICAgY2VsbENvcHlQYXN0ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsQ29weVBhc3RlfENlbGxDb3B5UGFzdGVDb25maWdcbiAgICAvKipcbiAgICAgKiBBZGRpbmcgdGhpcyBmZWF0dXJlIHRvIHRoZSBncmlkIGFuZCBvdGhlciBCcnludHVtIHByb2R1Y3RzIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgR3JpZCAoaS5lLiBTY2hlZHVsZXIsIFNjaGVkdWxlclBybywgYW5kIEdhbnR0KVxuICAgICAqIGVuYWJsZXMgY2VsbCBlZGl0aW5nLiBBbnkgc3ViY2xhc3Mgb2YgW0ZpZWxkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvRmllbGQpIGNhbiBiZSB1c2VkXG4gICAgICogYXMgZWRpdG9yIGZvciB0aGUgW0NvbHVtbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvY29sdW1uL0NvbHVtbikuIFRoZSBtb3N0IHBvcHVsYXIgYXJlOlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NlbGxFZGl0KVxuICAgICAqL1xuICAgIGNlbGxFZGl0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxFZGl0fENlbGxFZGl0Q29uZmlnXG4gICAgLyoqXG4gICAgICogUmlnaHQgY2xpY2sgdG8gZGlzcGxheSBjb250ZXh0IG1lbnUgZm9yIGNlbGxzLiBUbyBpbnZva2UgdGhlIGNlbGwgbWVudSBpbiBhIGtleWJvYXJkLWFjY2Vzc2libGUgbWFubmVyLCB1c2UgdGhlXG4gICAgICogPGtiZD5TcGFjZTwva2JkPiBrZXkgd2hlbiB0aGUgY2VsbCBpcyBmb2N1c2VkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NlbGxNZW51KVxuICAgICAqL1xuICAgIGNlbGxNZW51RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxNZW51fENlbGxNZW51Q29uZmlnXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSB0b29sdGlwIHdoZW4gaG92ZXJpbmcgY2VsbHMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbFRvb2x0aXApXG4gICAgICovXG4gICAgY2VsbFRvb2x0aXBGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbFRvb2x0aXB8Q2VsbFRvb2x0aXBDb25maWdcbiAgICAvKipcbiAgICAgKiBBZGRzIGludGVyYWN0aXZlIGNoYXJ0aW5nIHRvIGEgR3JpZC4gW0NoYXJ0c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NoYXJ0L3dpZGdldC9DaGFydCkgY2FuIGJlIGNyZWF0ZWQgZnJvbSBhIHNlbGVjdGlvbiBvZiBHcmlkIGRhdGFcbiAgICAgKiBhbmQgdXBkYXRlZCBpbiByZWFsdGltZSBhcyBkYXRhIGNoYW5nZXMuIFN1cHBvcnRzIG1hbnkgY29tbW9uIGNoYXJ0IHR5cGVzIHdpdGggZXh0ZW5zaXZlIHN0eWxpbmcgYW5kIGN1c3RvbWl6YXRpb25cbiAgICAgKiBvcHRpb25zLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NoYXJ0cylcbiAgICAgKi9cbiAgICBjaGFydHNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2hhcnRzfENoYXJ0c0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFthdXRvV2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLWF1dG9XaWR0aCkgY29uZmlnIGZvciBhIGdyaWQncyBjb2x1bW5zLiBXaGVuIGEgY29sdW1uXG4gICAgICogaGFzIGBhdXRvV2lkdGhgIHNldCwgdGhpcyBmZWF0dXJlIG1lYXN1cmVzIHRoZSByZW5kZXJlZCBjb250ZW50IG9mIGFsbCB2aXNpYmxlIGNlbGxzIGluIHRoYXQgY29sdW1uXG4gICAgICogYW5kIGFkanVzdHMgdGhlIGNvbHVtbiB3aWR0aCB0byBmaXQuIFRoZSBtZWFzdXJlbWVudCBpcyB0cmlnZ2VyZWQgYXV0b21hdGljYWxseSB3aGVuIGRhdGEgY2hhbmdlc1xuICAgICAqIG9yIHJvd3MgYXJlIHJlbmRlcmVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NvbHVtbkF1dG9XaWR0aClcbiAgICAgKi9cbiAgICBjb2x1bW5BdXRvV2lkdGhGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uQXV0b1dpZHRofENvbHVtbkF1dG9XaWR0aENvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgdG9vbGJhciB3aGlsZSBkcmFnZ2luZyBjb2x1bW4gaGVhZGVycy4gRHJvcCBvbiBhIGJ1dHRvbiBpbiB0aGUgdG9vbGJhciB0byBhY3RpdmF0ZSBhIGNlcnRhaW4gZnVuY3Rpb24sXG4gICAgICogZm9yIGV4YW1wbGUgdG8gZ3JvdXAgYnkgdGhhdCBjb2x1bW4uIFRoaXMgZmVhdHVyZSBzaW1wbGlmaWVzIGNlcnRhaW4gb3BlcmF0aW9ucyBvbiB0b3VjaCBkZXZpY2VzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NvbHVtbkRyYWdUb29sYmFyKVxuICAgICAqL1xuICAgIGNvbHVtbkRyYWdUb29sYmFyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtbkRyYWdUb29sYmFyfENvbHVtbkRyYWdUb29sYmFyQ29uZmlnXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBjb2x1bW4gcGlja2VyICh0byBzaG93L2hpZGUgY29sdW1ucykgaW4gdGhlIGhlYWRlciBjb250ZXh0IG1lbnUuIENvbHVtbnMgY2FuIGJlIGRpc3BsYXllZCBpbiBzdWIgbWVudXNcbiAgICAgKiBieSByZWdpb24gb3IgdGFnLiBHcm91cGVkIGhlYWRlcnMgYXJlIGRpc3BsYXllZCBhcyBtZW51IGhpZXJhcmNoaWVzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NvbHVtblBpY2tlcilcbiAgICAgKi9cbiAgICBjb2x1bW5QaWNrZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUGlja2VyfENvbHVtblBpY2tlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyB1c2VyIHRvIHJlbmFtZSBjb2x1bW5zIGJ5IGVpdGhlciByaWdodC1jbGlja2luZyBjb2x1bW4gaGVhZGVyIG9yIHVzaW5nIGtleWJvYXJkIHNob3J0Y3V0cyB3aGVuIGNvbHVtbiBoZWFkZXJcbiAgICAgKiBpcyBmb2N1c2VkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NvbHVtblJlbmFtZSlcbiAgICAgKi9cbiAgICBjb2x1bW5SZW5hbWVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUmVuYW1lfENvbHVtblJlbmFtZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyB1c2VyIHRvIHJlb3JkZXIgY29sdW1ucyBieSBkcmFnZ2luZyBoZWFkZXJzLiBDbGljayBhbmQgZHJhZyBhIGNvbHVtbiBoZWFkZXIgdG8gbW92ZSBpdCB0byBhIG5ldyBwb3NpdGlvbi5cbiAgICAgKiBWaXN1YWwgZmVlZGJhY2sgc2hvd3MgdGhlIGRyb3AgdGFyZ2V0IHdoaWxlIGRyYWdnaW5nLiBUbyBnZXQgbm90aWZpZWQgYWJvdXQgY29sdW1uIHJlb3JkZXIsIGxpc3RlbiB0byB0aGVcbiAgICAgKiBgY2hhbmdlYCBldmVudCBvbiB0aGUgW2NvbHVtbnNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2RhdGEvQ29sdW1uU3RvcmUpIHN0b3JlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NvbHVtblJlb3JkZXIpXG4gICAgICovXG4gICAgY29sdW1uUmVvcmRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZW9yZGVyfENvbHVtblJlb3JkZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHVzZXIgdG8gcmVzaXplIGNvbHVtbnMgYnkgZHJhZ2dpbmcgYSBoYW5kbGUgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB0aGUgaGVhZGVyLiBBIGRyYWcgaGFuZGxlXG4gICAgICogYXBwZWFycyB3aGVuIGhvdmVyaW5nIG5lYXIgdGhlIHJpZ2h0IGVkZ2Ugb2YgYSBjb2x1bW4gaGVhZGVyLiBEcmFnZ2luZyBpdCBhZGp1c3RzIHRoZSBjb2x1bW4gd2lkdGgsIHJlc3BlY3RpbmdcbiAgICAgKiBhbnkgW21pbldpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vQ29sdW1uI2NvbmZpZy1taW5XaWR0aCkgb3IgW21heFdpZHRoXSgjR3JpZC9jb2x1bW4vQ29sdW1uI2NvbmZpZy1tYXhXaWR0aCkgY29uc3RyYWludHMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUmVzaXplKVxuICAgICAqL1xuICAgIGNvbHVtblJlc2l6ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZXNpemV8Q29sdW1uUmVzaXplQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBmZWF0dXJlIHRoYXQgYWxsb3dzIGV4cG9ydGluZyBHcmlkIGRhdGEgdG8gRXhjZWwgb3IgQ1NWIHdpdGhvdXQgaW52b2x2aW5nIHRoZSBzZXJ2ZXIuIEl0IHVzZXNcbiAgICAgKiBbVGFibGVFeHBvcnRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdXRpbC9UYWJsZUV4cG9ydGVyKSBjbGFzcyBhcyBkYXRhIHByb3ZpZGVyLCAzcmQgcGFydHkgcHJvdmlkZXIgdG8gZ2VuZXJhdGUgWExTIGZpbGVzLCBhbmRcbiAgICAgKiBbTWljcm9zb2Z0IFhNTCBzcGVjaWZpY2F0aW9uXShodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L29mZmljZS9kb2N1bWVudGZvcm1hdC5vcGVueG1sLnNwcmVhZHNoZWV0LmFzcHgpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2V4cGVyaW1lbnRhbC9FeGNlbEV4cG9ydGVyKVxuICAgICAqL1xuICAgIGV4Y2VsRXhwb3J0ZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RXhjZWxFeHBvcnRlcnxFeGNlbEV4cG9ydGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBsZXRzIHVzZXJzIGRyb3AgZmlsZXMgb24gYSBXaWRnZXQuIFRoZSB3aWRnZXQgZmlyZXMgYVxuICAgICAqIFtmaWxlRHJvcF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9leHBlcmltZW50YWwvRmlsZURyb3AjZXZlbnQtZmlsZURyb3ApIGV2ZW50IHdoZW4gYSBmaWxlIGlzIGRyb3BwZWQgb250byBpdC4gSW4gdGhlIGV2ZW50LCB5b3UgZ2V0IGFjY2VzcyB0byB0aGUgcmF3XG4gICAgICogZmlsZXMgYXMgc3RyaW5ncywgdGhhdCB3ZXJlIHBhcnNlZCBieSBjYWxsaW5nIGByZWFkQXNCaW5hcnlTdHJpbmdgLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2V4cGVyaW1lbnRhbC9GaWxlRHJvcClcbiAgICAgKi9cbiAgICBmaWxlRHJvcEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWxlRHJvcHxGaWxlRHJvcENvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBhZGRzIGEgZmlsbCBoYW5kbGUgdG8gYSBHcmlkIHJhbmdlIHNlbGVjdGlvbiwgd2hpY2ggd2hlbiBkcmFnZ2VkLCBmaWxscyB0aGUgY2VsbHMgYmVpbmcgZHJhZ2dlZCBvdmVyXG4gICAgICogd2l0aCB2YWx1ZXMgYmFzZWQgb24gdGhlIHZhbHVlcyBpbiB0aGUgb3JpZ2luYWwgc2VsZWN0ZWQgcmFuZ2UuIFRoaXMgaXMgc2ltaWxhciB0byBmdW5jdGlvbmFsaXR5IG5vcm1hbGx5IHNlZW4gaW5cbiAgICAgKiB2YXJpb3VzIHNwcmVhZHNoZWV0IGFwcGxpY2F0aW9ucy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9GaWxsSGFuZGxlKVxuICAgICAqL1xuICAgIGZpbGxIYW5kbGVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsbEhhbmRsZXxGaWxsSGFuZGxlQ29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IGFsbG93cyBmaWx0ZXJpbmcgb2YgdGhlIGdyaWQgYnkgc2V0dGluZ3MgZmlsdGVycyBvbiBjb2x1bW5zLiBUaGUgYWN0dWFsIGZpbHRlcmluZyBpcyBkb25lIGJ5IHRoZSBzdG9yZS5cbiAgICAgKiBGb3IgaW5mbyBvbiBwcm9ncmFtbWF0aWNhbGx5IGhhbmRsaW5nIGZpbHRlcnMsIHNlZSBbU3RvcmVGaWx0ZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvbWl4aW4vU3RvcmVGaWx0ZXIpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0ZpbHRlcilcbiAgICAgKi9cbiAgICBmaWx0ZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsdGVyfEZpbHRlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBhbGxvd3MgZmlsdGVyaW5nIG9mIHRoZSBncmlkIGJ5IGVudGVyaW5nIGZpbHRlcnMgb24gY29sdW1uIGhlYWRlcnMuXG4gICAgICogVGhlIGFjdHVhbCBmaWx0ZXJpbmcgaXMgZG9uZSBieSB0aGUgc3RvcmUuXG4gICAgICogRm9yIGluZm8gb24gcHJvZ3JhbW1hdGljYWxseSBoYW5kbGluZyBmaWx0ZXJzLCBzZWUgW1N0b3JlRmlsdGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9kYXRhL21peGluL1N0b3JlRmlsdGVyKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9GaWx0ZXJCYXIpXG4gICAgICovXG4gICAgZmlsdGVyQmFyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbHRlckJhcnxGaWx0ZXJCYXJDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHJlbmRlcmluZyBhbmQgaGFuZGxpbmcgb2Ygcm93IGdyb3Vwcy4gVGhlIGFjdHVhbCBncm91cGluZyBpcyBkb25lIGluIHRoZSBzdG9yZSwgYnV0IHRyaWdnZXJlZCBieVxuICAgICAqIDxrYmQ+U2hpZnQ8L2tiZD4gKyBjbGlja2luZyBoZWFkZXJzLCBvciBieSB1c2luZyB0aGUgY29udGV4dCBtZW51LCBvciBieSB1c2luZyB0d28gZmluZ2VyIHRhcCAob25lIG9uIGhlYWRlcixcbiAgICAgKiBvbmUgYW55d2hlcmUgb24gZ3JpZCkuIFVzZSA8a2JkPlNoaWZ0PC9rYmQ+ICsgPGtiZD5BbHQ8L2tiZD4gKyBjbGljaywgb3IgdGhlIGNvbnRleHQgbWVudSwgdG8gcmVtb3ZlIGEgY29sdW1uXG4gICAgICogZ3JvdXBlci5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Hcm91cClcbiAgICAgKi9cbiAgICBncm91cEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcm91cHxHcm91cENvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgc3VtbWFyeSByb3cgYXMgYSBncm91cCBmb290ZXIgaW4gYSBncm91cGVkIGdyaWQuIFVzZXMgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIGNvbHVtbnMgYXNcbiAgICAgKiBbU3VtbWFyeV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TdW1tYXJ5KS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Hcm91cFN1bW1hcnkpXG4gICAgICovXG4gICAgZ3JvdXBTdW1tYXJ5RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyb3VwU3VtbWFyeXxHcm91cFN1bW1hcnlDb25maWdcbiAgICAvKipcbiAgICAgKiBSaWdodCBjbGljayBjb2x1bW4gaGVhZGVyIG9yIGZvY3VzIGl0IGFuZCBwcmVzcyBTUEFDRSBrZXkgdG8gc2hvdyB0aGUgY29udGV4dCBtZW51IGZvciBoZWFkZXJzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0hlYWRlck1lbnUpXG4gICAgICovXG4gICAgaGVhZGVyTWVudUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xIZWFkZXJNZW51fEhlYWRlck1lbnVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIHJlY29yZHMgd2hpY2ggc2F0aXNmeSBhIGNlcnRhaW4gY29uZGl0aW9uIHRvIGJlIGxvY2tlZCBhdCB0aGUgdG9wIG9mIHRoZSBncmlkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0xvY2tSb3dzKVxuICAgICAqL1xuICAgIGxvY2tSb3dzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfExvY2tSb3dzfExvY2tSb3dzQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIG1lcmdlcyBjZWxscyB0aGF0IGhhdmUgdGhlIHNhbWUgdmFsdWUgaW4gc29ydGVkIChvciBbb3B0aW9uYWxseV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9NZXJnZUNlbGxzI2NvbmZpZy1zb3J0ZWRPbmx5KSBhbnkpIGNvbHVtbnNcbiAgICAgKiBjb25maWd1cmVkIHRvIFttZXJnZUNlbGxzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vQ29sdW1uI2NvbmZpZy1tZXJnZUNlbGxzKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9NZXJnZUNlbGxzKVxuICAgICAqL1xuICAgIG1lcmdlQ2VsbHNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TWVyZ2VDZWxsc3xNZXJnZUNlbGxzQ29uZmlnXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIFBERi9QTkcgZmlsZXMgZnJvbSB0aGUgR3JpZCBjb21wb25lbnQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvZXhwb3J0L1BkZkV4cG9ydClcbiAgICAgKi9cbiAgICBwZGZFeHBvcnRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UGRmRXhwb3J0fFBkZkV4cG9ydENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyBwaW5uaW5nIGNvbHVtbnMgdG8gdGhlIHN0YXJ0IG9yIGVuZCByZWdpb24gb2YgdGhlIGdyaWQgd2l0aG91dCBhbnkgYWRkaXRpb25hbCBzdWJHcmlkIGNvbmZpZ3VyYXRpb25zLlxuICAgICAqIFdoZW4gcGlubmluZyB0byBhIHJlZ2lvbiB0aGF0IGRvZXMgbm90IHlldCBleGlzdCwgdGhlIGZlYXR1cmUgY3JlYXRlcyB0aGUgcmVxdWlyZWQgc3ViR3JpZCBvbiB0aGUgZmx5LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1BpbkNvbHVtbnMpXG4gICAgICovXG4gICAgcGluQ29sdW1uc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQaW5Db2x1bW5zfFBpbkNvbHVtbnNDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3MgcHJpbnRpbmcgR3JpZCBjb250ZW50cyB1c2luZyBicm93c2VyIHByaW50IGRpYWxvZy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9leHBvcnQvUHJpbnQpXG4gICAgICovXG4gICAgcHJpbnRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UHJpbnR8UHJpbnRDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHNlYXJjaCBpbiBhIGNvbHVtbiBieSBmb2N1c2luZyBhIGNlbGwgYW5kIHR5cGluZy4gTmF2aWdhdGUgYmV0d2VlbiBoaXRzIHVzaW5nIHRoZVxuICAgICAqIGtleWJvYXJkLCA8a2JkPmYzPC9rYmQ+IG9yIDxrYmQ+Y3RybDwva2JkPi88a2JkPmNtZDwva2JkPiArIDxrYmQ+Zzwva2JkPiBtb3ZlcyB0byBuZXh0LCBhbHNvIHByZXNzaW5nXG4gICAgICogPGtiZD5zaGlmdDwva2JkPiBtb3ZlcyB0byBwcmV2aW91cy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9RdWlja0ZpbmQpXG4gICAgICovXG4gICAgcXVpY2tGaW5kRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFF1aWNrRmluZHxRdWlja0ZpbmRDb25maWdcbiAgICAvKipcbiAgICAgKiBNYWtlcyB0aGUgc3BsaXR0ZXIgYmV0d2VlbiBncmlkIFtzZWN0aW9uc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9TdWJHcmlkKSBkcmFnZ2FibGUsIHRvIGxldCB1c2VycyByZXNpemUsIGFuZFxuICAgICAqIGNvbGxhcHNlL2V4cGFuZCB0aGUgc2VjdGlvbnMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUmVnaW9uUmVzaXplKVxuICAgICAqL1xuICAgIHJlZ2lvblJlc2l6ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSZWdpb25SZXNpemV8UmVnaW9uUmVzaXplQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3cgdXNpbmcgW0N0cmwvQ01EICsgQy9YXSBhbmQgW0N0cmwvQ01EICsgVl0gdG8gY29weS9jdXQtYW5kLXBhc3RlIHJvd3MuIEFsc28gbWFrZXMgY3V0LCBjb3B5IGFuZCBwYXN0ZSBhY3Rpb25zXG4gICAgICogYXZhaWxhYmxlIHZpYSB0aGUgY2VsbCBjb250ZXh0IG1lbnUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUm93Q29weVBhc3RlKVxuICAgICAqL1xuICAgIHJvd0NvcHlQYXN0ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dDb3B5UGFzdGV8Um93Q29weVBhc3RlQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGFsbG93cyBlZGl0aW5nIG9mIGVudGlyZSByb3dzIGluIGEgZ3JpZCBpbiBhIGRvY2tlZCBwYW5lbCB3aGljaCBieSBkZWZhdWx0IHNsaWRlcyBvdXQgZnJvbSB0aGUgcmlnaHQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUm93RWRpdClcbiAgICAgKi9cbiAgICByb3dFZGl0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0VkaXR8Um93RWRpdENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZXhwYW5kaW5nIG9mIEdyaWQgcm93cyBieSBlaXRoZXIgcm93IGNsaWNrIG9yIGRvdWJsZSBjbGljaywgb3IgYnkgYWRkaW5nIGEgc2VwYXJhdGUgR3JpZCBjb2x1bW4gd2hpY2ggcmVuZGVyc1xuICAgICAqIGEgYnV0dG9uIHRoYXQgZXhwYW5kcyBvciBjb2xsYXBzZXMgdGhlIHJvdy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dFeHBhbmRlcilcbiAgICAgKi9cbiAgICByb3dFeHBhbmRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dFeHBhbmRlcnxSb3dFeHBhbmRlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyB1c2VyIHRvIHJlb3JkZXIgcm93cyBieSBkcmFnZ2luZyB0aGVtLiBUbyBnZXQgbm90aWZpZWQgYWJvdXQgcm93IHJlb3JkZXIgbGlzdGVuIHRvIGBjaGFuZ2VgIGV2ZW50XG4gICAgICogb24gdGhlIGdyaWQgW3N0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9kYXRhL1N0b3JlKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dSZW9yZGVyKVxuICAgICAqL1xuICAgIHJvd1Jlb3JkZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Um93UmVvcmRlcnxSb3dSZW9yZGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB1c2VyIHRvIGNoYW5nZSByb3cgaGVpZ2h0IGJ5IGRyYWdnaW5nIHRoZSBib3R0b20gcm93IGJvcmRlci4gQWZ0ZXIgYSByZXNpemUgb3BlcmF0aW9uLCB0aGUgW3Jvd0hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZGF0YS9HcmlkUm93TW9kZWwjZmllbGQtcm93SGVpZ2h0KVxuICAgICAqIGZpZWxkIG9mIHRoZSByZWNvcmQgaXMgdXBkYXRlZCAod2hlbiBbYXBwbHlUb0FsbFJvd3NdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUm93UmVzaXplI2NvbmZpZy1hcHBseVRvQWxsUm93cykgaXMgYGZhbHNlYCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUm93UmVzaXplKVxuICAgICAqL1xuICAgIHJvd1Jlc2l6ZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dSZXNpemV8Um93UmVzaXplQ29uZmlnXG4gICAgLyoqXG4gICAgICogPGRpdiBjbGFzcz1cImV4dGVybmFsLWV4YW1wbGUgdmVydGljYWxcIiBkYXRhLWZpbGU9XCJHcmlkL2ZlYXR1cmUvU2VhcmNoLmpzXCI+PC9kaXY+XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU2VhcmNoKVxuICAgICAqL1xuICAgIHNlYXJjaEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTZWFyY2h8U2VhcmNoQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHNvcnRpbmcgb2YgZ3JpZCBieSBjbGlja2luZyAob3IgdGFwcGluZykgaGVhZGVycywgYWxzbyBkaXNwbGF5cyB3aGljaCBjb2x1bW5zIGdyaWQgaXMgc29ydGVkIGJ5IChudW1iZXJlZCBpZlxuICAgICAqIHVzaW5nIG11bHRpc29ydCkuIFVzZSBtb2RpZmllciBrZXlzIGZvciBtdWx0aXNvcnRpbmc6IFtDdHJsL0NNRCArIGNsaWNrXSB0byBhZGQgc29ydGVyLCBbQ3RybC9DTUQgKyBBbHQgKyBjbGlja10gdG8gcmVtb3ZlIHNvcnRlci5cbiAgICAgKiBUaGUgYWN0dWFsIHNvcnRpbmcgaXMgZG9uZSBieSB0aGUgc3RvcmUsIHNlZSBbU3RvcmUuc29ydCgpXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9kYXRhL21peGluL1N0b3JlU29ydCNmdW5jdGlvbi1zb3J0KS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Tb3J0KVxuICAgICAqL1xuICAgIHNvcnRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U29ydHxTb3J0Q29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGFsbG93cyBzcGxpdHRpbmcgdGhlIEdyaWQgaW50byBtdWx0aXBsZSB2aWV3cywgZWl0aGVyIGJ5IHVzaW5nIHRoZSBjZWxsIGNvbnRleHQgbWVudSwgb3JcbiAgICAgKiBwcm9ncmFtbWF0aWNhbGx5IGJ5IGNhbGxpbmcgW3NwbGl0KCldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3BsaXQjZnVuY3Rpb24tc3BsaXQpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1NwbGl0KVxuICAgICAqL1xuICAgIHNwbGl0RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNwbGl0fFNwbGl0Q29uZmlnXG4gICAgLyoqXG4gICAgICogQSBmZWF0dXJlIHdoaWNoIHBpbnMgY2VsbCBjb250ZW50IHRvIHRoZSB0b3Agb2YgdGhlIGdyaWQgd2hpbGUgdGhlIHJvdyBzY3JvbGxzIG9mZiB0aGUgdG9wIGJ1dCBpcyBzdGlsbCB2aXNpYmxlLiBWZXJ5XG4gICAgICogc2ltaWxhciB0byBuYXRpdmUgYHBvc2l0aW9uOiBzdGlja3lgLCB3aGljaCBiZWNhdXNlIG9mIEdyaWQncyBtdWx0aXBsZS1yZWdpb24gc2V0dXAgdW5mb3J0dW5hdGVseSBjYW5ub3QgYmUgdXNlZCB0b1xuICAgICAqIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N0aWNreUNlbGxzKVxuICAgICAqL1xuICAgIHN0aWNreUNlbGxzRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFN0aWNreUNlbGxzfFN0aWNreUNlbGxzQ29uZmlnXG4gICAgLyoqXG4gICAgICogU3RyaXBlcyByb3dzIGJ5IGFkZGluZyBhbHRlcm5hdGluZyBDU1MgY2xhc3NlcyB0byBhbGwgcm93IGVsZW1lbnRzIChgYi1ldmVuYCBhbmQgYGItb2RkYCkuXG4gICAgICogVGhpcyBpbXByb3ZlcyB2aXN1YWwgcmVhZGFiaWxpdHkgaW4gZGF0YS1oZWF2eSBncmlkcyBieSBnaXZpbmcgYWRqYWNlbnQgcm93cyBkaWZmZXJlbnQgYmFja2dyb3VuZCBjb2xvcnMuXG4gICAgICogU3R5bGUgdGhlIHN0cmlwZWQgcm93cyB1c2luZyB0aGUgYC5iLWV2ZW5gIGFuZCBgLmItb2RkYCBDU1MgY2xhc3Nlcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TdHJpcGUpXG4gICAgICovXG4gICAgc3RyaXBlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFN0cmlwZXxTdHJpcGVDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIHN1bW1hcnkgcm93IGluIHRoZSBncmlkIGZvb3Rlci5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TdW1tYXJ5KVxuICAgICAqL1xuICAgIHN1bW1hcnlGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3VtbWFyeXxTdW1tYXJ5Q29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IG1ha2VzIHRoZSBncmlkIHdvcmsgbW9yZSBsaWtlIGEgdHJlZS4gSW5jbHVkZWQgYnkgZGVmYXVsdCBpbiBbVHJlZUdyaWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQpLiBSZXF1aXJlc1xuICAgICAqIGV4YWN0bHkgb25lIFtUcmVlQ29sdW1uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vVHJlZUNvbHVtbikgYW1vbmcgZ3JpZHMgY29sdW1ucy4gVGhhdCBjb2x1bW4gd2lsbCBoYXZlIGl0cyByZW5kZXJlciByZXBsYWNlZCB3aXRoIGFcbiAgICAgKiB0cmVlIHJlbmRlcmVyIHRoYXQgYWRkcyBwYWRkaW5nIGFuZCBpY29uIHRvIGdpdmUgdGhlIGFwcGVhcmFuY2Ugb2YgYSB0cmVlLiBUaGUgb3JpZ2luYWwgcmVuZGVyZXIgaXMgcHJlc2VydmVkIGFuZFxuICAgICAqIGFsc28gY2FsbGVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1RyZWUpXG4gICAgICovXG4gICAgdHJlZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUcmVlfFRyZWVDb25maWdcbiAgICAvKipcbiAgICAgKiBBIGZlYXR1cmUgdGhhdCBhbGxvd3MgdHJhbnNmb3JtaW5nIGEgZmxhdCBkYXRhc2V0IChvciB0aGUgbGVhdmVzIG9mIGEgaGllcmFyY2hpY2FsKSBpbnRvIGEgdHJlZSBieSBzcGVjaWZ5aW5nIGFcbiAgICAgKiByZWNvcmQgZmllbGQgcGVyIHBhcmVudCBsZXZlbC4gUGFyZW50cyBhcmUgZ2VuZXJhdGVkIGJhc2VkIG9uIGVhY2ggbGVhZidzIHZhbHVlIGZvciB0aG9zZSBmaWVsZHMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvVHJlZUdyb3VwKVxuICAgICAqL1xuICAgIHRyZWVHcm91cEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUcmVlR3JvdXB8VHJlZUdyb3VwQ29uZmlnXG5cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3IgOiAnYnJ5bnR1bS10cmVlLWdyaWQnLFxuICAgIHRlbXBsYXRlIDogJydcbn0pXG5leHBvcnQgY2xhc3MgQnJ5bnR1bVRyZWVHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZUNsYXNzID0gVHJlZUdyaWQ7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlTmFtZSA9ICdUcmVlR3JpZCc7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRXZlbnRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ29uQmVmb3JlQ2FuY2VsQ2VsbEVkaXQnLFxuICAgICAgICAnb25CZWZvcmVDYW5jZWxSb3dFZGl0JyxcbiAgICAgICAgJ29uQmVmb3JlQ2VsbEVkaXRTdGFydCcsXG4gICAgICAgICdvbkJlZm9yZUNlbGxSYW5nZURlbGV0ZScsXG4gICAgICAgICdvbkJlZm9yZUNlbGxSYW5nZUVkaXQnLFxuICAgICAgICAnb25CZWZvcmVDb2x1bW5Db2xsYXBzZVRvZ2dsZScsXG4gICAgICAgICdvbkJlZm9yZUNvbHVtbkRyYWdTdGFydCcsXG4gICAgICAgICdvbkJlZm9yZUNvbHVtbkRyb3BGaW5hbGl6ZScsXG4gICAgICAgICdvbkJlZm9yZUNvbHVtblJlc2l6ZScsXG4gICAgICAgICdvbkJlZm9yZUNvcHknLFxuICAgICAgICAnb25CZWZvcmVDU1ZFeHBvcnQnLFxuICAgICAgICAnb25CZWZvcmVEZXN0cm95JyxcbiAgICAgICAgJ29uQmVmb3JlRXhjZWxFeHBvcnQnLFxuICAgICAgICAnb25CZWZvcmVGaWxsSGFuZGxlRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uQmVmb3JlRmluaXNoQ2VsbEVkaXQnLFxuICAgICAgICAnb25CZWZvcmVGaW5pc2hSb3dFZGl0JyxcbiAgICAgICAgJ29uQmVmb3JlSGlkZScsXG4gICAgICAgICdvbkJlZm9yZVBhc3RlJyxcbiAgICAgICAgJ29uQmVmb3JlUGRmRXhwb3J0JyxcbiAgICAgICAgJ29uQmVmb3JlUmVuZGVyUm93JyxcbiAgICAgICAgJ29uQmVmb3JlUmVuZGVyUm93cycsXG4gICAgICAgICdvbkJlZm9yZVJvd0NvbGxhcHNlJyxcbiAgICAgICAgJ29uQmVmb3JlUm93RXhwYW5kJyxcbiAgICAgICAgJ29uQmVmb3JlU2VsZWN0aW9uQ2hhbmdlJyxcbiAgICAgICAgJ29uQmVmb3JlU2V0UmVjb3JkJyxcbiAgICAgICAgJ29uQmVmb3JlU2hvdycsXG4gICAgICAgICdvbkJlZm9yZVN0YXJ0Um93RWRpdCcsXG4gICAgICAgICdvbkJlZm9yZVN0YXRlQXBwbHknLFxuICAgICAgICAnb25CZWZvcmVTdGF0ZVNhdmUnLFxuICAgICAgICAnb25CZWZvcmVUb2dnbGVHcm91cCcsXG4gICAgICAgICdvbkJlZm9yZVRvZ2dsZU5vZGUnLFxuICAgICAgICAnb25DYW5jZWxDZWxsRWRpdCcsXG4gICAgICAgICdvbkNhdGNoQWxsJyxcbiAgICAgICAgJ29uQ2VsbENsaWNrJyxcbiAgICAgICAgJ29uQ2VsbENvbnRleHRNZW51JyxcbiAgICAgICAgJ29uQ2VsbERibENsaWNrJyxcbiAgICAgICAgJ29uQ2VsbE1lbnVCZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQ2VsbE1lbnVJdGVtJyxcbiAgICAgICAgJ29uQ2VsbE1lbnVTaG93JyxcbiAgICAgICAgJ29uQ2VsbE1lbnVUb2dnbGVJdGVtJyxcbiAgICAgICAgJ29uQ2VsbE1vdXNlRW50ZXInLFxuICAgICAgICAnb25DZWxsTW91c2VMZWF2ZScsXG4gICAgICAgICdvbkNlbGxNb3VzZU91dCcsXG4gICAgICAgICdvbkNlbGxNb3VzZU92ZXInLFxuICAgICAgICAnb25Db2xsYXBzZScsXG4gICAgICAgICdvbkNvbGxhcHNlTm9kZScsXG4gICAgICAgICdvbkNvbHVtbkNvbGxhcHNlVG9nZ2xlJyxcbiAgICAgICAgJ29uQ29sdW1uRHJhZycsXG4gICAgICAgICdvbkNvbHVtbkRyYWdTdGFydCcsXG4gICAgICAgICdvbkNvbHVtbkRyb3AnLFxuICAgICAgICAnb25Db2x1bW5SZXNpemUnLFxuICAgICAgICAnb25Db2x1bW5SZXNpemVTdGFydCcsXG4gICAgICAgICdvbkNvbnRleHRNZW51SXRlbScsXG4gICAgICAgICdvbkNvbnRleHRNZW51VG9nZ2xlSXRlbScsXG4gICAgICAgICdvbkNvcHknLFxuICAgICAgICAnb25EYXRhQ2hhbmdlJyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkRpcnR5U3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25EcmFnU2VsZWN0aW5nJyxcbiAgICAgICAgJ29uRWxlbWVudENyZWF0ZWQnLFxuICAgICAgICAnb25FeHBhbmQnLFxuICAgICAgICAnb25FeHBhbmROb2RlJyxcbiAgICAgICAgJ29uRmlsZURyb3AnLFxuICAgICAgICAnb25GaWxsSGFuZGxlQmVmb3JlRHJhZ0ZpbmFsaXplJyxcbiAgICAgICAgJ29uRmlsbEhhbmRsZURyYWcnLFxuICAgICAgICAnb25GaWxsSGFuZGxlRHJhZ0Fib3J0JyxcbiAgICAgICAgJ29uRmlsbEhhbmRsZURyYWdFbmQnLFxuICAgICAgICAnb25GaWxsSGFuZGxlRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uRmluaXNoQ2VsbEVkaXQnLFxuICAgICAgICAnb25GaW5pc2hSb3dFZGl0JyxcbiAgICAgICAgJ29uRm9jdXNJbicsXG4gICAgICAgICdvbkZvY3VzT3V0JyxcbiAgICAgICAgJ29uR3JpZFJvd0JlZm9yZURyYWdTdGFydCcsXG4gICAgICAgICdvbkdyaWRSb3dCZWZvcmVEcm9wRmluYWxpemUnLFxuICAgICAgICAnb25HcmlkUm93RHJhZycsXG4gICAgICAgICdvbkdyaWRSb3dEcmFnQWJvcnQnLFxuICAgICAgICAnb25HcmlkUm93RHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uR3JpZFJvd0Ryb3AnLFxuICAgICAgICAnb25IZWFkZXJDbGljaycsXG4gICAgICAgICdvbkhlYWRlck1lbnVCZWZvcmVTaG93JyxcbiAgICAgICAgJ29uSGVhZGVyTWVudUl0ZW0nLFxuICAgICAgICAnb25IZWFkZXJNZW51U2hvdycsXG4gICAgICAgICdvbkhlYWRlck1lbnVUb2dnbGVJdGVtJyxcbiAgICAgICAgJ29uSGlkZScsXG4gICAgICAgICdvbkhvcml6b250YWxTY3JvbGwnLFxuICAgICAgICAnb25Ib3Jpem9udGFsU2Nyb2xsRW5kJyxcbiAgICAgICAgJ29uTG9ja1Jvd3MnLFxuICAgICAgICAnb25Nb3VzZU91dCcsXG4gICAgICAgICdvbk1vdXNlT3ZlcicsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUGFzdGUnLFxuICAgICAgICAnb25QZGZFeHBvcnQnLFxuICAgICAgICAnb25SZWFkT25seScsXG4gICAgICAgICdvblJlY29tcG9zZScsXG4gICAgICAgICdvblJlbmRlclJvdycsXG4gICAgICAgICdvblJlbmRlclJvd3MnLFxuICAgICAgICAnb25SZXNpemUnLFxuICAgICAgICAnb25SZXNwb25zaXZlJyxcbiAgICAgICAgJ29uUm93Q29sbGFwc2UnLFxuICAgICAgICAnb25Sb3dFeHBhbmQnLFxuICAgICAgICAnb25Sb3dNb3VzZUVudGVyJyxcbiAgICAgICAgJ29uUm93TW91c2VMZWF2ZScsXG4gICAgICAgICdvblNjcm9sbCcsXG4gICAgICAgICdvblNlbGVjdGlvbkNoYW5nZScsXG4gICAgICAgICdvblNlbGVjdGlvbk1vZGVDaGFuZ2UnLFxuICAgICAgICAnb25TaG93JyxcbiAgICAgICAgJ29uU3BsaXQnLFxuICAgICAgICAnb25TcGxpdHRlckNvbGxhcHNlQ2xpY2snLFxuICAgICAgICAnb25TcGxpdHRlckRyYWdFbmQnLFxuICAgICAgICAnb25TcGxpdHRlckRyYWdTdGFydCcsXG4gICAgICAgICdvblNwbGl0dGVyRXhwYW5kQ2xpY2snLFxuICAgICAgICAnb25TdGFydENlbGxFZGl0JyxcbiAgICAgICAgJ29uU3RhcnRSb3dFZGl0JyxcbiAgICAgICAgJ29uU3ViR3JpZENvbGxhcHNlJyxcbiAgICAgICAgJ29uU3ViR3JpZEV4cGFuZCcsXG4gICAgICAgICdvblRvZ2dsZUdyb3VwJyxcbiAgICAgICAgJ29uVG9nZ2xlTm9kZScsXG4gICAgICAgICdvblRvb2xDbGljaycsXG4gICAgICAgICdvblRyZWVHcm91cCcsXG4gICAgICAgICdvblVubG9ja1Jvd3MnLFxuICAgICAgICAnb25VbnNwbGl0J1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2FpRmVhdHVyZScsXG4gICAgICAgICdhaUZpbHRlckZlYXR1cmUnLFxuICAgICAgICAnY2VsbENvcHlQYXN0ZUZlYXR1cmUnLFxuICAgICAgICAnY2VsbEVkaXRGZWF0dXJlJyxcbiAgICAgICAgJ2NlbGxNZW51RmVhdHVyZScsXG4gICAgICAgICdjZWxsVG9vbHRpcEZlYXR1cmUnLFxuICAgICAgICAnY2hhcnRzRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5BdXRvV2lkdGhGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtbkRyYWdUb29sYmFyRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5QaWNrZXJGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtblJlbmFtZUZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVvcmRlckZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVzaXplRmVhdHVyZScsXG4gICAgICAgICdleGNlbEV4cG9ydGVyRmVhdHVyZScsXG4gICAgICAgICdmaWxlRHJvcEZlYXR1cmUnLFxuICAgICAgICAnZmlsbEhhbmRsZUZlYXR1cmUnLFxuICAgICAgICAnZmlsdGVyRmVhdHVyZScsXG4gICAgICAgICdmaWx0ZXJCYXJGZWF0dXJlJyxcbiAgICAgICAgJ2dyb3VwRmVhdHVyZScsXG4gICAgICAgICdncm91cFN1bW1hcnlGZWF0dXJlJyxcbiAgICAgICAgJ2hlYWRlck1lbnVGZWF0dXJlJyxcbiAgICAgICAgJ2xvY2tSb3dzRmVhdHVyZScsXG4gICAgICAgICdtZXJnZUNlbGxzRmVhdHVyZScsXG4gICAgICAgICdwZGZFeHBvcnRGZWF0dXJlJyxcbiAgICAgICAgJ3BpbkNvbHVtbnNGZWF0dXJlJyxcbiAgICAgICAgJ3ByaW50RmVhdHVyZScsXG4gICAgICAgICdxdWlja0ZpbmRGZWF0dXJlJyxcbiAgICAgICAgJ3JlZ2lvblJlc2l6ZUZlYXR1cmUnLFxuICAgICAgICAncm93Q29weVBhc3RlRmVhdHVyZScsXG4gICAgICAgICdyb3dFZGl0RmVhdHVyZScsXG4gICAgICAgICdyb3dFeHBhbmRlckZlYXR1cmUnLFxuICAgICAgICAncm93UmVvcmRlckZlYXR1cmUnLFxuICAgICAgICAncm93UmVzaXplRmVhdHVyZScsXG4gICAgICAgICdzZWFyY2hGZWF0dXJlJyxcbiAgICAgICAgJ3NvcnRGZWF0dXJlJyxcbiAgICAgICAgJ3NwbGl0RmVhdHVyZScsXG4gICAgICAgICdzdGlja3lDZWxsc0ZlYXR1cmUnLFxuICAgICAgICAnc3RyaXBlRmVhdHVyZScsXG4gICAgICAgICdzdW1tYXJ5RmVhdHVyZScsXG4gICAgICAgICd0cmVlRmVhdHVyZScsXG4gICAgICAgICd0cmVlR3JvdXBGZWF0dXJlJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtVHJlZUdyaWRDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FuaW1hdGVGaWx0ZXJSZW1vdmFscycsXG4gICAgICAgICdhbmltYXRlUmVtb3ZpbmdSb3dzJyxcbiAgICAgICAgJ2FuaW1hdGVUcmVlTm9kZVRvZ2dsZScsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2F1dG9IZWlnaHQnLFxuICAgICAgICAnYmJhcicsXG4gICAgICAgICdib2R5Q2xzJyxcbiAgICAgICAgJ2JvcmRlcicsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZWxsRWxsaXBzaXMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29sdW1uTGluZXMnLFxuICAgICAgICAnY29sdW1ucycsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQnLFxuICAgICAgICAnZGF0YScsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkZWZhdWx0UmVnaW9uJyxcbiAgICAgICAgJ2Rlc3Ryb3lTdG9yZScsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2Rpc2FibGVHcmlkQ29sdW1uSWRXYXJuaW5nJyxcbiAgICAgICAgJ2Rpc2FibGVHcmlkUm93TW9kZWxXYXJuaW5nJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhd2VyJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2VtcHR5VGV4dCcsXG4gICAgICAgICdlbmFibGVTdGlja3knLFxuICAgICAgICAnZW5hYmxlVGV4dFNlbGVjdGlvbicsXG4gICAgICAgICdlbmFibGVVbmRvUmVkb0tleXMnLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZpbGxMYXN0Q29sdW1uJyxcbiAgICAgICAgJ2ZpeGVkUm93SGVpZ2h0JyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2Zvcm11bGFQcm92aWRlcnMnLFxuICAgICAgICAnZnVsbFJvd1JlZnJlc2gnLFxuICAgICAgICAnZ2V0Um93SGVpZ2h0JyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVGb290ZXJzJyxcbiAgICAgICAgJ2hpZGVIZWFkZXJzJyxcbiAgICAgICAgJ2hpZGVIb3Jpem9udGFsU2Nyb2xsYmFyJyxcbiAgICAgICAgJ2hvdmVyQ2xzJyxcbiAgICAgICAgJ2ljb24nLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2FkTWFzaycsXG4gICAgICAgICdsb2FkTWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ2xvYWRNYXNrRXJyb3InLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9uZ1ByZXNzVGltZScsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnb3ZlcmZsb3dUd2luQ29uZmlnJyxcbiAgICAgICAgJ3BsdWdpbnMnLFxuICAgICAgICAncHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbCcsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZW5kaXRpb24nLFxuICAgICAgICAncmVzaXphYmxlJyxcbiAgICAgICAgJ3Jlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXInLFxuICAgICAgICAncmVzcG9uc2l2ZUxldmVscycsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9sZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdyb3dIZWlnaHQnLFxuICAgICAgICAncm93TGluZXMnLFxuICAgICAgICAncnRsJyxcbiAgICAgICAgJ3Njcm9sbGFibGUnLFxuICAgICAgICAnc2Nyb2xsZXJDbGFzcycsXG4gICAgICAgICdzY3JvbGxNYW5hZ2VyJyxcbiAgICAgICAgJ3NlbGVjdGlvbk1vZGUnLFxuICAgICAgICAnc2hvd0RpcnR5JyxcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICAnc3RhdGVmdWwnLFxuICAgICAgICAnc3RhdGVmdWxFdmVudHMnLFxuICAgICAgICAnc3RhdGVJZCcsXG4gICAgICAgICdzdGF0ZVByb3ZpZGVyJyxcbiAgICAgICAgJ3N0YXRlU2V0dGluZ3MnLFxuICAgICAgICAnc3RvcmUnLFxuICAgICAgICAnc3RyaXBzJyxcbiAgICAgICAgJ3N1YkdyaWRDb25maWdzJyxcbiAgICAgICAgJ3N5bmNNYXNrJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YmFyJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3RyYW5zaXRpb24nLFxuICAgICAgICAndHJhbnNpdGlvbkR1cmF0aW9uJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2VpZ2h0JyxcbiAgICAgICAgJ3dpZHRoJ1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3NPbmx5OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FuaW1hdGVGaWx0ZXJSZW1vdmFscycsXG4gICAgICAgICdhbmltYXRlUmVtb3ZpbmdSb3dzJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b0hlaWdodCcsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYm9yZGVyJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RlZmF1bHRSZWdpb24nLFxuICAgICAgICAnZGVzdHJveVN0b3JlJyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZUdyaWRDb2x1bW5JZFdhcm5pbmcnLFxuICAgICAgICAnZGlzYWJsZUdyaWRSb3dNb2RlbFdhcm5pbmcnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW5hYmxlU3RpY2t5JyxcbiAgICAgICAgJ2VuYWJsZVRleHRTZWxlY3Rpb24nLFxuICAgICAgICAnZmlsbExhc3RDb2x1bW4nLFxuICAgICAgICAnZml4ZWRSb3dIZWlnaHQnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2Zvcm11bGFQcm92aWRlcnMnLFxuICAgICAgICAnZnVsbFJvd1JlZnJlc2gnLFxuICAgICAgICAnZ2V0Um93SGVpZ2h0JyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoaWRlSG9yaXpvbnRhbFNjcm9sbGJhcicsXG4gICAgICAgICdob3ZlckNscycsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2FkTWFzaycsXG4gICAgICAgICdsb2FkTWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ2xvYWRNYXNrRXJyb3InLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ292ZXJmbG93VHdpbkNvbmZpZycsXG4gICAgICAgICdwbHVnaW5zJyxcbiAgICAgICAgJ3ByZXNlcnZlRm9jdXNPbkRhdGFzZXRDaGFuZ2UnLFxuICAgICAgICAncHJlc2VydmVTY3JvbGxPbkRhdGFzZXRDaGFuZ2UnLFxuICAgICAgICAncHJldmVudFRvb2x0aXBPblRvdWNoJyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmVzaXphYmxlJyxcbiAgICAgICAgJ3Jlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXInLFxuICAgICAgICAncmVzcG9uc2l2ZUxldmVscycsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9sZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxlckNsYXNzJyxcbiAgICAgICAgJ3Njcm9sbE1hbmFnZXInLFxuICAgICAgICAnc2hvd0RpcnR5JyxcbiAgICAgICAgJ3N0YXRlZnVsJyxcbiAgICAgICAgJ3N0YXRlZnVsRXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RyaXBzJyxcbiAgICAgICAgJ3N1YkdyaWRDb25maWdzJyxcbiAgICAgICAgJ3N5bmNNYXNrJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YmFyJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2VpZ2h0J1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtUHJvcHM6IHN0cmluZ1tdID0gQnJ5bnR1bVRyZWVHcmlkQ29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbmltYXRlVHJlZU5vZGVUb2dnbGUnLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnYXV0b1VwZGF0ZVJlY29yZCcsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NlbGxFbGxpcHNpcycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb2x1bW5MaW5lcycsXG4gICAgICAgICdjb2x1bW5zJyxcbiAgICAgICAgJ2RhdGEnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdlbXB0eVRleHQnLFxuICAgICAgICAnZW5hYmxlVW5kb1JlZG9LZXlzJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUZvb3RlcnMnLFxuICAgICAgICAnaGlkZUhlYWRlcnMnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xvbmdQcmVzc1RpbWUnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtaW5IZWlnaHQnLFxuICAgICAgICAnbWluV2lkdGgnLFxuICAgICAgICAnb3JpZ2luYWxTdG9yZScsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncHJlc2VydmVTY3JvbGwnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3Jvd0hlaWdodCcsXG4gICAgICAgICdyb3dMaW5lcycsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzZWxlY3RlZENlbGwnLFxuICAgICAgICAnc2VsZWN0ZWRDZWxscycsXG4gICAgICAgICdzZWxlY3RlZFJlY29yZCcsXG4gICAgICAgICdzZWxlY3RlZFJlY29yZHMnLFxuICAgICAgICAnc2VsZWN0ZWRSb3dzJyxcbiAgICAgICAgJ3NlbGVjdGlvbk1vZGUnLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzdGF0ZScsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlU2V0dGluZ3MnLFxuICAgICAgICAnc3RvcmUnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHMnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgICAgJ3RyYW5zaXRpb25EdXJhdGlvbicsXG4gICAgICAgICd3aWR0aCdcbiAgICBdKTtcblxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgICBwdWJsaWMgaW5zdGFuY2UhOiBUcmVlR3JpZDtcblxuICAgIHByaXZhdGUgYnJ5bnR1bUNvbmZpZyA9IHtcbiAgICAgICAgYWRvcHQgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYXBwZW5kVG8gICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgaHJlZiAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYW5ndWxhckNvbXBvbmVudCA6IHRoaXMsXG4gICAgICAgIGZlYXR1cmVzICAgICAgICAgOiB7fSxcbiAgICAgICAgbGlzdGVuZXJzICAgICAgICA6IHt9XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBDb25maWdzIG9ubHlcbiAgICBASW5wdXQoKSBhZG9wdCAgICAgICAgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFuaW1hdGVGaWx0ZXJSZW1vdmFscyAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFuaW1hdGVSZW1vdmluZ1Jvd3MgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFyaWFEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXJpYUxhYmVsICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRvSGVpZ2h0ICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBiYmFyICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogKENvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIGJvZHlDbHMgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGJvcmRlciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGJ1YmJsZUV2ZW50cyAgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY29sbGFwc2libGUgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58UGFuZWxDb2xsYXBzZXJDb25maWd8UGFuZWxDb2xsYXBzZXJPdmVybGF5Q29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbG9yICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBDb2xvcjtcbiAgICBASW5wdXQoKSBjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbnRlbnRFbGVtZW50Q2xzICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbnRleHRNZW51VHJpZ2dlckV2ZW50ICAgICAgICEgOiAnY29udGV4dG1lbnUnfCdjbGljayd8J2RibGNsaWNrJztcbiAgICBASW5wdXQoKSBkYXRhRmllbGQgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRSZWdpb24gICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVzdHJveVN0b3JlICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzYWJsZUdyaWRDb2x1bW5JZFdhcm5pbmcgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzYWJsZUdyaWRSb3dNb2RlbFdhcm5pbmcgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdDtcbiAgICBASW5wdXQoKSBkcmF3ZXIgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7IHNpZGU/OiAnc3RhcnQnfCdsZWZ0J3wnZW5kJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nLCBzaXplPzogc3RyaW5nfG51bWJlciwgaW5saW5lPzogYm9vbGVhbiwgYXV0b0Nsb3NlPzogYm9vbGVhbnx7IG1vdXNlZG93bj86IGJvb2xlYW58c3RyaW5nLCBmb2N1c291dD86IGJvb2xlYW58c3RyaW5nLCBtb3VzZW91dD86IHN0cmluZyB9LCBhdXRvQ2xvc2VEZWxheT86IG51bWJlciB9O1xuICAgIEBJbnB1dCgpIGVsZW1lbnRBdHRyaWJ1dGVzICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD47XG4gICAgQElucHV0KCkgZW5hYmxlU3RpY2t5ICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZW5hYmxlVGV4dFNlbGVjdGlvbiAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZmlsbExhc3RDb2x1bW4gICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZml4ZWRSb3dIZWlnaHQgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZm9vdGVyICAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxzdHJpbmc7XG4gICAgQElucHV0KCkgZm9ybXVsYVByb3ZpZGVycyAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEZvcm11bGFQcm92aWRlckNvbmZpZz47XG4gICAgQElucHV0KCkgZnVsbFJvd1JlZnJlc2ggICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZ2V0Um93SGVpZ2h0ICAgICAgICAgICAgICAgICAgISA6ICgpID0+IG51bWJlcjtcbiAgICBASW5wdXQoKSBoZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfGJvb2xlYW58UGFuZWxIZWFkZXI7XG4gICAgQElucHV0KCkgaGlkZUhvcml6b250YWxTY3JvbGxiYXIgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaG92ZXJDbHMgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpY29uICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfERvbUNvbmZpZztcbiAgICBASW5wdXQoKSBpZ25vcmVQYXJlbnRSZWFkT25seSAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsaXN0ZW5lcnMgICAgICAgICAgICAgICAgICAgICAhIDogVHJlZUdyaWRMaXN0ZW5lcnM7XG4gICAgQElucHV0KCkgbG9hZE1hc2sgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xNYXNrQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgbG9hZE1hc2tEZWZhdWx0cyAgICAgICAgICAgICAgISA6IE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbG9hZE1hc2tFcnJvciAgICAgICAgICAgICAgICAgISA6IE1hc2tDb25maWd8TWFza3xib29sZWFuO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIG1hc2tEZWZhdWx0cyAgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1hc2tlZCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1vbml0b3JSZXNpemUgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIG92ZXJmbG93VHdpbkNvbmZpZyAgICAgICAgICAgICEgOiBPdmVyZmxvd1R3aW5Db25maWd8bnVsbDtcbiAgICBASW5wdXQoKSBwbHVnaW5zICAgICAgICAgICAgICAgICAgICAgICAhIDogSW5zdGFuY2VQbHVnaW5bXXxJbnN0YW5jZVBsdWdpbjtcbiAgICBASW5wdXQoKSBwcmVzZXJ2ZUZvY3VzT25EYXRhc2V0Q2hhbmdlICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZSAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZWxheVN0b3JlRXZlbnRzICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZXNpemFibGUgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7IG1pbldpZHRoPzogbnVtYmVyLCBtYXhXaWR0aD86IG51bWJlciwgbWluSGVpZ2h0PzogbnVtYmVyLCBtYXhIZWlnaHQ/OiBudW1iZXIsIGhhbmRsZXM/OiB7IHRvcFN0YXJ0PzogYm9vbGVhbiwgdG9wPzogYm9vbGVhbiwgdG9wRW5kPzogYm9vbGVhbiwgZW5kPzogYm9vbGVhbiwgYm90dG9tRW5kPzogYm9vbGVhbiwgYm90dG9tPzogYm9vbGVhbiwgYm90dG9tU3RhcnQ/OiBib29sZWFuLCBzdGFydD86IGJvb2xlYW4gfSB9O1xuICAgIEBJbnB1dCgpIHJlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXIgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlc3BvbnNpdmVMZXZlbHMgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXJ8c3RyaW5nfFJlc3BvbnNpdmVMZXZlbENvbmZpZz47XG4gICAgQElucHV0KCkgcmlwcGxlICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIHJvbGUgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcm9vdEVsZW1lbnQgICAgICAgICAgICAgICAgICAgISA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnQ7XG4gICAgQElucHV0KCkgc2Nyb2xsZXJDbGFzcyAgICAgICAgICAgICAgICAgISA6IHR5cGVvZiBTY3JvbGxlcjtcbiAgICBASW5wdXQoKSBzY3JvbGxNYW5hZ2VyICAgICAgICAgICAgICAgICAhIDogU2Nyb2xsTWFuYWdlckNvbmZpZ3xTY3JvbGxNYW5hZ2VyO1xuICAgIEBJbnB1dCgpIHNob3dEaXJ0eSAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHsgZHVyaW5nRWRpdDogYm9vbGVhbiwgbmV3UmVjb3JkOiBib29sZWFuIH07XG4gICAgQElucHV0KCkgc3RhdGVmdWwgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlZnVsRXZlbnRzICAgICAgICAgICAgICAgICEgOiBvYmplY3R8c3RyaW5nW107XG4gICAgQElucHV0KCkgc3RhdGVQcm92aWRlciAgICAgICAgICAgICAgICAgISA6IFN0YXRlUHJvdmlkZXI7XG4gICAgQElucHV0KCkgc3RyaXBzICAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIENvbnRhaW5lckl0ZW1Db25maWc+O1xuICAgIEBJbnB1dCgpIHN1YkdyaWRDb25maWdzICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBTdWJHcmlkQ29uZmlnPjtcbiAgICBASW5wdXQoKSBzeW5jTWFzayAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfE1hc2tDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB0YWIgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxUYWJDb25maWc7XG4gICAgQElucHV0KCkgdGFiQmFySXRlbXMgICAgICAgICAgICAgICAgICAgISA6IFRvb2xiYXJJdGVtc1tdfFdpZGdldFtdO1xuICAgIEBJbnB1dCgpIHRiYXIgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoQ29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICd0cmVlZ3JpZCc7XG4gICAgQElucHV0KCkgdWkgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICdwbGFpbid8J3Rvb2xiYXInfHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgd2VpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIENvbmZpZ3MgYW5kIHByb3BlcnRpZXNcbiAgICBASW5wdXQoKSBhbGlnblNlbGYgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhbmltYXRlVHJlZU5vZGVUb2dnbGUgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXBwZW5kVG8gICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgY2FsbE9uRnVuY3Rpb25zICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjZWxsRWxsaXBzaXMgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2xzICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjb2x1bW4gICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBjb2x1bW5MaW5lcyAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sdW1ucyAgICAgICAgICAgICAgICAgICAgICEgOiBDb2x1bW5TdG9yZXxHcmlkQ29sdW1uQ29uZmlnW118Q29sdW1uU3RvcmVDb25maWc7XG4gICAgQElucHV0KCkgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3RbXXxNb2RlbFtdfE1vZGVsQ29uZmlnW107XG4gICAgQElucHV0KCkgZGF0YXNldCAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8UmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58J2luZXJ0JztcbiAgICBASW5wdXQoKSBlbXB0eVRleHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xFbXB0eVRleHREb21Db25maWc7XG4gICAgQElucHV0KCkgZW5hYmxlVW5kb1JlZG9LZXlzICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGV4dHJhRGF0YSAgICAgICAgICAgICAgICAgICAhIDogYW55O1xuICAgIEBJbnB1dCgpIGZsZXggICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoZWlnaHQgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGlkZGVuICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVGb290ZXJzICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWRlSGVhZGVycyAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaW5wdXRGaWVsZEFsaWduICAgICAgICAgICAgICEgOiAnc3RhcnQnfCdlbmQnO1xuICAgIEBJbnB1dCgpIGluc2VydEJlZm9yZSAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEZpcnN0ICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGtleU1hcCAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPjtcbiAgICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uICAgICAgICAgICAgICAgISA6ICdiZWZvcmUnfCdhYm92ZSd8J2FsaWduLWJlZm9yZSd8J2F1dG8nfG51bGw7XG4gICAgQElucHV0KCkgbGFiZWxXaWR0aCAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8bnVsbDtcbiAgICBASW5wdXQoKSBsb25nUHJlc3NUaW1lICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXJnaW4gICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4SGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1heFdpZHRoICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5IZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluV2lkdGggICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIHByZXNlcnZlU2Nyb2xsICAgICAgICAgICAgICAhIDogUHJlc2VydmVTY3JvbGxPcHRpb25zfGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVhZE9ubHkgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbmRpdGlvbiAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfFJlY29yZDxzdHJpbmcsIHN0cmluZz58bnVsbDtcbiAgICBASW5wdXQoKSByb3dIZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSByb3dMaW5lcyAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcnRsICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNjcm9sbGFibGUgICAgICAgICAgICAgICAgICAhIDogU2Nyb2xsZXJ8Ym9vbGVhbnxTY3JvbGxlckNvbmZpZztcbiAgICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlICAgICAgICAgICAgICAgISA6IEdyaWRTZWxlY3Rpb25Nb2RlO1xuICAgIEBJbnB1dCgpIHNwYW4gICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHN0YXRlSWQgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bGw7XG4gICAgQElucHV0KCkgc3RhdGVTZXR0aW5ncyAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIHJlc3RvcmVVbmNvbmZpZ3VyZWRDb2x1bW5zPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgc3RvcmUgICAgICAgICAgICAgICAgICAgICAgICEgOiBTdG9yZXxTdG9yZUNvbmZpZ3xBamF4U3RvcmV8QWpheFN0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRpdGxlICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRvb2xzICAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgVG9vbHxUb29sQ29uZmlnPnxudWxsfFJlY29yZDxzdHJpbmcsIFRvb2w+fFJlY29yZDxzdHJpbmcsIFRvb2xDb25maWc+O1xuICAgIEBJbnB1dCgpIHRyYW5zaXRpb24gICAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBpbnNlcnRSZWNvcmQ/OiBib29sZWFuXG4gICAgICAgIHJlbW92ZVJlY29yZD86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlQ29sdW1uPzogYm9vbGVhblxuICAgICAgICBleHBhbmRDb2xsYXBzZUNvbHVtbj86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlUmVnaW9uPzogYm9vbGVhblxuICAgICAgICB0b2dnbGVUcmVlTm9kZT86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlR3JvdXA/OiBib29sZWFuXG4gICAgICAgIGZpbHRlclJlbW92YWw/OiBib29sZWFuXG4gICAgfTtcbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uRHVyYXRpb24gICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9ubHlcbiAgICBASW5wdXQoKSBhdXRvVXBkYXRlUmVjb3JkICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNlbnRlcmVkICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBvbmNlPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgb3JpZ2luYWxTdG9yZSAgICAhIDogU3RvcmU7XG4gICAgQElucHV0KCkgcGFyZW50ICAgICAgICAgICAhIDogV2lkZ2V0O1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ2VsbCAgICAgISA6IEdyaWRMb2NhdGlvbnxHcmlkTG9jYXRpb25Db25maWc7XG4gICAgQElucHV0KCkgc2VsZWN0ZWRDZWxscyAgICAhIDogR3JpZExvY2F0aW9uW118R3JpZExvY2F0aW9uQ29uZmlnW107XG4gICAgQElucHV0KCkgc2VsZWN0ZWRSZWNvcmQgICAhIDogTW9kZWw7XG4gICAgQElucHV0KCkgc2VsZWN0ZWRSZWNvcmRzICAhIDogTW9kZWxbXXxudW1iZXJbXTtcbiAgICBASW5wdXQoKSBzZWxlY3RlZFJvd3MgICAgICEgOiBNb2RlbFtdfG51bWJlcltdO1xuICAgIEBJbnB1dCgpIHN0YXRlICAgICAgICAgICAgISA6IEdyaWRTdGF0ZUluZm87XG4gICAgQElucHV0KCkgdG9vbHRpcCAgICAgICAgICAhIDogc3RyaW5nfFRvb2x0aXBDb25maWc7XG5cbiAgICAvLyBGZWF0dXJlc1xuICAgIEBJbnB1dCgpIGFpRmVhdHVyZSAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xBSXxBSUNvbmZpZztcbiAgICBASW5wdXQoKSBhaUZpbHRlckZlYXR1cmUgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8QUlGaWx0ZXJ8QUlGaWx0ZXJDb25maWc7XG4gICAgQElucHV0KCkgY2VsbENvcHlQYXN0ZUZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxDb3B5UGFzdGV8Q2VsbENvcHlQYXN0ZUNvbmZpZztcbiAgICBASW5wdXQoKSBjZWxsRWRpdEZlYXR1cmUgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbEVkaXR8Q2VsbEVkaXRDb25maWc7XG4gICAgQElucHV0KCkgY2VsbE1lbnVGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxNZW51fENlbGxNZW51Q29uZmlnO1xuICAgIEBJbnB1dCgpIGNlbGxUb29sdGlwRmVhdHVyZSAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsVG9vbHRpcHxDZWxsVG9vbHRpcENvbmZpZztcbiAgICBASW5wdXQoKSBjaGFydHNGZWF0dXJlICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2hhcnRzfENoYXJ0c0NvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5BdXRvV2lkdGhGZWF0dXJlICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uQXV0b1dpZHRofENvbHVtbkF1dG9XaWR0aENvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5EcmFnVG9vbGJhckZlYXR1cmUgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uRHJhZ1Rvb2xiYXJ8Q29sdW1uRHJhZ1Rvb2xiYXJDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUGlja2VyRmVhdHVyZSAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblBpY2tlcnxDb2x1bW5QaWNrZXJDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUmVuYW1lRmVhdHVyZSAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlbmFtZXxDb2x1bW5SZW5hbWVDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUmVvcmRlckZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlb3JkZXJ8Q29sdW1uUmVvcmRlckNvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5SZXNpemVGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUmVzaXplfENvbHVtblJlc2l6ZUNvbmZpZztcbiAgICBASW5wdXQoKSBleGNlbEV4cG9ydGVyRmVhdHVyZSAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RXhjZWxFeHBvcnRlcnxFeGNlbEV4cG9ydGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbGVEcm9wRmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWxlRHJvcHxGaWxlRHJvcENvbmZpZztcbiAgICBASW5wdXQoKSBmaWxsSGFuZGxlRmVhdHVyZSAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsbEhhbmRsZXxGaWxsSGFuZGxlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbHRlckZlYXR1cmUgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWx0ZXJ8RmlsdGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbHRlckJhckZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWx0ZXJCYXJ8RmlsdGVyQmFyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGdyb3VwRmVhdHVyZSAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcm91cHxHcm91cENvbmZpZztcbiAgICBASW5wdXQoKSBncm91cFN1bW1hcnlGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8R3JvdXBTdW1tYXJ5fEdyb3VwU3VtbWFyeUNvbmZpZztcbiAgICBASW5wdXQoKSBoZWFkZXJNZW51RmVhdHVyZSAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8SGVhZGVyTWVudXxIZWFkZXJNZW51Q29uZmlnO1xuICAgIEBJbnB1dCgpIGxvY2tSb3dzRmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xMb2NrUm93c3xMb2NrUm93c0NvbmZpZztcbiAgICBASW5wdXQoKSBtZXJnZUNlbGxzRmVhdHVyZSAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TWVyZ2VDZWxsc3xNZXJnZUNlbGxzQ29uZmlnO1xuICAgIEBJbnB1dCgpIHBkZkV4cG9ydEZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQZGZFeHBvcnR8UGRmRXhwb3J0Q29uZmlnO1xuICAgIEBJbnB1dCgpIHBpbkNvbHVtbnNGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQaW5Db2x1bW5zfFBpbkNvbHVtbnNDb25maWc7XG4gICAgQElucHV0KCkgcHJpbnRGZWF0dXJlICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFByaW50fFByaW50Q29uZmlnO1xuICAgIEBJbnB1dCgpIHF1aWNrRmluZEZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xRdWlja0ZpbmR8UXVpY2tGaW5kQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJlZ2lvblJlc2l6ZUZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSZWdpb25SZXNpemV8UmVnaW9uUmVzaXplQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJvd0NvcHlQYXN0ZUZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dDb3B5UGFzdGV8Um93Q29weVBhc3RlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJvd0VkaXRGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dFZGl0fFJvd0VkaXRDb25maWc7XG4gICAgQElucHV0KCkgcm93RXhwYW5kZXJGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0V4cGFuZGVyfFJvd0V4cGFuZGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJvd1Jlb3JkZXJGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dSZW9yZGVyfFJvd1Jlb3JkZXJDb25maWc7XG4gICAgQElucHV0KCkgcm93UmVzaXplRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd1Jlc2l6ZXxSb3dSZXNpemVDb25maWc7XG4gICAgQElucHV0KCkgc2VhcmNoRmVhdHVyZSAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNlYXJjaHxTZWFyY2hDb25maWc7XG4gICAgQElucHV0KCkgc29ydEZlYXR1cmUgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNvcnR8U29ydENvbmZpZztcbiAgICBASW5wdXQoKSBzcGxpdEZlYXR1cmUgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3BsaXR8U3BsaXRDb25maWc7XG4gICAgQElucHV0KCkgc3RpY2t5Q2VsbHNGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFN0aWNreUNlbGxzfFN0aWNreUNlbGxzQ29uZmlnO1xuICAgIEBJbnB1dCgpIHN0cmlwZUZlYXR1cmUgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdHJpcGV8U3RyaXBlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHN1bW1hcnlGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdW1tYXJ5fFN1bW1hcnlDb25maWc7XG4gICAgQElucHV0KCkgdHJlZUZlYXR1cmUgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWV8VHJlZUNvbmZpZztcbiAgICBASW5wdXQoKSB0cmVlR3JvdXBGZWF0dXJlICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VHJlZUdyb3VwfFRyZWVHcm91cENvbmZpZztcblxuICAgIC8vIEV2ZW50cyBlbWl0dGVyc1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIGNlbGwgZWRpdGluZyBpcyBjYW5jZWxlZCwgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBjYW5jZWxsYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbENlbGxFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBHcmlkTG9jYXRpb24gfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgcm93IGVkaXRpbmcgaXMgY2FuY2VsZWQsIHJldHVybiBmYWxzZSB0byBzaWduYWwgdGhhdCB0aGUgdmFsdWUgaXMgaW52YWxpZCBhbmQgZWRpdGluZyBzaG91bGQgbm90IGJlIGZpbmFsaXplZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNldmVudC1iZWZvcmVDYW5jZWxSb3dFZGl0KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRhcmdldCBncmlkXG4gICAgICogQHBhcmFtIHtSb3dFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbFJvd0VkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBSb3dFZGl0b3JDb250ZXh0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBlZGl0aW5nIHN0YXJ0cywgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBlZGl0aW5nXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtDZWxsRWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDZWxsRWRpdFN0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGRlbGV0aW5nIGEgcmFuZ2Ugb2Ygc2VsZWN0ZWQgY2VsbCB2YWx1ZXMgYnkgcHJlc3NpbmcgPGtiZD5CYWNrc3BhY2U8L2tiZD4gb3IgPGtiZD5EZWxldGU8L2tiZD5cbiAgICAgKiBidXR0b25zIHdoaWxlIFthdXRvRWRpdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsRWRpdCNjb25maWctYXV0b0VkaXQpIGlzIHNldCB0byBgdHJ1ZWAuIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgZWRpdGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0geyhHcmlkLnV0aWwuR3JpZExvY2F0aW9ufENvcmUuZGF0YS5Nb2RlbClbXX0gZXZlbnQuZ3JpZFNlbGVjdGlvbiBBbiBhcnJheSBvZiBjZWxsIHNlbGVjdG9ycyBvciByZWNvcmRzIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZhbHVlcyBkZWxldGVkICh0aGUgcmVjb3JkcyB0aGVtc2VsdmVzIHdpbGwgbm90IGdldCBkZWxldGVkLCBvbmx5IHZpc2libGUgY29sdW1uIHZhbHVlcykuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2VsbFJhbmdlRGVsZXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBncmlkU2VsZWN0aW9uOiAoR3JpZExvY2F0aW9ufE1vZGVsKVtdIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGZvciBlYWNoIHNlbGVjdGVkIHJlY29yZCBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGVkaXRpbmcgYSByYW5nZSBvZiBzZWxlY3RlZCBjZWxsIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIEN1cnJlbnQgc2VsZWN0ZWQgcmVjb3JkIGZyb20gdGhlIHJhbmdlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmZpZWxkIFRoZSBmaWVsZCBiZWluZyBjaGFuZ2VkXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50LnZhbHVlIFRoZSB2YWx1ZSBiZWluZyBzZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDZWxsUmFuZ2VFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCwgZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBiZWZvcmUgYSBwYXJlbnQgY29sdW1uIGlzIGNvbGxhcHNlZCBvciBleHBhbmRlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtblxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2VkIGB0cnVlYCBpZiB0aGUgY29sdW1uIGlzIGJlaW5nIGNvbGxhcHNlZCwgYGZhbHNlYCBpZiBleHBhbmRlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvbHVtbkNvbGxhcHNlVG9nZ2xlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29sdW1uOiBDb2x1bW4sIGNvbGxhcHNlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBwcmlvciB0byBzdGFydGluZyBhIGNvbHVtbiBkcmFnIGdlc3R1cmUuIFRoZSBkcmFnIGlzIGNhbmNlbGVkIGlmIGEgbGlzdGVuZXIgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgZHJhZ2dlZCBjb2x1bW4uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ29sdW1uRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZXZlbnQ6IEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGNvbHVtbiBpcyBkcm9wcGVkLCBhbmQgeW91IGNhbiByZXR1cm4gZmFsc2UgZnJvbSBhIGxpc3RlbmVyIHRvIGFib3J0IHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuaW5zZXJ0QmVmb3JlIFRoZSBjb2x1bW4gYmVmb3JlIHdoaWNoIHRoZSBkcmFnZ2VkIGNvbHVtbiB3aWxsIGJlIGluc2VydGVkLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5uZXdQYXJlbnQgVGhlIG5ldyBwYXJlbnQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5yZWdpb24gVGhlIHJlZ2lvbiB3aGVyZSB0aGUgY29sdW1uIHdhcyBkcm9wcGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvbHVtbkRyb3BGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGluc2VydEJlZm9yZTogQ29sdW1uLCBuZXdQYXJlbnQ6IENvbHVtbiwgZXZlbnQ6IEV2ZW50LCByZWdpb246IHN0cmluZyB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHByaW9yIHRvIHN0YXJ0aW5nIGEgY29sdW1uIHJlc2l6ZSBnZXN0dXJlLiBUaGUgcmVzaXplIGlzIGNhbmNlbGVkIGlmIGEgbGlzdGVuZXIgcmV0dXJuc1xuICAgICAqIGBmYWxzZWAuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtblxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ29sdW1uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgYSBjb3B5IGFjdGlvbiBpcyBwZXJmb3JtZWQsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5jZWxscyBUaGUgY2VsbHMgYWJvdXQgdG8gYmUgY29waWVkIG9yIGN1dFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5kYXRhIFRoZSBzdHJpbmcgZGF0YSBhYm91dCB0byBiZSBjb3BpZWQgb3IgY3V0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5pc0N1dCBgdHJ1ZWAgaWYgdGhpcyBpcyBhIGN1dCBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIGJlZm9yZUNvcHkgZXZlbnRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ29weTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY2VsbHM6IEdyaWRMb2NhdGlvbltdLCBkYXRhOiBzdHJpbmcsIGlzQ3V0OiBib29sZWFuLCBlbnRpdHlOYW1lOiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIENTViBleHBvcnQgc3RhcnRzLiBSZXR1cm4gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGV4cG9ydC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFeHBvcnRDb25maWd9IGV2ZW50LmNvbmZpZyBFeHBvcnQgY29uZmlnXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW5bXX0gZXZlbnQuY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW5zIHRvIGV4cG9ydFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnJvd3MgQW4gYXJyYXkgb2YgcmVjb3JkcyB0byBleHBvcnRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQubGluZURlbGltaXRlciBUaGUgQ1NWIGRlbGltaXRlciB0byBzZXBhcmF0ZSBsaW5lc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5jb2x1bW5EZWxpbWl0ZXIgVGhlIENTViBkZWxpbWl0ZXIgdG8gc2VwYXJhdGUgdmFsdWVzIG9uIG9uZSBsaW5lXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ1NWRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY29uZmlnOiBFeHBvcnRDb25maWcsIGNvbHVtbnM6IENvbHVtbltdLCByb3dzOiBNb2RlbFtdLCBsaW5lRGVsaW1pdGVyOiBzdHJpbmcsIGNvbHVtbkRlbGltaXRlcjogc3RyaW5nIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBFeGNlbCBleHBvcnQgc3RhcnRzLiBSZXR1cm4gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGV4cG9ydC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFeHBvcnRDb25maWd9IGV2ZW50LmNvbmZpZyBFeHBvcnQgY29uZmlnXG4gICAgICogQHBhcmFtIHtYTFNDb2x1bW5bXX0gZXZlbnQuY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW5zIHRvIGV4cG9ydFxuICAgICAqIEBwYXJhbSB7YW55W11bXX0gZXZlbnQucm93cyBBbiBhcnJheSBvZiByZWNvcmRzIHRvIGV4cG9ydFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV4Y2VsRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY29uZmlnOiBFeHBvcnRDb25maWcsIGNvbHVtbnM6IFhMU0NvbHVtbltdLCByb3dzOiBhbnlbXSB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgZHJhZ2dpbmcgb2YgdGhlIEZpbGxIYW5kbGUgc3RhcnRzLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBkcmFnIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5jZWxsIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2x1bW4gLyByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSByYXcgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRmlsbEhhbmRsZURyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNlbGw6IEdyaWRMb2NhdGlvbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgY2VsbCBlZGl0aW5nIGlzIGZpbmlzaGVkLCByZXR1cm4gZmFsc2UgdG8gc2lnbmFsIHRoYXQgdGhlIHZhbHVlIGlzIGludmFsaWQgYW5kIGVkaXRpbmcgc2hvdWxkIG5vdCBiZSBmaW5hbGl6ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge0NlbGxFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUZpbmlzaENlbGxFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIHJvdyBlZGl0aW5nIGlzIGZpbmlzaGVkLCByZXR1cm4gZmFsc2UgdG8gc2lnbmFsIHRoYXQgdGhlIHZhbHVlIGlzIGludmFsaWQgYW5kIGVkaXRpbmcgc2hvdWxkIG5vdCBiZSBmaW5hbGl6ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjZXZlbnQtYmVmb3JlRmluaXNoUm93RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUYXJnZXQgZ3JpZFxuICAgICAqIEBwYXJhbSB7Um93RWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVGaW5pc2hSb3dFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgaGlkZGVuLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBoaWRkZW4uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgYSBwYXN0ZSBhY3Rpb24gaXMgcGVyZm9ybWVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY2xpcGJvYXJkRGF0YSBUaGUgY2xpcGJvYXJkRGF0YSBhYm91dCB0byBiZSBwYXN0ZWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LnRhcmdldENlbGwgVGhlIGNlbGwgZnJvbSB3aGljaCB0aGUgcGFzdGUgd2lsbCBiZSBzdGFydGVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmVudGl0eU5hbWUgJ2NlbGwnIHRvIGRpc3Rpbmd1aXNoIHRoaXMgZXZlbnQgZnJvbSBvdGhlciBiZWZvcmVQYXN0ZSBldmVudHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQudGV4dCBUaGUgcmF3IHRleHQgZnJvbSBjbGlwYm9hcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVQYXN0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY2xpcGJvYXJkRGF0YTogc3RyaW5nLCB0YXJnZXRDZWxsOiBHcmlkTG9jYXRpb24sIGVudGl0eU5hbWU6IHN0cmluZywgdGV4dDogc3RyaW5nIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBleHBvcnQgc3RhcnRlZC4gUmV0dXJuIGBmYWxzZWAgdG8gY2FuY2VsIHRoZSBleHBvcnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7UGRmRXhwb3J0Q29uZmlnfSBldmVudC5jb25maWcgRXhwb3J0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVBkZkV4cG9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNvbmZpZzogUGRmRXhwb3J0Q29uZmlnIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBhIHJvdyBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQucm93LlJvd30gZXZlbnQucm93IFRoZSByb3cgYWJvdXQgdG8gYmUgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgZm9yIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQucmVjb3JkSW5kZXggVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVJlbmRlclJvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIHJvdzogUm93LCByZWNvcmQ6IE1vZGVsLCByZWNvcmRJbmRleDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBHcmlkIHJvd3MgYXJlIGFib3V0IHRvIGJlIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhpcyBncmlkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVJlbmRlclJvd3M6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIGJlZm9yZSByb3cgY29sbGFwc2UgaXMgc3RhcnRlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCNldmVudC1iZWZvcmVSb3dDb2xsYXBzZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSb3dDb2xsYXBzZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlY29yZDogTW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIGJlZm9yZSByb3cgZXhwYW5kIGlzIHN0YXJ0ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjZXZlbnQtYmVmb3JlUm93RXhwYW5kKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVJvd0V4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlY29yZDogTW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiBSZXR1cm5pbmcgYGZhbHNlYCBmcm9tIGEgbGlzdGVuZXIgcHJldmVudHMgdGhlIGNoYW5nZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuYWN0aW9uIGAnc2VsZWN0J2AvYCdkZXNlbGVjdCdgXG4gICAgICogQHBhcmFtIHsncm93JywnY2VsbCd9IGV2ZW50Lm1vZGUgYCdyb3cnYC9gJ2NlbGwnYFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmRlc2VsZWN0ZWQgVGhlIHJlY29yZHMgdG8gYmUgZGVzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5zZWxlY3RlZCBUaGUgcmVjb3JkcyB0byBiZSBzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5zZWxlY3Rpb24gVGhlIHJlY29yZHMgaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBiZWZvcmUgYXBwbHlpbmcgYHNlbGVjdGVkYCBhbmQgYGRlc2VsZWN0ZWRgXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LmRlc2VsZWN0ZWRDZWxscyBUaGUgY2VsbHMgdG8gYmUgZGVzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuc2VsZWN0ZWRDZWxscyBUaGUgY2VsbHMgdG8gYmUgc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LmNlbGxTZWxlY3Rpb24gVGhlIGNlbGxzIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgYmVmb3JlIGFwcGx5aW5nIGBzZWxlY3RlZENlbGxzYCBhbmQgYGRlc2VsZWN0ZWRDZWxsc2BcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTZWxlY3Rpb25DaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBhY3Rpb246IHN0cmluZywgbW9kZTogJ3Jvdyd8J2NlbGwnLCBzb3VyY2U6IEdyaWQsIGRlc2VsZWN0ZWQ6IE1vZGVsW10sIHNlbGVjdGVkOiBNb2RlbFtdLCBzZWxlY3Rpb246IE1vZGVsW10sIGRlc2VsZWN0ZWRDZWxsczogR3JpZExvY2F0aW9uW10sIHNlbGVjdGVkQ2VsbHM6IEdyaWRMb2NhdGlvbltdLCBjZWxsU2VsZWN0aW9uOiBHcmlkTG9jYXRpb25bXSB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhpcyBjb250YWluZXIgd2lsbCBsb2FkIHJlY29yZCB2YWx1ZXMgaW50byBpdHMgY2hpbGQgZmllbGRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VcbiAgICAgKiB3YW50IHRvIG1vZGlmeSB0aGUgVUkgYmVmb3JlIGRhdGEgaXMgbG9hZGVkIChlLmcuIHNldCBzb21lIGlucHV0IGZpZWxkIHRvIGJlIHJlYWRvbmx5KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbnRhaW5lcn0gZXZlbnQuc291cmNlIFRoZSBjb250YWluZXJcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTZXRSZWNvcmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBzaG93bi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldCxhbnl9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHNob3duXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0fGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgZWRpdGluZyBzdGFydHMsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgZWRpdGluZ1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7Um93RWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGFydFJvd0VkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGVkaXRvckNvbnRleHQ6IFJvd0VkaXRvckNvbnRleHQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHN0YXRlIGlzIGFwcGxpZWQgdG8gdGhlIHNvdXJjZS4gQWxsb3dzIGVkaXRpbmcgdGhlIHN0YXRlIG9iamVjdCBvciBwcmV2ZW50aW5nIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZFN0YXRlSW5mb30gZXZlbnQuc3RhdGUgU3RhdGUgb2JqZWN0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXRlQXBwbHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogR3JpZFN0YXRlSW5mbyB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgc3RhdGUgaXMgc2F2ZWQgYnkgdGhlIFN0YXRlUHJvdmlkZXIuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWRTdGF0ZUluZm99IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZVNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogR3JpZFN0YXRlSW5mbyB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgZ3JvdXAgaXMgZ29pbmcgdG8gYmUgZXhwYW5kZWQgb3IgY29sbGFwc2VkIHVzaW5nIHRoZSBVSS5cbiAgICAgKiBSZXR1cm5pbmcgYGZhbHNlYCBmcm9tIGEgbGlzdGVuZXIgcHJldmVudHMgdGhlIG9wZXJhdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuZ3JvdXBSZWNvcmQgW0RFUFJFQ0FURURdIFVzZSBgZ3JvdXBSZWNvcmRzYCBwYXJhbSBpbnN0ZWFkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuZ3JvdXBSZWNvcmRzIFRoZSBncm91cCByZWNvcmRzIGJlaW5nIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbGxhcHNlIENvbGxhcHNlZCAodHJ1ZSkgb3IgZXhwYW5kZWQgKGZhbHNlKVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSB1c2VyIGludGVyYWN0aW9uIGV2ZW50IChlZyBhIGBjbGlja2AgZXZlbnQpIGlmIHRoZSB0b2dnbGUgcmVxdWVzdCB3YXMgaW5zdGlnYXRlZCBieSB1c2VyIGludGVyYWN0aW9uLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRvZ2dsZUdyb3VwOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JvdXBSZWNvcmQ6IE1vZGVsLCBncm91cFJlY29yZHM6IE1vZGVsW10sIGNvbGxhcHNlOiBib29sZWFuLCBkb21FdmVudDogRXZlbnQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIGEgcGFyZW50IG5vZGUgcmVjb3JkIHRvZ2dsZXMgaXRzIGNvbGxhcHNlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgYmVpbmcgdG9nZ2xlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbGxhcHNlIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBiZWluZyBjb2xsYXBzZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVG9nZ2xlTm9kZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sbGFwc2U6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGVkaXRpbmcgaXMgY2FuY2VsbGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IEluY2x1ZGVkIGlmIHRoZSBjYW5jZWxsYXRpb24gd2FzIHRyaWdnZXJlZCBieSBhIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhbmNlbENlbGxFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBHcmlkTG9jYXRpb24sIGV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbnkgb3RoZXIgZXZlbnQgaXMgZmlyZWQgZnJvbSB0aGUgb2JqZWN0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2V2ZW50LWNhdGNoQWxsKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ319IGV2ZW50LmV2ZW50IFRoZSBPYmplY3QgdGhhdCBjb250YWlucyBldmVudCBkZXRhaWxzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmV2ZW50LnR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50IHdoaWNoIGlzIGNhdWdodCBieSB0aGUgbGlzdGVuZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DYXRjaEFsbDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIGNsaWNrcyBpbiBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHVzZXIgYWN0aXZhdGVzIGNvbnRleHRtZW51IGluIGEgZ3JpZCBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gdG8gd2hpY2ggdGhlIGNlbGwgYmVsb25nc1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbENvbnRleHRNZW51OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdXNlciBkb3VibGUgY2xpY2tzIGEgZ3JpZCBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gdG8gd2hpY2ggdGhlIGNlbGwgYmVsb25nc1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbERibENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBncmlkIGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhIGNlbGwuXG4gICAgICogQWxsb3dzIG1hbmlwdWxhdGlvbiBvZiB0aGUgaXRlbXMgdG8gc2hvdyBpbiB0aGUgc2FtZSB3YXkgYXMgaW4gdGhlIFtwcm9jZXNzSXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbE1lbnUjY29uZmlnLXByb2Nlc3NJdGVtcykuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjZXZlbnQtY2VsbE1lbnVCZWZvcmVTaG93KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+fSBldmVudC5pdGVtcyBNZW51IGl0ZW0gY29uZmlnc1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTWVudUJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5PiwgY29sdW1uOiBDb2x1bW4sIHJlY29yZDogTW9kZWwgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIGdyaWQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGluIHRoZSBjZWxsIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1lbnVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY29sdW1uOiBDb2x1bW4sIHJlY29yZDogTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBncmlkIGFmdGVyIHRoZSBjb250ZXh0IG1lbnUgaXMgc2hvd24gZm9yIGEgY2VsbC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1lbnVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIGNvbHVtbjogQ29sdW1uLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgZ3JpZCB3aGVuIGEgY2hlY2sgaXRlbSBpcyB0b2dnbGVkIGluIHRoZSBjZWxsIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGVja2VkIENoZWNrZWQgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1lbnVUb2dnbGVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY29sdW1uOiBDb2x1bW4sIHJlY29yZDogTW9kZWwsIGNoZWNrZWQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgaG92ZXJlZCBjZWxsXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIGN1cnJlbnRseSBob3ZlcmVkXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNb3VzZUVudGVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGEgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSBjZWxsIHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gcmVwcmVzZW50aW5nIHRoZSBjZWxsIHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnQgdGhhdCB0aGUgbW91c2UgbGVmdFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTW91c2VMZWF2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZSBvdXQgb2YgYSBncmlkIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiB0byB3aGljaCB0aGUgY2VsbCBiZWxvbmdzXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTW91c2VPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIG1vdmVzIHRoZSBtb3VzZSBvdmVyIGEgZ3JpZCBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gdG8gd2hpY2ggdGhlIGNlbGwgYmVsb25nc1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1vdXNlT3ZlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgUGFuZWwgaXMgY29sbGFwc2VkIHVzaW5nIHRoZSBbY29sbGFwc2libGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpIHNldHRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuUGFuZWx9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbGxhcHNlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBQYW5lbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIGEgcGFyZW50IG5vZGUgcmVjb3JkIGlzIGNvbGxhcHNlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgd2hpY2ggaGFzIGJlZW4gY29sbGFwc2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbGxhcHNlTm9kZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgYSBwYXJlbnQgY29sdW1uIGhhcyBiZWVuIGNvbGxhcHNlZCBvciBleHBhbmRlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiBiZWluZyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZWQgYHRydWVgIGlmIHRoZSBjb2x1bW4gaXMgbm93IGNvbGxhcHNlZCwgYGZhbHNlYCBpZiBleHBhbmRlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtbkNvbGxhcHNlVG9nZ2xlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29sdW1uOiBDb2x1bW4sIGNvbGxhcHNlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIGEgY29sdW1uIGlzIGJlaW5nIGRyYWdnZWQsIGFuZCB5b3UgY2FuIHNldCB0aGUgYHZhbGlkYCBmbGFnIG9uIHRoZSBgY29udGV4dGAgb2JqZWN0XG4gICAgICogdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZHJvcCBwb3NpdGlvbiBpcyB2YWxpZCBvciBub3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuaW5zZXJ0QmVmb3JlIFRoZSBjb2x1bW4gYmVmb3JlIHdoaWNoIHRoZSBkcmFnZ2VkIGNvbHVtbiB3aWxsIGJlIGluc2VydGVkIChpZiBub3QgbGFzdCkuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQudmFsaWQgU2V0IHRoaXMgdG8gYHRydWVgIG9yIGBmYWxzZWAgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZHJvcCBwb3NpdGlvbiBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2x1bW5EcmFnOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgaW5zZXJ0QmVmb3JlOiBDb2x1bW4sIGV2ZW50OiBFdmVudCwgY29udGV4dDogeyB2YWxpZDogYm9vbGVhbiB9IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjb2x1bW4gZHJhZyBnZXN0dXJlIGhhcyBzdGFydGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgZHJhZ2dlZCBjb2x1bW4uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGFsd2F5cyBmaXJlZCBhZnRlciBhIGNvbHVtbiBpcyBkcm9wcGVkLiBUaGUgYHZhbGlkYCBwYXJhbSBpcyBgdHJ1ZWAgaWYgdGhlIG9wZXJhdGlvbiB3YXMgbm90XG4gICAgICogdmV0b2VkIGFuZCB0aGUgY29sdW1uIHdhcyBtb3ZlZCBpbiB0aGUgY29sdW1uIHN0b3JlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgZHJhZ2dlZCBjb2x1bW4uXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50Lmluc2VydEJlZm9yZSBUaGUgY29sdW1uIGJlZm9yZSB3aGljaCB0aGUgZHJhZ2dlZCBjb2x1bW4gd2lsbCBiZSBpbnNlcnRlZC5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQubmV3UGFyZW50IFRoZSBuZXcgcGFyZW50IGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnZhbGlkIGB0cnVlYCBpZiB0aGUgb3BlcmF0aW9uIHdhcyBub3QgdmV0b2VkLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5yZWdpb24gVGhlIHJlZ2lvbiB3aGVyZSB0aGUgY29sdW1uIHdhcyBkcm9wcGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtbkRyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBpbnNlcnRCZWZvcmU6IENvbHVtbiwgbmV3UGFyZW50OiBDb2x1bW4sIHZhbGlkOiBib29sZWFuLCBldmVudDogRXZlbnQsIHJlZ2lvbjogc3RyaW5nIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSByZXNpemUgZ2VzdHVyZSBpcyBjb21wbGV0ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIHJlc2l6ZWQgY29sdW1uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2x1bW5SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGNvbHVtbiByZXNpemUgZ2VzdHVyZSBzdGFydHMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtblxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uUmVzaXplU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyB3aWRnZXQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGluIHRoZSBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIG93bmluZyB3aWRnZXRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbnRleHRNZW51SXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIHdpZGdldCB3aGVuIGEgY2hlY2sgaXRlbSBpcyB0b2dnbGVkIGluIHRoZSBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIG93bmluZyB3aWRnZXRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hlY2tlZCBDaGVja2VkIG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbnRleHRNZW51VG9nZ2xlSXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY2hlY2tlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGFmdGVyIGEgY29weSBhY3Rpb24gaXMgcGVyZm9ybWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5jZWxscyBUaGUgY2VsbHMgYWJvdXQgdG8gYmUgY29waWVkIG9yIGN1dFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5jb3BpZWREYXRhU3RyaW5nIFRoZSBjb25jYXRlbmF0ZWQgZGF0YSBzdHJpbmcgdGhhdCB3YXMgY29waWVkIG9yIGN1dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuaXNDdXQgYHRydWVgIGlmIHRoaXMgd2FzIGEgY3V0IGFjdGlvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5lbnRpdHlOYW1lICdjZWxsJyB0byBkaXN0aW5ndWlzaCB0aGlzIGV2ZW50IGZyb20gb3RoZXIgY29weSBldmVudHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db3B5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjZWxsczogR3JpZExvY2F0aW9uW10sIGNvcGllZERhdGFTdHJpbmc6IHN0cmluZywgaXNDdXQ6IGJvb2xlYW4sIGVudGl0eU5hbWU6IHN0cmluZyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBkYXRhIGluIHRoZSBzdG9yZSBjaGFuZ2VzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2V2ZW50LWRhdGFDaGFuZ2UpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgT3duaW5nIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5TdG9yZX0gZXZlbnQuc3RvcmUgVGhlIG9yaWdpbmF0aW5nIHN0b3JlXG4gICAgICogQHBhcmFtIHsncmVtb3ZlJywncmVtb3ZlQWxsJywnYWRkJywnY2xlYXJjaGFuZ2VzJywnZmlsdGVyJywndXBkYXRlJywnZGF0YXNldCcsJ3JlcGxhY2UnfSBldmVudC5hY3Rpb24gTmFtZSBvZiBhY3Rpb24gd2hpY2ggdHJpZ2dlcmVkIHRoZSBjaGFuZ2UuIE1heSBiZSBvbmUgb2Y6ICAqIGAncmVtb3ZlJ2AgKiBgJ3JlbW92ZUFsbCdgICogYCdhZGQnYCAqIGAnY2xlYXJjaGFuZ2VzJ2AgKiBgJ2ZpbHRlcidgICogYCd1cGRhdGUnYCAqIGAnZGF0YXNldCdgICogYCdyZXBsYWNlJ2BcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIENoYW5nZWQgcmVjb3JkLCBmb3IgYWN0aW9ucyB0aGF0IGFmZmVjdHMgZXhhY3RseSBvbmUgcmVjb3JkIChgJ3VwZGF0ZSdgKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnJlY29yZHMgQ2hhbmdlZCByZWNvcmRzLCBwYXNzZWQgZm9yIGFsbCBhY3Rpb25zIGV4Y2VwdCBgJ3JlbW92ZUFsbCdgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNoYW5nZXMgUGFzc2VkIGZvciB0aGUgYCd1cGRhdGUnYCBhY3Rpb24sIGluZm8gb24gd2hpY2ggcmVjb3JkIGZpZWxkcyBjaGFuZ2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGF0YUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIHN0b3JlOiBTdG9yZSwgYWN0aW9uOiAncmVtb3ZlJ3wncmVtb3ZlQWxsJ3wnYWRkJ3wnY2xlYXJjaGFuZ2VzJ3wnZmlsdGVyJ3wndXBkYXRlJ3wnZGF0YXNldCd8J3JlcGxhY2UnLCByZWNvcmQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdLCBjaGFuZ2VzOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBmaWVsZCBpcyBtdXRhdGVkIGFuZCB0aGUgc3RhdGUgb2YgdGhlIFtoYXNDaGFuZ2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LWhhc0NoYW5nZXMpIHByb3BlcnR5IGNoYW5nZXNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Db250YWluZXJ9IGV2ZW50LnNvdXJjZSBUaGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuZGlydHkgVGhlIGRpcnR5IHN0YXRlIG9mIHRoZSBDb250YWluZXIgLSBgdHJ1ZWAgaWYgdGhlcmUgYXJlIGFueSBmaWVsZHMgd2hpY2ggaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgaW5pdGlhbCBsb2FkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRpcnR5U3RhdGVDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgZGlydHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoaWxlIGRyYWcgc2VsZWN0aW5nLiBVSSB3aWxsIHVwZGF0ZSB3aXRoIGN1cnJlbnQgcmFuZ2UsIGJ1dCB0aGUgY2VsbHMgd2lsbCBub3QgYmUgc2VsZWN0ZWQgdW50aWxcbiAgICAgKiBtb3VzZSB1cC4gVGhpcyBldmVudCBjYW4gYmUgbGlzdGVuZWQgZm9yIHRvIHBlcmZvcm0gYWN0aW9ucyB3aGlsZSBkcmFnIHNlbGVjdGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHcmlkTG9jYXRpb25Db25maWdbXSxHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LnNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGRyYWdnZWQgb3ZlclxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGVkUmVjb3JkcyBUaGUgcmVjb3JkcyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBkcmFnZ2VkIG92ZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EcmFnU2VsZWN0aW5nOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25Db25maWdbXXxHcmlkTG9jYXRpb25bXSwgc2VsZWN0ZWRSZWNvcmRzOiBNb2RlbFtdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIGF2YWlsYWJsZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudCBUaGUgV2lkZ2V0J3MgZWxlbWVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FbGVtZW50Q3JlYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgUGFuZWwgaXMgZXhwYW5kZWQgdXNpbmcgdGhlIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBQYW5lbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgYSBwYXJlbnQgbm9kZSByZWNvcmQgaXMgZXhwYW5kZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHdoaWNoIGhhcyBiZWVuIGV4cGFuZGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV4cGFuZE5vZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBmaWxlIGlzIGRyb3BwZWQgb24gdGhlIHdpZGdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgb3duaW5nIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0RhdGFUcmFuc2Zlckl0ZW19IGV2ZW50LmZpbGUgVGhlIGRyb3BwZWQgZmlsZSBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRHJhZ0V2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsZURyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGZpbGU6IERhdGFUcmFuc2Zlckl0ZW0sIGRvbUV2ZW50OiBEcmFnRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSB0aGUgRmlsbEhhbmRsZSBkcmFnZ2luZyBpcyBmaW5hbGl6ZWQgYW5kIHZhbHVlcyBhcmUgYXBwbGllZCB0byBjZWxscywgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGVcbiAgICAgKiBkcmFnIG9wZXJhdGlvbiBmcm9tIGFwcGx5aW5nIGRhdGEgY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5mcm9tIFRoZSBmcm9tIGNlbGxcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LnRvIFRoZSB0byBjZWxsXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVCZWZvcmVEcmFnRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBmcm9tOiBHcmlkTG9jYXRpb24sIHRvOiBHcmlkTG9jYXRpb24sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hpbGUgZHJhZ2dpbmcgdGhlIEZpbGxIYW5kbGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZnJvbSBUaGUgZnJvbSBjZWxsXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC50byBUaGUgdG8gY2VsbFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxsSGFuZGxlRHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGZyb206IEdyaWRMb2NhdGlvbiwgdG86IEdyaWRMb2NhdGlvbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBGaWxsSGFuZGxlIGRyYWcgb3BlcmF0aW9uIGlzIGFib3J0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsbEhhbmRsZURyYWdBYm9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIGEgRmlsbEhhbmRsZSBkcmFnIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5mcm9tIFRoZSBmcm9tIGNlbGxcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LnRvIFRoZSB0byBjZWxsXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVEcmFnRW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZnJvbTogR3JpZExvY2F0aW9uLCB0bzogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBkcmFnZ2luZyBvZiB0aGUgRmlsbEhhbmRsZSBzdGFydHMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuY2VsbCBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sdW1uIC8gcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjZWxsOiBHcmlkTG9jYXRpb24sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGNlbGwgZWRpdGluZyBpcyBmaW5pc2hlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRhcmdldCBncmlkXG4gICAgICogQHBhcmFtIHtDZWxsRWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaW5pc2hDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIHRoZSByb3cgZWRpdGluZyBpcyBmaW5pc2hlZCwgcmV0dXJuIGZhbHNlIHRvIHNpZ25hbCB0aGF0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGFuZCBlZGl0aW5nIHNob3VsZCBub3QgYmUgZmluYWxpemVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2V2ZW50LWZpbmlzaFJvd0VkaXQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge1Jvd0VkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmluaXNoUm93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IFJvd0VkaXRvckNvbnRleHQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGVudGVycyB0aGlzIFdpZGdldC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmZyb21FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudG9FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuZnJvbVdpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRvV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuYmFja3dhcmRzIGB0cnVlYCBpZiB0aGUgYHRvRWxlbWVudGAgaXMgYmVmb3JlIHRoZSBgZnJvbUVsZW1lbnRgIGluIGRvY3VtZW50IG9yZGVyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzSW46IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBleGl0cyB0aGlzIFdpZGdldCdzIG93bmVyc2hpcCB0cmVlLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGEgYGJsdXJgIGV2ZW50LlxuICAgICAqIGZvY3VzIG1vdmluZyBmcm9tIHdpdGhpbiB0aGlzIFdpZGdldCdzIG93bmVyc2hpcCB0cmVlLCBldmVuIGlmIHRoZXJlIGFyZSBmbG9hdGluZyB3aWRnZXRzXG4gICAgICogd2lsbCBub3QgdHJpZ2dlciB0aGlzIGV2ZW50LiBUaGlzIGlzIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyB3aWRnZXQgY29tcGxldGVseS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmZyb21FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudG9FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuZnJvbVdpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRvV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuYmFja3dhcmRzIGB0cnVlYCBpZiB0aGUgYHRvRWxlbWVudGAgaXMgYmVmb3JlIHRoZSBgZnJvbUVsZW1lbnRgIGluIGRvY3VtZW50IG9yZGVyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBkcmFnZ2luZyBzdGFydHMsIHJldHVybiBmYWxzZSB0byBwcmV2ZW50IHRoZSBkcmFnIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50LFRvdWNoRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0JlZm9yZURyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgcmVjb3JkczogTW9kZWxbXSB9LCBldmVudDogTW91c2VFdmVudHxUb3VjaEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSB0aGUgcm93IGRyb3Agb3BlcmF0aW9uIGlzIGZpbmFsaXplZC4gWW91IGNhbiByZXR1cm4gZmFsc2UgdG8gYWJvcnQgdGhlIGRyb3Agb3BlcmF0aW9uLCBvciBhXG4gICAgICogUHJvbWlzZSB5aWVsZGluZyBgdHJ1ZWAgLyBgZmFsc2VgIHdoaWNoIGFsbG93cyBmb3IgYXN5bmNocm9ub3VzIGFib3J0IChlLmcuIGZpcnN0IHNob3cgdXNlciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cpLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQudmFsaWQgU2V0IHRoaXMgdG8gdHJ1ZSBvciBmYWxzZSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIGlzIHZhbGlkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQuaW5zZXJ0QmVmb3JlIFRoZSByZWNvcmQgdG8gaW5zZXJ0IGJlZm9yZSAoYG51bGxgIGlmIGluc2VydGluZyBhdCBsYXN0IHBvc2l0aW9uIG9mIGEgcGFyZW50IG5vZGUpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQucGFyZW50IFRoZSBwYXJlbnQgcmVjb3JkIG9mIHRoZSBjdXJyZW50IGRyb3AgcG9zaXRpb24gKG9ubHkgYXBwbGljYWJsZSBmb3IgdHJlZXMpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtSZWNvcmRQb3NpdGlvbkNvbnRleHRbXX0gZXZlbnQuY29udGV4dC5vbGRQb3NpdGlvbkNvbnRleHQgQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91cyB0cmVlIHBvc2l0aW9uLiBPYmplY3RzIGNvbnRhaW4gdGhlIGByZWNvcmRgLCBhbmQgaXRzIG9yaWdpbmFsIGBwYXJlbnRJbmRleGAgYW5kIGBwYXJlbnRJZGAgdmFsdWVzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dCZWZvcmVEcm9wRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHZhbGlkOiBib29sZWFuLCBpbnNlcnRCZWZvcmU6IE1vZGVsLCBwYXJlbnQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdLCBvbGRQb3NpdGlvbkNvbnRleHQ6IFJlY29yZFBvc2l0aW9uQ29udGV4dFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hpbGUgdGhlIHJvdyBpcyBiZWluZyBkcmFnZ2VkLCBpbiB0aGUgbGlzdGVuZXIgZnVuY3Rpb24geW91IGhhdmUgYWNjZXNzIHRvIGBjb250ZXh0Lmluc2VydEJlZm9yZWAgYSBncmlkIC9cbiAgICAgKiB0cmVlIHJlY29yZCwgYW5kIGFkZGl0aW9uYWxseSBgY29udGV4dC5wYXJlbnRgIChhIFRyZWVOb2RlKSBmb3IgdHJlZXMuIFlvdSBjYW4gc2lnbmFsIHRoYXQgdGhlIGRyb3AgcG9zaXRpb24gaXNcbiAgICAgKiB2YWxpZCBvciBpbnZhbGlkIGJ5IHNldHRpbmcgYGNvbnRleHQudmFsaWQgPSBmYWxzZTtgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC52YWxpZCBTZXQgdGhpcyB0byB0cnVlIG9yIGZhbHNlIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRyb3AgcG9zaXRpb24gaXMgdmFsaWQuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQuaW5zZXJ0QmVmb3JlIFRoZSByZWNvcmQgdG8gaW5zZXJ0IGJlZm9yZSAoYG51bGxgIGlmIGluc2VydGluZyBhdCBsYXN0IHBvc2l0aW9uIG9mIGEgcGFyZW50IG5vZGUpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQucGFyZW50IFRoZSBwYXJlbnQgcmVjb3JkIG9mIHRoZSBjdXJyZW50IGRyb3AgcG9zaXRpb24gKG9ubHkgYXBwbGljYWJsZSBmb3IgdHJlZXMpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dEcmFnOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyB2YWxpZDogYm9vbGVhbiwgaW5zZXJ0QmVmb3JlOiBNb2RlbCwgcGFyZW50OiBNb2RlbCwgcmVjb3JkczogTW9kZWxbXSB9LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHJvdyBkcmFnIG9wZXJhdGlvbiBpcyBhYm9ydGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93RHJhZ0Fib3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyByZWNvcmRzOiBNb2RlbFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGRyYWdnaW5nIHN0YXJ0cy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50LFRvdWNoRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0RyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgcmVjb3JkczogTW9kZWxbXSB9LCBldmVudDogTW91c2VFdmVudHxUb3VjaEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciB0aGUgcm93IGRyb3Agb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQsIHJlZ2FyZGxlc3Mgb2YgdmFsaWRpdHlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LnZhbGlkIHRydWUgb3IgZmFsc2UgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGRyb3AgcG9zaXRpb24gd2FzIHZhbGlkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQuaW5zZXJ0QmVmb3JlIFRoZSByZWNvcmQgdG8gaW5zZXJ0IGJlZm9yZSAoYG51bGxgIGlmIGluc2VydGluZyBhdCBsYXN0IHBvc2l0aW9uIG9mIGEgcGFyZW50IG5vZGUpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQucGFyZW50IFRoZSBwYXJlbnQgcmVjb3JkIG9mIHRoZSBjdXJyZW50IGRyb3AgcG9zaXRpb24gKG9ubHkgYXBwbGljYWJsZSBmb3IgdHJlZXMpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtSZWNvcmRQb3NpdGlvbkNvbnRleHRbXX0gZXZlbnQuY29udGV4dC5vbGRQb3NpdGlvbkNvbnRleHQgQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91cyB0cmVlIHBvc2l0aW9uLiBPYmplY3RzIGNvbnRhaW4gdGhlIHJlY29yZCwgYW5kIGl0cyBvcmlnaW5hbCBgcGFyZW50SW5kZXhgIGFuZCBgcGFyZW50SWRgIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93RHJvcDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgdmFsaWQ6IGJvb2xlYW4sIGluc2VydEJlZm9yZTogTW9kZWwsIHBhcmVudDogTW9kZWwsIHJlY29yZHM6IE1vZGVsW10sIG9sZFBvc2l0aW9uQ29udGV4dDogUmVjb3JkUG9zaXRpb25Db250ZXh0W10gfSwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBncmlkIGhlYWRlciBpcyBjbGlja2VkIG9uLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2V2ZW50LWhlYWRlckNsaWNrKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgdHJpZ2dlcmluZyBET00gZXZlbnQuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIGNsaWNrZWQgb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBkb21FdmVudDogRXZlbnQsIGNvbHVtbjogQ29sdW1uIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhIGhlYWRlci5cbiAgICAgKiBBbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBpdGVtcyB0byBzaG93IGluIHRoZSBzYW1lIHdheSBhcyBpbiB0aGUgW3Byb2Nlc3NJdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9IZWFkZXJNZW51I2NvbmZpZy1wcm9jZXNzSXRlbXMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2V2ZW50LWhlYWRlck1lbnVCZWZvcmVTaG93KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+fSBldmVudC5pdGVtcyBNZW51IGl0ZW0gY29uZmlnc1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyTWVudUJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5PiwgY29sdW1uOiBDb2x1bW4gfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGluIHRoZSBoZWFkZXIgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyTWVudUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtLCBjb2x1bW46IENvbHVtbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYWZ0ZXIgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSBoZWFkZXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlck1lbnVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIGNvbHVtbjogQ29sdW1uIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGEgY2hlY2sgaXRlbSBpcyB0b2dnbGVkIGluIHRoZSBoZWFkZXIgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGVja2VkIENoZWNrZWQgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyTWVudVRvZ2dsZUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtLCBjb2x1bW46IENvbHVtbiwgY2hlY2tlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IHdhcyBoaWRkZW5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoZSBHcmlkIGlzIHNjcm9sbGluZyBob3Jpem9udGFsbHkgaW4gb25lIG9mIGl0cyBTdWJHcmlkcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSBzY3JvbGxpbmcgU3ViR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5zY3JvbGxMZWZ0IFRoZSBob3Jpem9udGFsIHNjcm9sbCBwb3NpdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5zY3JvbGxYIFRoZSBob3Jpem9udGFsIHNjcm9sbCBwb3NpdGlvbiBpbiB0aGUgUlRMLXNhZmUgY29vcmRpbmF0ZSBzeXN0ZW1cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ib3Jpem9udGFsU2Nyb2xsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgc3ViR3JpZDogU3ViR3JpZCwgc2Nyb2xsTGVmdDogbnVtYmVyLCBzY3JvbGxYOiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIHRoZSBHcmlkIGlzIGRvbmUgc2Nyb2xsaW5nIGhvcml6b250YWxseSBpbiBvbmUgb2YgaXRzIFN1YkdyaWRzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHNjcm9sbGluZyBTdWJHcmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtldmVudC5zY3JvbGxMZWZ0XSBUaGUgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24uIE9ubHkgc3VwcGxpZWQgd2hlbiB0aGUgZXZlbnQgZm9sbG93cyBhIFN1YkdyaWQgcmVzaXplLCB0aGUgc2Nyb2xsIGRyaXZlbiBwYXRoIGRvZXMgbm90IHJlcG9ydCBhIHBvc2l0aW9uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSG9yaXpvbnRhbFNjcm9sbEVuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIHN1YkdyaWQ6IFN1YkdyaWQsIHNjcm9sbExlZnQ/OiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gcm93IGxvY2tpbmcgaXMgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LmNsb25lIFRoZSBjcmVhdGVkIGNsb25lXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTG9ja1Jvd3M6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjbG9uZTogR3JpZEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIE1vdXNlIG1vdmVkIG91dCBmcm9tIGVsZW1lbnQgaW4gZ3JpZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbk1vdXNlT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIE1vdXNlIG1vdmVkIGluIG92ZXIgZWxlbWVudCBpbiBncmlkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTW91c2VPdmVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0IHdoaWNoIGhhZCBiZWVuIGluIGEgbm9uLXZpc2libGUgc3RhdGUgZm9yIGFueSByZWFzb25cbiAgICAgKiBhY2hpZXZlcyB2aXNpYmlsaXR5LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1RyZWVHcmlkI2V2ZW50LXBhaW50KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgcGFpbnRlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmZpcnN0UGFpbnQgYHRydWVgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhaW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhaW50OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZpcnN0UGFpbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBhZnRlciBhIHBhc3RlIGFjdGlvbiBpcyBwZXJmb3JtZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmNsaXBib2FyZERhdGEgVGhlIGNsaXBib2FyZERhdGEgdGhhdCB3YXMgcGFzdGVkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQubW9kaWZpZWRSZWNvcmRzIFRoZSByZWNvcmRzIHdoaWNoIGhhdmUgYmVlbiBtb2RpZmllZCBkdWUgdG8gdGhlIHBhc3RlIGFjdGlvblxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQudGFyZ2V0Q2VsbCBUaGUgY2VsbCBmcm9tIHdoaWNoIHRoZSBwYXN0ZSB3aWxsIGJlIHN0YXJ0ZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIHBhc3RlIGV2ZW50c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhc3RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjbGlwYm9hcmREYXRhOiBzdHJpbmcsIG1vZGlmaWVkUmVjb3JkczogTW9kZWxbXSwgdGFyZ2V0Q2VsbDogR3JpZExvY2F0aW9uLCBlbnRpdHlOYW1lOiBzdHJpbmcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGV4cG9ydCBoYXMgZmluaXNoZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtSZXNwb25zZX0gW2V2ZW50LnJlc3BvbnNlXSBPcHRpb25hbCByZXNwb25zZSwgaWYgcmVjZWl2ZWRcbiAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXZlbnQuZXJyb3JdIE9wdGlvbmFsIGVycm9yLCBpZiBleGNlcHRpb24gb2NjdXJyZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QZGZFeHBvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZXNwb25zZT86IFJlc3BvbnNlLCBlcnJvcj86IEVycm9yIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgV2lkZ2V0J3MgcmVhZCBvbmx5IHN0YXRlIGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5yZWFkT25seSBSZWFkIG9ubHkgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVhZE9ubHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWFkT25seTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBhIHdpZGdldCdzIGVsZW1lbnRzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQgZHVlIHRvIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNhbGxcbiAgICAgKiB0byBbcmVjb21wb3NlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2Z1bmN0aW9uLXJlY29tcG9zZSksIGlmIHRoaXMgcmVzdWx0cyBpbiBzb21lIGNoYW5nZSB0byB0aGUgd2lkZ2V0J3MgcmVuZGVyZWQgRE9NIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlY29tcG9zZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIGEgcm93IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5yb3cuUm93fSBldmVudC5yb3cgVGhlIHJvdyB0aGF0IGhhcyBiZWVuIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIGZvciB0aGUgcm93XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LnJlY29yZEluZGV4IFRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZW5kZXJSb3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCByb3c6IFJvdywgcmVjb3JkOiBNb2RlbCwgcmVjb3JkSW5kZXg6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogR3JpZCByb3dzIGhhdmUgYmVlbiByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoaXMgZ3JpZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZW5kZXJSb3dzOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgZW5jYXBzdWxhdGluZyBlbGVtZW50IG9mIGEgV2lkZ2V0IHJlc2l6ZXMgKm9ubHkgd2hlbiBbbW9uaXRvclJlc2l6ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbW9uaXRvclJlc2l6ZSkgaXMgYHRydWVgKi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC53aWR0aCBUaGUgbmV3IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LmhlaWdodCBUaGUgbmV3IGhlaWdodFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRXaWR0aCBUaGUgb2xkIHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZEhlaWdodCBUaGUgb2xkIGhlaWdodFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgb2xkV2lkdGg6IG51bWJlciwgb2xkSGVpZ2h0OiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEdyaWQgcmVzaXplIGxlYWQgdG8gYSBuZXcgcmVzcG9uc2l2ZSBsZXZlbCBiZWluZyBhcHBsaWVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgR3JpZCB0aGF0IHdhcyByZXNpemVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmxldmVsIE5ldyByZXNwb25zaXZlIGxldmVsIChzbWFsbCwgbGFyZ2UsIGV0YylcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQud2lkdGggTmV3IHdpZHRoIGluIHB4XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm9sZExldmVsIE9sZCByZXNwb25zaXZlIGxldmVsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIE9sZCB3aWR0aCBpbiBweFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc3BvbnNpdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCBsZXZlbDogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBvbGRMZXZlbDogc3RyaW5nLCBvbGRXaWR0aDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIHdoZW4gYSByb3cgaGFzIGZpbmlzaGVkIGNvbGxhcHNpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93Q29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIHdoZW4gYSByb3cgZXhwYW5kIGhhcyBmaW5pc2hlZCBleHBhbmRpbmcuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvVHJlZUdyaWQjZXZlbnQtcm93RXhwYW5kKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5leHBhbmRlZEVsZW1lbnRzIEFuIG9iamVjdCB3aXRoIHRoZSBHcmlkIHJlZ2lvbiBuYW1lIGFzIHByb3BlcnR5IGFuZCB0aGUgZXhwYW5kZWQgYm9keSBlbGVtZW50IGFzIHZhbHVlXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LndpZGdldCBJbiBjYXNlIG9mIGV4cGFuZGluZyBhIFdpZGdldCwgdGhpcyB3aWxsIGJlIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnN0YW5jZSBjcmVhdGVkIGJ5IHRoZSBhY3R1YWwgZXhwYW5zaW9uLiBJZiB0aGVyZSBpcyBtdWx0aXBsZSBHcmlkIHJlZ2lvbnMsIHVzZSB0aGUgYHdpZGdldHNgIHBhcmFtIGluc3RlYWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LndpZGdldHMgSW4gY2FzZSBvZiBleHBhbmRpbmcgYSBXaWRnZXQsIHRoaXMgd2lsbCBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgR3JpZCByZWdpb24gbmFtZSBhcyBwcm9wZXJ0eSBhbmQgdGhlIHJlZmVyZW5jZSB0byB0aGUgd2lkZ2V0IGluc3RhbmNlIGNyZWF0ZWQgYnkgdGhlIGFjdHVhbCBleHBhbnNpb25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Sb3dFeHBhbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsLCBleHBhbmRlZEVsZW1lbnRzOiBvYmplY3QsIHdpZGdldDogV2lkZ2V0LCB3aWRnZXRzOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhIHJvd1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSBob3ZlcmVkIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiBjdXJyZW50bHkgaG92ZXJlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Sb3dNb3VzZUVudGVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGEgcm93XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvdyB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50IHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93TW91c2VMZWF2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogR3JpZCBoYXMgc2Nyb2xsZWQgdmVydGljYWxseVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuc2Nyb2xsVG9wIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2Nyb2xsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoZSBzZWxlY3Rpb24gaGFzIGJlZW4gY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHsnc2VsZWN0JywnZGVzZWxlY3QnfSBldmVudC5hY3Rpb24gYCdzZWxlY3QnYC9gJ2Rlc2VsZWN0J2BcbiAgICAgKiBAcGFyYW0geydyb3cnLCdjZWxsJ30gZXZlbnQubW9kZSBgJ3JvdydgL2AnY2VsbCdgXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuZGVzZWxlY3RlZCBUaGUgcmVjb3JkcyBkZXNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGVkIFRoZSByZWNvcmRzIHNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGlvbiBUaGUgcmVjb3JkcyBpbiB0aGUgbmV3IHNlbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuZGVzZWxlY3RlZENlbGxzIFRoZSBjZWxscyBkZXNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5zZWxlY3RlZENlbGxzIFRoZSBjZWxscyBzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuY2VsbFNlbGVjdGlvbiBUaGUgY2VsbHMgaW4gdGhlIG5ldyBzZWxlY3Rpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgYWN0aW9uOiAnc2VsZWN0J3wnZGVzZWxlY3QnLCBtb2RlOiAncm93J3wnY2VsbCcsIHNvdXJjZTogR3JpZCwgZGVzZWxlY3RlZDogTW9kZWxbXSwgc2VsZWN0ZWQ6IE1vZGVsW10sIHNlbGVjdGlvbjogTW9kZWxbXSwgZGVzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25bXSwgc2VsZWN0ZWRDZWxsczogR3JpZExvY2F0aW9uW10sIGNlbGxTZWxlY3Rpb246IEdyaWRMb2NhdGlvbltdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGUgc2VsZWN0aW9uTW9kZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5zZWxlY3Rpb25Nb2RlIFRoZSBuZXcgW3NlbGVjdGlvbk1vZGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvbWl4aW4vR3JpZFNlbGVjdGlvbiNjb25maWctc2VsZWN0aW9uTW9kZSlcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TZWxlY3Rpb25Nb2RlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc2VsZWN0aW9uTW9kZTogb2JqZWN0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgaXMgc2hvd24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBzcGxpdHRpbmcgdGhlIEdyaWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlW119IGV2ZW50LnN1YlZpZXdzIFRoZSBzdWIgdmlld3MgY3JlYXRlZCBieSB0aGUgc3BsaXRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQub3B0aW9ucyBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHNwbGl0IGNhbGxcbiAgICAgKiBAcGFyYW0geydob3Jpem9udGFsJywndmVydGljYWwnLCdib3RoJ30gZXZlbnQub3B0aW9ucy5kaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiBvZiB0aGUgc3BsaXRcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQub3B0aW9ucy5hdENvbHVtbiBUaGUgY29sdW1uIHRvIHNwbGl0IGF0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50Lm9wdGlvbnMuYXRSZWNvcmQgVGhlIHJlY29yZCB0byBzcGxpdCBhdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc3ViVmlld3M6IEdyaWRCYXNlW10sIG9wdGlvbnM6IHsgZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCd8J3ZlcnRpY2FsJ3wnYm90aCcsIGF0Q29sdW1uOiBDb2x1bW4sIGF0UmVjb3JkOiBNb2RlbCB9IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBieSB0aGUgR3JpZCB3aGVuIHRoZSBjb2xsYXBzZSBpY29uIGlzIGNsaWNrZWQuIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgY29sbGFwc2UgYWN0aW9uLFxuICAgICAqIGlmIHlvdSB3YW50IHRvIGltcGxlbWVudCB5b3VyIG93biBiZWhhdmlvci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YmdyaWRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0dGVyQ29sbGFwc2VDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc3ViR3JpZDogU3ViR3JpZCwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJ5IHRoZSBHcmlkIGFmdGVyIGEgc3ViLWdyaWQgaGFzIGJlZW4gcmVzaXplZCB1c2luZyB0aGUgc3BsaXR0ZXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHJlc2l6ZWQgc3ViZ3JpZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXR0ZXJEcmFnRW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJ5IHRoZSBHcmlkIHdoZW4gYSBzdWItZ3JpZCByZXNpemUgZ2VzdHVyZSBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YmdyaWQgYWJvdXQgdG8gYmUgcmVzaXplZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXR0ZXJEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHN1YkdyaWQ6IFN1YkdyaWQsIGRvbUV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYnkgdGhlIEdyaWQgd2hlbiB0aGUgZXhwYW5kIGljb24gaXMgY2xpY2tlZC4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBleHBhbmQgYWN0aW9uLFxuICAgICAqIGlmIHlvdSB3YW50IHRvIGltcGxlbWVudCB5b3VyIG93biBiZWhhdmlvci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YmdyaWRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0dGVyRXhwYW5kQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHN1YkdyaWQ6IFN1YkdyaWQsIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBlZGl0aW5nIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q2VsbEVkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3RhcnRDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGVkaXRpbmcgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtSb3dFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN0YXJ0Um93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYWZ0ZXIgYSBzdWIgZ3JpZCBpcyBjb2xsYXBzZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuU3ViR3JpZH0gZXZlbnQuc3ViR3JpZCBUaGUgc3ViIGdyaWQgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TdWJHcmlkQ29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBzdWJHcmlkOiBTdWJHcmlkIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBhZnRlciBhIHN1YiBncmlkIGlzIGV4cGFuZGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YiBncmlkIGluc3RhbmNlXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3ViR3JpZEV4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIHN1YkdyaWQ6IFN1YkdyaWQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gb25lIG9yIG1vcmUgZ3JvdXBzIGFyZSBleHBhbmRlZCBvciBjb2xsYXBzZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50Lmdyb3VwUmVjb3JkIFtERVBSRUNBVEVEXSBVc2UgYGdyb3VwUmVjb3Jkc2AgcGFyYW0gaW5zdGVhZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50Lmdyb3VwUmVjb3JkcyBUaGUgZ3JvdXAgcmVjb3JkcyBiZWluZyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZSBDb2xsYXBzZWQgKHRydWUpIG9yIGV4cGFuZGVkIChmYWxzZSlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtldmVudC5hbGxSZWNvcmRzXSBUcnVlIGlmIHRoaXMgZXZlbnQgaXMgcGFydCBvZiB0b2dnbGluZyBhbGwgZ3JvdXBzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVG9nZ2xlR3JvdXA6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncm91cFJlY29yZDogTW9kZWwsIGdyb3VwUmVjb3JkczogTW9kZWxbXSwgY29sbGFwc2U6IGJvb2xlYW4sIGFsbFJlY29yZHM/OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciBhIHBhcmVudCBub2RlIHJlY29yZCB0b2dnbGVzIGl0cyBjb2xsYXBzZWQgc3RhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCBiZWluZyB0b2dnbGVkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2UgYHRydWVgIGlmIHRoZSBub2RlIGlzIGJlaW5nIGNvbGxhcHNlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub2dnbGVOb2RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCwgY29sbGFwc2U6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEEgaGVhZGVyIFt0b29sXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXRvb2xzKSBoYXMgYmVlbiBjbGlja2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlRvb2x9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuVG9vbH0gZXZlbnQudG9vbCBUaGUgdG9vbCB3aGljaCBpcyBiZWluZyBjbGlja2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRvb2xDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVG9vbCwgdG9vbDogVG9vbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBHcmlkL1NjaGVkdWxlci9HYW50dCBhZnRlciB0cmVlIGdyb3VwaW5nIGxldmVscyBjaGFuZ2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfEZ1bmN0aW9uKVtdfSBldmVudC5ncm91cGVycyBBcnJheSBvZiBmaWVsZCBuYW1lcyBvciBmdW5jdGlvbnMgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGdyb3VwaW5nIGxldmVsc1xuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xGdW5jdGlvbilbXX0gZXZlbnQub2xkR3JvdXBlcnMgQXJyYXkgb2YgZmllbGQgbmFtZXMgb3IgZnVuY3Rpb25zIHJlcHJlc2VudGluZyB0aGUgcHJldmlvdXMgZ3JvdXBpbmcgbGV2ZWxzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVHJlZUdyb3VwOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBncm91cGVyczogKHN0cmluZ3xGdW5jdGlvbilbXSwgb2xkR3JvdXBlcnM6IChzdHJpbmd8RnVuY3Rpb24pW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gcm93IGxvY2tpbmcgaXMgZGlzYWJsZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5jbG9uZSBUaGUgbG9ja2VkIGNsb25lIHRoYXQgd2lsbCBiZSBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25VbmxvY2tSb3dzOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2xvbmU6IEdyaWRCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHVuLXNwbGl0dGluZyB0aGUgR3JpZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25VbnNwbGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFwcGVuZCB0aGUgdW5kZXJseWluZyB3aWRnZXRcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIG1lID0gdGhpcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdcbiAgICAgICAgICAgIH0gPSBtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNsYXNzLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlTmFtZSxcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlncyxcbiAgICAgICAgICAgICAgICBicnludHVtRXZlbnRzXG4gICAgICAgICAgICB9ID0gQnJ5bnR1bVRyZWVHcmlkQ29tcG9uZW50O1xuXG4gICAgICAgIGJyeW50dW1Db25maWdzLmZpbHRlcihwcm9wID0+IHByb3AgaW4gdGhpcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoYnJ5bnR1bUNvbmZpZywgcHJvcCwgdGhpc1twcm9wXSk7XG4gICAgICAgICAgICBpZiAoWydmZWF0dXJlcycsICdjb25maWcnXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbmZpZ1Byb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYnJ5bnR1bUV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gdGhpc1tldmVudF0gJiYgdGhpc1tldmVudF0ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICB1bmNhcGl0YWxpemUgPSAoc3RyOiBzdHJpbmcpID0+IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAoc3RyOiBzdHJpbmcpID0+IHVuY2FwaXRhbGl6ZShzdHIuc2xpY2UoMikpO1xuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBicnludHVtQ29uZmlnLmxpc3RlbmVyc1tldmVudE5hbWUoZXZlbnQpXSA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBtZVtldmVudF0uZW1pdChlKTtcbiAgICAgICAgICAgICAgICAvLyBFdmVudEVtaXR0ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcyBpbiB0aGUgbm9ybWFsIHdheSwgd29yayBhcm91bmQgaXQgYnkgc2V0dGluZyBgcmV0dXJuVmFsdWVgIGZsYWdcbiAgICAgICAgICAgICAgICAvLyBpbiBBbmd1bGFyIGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgY29tcG9uZW50IGhhcyBubyBjb250YWluZXIgc3BlY2lmaWVkIGluIGNvbmZpZyB0aGVuIHVzZSBhZG9wdCB0byBXcmFwcGVyJ3MgZWxlbWVudFxuICAgICAgICBjb25zdFxuICAgICAgICAgICAgY29udGFpbmVyUGFyYW0gPSBbXG4gICAgICAgICAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAgICAgICAgICdpbnNlcnRBZnRlcicsXG4gICAgICAgICAgICAgICAgJ2luc2VydEJlZm9yZSdcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBdLmZpbmQocHJvcCA9PiBicnludHVtQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJQYXJhbSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlTmFtZSA9PT0gJ0J1dHRvbicgfHwgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCkgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gQnV0dG9uIHNob3VsZCBhbHdheXMgYmUgPGE+IG9yIDxidXR0b24+IGluc2lkZSBvd25lciBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hcHBlbmRUbyA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYWRvcHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb250YWluZXIoaW5zdGFuY2VOYW1lLCBjb250YWluZXJQYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBzaGFkb3cgRE9NIChlLmcuIEFuZ3VsYXIgVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tKSwgdGhlbWUgQ1NTIGZyb20gZG9jdW1lbnQuaGVhZFxuICAgICAgICAvLyBkb2VzIG5vdCBjYXNjYWRlIGludG8gdGhlIHNoYWRvdyByb290LiBJbmplY3QgYSBtYXRjaGluZyA8bGluaz4gc28gQnJ5bnR1bSdzIENTUyBjaGVja1xuICAgICAgICAvLyBmaW5kcyB0aGUgdGhlbWUuIFRoZSBAZm9udC1mYWNlIHJ1bGVzIGZyb20gY29tcG9uZW50IHN0eWxlcyBhcmUgYWxzbyBleHRyYWN0ZWQgdG9cbiAgICAgICAgLy8gZG9jdW1lbnQgc2NvcGUgc28gZG9jdW1lbnQuZm9udHMgZGV0ZWN0cyB0aGVtIChzaGFkb3ctcm9vdCBAZm9udC1mYWNlIGlzIG5vdCByZWxpYWJseVxuICAgICAgICAvLyBpbmNsdWRlZCBpbiBkb2N1bWVudC5mb250cyBhY3Jvc3MgYWxsIGJyb3dzZXJzKS5cbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRSb290Tm9kZSgpO1xuICAgICAgICBpZiAoc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIGluaXRUaGVtZUluU2hhZG93Um9vdHMoKTtcbiAgICAgICAgICAgIEJyeW50dW1UcmVlR3JpZENvbXBvbmVudC5lbnN1cmVGb250c0luRG9jdW1lbnQoc2hhZG93Um9vdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lLmluc3RhbmNlID0gaW5zdGFuY2VOYW1lID09PSAnV2lkZ2V0JyA/IFdpZGdldC5jcmVhdGUoYnJ5bnR1bUNvbmZpZykgOiBuZXcgaW5zdGFuY2VDbGFzcyhicnludHVtQ29uZmlnKTtcblxuICAgICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgZ3JpZEluc3RhbmNlLCBzY2hlZHVsZXJJbnN0YW5jZSBldGMuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbWVbU3RyaW5nSGVscGVyLnVuY2FwaXRhbGl6ZShpbnN0YW5jZU5hbWUpICsgJ0luc3RhbmNlJ10gPSBtZS5pbnN0YW5jZTtcbiAgICAgICAgLy8gXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgYWxsIEBmb250LWZhY2UgZGVjbGFyYXRpb25zIGZyb20gYSBzaGFkb3cgcm9vdCdzIHN0eWxlc2hlZXRzIGFuZCBhZGRzIHRoZW0gdG9cbiAgICAgKiBkb2N1bWVudC5oZWFkIGFzIGEgc2luZ2xlIDxzdHlsZT4gZWxlbWVudC4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBAZm9udC1mYWNlIHJ1bGVzIGluc2lkZVxuICAgICAqIGEgc2hhZG93IHJvb3QgYXJlIG5vdCByZWxpYWJseSBpbmNsdWRlZCBpbiBkb2N1bWVudC5mb250cyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCBjYXVzaW5nXG4gICAgICogQnJ5bnR1bSdzIENTUyBjb21wYXRpYmlsaXR5IGNoZWNrIHRvIGluY29ycmVjdGx5IHJlcG9ydCBtaXNzaW5nIGZvbnRzLlxuICAgICAqIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcyDigJQgdGhlIGV4dHJhY3Rpb24gcnVucyBvbmx5IG9uY2UgcGVyIHBhZ2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZW5zdXJlRm9udHNJbkRvY3VtZW50KHNoYWRvd1Jvb3Q6IFNoYWRvd1Jvb3QpOiB2b2lkIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiLXNoYWRvdy1yb290LWZvbnRzJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvbnRGYWNlUnVsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgY29uc3QgZXh0cmFjdEZyb21TaGVldCA9IChzaGVldDogQ1NTU3R5bGVTaGVldCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0LmNzc1J1bGVzO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVzW2ldLnR5cGUgPT09IENTU1J1bGUuRk9OVF9GQUNFX1JVTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYWNlUnVsZXMucHVzaChydWxlc1tpXS5jc3NUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfZSkge1xuICAgICAgICAgICAgICAgIC8vIENyb3NzLW9yaWdpbiBhY2Nlc3MgbWF5IHRocm93OyBzaWxlbnRseSBza2lwXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYWRvcHRlZFN0eWxlU2hlZXRzIChBbmd1bGFyIDE0KyAvIG1vZGVybiBicm93c2VycylcbiAgICAgICAgY29uc3QgYWRvcHRlZFNoZWV0czogQ1NTU3R5bGVTaGVldFtdID0gKHNoYWRvd1Jvb3QgYXMgYW55KS5hZG9wdGVkU3R5bGVTaGVldHMgPz8gW107XG4gICAgICAgIGFkb3B0ZWRTaGVldHMuZm9yRWFjaChzaGVldCA9PiBleHRyYWN0RnJvbVNoZWV0KHNoZWV0KSk7XG5cbiAgICAgICAgLy8gPHN0eWxlPiBlbGVtZW50cyAob2xkZXIgQW5ndWxhciBvciBmYWxsYmFjaylcbiAgICAgICAgc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgaWYgKGVsLnNoZWV0KSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdEZyb21TaGVldChlbC5zaGVldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChmb250RmFjZVJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIHN0eWxlLmlkID0gJ2Itc2hhZG93LXJvb3QtZm9udHMnO1xuICAgICAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBmb250RmFjZVJ1bGVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYXRjaCBmb3IgY2hhbmdlc1xuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgIHsgaW5zdGFuY2VOYW1lIH0gPSBCcnludHVtVHJlZUdyaWRDb21wb25lbnQ7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGNoYW5nZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcykuZm9yRWFjaCgoW3Byb3AsIGNoYW5nZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAoY2hhbmdlIGFzIFNpbXBsZUNoYW5nZSkuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICAgICAgeyBicnludHVtQ29uZmlnc09ubHksIGJyeW50dW1Qcm9wcyB9ID0gQnJ5bnR1bVRyZWVHcmlkQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGJyeW50dW1Qcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoaW5zdGFuY2UsIHByb3AsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyeW50dW1Db25maWdzT25seS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdVcGRhdGVQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19