@bryntum/grid-angular-thin 7.3.2 → 7.3.4

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 (36) hide show
  1. package/README.md +4 -4
  2. package/bundles/bryntum-grid-angular-thin.umd.js +40 -31
  3. package/bundles/bryntum-grid-angular-thin.umd.js.map +1 -1
  4. package/esm2015/lib/bryntum-a-i-filter-field.component.js +5 -5
  5. package/esm2015/lib/bryntum-checklist-filter-combo.component.js +5 -5
  6. package/esm2015/lib/bryntum-grid-base.component.js +5 -2
  7. package/esm2015/lib/bryntum-grid-chart-designer.component.js +5 -5
  8. package/esm2015/lib/bryntum-grid-field-filter-picker-group.component.js +5 -5
  9. package/esm2015/lib/bryntum-grid-field-filter-picker.component.js +5 -5
  10. package/esm2015/lib/bryntum-grid.component.js +5 -2
  11. package/esm2015/lib/bryntum-group-bar.component.js +5 -5
  12. package/esm2015/lib/bryntum-tree-combo.component.js +5 -5
  13. package/esm2015/lib/bryntum-tree-grid.component.js +5 -2
  14. package/fesm2015/bryntum-grid-angular-thin.js +40 -31
  15. package/fesm2015/bryntum-grid-angular-thin.js.map +1 -1
  16. package/lib/bryntum-a-i-filter-field.component.d.ts +10 -6
  17. package/lib/bryntum-checklist-filter-combo.component.d.ts +10 -6
  18. package/lib/bryntum-grid-base.component.d.ts +5 -2
  19. package/lib/bryntum-grid-chart-designer.component.d.ts +9 -6
  20. package/lib/bryntum-grid-field-filter-picker-group.component.d.ts +10 -7
  21. package/lib/bryntum-grid-field-filter-picker.component.d.ts +10 -7
  22. package/lib/bryntum-grid.component.d.ts +5 -2
  23. package/lib/bryntum-group-bar.component.d.ts +9 -6
  24. package/lib/bryntum-tree-combo.component.d.ts +10 -6
  25. package/lib/bryntum-tree-grid.component.d.ts +5 -2
  26. package/package.json +1 -1
  27. package/src/lib/bryntum-a-i-filter-field.component.ts +10 -6
  28. package/src/lib/bryntum-checklist-filter-combo.component.ts +10 -6
  29. package/src/lib/bryntum-grid-base.component.ts +5 -1
  30. package/src/lib/bryntum-grid-chart-designer.component.ts +9 -6
  31. package/src/lib/bryntum-grid-field-filter-picker-group.component.ts +10 -7
  32. package/src/lib/bryntum-grid-field-filter-picker.component.ts +10 -7
  33. package/src/lib/bryntum-grid.component.ts +5 -1
  34. package/src/lib/bryntum-group-bar.component.ts +9 -6
  35. package/src/lib/bryntum-tree-combo.component.ts +10 -6
  36. package/src/lib/bryntum-tree-grid.component.ts +5 -1
@@ -1530,6 +1530,7 @@ BryntumGridBaseComponent.bryntumProps = BryntumGridBaseComponent.bryntumFeatureN
1530
1530
  'callOnFunctions',
1531
1531
  'catchEventHandlerExceptions',
1532
1532
  'cellEllipsis',
1533
+ 'centered',
1533
1534
  'cls',
1534
1535
  'collapsed',
1535
1536
  'column',
@@ -1586,7 +1587,7 @@ BryntumGridBaseComponent.bryntumProps = BryntumGridBaseComponent.bryntumFeatureN
1586
1587
  'width'
1587
1588
  ]);
1588
1589
  BryntumGridBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumGridBaseComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1589
- BryntumGridBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumGridBaseComponent, selector: "bryntum-grid-base", 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", 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", stateId: "stateId", stateProvider: "stateProvider", strips: "strips", subGridConfigs: "subGridConfigs", syncMask: "syncMask", tab: "tab", tabBarItems: "tabBarItems", tbar: "tbar", 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", stateSettings: "stateSettings", store: "store", title: "title", tools: "tools", transition: "transition", transitionDuration: "transitionDuration", width: "width", 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 });
1590
+ BryntumGridBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumGridBaseComponent, selector: "bryntum-grid-base", 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", 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", stateId: "stateId", stateProvider: "stateProvider", strips: "strips", subGridConfigs: "subGridConfigs", syncMask: "syncMask", tab: "tab", tabBarItems: "tabBarItems", tbar: "tbar", 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", 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 });
1590
1591
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumGridBaseComponent, decorators: [{
1591
1592
  type: Component,
1592
1593
  args: [{
@@ -1837,6 +1838,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImpor
1837
1838
  type: Input
1838
1839
  }], width: [{
1839
1840
  type: Input
1841
+ }], centered: [{
1842
+ type: Input
1840
1843
  }], originalStore: [{
1841
1844
  type: Input
1842
1845
  }], parent: [{
@@ -2176,4 +2179,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImpor
2176
2179
  }], onUnsplit: [{
2177
2180
  type: Output
2178
2181
  }] } });
2179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1ncmlkLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS1ncmlkLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBaWMsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM2UsT0FBTyxFQUFncUIsUUFBUSxFQUE4MEIsTUFBTSxvQkFBb0IsQ0FBQztBQUV4aEQsT0FBTyxFQUFhLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQXU4QjVELE1BQU0sT0FBTyx3QkFBd0I7SUE4YmpDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUFxTUYsa0JBQWtCO1FBQ2xCOzs7OztXQUtHO1FBQ08sMkJBQXNCLEdBQVEsSUFBSSxZQUFZLEVBQW1GLENBQUM7UUFDNUk7Ozs7OztXQU1HO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQXNHLENBQUM7UUFDOUo7Ozs7O1dBS0c7UUFDTywwQkFBcUIsR0FBUSxJQUFJLFlBQVksRUFBd0YsQ0FBQztRQUNoSjs7Ozs7O1dBTUc7UUFDTyw0QkFBdUIsR0FBUSxJQUFJLFlBQVksRUFBNkYsQ0FBQztR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TTtnQkFVRyxlQUFlO3NCQUF4QixNQUFNO2dCQVNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBT0csUUFBUTtzQkFBakIsTUFBTTtnQkFjRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBTUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQU1HLE1BQU07c0JBQWYsTUFBTTtnQkFVRyxPQUFPO3NCQUFoQixNQUFNO2dCQVNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFRRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBUUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQVNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFPRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU9HLGVBQWU7c0JBQXhCLE1BQU07Z0JBU0csYUFBYTtzQkFBdEIsTUFBTTtnQkFPRyxZQUFZO3NCQUFyQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBUUcsV0FBVztzQkFBcEIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQUlHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIEdyaWRCYXNlXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IFdyYXBwZXJIZWxwZXIgZnJvbSAnLi93cmFwcGVyLmhlbHBlcic7XG5cbmltcG9ydCB7IEFqYXhTdG9yZSwgQWpheFN0b3JlQ29uZmlnLCBCYXNlLCBDb2xvciwgQ29udGFpbmVyLCBEb21Db25maWcsIEZvcm11bGFQcm92aWRlckNvbmZpZywgSW5zdGFuY2VQbHVnaW4sIEtleU1hcENvbmZpZywgTWFzaywgTWFza0NvbmZpZywgTWVudSwgTWVudUl0ZW0sIE1lbnVJdGVtRW50cnksIE1vZGVsLCBNb2RlbENvbmZpZywgUGFnaW5nVG9vbGJhckNvbmZpZywgUGFuZWwsIFBhbmVsQ29sbGFwc2VyQ29uZmlnLCBQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWcsIFBhbmVsSGVhZGVyLCBTY3JvbGxNYW5hZ2VyLCBTY3JvbGxNYW5hZ2VyQ29uZmlnLCBTY3JvbGxlciwgU2Nyb2xsZXJDb25maWcsIFN0YXRlUHJvdmlkZXIsIFN0b3JlLCBTdG9yZUNvbmZpZywgVGFiQ29uZmlnLCBUb29sLCBUb29sQ29uZmlnLCBUb29sYmFyQ29uZmlnLCBUb29sYmFySXRlbXMsIFRvb2x0aXBDb25maWcsIFdpZGdldCB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5pbXBvcnQgeyBBSSwgQUlDb25maWcsIEFJRmlsdGVyLCBBSUZpbHRlckNvbmZpZywgQ2VsbENvcHlQYXN0ZSwgQ2VsbENvcHlQYXN0ZUNvbmZpZywgQ2VsbEVkaXQsIENlbGxFZGl0Q29uZmlnLCBDZWxsRWRpdG9yQ29udGV4dCwgQ2VsbE1lbnUsIENlbGxNZW51Q29uZmlnLCBDZWxsVG9vbHRpcCwgQ2VsbFRvb2x0aXBDb25maWcsIENoYXJ0cywgQ2hhcnRzQ29uZmlnLCBDb2x1bW4sIENvbHVtbkF1dG9XaWR0aCwgQ29sdW1uQXV0b1dpZHRoQ29uZmlnLCBDb2x1bW5EcmFnVG9vbGJhciwgQ29sdW1uRHJhZ1Rvb2xiYXJDb25maWcsIENvbHVtblBpY2tlciwgQ29sdW1uUGlja2VyQ29uZmlnLCBDb2x1bW5SZW5hbWUsIENvbHVtblJlbmFtZUNvbmZpZywgQ29sdW1uUmVvcmRlciwgQ29sdW1uUmVvcmRlckNvbmZpZywgQ29sdW1uUmVzaXplLCBDb2x1bW5SZXNpemVDb25maWcsIENvbHVtblN0b3JlLCBDb2x1bW5TdG9yZUNvbmZpZywgR3JpZENvbnRhaW5lckl0ZW1Db25maWcsIEVtcHR5VGV4dERvbUNvbmZpZywgRXhjZWxFeHBvcnRlciwgRXhjZWxFeHBvcnRlckNvbmZpZywgRXhwb3J0Q29uZmlnLCBGaWxlRHJvcCwgRmlsZURyb3BDb25maWcsIEZpbGxIYW5kbGUsIEZpbGxIYW5kbGVDb25maWcsIEZpbHRlciwgRmlsdGVyQmFyLCBGaWx0ZXJCYXJDb25maWcsIEZpbHRlckNvbmZpZywgR3JpZCwgR3JpZEJhc2UsIEdyaWRCYXNlTGlzdGVuZXJzLCBHcmlkQ29sdW1uQ29uZmlnLCBHcmlkTG9jYXRpb24sIEdyaWRMb2NhdGlvbkNvbmZpZywgR3JpZFNlbGVjdGlvbk1vZGUsIEdyaWRTdGF0ZUluZm8sIEdyb3VwLCBHcm91cENvbmZpZywgR3JvdXBTdW1tYXJ5LCBHcm91cFN1bW1hcnlDb25maWcsIEhlYWRlck1lbnUsIEhlYWRlck1lbnVDb25maWcsIExvY2tSb3dzLCBMb2NrUm93c0NvbmZpZywgTWVyZ2VDZWxscywgTWVyZ2VDZWxsc0NvbmZpZywgUGRmRXhwb3J0LCBQZGZFeHBvcnRDb25maWcsIFBpbkNvbHVtbnMsIFBpbkNvbHVtbnNDb25maWcsIFByZXNlcnZlU2Nyb2xsT3B0aW9ucywgUHJpbnQsIFByaW50Q29uZmlnLCBRdWlja0ZpbmQsIFF1aWNrRmluZENvbmZpZywgUmVjb3JkUG9zaXRpb25Db250ZXh0LCBSZWdpb25SZXNpemUsIFJlZ2lvblJlc2l6ZUNvbmZpZywgUmVzcG9uc2l2ZUxldmVsQ29uZmlnLCBSb3csIFJvd0NvcHlQYXN0ZSwgUm93Q29weVBhc3RlQ29uZmlnLCBSb3dFZGl0LCBSb3dFZGl0Q29uZmlnLCBSb3dFZGl0b3JDb250ZXh0LCBSb3dFeHBhbmRlciwgUm93RXhwYW5kZXJDb25maWcsIFJvd1Jlb3JkZXIsIFJvd1Jlb3JkZXJDb25maWcsIFJvd1Jlc2l6ZSwgUm93UmVzaXplQ29uZmlnLCBTZWFyY2gsIFNlYXJjaENvbmZpZywgU29ydCwgU29ydENvbmZpZywgU3BsaXQsIFNwbGl0Q29uZmlnLCBTdGlja3lDZWxscywgU3RpY2t5Q2VsbHNDb25maWcsIFN0cmlwZSwgU3RyaXBlQ29uZmlnLCBTdWJHcmlkLCBTdWJHcmlkQ29uZmlnLCBTdW1tYXJ5LCBTdW1tYXJ5Q29uZmlnLCBUcmVlLCBUcmVlQ29uZmlnLCBUcmVlR3JvdXAsIFRyZWVHcm91cENvbmZpZywgWExTQ29sdW1uIH0gZnJvbSAnQGJyeW50dW0vZ3JpZC10aGluJztcblxuaW1wb3J0IHsgRG9tSGVscGVyLCBTdHJpbmdIZWxwZXIgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuaW1wb3J0IHsgaW5pdFRoZW1lSW5TaGFkb3dSb290cyB9IGZyb20gJy4vc2hhZG93ZG9tLmhlbHBlcic7XG5cbmV4cG9ydCB0eXBlIEJyeW50dW1HcmlkQmFzZVByb3BzID0ge1xuICAgIC8vIENvbmZpZ3NcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhZG9wdCBhcyB0aGlzIFdpZGdldCdzIGVuY2Fwc3VsYXRpbmcgZWxlbWVudC4gVGhlIHdpZGdldCdzXG4gICAgICogY29udGVudCB3aWxsIGJlIHBsYWNlZCBpbnNpZGUgdGhpcyBlbGVtZW50LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1hZG9wdClcbiAgICAgKi9cbiAgICBhZG9wdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFthbGlnbi1zZWxmXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYWxpZ24tc2VsZikgc3R5bGUuXG4gICAgICovXG4gICAgYWxpZ25TZWxmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFuaW1hdGUgcm93IHJlbW92YWxzIGNhdXNlZCBieSBmaWx0ZXJpbmcuXG4gICAgICogQGRlcHJlY2F0ZWQgNy4wLjAgRGVwcmVjYXRlZCBgYW5pbWF0ZUZpbHRlclJlbW92YWxzYC4gVXNlIGB0cmFuc2l0aW9uLmZpbHRlclJlbW92YWxgIGluc3RlYWRcbiAgICAgKi9cbiAgICBhbmltYXRlRmlsdGVyUmVtb3ZhbHMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiByZW1vdmluZyBhbmQgaW5zZXJ0aW5nIHJvd3Mgc2hvdWxkIGJlIGFuaW1hdGVkLiBTZXQgdG8gYGZhbHNlYCB0byBwcmV2ZW50IHRob3NlIGFuaW1hdGlvbnMsXG4gICAgICogcmVtb3ZpbmcgdGhlIHJlbGF0ZWQgZGVsYXlzLlxuICAgICAqIEBkZXByZWNhdGVkIDcuMC4wIERlcHJlY2F0ZWQgYGFuaW1hdGVSZW1vdmluZ1Jvd3NgLiBVc2UgYHRyYW5zaXRpb24ucmVtb3ZlUmVjb3JkYCBpbnN0ZWFkXG4gICAgICovXG4gICAgYW5pbWF0ZVJlbW92aW5nUm93cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIFtUcmVlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1RyZWUpIGZlYXR1cmUgaXMgaW4gdXNlIGFuZCB0aGUgU3RvcmUgaXMgYSB0cmVlIHN0b3JlLCB0aGlzXG4gICAgICogY29uZmlnIG1heSBiZSBzZXQgdG8gYHRydWVgIHRvIHZpc3VhbGx5IGFuaW1hdGUgYnJhbmNoIG5vZGUgZXhwYW5kIGFuZCBjb2xsYXBzZSBvcGVyYXRpb25zLlxuICAgICAqICpUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU2NoZWR1bGVyIGFuZCBHYW50dCpcbiAgICAgKiBAZGVwcmVjYXRlZCA3LjAuMCBEZXByZWNhdGVkIGBhbmltYXRlVHJlZU5vZGVUb2dnbGVgLiBVc2UgYHRyYW5zaXRpb24udG9nZ2xlVHJlZU5vZGVgIGluc3RlYWRcbiAgICAgKi9cbiAgICBhbmltYXRlVHJlZU5vZGVUb2dnbGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciB0aGUgaWQgb2YgYW4gZWxlbWVudCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0J3MgZWxlbWVudCB0by4gQ2FuIGJlIGNvbmZpZ3VyZWQsIG9yIHNldCBvbmNlIGF0XG4gICAgICogcnVudGltZS4gVG8gYWNjZXNzIHRoZSBlbGVtZW50IG9mIGEgcmVuZGVyZWQgd2lkZ2V0LCBzZWUgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkuXG4gICAgICogPGRpdiBjbGFzcz1cIm5vdGVcIj5XaGVuIGNyZWF0aW5nIG5lc3RlZCB0cmVlcyBvZiB3aWRnZXRzLCB0aGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gdGhlIG91dGVybW9zdCB3aWRnZXQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWFwcGVuZFRvKVxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctYXJpYURlc2NyaXB0aW9uKVxuICAgICAqL1xuICAgIGFyaWFEZXNjcmlwdGlvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3QgYXNcbiAgICAgKiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctYXJpYUxhYmVsKVxuICAgICAqL1xuICAgIGFyaWFMYWJlbCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQXV0b21hdGljYWxseSBzZXQgZ3JpZHMgaGVpZ2h0IHRvIGZpdCBhbGwgcm93cyAobm8gc2Nyb2xsaW5nIGluIHRoZSBncmlkKS4gSW4gZ2VuZXJhbCB5b3Ugc2hvdWxkIGF2b2lkXG4gICAgICogdXNpbmcgYGF1dG9IZWlnaHQ6IHRydWVgLCBzaW5jZSBpdCB3aWxsIGJ5cGFzcyBHcmlkcyB2aXJ0dWFsIHJlbmRlcmluZyBhbmQgcmVuZGVyIGFsbCByb3dzIGF0IG9uY2UsIHdoaWNoXG4gICAgICogaW4gYSBsYXJnZXIgZ3JpZCBpcyByZWFsbHkgYmFkIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgKi9cbiAgICBhdXRvSGVpZ2h0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBDb25maWcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhciksXG4gICAgICogb3IgYXJyYXkgb2YgY29uZmlnIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBjaGlsZCBpdGVtcyBvZiBhIFRvb2xiYXIuIEFub3RoZXIgd2F5IHRvIGFkZCBhIGJiYXIgaXMgdG8gdXNlIFtzdHJpcHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctYmJhcilcbiAgICAgKi9cbiAgICBiYmFyID8gOiAoR3JpZENvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byB0aGUgcGFuZWwncyBib2R5IGVsZW1lbnQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWJvZHlDbHMpXG4gICAgICovXG4gICAgYm9keUNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIFNldCBgdHJ1ZWAgdG8gYWRkIGEgYm9yZGVyIHRvIHRoaXMgY29udGFpbmVyJ3MgZWxlbWVudC5cbiAgICAgKi9cbiAgICBib3JkZXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hlcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0ZSB3aGljaCBldmVudHMgc2hvdWxkIGJ1YmJsZSB1cCB0aGUgb3duZXJzaGlwXG4gICAgICogaGllcmFyY2h5IHdoZW4gdHJpZ2dlcmVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgY2FsbCBvblhYWCBtZXRob2QgbmFtZXMgKGUuZy4gYG9uU2hvd2AsIGBvbkNsaWNrYCksIGFzIGFuIGVhc3kgd2F5IHRvIGxpc3RlbiBmb3IgZXZlbnRzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1jYWxsT25GdW5jdGlvbnMpXG4gICAgICovXG4gICAgY2FsbE9uRnVuY3Rpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgaWYgYW4gZXZlbnQgaGFuZGxlciB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGUgZXJyb3IgcHJvcGFnYXRlcyB1cCB0aGUgc3RhY2sgYW5kIHRoZVxuICAgICAqIGFwcGxpY2F0aW9uIHN0YXRlIGlzIHVuZGVmaW5lZC4gQ29kZSB3aGljaCBmb2xsb3dzIHRoZSBldmVudCBoYW5kbGVyIHdpbGwgKm5vdCogYmUgZXhlY3V0ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucylcbiAgICAgKi9cbiAgICBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBjcm9wIHRleHQgaW4gZ3JpZCBjZWxscyB3aXRob3V0IGVsbGlwc2lzICguLi4pLiBXaGVuIGVuYWJsZWQsIGNlbGxzIGNvbnRhaW5pbmcgcHVyZVxuICAgICAqIHVzZSBgZGlzcGxheSA6IGJsb2NrYCwgaW5zdGVhZCBvZiBgZGlzcGxheSA6IGZsZXhgIHRvIGFsbG93IGVsbGlwc2lzIHRvIHdvcmsuXG4gICAgICogPHN0cm9uZz5OT1RFPC9zdHJvbmc+IE9ubHkgc3VwcG9ydGVkIGluIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgOmhhcygpYCBDU1Mgc2VsZWN0b3JcbiAgICAgKi9cbiAgICBjZWxsRWxsaXBzaXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIGVsZW1lbnQuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWNscylcbiAgICAgKi9cbiAgICBjbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwYW5lbCBpcyBjb2xsYXBzZWQgKHRoZSBib2R5IG9mIHRoZSBwYW5lbCBpcyBoaWRkZW4gd2hpbGUgb25seSB0aGUgaGVhZGVyIGlzXG4gICAgICogdmlzaWJsZSkuIE9ubHkgdmFsaWQgaWYgdGhlIHBhbmVsIGlzIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkuXG4gICAgICovXG4gICAgY29sbGFwc2VkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgZW5hYmxlcyBjb2xsYXBzaWJpbGl0eSBmb3IgdGhlIHBhbmVsLiBTZWUgW2NvbGxhcHNlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzZWQpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1jb2xsYXBzaWJsZSlcbiAgICAgKi9cbiAgICBjb2xsYXBzaWJsZSA/IDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWdcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1jb2xvcilcbiAgICAgKi9cbiAgICBjb2xvciA/IDogQ29sb3JcbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIHdoaWNoIGNvbHVtbiB0byBzdGFydCBpbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBjb2x1bW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBzaG93IGNvbHVtbiBsaW5lcy4gRW5kIHJlc3VsdCBtaWdodCBiZSBvdmVycnVsZWQgYnkvZGlmZmVyIGJldHdlZW4gdGhlbWVzLlxuICAgICAqL1xuICAgIGNvbHVtbkxpbmVzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQWNjZXB0cyBjb2x1bW4gZGVmaW5pdGlvbnMgZm9yIHRoZSBncmlkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhleSB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlXG4gICAgICogW0NvbHVtbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvY29sdW1uL0NvbHVtbikgaW5zdGFuY2VzIHRoYXQgYXJlIGFkZGVkIHRvIGEgW0NvbHVtblN0b3JlXSgjR3JpZC9kYXRhL0NvbHVtblN0b3JlKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctY29sdW1ucylcbiAgICAgKi9cbiAgICBjb2x1bW5zID8gOiBDb2x1bW5TdG9yZXxHcmlkQ29sdW1uQ29uZmlnW118Q29sdW1uU3RvcmVDb25maWdcbiAgICBjb25maWcgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gdGhlIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCkuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWNvbnRlbnRFbGVtZW50Q2xzKVxuICAgICAqL1xuICAgIGNvbnRlbnRFbGVtZW50Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hpY2ggaXMgdXNlZCB0byBzaG93IGNvbnRleHQgbWVudXMuXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOiAnY29udGV4dG1lbnUnLCAnY2xpY2snLCAnZGJsY2xpY2snLlxuICAgICAqL1xuICAgIGNvbnRleHRNZW51VHJpZ2dlckV2ZW50ID8gOiAnY29udGV4dG1lbnUnfCdjbGljayd8J2RibGNsaWNrJ1xuICAgIC8qKlxuICAgICAqIENvbnZlbmllbnQgc2hvcnRjdXQgdG8gc2V0IGRhdGEgaW4gZ3JpZHMgc3RvcmUgYm90aCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGF0IHJ1bnRpbWUuIENhbiBhbHNvIGJlXG4gICAgICogdXNlZCB0byByZXRyaWV2ZSBkYXRhIGF0IHJ1bnRpbWUsIGFsdGhvdWdoIHdlIGRvIHJlY29tbWVuZCBpbnRlcmFjdGluZyB3aXRoIEdyaWRzIHN0b3JlIGluc3RlYWQgdXNpbmdcbiAgICAgKiB0aGUgW3N0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI3Byb3BlcnR5LXN0b3JlKSBwcm9wZXJ0eS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctZGF0YSlcbiAgICAgKi9cbiAgICBkYXRhID8gOiBvYmplY3RbXXxNb2RlbFtdfE1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgV2lkZ2V0IGNvbmZpZ3VyYXRpb24gaXMgdXNlZCBpbiB0aGUgR3JpZCdzIFJvd0V4cGFuZGVyIGZlYXR1cmUncyBgd2lkZ2V0YCBjb25maWcsIHByb3ZpZGUgdGhlXG4gICAgICogZmllbGQgb24gdGhlIGV4cGFuZGVkIHJlY29yZCB0byB1c2UgZm9yIHBvcHVsYXRpbmcgdGhpcyB3aWRnZXQncyBzdG9yZSAoaWYgYXBwbGljYWJsZSlcbiAgICAgKi9cbiAgICBkYXRhRmllbGQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBhcHBseSB0byBlbGVtZW50cyBkYXRhc2V0IChlYWNoIGtleSB3aWxsIGJlIHVzZWQgYXMgYSBkYXRhLWF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudClcbiAgICAgKi9cbiAgICBkYXRhc2V0ID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgLyoqXG4gICAgICogUmVnaW9uIHRvIHdoaWNoIGNvbHVtbnMgYXJlIGFkZGVkIHdoZW4gdGhleSBoYXZlIG5vbmUgc3BlY2lmaWVkXG4gICAgICovXG4gICAgZGVmYXVsdFJlZ2lvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBkZXN0cm95IHRoZSBzdG9yZSB3aGVuIHRoZSBncmlkIGlzIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBkZXN0cm95U3RvcmUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDaGVjayBmb3IgQ1NTIGNvbXBhdGliaWxpdHkgYW5kIGluY2x1c2lvbiByZWxhdGVkIGlzc3VlcyBhbmQgdHJ5IHRvIGF1dG8gZml4IHRoZW0uIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmdcbiAgICAgKiBjaGVja3M6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWFkT25seSkgZXhjZXB0IGEgZGlzYWJsZWQgd2lkZ2V0XG4gICAgICogY2Fubm90IGJlIGZvY3VzZWQsIHVzZXMgYSBkaWZmZXJlbnQgcmVuZGl0aW9uICh1c3VhbGx5IGdyZXlpc2gpIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWxlY3RpbmcgaXRzIHZhbHVlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBkaXNhYmxlZCA/IDogYm9vbGVhbnwnaW5lcnQnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBub3QgZ2V0IGEgd2FybmluZyB3aGVuIGNhbGxpbmcgW2dldFN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2Z1bmN0aW9uLWdldFN0YXRlKSB3aGVuIHRoZXJlIGlzIGEgY29sdW1uXG4gICAgICogY29uZmlndXJlZCB3aXRob3V0IGFuIGBpZGAuIEJ1dCB0aGUgcmVjb21tZW5kZWQgYWN0aW9uIGlzIHRvIGFsd2F5cyBjb25maWd1cmUgY29sdW1ucyB3aXRoIGFuIGBpZGAgd2hlblxuICAgICAqIHVzaW5nIHN0YXRlcy5cbiAgICAgKi9cbiAgICBkaXNhYmxlR3JpZENvbHVtbklkV2FybmluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbm90IGdldCBhIHdhcm5pbmcgd2hlbiB1c2luZyBhbm90aGVyIGJhc2UgY2xhc3MgdGhhbiBHcmlkUm93TW9kZWwgZm9yIHlvdXIgZ3JpZCBkYXRhLiBJZlxuICAgICAqIHlvdSBkbywgYW5kIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBmdWxsIGZlYXR1cmUgc2V0IG9mIHRoZSBncmlkIHRoZW4gaW5jbHVkZSB0aGUgZmllbGRzIGZyb20gR3JpZFJvd01vZGVsXG4gICAgICogaW4geW91ciBtb2RlbCBkZWZpbml0aW9uLlxuICAgICAqL1xuICAgIGRpc2FibGVHcmlkUm93TW9kZWxXYXJuaW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgW3BhbmVsJ3MgXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwpXG4gICAgICogW3N0cmlwcyBjb2xsZWN0aW9uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXN0cmlwcykuIFR5cGljYWwgdmFsdWVzIGZvciB0aGlzIGNvbmZpZyBhcmUgYCd0b3AnYCxcbiAgICAgKiBgJ2JvdHRvbSdgLCBgJ2xlZnQnYCwgb3IgYCdyaWdodCdgLCB3aGljaCBjYXVzZSB0aGUgd2lkZ2V0IHRvIGJlIHBsYWNlZCBvbiB0aGF0IHNpZGUgb2YgdGhlIHBhbmVsJ3NcbiAgICAgKiBib2R5LiBTdWNoIHdpZGdldHMgYXJlIGNhbGxlZCBcImVkZ2Ugc3RyaXBzXCIuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWRvY2spXG4gICAgICovXG4gICAgZG9jayA/IDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0XG4gICAgLyoqXG4gICAgICogTWFrZSB0aGlzIFBhbmVsIGEgZG9ja2VkIGRyYXdlciB3aGljaCBzbGlkZXMgb3V0IGZyb20gb25lIHNpZGUgb2YgdGhlIGJyb3dzZXIgdmlld3BvcnQgYnkgZGVmYXVsdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctZHJhd2VyKVxuICAgICAqIEBwYXJhbSB7J3N0YXJ0JywnbGVmdCcsJ2VuZCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ30gW3NpZGVdIFRoZSBzaWRlIG9mIHRoZSB2aWV3cG9ydCB0byBkb2NrIHRoZSBkcmF3ZXIgdG8uICAqIGAnc3RhcnQnYCBtZWFucyB0aGUgYGlubGluZS1zdGFydGAgc2lkZS4gKiBgJ2VuZCdgIG1lYW5zIHRoZSBgaW5saW5lLWVuZGAgc2lkZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyxudW1iZXJ9IFtzaXplXSBUaGUgc2l6ZSBvZiB0aGUgZHJhd2VyIGluIGl0cyBjb2xsYXBzaWJsZSBheGlzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lubGluZV0gSWYgdXNpbmcgdGhlIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIHRvIHBsYWNlIHRoZSBkcmF3ZXIgaW5zaWRlIGEgaG9zdCB3aWRnZXQsIHRoaXMgbWF5IGJlIHNldCB0byBgdHJ1ZWAgdG8gbWFrZSB0aGUgZHJhd2VyIGlubGluZSB3aXRoaW4gdGhhdCBob3N0LiBOb3RlIHRoYXQsIGlmIHVzaW5nIHRoaXMsIHRoZSBsYXlvdXQgb2YgdGhlIGhvc3QgZWxlbWVudCBtdXN0IGhhdmUgYGZsZXgtZGlyZWN0aW9uYCBzZXQgYXBwcm9wcmlhdGVseS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sb2JqZWN0fSBbYXV0b0Nsb3NlXSBTcGVjaWZpZXMgd2hhdCB1c2VyIGFjdGlvbnMgc2hvdWxkIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGRyYXdlci4gRGVmYXVsdHMgdG8gY2xvc2luZyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIgb3Igd2hlbiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gW2F1dG9DbG9zZS5tb3VzZWRvd25dIElmIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIsIHRoZSBkcmF3ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGhpZGRlbi4gSWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCBpdCBpcyB1c2VkIGFzIGEgQ1NTIHNlbGVjdG9yIHRvIGZpbHRlciBjbGlja3Mgd2hpY2ggc2hvdWxkIGNsb3NlIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gW2F1dG9DbG9zZS5mb2N1c291dF0gSWYgZm9jdXMgbW92ZXMgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLCB0aGUgZHJhd2VyIHdpbGwgYXV0b21hdGljYWxseSBiZSBoaWRkZW4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthdXRvQ2xvc2UubW91c2VvdXRdIEhpZGVzIHRoZSBkcmF3ZXIgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBkcmF3ZXIgYWZ0ZXIgdGhlIGBhdXRvQ2xvc2VEZWxheWAgcGVyaW9kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXV0b0Nsb3NlRGVsYXldIFdoZW4gdXNpbmcgYG1vdXNlb3V0YCwgdGhpcyBpcyB0aGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG4gICAgICovXG4gICAgZHJhd2VyID8gOiBib29sZWFufHsgc2lkZT86ICdzdGFydCd8J2xlZnQnfCdlbmQnfCdyaWdodCd8J3RvcCd8J2JvdHRvbScsIHNpemU/OiBzdHJpbmd8bnVtYmVyLCBpbmxpbmU/OiBib29sZWFuLCBhdXRvQ2xvc2U/OiBib29sZWFufHsgbW91c2Vkb3duPzogYm9vbGVhbnxzdHJpbmcsIGZvY3Vzb3V0PzogYm9vbGVhbnxzdHJpbmcsIG1vdXNlb3V0Pzogc3RyaW5nIH0sIGF1dG9DbG9zZURlbGF5PzogbnVtYmVyIH1cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgc3BlY2lmeWluZyBhdHRyaWJ1dGVzIHRvIGFzc2lnbiB0byB0aGUgcm9vdCBlbGVtZW50IG9mIHRoaXMgd2lkZ2V0LlxuICAgICAqIFNldCBgbnVsbGAgdmFsdWUgdG8gYXR0cmlidXRlIHRvIHJlbW92ZSBpdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctZWxlbWVudEF0dHJpYnV0ZXMpXG4gICAgICovXG4gICAgZWxlbWVudEF0dHJpYnV0ZXMgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ3xudWxsPlxuICAgIC8qKlxuICAgICAqIFRleHQgb3IgSFRNTCwgb3IgYSBbRW1wdHlUZXh0RG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI3R5cGVkZWYtRW1wdHlUZXh0RG9tQ29uZmlnKSBibG9jayB0byBkaXNwbGF5IHdoZW4gdGhlcmUgaXMgbm8gZGF0YSB0byBkaXNwbGF5IGluIHRoZSBncmlkLlxuICAgICAqIFdoZW4gdXNpbmcgbXVsdGlwbGUgR3JpZCByZWdpb25zLCBwcm92aWRlIHRoZSBgcmVnaW9uYCBwcm9wZXJ0eSB0byBkZWNpZGUgd2hlcmUgdGhlIHRleHQgaXMgc2hvd24uXG4gICAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2hvd24gaW4gdGhlIGZpcnN0IHJlZ2lvbi5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctZW1wdHlUZXh0KVxuICAgICAqL1xuICAgIGVtcHR5VGV4dCA/IDogc3RyaW5nfEVtcHR5VGV4dERvbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHRoZSBbU3RpY2t5Q2VsbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3RpY2t5Q2VsbHMpIGZlYXR1cmUsIHdoaWNoIHBpbnMgY2VsbFxuICAgICAqIGNvbnRlbnQgdG8gdGhlIHRvcCBvZiB0aGUgZ3JpZCB3aGlsZSByb3dzIHNjcm9sbCBvZmYgdGhlIHRvcCBidXQgcmVtYWluIHZpc2libGUuXG4gICAgICogQGRlcHJlY2F0ZWQgNy4zLjAgVXNlIGBmZWF0dXJlcyA6IHsgc3RpY2t5Q2VsbHMgOiB0cnVlIH1gIGluc3RlYWRcbiAgICAgKi9cbiAgICBlbmFibGVTdGlja3kgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFsbG93IHRleHQgc2VsZWN0aW9uIGluIHRoZSBncmlkIGNlbGxzLiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGggdGhlXG4gICAgICogYFJvd1Jlb3JkZXJgIGZlYXR1cmUuXG4gICAgICovXG4gICAgZW5hYmxlVGV4dFNlbGVjdGlvbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbGlzdGVuIGZvciBDVFJMLVogKENNRC1aIG9uIE1hYyBPUykga2V5Ym9hcmQgZXZlbnQgYW5kIHRyaWdnZXIgdW5kbyAocmVkbyB3aGVuIFNISUZUIGlzXG4gICAgICogcHJlc3NlZCkuIE9ubHkgYXBwbGljYWJsZSB3aGVuIHVzaW5nIGEgW1N0YXRlVHJhY2tpbmdNYW5hZ2VyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9kYXRhL3N0bS9TdGF0ZVRyYWNraW5nTWFuYWdlcikuXG4gICAgICovXG4gICAgZW5hYmxlVW5kb1JlZG9LZXlzID8gOiBib29sZWFuXG4gICAgZXh0cmFEYXRhID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIHN0cmV0Y2ggdGhlIGxhc3QgY29sdW1uIGluIGEgZ3JpZCB3aXRoIGFsbCBmaXhlZCB3aWR0aCBjb2x1bW5zXG4gICAgICogdG8gZmlsbCBleHRyYSBhdmFpbGFibGUgc3BhY2UgaWYgdGhlIGdyaWQncyB3aWR0aCBpcyB3aWRlciB0aGFuIHRoZSBzdW0gb2YgYWxsXG4gICAgICogY29uZmlndXJlZCBjb2x1bW4gd2lkdGhzLlxuICAgICAqL1xuICAgIGZpbGxMYXN0Q29sdW1uID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVXNlIGZpeGVkIHJvdyBoZWlnaHQuIFNldHRpbmcgdGhpcyB0byBgdHJ1ZWAgd2lsbCBjb25maWd1cmUgdGhlIHVuZGVybHlpbmcgUm93TWFuYWdlciB0byB1c2UgZml4ZWQgcm93XG4gICAgICogaGVpZ2h0LCB3aGljaCBzYWNyaWZpY2VzIHRoZSBhYmlsaXR5IHRvIHVzZSByb3dzIHdpdGggdmFyaWFibGUgaGVpZ2h0IHRvIGdhaW4gYSBmcmFjdGlvbiBiZXR0ZXJcbiAgICAgKiBwZXJmb3JtYW5jZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctZml4ZWRSb3dIZWlnaHQpXG4gICAgICovXG4gICAgZml4ZWRSb3dIZWlnaHQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENvbmZpZyBvYmplY3Qgb2YgYSBmb290ZXIuIE1heSBjb250YWluIGEgYGRvY2tgLCBgaHRtbGAgYW5kIGEgYGNsc2AgcHJvcGVydHkuIEEgZm9vdGVyIGlzIG5vdCBhIHdpZGdldCxcbiAgICAgKiBidXQgcmF0aGVyIHBsYWluIEhUTUwgdGhhdCBmb2xsb3dzIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhbmVsJ3MgYm9keSBhbmQgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1mb290ZXIpXG4gICAgICogQHByb3BlcnR5IHsndG9wJywncmlnaHQnLCdib3R0b20nLCdsZWZ0Jywnc3RhcnQnLCdlbmQnfSBkb2NrIFdoZXJlIHRvIGRvY2tcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gaHRtbCBIdG1sIHRvIHBvcHVsYXRlIHRoZSBmb290ZXIgd2l0aFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbHMgQ1NTIGNsYXNzIHRvIGFkZCB0byB0aGUgZm9vdGVyXG4gICAgICovXG4gICAgZm9vdGVyID8gOiBvYmplY3R8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdoaWNoIG5hbWVzIGZvcm11bGEgcHJlZml4ZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCBjb2x1bW5zIGNvbmZpZ3VyZWQgd2l0aFxuICAgICAqIGBmb3JtdWxhIDogdHJ1ZWAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWZvcm11bGFQcm92aWRlcnMpXG4gICAgICovXG4gICAgZm9ybXVsYVByb3ZpZGVycyA/IDogUmVjb3JkPHN0cmluZywgRm9ybXVsYVByb3ZpZGVyQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIFJlZnJlc2ggZW50aXJlIHJvdyB3aGVuIGEgcmVjb3JkIGNoYW5nZXMgKGB0cnVlYCkgb3IsIGlmIHBvc3NpYmxlLCBvbmx5IHRoZSBjZWxscyBhZmZlY3RlZCAoYGZhbHNlYCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWZ1bGxSb3dSZWZyZXNoKVxuICAgICAqL1xuICAgIGZ1bGxSb3dSZWZyZXNoID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiBjYWxsZWQgZm9yIGVhY2ggcm93IHRvIGRldGVybWluZSBpdHMgaGVpZ2h0LiBJdCBpcyBwYXNzZWQgYSBbcmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9kYXRhL01vZGVsKSBhbmRcbiAgICAgKiBleHBlY3RlZCB0byByZXR1cm4gdGhlIGRlc2lyZWQgaGVpZ2h0IG9mIHRoYXQgcmVjb3JkcyByb3cuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIEdyaWRzXG4gICAgICogY29uZmlndXJlZCBbcm93SGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1yb3dIZWlnaHQpIGlzIHVzZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWdldFJvd0hlaWdodClcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZ2V0Um93SGVpZ2h0LnJlY29yZCBSZWNvcmQgdG8gZGV0ZXJtaW5lIHJvdyBoZWlnaHQgZm9yXG4gICAgICogQHJldHVybnMge251bWJlcn0gRGVzaXJlZCByb3cgaGVpZ2h0XG4gICAgICovXG4gICAgZ2V0Um93SGVpZ2h0ID8gOiAoKSA9PiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBbb2JqZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjdHlwZWRlZi1QYW5lbEhlYWRlcikgZm9yIHRoZSBwYW5lbCdzIGhlYWRlciBvciBhIHN0cmluZyBpbiBwbGFjZSBvZiBhIGB0aXRsZWAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWhlYWRlcilcbiAgICAgKi9cbiAgICBoZWFkZXIgPyA6IHN0cmluZ3xib29sZWFufFBhbmVsSGVhZGVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgaGVpZ2h0LCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS5oZWlnaHRgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIGhlaWdodCBzdHJpbmcgb3IgYSBudW1iZXIsXG4gICAgICogd2hpY2ggd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCBoZWlnaHQsIGJ1dCBpbiBzb21lXG4gICAgICogY2FzZXMgdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICBoZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgd2l0aCB0cnVlIHRvIG1ha2Ugd2lkZ2V0IGluaXRpYWxseSBoaWRkZW4uXG4gICAgICovXG4gICAgaGlkZGVuID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBoaWRlIHRoZSBmb290ZXIgZWxlbWVudHNcbiAgICAgKi9cbiAgICBoaWRlRm9vdGVycyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaGlkZSB0aGUgY29sdW1uIGhlYWRlciBlbGVtZW50c1xuICAgICAqL1xuICAgIGhpZGVIZWFkZXJzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBoaWRlIHRoZSBHcmlkJ3MgaG9yaXpvbnRhbCBzY3JvbGxiYXIocylcbiAgICAgKi9cbiAgICBoaWRlSG9yaXpvbnRhbFNjcm9sbGJhciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgQ1NTIGNsYXNzIHRvIGFkZCB0byBob3ZlcmVkIHJvdyBlbGVtZW50c1xuICAgICAqL1xuICAgIGhvdmVyQ2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBpY29uIHRvIHNob3cgYmVmb3JlIHRoZSBbdGl0bGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctdGl0bGUpLiBFaXRoZXIgcGFzcyBhIENTUyBjbGFzcyBhcyBhIHN0cmluZywgb3IgcGFzcyBhXG4gICAgICogW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgb2JqZWN0IGRlc2NyaWJpbmcgYW4gZWxlbWVudCB0byByZXByZXNlbnQgdGhlIGljb24uXG4gICAgICovXG4gICAgaWNvbiA/IDogc3RyaW5nfERvbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFdpZGdldCBpZCwgaWYgbm90IHNwZWNpZmllZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuIEFsc28gdXNlZCBmb3IgbG9va3VwcyB0aHJvdWdoIFdpZGdldC5nZXRCeUlkXG4gICAgICovXG4gICAgaWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIHdpZGdldHMgcmVhZC1vbmx5IHN0YXRlIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IGl0cyBwYXJlbnQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWlnbm9yZVBhcmVudFJlYWRPbmx5KVxuICAgICAqL1xuICAgIGlnbm9yZVBhcmVudFJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byBhbGlnbiBpbnB1dCBmaWVsZHMgb2YgY2hpbGQgd2lkZ2V0cy4gQnkgZGVmYXVsdCwgdGhlIEZpZWxkIGlucHV0IGVsZW1lbnQgaXNcbiAgICAgKiBwbGFjZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBgbGFiZWxgLiBJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIGlucHV0IGZpZWxkcyBhbGlnbmVkIHRvIHRoZVxuICAgICAqIHJpZ2h0LCBzZXQgdGhpcyBjb25maWcgdG8gYCdlbmQnYC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctaW5wdXRGaWVsZEFsaWduKVxuICAgICAqL1xuICAgIGlucHV0RmllbGRBbGlnbiA/IDogJ3N0YXJ0J3wnZW5kJ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGluc2VydCB0aGlzIHdpZGdldCBiZWZvcmUuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKiA8ZGl2IGNsYXNzPVwibm90ZVwiPldoZW4gY3JlYXRpbmcgbmVzdGVkIHRyZWVzIG9mIHdpZGdldHMsIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0aGUgb3V0ZXJtb3N0IHdpZGdldC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctaW5zZXJ0QmVmb3JlKVxuICAgICAqL1xuICAgIGluc2VydEJlZm9yZSA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0IGVsZW1lbnQgdG8sIGFzIGEgZmlyc3QgY2hpbGQuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKiA8ZGl2IGNsYXNzPVwibm90ZVwiPldoZW4gY3JlYXRpbmcgbmVzdGVkIHRyZWVzIG9mIHdpZGdldHMsIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0aGUgb3V0ZXJtb3N0IHdpZGdldC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctaW5zZXJ0Rmlyc3QpXG4gICAgICovXG4gICAgaW5zZXJ0Rmlyc3QgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNlZSBbS2V5Ym9hcmQgc2hvcnRjdXRzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWQja2V5Ym9hcmQtc2hvcnRjdXRzKSBmb3IgZGV0YWlsc1xuICAgICAqL1xuICAgIGtleU1hcCA/IDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIHNldHRpbmcgdG8gdXNlIHNhbWUgbGFiZWwgcGxhY2VtZW50IG9uIGFsbCBjaGlsZCB3aWRnZXRzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1sYWJlbFBvc2l0aW9uKVxuICAgICAqL1xuICAgIGxhYmVsUG9zaXRpb24gPyA6ICdiZWZvcmUnfCdhYm92ZSd8J2FsaWduLWJlZm9yZSd8J2F1dG8nfG51bGxcbiAgICAvKipcbiAgICAgKiBTZXRzIGBsYWJlbFdpZHRowrQgZm9yIGFsbCBjaGlsZHJlbiBvZiB0aGlzIENvbnRhaW5lciwgdGhhdCBkb2VzIG5vdCBkZWZpbmUgdGhlaXIgb3duIGBsYWJlbFdpZHRoYC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctbGFiZWxXaWR0aClcbiAgICAgKi9cbiAgICBsYWJlbFdpZHRoID8gOiBudW1iZXJ8bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0ZW5lciBzZXQgZm9yIHRoaXMgb2JqZWN0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1saXN0ZW5lcnMpXG4gICAgICovXG4gICAgbGlzdGVuZXJzID8gOiBHcmlkQmFzZUxpc3RlbmVyc1xuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LCBvciBhIG1lc3NhZ2UgdG8gYmUgc2hvd24gd2hlbiBhIHN0b3JlIGlzIHBlcmZvcm1pbmcgYSByZW1vdGVcbiAgICAgKiBvcGVyYXRpb24sIG9yIENydWQgTWFuYWdlciBpcyBsb2FkaW5nIGRhdGEgZnJvbSB0aGUgc2V2ZXIuIFNldCB0byBgbnVsbGAgdG8gZGlzYWJsZSBkZWZhdWx0IGxvYWQgbWFzay5cbiAgICAgKi9cbiAgICBsb2FkTWFzayA/IDogc3RyaW5nfE1hc2tDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0IHRvIGFkanVzdCB0aGUgW21hc2tEZWZhdWx0c10oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbWFza0RlZmF1bHRzKVxuICAgICAqIHdoZW4gZGF0YSBpcyBsb2FkaW5nLiBUaGUgbWVzc2FnZSBhbmQgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmcm9tIHRoZVxuICAgICAqIFtsb2FkTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvbWl4aW4vTG9hZE1hc2thYmxlI2NvbmZpZy1sb2FkTWFzaykgY29uZmlnIHRha2UgcHJpb3JpdHkgb3ZlciB0aGVzZSBvcHRpb25zLCBqdXN0IGFzIHRoZXkgZG9cbiAgICAgKiBmb3IgYG1hc2tEZWZhdWx0c2AsIHJlc3BlY3RpdmVseS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctbG9hZE1hc2tEZWZhdWx0cylcbiAgICAgKi9cbiAgICBsb2FkTWFza0RlZmF1bHRzID8gOiBNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QgdG8gYWRqdXN0IHRoZSBbbWFza0RlZmF1bHRzXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tYXNrRGVmYXVsdHMpXG4gICAgICogd2hlbiBhbiBlcnJvciBvY2N1cnMgbG9hZGluZyBkYXRhLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1sb2FkTWFza0Vycm9yKVxuICAgICAqL1xuICAgIGxvYWRNYXNrRXJyb3IgPyA6IE1hc2tDb25maWd8TWFza3xib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBsb2NhbGl6YXRpb24gb2YgdGhpcyBvYmplY3QuXG4gICAgICovXG4gICAgbG9jYWxpemFibGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaW1lIGluIG1zIHVudGlsIGEgbG9uZ3ByZXNzIGlzIHRyaWdnZXJlZFxuICAgICAqL1xuICAgIGxvbmdQcmVzc1RpbWUgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIG1hcmdpbi4gVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBhIHNpbmdsZSBudW1iZXIgb3IgYSBgVFJCTGAgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyBwaXhlbHMuXG4gICAgICovXG4gICAgbWFyZ2luID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogR3JpZHMgY2hhbmdlIHRoZSBgbWFza0RlZmF1bHRzYCB0byBjb3ZlciBvbmx5IHRoZWlyIGBib2R5YCBlbGVtZW50LlxuICAgICAqL1xuICAgIG1hc2tEZWZhdWx0cyA/IDogTWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYXBwbHkgdGhlIGRlZmF1bHQgbWFzayB0byB0aGUgd2lkZ2V0LiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGNhbiBiZSB0aGUgbWFzayBtZXNzYWdlIG9yIGFcbiAgICAgKiBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgbWFza2VkID8gOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtYXhIZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1oZWlnaHQpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhIZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWF4V2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4V2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBHcmlkJ3MgYG1pbi1oZWlnaHRgLiBEZWZhdWx0cyB0byBgMTBlbWAgdG8gYmUgc3VyZSB0aGF0IHRoZSBHcmlkIGFsd2F5cyBoYXMgYSBoZWlnaHQgd2hlcmV2ZXIgaXQgaXNcbiAgICAgKiBpbnNlcnRlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctbWluSGVpZ2h0KVxuICAgICAqL1xuICAgIG1pbkhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtaW5XaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5XaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIEdyaWQgbW9uaXRvcnMgd2luZG93IHJlc2l6ZSBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIG1vbml0b3JSZXNpemUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHBsdWdpbnMgKGFuIGFycmF5IG9mIGNsYXNzZXMpIGluIGNvbmZpZ1xuICAgICAqL1xuICAgIHBsdWdpbnMgPyA6IEluc3RhbmNlUGx1Z2luW118SW5zdGFuY2VQbHVnaW5cbiAgICAvKipcbiAgICAgKiBUcnVlIHRvIHByZXNlcnZlIGZvY3VzZWQgY2VsbCBhZnRlciBsb2FkaW5nIG5ldyBkYXRhXG4gICAgICovXG4gICAgcHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByZXNlcnZlIHRoZSBncmlkJ3MgdmVydGljYWwgc2Nyb2xsIHBvc2l0aW9uIHdoZW4gY2hhbmdlc2V0cyBhcmUgYXBwbGllZCwgYXMgaW4gdGhlIGNhc2Ugb2YgcmVtb3RlXG4gICAgICogY2hhbmdlcywgb3Igd2hlbiBzdG9yZXMgYXJlIGNvbmZpZ3VyZWQgd2l0aCBbc3luY0RhdGFPbkxvYWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUjY29uZmlnLXN5bmNEYXRhT25Mb2FkKS5cbiAgICAgKi9cbiAgICBwcmVzZXJ2ZVNjcm9sbCA/IDogUHJlc2VydmVTY3JvbGxPcHRpb25zfGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBwcmVzZXJ2ZSB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24gYWZ0ZXIgc3RvcmUgYWN0aW9ucyB0aGF0IHRyaWdnZXIgYSBgcmVmcmVzaGAgZXZlbnQsXG4gICAgICogc3VjaCBhcyBsb2FkaW5nIG5ldyBkYXRhIGFuZCBmaWx0ZXJpbmcuXG4gICAgICovXG4gICAgcHJlc2VydmVTY3JvbGxPbkRhdGFzZXRDaGFuZ2UgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IHRvb2x0aXAgZnJvbSBiZWluZyBkaXNwbGF5ZWQgb24gdG91Y2ggZGV2aWNlcy4gVXNlZnVsIGZvciBleGFtcGxlIGZvciBidXR0b25zIHRoYXQgZGlzcGxheSBhXG4gICAgICogbWVudSBvbiBjbGljayBldGMsIHNpbmNlIHRoZSB0b29sdGlwIHdvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAqL1xuICAgIHByZXZlbnRUb29sdGlwT25Ub3VjaCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbWFrZSB0aGUgZ3JpZCByZWFkLW9ubHksIGJ5IGRpc2FibGluZyBhbnkgVUlzIGZvciBtb2RpZnlpbmcgZGF0YS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWl0aGVyIGEgZGVmYXVsdCBgcmVuZGl0aW9uYCB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cywgb3IgYSBtYXAgb2YgcmVuZGl0aW9ucyBrZXllZCBieSBjaGlsZCB3aWRnZXRcbiAgICAgKiBgdHlwZWAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXJlbmRpdGlvbilcbiAgICAgKi9cbiAgICByZW5kaXRpb24gPyA6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fG51bGxcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBwcm9wZXJ0eSB0byBhbGxvdyB0aGUgd2lkZ2V0L2NvbXBvbmVudCB0byBiZSByZXNpemVkLiBQcmVzc2luZyA8a2JkPlNoaWZ0PC9rYmQ+IHdoaWxlIHJlc2l6aW5nIHdpbGxcbiAgICAgKiBjb25zdHJhaW4gdGhlIGFzcGVjdCByYXRpby5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcmVzaXphYmxlKVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmVzaXphYmxlLm1pbldpZHRoXSBUaGUgbWluaW11bSB3aWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW3Jlc2l6YWJsZS5tYXhXaWR0aF0gVGhlIG1heGltdW0gd2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFtyZXNpemFibGUubWluSGVpZ2h0XSBUaGUgbWluaW11bSBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFtyZXNpemFibGUubWF4SGVpZ2h0XSBUaGUgbWF4aW11bSBoZWlnaHQgb2YgdGhlIGVsZW1lbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gW3Jlc2l6YWJsZS5oYW5kbGVzXSBBbiBvYmplY3QgY29udHJvbGxpbmcgd2hpY2ggZWRnZXMvY29ybmVycyBhcmUgcmVzaXphYmxlLlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLnRvcFN0YXJ0XSBSZXNpemFibGUgZnJvbSB0b3Atc3RhcnQgY29ybmVyXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzaXphYmxlLmhhbmRsZXMudG9wXSBSZXNpemFibGUgZnJvbSB0b3AgZWRnZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLnRvcEVuZF0gUmVzaXphYmxlIGZyb20gdG9wLWVuZCBjb3JuZXJcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNpemFibGUuaGFuZGxlcy5lbmRdIFJlc2l6YWJsZSBmcm9tIGVuZCBlZGdlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzaXphYmxlLmhhbmRsZXMuYm90dG9tRW5kXSBSZXNpemFibGUgZnJvbSBib3R0b20tZW5kIGNvcm5lclxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLmJvdHRvbV0gUmVzaXphYmxlIGZyb20gYm90dG9tIGVkZ2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNpemFibGUuaGFuZGxlcy5ib3R0b21TdGFydF0gUmVzaXphYmxlIGZyb20gYm90dG9tLXN0YXJ0IGNvcm5lclxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLnN0YXJ0XSBSZXNpemFibGUgZnJvbSBzdGFydCBlZGdlXG4gICAgICovXG4gICAgcmVzaXphYmxlID8gOiBib29sZWFufHsgbWluV2lkdGg/OiBudW1iZXIsIG1heFdpZHRoPzogbnVtYmVyLCBtaW5IZWlnaHQ/OiBudW1iZXIsIG1heEhlaWdodD86IG51bWJlciwgaGFuZGxlcz86IHsgdG9wU3RhcnQ/OiBib29sZWFuLCB0b3A/OiBib29sZWFuLCB0b3BFbmQ/OiBib29sZWFuLCBlbmQ/OiBib29sZWFuLCBib3R0b21FbmQ/OiBib29sZWFuLCBib3R0b20/OiBib29sZWFuLCBib3R0b21TdGFydD86IGJvb2xlYW4sIHN0YXJ0PzogYm9vbGVhbiB9IH1cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBvbmx5IG1lYXN1cmUgY2VsbCBjb250ZW50cyB3aGVuIGRvdWJsZS1jbGlja2luZyB0aGUgZWRnZSBiZXR3ZWVuIGNvbHVtbiBoZWFkZXJzLlxuICAgICAqL1xuICAgIHJlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBcIkJyZWFrIHBvaW50c1wiIGZvciB3aGljaCByZXNwb25zaXZlIGNvbmZpZyB0byB1c2UgZm9yIGNvbHVtbnMgYW5kIGNzcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcmVzcG9uc2l2ZUxldmVscylcbiAgICAgKi9cbiAgICByZXNwb25zaXZlTGV2ZWxzID8gOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXJ8c3RyaW5nfFJlc3BvbnNpdmVMZXZlbENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGhhdmUgdGhlIGNvbXBvbmVudCBkaXNwbGF5IGEgdHJhbnNsdWNlbnQgcmlwcGxlIHdoZW4gaXRzXG4gICAgICogW2ZvY3VzRWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1mb2N1c0VsZW1lbnQpLCBvciBbZWxlbWVudF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyB0YXBwZWQgPGVtPmlmIHRoZVxuICAgICAqIGN1cnJlbnQgdGhlbWUgc3VwcG9ydHMgcmlwcGxlczwvZW0+LiBPdXQgb2YgdGhlIGJveCwgb25seSB0aGUgTWF0ZXJpYWwgdGhlbWUgc3VwcG9ydHMgcmlwcGxlcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcmlwcGxlKVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVsZWdhdGVdIEEgQ1NTIHNlbGVjdG9yIHRvIGZpbHRlciB3aGljaCBjaGlsZCBlbGVtZW50cyB0cmlnZ2VyIHJpcHBsZXMuIEJ5IGRlZmF1bHQsIHRoZSByaXBwbGUgaXMgY2xpcHBlZCB0byB0aGUgdHJpZ2dlcmluZyBlbGVtZW50LlxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sb3JdIEEgQ1NTIGNvbG9yIG5hbWUgb3Igc3BlY2lmaWNhdGlvbi5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW3JhZGl1c10gVGhlIGVuZGluZyByYWRpdXMgb2YgdGhlIHJpcHBsZS4gTm90ZSB0aGF0IGl0IHdpbGwgYmUgY2xpcHBlZCBieSB0aGUgdGFyZ2V0IGVsZW1lbnQgYnkgZGVmYXVsdC5cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2NsaXBdIEEgc3RyaW5nIHdoaWNoIGRlc2NyaWJlcyBob3cgdG8gY2xpcCB0aGUgcmlwcGxlIGlmIGl0IGlzIG5vdCB0byBiZSBjbGlwcGVkIHRvIHRoZSBkZWZhdWx0IGVsZW1lbnQuIEVpdGhlciB0aGUgcHJvcGVydHkgb2YgdGhlIHdpZGdldCB0byB1c2UgYXMgdGhlIGNsaXBwaW5nIGVsZW1lbnQsIG9yIGEgc2VsZWN0b3IgdG8gYWxsb3cgY2xpcHBpbmcgdG8gdGhlIGNsb3Nlc3QgbWF0Y2hpbmcgYW5jZXN0b3IgdG8gdGhlIHRhcmdldCBlbGVtZW50LlxuICAgICAqL1xuICAgIHJpcHBsZSA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBUaGUgQVJJQSByb2xlIHRvIGFwcGx5IHRvIHRoaXMgd2lkZ2V0J3MgZWxlbWVudC4gQnkgZGVmYXVsdCwgdGhpcyBpcyBzZXQgdG8gYCdwcmVzZW50YXRpb24nYCB0byBhdm9pZFxuICAgICAqIGFjY2lkZW50YWxseSBhcHBseWluZyBhIHJvbGUgd2hpY2ggbWF5IGludGVyZmVyZSB3aXRoIHNjcmVlbiByZWFkZXJzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1yb2xlKVxuICAgICAqL1xuICAgIHJvbGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIElmIHlvdSBhcmUgcmVuZGVyaW5nIHRoaXMgd2lkZ2V0IHRvIGEgc2hhZG93IHJvb3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IHRoaXMgY29uZmlnIHRvIHRoZSBzaGFkb3dSb290LiBJZiBub3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IGl0IHRvIGBkb2N1bWVudC5ib2R5YFxuICAgICAqL1xuICAgIHJvb3RFbGVtZW50ID8gOiBTaGFkb3dSb290fEhUTUxFbGVtZW50XG4gICAgLyoqXG4gICAgICogUm93IGhlaWdodCBpbiBwaXhlbHMuIFRoaXMgYWxsb3dzIHRoZSBkZWZhdWx0IGhlaWdodCBmb3Igcm93cyB0byBiZSBjb250cm9sbGVkLiBOb3RlIHRoYXQgaXQgbWF5IGJlXG4gICAgICogb3ZlcnJpZGRlbiBieSBzcGVjaWZ5aW5nIGEgW3Jvd0hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZGF0YS9HcmlkUm93TW9kZWwjZmllbGQtcm93SGVpZ2h0KSBvbiBhIHBlciByZWNvcmQgYmFzaXMsIG9yIGZyb21cbiAgICAgKiBhIGNvbHVtbiBbcmVuZGVyZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLXJlbmRlcmVyKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcm93SGVpZ2h0KVxuICAgICAqL1xuICAgIHJvd0hlaWdodCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgcm93IGxpbmVzLiBFbmQgcmVzdWx0IG1pZ2h0IGJlIG92ZXJydWxlZCBieS9kaWZmZXIgYmV0d2VlbiB0aGVtZXMuXG4gICAgICovXG4gICAgcm93TGluZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGB0cnVlYCB0byBtYWtlIHRoZSB3aWRnZXQncyBlbGVtZW50IHVzZSB0aGUgYGRpcmVjdGlvbjpydGxgIHN0eWxlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyB3aGV0aGVyIHRoZSBncmlkIGlzIHNjcm9sbGFibGUgaW4gdGhlIGBZYCBheGlzLiBUaGlzIGlzIHVzZWQgdG8gY29uZmlndXJlIGEgW1Njcm9sbGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvdXRpbC9TY3JvbGxlcikuXG4gICAgICogU2VlIHRoZSBbc2Nyb2xsZXJDbGFzc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc2Nyb2xsZXJDbGFzcykgY29uZmlnIG9wdGlvbi5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc2Nyb2xsYWJsZSlcbiAgICAgKi9cbiAgICBzY3JvbGxhYmxlID8gOiBib29sZWFufFNjcm9sbGVyQ29uZmlnfFNjcm9sbGVyXG4gICAgLyoqXG4gICAgICogVGhlIGNsYXNzIHRvIGluc3RhbnRpYXRlIHRvIHVzZSBhcyB0aGUgW3Njcm9sbGFibGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXNjcm9sbGFibGUpLiBEZWZhdWx0cyB0byBbU2Nyb2xsZXJdKCNDb3JlL2hlbHBlci91dGlsL1Njcm9sbGVyKS5cbiAgICAgKi9cbiAgICBzY3JvbGxlckNsYXNzID8gOiB0eXBlb2YgU2Nyb2xsZXJcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgdGhlIFtTY3JvbGxNYW5hZ2VyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS91dGlsL1Njcm9sbE1hbmFnZXIpIGNsYXNzIG9uIGluaXRpYWxpemF0aW9uLiBSZXR1cm5zIHRoZVxuICAgICAqIFtTY3JvbGxNYW5hZ2VyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS91dGlsL1Njcm9sbE1hbmFnZXIpIGF0IHJ1bnRpbWUuXG4gICAgICovXG4gICAgc2Nyb2xsTWFuYWdlciA/IDogU2Nyb2xsTWFuYWdlckNvbmZpZ3xTY3JvbGxNYW5hZ2VyXG4gICAgLyoqXG4gICAgICogU2VsZWN0aW9uIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGNoYW5nZSB0aGVzZSBwcm9wZXJ0aWVzIHRvIGNvbnRyb2wgaG93IHNlbGVjdGlvbiB3b3JrcyBhbmQgd2hhdCBjYW4gYmVcbiAgICAgKiBzZWxlY3RlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc2VsZWN0aW9uTW9kZSlcbiAgICAgKi9cbiAgICBzZWxlY3Rpb25Nb2RlID8gOiBHcmlkU2VsZWN0aW9uTW9kZVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gaGF2ZSB0aGUgZ3JpZCBzaG93IGEgcmVkIFwiY2hhbmdlZFwiIHRhZyBpbiBjZWxscyB3aG9zZVxuICAgICAqIGZpZWxkIHZhbHVlIGhhcyBjaGFuZ2VkIGFuZCBub3QgeWV0IGJlZW4gY29tbWl0dGVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1zaG93RGlydHkpXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBzaG93RGlydHkuZHVyaW5nRWRpdCBTZXQgdG8gYHRydWVgIHRvIHNob3cgdGhlIHJlZCB0YWcgd2hpbGUgZWRpdGluZyBhIGNlbGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHNob3dEaXJ0eS5uZXdSZWNvcmQgU2V0IHRvIGB0cnVlYCB0byBzaG93IHRoZSByZWQgdGFnIGZvciBhbGwgdGhlIGNlbGxzIG9mIHRoZSBuZXcgcmVjb3JkXG4gICAgICovXG4gICAgc2hvd0RpcnR5ID8gOiBib29sZWFufHsgZHVyaW5nRWRpdDogYm9vbGVhbiwgbmV3UmVjb3JkOiBib29sZWFuIH1cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIGhvdyBtYW55IGNvbHVtbnMgdG8gc3BhbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBzcGFuID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGlzIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc3RhdGVmdWwpXG4gICAgICovXG4gICAgc3RhdGVmdWwgPyA6IGJvb2xlYW58b2JqZWN0fHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50cyB0aGF0LCB3aGVuIGZpcmVkIGJ5IHRoaXMgY29tcG9uZW50LCBzaG91bGQgdHJpZ2dlciBpdCB0byBzYXZlIGl0cyBzdGF0ZSBieSBjYWxsaW5nXG4gICAgICogW3NhdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjZnVuY3Rpb24tc2F2ZVN0YXRlKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc3RhdGVmdWxFdmVudHMpXG4gICAgICovXG4gICAgc3RhdGVmdWxFdmVudHMgPyA6IG9iamVjdHxzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgdG8gdXNlIHdoZW4gc2F2aW5nIHRoaXMgb2JqZWN0J3Mgc3RhdGUgaW4gdGhlIFtzdGF0ZVByb3ZpZGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVQcm92aWRlcikuIElmIHRoaXMgY29uZmlnIGlzXG4gICAgICogbm90IGFzc2lnbmVkLCBhbmQgW3N0YXRlZnVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVmdWwpIGlzIG5vdCBzZXQgdG8gYGZhbHNlYCwgdGhlIFtpZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaWQpXG4gICAgICogKGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkKSB3aWxsIGJlIHVzZWQgYXMgdGhlIGBzdGF0ZUlkYC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc3RhdGVJZClcbiAgICAgKi9cbiAgICBzdGF0ZUlkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgYFN0YXRlUHJvdmlkZXJgIHRvIHVzZSB0byBzYXZlIGFuZCByZXN0b3JlIHRoaXMgb2JqZWN0J3MgW3N0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNwcm9wZXJ0eS1zdGF0ZSkuIEJ5IGRlZmF1bHQsIGBzdGF0ZWBcbiAgICAgKiB3aWxsIGJlIHNhdmVkIHVzaW5nIHRoZSBbZGVmYXVsdCBzdGF0ZSBwcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvc3RhdGUvU3RhdGVQcm92aWRlciNwcm9wZXJ0eS1pbnN0YW5jZS1zdGF0aWMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1zdGF0ZVByb3ZpZGVyKVxuICAgICAqL1xuICAgIHN0YXRlUHJvdmlkZXIgPyA6IFN0YXRlUHJvdmlkZXJcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGlzIHNldHRpbmdzIG9iamVjdCBjb250cm9scyBob3cgZ3JpZCBpcyByZXN0b3JlZCBmcm9tIHN0YXRlIGRhdGEuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXN0YXRlU2V0dGluZ3MpXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzdG9yZVVuY29uZmlndXJlZENvbHVtbnNdIERldGVybWluZXMgd2hldGhlciB0byByZXN0b3JlIGNvbHVtbnMgZnJvbSB0aGUgc3RhdGUgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgZGVmaW5lZCBpbiB0aGUgZ3JpZCBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHN0YXRlU2V0dGluZ3MgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIFN0b3JlIHRoYXQgaG9sZHMgcmVjb3JkcyB0byBkaXNwbGF5IGluIHRoZSBncmlkLCBvciBhIHN0b3JlIGNvbmZpZyBvYmplY3QuIElmIHRoZSBjb25maWd1cmF0aW9uIGNvbnRhaW5zXG4gICAgICogYSBgcmVhZFVybGAsIGFuIGBBamF4U3RvcmVgIHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc3RvcmUpXG4gICAgICovXG4gICAgc3RvcmUgPyA6IFN0b3JlfFN0b3JlQ29uZmlnfEFqYXhTdG9yZXxBamF4U3RvcmVDb25maWdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB3aWRnZXRzIGtleWVkIGJ5IG5hbWUuIEJ5IGRlZmF1bHQgKHdoZW4gbm8gYHR5cGVgIGlzIGdpdmVuKSwgc3RyaXBzIGFyZVxuICAgICAqIFt0b29sYmFyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIpLiBJZiB5b3Ugd2FudCB0byBwYXNzIGFuIGFycmF5LCB5b3UgY2FuIHVzZVxuICAgICAqIHRoZSB0b29sYmFyJ3MgW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcykuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXN0cmlwcylcbiAgICAgKi9cbiAgICBzdHJpcHMgPyA6IFJlY29yZDxzdHJpbmcsIEdyaWRDb250YWluZXJJdGVtQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHN1YiBncmlkIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyBrZXllZCBieSBhIGByZWdpb25gIHByb3BlcnR5LlxuICAgICAqIEJ5IGRlZmF1bHQsIGdyaWQgaGFzIGEgJ2xvY2tlZCcgcmVnaW9uIChpZiBjb25maWd1cmVkIHdpdGggbG9ja2VkIGNvbHVtbnMpIGFuZCBhICdub3JtYWwnIHJlZ2lvbi5cbiAgICAgKiBUaGUgJ25vcm1hbCcgcmVnaW9uIGRlZmF1bHRzIHRvIHVzZSBgZmxleDogMWAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXN1YkdyaWRDb25maWdzKVxuICAgICAqL1xuICAgIHN1YkdyaWRDb25maWdzID8gOiBSZWNvcmQ8c3RyaW5nLCBTdWJHcmlkQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LCBvciBhIG1lc3NhZ2UgdG8gYmUgc2hvd24gd2hlbiBDcnVkIE1hbmFnZXJcbiAgICAgKiBpcyBwZXJzaXN0aW5nIGNoYW5nZXMgb24gdGhlIHNlcnZlci4gU2V0IHRvIGBudWxsYCB0byBkaXNhYmxlIGRlZmF1bHQgc3luYyBtYXNrLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1zeW5jTWFzaylcbiAgICAgKi9cbiAgICBzeW5jTWFzayA/IDogc3RyaW5nfE1hc2tDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEEgY29uZmlndXJhdGlvbiBmb3IgdGhlIFt0YWJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWIpIGNyZWF0ZWQgZm9yIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgcGxhY2VkIGluIGFcbiAgICAgKiBbVGFiUGFuZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctdGFiKVxuICAgICAqL1xuICAgIHRhYiA/IDogYm9vbGVhbnxUYWJDb25maWdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgY29udGFpbmVyIGlzIHVzZWQgYXMgYSB0YWIgaW4gYSBUYWJQYW5lbCwgdGhlc2UgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZVxuICAgICAqIFtUYWJCYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJCYXIpIHdoZW4gdGhpcyBjb250YWluZXIgaXMgdGhlIGFjdGl2ZSB0YWIuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXRhYkJhckl0ZW1zKVxuICAgICAqL1xuICAgIHRhYkJhckl0ZW1zID8gOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIEEgQ29uZmlnIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBbVG9vbGJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIpLFxuICAgICAqIG9yIGFycmF5IG9mIGNvbmZpZyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgY2hpbGQgaXRlbXMgb2YgYSBUb29sYmFyLlxuICAgICAqIFRoaXMgY3JlYXRlcyBhIHRvb2xiYXIgZG9ja2VkIHRvIHRoZSB0b3Agb2YgdGhlIHBhbmVsIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBoZWFkZXIuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXRiYXIpXG4gICAgICovXG4gICAgdGJhciA/IDogKEdyaWRDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEEgdGl0bGUgdG8gZGlzcGxheSBpbiB0aGUgaGVhZGVyIG9yIG93bmluZyBUYWJQYW5lbC4gQ2F1c2VzIGNyZWF0aW9uIGFuZCBkb2NraW5nIG9mIGEgaGVhZGVyXG4gICAgICogdG8gdGhlIHRvcCBpZiBubyBoZWFkZXIgaXMgY29uZmlndXJlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctdGl0bGUpXG4gICAgICovXG4gICAgdGl0bGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBbdG9vbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sKSB0byBhZGQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgYHRpdGxlYCBpbiB0aGUgUGFuZWwgaGVhZGVyLiBFYWNoXG4gICAgICogcHJvcGVydHkgbmFtZSBpcyB0aGUgcmVmZXJlbmNlIGJ5IHdoaWNoIGFuIGluc3RhbnRpYXRlZCB0b29sIG1heSBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgbGl2ZVxuICAgICAqIGBbdG9vbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9Ub29sYWJsZSNwcm9wZXJ0eS10b29scylgIHByb3BlcnR5LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy10b29scylcbiAgICAgKi9cbiAgICB0b29scyA/IDogUmVjb3JkPHN0cmluZywgVG9vbENvbmZpZz58bnVsbFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBVSSB0cmFuc2l0aW9ucyBmb3IgdmFyaW91cyBhY3Rpb25zIGluIHRoZSBncmlkLlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaW5zZXJ0UmVjb3JkIFRyYW5zaXRpb24gcmVjb3JkIGluc2VydGlvbnNcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92ZVJlY29yZCBUcmFuc2l0aW9uIHJlY29yZCByZW1vdmFsc1xuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG9nZ2xlQ29sdW1uIFRyYW5zaXRpb24gY29sdW1uIHZpc2liaWxpdHkgY2hhbmdlc1xuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXhwYW5kQ29sbGFwc2VDb2x1bW4gVHJhbnNpdGlvbiBwYXJlbnQvZ3JvdXAgY29sdW1uIGV4cGFuZC9jb2xsYXBzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG9nZ2xlUmVnaW9uIFRyYW5zaXRpb24gcmVnaW9uIGV4cGFuZC9jb2xsYXBzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG9nZ2xlVHJlZU5vZGUgVHJhbnNpdGlvbiB0cmVlIG5vZGUgZXhwYW5kL2NvbGxhcHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSB0b2dnbGVHcm91cCBUcmFuc2l0aW9uIGdyb3VwIGV4cGFuZC9jb2xsYXBzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmlsdGVyUmVtb3ZhbCBUcmFuc2l0aW9uIHJvdyByZW1vdmFscyBjYXVzZWQgYnkgZmlsdGVyaW5nICh1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zKVxuICAgICAqL1xuICAgIHRyYW5zaXRpb24gPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIEFuaW1hdGlvbiB0cmFuc2l0aW9uIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cbiAgICAgKi9cbiAgICB0cmFuc2l0aW9uRHVyYXRpb24gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3MgbmFtZSBzdWZmaXhlcyB0byBhcHBseSB0byB0aGUgZWxlbWVudHMgcmVuZGVyZWQgYnkgdGhpcyB3aWRnZXQuIFRoaXMgbWF5IGJlIHNwZWNpZmllZFxuICAgICAqIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgYW4gYXJyYXkgb2Ygc3RyaW5ncywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzIHdpdGggdHJ1dGh5XG4gICAgICogdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctdWkpXG4gICAgICovXG4gICAgdWkgPyA6ICdwbGFpbid8J3Rvb2xiYXInfHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBIHdpZGdldHMgd2VpZ2h0IGRldGVybWluZXMgaXRzIHBvc2l0aW9uIGFtb25nIHNpYmxpbmdzIHdoZW4gYWRkZWQgdG8gYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKS5cbiAgICAgKiBIaWdoZXIgd2VpZ2h0cyBnbyBmdXJ0aGVyIGRvd24uXG4gICAgICovXG4gICAgd2VpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyB3aWR0aCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUud2lkdGhgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIHdpZHRoIHN0cmluZyBvciBhIG51bWJlciwgd2hpY2hcbiAgICAgKiB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIHdpZHRoLCBidXQgaW4gc29tZSBjYXNlc1xuICAgICAqIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgd2lkdGggPyA6IHN0cmluZ3xudW1iZXJcblxuICAgIC8vIEZlYXR1cmVzXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIEFJIGFnZW50IGZvciBHcmlkLiBJdCBwcm92aWRlcyBhIGNoYXQgcGFuZWwgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VuZCBtZXNzYWdlcyB0byB0aGVcbiAgICAgKiBhZ2VudCBhbmQgc2VlIHRoZSByZXNwb25zZXMuIFdoaWNoIGFsbG93cyB0aGUgdXNlciB0byB1c2UgbmF0dXJhbCBsYW5ndWFnZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBHcmlkIGluIGRpZmZlcmVudFxuICAgICAqIHdheXMuIEZvciBleGFtcGxlLCB0aGUgdXNlciBjYW4gYXNrIHRoZSBhZ2VudCB0byBmaWx0ZXIgdGhlIGRhdGEsIHNvcnQgaXQsIG9yIHNlbGVjdCBzcGVjaWZpYyByZWNvcmRzLiBUaGUgYWdlbnQgY2FuXG4gICAgICogYWxzbyBwZXJmb3JtIGRhdGEgbWFuaXB1bGF0aW9uIG9wZXJhdGlvbnMgc3VjaCBhcyBhZGRpbmcsIHVwZGF0aW5nLCBkZWxldGluZyByZWNvcmRzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0FJKVxuICAgICAqL1xuICAgIGFpRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEFJfEFJQ29uZmlnXG4gICAgLyoqXG4gICAgICogQUktcG93ZXJlZCBmaWx0ZXIgZmVhdHVyZSBmb3IgR3JpZC4gQWxsb3dzIHVzZXJzIHRvIHR5cGUgbmF0dXJhbCBsYW5ndWFnZSBxdWVyaWVzIHRvIGZpbHRlciBncmlkIGRhdGEuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvYWkvQUlGaWx0ZXIpXG4gICAgICovXG4gICAgYWlGaWx0ZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8QUlGaWx0ZXJ8QUlGaWx0ZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdXNpbmcgYFtDdHJsL0NNRCArIENdYCwgYFtDdHJsL0NNRCArIFhdYCBhbmQgYFtDdHJsL0NNRCArIFZdYCB0byBjdXQsIGNvcHkgYW5kIHBhc3RlIGNlbGwgb3IgY2VsbCByYW5nZXMuIEFsc29cbiAgICAgKiBtYWtlcyBjdXQsIGNvcHkgYW5kIHBhc3RlIGFjdGlvbnMgYXZhaWxhYmxlIHZpYSB0aGUgY2VsbCBjb250ZXh0IG1lbnUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbENvcHlQYXN0ZSlcbiAgICAgKi9cbiAgICBjZWxsQ29weVBhc3RlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxDb3B5UGFzdGV8Q2VsbENvcHlQYXN0ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFkZGluZyB0aGlzIGZlYXR1cmUgdG8gdGhlIGdyaWQgYW5kIG90aGVyIEJyeW50dW0gcHJvZHVjdHMgd2hpY2ggYXJlIGJhc2VkIG9uIHRoZSBHcmlkIChpLmUuIFNjaGVkdWxlciwgU2NoZWR1bGVyUHJvLCBhbmQgR2FudHQpXG4gICAgICogZW5hYmxlcyBjZWxsIGVkaXRpbmcuIEFueSBzdWJjbGFzcyBvZiBbRmllbGRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCkgY2FuIGJlIHVzZWRcbiAgICAgKiBhcyBlZGl0b3IgZm9yIHRoZSBbQ29sdW1uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vQ29sdW1uKS4gVGhlIG1vc3QgcG9wdWxhciBhcmU6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbEVkaXQpXG4gICAgICovXG4gICAgY2VsbEVkaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbEVkaXR8Q2VsbEVkaXRDb25maWdcbiAgICAvKipcbiAgICAgKiBSaWdodCBjbGljayB0byBkaXNwbGF5IGNvbnRleHQgbWVudSBmb3IgY2VsbHMuIFRvIGludm9rZSB0aGUgY2VsbCBtZW51IGluIGEga2V5Ym9hcmQtYWNjZXNzaWJsZSBtYW5uZXIsIHVzZSB0aGVcbiAgICAgKiA8a2JkPlNwYWNlPC9rYmQ+IGtleSB3aGVuIHRoZSBjZWxsIGlzIGZvY3VzZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbE1lbnUpXG4gICAgICovXG4gICAgY2VsbE1lbnVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbE1lbnV8Q2VsbE1lbnVDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIHRvb2x0aXAgd2hlbiBob3ZlcmluZyBjZWxscy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsVG9vbHRpcClcbiAgICAgKi9cbiAgICBjZWxsVG9vbHRpcEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsVG9vbHRpcHxDZWxsVG9vbHRpcENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFkZHMgaW50ZXJhY3RpdmUgY2hhcnRpbmcgdG8gYSBHcmlkLiBbQ2hhcnRzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ2hhcnQvd2lkZ2V0L0NoYXJ0KSBjYW4gYmUgY3JlYXRlZCBmcm9tIGEgc2VsZWN0aW9uIG9mIEdyaWQgZGF0YVxuICAgICAqIGFuZCB1cGRhdGVkIGluIHJlYWx0aW1lIGFzIGRhdGEgY2hhbmdlcy4gU3VwcG9ydHMgbWFueSBjb21tb24gY2hhcnQgdHlwZXMgd2l0aCBleHRlbnNpdmUgc3R5bGluZyBhbmQgY3VzdG9taXphdGlvblxuICAgICAqIG9wdGlvbnMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2hhcnRzKVxuICAgICAqL1xuICAgIGNoYXJ0c0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDaGFydHN8Q2hhcnRzQ29uZmlnXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgW2F1dG9XaWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvY29sdW1uL0NvbHVtbiNjb25maWctYXV0b1dpZHRoKSBjb25maWcgZm9yIGEgZ3JpZCdzIGNvbHVtbnMuIFdoZW4gYSBjb2x1bW5cbiAgICAgKiBoYXMgYGF1dG9XaWR0aGAgc2V0LCB0aGlzIGZlYXR1cmUgbWVhc3VyZXMgdGhlIHJlbmRlcmVkIGNvbnRlbnQgb2YgYWxsIHZpc2libGUgY2VsbHMgaW4gdGhhdCBjb2x1bW5cbiAgICAgKiBhbmQgYWRqdXN0cyB0aGUgY29sdW1uIHdpZHRoIHRvIGZpdC4gVGhlIG1lYXN1cmVtZW50IGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gZGF0YSBjaGFuZ2VzXG4gICAgICogb3Igcm93cyBhcmUgcmVuZGVyZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uQXV0b1dpZHRoKVxuICAgICAqL1xuICAgIGNvbHVtbkF1dG9XaWR0aEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5BdXRvV2lkdGh8Q29sdW1uQXV0b1dpZHRoQ29uZmlnXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSB0b29sYmFyIHdoaWxlIGRyYWdnaW5nIGNvbHVtbiBoZWFkZXJzLiBEcm9wIG9uIGEgYnV0dG9uIGluIHRoZSB0b29sYmFyIHRvIGFjdGl2YXRlIGEgY2VydGFpbiBmdW5jdGlvbixcbiAgICAgKiBmb3IgZXhhbXBsZSB0byBncm91cCBieSB0aGF0IGNvbHVtbi4gVGhpcyBmZWF0dXJlIHNpbXBsaWZpZXMgY2VydGFpbiBvcGVyYXRpb25zIG9uIHRvdWNoIGRldmljZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uRHJhZ1Rvb2xiYXIpXG4gICAgICovXG4gICAgY29sdW1uRHJhZ1Rvb2xiYXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uRHJhZ1Rvb2xiYXJ8Q29sdW1uRHJhZ1Rvb2xiYXJDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIGNvbHVtbiBwaWNrZXIgKHRvIHNob3cvaGlkZSBjb2x1bW5zKSBpbiB0aGUgaGVhZGVyIGNvbnRleHQgbWVudS4gQ29sdW1ucyBjYW4gYmUgZGlzcGxheWVkIGluIHN1YiBtZW51c1xuICAgICAqIGJ5IHJlZ2lvbiBvciB0YWcuIEdyb3VwZWQgaGVhZGVycyBhcmUgZGlzcGxheWVkIGFzIG1lbnUgaGllcmFyY2hpZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUGlja2VyKVxuICAgICAqL1xuICAgIGNvbHVtblBpY2tlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5QaWNrZXJ8Q29sdW1uUGlja2VyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gcmVuYW1lIGNvbHVtbnMgYnkgZWl0aGVyIHJpZ2h0LWNsaWNraW5nIGNvbHVtbiBoZWFkZXIgb3IgdXNpbmcga2V5Ym9hcmQgc2hvcnRjdXRzIHdoZW4gY29sdW1uIGhlYWRlclxuICAgICAqIGlzIGZvY3VzZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUmVuYW1lKVxuICAgICAqL1xuICAgIGNvbHVtblJlbmFtZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZW5hbWV8Q29sdW1uUmVuYW1lQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gcmVvcmRlciBjb2x1bW5zIGJ5IGRyYWdnaW5nIGhlYWRlcnMuIENsaWNrIGFuZCBkcmFnIGEgY29sdW1uIGhlYWRlciB0byBtb3ZlIGl0IHRvIGEgbmV3IHBvc2l0aW9uLlxuICAgICAqIFZpc3VhbCBmZWVkYmFjayBzaG93cyB0aGUgZHJvcCB0YXJnZXQgd2hpbGUgZHJhZ2dpbmcuIFRvIGdldCBub3RpZmllZCBhYm91dCBjb2x1bW4gcmVvcmRlciwgbGlzdGVuIHRvIHRoZVxuICAgICAqIGBjaGFuZ2VgIGV2ZW50IG9uIHRoZSBbY29sdW1uc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZGF0YS9Db2x1bW5TdG9yZSkgc3RvcmUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUmVvcmRlcilcbiAgICAgKi9cbiAgICBjb2x1bW5SZW9yZGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlb3JkZXJ8Q29sdW1uUmVvcmRlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdXNlciB0byByZXNpemUgY29sdW1ucyBieSBkcmFnZ2luZyBhIGhhbmRsZSBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBoZWFkZXIuIEEgZHJhZyBoYW5kbGVcbiAgICAgKiBhcHBlYXJzIHdoZW4gaG92ZXJpbmcgbmVhciB0aGUgcmlnaHQgZWRnZSBvZiBhIGNvbHVtbiBoZWFkZXIuIERyYWdnaW5nIGl0IGFkanVzdHMgdGhlIGNvbHVtbiB3aWR0aCwgcmVzcGVjdGluZ1xuICAgICAqIGFueSBbbWluV2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLW1pbldpZHRoKSBvciBbbWF4V2lkdGhdKCNHcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLW1heFdpZHRoKSBjb25zdHJhaW50cy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Db2x1bW5SZXNpemUpXG4gICAgICovXG4gICAgY29sdW1uUmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlc2l6ZXxDb2x1bW5SZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiBBIGZlYXR1cmUgdGhhdCBhbGxvd3MgZXhwb3J0aW5nIEdyaWQgZGF0YSB0byBFeGNlbCBvciBDU1Ygd2l0aG91dCBpbnZvbHZpbmcgdGhlIHNlcnZlci4gSXQgdXNlc1xuICAgICAqIFtUYWJsZUV4cG9ydGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC91dGlsL1RhYmxlRXhwb3J0ZXIpIGNsYXNzIGFzIGRhdGEgcHJvdmlkZXIsIDNyZCBwYXJ0eSBwcm92aWRlciB0byBnZW5lcmF0ZSBYTFMgZmlsZXMsIGFuZFxuICAgICAqIFtNaWNyb3NvZnQgWE1MIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvb2ZmaWNlL2RvY3VtZW50Zm9ybWF0Lm9wZW54bWwuc3ByZWFkc2hlZXQuYXNweCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvZXhwZXJpbWVudGFsL0V4Y2VsRXhwb3J0ZXIpXG4gICAgICovXG4gICAgZXhjZWxFeHBvcnRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xFeGNlbEV4cG9ydGVyfEV4Y2VsRXhwb3J0ZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBBbiBleHBlcmltZW50YWwgZmVhdHVyZSB0aGF0IGxldHMgdXNlcnMgZHJvcCBmaWxlcyBvbiBhIFdpZGdldC4gVGhlIHdpZGdldCBmaXJlcyBhXG4gICAgICogW2ZpbGVEcm9wXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2V4cGVyaW1lbnRhbC9GaWxlRHJvcCNldmVudC1maWxlRHJvcCkgZXZlbnQgd2hlbiBhIGZpbGUgaXMgZHJvcHBlZCBvbnRvIGl0LiBJbiB0aGUgZXZlbnQsIHlvdSBnZXQgYWNjZXNzIHRvIHRoZSByYXdcbiAgICAgKiBmaWxlcyBhcyBzdHJpbmdzLCB0aGF0IHdlcmUgcGFyc2VkIGJ5IGNhbGxpbmcgYHJlYWRBc0JpbmFyeVN0cmluZ2AuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvZXhwZXJpbWVudGFsL0ZpbGVEcm9wKVxuICAgICAqL1xuICAgIGZpbGVEcm9wRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbGVEcm9wfEZpbGVEcm9wQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGFkZHMgYSBmaWxsIGhhbmRsZSB0byBhIEdyaWQgcmFuZ2Ugc2VsZWN0aW9uLCB3aGljaCB3aGVuIGRyYWdnZWQsIGZpbGxzIHRoZSBjZWxscyBiZWluZyBkcmFnZ2VkIG92ZXJcbiAgICAgKiB3aXRoIHZhbHVlcyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSBvcmlnaW5hbCBzZWxlY3RlZCByYW5nZS4gVGhpcyBpcyBzaW1pbGFyIHRvIGZ1bmN0aW9uYWxpdHkgbm9ybWFsbHkgc2VlbiBpblxuICAgICAqIHZhcmlvdXMgc3ByZWFkc2hlZXQgYXBwbGljYXRpb25zLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0ZpbGxIYW5kbGUpXG4gICAgICovXG4gICAgZmlsbEhhbmRsZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWxsSGFuZGxlfEZpbGxIYW5kbGVDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIGZpbHRlcmluZyBvZiB0aGUgZ3JpZCBieSBzZXR0aW5ncyBmaWx0ZXJzIG9uIGNvbHVtbnMuIFRoZSBhY3R1YWwgZmlsdGVyaW5nIGlzIGRvbmUgYnkgdGhlIHN0b3JlLlxuICAgICAqIEZvciBpbmZvIG9uIHByb2dyYW1tYXRpY2FsbHkgaGFuZGxpbmcgZmlsdGVycywgc2VlIFtTdG9yZUZpbHRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvZGF0YS9taXhpbi9TdG9yZUZpbHRlcikuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvRmlsdGVyKVxuICAgICAqL1xuICAgIGZpbHRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWx0ZXJ8RmlsdGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IGFsbG93cyBmaWx0ZXJpbmcgb2YgdGhlIGdyaWQgYnkgZW50ZXJpbmcgZmlsdGVycyBvbiBjb2x1bW4gaGVhZGVycy5cbiAgICAgKiBUaGUgYWN0dWFsIGZpbHRlcmluZyBpcyBkb25lIGJ5IHRoZSBzdG9yZS5cbiAgICAgKiBGb3IgaW5mbyBvbiBwcm9ncmFtbWF0aWNhbGx5IGhhbmRsaW5nIGZpbHRlcnMsIHNlZSBbU3RvcmVGaWx0ZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvbWl4aW4vU3RvcmVGaWx0ZXIpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0ZpbHRlckJhcilcbiAgICAgKi9cbiAgICBmaWx0ZXJCYXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsdGVyQmFyfEZpbHRlckJhckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgcmVuZGVyaW5nIGFuZCBoYW5kbGluZyBvZiByb3cgZ3JvdXBzLiBUaGUgYWN0dWFsIGdyb3VwaW5nIGlzIGRvbmUgaW4gdGhlIHN0b3JlLCBidXQgdHJpZ2dlcmVkIGJ5XG4gICAgICogPGtiZD5TaGlmdDwva2JkPiArIGNsaWNraW5nIGhlYWRlcnMsIG9yIGJ5IHVzaW5nIHRoZSBjb250ZXh0IG1lbnUsIG9yIGJ5IHVzaW5nIHR3byBmaW5nZXIgdGFwIChvbmUgb24gaGVhZGVyLFxuICAgICAqIG9uZSBhbnl3aGVyZSBvbiBncmlkKS4gVXNlIDxrYmQ+U2hpZnQ8L2tiZD4gKyA8a2JkPkFsdDwva2JkPiArIGNsaWNrLCBvciB0aGUgY29udGV4dCBtZW51LCB0byByZW1vdmUgYSBjb2x1bW5cbiAgICAgKiBncm91cGVyLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0dyb3VwKVxuICAgICAqL1xuICAgIGdyb3VwRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyb3VwfEdyb3VwQ29uZmlnXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBzdW1tYXJ5IHJvdyBhcyBhIGdyb3VwIGZvb3RlciBpbiBhIGdyb3VwZWQgZ3JpZC4gVXNlcyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gY29sdW1ucyBhc1xuICAgICAqIFtTdW1tYXJ5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N1bW1hcnkpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0dyb3VwU3VtbWFyeSlcbiAgICAgKi9cbiAgICBncm91cFN1bW1hcnlGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8R3JvdXBTdW1tYXJ5fEdyb3VwU3VtbWFyeUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFJpZ2h0IGNsaWNrIGNvbHVtbiBoZWFkZXIgb3IgZm9jdXMgaXQgYW5kIHByZXNzIFNQQUNFIGtleSB0byBzaG93IHRoZSBjb250ZXh0IG1lbnUgZm9yIGhlYWRlcnMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvSGVhZGVyTWVudSlcbiAgICAgKi9cbiAgICBoZWFkZXJNZW51RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEhlYWRlck1lbnV8SGVhZGVyTWVudUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBhbGxvd3MgcmVjb3JkcyB3aGljaCBzYXRpc2Z5IGEgY2VydGFpbiBjb25kaXRpb24gdG8gYmUgbG9ja2VkIGF0IHRoZSB0b3Agb2YgdGhlIGdyaWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvTG9ja1Jvd3MpXG4gICAgICovXG4gICAgbG9ja1Jvd3NGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TG9ja1Jvd3N8TG9ja1Jvd3NDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgbWVyZ2VzIGNlbGxzIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBpbiBzb3J0ZWQgKG9yIFtvcHRpb25hbGx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL01lcmdlQ2VsbHMjY29uZmlnLXNvcnRlZE9ubHkpIGFueSkgY29sdW1uc1xuICAgICAqIGNvbmZpZ3VyZWQgdG8gW21lcmdlQ2VsbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLW1lcmdlQ2VsbHMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL01lcmdlQ2VsbHMpXG4gICAgICovXG4gICAgbWVyZ2VDZWxsc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xNZXJnZUNlbGxzfE1lcmdlQ2VsbHNDb25maWdcbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgUERGL1BORyBmaWxlcyBmcm9tIHRoZSBHcmlkIGNvbXBvbmVudC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9leHBvcnQvUGRmRXhwb3J0KVxuICAgICAqL1xuICAgIHBkZkV4cG9ydEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQZGZFeHBvcnR8UGRmRXhwb3J0Q29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHBpbm5pbmcgY29sdW1ucyB0byB0aGUgc3RhcnQgb3IgZW5kIHJlZ2lvbiBvZiB0aGUgZ3JpZCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHN1YkdyaWQgY29uZmlndXJhdGlvbnMuXG4gICAgICogV2hlbiBwaW5uaW5nIHRvIGEgcmVnaW9uIHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LCB0aGUgZmVhdHVyZSBjcmVhdGVzIHRoZSByZXF1aXJlZCBzdWJHcmlkIG9uIHRoZSBmbHkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUGluQ29sdW1ucylcbiAgICAgKi9cbiAgICBwaW5Db2x1bW5zRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBpbkNvbHVtbnN8UGluQ29sdW1uc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyBwcmludGluZyBHcmlkIGNvbnRlbnRzIHVzaW5nIGJyb3dzZXIgcHJpbnQgZGlhbG9nLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2V4cG9ydC9QcmludClcbiAgICAgKi9cbiAgICBwcmludEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQcmludHxQcmludENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VhcmNoIGluIGEgY29sdW1uIGJ5IGZvY3VzaW5nIGEgY2VsbCBhbmQgdHlwaW5nLiBOYXZpZ2F0ZSBiZXR3ZWVuIGhpdHMgdXNpbmcgdGhlXG4gICAgICoga2V5Ym9hcmQsIDxrYmQ+ZjM8L2tiZD4gb3IgPGtiZD5jdHJsPC9rYmQ+LzxrYmQ+Y21kPC9rYmQ+ICsgPGtiZD5nPC9rYmQ+IG1vdmVzIHRvIG5leHQsIGFsc28gcHJlc3NpbmdcbiAgICAgKiA8a2JkPnNoaWZ0PC9rYmQ+IG1vdmVzIHRvIHByZXZpb3VzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1F1aWNrRmluZClcbiAgICAgKi9cbiAgICBxdWlja0ZpbmRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UXVpY2tGaW5kfFF1aWNrRmluZENvbmZpZ1xuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBzcGxpdHRlciBiZXR3ZWVuIGdyaWQgW3NlY3Rpb25zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1N1YkdyaWQpIGRyYWdnYWJsZSwgdG8gbGV0IHVzZXJzIHJlc2l6ZSwgYW5kXG4gICAgICogY29sbGFwc2UvZXhwYW5kIHRoZSBzZWN0aW9ucy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9SZWdpb25SZXNpemUpXG4gICAgICovXG4gICAgcmVnaW9uUmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJlZ2lvblJlc2l6ZXxSZWdpb25SZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvdyB1c2luZyBbQ3RybC9DTUQgKyBDL1hdIGFuZCBbQ3RybC9DTUQgKyBWXSB0byBjb3B5L2N1dC1hbmQtcGFzdGUgcm93cy4gQWxzbyBtYWtlcyBjdXQsIGNvcHkgYW5kIHBhc3RlIGFjdGlvbnNcbiAgICAgKiBhdmFpbGFibGUgdmlhIHRoZSBjZWxsIGNvbnRleHQgbWVudS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dDb3B5UGFzdGUpXG4gICAgICovXG4gICAgcm93Q29weVBhc3RlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0NvcHlQYXN0ZXxSb3dDb3B5UGFzdGVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIGVkaXRpbmcgb2YgZW50aXJlIHJvd3MgaW4gYSBncmlkIGluIGEgZG9ja2VkIHBhbmVsIHdoaWNoIGJ5IGRlZmF1bHQgc2xpZGVzIG91dCBmcm9tIHRoZSByaWdodC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dFZGl0KVxuICAgICAqL1xuICAgIHJvd0VkaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Um93RWRpdHxSb3dFZGl0Q29uZmlnXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBleHBhbmRpbmcgb2YgR3JpZCByb3dzIGJ5IGVpdGhlciByb3cgY2xpY2sgb3IgZG91YmxlIGNsaWNrLCBvciBieSBhZGRpbmcgYSBzZXBhcmF0ZSBHcmlkIGNvbHVtbiB3aGljaCByZW5kZXJzXG4gICAgICogYSBidXR0b24gdGhhdCBleHBhbmRzIG9yIGNvbGxhcHNlcyB0aGUgcm93LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd0V4cGFuZGVyKVxuICAgICAqL1xuICAgIHJvd0V4cGFuZGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0V4cGFuZGVyfFJvd0V4cGFuZGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gcmVvcmRlciByb3dzIGJ5IGRyYWdnaW5nIHRoZW0uIFRvIGdldCBub3RpZmllZCBhYm91dCByb3cgcmVvcmRlciBsaXN0ZW4gdG8gYGNoYW5nZWAgZXZlbnRcbiAgICAgKiBvbiB0aGUgZ3JpZCBbc3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd1Jlb3JkZXIpXG4gICAgICovXG4gICAgcm93UmVvcmRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dSZW9yZGVyfFJvd1Jlb3JkZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHVzZXIgdG8gY2hhbmdlIHJvdyBoZWlnaHQgYnkgZHJhZ2dpbmcgdGhlIGJvdHRvbSByb3cgYm9yZGVyLiBBZnRlciBhIHJlc2l6ZSBvcGVyYXRpb24sIHRoZSBbcm93SGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9kYXRhL0dyaWRSb3dNb2RlbCNmaWVsZC1yb3dIZWlnaHQpXG4gICAgICogZmllbGQgb2YgdGhlIHJlY29yZCBpcyB1cGRhdGVkICh3aGVuIFthcHBseVRvQWxsUm93c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dSZXNpemUjY29uZmlnLWFwcGx5VG9BbGxSb3dzKSBpcyBgZmFsc2VgKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dSZXNpemUpXG4gICAgICovXG4gICAgcm93UmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd1Jlc2l6ZXxSb3dSZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiA8ZGl2IGNsYXNzPVwiZXh0ZXJuYWwtZXhhbXBsZSB2ZXJ0aWNhbFwiIGRhdGEtZmlsZT1cIkdyaWQvZmVhdHVyZS9TZWFyY2guanNcIj48L2Rpdj5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TZWFyY2gpXG4gICAgICovXG4gICAgc2VhcmNoRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNlYXJjaHxTZWFyY2hDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3Mgc29ydGluZyBvZiBncmlkIGJ5IGNsaWNraW5nIChvciB0YXBwaW5nKSBoZWFkZXJzLCBhbHNvIGRpc3BsYXlzIHdoaWNoIGNvbHVtbnMgZ3JpZCBpcyBzb3J0ZWQgYnkgKG51bWJlcmVkIGlmXG4gICAgICogdXNpbmcgbXVsdGlzb3J0KS4gVXNlIG1vZGlmaWVyIGtleXMgZm9yIG11bHRpc29ydGluZzogW0N0cmwvQ01EICsgY2xpY2tdIHRvIGFkZCBzb3J0ZXIsIFtDdHJsL0NNRCArIEFsdCArIGNsaWNrXSB0byByZW1vdmUgc29ydGVyLlxuICAgICAqIFRoZSBhY3R1YWwgc29ydGluZyBpcyBkb25lIGJ5IHRoZSBzdG9yZSwgc2VlIFtTdG9yZS5zb3J0KCldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvbWl4aW4vU3RvcmVTb3J0I2Z1bmN0aW9uLXNvcnQpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1NvcnQpXG4gICAgICovXG4gICAgc29ydEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTb3J0fFNvcnRDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIHNwbGl0dGluZyB0aGUgR3JpZCBpbnRvIG11bHRpcGxlIHZpZXdzLCBlaXRoZXIgYnkgdXNpbmcgdGhlIGNlbGwgY29udGV4dCBtZW51LCBvclxuICAgICAqIHByb2dyYW1tYXRpY2FsbHkgYnkgY2FsbGluZyBbc3BsaXQoKV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TcGxpdCNmdW5jdGlvbi1zcGxpdCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3BsaXQpXG4gICAgICovXG4gICAgc3BsaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3BsaXR8U3BsaXRDb25maWdcbiAgICAvKipcbiAgICAgKiBBIGZlYXR1cmUgd2hpY2ggcGlucyBjZWxsIGNvbnRlbnQgdG8gdGhlIHRvcCBvZiB0aGUgZ3JpZCB3aGlsZSB0aGUgcm93IHNjcm9sbHMgb2ZmIHRoZSB0b3AgYnV0IGlzIHN0aWxsIHZpc2libGUuIFZlcnlcbiAgICAgKiBzaW1pbGFyIHRvIG5hdGl2ZSBgcG9zaXRpb246IHN0aWNreWAsIHdoaWNoIGJlY2F1c2Ugb2YgR3JpZCdzIG11bHRpcGxlLXJlZ2lvbiBzZXR1cCB1bmZvcnR1bmF0ZWx5IGNhbm5vdCBiZSB1c2VkIHRvXG4gICAgICogYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3RpY2t5Q2VsbHMpXG4gICAgICovXG4gICAgc3RpY2t5Q2VsbHNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3RpY2t5Q2VsbHN8U3RpY2t5Q2VsbHNDb25maWdcbiAgICAvKipcbiAgICAgKiBTdHJpcGVzIHJvd3MgYnkgYWRkaW5nIGFsdGVybmF0aW5nIENTUyBjbGFzc2VzIHRvIGFsbCByb3cgZWxlbWVudHMgKGBiLWV2ZW5gIGFuZCBgYi1vZGRgKS5cbiAgICAgKiBUaGlzIGltcHJvdmVzIHZpc3VhbCByZWFkYWJpbGl0eSBpbiBkYXRhLWhlYXZ5IGdyaWRzIGJ5IGdpdmluZyBhZGphY2VudCByb3dzIGRpZmZlcmVudCBiYWNrZ3JvdW5kIGNvbG9ycy5cbiAgICAgKiBTdHlsZSB0aGUgc3RyaXBlZCByb3dzIHVzaW5nIHRoZSBgLmItZXZlbmAgYW5kIGAuYi1vZGRgIENTUyBjbGFzc2VzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N0cmlwZSlcbiAgICAgKi9cbiAgICBzdHJpcGVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3RyaXBlfFN0cmlwZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgc3VtbWFyeSByb3cgaW4gdGhlIGdyaWQgZm9vdGVyLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N1bW1hcnkpXG4gICAgICovXG4gICAgc3VtbWFyeUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdW1tYXJ5fFN1bW1hcnlDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgbWFrZXMgdGhlIGdyaWQgd29yayBtb3JlIGxpa2UgYSB0cmVlLiBJbmNsdWRlZCBieSBkZWZhdWx0IGluIFtUcmVlR3JpZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCkuIFJlcXVpcmVzXG4gICAgICogZXhhY3RseSBvbmUgW1RyZWVDb2x1bW5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9UcmVlQ29sdW1uKSBhbW9uZyBncmlkcyBjb2x1bW5zLiBUaGF0IGNvbHVtbiB3aWxsIGhhdmUgaXRzIHJlbmRlcmVyIHJlcGxhY2VkIHdpdGggYVxuICAgICAqIHRyZWUgcmVuZGVyZXIgdGhhdCBhZGRzIHBhZGRpbmcgYW5kIGljb24gdG8gZ2l2ZSB0aGUgYXBwZWFyYW5jZSBvZiBhIHRyZWUuIFRoZSBvcmlnaW5hbCByZW5kZXJlciBpcyBwcmVzZXJ2ZWQgYW5kXG4gICAgICogYWxzbyBjYWxsZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvVHJlZSlcbiAgICAgKi9cbiAgICB0cmVlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWV8VHJlZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgZmVhdHVyZSB0aGF0IGFsbG93cyB0cmFuc2Zvcm1pbmcgYSBmbGF0IGRhdGFzZXQgKG9yIHRoZSBsZWF2ZXMgb2YgYSBoaWVyYXJjaGljYWwpIGludG8gYSB0cmVlIGJ5IHNwZWNpZnlpbmcgYVxuICAgICAqIHJlY29yZCBmaWVsZCBwZXIgcGFyZW50IGxldmVsLiBQYXJlbnRzIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gZWFjaCBsZWFmJ3MgdmFsdWUgZm9yIHRob3NlIGZpZWxkcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9UcmVlR3JvdXApXG4gICAgICovXG4gICAgdHJlZUdyb3VwRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWVHcm91cHxUcmVlR3JvdXBDb25maWdcblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLWdyaWQtYmFzZScsXG4gICAgdGVtcGxhdGUgOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtR3JpZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlQ2xhc3MgPSBHcmlkQmFzZTtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VOYW1lID0gJ0dyaWRCYXNlJztcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1FdmVudHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAnb25CZWZvcmVDYW5jZWxDZWxsRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUNhbmNlbFJvd0VkaXQnLFxuICAgICAgICAnb25CZWZvcmVDZWxsRWRpdFN0YXJ0JyxcbiAgICAgICAgJ29uQmVmb3JlQ2VsbFJhbmdlRGVsZXRlJyxcbiAgICAgICAgJ29uQmVmb3JlQ2VsbFJhbmdlRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUNvbHVtbkNvbGxhcHNlVG9nZ2xlJyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uRHJvcEZpbmFsaXplJyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uUmVzaXplJyxcbiAgICAgICAgJ29uQmVmb3JlQ29weScsXG4gICAgICAgICdvbkJlZm9yZUNTVkV4cG9ydCcsXG4gICAgICAgICdvbkJlZm9yZURlc3Ryb3knLFxuICAgICAgICAnb25CZWZvcmVFeGNlbEV4cG9ydCcsXG4gICAgICAgICdvbkJlZm9yZUZpbGxIYW5kbGVEcmFnU3RhcnQnLFxuICAgICAgICAnb25CZWZvcmVGaW5pc2hDZWxsRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUZpbmlzaFJvd0VkaXQnLFxuICAgICAgICAnb25CZWZvcmVIaWRlJyxcbiAgICAgICAgJ29uQmVmb3JlUGFzdGUnLFxuICAgICAgICAnb25CZWZvcmVQZGZFeHBvcnQnLFxuICAgICAgICAnb25CZWZvcmVSZW5kZXJSb3cnLFxuICAgICAgICAnb25CZWZvcmVSZW5kZXJSb3dzJyxcbiAgICAgICAgJ29uQmVmb3JlUm93Q29sbGFwc2UnLFxuICAgICAgICAnb25CZWZvcmVSb3dFeHBhbmQnLFxuICAgICAgICAnb25CZWZvcmVTZWxlY3Rpb25DaGFuZ2UnLFxuICAgICAgICAnb25CZWZvcmVTZXRSZWNvcmQnLFxuICAgICAgICAnb25CZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhcnRSb3dFZGl0JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhdGVBcHBseScsXG4gICAgICAgICdvbkJlZm9yZVN0YXRlU2F2ZScsXG4gICAgICAgICdvbkJlZm9yZVRvZ2dsZUdyb3VwJyxcbiAgICAgICAgJ29uQmVmb3JlVG9nZ2xlTm9kZScsXG4gICAgICAgICdvbkNhbmNlbENlbGxFZGl0JyxcbiAgICAgICAgJ29uQ2F0Y2hBbGwnLFxuICAgICAgICAnb25DZWxsQ2xpY2snLFxuICAgICAgICAnb25DZWxsQ29udGV4dE1lbnUnLFxuICAgICAgICAnb25DZWxsRGJsQ2xpY2snLFxuICAgICAgICAnb25DZWxsTWVudUJlZm9yZVNob3cnLFxuICAgICAgICAnb25DZWxsTWVudUl0ZW0nLFxuICAgICAgICAnb25DZWxsTWVudVNob3cnLFxuICAgICAgICAnb25DZWxsTWVudVRvZ2dsZUl0ZW0nLFxuICAgICAgICAnb25DZWxsTW91c2VFbnRlcicsXG4gICAgICAgICdvbkNlbGxNb3VzZUxlYXZlJyxcbiAgICAgICAgJ29uQ2VsbE1vdXNlT3V0JyxcbiAgICAgICAgJ29uQ2VsbE1vdXNlT3ZlcicsXG4gICAgICAgICdvbkNvbGxhcHNlJyxcbiAgICAgICAgJ29uQ29sbGFwc2VOb2RlJyxcbiAgICAgICAgJ29uQ29sdW1uQ29sbGFwc2VUb2dnbGUnLFxuICAgICAgICAnb25Db2x1bW5EcmFnJyxcbiAgICAgICAgJ29uQ29sdW1uRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uQ29sdW1uRHJvcCcsXG4gICAgICAgICdvbkNvbHVtblJlc2l6ZScsXG4gICAgICAgICdvbkNvbHVtblJlc2l6ZVN0YXJ0JyxcbiAgICAgICAgJ29uQ29udGV4dE1lbnVJdGVtJyxcbiAgICAgICAgJ29uQ29udGV4dE1lbnVUb2dnbGVJdGVtJyxcbiAgICAgICAgJ29uQ29weScsXG4gICAgICAgICdvbkRhdGFDaGFuZ2UnLFxuICAgICAgICAnb25EZXN0cm95JyxcbiAgICAgICAgJ29uRGlydHlTdGF0ZUNoYW5nZScsXG4gICAgICAgICdvbkRyYWdTZWxlY3RpbmcnLFxuICAgICAgICAnb25FbGVtZW50Q3JlYXRlZCcsXG4gICAgICAgICdvbkV4cGFuZCcsXG4gICAgICAgICdvbkV4cGFuZE5vZGUnLFxuICAgICAgICAnb25GaWxlRHJvcCcsXG4gICAgICAgICdvbkZpbGxIYW5kbGVCZWZvcmVEcmFnRmluYWxpemUnLFxuICAgICAgICAnb25GaWxsSGFuZGxlRHJhZycsXG4gICAgICAgICdvbkZpbGxIYW5kbGVEcmFnQWJvcnQnLFxuICAgICAgICAnb25GaWxsSGFuZGxlRHJhZ0VuZCcsXG4gICAgICAgICdvbkZpbGxIYW5kbGVEcmFnU3RhcnQnLFxuICAgICAgICAnb25GaW5pc2hDZWxsRWRpdCcsXG4gICAgICAgICdvbkZpbmlzaFJvd0VkaXQnLFxuICAgICAgICAnb25Gb2N1c0luJyxcbiAgICAgICAgJ29uRm9jdXNPdXQnLFxuICAgICAgICAnb25HcmlkUm93QmVmb3JlRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uR3JpZFJvd0JlZm9yZURyb3BGaW5hbGl6ZScsXG4gICAgICAgICdvbkdyaWRSb3dEcmFnJyxcbiAgICAgICAgJ29uR3JpZFJvd0RyYWdBYm9ydCcsXG4gICAgICAgICdvbkdyaWRSb3dEcmFnU3RhcnQnLFxuICAgICAgICAnb25HcmlkUm93RHJvcCcsXG4gICAgICAgICdvbkhlYWRlckNsaWNrJyxcbiAgICAgICAgJ29uSGVhZGVyTWVudUJlZm9yZVNob3cnLFxuICAgICAgICAnb25IZWFkZXJNZW51SXRlbScsXG4gICAgICAgICdvbkhlYWRlck1lbnVTaG93JyxcbiAgICAgICAgJ29uSGVhZGVyTWVudVRvZ2dsZUl0ZW0nLFxuICAgICAgICAnb25IaWRlJyxcbiAgICAgICAgJ29uTG9ja1Jvd3MnLFxuICAgICAgICAnb25Nb3VzZU91dCcsXG4gICAgICAgICdvbk1vdXNlT3ZlcicsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUGFzdGUnLFxuICAgICAgICAnb25QZGZFeHBvcnQnLFxuICAgICAgICAnb25SZWFkT25seScsXG4gICAgICAgICdvblJlY29tcG9zZScsXG4gICAgICAgICdvblJlbmRlclJvdycsXG4gICAgICAgICdvblJlbmRlclJvd3MnLFxuICAgICAgICAnb25SZXNpemUnLFxuICAgICAgICAnb25SZXNwb25zaXZlJyxcbiAgICAgICAgJ29uUm93Q29sbGFwc2UnLFxuICAgICAgICAnb25Sb3dFeHBhbmQnLFxuICAgICAgICAnb25Sb3dNb3VzZUVudGVyJyxcbiAgICAgICAgJ29uUm93TW91c2VMZWF2ZScsXG4gICAgICAgICdvblNjcm9sbCcsXG4gICAgICAgICdvblNlbGVjdGlvbkNoYW5nZScsXG4gICAgICAgICdvblNlbGVjdGlvbk1vZGVDaGFuZ2UnLFxuICAgICAgICAnb25TaG93JyxcbiAgICAgICAgJ29uU3BsaXQnLFxuICAgICAgICAnb25TcGxpdHRlckNvbGxhcHNlQ2xpY2snLFxuICAgICAgICAnb25TcGxpdHRlckRyYWdFbmQnLFxuICAgICAgICAnb25TcGxpdHRlckRyYWdTdGFydCcsXG4gICAgICAgICdvblNwbGl0dGVyRXhwYW5kQ2xpY2snLFxuICAgICAgICAnb25TdGFydENlbGxFZGl0JyxcbiAgICAgICAgJ29uU3RhcnRSb3dFZGl0JyxcbiAgICAgICAgJ29uU3ViR3JpZENvbGxhcHNlJyxcbiAgICAgICAgJ29uU3ViR3JpZEV4cGFuZCcsXG4gICAgICAgICdvblRvZ2dsZUdyb3VwJyxcbiAgICAgICAgJ29uVG9nZ2xlTm9kZScsXG4gICAgICAgICdvblRvb2xDbGljaycsXG4gICAgICAgICdvblRyZWVHcm91cCcsXG4gICAgICAgICdvblVubG9ja1Jvd3MnLFxuICAgICAgICAnb25VbnNwbGl0J1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2FpRmVhdHVyZScsXG4gICAgICAgICdhaUZpbHRlckZlYXR1cmUnLFxuICAgICAgICAnY2VsbENvcHlQYXN0ZUZlYXR1cmUnLFxuICAgICAgICAnY2VsbEVkaXRGZWF0dXJlJyxcbiAgICAgICAgJ2NlbGxNZW51RmVhdHVyZScsXG4gICAgICAgICdjZWxsVG9vbHRpcEZlYXR1cmUnLFxuICAgICAgICAnY2hhcnRzRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5BdXRvV2lkdGhGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtbkRyYWdUb29sYmFyRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5QaWNrZXJGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtblJlbmFtZUZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVvcmRlckZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVzaXplRmVhdHVyZScsXG4gICAgICAgICdleGNlbEV4cG9ydGVyRmVhdHVyZScsXG4gICAgICAgICdmaWxlRHJvcEZlYXR1cmUnLFxuICAgICAgICAnZmlsbEhhbmRsZUZlYXR1cmUnLFxuICAgICAgICAnZmlsdGVyRmVhdHVyZScsXG4gICAgICAgICdmaWx0ZXJCYXJGZWF0dXJlJyxcbiAgICAgICAgJ2dyb3VwRmVhdHVyZScsXG4gICAgICAgICdncm91cFN1bW1hcnlGZWF0dXJlJyxcbiAgICAgICAgJ2hlYWRlck1lbnVGZWF0dXJlJyxcbiAgICAgICAgJ2xvY2tSb3dzRmVhdHVyZScsXG4gICAgICAgICdtZXJnZUNlbGxzRmVhdHVyZScsXG4gICAgICAgICdwZGZFeHBvcnRGZWF0dXJlJyxcbiAgICAgICAgJ3BpbkNvbHVtbnNGZWF0dXJlJyxcbiAgICAgICAgJ3ByaW50RmVhdHVyZScsXG4gICAgICAgICdxdWlja0ZpbmRGZWF0dXJlJyxcbiAgICAgICAgJ3JlZ2lvblJlc2l6ZUZlYXR1cmUnLFxuICAgICAgICAncm93Q29weVBhc3RlRmVhdHVyZScsXG4gICAgICAgICdyb3dFZGl0RmVhdHVyZScsXG4gICAgICAgICdyb3dFeHBhbmRlckZlYXR1cmUnLFxuICAgICAgICAncm93UmVvcmRlckZlYXR1cmUnLFxuICAgICAgICAncm93UmVzaXplRmVhdHVyZScsXG4gICAgICAgICdzZWFyY2hGZWF0dXJlJyxcbiAgICAgICAgJ3NvcnRGZWF0dXJlJyxcbiAgICAgICAgJ3NwbGl0RmVhdHVyZScsXG4gICAgICAgICdzdGlja3lDZWxsc0ZlYXR1cmUnLFxuICAgICAgICAnc3RyaXBlRmVhdHVyZScsXG4gICAgICAgICdzdW1tYXJ5RmVhdHVyZScsXG4gICAgICAgICd0cmVlRmVhdHVyZScsXG4gICAgICAgICd0cmVlR3JvdXBGZWF0dXJlJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtR3JpZEJhc2VDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FuaW1hdGVGaWx0ZXJSZW1vdmFscycsXG4gICAgICAgICdhbmltYXRlUmVtb3ZpbmdSb3dzJyxcbiAgICAgICAgJ2FuaW1hdGVUcmVlTm9kZVRvZ2dsZScsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2F1dG9IZWlnaHQnLFxuICAgICAgICAnYmJhcicsXG4gICAgICAgICdib2R5Q2xzJyxcbiAgICAgICAgJ2JvcmRlcicsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZWxsRWxsaXBzaXMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29sdW1uTGluZXMnLFxuICAgICAgICAnY29sdW1ucycsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQnLFxuICAgICAgICAnZGF0YScsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkZWZhdWx0UmVnaW9uJyxcbiAgICAgICAgJ2Rlc3Ryb3lTdG9yZScsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2Rpc2FibGVHcmlkQ29sdW1uSWRXYXJuaW5nJyxcbiAgICAgICAgJ2Rpc2FibGVHcmlkUm93TW9kZWxXYXJuaW5nJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhd2VyJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2VtcHR5VGV4dCcsXG4gICAgICAgICdlbmFibGVTdGlja3knLFxuICAgICAgICAnZW5hYmxlVGV4dFNlbGVjdGlvbicsXG4gICAgICAgICdlbmFibGVVbmRvUmVkb0tleXMnLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZpbGxMYXN0Q29sdW1uJyxcbiAgICAgICAgJ2ZpeGVkUm93SGVpZ2h0JyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2Zvcm11bGFQcm92aWRlcnMnLFxuICAgICAgICAnZnVsbFJvd1JlZnJlc2gnLFxuICAgICAgICAnZ2V0Um93SGVpZ2h0JyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVGb290ZXJzJyxcbiAgICAgICAgJ2hpZGVIZWFkZXJzJyxcbiAgICAgICAgJ2hpZGVIb3Jpem9udGFsU2Nyb2xsYmFyJyxcbiAgICAgICAgJ2hvdmVyQ2xzJyxcbiAgICAgICAgJ2ljb24nLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2FkTWFzaycsXG4gICAgICAgICdsb2FkTWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ2xvYWRNYXNrRXJyb3InLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9uZ1ByZXNzVGltZScsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAncGx1Z2lucycsXG4gICAgICAgICdwcmVzZXJ2ZUZvY3VzT25EYXRhc2V0Q2hhbmdlJyxcbiAgICAgICAgJ3ByZXNlcnZlU2Nyb2xsJyxcbiAgICAgICAgJ3ByZXNlcnZlU2Nyb2xsT25EYXRhc2V0Q2hhbmdlJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdyZXNpemFibGUnLFxuICAgICAgICAncmVzaXplVG9GaXRJbmNsdWRlc0hlYWRlcicsXG4gICAgICAgICdyZXNwb25zaXZlTGV2ZWxzJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb2xlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3Jvd0hlaWdodCcsXG4gICAgICAgICdyb3dMaW5lcycsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzY3JvbGxlckNsYXNzJyxcbiAgICAgICAgJ3Njcm9sbE1hbmFnZXInLFxuICAgICAgICAnc2VsZWN0aW9uTW9kZScsXG4gICAgICAgICdzaG93RGlydHknLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RhdGVTZXR0aW5ncycsXG4gICAgICAgICdzdG9yZScsXG4gICAgICAgICdzdHJpcHMnLFxuICAgICAgICAnc3ViR3JpZENvbmZpZ3MnLFxuICAgICAgICAnc3luY01hc2snLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhYkJhckl0ZW1zJyxcbiAgICAgICAgJ3RiYXInLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHMnLFxuICAgICAgICAndHJhbnNpdGlvbicsXG4gICAgICAgICd0cmFuc2l0aW9uRHVyYXRpb24nLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2VpZ2h0JyxcbiAgICAgICAgJ3dpZHRoJ1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3NPbmx5OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FuaW1hdGVGaWx0ZXJSZW1vdmFscycsXG4gICAgICAgICdhbmltYXRlUmVtb3ZpbmdSb3dzJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b0hlaWdodCcsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYm9yZGVyJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RlZmF1bHRSZWdpb24nLFxuICAgICAgICAnZGVzdHJveVN0b3JlJyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZUdyaWRDb2x1bW5JZFdhcm5pbmcnLFxuICAgICAgICAnZGlzYWJsZUdyaWRSb3dNb2RlbFdhcm5pbmcnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW5hYmxlU3RpY2t5JyxcbiAgICAgICAgJ2VuYWJsZVRleHRTZWxlY3Rpb24nLFxuICAgICAgICAnZmlsbExhc3RDb2x1bW4nLFxuICAgICAgICAnZml4ZWRSb3dIZWlnaHQnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2Zvcm11bGFQcm92aWRlcnMnLFxuICAgICAgICAnZnVsbFJvd1JlZnJlc2gnLFxuICAgICAgICAnZ2V0Um93SGVpZ2h0JyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoaWRlSG9yaXpvbnRhbFNjcm9sbGJhcicsXG4gICAgICAgICdob3ZlckNscycsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2FkTWFzaycsXG4gICAgICAgICdsb2FkTWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ2xvYWRNYXNrRXJyb3InLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ3BsdWdpbnMnLFxuICAgICAgICAncHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZXNpemFibGUnLFxuICAgICAgICAncmVzaXplVG9GaXRJbmNsdWRlc0hlYWRlcicsXG4gICAgICAgICdyZXNwb25zaXZlTGV2ZWxzJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb2xlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3Njcm9sbGVyQ2xhc3MnLFxuICAgICAgICAnc2Nyb2xsTWFuYWdlcicsXG4gICAgICAgICdzaG93RGlydHknLFxuICAgICAgICAnc3RhdGVmdWwnLFxuICAgICAgICAnc3RhdGVmdWxFdmVudHMnLFxuICAgICAgICAnc3RhdGVJZCcsXG4gICAgICAgICdzdGF0ZVByb3ZpZGVyJyxcbiAgICAgICAgJ3N0cmlwcycsXG4gICAgICAgICdzdWJHcmlkQ29uZmlncycsXG4gICAgICAgICdzeW5jTWFzaycsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiQmFySXRlbXMnLFxuICAgICAgICAndGJhcicsXG4gICAgICAgICd1aScsXG4gICAgICAgICd3ZWlnaHQnXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Qcm9wczogc3RyaW5nW10gPSBCcnludHVtR3JpZEJhc2VDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FuaW1hdGVUcmVlTm9kZVRvZ2dsZScsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NlbGxFbGxpcHNpcycsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb2x1bW5MaW5lcycsXG4gICAgICAgICdjb2x1bW5zJyxcbiAgICAgICAgJ2RhdGEnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdlbXB0eVRleHQnLFxuICAgICAgICAnZW5hYmxlVW5kb1JlZG9LZXlzJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUZvb3RlcnMnLFxuICAgICAgICAnaGlkZUhlYWRlcnMnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xvbmdQcmVzc1RpbWUnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtaW5IZWlnaHQnLFxuICAgICAgICAnbWluV2lkdGgnLFxuICAgICAgICAnb3JpZ2luYWxTdG9yZScsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncHJlc2VydmVTY3JvbGwnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3Jvd0hlaWdodCcsXG4gICAgICAgICdyb3dMaW5lcycsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzZWxlY3RlZENlbGwnLFxuICAgICAgICAnc2VsZWN0ZWRDZWxscycsXG4gICAgICAgICdzZWxlY3RlZFJlY29yZCcsXG4gICAgICAgICdzZWxlY3RlZFJlY29yZHMnLFxuICAgICAgICAnc2VsZWN0ZWRSb3dzJyxcbiAgICAgICAgJ3NlbGVjdGlvbk1vZGUnLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzdGF0ZScsXG4gICAgICAgICdzdGF0ZVNldHRpbmdzJyxcbiAgICAgICAgJ3N0b3JlJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndHJhbnNpdGlvbicsXG4gICAgICAgICd0cmFuc2l0aW9uRHVyYXRpb24nLFxuICAgICAgICAnd2lkdGgnXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICAgcHVibGljIGluc3RhbmNlITogR3JpZEJhc2U7XG5cbiAgICBwcml2YXRlIGJyeW50dW1Db25maWcgPSB7XG4gICAgICAgIGFkb3B0ICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFwcGVuZFRvICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGhyZWYgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFuZ3VsYXJDb21wb25lbnQgOiB0aGlzLFxuICAgICAgICBmZWF0dXJlcyAgICAgICAgIDoge30sXG4gICAgICAgIGxpc3RlbmVycyAgICAgICAgOiB7fVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlncyBvbmx5XG4gICAgQElucHV0KCkgYWRvcHQgICAgICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhbmltYXRlRmlsdGVyUmVtb3ZhbHMgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbmltYXRlUmVtb3ZpbmdSb3dzICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcmlhRGVzY3JpcHRpb24gICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b0hlaWdodCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYmJhciAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChHcmlkQ29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgYm9keUNscyAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgYm9yZGVyICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYnViYmxlRXZlbnRzICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2xsYXBzaWJsZSAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWc7XG4gICAgQElucHV0KCkgY29sb3IgICAgICAgICAgICAgICAgICAgICAgICAgISA6IENvbG9yO1xuICAgIEBJbnB1dCgpIGNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY29udGVudEVsZW1lbnRDbHMgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQgICAgICAgISA6ICdjb250ZXh0bWVudSd8J2NsaWNrJ3wnZGJsY2xpY2snO1xuICAgIEBJbnB1dCgpIGRhdGFGaWVsZCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdFJlZ2lvbiAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZXN0cm95U3RvcmUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlR3JpZENvbHVtbklkV2FybmluZyAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlR3JpZFJvd01vZGVsV2FybmluZyAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRyYXdlciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHsgc2lkZT86ICdzdGFydCd8J2xlZnQnfCdlbmQnfCdyaWdodCd8J3RvcCd8J2JvdHRvbScsIHNpemU/OiBzdHJpbmd8bnVtYmVyLCBpbmxpbmU/OiBib29sZWFuLCBhdXRvQ2xvc2U/OiBib29sZWFufHsgbW91c2Vkb3duPzogYm9vbGVhbnxzdHJpbmcsIGZvY3Vzb3V0PzogYm9vbGVhbnxzdHJpbmcsIG1vdXNlb3V0Pzogc3RyaW5nIH0sIGF1dG9DbG9zZURlbGF5PzogbnVtYmVyIH07XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ3xudWxsPjtcbiAgICBASW5wdXQoKSBlbmFibGVTdGlja3kgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBlbmFibGVUZXh0U2VsZWN0aW9uICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmaWxsTGFzdENvbHVtbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmaXhlZFJvd0hlaWdodCAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmb290ZXIgICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fHN0cmluZztcbiAgICBASW5wdXQoKSBmb3JtdWxhUHJvdmlkZXJzICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgRm9ybXVsYVByb3ZpZGVyQ29uZmlnPjtcbiAgICBASW5wdXQoKSBmdWxsUm93UmVmcmVzaCAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBnZXRSb3dIZWlnaHQgICAgICAgICAgICAgICAgICAhIDogKCkgPT4gbnVtYmVyO1xuICAgIEBJbnB1dCgpIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8Ym9vbGVhbnxQYW5lbEhlYWRlcjtcbiAgICBASW5wdXQoKSBoaWRlSG9yaXpvbnRhbFNjcm9sbGJhciAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBob3ZlckNscyAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGljb24gICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8RG9tQ29uZmlnO1xuICAgIEBJbnB1dCgpIGlnbm9yZVBhcmVudFJlYWRPbmx5ICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGxpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgICEgOiBHcmlkQmFzZUxpc3RlbmVycztcbiAgICBASW5wdXQoKSBsb2FkTWFzayAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfE1hc2tDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSBsb2FkTWFza0RlZmF1bHRzICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBsb2FkTWFza0Vycm9yICAgICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZ3xNYXNrfGJvb2xlYW47XG4gICAgQElucHV0KCkgbG9jYWxpemFibGUgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbWFza0RlZmF1bHRzICAgICAgICAgICAgICAgICAgISA6IE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWFza2VkICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbW9uaXRvclJlc2l6ZSAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcGx1Z2lucyAgICAgICAgICAgICAgICAgICAgICAgISA6IEluc3RhbmNlUGx1Z2luW118SW5zdGFuY2VQbHVnaW47XG4gICAgQElucHV0KCkgcHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZSAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJlc2VydmVTY3JvbGxPbkRhdGFzZXRDaGFuZ2UgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVsYXlTdG9yZUV2ZW50cyAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVzaXphYmxlICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58eyBtaW5XaWR0aD86IG51bWJlciwgbWF4V2lkdGg/OiBudW1iZXIsIG1pbkhlaWdodD86IG51bWJlciwgbWF4SGVpZ2h0PzogbnVtYmVyLCBoYW5kbGVzPzogeyB0b3BTdGFydD86IGJvb2xlYW4sIHRvcD86IGJvb2xlYW4sIHRvcEVuZD86IGJvb2xlYW4sIGVuZD86IGJvb2xlYW4sIGJvdHRvbUVuZD86IGJvb2xlYW4sIGJvdHRvbT86IGJvb2xlYW4sIGJvdHRvbVN0YXJ0PzogYm9vbGVhbiwgc3RhcnQ/OiBib29sZWFuIH0gfTtcbiAgICBASW5wdXQoKSByZXNpemVUb0ZpdEluY2x1ZGVzSGVhZGVyICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlTGV2ZWxzICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgbnVtYmVyfHN0cmluZ3xSZXNwb25zaXZlTGV2ZWxDb25maWc+O1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSByb2xlICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJvb3RFbGVtZW50ICAgICAgICAgICAgICAgICAgICEgOiBTaGFkb3dSb290fEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIHNjcm9sbGVyQ2xhc3MgICAgICAgICAgICAgICAgICEgOiB0eXBlb2YgU2Nyb2xsZXI7XG4gICAgQElucHV0KCkgc2Nyb2xsTWFuYWdlciAgICAgICAgICAgICAgICAgISA6IFNjcm9sbE1hbmFnZXJDb25maWd8U2Nyb2xsTWFuYWdlcjtcbiAgICBASW5wdXQoKSBzaG93RGlydHkgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7IGR1cmluZ0VkaXQ6IGJvb2xlYW4sIG5ld1JlY29yZDogYm9vbGVhbiB9O1xuICAgIEBJbnB1dCgpIHN0YXRlZnVsICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdHxzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBzdGF0ZWZ1bEV2ZW50cyAgICAgICAgICAgICAgICAhIDogb2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlSWQgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3RhdGVQcm92aWRlciAgICAgICAgICAgICAgICAgISA6IFN0YXRlUHJvdmlkZXI7XG4gICAgQElucHV0KCkgc3RyaXBzICAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEdyaWRDb250YWluZXJJdGVtQ29uZmlnPjtcbiAgICBASW5wdXQoKSBzdWJHcmlkQ29uZmlncyAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgU3ViR3JpZENvbmZpZz47XG4gICAgQElucHV0KCkgc3luY01hc2sgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xNYXNrQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgdGFiICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58VGFiQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhYkJhckl0ZW1zICAgICAgICAgICAgICAgICAgICEgOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXTtcbiAgICBASW5wdXQoKSB0YmFyICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogKEdyaWRDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3BsYWluJ3wndG9vbGJhcid8c3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSB3ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gQ29uZmlncyBhbmQgcHJvcGVydGllc1xuICAgIEBJbnB1dCgpIGFsaWduU2VsZiAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFuaW1hdGVUcmVlTm9kZVRvZ2dsZSAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcHBlbmRUbyAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBjYWxsT25GdW5jdGlvbnMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNlbGxFbGxpcHNpcyAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgY29sbGFwc2VkICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbHVtbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNvbHVtbkxpbmVzICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjb2x1bW5zICAgICAgICAgICAgICAgICAgICAgISA6IENvbHVtblN0b3JlfEdyaWRDb2x1bW5Db25maWdbXXxDb2x1bW5TdG9yZUNvbmZpZztcbiAgICBASW5wdXQoKSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdFtdfE1vZGVsW118TW9kZWxDb25maWdbXTtcbiAgICBASW5wdXQoKSBkYXRhc2V0ICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnwnaW5lcnQnO1xuICAgIEBJbnB1dCgpIGVtcHR5VGV4dCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfEVtcHR5VGV4dERvbUNvbmZpZztcbiAgICBASW5wdXQoKSBlbmFibGVVbmRvUmVkb0tleXMgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZXh0cmFEYXRhICAgICAgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgZmxleCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhlaWdodCAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRkZW4gICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUZvb3RlcnMgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVIZWFkZXJzICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbnB1dEZpZWxkQWxpZ24gICAgICAgICAgICAgISA6ICdzdGFydCd8J2VuZCc7XG4gICAgQElucHV0KCkgaW5zZXJ0QmVmb3JlICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgaW5zZXJ0Rmlyc3QgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkga2V5TWFwICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+O1xuICAgIEBJbnB1dCgpIGxhYmVsUG9zaXRpb24gICAgICAgICAgICAgICAhIDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbDtcbiAgICBASW5wdXQoKSBsYWJlbFdpZHRoICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxudWxsO1xuICAgIEBJbnB1dCgpIGxvbmdQcmVzc1RpbWUgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIG1hcmdpbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhIZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWF4V2lkdGggICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5XaWR0aCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgcHJlc2VydmVTY3JvbGwgICAgICAgICAgICAgICEgOiBQcmVzZXJ2ZVNjcm9sbE9wdGlvbnN8Ym9vbGVhbjtcbiAgICBASW5wdXQoKSByZWFkT25seSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVuZGl0aW9uICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPnxudWxsO1xuICAgIEBJbnB1dCgpIHJvd0hlaWdodCAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHJvd0xpbmVzICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBydGwgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2Nyb2xsYWJsZSAgICAgICAgICAgICAgICAgICEgOiBTY3JvbGxlcnxib29sZWFufFNjcm9sbGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGUgICAgICAgICAgICAgICAhIDogR3JpZFNlbGVjdGlvbk1vZGU7XG4gICAgQElucHV0KCkgc3BhbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgc3RhdGVTZXR0aW5ncyAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIHJlc3RvcmVVbmNvbmZpZ3VyZWRDb2x1bW5zPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgc3RvcmUgICAgICAgICAgICAgICAgICAgICAgICEgOiBTdG9yZXxTdG9yZUNvbmZpZ3xBamF4U3RvcmV8QWpheFN0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRpdGxlICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRvb2xzICAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgVG9vbHxUb29sQ29uZmlnPnxudWxsfFJlY29yZDxzdHJpbmcsIFRvb2w+fFJlY29yZDxzdHJpbmcsIFRvb2xDb25maWc+O1xuICAgIEBJbnB1dCgpIHRyYW5zaXRpb24gICAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBpbnNlcnRSZWNvcmQ/OiBib29sZWFuXG4gICAgICAgIHJlbW92ZVJlY29yZD86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlQ29sdW1uPzogYm9vbGVhblxuICAgICAgICBleHBhbmRDb2xsYXBzZUNvbHVtbj86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlUmVnaW9uPzogYm9vbGVhblxuICAgICAgICB0b2dnbGVUcmVlTm9kZT86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlR3JvdXA/OiBib29sZWFuXG4gICAgICAgIGZpbHRlclJlbW92YWw/OiBib29sZWFuXG4gICAgfTtcbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uRHVyYXRpb24gICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9ubHlcbiAgICBASW5wdXQoKSBvcmlnaW5hbFN0b3JlICAgISA6IFN0b3JlO1xuICAgIEBJbnB1dCgpIHBhcmVudCAgICAgICAgICAhIDogV2lkZ2V0O1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ2VsbCAgICAhIDogR3JpZExvY2F0aW9ufEdyaWRMb2NhdGlvbkNvbmZpZztcbiAgICBASW5wdXQoKSBzZWxlY3RlZENlbGxzICAgISA6IEdyaWRMb2NhdGlvbltdfEdyaWRMb2NhdGlvbkNvbmZpZ1tdO1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkUmVjb3JkICAhIDogTW9kZWw7XG4gICAgQElucHV0KCkgc2VsZWN0ZWRSZWNvcmRzICEgOiBNb2RlbFtdfG51bWJlcltdO1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkUm93cyAgICAhIDogTW9kZWxbXXxudW1iZXJbXTtcbiAgICBASW5wdXQoKSBzdGF0ZSAgICAgICAgICAgISA6IEdyaWRTdGF0ZUluZm87XG4gICAgQElucHV0KCkgdG9vbHRpcCAgICAgICAgICEgOiBzdHJpbmd8VG9vbHRpcENvbmZpZztcblxuICAgIC8vIEZlYXR1cmVzXG4gICAgQElucHV0KCkgYWlGZWF0dXJlICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEFJfEFJQ29uZmlnO1xuICAgIEBJbnB1dCgpIGFpRmlsdGVyRmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xBSUZpbHRlcnxBSUZpbHRlckNvbmZpZztcbiAgICBASW5wdXQoKSBjZWxsQ29weVBhc3RlRmVhdHVyZSAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbENvcHlQYXN0ZXxDZWxsQ29weVBhc3RlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNlbGxFZGl0RmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsRWRpdHxDZWxsRWRpdENvbmZpZztcbiAgICBASW5wdXQoKSBjZWxsTWVudUZlYXR1cmUgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbE1lbnV8Q2VsbE1lbnVDb25maWc7XG4gICAgQElucHV0KCkgY2VsbFRvb2x0aXBGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxUb29sdGlwfENlbGxUb29sdGlwQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNoYXJ0c0ZlYXR1cmUgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDaGFydHN8Q2hhcnRzQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbHVtbkF1dG9XaWR0aEZlYXR1cmUgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5BdXRvV2lkdGh8Q29sdW1uQXV0b1dpZHRoQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbHVtbkRyYWdUb29sYmFyRmVhdHVyZSAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5EcmFnVG9vbGJhcnxDb2x1bW5EcmFnVG9vbGJhckNvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5QaWNrZXJGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUGlja2VyfENvbHVtblBpY2tlckNvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5SZW5hbWVGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUmVuYW1lfENvbHVtblJlbmFtZUNvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5SZW9yZGVyRmVhdHVyZSAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUmVvcmRlcnxDb2x1bW5SZW9yZGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbHVtblJlc2l6ZUZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZXNpemV8Q29sdW1uUmVzaXplQ29uZmlnO1xuICAgIEBJbnB1dCgpIGV4Y2VsRXhwb3J0ZXJGZWF0dXJlICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xFeGNlbEV4cG9ydGVyfEV4Y2VsRXhwb3J0ZXJDb25maWc7XG4gICAgQElucHV0KCkgZmlsZURyb3BGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbGVEcm9wfEZpbGVEcm9wQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbGxIYW5kbGVGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWxsSGFuZGxlfEZpbGxIYW5kbGVDb25maWc7XG4gICAgQElucHV0KCkgZmlsdGVyRmVhdHVyZSAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbHRlcnxGaWx0ZXJDb25maWc7XG4gICAgQElucHV0KCkgZmlsdGVyQmFyRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbHRlckJhcnxGaWx0ZXJCYXJDb25maWc7XG4gICAgQElucHV0KCkgZ3JvdXBGZWF0dXJlICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyb3VwfEdyb3VwQ29uZmlnO1xuICAgIEBJbnB1dCgpIGdyb3VwU3VtbWFyeUZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcm91cFN1bW1hcnl8R3JvdXBTdW1tYXJ5Q29uZmlnO1xuICAgIEBJbnB1dCgpIGhlYWRlck1lbnVGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xIZWFkZXJNZW51fEhlYWRlck1lbnVDb25maWc7XG4gICAgQElucHV0KCkgbG9ja1Jvd3NGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfExvY2tSb3dzfExvY2tSb3dzQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1lcmdlQ2VsbHNGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xNZXJnZUNlbGxzfE1lcmdlQ2VsbHNDb25maWc7XG4gICAgQElucHV0KCkgcGRmRXhwb3J0RmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBkZkV4cG9ydHxQZGZFeHBvcnRDb25maWc7XG4gICAgQElucHV0KCkgcGluQ29sdW1uc0ZlYXR1cmUgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBpbkNvbHVtbnN8UGluQ29sdW1uc0NvbmZpZztcbiAgICBASW5wdXQoKSBwcmludEZlYXR1cmUgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UHJpbnR8UHJpbnRDb25maWc7XG4gICAgQElucHV0KCkgcXVpY2tGaW5kRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFF1aWNrRmluZHxRdWlja0ZpbmRDb25maWc7XG4gICAgQElucHV0KCkgcmVnaW9uUmVzaXplRmVhdHVyZSAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJlZ2lvblJlc2l6ZXxSZWdpb25SZXNpemVDb25maWc7XG4gICAgQElucHV0KCkgcm93Q29weVBhc3RlRmVhdHVyZSAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0NvcHlQYXN0ZXxSb3dDb3B5UGFzdGVDb25maWc7XG4gICAgQElucHV0KCkgcm93RWRpdEZlYXR1cmUgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0VkaXR8Um93RWRpdENvbmZpZztcbiAgICBASW5wdXQoKSByb3dFeHBhbmRlckZlYXR1cmUgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Um93RXhwYW5kZXJ8Um93RXhwYW5kZXJDb25maWc7XG4gICAgQElucHV0KCkgcm93UmVvcmRlckZlYXR1cmUgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd1Jlb3JkZXJ8Um93UmVvcmRlckNvbmZpZztcbiAgICBASW5wdXQoKSByb3dSZXNpemVGZWF0dXJlICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Um93UmVzaXplfFJvd1Jlc2l6ZUNvbmZpZztcbiAgICBASW5wdXQoKSBzZWFyY2hGZWF0dXJlICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U2VhcmNofFNlYXJjaENvbmZpZztcbiAgICBASW5wdXQoKSBzb3J0RmVhdHVyZSAgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U29ydHxTb3J0Q29uZmlnO1xuICAgIEBJbnB1dCgpIHNwbGl0RmVhdHVyZSAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTcGxpdHxTcGxpdENvbmZpZztcbiAgICBASW5wdXQoKSBzdGlja3lDZWxsc0ZlYXR1cmUgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3RpY2t5Q2VsbHN8U3RpY2t5Q2VsbHNDb25maWc7XG4gICAgQElucHV0KCkgc3RyaXBlRmVhdHVyZSAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFN0cmlwZXxTdHJpcGVDb25maWc7XG4gICAgQElucHV0KCkgc3VtbWFyeUZlYXR1cmUgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFN1bW1hcnl8U3VtbWFyeUNvbmZpZztcbiAgICBASW5wdXQoKSB0cmVlRmVhdHVyZSAgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VHJlZXxUcmVlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRyZWVHcm91cEZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xUcmVlR3JvdXB8VHJlZUdyb3VwQ29uZmlnO1xuXG4gICAgLy8gRXZlbnRzIGVtaXR0ZXJzXG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgY2VsbCBlZGl0aW5nIGlzIGNhbmNlbGVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGNhbmNlbGxhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2FuY2VsQ2VsbEVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGVkaXRvckNvbnRleHQ6IEdyaWRMb2NhdGlvbiB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIHRoZSByb3cgZWRpdGluZyBpcyBjYW5jZWxlZCwgcmV0dXJuIGZhbHNlIHRvIHNpZ25hbCB0aGF0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGFuZCBlZGl0aW5nIHNob3VsZCBub3QgYmUgZmluYWxpemVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2V2ZW50LWJlZm9yZUNhbmNlbFJvd0VkaXQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge1Jvd0VkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2FuY2VsUm93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IFJvd0VkaXRvckNvbnRleHQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGVkaXRpbmcgc3RhcnRzLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IGVkaXRpbmdcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NlbGxFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNlbGxFZGl0U3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGVkaXRvckNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgZGVsZXRpbmcgYSByYW5nZSBvZiBzZWxlY3RlZCBjZWxsIHZhbHVlcyBieSBwcmVzc2luZyA8a2JkPkJhY2tzcGFjZTwva2JkPiBvciA8a2JkPkRlbGV0ZTwva2JkPlxuICAgICAqIGJ1dHRvbnMgd2hpbGUgW2F1dG9FZGl0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0NlbGxFZGl0I2NvbmZpZy1hdXRvRWRpdCkgaXMgc2V0IHRvIGB0cnVlYC4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBlZGl0aW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7KEdyaWQudXRpbC5HcmlkTG9jYXRpb258Q29yZS5kYXRhLk1vZGVsKVtdfSBldmVudC5ncmlkU2VsZWN0aW9uIEFuIGFycmF5IG9mIGNlbGwgc2VsZWN0b3JzIG9yIHJlY29yZHMgdGhhdCB3aWxsIGhhdmUgdGhlaXIgdmFsdWVzIGRlbGV0ZWQgKHRoZSByZWNvcmRzIHRoZW1zZWx2ZXMgd2lsbCBub3QgZ2V0IGRlbGV0ZWQsIG9ubHkgdmlzaWJsZSBjb2x1bW4gdmFsdWVzKS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDZWxsUmFuZ2VEZWxldGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGdyaWRTZWxlY3Rpb246IChHcmlkTG9jYXRpb258TW9kZWwpW10gfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgZm9yIGVhY2ggc2VsZWN0ZWQgcmVjb3JkIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgZWRpdGluZyBhIHJhbmdlIG9mIHNlbGVjdGVkIGNlbGwgdmFsdWVzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgQ3VycmVudCBzZWxlY3RlZCByZWNvcmQgZnJvbSB0aGUgcmFuZ2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZmllbGQgVGhlIGZpZWxkIGJlaW5nIGNoYW5nZWRcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQudmFsdWUgVGhlIHZhbHVlIGJlaW5nIHNldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNlbGxSYW5nZUVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsLCBmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIGJlZm9yZSBhIHBhcmVudCBjb2x1bW4gaXMgY29sbGFwc2VkIG9yIGV4cGFuZGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZWQgYHRydWVgIGlmIHRoZSBjb2x1bW4gaXMgYmVpbmcgY29sbGFwc2VkLCBgZmFsc2VgIGlmIGV4cGFuZGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ29sdW1uQ29sbGFwc2VUb2dnbGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb2x1bW46IENvbHVtbiwgY29sbGFwc2VkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHByaW9yIHRvIHN0YXJ0aW5nIGEgY29sdW1uIGRyYWcgZ2VzdHVyZS4gVGhlIGRyYWcgaXMgY2FuY2VsZWQgaWYgYSBsaXN0ZW5lciByZXR1cm5zIGBmYWxzZWAuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgYnJvd3NlciBldmVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDb2x1bW5EcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBldmVudDogRXZlbnQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIGEgY29sdW1uIGlzIGRyb3BwZWQsIGFuZCB5b3UgY2FuIHJldHVybiBmYWxzZSBmcm9tIGEgbGlzdGVuZXIgdG8gYWJvcnQgdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGRyYWdnZWQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5pbnNlcnRCZWZvcmUgVGhlIGNvbHVtbiBiZWZvcmUgd2hpY2ggdGhlIGRyYWdnZWQgY29sdW1uIHdpbGwgYmUgaW5zZXJ0ZWQuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50Lm5ld1BhcmVudCBUaGUgbmV3IHBhcmVudCBjb2x1bW4uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnJlZ2lvbiBUaGUgcmVnaW9uIHdoZXJlIHRoZSBjb2x1bW4gd2FzIGRyb3BwZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ29sdW1uRHJvcEZpbmFsaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgaW5zZXJ0QmVmb3JlOiBDb2x1bW4sIG5ld1BhcmVudDogQ29sdW1uLCBldmVudDogRXZlbnQsIHJlZ2lvbjogc3RyaW5nIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgcHJpb3IgdG8gc3RhcnRpbmcgYSBjb2x1bW4gcmVzaXplIGdlc3R1cmUuIFRoZSByZXNpemUgaXMgY2FuY2VsZWQgaWYgYSBsaXN0ZW5lciByZXR1cm5zXG4gICAgICogYGZhbHNlYC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDb2x1bW5SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBkb21FdmVudDogRXZlbnQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBhIGNvcHkgYWN0aW9uIGlzIHBlcmZvcm1lZCwgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LmNlbGxzIFRoZSBjZWxscyBhYm91dCB0byBiZSBjb3BpZWQgb3IgY3V0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmRhdGEgVGhlIHN0cmluZyBkYXRhIGFib3V0IHRvIGJlIGNvcGllZCBvciBjdXRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmlzQ3V0IGB0cnVlYCBpZiB0aGlzIGlzIGEgY3V0IGFjdGlvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5lbnRpdHlOYW1lICdjZWxsJyB0byBkaXN0aW5ndWlzaCB0aGlzIGV2ZW50IGZyb20gb3RoZXIgYmVmb3JlQ29weSBldmVudHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDb3B5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjZWxsczogR3JpZExvY2F0aW9uW10sIGRhdGE6IHN0cmluZywgaXNDdXQ6IGJvb2xlYW4sIGVudGl0eU5hbWU6IHN0cmluZyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgQ1NWIGV4cG9ydCBzdGFydHMuIFJldHVybiBgZmFsc2VgIHRvIGNhbmNlbCB0aGUgZXhwb3J0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0V4cG9ydENvbmZpZ30gZXZlbnQuY29uZmlnIEV4cG9ydCBjb25maWdcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbltdfSBldmVudC5jb2x1bW5zIEFuIGFycmF5IG9mIGNvbHVtbnMgdG8gZXhwb3J0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQucm93cyBBbiBhcnJheSBvZiByZWNvcmRzIHRvIGV4cG9ydFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5saW5lRGVsaW1pdGVyIFRoZSBDU1YgZGVsaW1pdGVyIHRvIHNlcGFyYXRlIGxpbmVzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmNvbHVtbkRlbGltaXRlciBUaGUgQ1NWIGRlbGltaXRlciB0byBzZXBhcmF0ZSB2YWx1ZXMgb24gb25lIGxpbmVcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDU1ZFeHBvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjb25maWc6IEV4cG9ydENvbmZpZywgY29sdW1uczogQ29sdW1uW10sIHJvd3M6IE1vZGVsW10sIGxpbmVEZWxpbWl0ZXI6IHN0cmluZywgY29sdW1uRGVsaW1pdGVyOiBzdHJpbmcgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIEV4Y2VsIGV4cG9ydCBzdGFydHMuIFJldHVybiBgZmFsc2VgIHRvIGNhbmNlbCB0aGUgZXhwb3J0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0V4cG9ydENvbmZpZ30gZXZlbnQuY29uZmlnIEV4cG9ydCBjb25maWdcbiAgICAgKiBAcGFyYW0ge1hMU0NvbHVtbltdfSBldmVudC5jb2x1bW5zIEFuIGFycmF5IG9mIGNvbHVtbnMgdG8gZXhwb3J0XG4gICAgICogQHBhcmFtIHthbnlbXVtdfSBldmVudC5yb3dzIEFuIGFycmF5IG9mIHJlY29yZHMgdG8gZXhwb3J0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRXhjZWxFeHBvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjb25maWc6IEV4cG9ydENvbmZpZywgY29sdW1uczogWExTQ29sdW1uW10sIHJvd3M6IGFueVtdIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBkcmFnZ2luZyBvZiB0aGUgRmlsbEhhbmRsZSBzdGFydHMsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGRyYWcgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmNlbGwgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbHVtbiAvIHJlY29yZFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVGaWxsSGFuZGxlRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2VsbDogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIHRoZSBjZWxsIGVkaXRpbmcgaXMgZmluaXNoZWQsIHJldHVybiBmYWxzZSB0byBzaWduYWwgdGhhdCB0aGUgdmFsdWUgaXMgaW52YWxpZCBhbmQgZWRpdGluZyBzaG91bGQgbm90IGJlIGZpbmFsaXplZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUYXJnZXQgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q2VsbEVkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRmluaXNoQ2VsbEVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgcm93IGVkaXRpbmcgaXMgZmluaXNoZWQsIHJldHVybiBmYWxzZSB0byBzaWduYWwgdGhhdCB0aGUgdmFsdWUgaXMgaW52YWxpZCBhbmQgZWRpdGluZyBzaG91bGQgbm90IGJlIGZpbmFsaXplZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNldmVudC1iZWZvcmVGaW5pc2hSb3dFZGl0KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRhcmdldCBncmlkXG4gICAgICogQHBhcmFtIHtSb3dFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUZpbmlzaFJvd0VkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBSb3dFZGl0b3JDb250ZXh0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBoaWRkZW4uIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIGhpZGRlbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVIaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBhIHBhc3RlIGFjdGlvbiBpcyBwZXJmb3JtZWQsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5jbGlwYm9hcmREYXRhIFRoZSBjbGlwYm9hcmREYXRhIGFib3V0IHRvIGJlIHBhc3RlZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQudGFyZ2V0Q2VsbCBUaGUgY2VsbCBmcm9tIHdoaWNoIHRoZSBwYXN0ZSB3aWxsIGJlIHN0YXJ0ZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIGJlZm9yZVBhc3RlIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC50ZXh0IFRoZSByYXcgdGV4dCBmcm9tIGNsaXBib2FyZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVBhc3RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjbGlwYm9hcmREYXRhOiBzdHJpbmcsIHRhcmdldENlbGw6IEdyaWRMb2NhdGlvbiwgZW50aXR5TmFtZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGV4cG9ydCBzdGFydGVkLiBSZXR1cm4gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGV4cG9ydC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtQZGZFeHBvcnRDb25maWd9IGV2ZW50LmNvbmZpZyBFeHBvcnQgY29uZmlnXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUGRmRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY29uZmlnOiBQZGZFeHBvcnRDb25maWcgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGEgcm93IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5yb3cuUm93fSBldmVudC5yb3cgVGhlIHJvdyBhYm91dCB0byBiZSByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCBmb3IgdGhlIHJvd1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5yZWNvcmRJbmRleCBUaGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgcmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUmVuZGVyUm93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgcm93OiBSb3csIHJlY29yZDogTW9kZWwsIHJlY29yZEluZGV4OiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEdyaWQgcm93cyBhcmUgYWJvdXQgdG8gYmUgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGlzIGdyaWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUmVuZGVyUm93czogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgYmVmb3JlIHJvdyBjb2xsYXBzZSBpcyBzdGFydGVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2V2ZW50LWJlZm9yZVJvd0NvbGxhcHNlKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVJvd0NvbGxhcHNlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgYmVmb3JlIHJvdyBleHBhbmQgaXMgc3RhcnRlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNldmVudC1iZWZvcmVSb3dFeHBhbmQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlUm93RXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSB0aGUgc2VsZWN0aW9uIGNoYW5nZXMuIFJldHVybmluZyBgZmFsc2VgIGZyb20gYSBsaXN0ZW5lciBwcmV2ZW50cyB0aGUgY2hhbmdlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5hY3Rpb24gYCdzZWxlY3QnYC9gJ2Rlc2VsZWN0J2BcbiAgICAgKiBAcGFyYW0geydyb3cnLCdjZWxsJ30gZXZlbnQubW9kZSBgJ3JvdydgL2AnY2VsbCdgXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuZGVzZWxlY3RlZCBUaGUgcmVjb3JkcyB0byBiZSBkZXNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGVkIFRoZSByZWNvcmRzIHRvIGJlIHNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGlvbiBUaGUgcmVjb3JkcyBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24sIGJlZm9yZSBhcHBseWluZyBgc2VsZWN0ZWRgIGFuZCBgZGVzZWxlY3RlZGBcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuZGVzZWxlY3RlZENlbGxzIFRoZSBjZWxscyB0byBiZSBkZXNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5zZWxlY3RlZENlbGxzIFRoZSBjZWxscyB0byBiZSBzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuY2VsbFNlbGVjdGlvbiBUaGUgY2VsbHMgaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBiZWZvcmUgYXBwbHlpbmcgYHNlbGVjdGVkQ2VsbHNgIGFuZCBgZGVzZWxlY3RlZENlbGxzYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNlbGVjdGlvbkNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGFjdGlvbjogc3RyaW5nLCBtb2RlOiAncm93J3wnY2VsbCcsIHNvdXJjZTogR3JpZCwgZGVzZWxlY3RlZDogTW9kZWxbXSwgc2VsZWN0ZWQ6IE1vZGVsW10sIHNlbGVjdGlvbjogTW9kZWxbXSwgZGVzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25bXSwgc2VsZWN0ZWRDZWxsczogR3JpZExvY2F0aW9uW10sIGNlbGxTZWxlY3Rpb246IEdyaWRMb2NhdGlvbltdIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSB0aGlzIGNvbnRhaW5lciB3aWxsIGxvYWQgcmVjb3JkIHZhbHVlcyBpbnRvIGl0cyBjaGlsZCBmaWVsZHMuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdVxuICAgICAqIHdhbnQgdG8gbW9kaWZ5IHRoZSBVSSBiZWZvcmUgZGF0YSBpcyBsb2FkZWQgKGUuZy4gc2V0IHNvbWUgaW5wdXQgZmllbGQgdG8gYmUgcmVhZG9ubHkpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lclxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNldFJlY29yZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ29udGFpbmVyLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIHNob3duLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0LGFueX0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgc2hvd25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXR8YW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBlZGl0aW5nIHN0YXJ0cywgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBlZGl0aW5nXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtSb3dFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXJ0Um93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgc3RhdGUgaXMgYXBwbGllZCB0byB0aGUgc291cmNlLiBBbGxvd3MgZWRpdGluZyB0aGUgc3RhdGUgb2JqZWN0IG9yIHByZXZlbnRpbmcgdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkU3RhdGVJbmZvfSBldmVudC5zdGF0ZSBTdGF0ZSBvYmplY3QgY29uZmlnXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU3RhdGVBcHBseTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHN0YXRlOiBHcmlkU3RhdGVJbmZvIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBzdGF0ZSBpcyBzYXZlZCBieSB0aGUgU3RhdGVQcm92aWRlci4gQWxsb3dzIGVkaXRpbmcgdGhlIHN0YXRlIG9iamVjdCBvciBwcmV2ZW50aW5nIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZFN0YXRlSW5mb30gZXZlbnQuc3RhdGUgU3RhdGUgb2JqZWN0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXRlU2F2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHN0YXRlOiBHcmlkU3RhdGVJbmZvIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBncm91cCBpcyBnb2luZyB0byBiZSBleHBhbmRlZCBvciBjb2xsYXBzZWQgdXNpbmcgdGhlIFVJLlxuICAgICAqIFJldHVybmluZyBgZmFsc2VgIGZyb20gYSBsaXN0ZW5lciBwcmV2ZW50cyB0aGUgb3BlcmF0aW9uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5ncm91cFJlY29yZCBbREVQUkVDQVRFRF0gVXNlIGBncm91cFJlY29yZHNgIHBhcmFtIGluc3RlYWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5ncm91cFJlY29yZHMgVGhlIGdyb3VwIHJlY29yZHMgYmVpbmcgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2UgQ29sbGFwc2VkICh0cnVlKSBvciBleHBhbmRlZCAoZmFsc2UpXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHVzZXIgaW50ZXJhY3Rpb24gZXZlbnQgKGVnIGEgYGNsaWNrYCBldmVudCkgaWYgdGhlIHRvZ2dsZSByZXF1ZXN0IHdhcyBpbnN0aWdhdGVkIGJ5IHVzZXIgaW50ZXJhY3Rpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVG9nZ2xlR3JvdXA6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncm91cFJlY29yZDogTW9kZWwsIGdyb3VwUmVjb3JkczogTW9kZWxbXSwgY29sbGFwc2U6IGJvb2xlYW4sIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgYSBwYXJlbnQgbm9kZSByZWNvcmQgdG9nZ2xlcyBpdHMgY29sbGFwc2VkIHN0YXRlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCBiZWluZyB0b2dnbGVkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2UgYHRydWVgIGlmIHRoZSBub2RlIGlzIGJlaW5nIGNvbGxhcHNlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVUb2dnbGVOb2RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2xsYXBzZTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gZWRpdGluZyBpcyBjYW5jZWxsZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgSW5jbHVkZWQgaWYgdGhlIGNhbmNlbGxhdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IGEgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2FuY2VsQ2VsbEVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGVkaXRvckNvbnRleHQ6IEdyaWRMb2NhdGlvbiwgZXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGFueSBvdGhlciBldmVudCBpcyBmaXJlZCBmcm9tIHRoZSBvYmplY3QuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZXZlbnQtY2F0Y2hBbGwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfX0gZXZlbnQuZXZlbnQgVGhlIE9iamVjdCB0aGF0IGNvbnRhaW5zIGV2ZW50IGRldGFpbHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZXZlbnQudHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhdGNoQWxsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHtba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ30pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHVzZXIgY2xpY2tzIGluIGEgZ3JpZCBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gdG8gd2hpY2ggdGhlIGNlbGwgYmVsb25nc1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdXNlciBhY3RpdmF0ZXMgY29udGV4dG1lbnUgaW4gYSBncmlkIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiB0byB3aGljaCB0aGUgY2VsbCBiZWxvbmdzXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsQ29udGV4dE1lbnU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIGRvdWJsZSBjbGlja3MgYSBncmlkIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiB0byB3aGljaCB0aGUgY2VsbCBiZWxvbmdzXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsRGJsQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIGdyaWQgYmVmb3JlIHRoZSBjb250ZXh0IG1lbnUgaXMgc2hvd24gZm9yIGEgY2VsbC5cbiAgICAgKiBBbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBpdGVtcyB0byBzaG93IGluIHRoZSBzYW1lIHdheSBhcyBpbiB0aGUgW3Byb2Nlc3NJdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsTWVudSNjb25maWctcHJvY2Vzc0l0ZW1zKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNldmVudC1jZWxsTWVudUJlZm9yZVNob3cpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNZW51QmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiwgcmVjb3JkOiBNb2RlbCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgZ3JpZCB3aGVuIGFuIGl0ZW0gaXMgc2VsZWN0ZWQgaW4gdGhlIGNlbGwgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTWVudUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtLCBjb2x1bW46IENvbHVtbiwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIGdyaWQgYWZ0ZXIgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSBjZWxsLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+fSBldmVudC5pdGVtcyBNZW51IGl0ZW0gY29uZmlnc1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTWVudVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5PiwgY29sdW1uOiBDb2x1bW4sIHJlY29yZDogTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBncmlkIHdoZW4gYSBjaGVjayBpdGVtIGlzIHRvZ2dsZWQgaW4gdGhlIGNlbGwgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNoZWNrZWQgQ2hlY2tlZCBvciBub3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTWVudVRvZ2dsZUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtLCBjb2x1bW46IENvbHVtbiwgcmVjb3JkOiBNb2RlbCwgY2hlY2tlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbW91c2UgZW50ZXJzIGEgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSBob3ZlcmVkIGNlbGxcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gY3VycmVudGx5IGhvdmVyZWRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1vdXNlRW50ZXI6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtb3VzZSBsZWF2ZXMgYSBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIGNlbGwgdGhhdCB0aGUgbW91c2UgbGVmdFxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiByZXByZXNlbnRpbmcgdGhlIGNlbGwgdGhhdCB0aGUgbW91c2UgbGVmdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudCB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNb3VzZUxlYXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHVzZXIgbW92ZXMgdGhlIG1vdXNlIG91dCBvZiBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNb3VzZU91dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHVzZXIgbW92ZXMgdGhlIG1vdXNlIG92ZXIgYSBncmlkIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiB0byB3aGljaCB0aGUgY2VsbCBiZWxvbmdzXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTW91c2VPdmVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBQYW5lbCBpcyBjb2xsYXBzZWQgdXNpbmcgdGhlIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFBhbmVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgYSBwYXJlbnQgbm9kZSByZWNvcmQgaXMgY29sbGFwc2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCB3aGljaCBoYXMgYmVlbiBjb2xsYXBzZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sbGFwc2VOb2RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBhZnRlciBhIHBhcmVudCBjb2x1bW4gaGFzIGJlZW4gY29sbGFwc2VkIG9yIGV4cGFuZGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIGJlaW5nIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbGxhcHNlZCBgdHJ1ZWAgaWYgdGhlIGNvbHVtbiBpcyBub3cgY29sbGFwc2VkLCBgZmFsc2VgIGlmIGV4cGFuZGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uQ29sbGFwc2VUb2dnbGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb2x1bW46IENvbHVtbiwgY29sbGFwc2VkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjb2x1bW4gaXMgYmVpbmcgZHJhZ2dlZCwgYW5kIHlvdSBjYW4gc2V0IHRoZSBgdmFsaWRgIGZsYWcgb24gdGhlIGBjb250ZXh0YCBvYmplY3RcbiAgICAgKiB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIGlzIHZhbGlkIG9yIG5vdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGRyYWdnZWQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5pbnNlcnRCZWZvcmUgVGhlIGNvbHVtbiBiZWZvcmUgd2hpY2ggdGhlIGRyYWdnZWQgY29sdW1uIHdpbGwgYmUgaW5zZXJ0ZWQgKGlmIG5vdCBsYXN0KS5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgYnJvd3NlciBldmVudC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC52YWxpZCBTZXQgdGhpcyB0byBgdHJ1ZWAgb3IgYGZhbHNlYCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIGlzIHZhbGlkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtbkRyYWc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBpbnNlcnRCZWZvcmU6IENvbHVtbiwgZXZlbnQ6IEV2ZW50LCBjb250ZXh0OiB7IHZhbGlkOiBib29sZWFuIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGNvbHVtbiBkcmFnIGdlc3R1cmUgaGFzIHN0YXJ0ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5ldmVudCBUaGUgYnJvd3NlciBldmVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2x1bW5EcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgYWx3YXlzIGZpcmVkIGFmdGVyIGEgY29sdW1uIGlzIGRyb3BwZWQuIFRoZSBgdmFsaWRgIHBhcmFtIGlzIGB0cnVlYCBpZiB0aGUgb3BlcmF0aW9uIHdhcyBub3RcbiAgICAgKiB2ZXRvZWQgYW5kIHRoZSBjb2x1bW4gd2FzIG1vdmVkIGluIHRoZSBjb2x1bW4gc3RvcmUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuaW5zZXJ0QmVmb3JlIFRoZSBjb2x1bW4gYmVmb3JlIHdoaWNoIHRoZSBkcmFnZ2VkIGNvbHVtbiB3aWxsIGJlIGluc2VydGVkLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5uZXdQYXJlbnQgVGhlIG5ldyBwYXJlbnQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudmFsaWQgYHRydWVgIGlmIHRoZSBvcGVyYXRpb24gd2FzIG5vdCB2ZXRvZWQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnJlZ2lvbiBUaGUgcmVnaW9uIHdoZXJlIHRoZSBjb2x1bW4gd2FzIGRyb3BwZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uRHJvcDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGluc2VydEJlZm9yZTogQ29sdW1uLCBuZXdQYXJlbnQ6IENvbHVtbiwgdmFsaWQ6IGJvb2xlYW4sIGV2ZW50OiBFdmVudCwgcmVnaW9uOiBzdHJpbmcgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBhIHJlc2l6ZSBnZXN0dXJlIGlzIGNvbXBsZXRlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgcmVzaXplZCBjb2x1bW5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtblJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGRvbUV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIGEgY29sdW1uIHJlc2l6ZSBnZXN0dXJlIHN0YXJ0cy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2x1bW5SZXNpemVTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGRvbUV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIHdpZGdldCB3aGVuIGFuIGl0ZW0gaXMgc2VsZWN0ZWQgaW4gdGhlIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgb3duaW5nIHdpZGdldFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29udGV4dE1lbnVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgd2lkZ2V0IHdoZW4gYSBjaGVjayBpdGVtIGlzIHRvZ2dsZWQgaW4gdGhlIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgb3duaW5nIHdpZGdldFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGVja2VkIENoZWNrZWQgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29udGV4dE1lbnVUb2dnbGVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtLCBjaGVja2VkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYWZ0ZXIgYSBjb3B5IGFjdGlvbiBpcyBwZXJmb3JtZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LmNlbGxzIFRoZSBjZWxscyBhYm91dCB0byBiZSBjb3BpZWQgb3IgY3V0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmNvcGllZERhdGFTdHJpbmcgVGhlIGNvbmNhdGVuYXRlZCBkYXRhIHN0cmluZyB0aGF0IHdhcyBjb3BpZWQgb3IgY3V0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5pc0N1dCBgdHJ1ZWAgaWYgdGhpcyB3YXMgYSBjdXQgYWN0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmVudGl0eU5hbWUgJ2NlbGwnIHRvIGRpc3Rpbmd1aXNoIHRoaXMgZXZlbnQgZnJvbSBvdGhlciBjb3B5IGV2ZW50c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvcHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNlbGxzOiBHcmlkTG9jYXRpb25bXSwgY29waWVkRGF0YVN0cmluZzogc3RyaW5nLCBpc0N1dDogYm9vbGVhbiwgZW50aXR5TmFtZTogc3RyaW5nIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGRhdGEgaW4gdGhlIHN0b3JlIGNoYW5nZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZXZlbnQtZGF0YUNoYW5nZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBPd25pbmcgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLlN0b3JlfSBldmVudC5zdG9yZSBUaGUgb3JpZ2luYXRpbmcgc3RvcmVcbiAgICAgKiBAcGFyYW0geydyZW1vdmUnLCdyZW1vdmVBbGwnLCdhZGQnLCdjbGVhcmNoYW5nZXMnLCdmaWx0ZXInLCd1cGRhdGUnLCdkYXRhc2V0JywncmVwbGFjZSd9IGV2ZW50LmFjdGlvbiBOYW1lIG9mIGFjdGlvbiB3aGljaCB0cmlnZ2VyZWQgdGhlIGNoYW5nZS4gTWF5IGJlIG9uZSBvZjogICogYCdyZW1vdmUnYCAqIGAncmVtb3ZlQWxsJ2AgKiBgJ2FkZCdgICogYCdjbGVhcmNoYW5nZXMnYCAqIGAnZmlsdGVyJ2AgKiBgJ3VwZGF0ZSdgICogYCdkYXRhc2V0J2AgKiBgJ3JlcGxhY2UnYFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgQ2hhbmdlZCByZWNvcmQsIGZvciBhY3Rpb25zIHRoYXQgYWZmZWN0cyBleGFjdGx5IG9uZSByZWNvcmQgKGAndXBkYXRlJ2ApXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQucmVjb3JkcyBDaGFuZ2VkIHJlY29yZHMsIHBhc3NlZCBmb3IgYWxsIGFjdGlvbnMgZXhjZXB0IGAncmVtb3ZlQWxsJ2BcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY2hhbmdlcyBQYXNzZWQgZm9yIHRoZSBgJ3VwZGF0ZSdgIGFjdGlvbiwgaW5mbyBvbiB3aGljaCByZWNvcmQgZmllbGRzIGNoYW5nZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EYXRhQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgc3RvcmU6IFN0b3JlLCBhY3Rpb246ICdyZW1vdmUnfCdyZW1vdmVBbGwnfCdhZGQnfCdjbGVhcmNoYW5nZXMnfCdmaWx0ZXInfCd1cGRhdGUnfCdkYXRhc2V0J3wncmVwbGFjZScsIHJlY29yZDogTW9kZWwsIHJlY29yZHM6IE1vZGVsW10sIGNoYW5nZXM6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIGZpZWxkIGlzIG11dGF0ZWQgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgW2hhc0NoYW5nZXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjcHJvcGVydHktaGFzQ2hhbmdlcykgcHJvcGVydHkgY2hhbmdlc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbnRhaW5lcn0gZXZlbnQuc291cmNlIFRoZSBjb250YWluZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5kaXJ0eSBUaGUgZGlydHkgc3RhdGUgb2YgdGhlIENvbnRhaW5lciAtIGB0cnVlYCBpZiB0aGVyZSBhcmUgYW55IGZpZWxkcyB3aGljaCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBpbml0aWFsIGxvYWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGlydHlTdGF0ZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ29udGFpbmVyLCBkaXJ0eTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hpbGUgZHJhZyBzZWxlY3RpbmcuIFVJIHdpbGwgdXBkYXRlIHdpdGggY3VycmVudCByYW5nZSwgYnV0IHRoZSBjZWxscyB3aWxsIG5vdCBiZSBzZWxlY3RlZCB1bnRpbFxuICAgICAqIG1vdXNlIHVwLiBUaGlzIGV2ZW50IGNhbiBiZSBsaXN0ZW5lZCBmb3IgdG8gcGVyZm9ybSBhY3Rpb25zIHdoaWxlIGRyYWcgc2VsZWN0aW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge0dyaWRMb2NhdGlvbkNvbmZpZ1tdLEdyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuc2VsZWN0ZWRDZWxscyBUaGUgY2VsbHMgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgZHJhZ2dlZCBvdmVyXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuc2VsZWN0ZWRSZWNvcmRzIFRoZSByZWNvcmRzIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGRyYWdnZWQgb3ZlclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRyYWdTZWxlY3Rpbmc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHNlbGVjdGVkQ2VsbHM6IEdyaWRMb2NhdGlvbkNvbmZpZ1tdfEdyaWRMb2NhdGlvbltdLCBzZWxlY3RlZFJlY29yZHM6IE1vZGVsW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0J3MgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5lbGVtZW50IFRoZSBXaWRnZXQncyBlbGVtZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkVsZW1lbnRDcmVhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBQYW5lbCBpcyBleHBhbmRlZCB1c2luZyB0aGUgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNpYmxlKSBzZXR0aW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlBhbmVsfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FeHBhbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFBhbmVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciBhIHBhcmVudCBub2RlIHJlY29yZCBpcyBleHBhbmRlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgd2hpY2ggaGFzIGJlZW4gZXhwYW5kZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXhwYW5kTm9kZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIGZpbGUgaXMgZHJvcHBlZCBvbiB0aGUgd2lkZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBvd25pbmcgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7RGF0YVRyYW5zZmVySXRlbX0gZXZlbnQuZmlsZSBUaGUgZHJvcHBlZCBmaWxlIGRlc2NyaXB0b3JcbiAgICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIG5hdGl2ZSBEcmFnRXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxlRHJvcDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZmlsZTogRGF0YVRyYW5zZmVySXRlbSwgZG9tRXZlbnQ6IERyYWdFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHRoZSBGaWxsSGFuZGxlIGRyYWdnaW5nIGlzIGZpbmFsaXplZCBhbmQgdmFsdWVzIGFyZSBhcHBsaWVkIHRvIGNlbGxzLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZVxuICAgICAqIGRyYWcgb3BlcmF0aW9uIGZyb20gYXBwbHlpbmcgZGF0YSBjaGFuZ2VzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmZyb20gVGhlIGZyb20gY2VsbFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQudG8gVGhlIHRvIGNlbGxcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSByYXcgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsbEhhbmRsZUJlZm9yZURyYWdGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGZyb206IEdyaWRMb2NhdGlvbiwgdG86IEdyaWRMb2NhdGlvbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGlsZSBkcmFnZ2luZyB0aGUgRmlsbEhhbmRsZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5mcm9tIFRoZSBmcm9tIGNlbGxcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LnRvIFRoZSB0byBjZWxsXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVEcmFnOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZnJvbTogR3JpZExvY2F0aW9uLCB0bzogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIEZpbGxIYW5kbGUgZHJhZyBvcGVyYXRpb24gaXMgYWJvcnRlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxsSGFuZGxlRHJhZ0Fib3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgYSBGaWxsSGFuZGxlIGRyYWcgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LmZyb20gVGhlIGZyb20gY2VsbFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQudG8gVGhlIHRvIGNlbGxcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSByYXcgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsbEhhbmRsZURyYWdFbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBmcm9tOiBHcmlkTG9jYXRpb24sIHRvOiBHcmlkTG9jYXRpb24sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGRyYWdnaW5nIG9mIHRoZSBGaWxsSGFuZGxlIHN0YXJ0cy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5jZWxsIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2x1bW4gLyByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSByYXcgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsbEhhbmRsZURyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNlbGw6IEdyaWRMb2NhdGlvbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gY2VsbCBlZGl0aW5nIGlzIGZpbmlzaGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge0NlbGxFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbmlzaENlbGxFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIHJvdyBlZGl0aW5nIGlzIGZpbmlzaGVkLCByZXR1cm4gZmFsc2UgdG8gc2lnbmFsIHRoYXQgdGhlIHZhbHVlIGlzIGludmFsaWQgYW5kIGVkaXRpbmcgc2hvdWxkIG5vdCBiZSBmaW5hbGl6ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZXZlbnQtZmluaXNoUm93RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUYXJnZXQgZ3JpZFxuICAgICAqIEBwYXJhbSB7Um93RWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaW5pc2hSb3dFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZW50ZXJzIHRoaXMgV2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNJbjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSBgYmx1cmAgZXZlbnQuXG4gICAgICogZm9jdXMgbW92aW5nIGZyb20gd2l0aGluIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUsIGV2ZW4gaWYgdGhlcmUgYXJlIGZsb2F0aW5nIHdpZGdldHNcbiAgICAgKiB3aWxsIG5vdCB0cmlnZ2VyIHRoaXMgZXZlbnQuIFRoaXMgaXMgd2hlbiBmb2N1cyBleGl0cyB0aGlzIHdpZGdldCBjb21wbGV0ZWx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIGRyYWdnaW5nIHN0YXJ0cywgcmV0dXJuIGZhbHNlIHRvIHByZXZlbnQgdGhlIGRyYWcgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnQsVG91Y2hFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93QmVmb3JlRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyByZWNvcmRzOiBNb2RlbFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50fFRvdWNoRXZlbnQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHRoZSByb3cgZHJvcCBvcGVyYXRpb24gaXMgZmluYWxpemVkLiBZb3UgY2FuIHJldHVybiBmYWxzZSB0byBhYm9ydCB0aGUgZHJvcCBvcGVyYXRpb24sIG9yIGFcbiAgICAgKiBQcm9taXNlIHlpZWxkaW5nIGB0cnVlYCAvIGBmYWxzZWAgd2hpY2ggYWxsb3dzIGZvciBhc3luY2hyb25vdXMgYWJvcnQgKGUuZy4gZmlyc3Qgc2hvdyB1c2VyIGEgY29uZmlybWF0aW9uIGRpYWxvZykuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC52YWxpZCBTZXQgdGhpcyB0byB0cnVlIG9yIGZhbHNlIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRyb3AgcG9zaXRpb24gaXMgdmFsaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5pbnNlcnRCZWZvcmUgVGhlIHJlY29yZCB0byBpbnNlcnQgYmVmb3JlIChgbnVsbGAgaWYgaW5zZXJ0aW5nIGF0IGxhc3QgcG9zaXRpb24gb2YgYSBwYXJlbnQgbm9kZSlcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5wYXJlbnQgVGhlIHBhcmVudCByZWNvcmQgb2YgdGhlIGN1cnJlbnQgZHJvcCBwb3NpdGlvbiAob25seSBhcHBsaWNhYmxlIGZvciB0cmVlcylcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge1JlY29yZFBvc2l0aW9uQ29udGV4dFtdfSBldmVudC5jb250ZXh0Lm9sZFBvc2l0aW9uQ29udGV4dCBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZXZpb3VzIHRyZWUgcG9zaXRpb24uIE9iamVjdHMgY29udGFpbiB0aGUgYHJlY29yZGAsIGFuZCBpdHMgb3JpZ2luYWwgYHBhcmVudEluZGV4YCBhbmQgYHBhcmVudElkYCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0JlZm9yZURyb3BGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgdmFsaWQ6IGJvb2xlYW4sIGluc2VydEJlZm9yZTogTW9kZWwsIHBhcmVudDogTW9kZWwsIHJlY29yZHM6IE1vZGVsW10sIG9sZFBvc2l0aW9uQ29udGV4dDogUmVjb3JkUG9zaXRpb25Db250ZXh0W10gfSwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGlsZSB0aGUgcm93IGlzIGJlaW5nIGRyYWdnZWQsIGluIHRoZSBsaXN0ZW5lciBmdW5jdGlvbiB5b3UgaGF2ZSBhY2Nlc3MgdG8gYGNvbnRleHQuaW5zZXJ0QmVmb3JlYCBhIGdyaWQgL1xuICAgICAqIHRyZWUgcmVjb3JkLCBhbmQgYWRkaXRpb25hbGx5IGBjb250ZXh0LnBhcmVudGAgKGEgVHJlZU5vZGUpIGZvciB0cmVlcy4gWW91IGNhbiBzaWduYWwgdGhhdCB0aGUgZHJvcCBwb3NpdGlvbiBpc1xuICAgICAqIHZhbGlkIG9yIGludmFsaWQgYnkgc2V0dGluZyBgY29udGV4dC52YWxpZCA9IGZhbHNlO2BcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LnZhbGlkIFNldCB0aGlzIHRvIHRydWUgb3IgZmFsc2UgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZHJvcCBwb3NpdGlvbiBpcyB2YWxpZC5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5pbnNlcnRCZWZvcmUgVGhlIHJlY29yZCB0byBpbnNlcnQgYmVmb3JlIChgbnVsbGAgaWYgaW5zZXJ0aW5nIGF0IGxhc3QgcG9zaXRpb24gb2YgYSBwYXJlbnQgbm9kZSlcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5wYXJlbnQgVGhlIHBhcmVudCByZWNvcmQgb2YgdGhlIGN1cnJlbnQgZHJvcCBwb3NpdGlvbiAob25seSBhcHBsaWNhYmxlIGZvciB0cmVlcylcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0RyYWc6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHZhbGlkOiBib29sZWFuLCBpbnNlcnRCZWZvcmU6IE1vZGVsLCBwYXJlbnQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcm93IGRyYWcgb3BlcmF0aW9uIGlzIGFib3J0ZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dEcmFnQWJvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHJlY29yZHM6IE1vZGVsW10gfSwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZHJhZ2dpbmcgc3RhcnRzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnQsVG91Y2hFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93RHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyByZWNvcmRzOiBNb2RlbFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50fFRvdWNoRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIHRoZSByb3cgZHJvcCBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCwgcmVnYXJkbGVzcyBvZiB2YWxpZGl0eVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQudmFsaWQgdHJ1ZSBvciBmYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZHJvcCBwb3NpdGlvbiB3YXMgdmFsaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5pbnNlcnRCZWZvcmUgVGhlIHJlY29yZCB0byBpbnNlcnQgYmVmb3JlIChgbnVsbGAgaWYgaW5zZXJ0aW5nIGF0IGxhc3QgcG9zaXRpb24gb2YgYSBwYXJlbnQgbm9kZSlcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuY29udGV4dC5wYXJlbnQgVGhlIHBhcmVudCByZWNvcmQgb2YgdGhlIGN1cnJlbnQgZHJvcCBwb3NpdGlvbiAob25seSBhcHBsaWNhYmxlIGZvciB0cmVlcylcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5jb250ZXh0LnJlY29yZHMgVGhlIGRyYWdnZWQgcm93IHJlY29yZHNcbiAgICAgKiBAcGFyYW0ge1JlY29yZFBvc2l0aW9uQ29udGV4dFtdfSBldmVudC5jb250ZXh0Lm9sZFBvc2l0aW9uQ29udGV4dCBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZXZpb3VzIHRyZWUgcG9zaXRpb24uIE9iamVjdHMgY29udGFpbiB0aGUgcmVjb3JkLCBhbmQgaXRzIG9yaWdpbmFsIGBwYXJlbnRJbmRleGAgYW5kIGBwYXJlbnRJZGAgdmFsdWVzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dEcm9wOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyB2YWxpZDogYm9vbGVhbiwgaW5zZXJ0QmVmb3JlOiBNb2RlbCwgcGFyZW50OiBNb2RlbCwgcmVjb3JkczogTW9kZWxbXSwgb2xkUG9zaXRpb25Db250ZXh0OiBSZWNvcmRQb3NpdGlvbkNvbnRleHRbXSB9LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIGdyaWQgaGVhZGVyIGlzIGNsaWNrZWQgb24uXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZXZlbnQtaGVhZGVyQ2xpY2spXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSB0cmlnZ2VyaW5nIERPTSBldmVudC5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gY2xpY2tlZCBvbi5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IZWFkZXJDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGRvbUV2ZW50OiBFdmVudCwgY29sdW1uOiBDb2x1bW4gfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIHRoZSBjb250ZXh0IG1lbnUgaXMgc2hvd24gZm9yIGEgaGVhZGVyLlxuICAgICAqIEFsbG93cyBtYW5pcHVsYXRpb24gb2YgdGhlIGl0ZW1zIHRvIHNob3cgaW4gdGhlIHNhbWUgd2F5IGFzIGluIHRoZSBbcHJvY2Vzc0l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0hlYWRlck1lbnUjY29uZmlnLXByb2Nlc3NJdGVtcykuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZXZlbnQtaGVhZGVyTWVudUJlZm9yZVNob3cpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT59IGV2ZW50Lml0ZW1zIE1lbnUgaXRlbSBjb25maWdzXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IZWFkZXJNZW51QmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbXM6IFJlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+LCBjb2x1bW46IENvbHVtbiB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGFuIGl0ZW0gaXMgc2VsZWN0ZWQgaW4gdGhlIGhlYWRlciBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IZWFkZXJNZW51SXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNvbHVtbjogQ29sdW1uIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBhZnRlciB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhIGhlYWRlclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+fSBldmVudC5pdGVtcyBNZW51IGl0ZW0gY29uZmlnc1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyTWVudVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5PiwgY29sdW1uOiBDb2x1bW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gYSBjaGVjayBpdGVtIGlzIHRvZ2dsZWQgaW4gdGhlIGhlYWRlciBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudX0gZXZlbnQubWVudSBUaGUgbWVudVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTWVudUl0ZW19IGV2ZW50Lml0ZW0gU2VsZWN0ZWQgbWVudSBpdGVtXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBDb2x1bW5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNoZWNrZWQgQ2hlY2tlZCBvciBub3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IZWFkZXJNZW51VG9nZ2xlSXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgbWVudTogTWVudSwgaXRlbTogTWVudUl0ZW0sIGNvbHVtbjogQ29sdW1uLCBjaGVja2VkOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgd2FzIGhpZGRlblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gcm93IGxvY2tpbmcgaXMgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LmNsb25lIFRoZSBjcmVhdGVkIGNsb25lXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTG9ja1Jvd3M6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjbG9uZTogR3JpZEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIE1vdXNlIG1vdmVkIG91dCBmcm9tIGVsZW1lbnQgaW4gZ3JpZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbk1vdXNlT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIE1vdXNlIG1vdmVkIGluIG92ZXIgZWxlbWVudCBpbiBncmlkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTW91c2VPdmVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0IHdoaWNoIGhhZCBiZWVuIGluIGEgbm9uLXZpc2libGUgc3RhdGUgZm9yIGFueSByZWFzb25cbiAgICAgKiBhY2hpZXZlcyB2aXNpYmlsaXR5LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2V2ZW50LXBhaW50KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgcGFpbnRlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmZpcnN0UGFpbnQgYHRydWVgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhaW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhaW50OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZpcnN0UGFpbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBhZnRlciBhIHBhc3RlIGFjdGlvbiBpcyBwZXJmb3JtZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmNsaXBib2FyZERhdGEgVGhlIGNsaXBib2FyZERhdGEgdGhhdCB3YXMgcGFzdGVkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQubW9kaWZpZWRSZWNvcmRzIFRoZSByZWNvcmRzIHdoaWNoIGhhdmUgYmVlbiBtb2RpZmllZCBkdWUgdG8gdGhlIHBhc3RlIGFjdGlvblxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQudGFyZ2V0Q2VsbCBUaGUgY2VsbCBmcm9tIHdoaWNoIHRoZSBwYXN0ZSB3aWxsIGJlIHN0YXJ0ZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIHBhc3RlIGV2ZW50c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhc3RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjbGlwYm9hcmREYXRhOiBzdHJpbmcsIG1vZGlmaWVkUmVjb3JkczogTW9kZWxbXSwgdGFyZ2V0Q2VsbDogR3JpZExvY2F0aW9uLCBlbnRpdHlOYW1lOiBzdHJpbmcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGV4cG9ydCBoYXMgZmluaXNoZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtSZXNwb25zZX0gW2V2ZW50LnJlc3BvbnNlXSBPcHRpb25hbCByZXNwb25zZSwgaWYgcmVjZWl2ZWRcbiAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXZlbnQuZXJyb3JdIE9wdGlvbmFsIGVycm9yLCBpZiBleGNlcHRpb24gb2NjdXJyZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QZGZFeHBvcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZXNwb25zZT86IFJlc3BvbnNlLCBlcnJvcj86IEVycm9yIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgV2lkZ2V0J3MgcmVhZCBvbmx5IHN0YXRlIGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5yZWFkT25seSBSZWFkIG9ubHkgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVhZE9ubHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWFkT25seTogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBhZnRlciBhIHdpZGdldCdzIGVsZW1lbnRzIGhhdmUgYmVlbiBzeW5jaHJvbml6ZWQgZHVlIHRvIGEgZGlyZWN0IG9yIGluZGlyZWN0IGNhbGxcbiAgICAgKiB0byBbcmVjb21wb3NlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2Z1bmN0aW9uLXJlY29tcG9zZSksIGlmIHRoaXMgcmVzdWx0cyBpbiBzb21lIGNoYW5nZSB0byB0aGUgd2lkZ2V0J3MgcmVuZGVyZWQgRE9NIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlY29tcG9zZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIGEgcm93IGlzIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5yb3cuUm93fSBldmVudC5yb3cgVGhlIHJvdyB0aGF0IGhhcyBiZWVuIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIGZvciB0aGUgcm93XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LnJlY29yZEluZGV4IFRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZW5kZXJSb3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCByb3c6IFJvdywgcmVjb3JkOiBNb2RlbCwgcmVjb3JkSW5kZXg6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogR3JpZCByb3dzIGhhdmUgYmVlbiByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoaXMgZ3JpZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZW5kZXJSb3dzOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgZW5jYXBzdWxhdGluZyBlbGVtZW50IG9mIGEgV2lkZ2V0IHJlc2l6ZXMgKm9ubHkgd2hlbiBbbW9uaXRvclJlc2l6ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbW9uaXRvclJlc2l6ZSkgaXMgYHRydWVgKi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC53aWR0aCBUaGUgbmV3IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LmhlaWdodCBUaGUgbmV3IGhlaWdodFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRXaWR0aCBUaGUgb2xkIHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZEhlaWdodCBUaGUgb2xkIGhlaWdodFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgb2xkV2lkdGg6IG51bWJlciwgb2xkSGVpZ2h0OiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEdyaWQgcmVzaXplIGxlYWQgdG8gYSBuZXcgcmVzcG9uc2l2ZSBsZXZlbCBiZWluZyBhcHBsaWVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgR3JpZCB0aGF0IHdhcyByZXNpemVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmxldmVsIE5ldyByZXNwb25zaXZlIGxldmVsIChzbWFsbCwgbGFyZ2UsIGV0YylcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQud2lkdGggTmV3IHdpZHRoIGluIHB4XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50Lm9sZExldmVsIE9sZCByZXNwb25zaXZlIGxldmVsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIE9sZCB3aWR0aCBpbiBweFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc3BvbnNpdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCBsZXZlbDogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBvbGRMZXZlbDogc3RyaW5nLCBvbGRXaWR0aDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIHdoZW4gYSByb3cgaGFzIGZpbmlzaGVkIGNvbGxhcHNpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93Q29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIHdoZW4gYSByb3cgZXhwYW5kIGhhcyBmaW5pc2hlZCBleHBhbmRpbmcuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZXZlbnQtcm93RXhwYW5kKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5leHBhbmRlZEVsZW1lbnRzIEFuIG9iamVjdCB3aXRoIHRoZSBHcmlkIHJlZ2lvbiBuYW1lIGFzIHByb3BlcnR5IGFuZCB0aGUgZXhwYW5kZWQgYm9keSBlbGVtZW50IGFzIHZhbHVlXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LndpZGdldCBJbiBjYXNlIG9mIGV4cGFuZGluZyBhIFdpZGdldCwgdGhpcyB3aWxsIGJlIGEgcmVmZXJlbmNlIHRvIHRoZSBpbnN0YW5jZSBjcmVhdGVkIGJ5IHRoZSBhY3R1YWwgZXhwYW5zaW9uLiBJZiB0aGVyZSBpcyBtdWx0aXBsZSBHcmlkIHJlZ2lvbnMsIHVzZSB0aGUgYHdpZGdldHNgIHBhcmFtIGluc3RlYWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LndpZGdldHMgSW4gY2FzZSBvZiBleHBhbmRpbmcgYSBXaWRnZXQsIHRoaXMgd2lsbCBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgR3JpZCByZWdpb24gbmFtZSBhcyBwcm9wZXJ0eSBhbmQgdGhlIHJlZmVyZW5jZSB0byB0aGUgd2lkZ2V0IGluc3RhbmNlIGNyZWF0ZWQgYnkgdGhlIGFjdHVhbCBleHBhbnNpb25cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Sb3dFeHBhbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyByZWNvcmQ6IE1vZGVsLCBleHBhbmRlZEVsZW1lbnRzOiBvYmplY3QsIHdpZGdldDogV2lkZ2V0LCB3aWRnZXRzOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhIHJvd1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSBob3ZlcmVkIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiBjdXJyZW50bHkgaG92ZXJlZFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Sb3dNb3VzZUVudGVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGEgcm93XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvdyB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50IHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93TW91c2VMZWF2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogR3JpZCBoYXMgc2Nyb2xsZWQgdmVydGljYWxseVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuc2Nyb2xsVG9wIFRoZSB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2Nyb2xsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoZSBzZWxlY3Rpb24gaGFzIGJlZW4gY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHsnc2VsZWN0JywnZGVzZWxlY3QnfSBldmVudC5hY3Rpb24gYCdzZWxlY3QnYC9gJ2Rlc2VsZWN0J2BcbiAgICAgKiBAcGFyYW0geydyb3cnLCdjZWxsJ30gZXZlbnQubW9kZSBgJ3JvdydgL2AnY2VsbCdgXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuZGVzZWxlY3RlZCBUaGUgcmVjb3JkcyBkZXNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGVkIFRoZSByZWNvcmRzIHNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGlvbiBUaGUgcmVjb3JkcyBpbiB0aGUgbmV3IHNlbGVjdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuZGVzZWxlY3RlZENlbGxzIFRoZSBjZWxscyBkZXNlbGVjdGVkIGluIHRoaXMgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5zZWxlY3RlZENlbGxzIFRoZSBjZWxscyBzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuY2VsbFNlbGVjdGlvbiBUaGUgY2VsbHMgaW4gdGhlIG5ldyBzZWxlY3Rpb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgYWN0aW9uOiAnc2VsZWN0J3wnZGVzZWxlY3QnLCBtb2RlOiAncm93J3wnY2VsbCcsIHNvdXJjZTogR3JpZCwgZGVzZWxlY3RlZDogTW9kZWxbXSwgc2VsZWN0ZWQ6IE1vZGVsW10sIHNlbGVjdGlvbjogTW9kZWxbXSwgZGVzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25bXSwgc2VsZWN0ZWRDZWxsczogR3JpZExvY2F0aW9uW10sIGNlbGxTZWxlY3Rpb246IEdyaWRMb2NhdGlvbltdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGUgc2VsZWN0aW9uTW9kZSBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5zZWxlY3Rpb25Nb2RlIFRoZSBuZXcgW3NlbGVjdGlvbk1vZGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvbWl4aW4vR3JpZFNlbGVjdGlvbiNjb25maWctc2VsZWN0aW9uTW9kZSlcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TZWxlY3Rpb25Nb2RlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc2VsZWN0aW9uTW9kZTogb2JqZWN0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgaXMgc2hvd24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBzcGxpdHRpbmcgdGhlIEdyaWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlW119IGV2ZW50LnN1YlZpZXdzIFRoZSBzdWIgdmlld3MgY3JlYXRlZCBieSB0aGUgc3BsaXRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQub3B0aW9ucyBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHNwbGl0IGNhbGxcbiAgICAgKiBAcGFyYW0geydob3Jpem9udGFsJywndmVydGljYWwnLCdib3RoJ30gZXZlbnQub3B0aW9ucy5kaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiBvZiB0aGUgc3BsaXRcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQub3B0aW9ucy5hdENvbHVtbiBUaGUgY29sdW1uIHRvIHNwbGl0IGF0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50Lm9wdGlvbnMuYXRSZWNvcmQgVGhlIHJlY29yZCB0byBzcGxpdCBhdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc3ViVmlld3M6IEdyaWRCYXNlW10sIG9wdGlvbnM6IHsgZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCd8J3ZlcnRpY2FsJ3wnYm90aCcsIGF0Q29sdW1uOiBDb2x1bW4sIGF0UmVjb3JkOiBNb2RlbCB9IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBieSB0aGUgR3JpZCB3aGVuIHRoZSBjb2xsYXBzZSBpY29uIGlzIGNsaWNrZWQuIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgY29sbGFwc2UgYWN0aW9uLFxuICAgICAqIGlmIHlvdSB3YW50IHRvIGltcGxlbWVudCB5b3VyIG93biBiZWhhdmlvci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YmdyaWRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0dGVyQ29sbGFwc2VDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc3ViR3JpZDogU3ViR3JpZCwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJ5IHRoZSBHcmlkIGFmdGVyIGEgc3ViLWdyaWQgaGFzIGJlZW4gcmVzaXplZCB1c2luZyB0aGUgc3BsaXR0ZXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHJlc2l6ZWQgc3ViZ3JpZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXR0ZXJEcmFnRW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJ5IHRoZSBHcmlkIHdoZW4gYSBzdWItZ3JpZCByZXNpemUgZ2VzdHVyZSBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YmdyaWQgYWJvdXQgdG8gYmUgcmVzaXplZFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3BsaXR0ZXJEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHN1YkdyaWQ6IFN1YkdyaWQsIGRvbUV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYnkgdGhlIEdyaWQgd2hlbiB0aGUgZXhwYW5kIGljb24gaXMgY2xpY2tlZC4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBleHBhbmQgYWN0aW9uLFxuICAgICAqIGlmIHlvdSB3YW50IHRvIGltcGxlbWVudCB5b3VyIG93biBiZWhhdmlvci5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBHcmlkIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YmdyaWRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0dGVyRXhwYW5kQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHN1YkdyaWQ6IFN1YkdyaWQsIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBlZGl0aW5nIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7Q2VsbEVkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3RhcnRDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGVkaXRpbmcgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtSb3dFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN0YXJ0Um93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYWZ0ZXIgYSBzdWIgZ3JpZCBpcyBjb2xsYXBzZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhlIGZpcmluZyBHcmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuU3ViR3JpZH0gZXZlbnQuc3ViR3JpZCBUaGUgc3ViIGdyaWQgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TdWJHcmlkQ29sbGFwc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBzdWJHcmlkOiBTdWJHcmlkIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBhZnRlciBhIHN1YiBncmlkIGlzIGV4cGFuZGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YiBncmlkIGluc3RhbmNlXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3ViR3JpZEV4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIHN1YkdyaWQ6IFN1YkdyaWQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gb25lIG9yIG1vcmUgZ3JvdXBzIGFyZSBleHBhbmRlZCBvciBjb2xsYXBzZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50Lmdyb3VwUmVjb3JkIFtERVBSRUNBVEVEXSBVc2UgYGdyb3VwUmVjb3Jkc2AgcGFyYW0gaW5zdGVhZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50Lmdyb3VwUmVjb3JkcyBUaGUgZ3JvdXAgcmVjb3JkcyBiZWluZyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZSBDb2xsYXBzZWQgKHRydWUpIG9yIGV4cGFuZGVkIChmYWxzZSlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtldmVudC5hbGxSZWNvcmRzXSBUcnVlIGlmIHRoaXMgZXZlbnQgaXMgcGFydCBvZiB0b2dnbGluZyBhbGwgZ3JvdXBzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVG9nZ2xlR3JvdXA6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncm91cFJlY29yZDogTW9kZWwsIGdyb3VwUmVjb3JkczogTW9kZWxbXSwgY29sbGFwc2U6IGJvb2xlYW4sIGFsbFJlY29yZHM/OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciBhIHBhcmVudCBub2RlIHJlY29yZCB0b2dnbGVzIGl0cyBjb2xsYXBzZWQgc3RhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCBiZWluZyB0b2dnbGVkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2UgYHRydWVgIGlmIHRoZSBub2RlIGlzIGJlaW5nIGNvbGxhcHNlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub2dnbGVOb2RlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCwgY29sbGFwc2U6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEEgaGVhZGVyIFt0b29sXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXRvb2xzKSBoYXMgYmVlbiBjbGlja2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlRvb2x9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuVG9vbH0gZXZlbnQudG9vbCBUaGUgdG9vbCB3aGljaCBpcyBiZWluZyBjbGlja2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRvb2xDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVG9vbCwgdG9vbDogVG9vbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgb24gdGhlIG93bmluZyBHcmlkL1NjaGVkdWxlci9HYW50dCBhZnRlciB0cmVlIGdyb3VwaW5nIGxldmVscyBjaGFuZ2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfEZ1bmN0aW9uKVtdfSBldmVudC5ncm91cGVycyBBcnJheSBvZiBmaWVsZCBuYW1lcyBvciBmdW5jdGlvbnMgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGdyb3VwaW5nIGxldmVsc1xuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xGdW5jdGlvbilbXX0gZXZlbnQub2xkR3JvdXBlcnMgQXJyYXkgb2YgZmllbGQgbmFtZXMgb3IgZnVuY3Rpb25zIHJlcHJlc2VudGluZyB0aGUgcHJldmlvdXMgZ3JvdXBpbmcgbGV2ZWxzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVHJlZUdyb3VwOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBncm91cGVyczogKHN0cmluZ3xGdW5jdGlvbilbXSwgb2xkR3JvdXBlcnM6IChzdHJpbmd8RnVuY3Rpb24pW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gcm93IGxvY2tpbmcgaXMgZGlzYWJsZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5jbG9uZSBUaGUgbG9ja2VkIGNsb25lIHRoYXQgd2lsbCBiZSBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25VbmxvY2tSb3dzOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2xvbmU6IEdyaWRCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHVuLXNwbGl0dGluZyB0aGUgR3JpZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25VbnNwbGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoKSA9PiB2b2lkKXxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFwcGVuZCB0aGUgdW5kZXJseWluZyB3aWRnZXRcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIG1lID0gdGhpcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdcbiAgICAgICAgICAgIH0gPSBtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNsYXNzLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlTmFtZSxcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlncyxcbiAgICAgICAgICAgICAgICBicnludHVtRXZlbnRzXG4gICAgICAgICAgICB9ID0gQnJ5bnR1bUdyaWRCYXNlQ29tcG9uZW50O1xuXG4gICAgICAgIGJyeW50dW1Db25maWdzLmZpbHRlcihwcm9wID0+IHByb3AgaW4gdGhpcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoYnJ5bnR1bUNvbmZpZywgcHJvcCwgdGhpc1twcm9wXSk7XG4gICAgICAgICAgICBpZiAoWydmZWF0dXJlcycsICdjb25maWcnXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbmZpZ1Byb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYnJ5bnR1bUV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gdGhpc1tldmVudF0gJiYgdGhpc1tldmVudF0ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICB1bmNhcGl0YWxpemUgPSAoc3RyOiBzdHJpbmcpID0+IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAoc3RyOiBzdHJpbmcpID0+IHVuY2FwaXRhbGl6ZShzdHIuc2xpY2UoMikpO1xuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBicnludHVtQ29uZmlnLmxpc3RlbmVyc1tldmVudE5hbWUoZXZlbnQpXSA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBtZVtldmVudF0uZW1pdChlKTtcbiAgICAgICAgICAgICAgICAvLyBFdmVudEVtaXR0ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcyBpbiB0aGUgbm9ybWFsIHdheSwgd29yayBhcm91bmQgaXQgYnkgc2V0dGluZyBgcmV0dXJuVmFsdWVgIGZsYWdcbiAgICAgICAgICAgICAgICAvLyBpbiBBbmd1bGFyIGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgY29tcG9uZW50IGhhcyBubyBjb250YWluZXIgc3BlY2lmaWVkIGluIGNvbmZpZyB0aGVuIHVzZSBhZG9wdCB0byBXcmFwcGVyJ3MgZWxlbWVudFxuICAgICAgICBjb25zdFxuICAgICAgICAgICAgY29udGFpbmVyUGFyYW0gPSBbXG4gICAgICAgICAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAgICAgICAgICdpbnNlcnRBZnRlcicsXG4gICAgICAgICAgICAgICAgJ2luc2VydEJlZm9yZSdcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBdLmZpbmQocHJvcCA9PiBicnludHVtQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJQYXJhbSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlTmFtZSA9PT0gJ0J1dHRvbicgfHwgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCkgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gQnV0dG9uIHNob3VsZCBhbHdheXMgYmUgPGE+IG9yIDxidXR0b24+IGluc2lkZSBvd25lciBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hcHBlbmRUbyA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYWRvcHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb250YWluZXIoaW5zdGFuY2VOYW1lLCBjb250YWluZXJQYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbiBzaGFkb3cgRE9NIChlLmcuIEFuZ3VsYXIgVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tKSwgdGhlbWUgQ1NTIGZyb20gZG9jdW1lbnQuaGVhZFxuICAgICAgICAvLyBkb2VzIG5vdCBjYXNjYWRlIGludG8gdGhlIHNoYWRvdyByb290LiBJbmplY3QgYSBtYXRjaGluZyA8bGluaz4gc28gQnJ5bnR1bSdzIENTUyBjaGVja1xuICAgICAgICAvLyBmaW5kcyB0aGUgdGhlbWUuIFRoZSBAZm9udC1mYWNlIHJ1bGVzIGZyb20gY29tcG9uZW50IHN0eWxlcyBhcmUgYWxzbyBleHRyYWN0ZWQgdG9cbiAgICAgICAgLy8gZG9jdW1lbnQgc2NvcGUgc28gZG9jdW1lbnQuZm9udHMgZGV0ZWN0cyB0aGVtIChzaGFkb3ctcm9vdCBAZm9udC1mYWNlIGlzIG5vdCByZWxpYWJseVxuICAgICAgICAvLyBpbmNsdWRlZCBpbiBkb2N1bWVudC5mb250cyBhY3Jvc3MgYWxsIGJyb3dzZXJzKS5cbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRSb290Tm9kZSgpO1xuICAgICAgICBpZiAoc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIGluaXRUaGVtZUluU2hhZG93Um9vdHMoKTtcbiAgICAgICAgICAgIEJyeW50dW1HcmlkQmFzZUNvbXBvbmVudC5lbnN1cmVGb250c0luRG9jdW1lbnQoc2hhZG93Um9vdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lLmluc3RhbmNlID0gaW5zdGFuY2VOYW1lID09PSAnV2lkZ2V0JyA/IFdpZGdldC5jcmVhdGUoYnJ5bnR1bUNvbmZpZykgOiBuZXcgaW5zdGFuY2VDbGFzcyhicnludHVtQ29uZmlnKTtcblxuICAgICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgZ3JpZEluc3RhbmNlLCBzY2hlZHVsZXJJbnN0YW5jZSBldGMuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbWVbU3RyaW5nSGVscGVyLnVuY2FwaXRhbGl6ZShpbnN0YW5jZU5hbWUpICsgJ0luc3RhbmNlJ10gPSBtZS5pbnN0YW5jZTtcbiAgICAgICAgLy8gXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgYWxsIEBmb250LWZhY2UgZGVjbGFyYXRpb25zIGZyb20gYSBzaGFkb3cgcm9vdCdzIHN0eWxlc2hlZXRzIGFuZCBhZGRzIHRoZW0gdG9cbiAgICAgKiBkb2N1bWVudC5oZWFkIGFzIGEgc2luZ2xlIDxzdHlsZT4gZWxlbWVudC4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBAZm9udC1mYWNlIHJ1bGVzIGluc2lkZVxuICAgICAqIGEgc2hhZG93IHJvb3QgYXJlIG5vdCByZWxpYWJseSBpbmNsdWRlZCBpbiBkb2N1bWVudC5mb250cyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCBjYXVzaW5nXG4gICAgICogQnJ5bnR1bSdzIENTUyBjb21wYXRpYmlsaXR5IGNoZWNrIHRvIGluY29ycmVjdGx5IHJlcG9ydCBtaXNzaW5nIGZvbnRzLlxuICAgICAqIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcyDigJQgdGhlIGV4dHJhY3Rpb24gcnVucyBvbmx5IG9uY2UgcGVyIHBhZ2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZW5zdXJlRm9udHNJbkRvY3VtZW50KHNoYWRvd1Jvb3Q6IFNoYWRvd1Jvb3QpOiB2b2lkIHtcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiLXNoYWRvdy1yb290LWZvbnRzJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvbnRGYWNlUnVsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgY29uc3QgZXh0cmFjdEZyb21TaGVldCA9IChzaGVldDogQ1NTU3R5bGVTaGVldCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0LmNzc1J1bGVzO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVzW2ldLnR5cGUgPT09IENTU1J1bGUuRk9OVF9GQUNFX1JVTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYWNlUnVsZXMucHVzaChydWxlc1tpXS5jc3NUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfZSkge1xuICAgICAgICAgICAgICAgIC8vIENyb3NzLW9yaWdpbiBhY2Nlc3MgbWF5IHRocm93OyBzaWxlbnRseSBza2lwXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYWRvcHRlZFN0eWxlU2hlZXRzIChBbmd1bGFyIDE0KyAvIG1vZGVybiBicm93c2VycylcbiAgICAgICAgY29uc3QgYWRvcHRlZFNoZWV0czogQ1NTU3R5bGVTaGVldFtdID0gKHNoYWRvd1Jvb3QgYXMgYW55KS5hZG9wdGVkU3R5bGVTaGVldHMgPz8gW107XG4gICAgICAgIGFkb3B0ZWRTaGVldHMuZm9yRWFjaChzaGVldCA9PiBleHRyYWN0RnJvbVNoZWV0KHNoZWV0KSk7XG5cbiAgICAgICAgLy8gPHN0eWxlPiBlbGVtZW50cyAob2xkZXIgQW5ndWxhciBvciBmYWxsYmFjaylcbiAgICAgICAgc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgaWYgKGVsLnNoZWV0KSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdEZyb21TaGVldChlbC5zaGVldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChmb250RmFjZVJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIHN0eWxlLmlkID0gJ2Itc2hhZG93LXJvb3QtZm9udHMnO1xuICAgICAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBmb250RmFjZVJ1bGVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYXRjaCBmb3IgY2hhbmdlc1xuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgeyBpbnN0YW5jZSB9ID0gdGhpcyxcbiAgICAgICAgICAgIHsgaW5zdGFuY2VOYW1lIH0gPSBCcnludHVtR3JpZEJhc2VDb21wb25lbnQ7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGNoYW5nZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcykuZm9yRWFjaCgoW3Byb3AsIGNoYW5nZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAoY2hhbmdlIGFzIFNpbXBsZUNoYW5nZSkuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICAgICAgeyBicnludHVtQ29uZmlnc09ubHksIGJyeW50dW1Qcm9wcyB9ID0gQnJ5bnR1bUdyaWRCYXNlQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGJyeW50dW1Qcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoaW5zdGFuY2UsIHByb3AsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyeW50dW1Db25maWdzT25seS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdVcGRhdGVQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
2182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1ncmlkLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS1ncmlkLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBaWMsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM2UsT0FBTyxFQUFncUIsUUFBUSxFQUE4MEIsTUFBTSxvQkFBb0IsQ0FBQztBQUV4aEQsT0FBTyxFQUFhLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQXU4QjVELE1BQU0sT0FBTyx3QkFBd0I7SUErYmpDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUF3TUYsa0JBQWtCO1FBQ2xCOzs7OztXQUtHO1FBQ08sMkJBQXNCLEdBQVEsSUFBSSxZQUFZLEVBQW1GLENBQUM7UUFDNUk7Ozs7OztXQU1HO1FBQ08sMEJBQXFCLEdBQVEsSUFBSSxZQUFZLEVBQXNHLENBQUM7UUFDOUo7Ozs7O1dBS0c7UUFDTywwQkFBcUIsR0FBUSxJQUFJLFlBQVksRUFBd0YsQ0FBQztRQUNoSjs7Ozs7O1dBTUc7UUFDTyw0QkFBdUIsR0FBUSxJQUFJLFlBQVksRUFBNkYsQ0FBQztR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c0JBQXRCLE1BQU07Z0JBVUcsV0FBVztzQkFBcEIsTUFBTTtnQkFVRyxlQUFlO3NCQUF4QixNQUFNO2dCQVNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBT0csUUFBUTtzQkFBakIsTUFBTTtnQkFjRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBTUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQU1HLE1BQU07c0JBQWYsTUFBTTtnQkFVRyxPQUFPO3NCQUFoQixNQUFNO2dCQVNHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFRRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBUUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQVNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFPRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU9HLGVBQWU7c0JBQXhCLE1BQU07Z0JBU0csYUFBYTtzQkFBdEIsTUFBTTtnQkFPRyxZQUFZO3NCQUFyQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBUUcsV0FBVztzQkFBcEIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQUlHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIEdyaWRCYXNlXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IFdyYXBwZXJIZWxwZXIgZnJvbSAnLi93cmFwcGVyLmhlbHBlcic7XG5cbmltcG9ydCB7IEFqYXhTdG9yZSwgQWpheFN0b3JlQ29uZmlnLCBCYXNlLCBDb2xvciwgQ29udGFpbmVyLCBEb21Db25maWcsIEZvcm11bGFQcm92aWRlckNvbmZpZywgSW5zdGFuY2VQbHVnaW4sIEtleU1hcENvbmZpZywgTWFzaywgTWFza0NvbmZpZywgTWVudSwgTWVudUl0ZW0sIE1lbnVJdGVtRW50cnksIE1vZGVsLCBNb2RlbENvbmZpZywgUGFnaW5nVG9vbGJhckNvbmZpZywgUGFuZWwsIFBhbmVsQ29sbGFwc2VyQ29uZmlnLCBQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWcsIFBhbmVsSGVhZGVyLCBTY3JvbGxNYW5hZ2VyLCBTY3JvbGxNYW5hZ2VyQ29uZmlnLCBTY3JvbGxlciwgU2Nyb2xsZXJDb25maWcsIFN0YXRlUHJvdmlkZXIsIFN0b3JlLCBTdG9yZUNvbmZpZywgVGFiQ29uZmlnLCBUb29sLCBUb29sQ29uZmlnLCBUb29sYmFyQ29uZmlnLCBUb29sYmFySXRlbXMsIFRvb2x0aXBDb25maWcsIFdpZGdldCB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5pbXBvcnQgeyBBSSwgQUlDb25maWcsIEFJRmlsdGVyLCBBSUZpbHRlckNvbmZpZywgQ2VsbENvcHlQYXN0ZSwgQ2VsbENvcHlQYXN0ZUNvbmZpZywgQ2VsbEVkaXQsIENlbGxFZGl0Q29uZmlnLCBDZWxsRWRpdG9yQ29udGV4dCwgQ2VsbE1lbnUsIENlbGxNZW51Q29uZmlnLCBDZWxsVG9vbHRpcCwgQ2VsbFRvb2x0aXBDb25maWcsIENoYXJ0cywgQ2hhcnRzQ29uZmlnLCBDb2x1bW4sIENvbHVtbkF1dG9XaWR0aCwgQ29sdW1uQXV0b1dpZHRoQ29uZmlnLCBDb2x1bW5EcmFnVG9vbGJhciwgQ29sdW1uRHJhZ1Rvb2xiYXJDb25maWcsIENvbHVtblBpY2tlciwgQ29sdW1uUGlja2VyQ29uZmlnLCBDb2x1bW5SZW5hbWUsIENvbHVtblJlbmFtZUNvbmZpZywgQ29sdW1uUmVvcmRlciwgQ29sdW1uUmVvcmRlckNvbmZpZywgQ29sdW1uUmVzaXplLCBDb2x1bW5SZXNpemVDb25maWcsIENvbHVtblN0b3JlLCBDb2x1bW5TdG9yZUNvbmZpZywgR3JpZENvbnRhaW5lckl0ZW1Db25maWcsIEVtcHR5VGV4dERvbUNvbmZpZywgRXhjZWxFeHBvcnRlciwgRXhjZWxFeHBvcnRlckNvbmZpZywgRXhwb3J0Q29uZmlnLCBGaWxlRHJvcCwgRmlsZURyb3BDb25maWcsIEZpbGxIYW5kbGUsIEZpbGxIYW5kbGVDb25maWcsIEZpbHRlciwgRmlsdGVyQmFyLCBGaWx0ZXJCYXJDb25maWcsIEZpbHRlckNvbmZpZywgR3JpZCwgR3JpZEJhc2UsIEdyaWRCYXNlTGlzdGVuZXJzLCBHcmlkQ29sdW1uQ29uZmlnLCBHcmlkTG9jYXRpb24sIEdyaWRMb2NhdGlvbkNvbmZpZywgR3JpZFNlbGVjdGlvbk1vZGUsIEdyaWRTdGF0ZUluZm8sIEdyb3VwLCBHcm91cENvbmZpZywgR3JvdXBTdW1tYXJ5LCBHcm91cFN1bW1hcnlDb25maWcsIEhlYWRlck1lbnUsIEhlYWRlck1lbnVDb25maWcsIExvY2tSb3dzLCBMb2NrUm93c0NvbmZpZywgTWVyZ2VDZWxscywgTWVyZ2VDZWxsc0NvbmZpZywgUGRmRXhwb3J0LCBQZGZFeHBvcnRDb25maWcsIFBpbkNvbHVtbnMsIFBpbkNvbHVtbnNDb25maWcsIFByZXNlcnZlU2Nyb2xsT3B0aW9ucywgUHJpbnQsIFByaW50Q29uZmlnLCBRdWlja0ZpbmQsIFF1aWNrRmluZENvbmZpZywgUmVjb3JkUG9zaXRpb25Db250ZXh0LCBSZWdpb25SZXNpemUsIFJlZ2lvblJlc2l6ZUNvbmZpZywgUmVzcG9uc2l2ZUxldmVsQ29uZmlnLCBSb3csIFJvd0NvcHlQYXN0ZSwgUm93Q29weVBhc3RlQ29uZmlnLCBSb3dFZGl0LCBSb3dFZGl0Q29uZmlnLCBSb3dFZGl0b3JDb250ZXh0LCBSb3dFeHBhbmRlciwgUm93RXhwYW5kZXJDb25maWcsIFJvd1Jlb3JkZXIsIFJvd1Jlb3JkZXJDb25maWcsIFJvd1Jlc2l6ZSwgUm93UmVzaXplQ29uZmlnLCBTZWFyY2gsIFNlYXJjaENvbmZpZywgU29ydCwgU29ydENvbmZpZywgU3BsaXQsIFNwbGl0Q29uZmlnLCBTdGlja3lDZWxscywgU3RpY2t5Q2VsbHNDb25maWcsIFN0cmlwZSwgU3RyaXBlQ29uZmlnLCBTdWJHcmlkLCBTdWJHcmlkQ29uZmlnLCBTdW1tYXJ5LCBTdW1tYXJ5Q29uZmlnLCBUcmVlLCBUcmVlQ29uZmlnLCBUcmVlR3JvdXAsIFRyZWVHcm91cENvbmZpZywgWExTQ29sdW1uIH0gZnJvbSAnQGJyeW50dW0vZ3JpZC10aGluJztcblxuaW1wb3J0IHsgRG9tSGVscGVyLCBTdHJpbmdIZWxwZXIgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuaW1wb3J0IHsgaW5pdFRoZW1lSW5TaGFkb3dSb290cyB9IGZyb20gJy4vc2hhZG93ZG9tLmhlbHBlcic7XG5cbmV4cG9ydCB0eXBlIEJyeW50dW1HcmlkQmFzZVByb3BzID0ge1xuICAgIC8vIENvbmZpZ3NcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhZG9wdCBhcyB0aGlzIFdpZGdldCdzIGVuY2Fwc3VsYXRpbmcgZWxlbWVudC4gVGhlIHdpZGdldCdzXG4gICAgICogY29udGVudCB3aWxsIGJlIHBsYWNlZCBpbnNpZGUgdGhpcyBlbGVtZW50LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1hZG9wdClcbiAgICAgKi9cbiAgICBhZG9wdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIHdpZGdldCBpcyBhIGNoaWxkIG9mIGEgW0NvbnRhaW5lcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFthbGlnbi1zZWxmXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYWxpZ24tc2VsZikgc3R5bGUuXG4gICAgICovXG4gICAgYWxpZ25TZWxmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFuaW1hdGUgcm93IHJlbW92YWxzIGNhdXNlZCBieSBmaWx0ZXJpbmcuXG4gICAgICogQGRlcHJlY2F0ZWQgNy4wLjAgRGVwcmVjYXRlZCBgYW5pbWF0ZUZpbHRlclJlbW92YWxzYC4gVXNlIGB0cmFuc2l0aW9uLmZpbHRlclJlbW92YWxgIGluc3RlYWRcbiAgICAgKi9cbiAgICBhbmltYXRlRmlsdGVyUmVtb3ZhbHMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiByZW1vdmluZyBhbmQgaW5zZXJ0aW5nIHJvd3Mgc2hvdWxkIGJlIGFuaW1hdGVkLiBTZXQgdG8gYGZhbHNlYCB0byBwcmV2ZW50IHRob3NlIGFuaW1hdGlvbnMsXG4gICAgICogcmVtb3ZpbmcgdGhlIHJlbGF0ZWQgZGVsYXlzLlxuICAgICAqIEBkZXByZWNhdGVkIDcuMC4wIERlcHJlY2F0ZWQgYGFuaW1hdGVSZW1vdmluZ1Jvd3NgLiBVc2UgYHRyYW5zaXRpb24ucmVtb3ZlUmVjb3JkYCBpbnN0ZWFkXG4gICAgICovXG4gICAgYW5pbWF0ZVJlbW92aW5nUm93cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIFtUcmVlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1RyZWUpIGZlYXR1cmUgaXMgaW4gdXNlIGFuZCB0aGUgU3RvcmUgaXMgYSB0cmVlIHN0b3JlLCB0aGlzXG4gICAgICogY29uZmlnIG1heSBiZSBzZXQgdG8gYHRydWVgIHRvIHZpc3VhbGx5IGFuaW1hdGUgYnJhbmNoIG5vZGUgZXhwYW5kIGFuZCBjb2xsYXBzZSBvcGVyYXRpb25zLlxuICAgICAqICpUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gU2NoZWR1bGVyIGFuZCBHYW50dCpcbiAgICAgKiBAZGVwcmVjYXRlZCA3LjAuMCBEZXByZWNhdGVkIGBhbmltYXRlVHJlZU5vZGVUb2dnbGVgLiBVc2UgYHRyYW5zaXRpb24udG9nZ2xlVHJlZU5vZGVgIGluc3RlYWRcbiAgICAgKi9cbiAgICBhbmltYXRlVHJlZU5vZGVUb2dnbGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciB0aGUgaWQgb2YgYW4gZWxlbWVudCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0J3MgZWxlbWVudCB0by4gQ2FuIGJlIGNvbmZpZ3VyZWQsIG9yIHNldCBvbmNlIGF0XG4gICAgICogcnVudGltZS4gVG8gYWNjZXNzIHRoZSBlbGVtZW50IG9mIGEgcmVuZGVyZWQgd2lkZ2V0LCBzZWUgW2VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkuXG4gICAgICogPGRpdiBjbGFzcz1cIm5vdGVcIj5XaGVuIGNyZWF0aW5nIG5lc3RlZCB0cmVlcyBvZiB3aWRnZXRzLCB0aGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gdGhlIG91dGVybW9zdCB3aWRnZXQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWFwcGVuZFRvKVxuICAgICAqL1xuICAgIGFwcGVuZFRvID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdFxuICAgICAqIGludG8gYW4gZWxlbWVudCB3aGljaCB3aWxsIGJlIGxpbmtlZCB1c2luZyB0aGUgYGFyaWEtZGVzY3JpYmVkYnlgIGF0dHJpYnV0ZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctYXJpYURlc2NyaXB0aW9uKVxuICAgICAqL1xuICAgIGFyaWFEZXNjcmlwdGlvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3QgYXNcbiAgICAgKiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctYXJpYUxhYmVsKVxuICAgICAqL1xuICAgIGFyaWFMYWJlbCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQXV0b21hdGljYWxseSBzZXQgZ3JpZHMgaGVpZ2h0IHRvIGZpdCBhbGwgcm93cyAobm8gc2Nyb2xsaW5nIGluIHRoZSBncmlkKS4gSW4gZ2VuZXJhbCB5b3Ugc2hvdWxkIGF2b2lkXG4gICAgICogdXNpbmcgYGF1dG9IZWlnaHQ6IHRydWVgLCBzaW5jZSBpdCB3aWxsIGJ5cGFzcyBHcmlkcyB2aXJ0dWFsIHJlbmRlcmluZyBhbmQgcmVuZGVyIGFsbCByb3dzIGF0IG9uY2UsIHdoaWNoXG4gICAgICogaW4gYSBsYXJnZXIgZ3JpZCBpcyByZWFsbHkgYmFkIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgKi9cbiAgICBhdXRvSGVpZ2h0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBDb25maWcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhciksXG4gICAgICogb3IgYXJyYXkgb2YgY29uZmlnIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBjaGlsZCBpdGVtcyBvZiBhIFRvb2xiYXIuIEFub3RoZXIgd2F5IHRvIGFkZCBhIGJiYXIgaXMgdG8gdXNlIFtzdHJpcHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctc3RyaXBzKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctYmJhcilcbiAgICAgKi9cbiAgICBiYmFyID8gOiAoR3JpZENvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byB0aGUgcGFuZWwncyBib2R5IGVsZW1lbnQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWJvZHlDbHMpXG4gICAgICovXG4gICAgYm9keUNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIFNldCBgdHJ1ZWAgdG8gYWRkIGEgYm9yZGVyIHRvIHRoaXMgY29udGFpbmVyJ3MgZWxlbWVudC5cbiAgICAgKi9cbiAgICBib3JkZXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hlcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0ZSB3aGljaCBldmVudHMgc2hvdWxkIGJ1YmJsZSB1cCB0aGUgb3duZXJzaGlwXG4gICAgICogaGllcmFyY2h5IHdoZW4gdHJpZ2dlcmVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1idWJibGVFdmVudHMpXG4gICAgICovXG4gICAgYnViYmxlRXZlbnRzID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3QgY2FsbCBvblhYWCBtZXRob2QgbmFtZXMgKGUuZy4gYG9uU2hvd2AsIGBvbkNsaWNrYCksIGFzIGFuIGVhc3kgd2F5IHRvIGxpc3RlbiBmb3IgZXZlbnRzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1jYWxsT25GdW5jdGlvbnMpXG4gICAgICovXG4gICAgY2FsbE9uRnVuY3Rpb25zID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgaWYgYW4gZXZlbnQgaGFuZGxlciB0aHJvd3MgYW4gZXhjZXB0aW9uLCB0aGUgZXJyb3IgcHJvcGFnYXRlcyB1cCB0aGUgc3RhY2sgYW5kIHRoZVxuICAgICAqIGFwcGxpY2F0aW9uIHN0YXRlIGlzIHVuZGVmaW5lZC4gQ29kZSB3aGljaCBmb2xsb3dzIHRoZSBldmVudCBoYW5kbGVyIHdpbGwgKm5vdCogYmUgZXhlY3V0ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucylcbiAgICAgKi9cbiAgICBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBjcm9wIHRleHQgaW4gZ3JpZCBjZWxscyB3aXRob3V0IGVsbGlwc2lzICguLi4pLiBXaGVuIGVuYWJsZWQsIGNlbGxzIGNvbnRhaW5pbmcgcHVyZVxuICAgICAqIHVzZSBgZGlzcGxheSA6IGJsb2NrYCwgaW5zdGVhZCBvZiBgZGlzcGxheSA6IGZsZXhgIHRvIGFsbG93IGVsbGlwc2lzIHRvIHdvcmsuXG4gICAgICogPHN0cm9uZz5OT1RFPC9zdHJvbmc+IE9ubHkgc3VwcG9ydGVkIGluIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBgOmhhcygpYCBDU1Mgc2VsZWN0b3JcbiAgICAgKi9cbiAgICBjZWxsRWxsaXBzaXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIGVsZW1lbnQuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWNscylcbiAgICAgKi9cbiAgICBjbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwYW5lbCBpcyBjb2xsYXBzZWQgKHRoZSBib2R5IG9mIHRoZSBwYW5lbCBpcyBoaWRkZW4gd2hpbGUgb25seSB0aGUgaGVhZGVyIGlzXG4gICAgICogdmlzaWJsZSkuIE9ubHkgdmFsaWQgaWYgdGhlIHBhbmVsIGlzIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkuXG4gICAgICovXG4gICAgY29sbGFwc2VkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgZW5hYmxlcyBjb2xsYXBzaWJpbGl0eSBmb3IgdGhlIHBhbmVsLiBTZWUgW2NvbGxhcHNlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzZWQpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1jb2xsYXBzaWJsZSlcbiAgICAgKi9cbiAgICBjb2xsYXBzaWJsZSA/IDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWdcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1jb2xvcilcbiAgICAgKi9cbiAgICBjb2xvciA/IDogQ29sb3JcbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIHdoaWNoIGNvbHVtbiB0byBzdGFydCBpbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBjb2x1bW4gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBzaG93IGNvbHVtbiBsaW5lcy4gRW5kIHJlc3VsdCBtaWdodCBiZSBvdmVycnVsZWQgYnkvZGlmZmVyIGJldHdlZW4gdGhlbWVzLlxuICAgICAqL1xuICAgIGNvbHVtbkxpbmVzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQWNjZXB0cyBjb2x1bW4gZGVmaW5pdGlvbnMgZm9yIHRoZSBncmlkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhleSB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlXG4gICAgICogW0NvbHVtbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvY29sdW1uL0NvbHVtbikgaW5zdGFuY2VzIHRoYXQgYXJlIGFkZGVkIHRvIGEgW0NvbHVtblN0b3JlXSgjR3JpZC9kYXRhL0NvbHVtblN0b3JlKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctY29sdW1ucylcbiAgICAgKi9cbiAgICBjb2x1bW5zID8gOiBDb2x1bW5TdG9yZXxHcmlkQ29sdW1uQ29uZmlnW118Q29sdW1uU3RvcmVDb25maWdcbiAgICBjb25maWcgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3NlcyB0byBhZGQgdG8gdGhlIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCkuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWNvbnRlbnRFbGVtZW50Q2xzKVxuICAgICAqL1xuICAgIGNvbnRlbnRFbGVtZW50Q2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogRXZlbnQgd2hpY2ggaXMgdXNlZCB0byBzaG93IGNvbnRleHQgbWVudXMuXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOiAnY29udGV4dG1lbnUnLCAnY2xpY2snLCAnZGJsY2xpY2snLlxuICAgICAqL1xuICAgIGNvbnRleHRNZW51VHJpZ2dlckV2ZW50ID8gOiAnY29udGV4dG1lbnUnfCdjbGljayd8J2RibGNsaWNrJ1xuICAgIC8qKlxuICAgICAqIENvbnZlbmllbnQgc2hvcnRjdXQgdG8gc2V0IGRhdGEgaW4gZ3JpZHMgc3RvcmUgYm90aCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGF0IHJ1bnRpbWUuIENhbiBhbHNvIGJlXG4gICAgICogdXNlZCB0byByZXRyaWV2ZSBkYXRhIGF0IHJ1bnRpbWUsIGFsdGhvdWdoIHdlIGRvIHJlY29tbWVuZCBpbnRlcmFjdGluZyB3aXRoIEdyaWRzIHN0b3JlIGluc3RlYWQgdXNpbmdcbiAgICAgKiB0aGUgW3N0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI3Byb3BlcnR5LXN0b3JlKSBwcm9wZXJ0eS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctZGF0YSlcbiAgICAgKi9cbiAgICBkYXRhID8gOiBvYmplY3RbXXxNb2RlbFtdfE1vZGVsQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgV2lkZ2V0IGNvbmZpZ3VyYXRpb24gaXMgdXNlZCBpbiB0aGUgR3JpZCdzIFJvd0V4cGFuZGVyIGZlYXR1cmUncyBgd2lkZ2V0YCBjb25maWcsIHByb3ZpZGUgdGhlXG4gICAgICogZmllbGQgb24gdGhlIGV4cGFuZGVkIHJlY29yZCB0byB1c2UgZm9yIHBvcHVsYXRpbmcgdGhpcyB3aWRnZXQncyBzdG9yZSAoaWYgYXBwbGljYWJsZSlcbiAgICAgKi9cbiAgICBkYXRhRmllbGQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBhcHBseSB0byBlbGVtZW50cyBkYXRhc2V0IChlYWNoIGtleSB3aWxsIGJlIHVzZWQgYXMgYSBkYXRhLWF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudClcbiAgICAgKi9cbiAgICBkYXRhc2V0ID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgLyoqXG4gICAgICogUmVnaW9uIHRvIHdoaWNoIGNvbHVtbnMgYXJlIGFkZGVkIHdoZW4gdGhleSBoYXZlIG5vbmUgc3BlY2lmaWVkXG4gICAgICovXG4gICAgZGVmYXVsdFJlZ2lvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBkZXN0cm95IHRoZSBzdG9yZSB3aGVuIHRoZSBncmlkIGlzIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBkZXN0cm95U3RvcmUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDaGVjayBmb3IgQ1NTIGNvbXBhdGliaWxpdHkgYW5kIGluY2x1c2lvbiByZWxhdGVkIGlzc3VlcyBhbmQgdHJ5IHRvIGF1dG8gZml4IHRoZW0uIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmdcbiAgICAgKiBjaGVja3M6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWFkT25seSkgZXhjZXB0IGEgZGlzYWJsZWQgd2lkZ2V0XG4gICAgICogY2Fubm90IGJlIGZvY3VzZWQsIHVzZXMgYSBkaWZmZXJlbnQgcmVuZGl0aW9uICh1c3VhbGx5IGdyZXlpc2gpIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWxlY3RpbmcgaXRzIHZhbHVlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBkaXNhYmxlZCA/IDogYm9vbGVhbnwnaW5lcnQnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBub3QgZ2V0IGEgd2FybmluZyB3aGVuIGNhbGxpbmcgW2dldFN0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2Z1bmN0aW9uLWdldFN0YXRlKSB3aGVuIHRoZXJlIGlzIGEgY29sdW1uXG4gICAgICogY29uZmlndXJlZCB3aXRob3V0IGFuIGBpZGAuIEJ1dCB0aGUgcmVjb21tZW5kZWQgYWN0aW9uIGlzIHRvIGFsd2F5cyBjb25maWd1cmUgY29sdW1ucyB3aXRoIGFuIGBpZGAgd2hlblxuICAgICAqIHVzaW5nIHN0YXRlcy5cbiAgICAgKi9cbiAgICBkaXNhYmxlR3JpZENvbHVtbklkV2FybmluZyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbm90IGdldCBhIHdhcm5pbmcgd2hlbiB1c2luZyBhbm90aGVyIGJhc2UgY2xhc3MgdGhhbiBHcmlkUm93TW9kZWwgZm9yIHlvdXIgZ3JpZCBkYXRhLiBJZlxuICAgICAqIHlvdSBkbywgYW5kIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBmdWxsIGZlYXR1cmUgc2V0IG9mIHRoZSBncmlkIHRoZW4gaW5jbHVkZSB0aGUgZmllbGRzIGZyb20gR3JpZFJvd01vZGVsXG4gICAgICogaW4geW91ciBtb2RlbCBkZWZpbml0aW9uLlxuICAgICAqL1xuICAgIGRpc2FibGVHcmlkUm93TW9kZWxXYXJuaW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgW3BhbmVsJ3MgXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwpXG4gICAgICogW3N0cmlwcyBjb2xsZWN0aW9uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXN0cmlwcykuIFR5cGljYWwgdmFsdWVzIGZvciB0aGlzIGNvbmZpZyBhcmUgYCd0b3AnYCxcbiAgICAgKiBgJ2JvdHRvbSdgLCBgJ2xlZnQnYCwgb3IgYCdyaWdodCdgLCB3aGljaCBjYXVzZSB0aGUgd2lkZ2V0IHRvIGJlIHBsYWNlZCBvbiB0aGF0IHNpZGUgb2YgdGhlIHBhbmVsJ3NcbiAgICAgKiBib2R5LiBTdWNoIHdpZGdldHMgYXJlIGNhbGxlZCBcImVkZ2Ugc3RyaXBzXCIuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWRvY2spXG4gICAgICovXG4gICAgZG9jayA/IDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0XG4gICAgLyoqXG4gICAgICogTWFrZSB0aGlzIFBhbmVsIGEgZG9ja2VkIGRyYXdlciB3aGljaCBzbGlkZXMgb3V0IGZyb20gb25lIHNpZGUgb2YgdGhlIGJyb3dzZXIgdmlld3BvcnQgYnkgZGVmYXVsdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctZHJhd2VyKVxuICAgICAqIEBwYXJhbSB7J3N0YXJ0JywnbGVmdCcsJ2VuZCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ30gW3NpZGVdIFRoZSBzaWRlIG9mIHRoZSB2aWV3cG9ydCB0byBkb2NrIHRoZSBkcmF3ZXIgdG8uICAqIGAnc3RhcnQnYCBtZWFucyB0aGUgYGlubGluZS1zdGFydGAgc2lkZS4gKiBgJ2VuZCdgIG1lYW5zIHRoZSBgaW5saW5lLWVuZGAgc2lkZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyxudW1iZXJ9IFtzaXplXSBUaGUgc2l6ZSBvZiB0aGUgZHJhd2VyIGluIGl0cyBjb2xsYXBzaWJsZSBheGlzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lubGluZV0gSWYgdXNpbmcgdGhlIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIHRvIHBsYWNlIHRoZSBkcmF3ZXIgaW5zaWRlIGEgaG9zdCB3aWRnZXQsIHRoaXMgbWF5IGJlIHNldCB0byBgdHJ1ZWAgdG8gbWFrZSB0aGUgZHJhd2VyIGlubGluZSB3aXRoaW4gdGhhdCBob3N0LiBOb3RlIHRoYXQsIGlmIHVzaW5nIHRoaXMsIHRoZSBsYXlvdXQgb2YgdGhlIGhvc3QgZWxlbWVudCBtdXN0IGhhdmUgYGZsZXgtZGlyZWN0aW9uYCBzZXQgYXBwcm9wcmlhdGVseS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sb2JqZWN0fSBbYXV0b0Nsb3NlXSBTcGVjaWZpZXMgd2hhdCB1c2VyIGFjdGlvbnMgc2hvdWxkIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGRyYXdlci4gRGVmYXVsdHMgdG8gY2xvc2luZyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIgb3Igd2hlbiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gW2F1dG9DbG9zZS5tb3VzZWRvd25dIElmIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIsIHRoZSBkcmF3ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGhpZGRlbi4gSWYgdGhlIHZhbHVlIGlzIGEgc3RyaW5nLCBpdCBpcyB1c2VkIGFzIGEgQ1NTIHNlbGVjdG9yIHRvIGZpbHRlciBjbGlja3Mgd2hpY2ggc2hvdWxkIGNsb3NlIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gW2F1dG9DbG9zZS5mb2N1c291dF0gSWYgZm9jdXMgbW92ZXMgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLCB0aGUgZHJhd2VyIHdpbGwgYXV0b21hdGljYWxseSBiZSBoaWRkZW4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthdXRvQ2xvc2UubW91c2VvdXRdIEhpZGVzIHRoZSBkcmF3ZXIgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBkcmF3ZXIgYWZ0ZXIgdGhlIGBhdXRvQ2xvc2VEZWxheWAgcGVyaW9kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXV0b0Nsb3NlRGVsYXldIFdoZW4gdXNpbmcgYG1vdXNlb3V0YCwgdGhpcyBpcyB0aGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG4gICAgICovXG4gICAgZHJhd2VyID8gOiBib29sZWFufHsgc2lkZT86ICdzdGFydCd8J2xlZnQnfCdlbmQnfCdyaWdodCd8J3RvcCd8J2JvdHRvbScsIHNpemU/OiBzdHJpbmd8bnVtYmVyLCBpbmxpbmU/OiBib29sZWFuLCBhdXRvQ2xvc2U/OiBib29sZWFufHsgbW91c2Vkb3duPzogYm9vbGVhbnxzdHJpbmcsIGZvY3Vzb3V0PzogYm9vbGVhbnxzdHJpbmcsIG1vdXNlb3V0Pzogc3RyaW5nIH0sIGF1dG9DbG9zZURlbGF5PzogbnVtYmVyIH1cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgc3BlY2lmeWluZyBhdHRyaWJ1dGVzIHRvIGFzc2lnbiB0byB0aGUgcm9vdCBlbGVtZW50IG9mIHRoaXMgd2lkZ2V0LlxuICAgICAqIFNldCBgbnVsbGAgdmFsdWUgdG8gYXR0cmlidXRlIHRvIHJlbW92ZSBpdC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctZWxlbWVudEF0dHJpYnV0ZXMpXG4gICAgICovXG4gICAgZWxlbWVudEF0dHJpYnV0ZXMgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ3xudWxsPlxuICAgIC8qKlxuICAgICAqIFRleHQgb3IgSFRNTCwgb3IgYSBbRW1wdHlUZXh0RG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI3R5cGVkZWYtRW1wdHlUZXh0RG9tQ29uZmlnKSBibG9jayB0byBkaXNwbGF5IHdoZW4gdGhlcmUgaXMgbm8gZGF0YSB0byBkaXNwbGF5IGluIHRoZSBncmlkLlxuICAgICAqIFdoZW4gdXNpbmcgbXVsdGlwbGUgR3JpZCByZWdpb25zLCBwcm92aWRlIHRoZSBgcmVnaW9uYCBwcm9wZXJ0eSB0byBkZWNpZGUgd2hlcmUgdGhlIHRleHQgaXMgc2hvd24uXG4gICAgICogQnkgZGVmYXVsdCwgaXQgaXMgc2hvd24gaW4gdGhlIGZpcnN0IHJlZ2lvbi5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctZW1wdHlUZXh0KVxuICAgICAqL1xuICAgIGVtcHR5VGV4dCA/IDogc3RyaW5nfEVtcHR5VGV4dERvbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gZW5hYmxlIHRoZSBbU3RpY2t5Q2VsbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3RpY2t5Q2VsbHMpIGZlYXR1cmUsIHdoaWNoIHBpbnMgY2VsbFxuICAgICAqIGNvbnRlbnQgdG8gdGhlIHRvcCBvZiB0aGUgZ3JpZCB3aGlsZSByb3dzIHNjcm9sbCBvZmYgdGhlIHRvcCBidXQgcmVtYWluIHZpc2libGUuXG4gICAgICogQGRlcHJlY2F0ZWQgNy4zLjAgVXNlIGBmZWF0dXJlcyA6IHsgc3RpY2t5Q2VsbHMgOiB0cnVlIH1gIGluc3RlYWRcbiAgICAgKi9cbiAgICBlbmFibGVTdGlja3kgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGFsbG93IHRleHQgc2VsZWN0aW9uIGluIHRoZSBncmlkIGNlbGxzLiBOb3RlLCB0aGlzIGNhbm5vdCBiZSB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGggdGhlXG4gICAgICogYFJvd1Jlb3JkZXJgIGZlYXR1cmUuXG4gICAgICovXG4gICAgZW5hYmxlVGV4dFNlbGVjdGlvbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbGlzdGVuIGZvciBDVFJMLVogKENNRC1aIG9uIE1hYyBPUykga2V5Ym9hcmQgZXZlbnQgYW5kIHRyaWdnZXIgdW5kbyAocmVkbyB3aGVuIFNISUZUIGlzXG4gICAgICogcHJlc3NlZCkuIE9ubHkgYXBwbGljYWJsZSB3aGVuIHVzaW5nIGEgW1N0YXRlVHJhY2tpbmdNYW5hZ2VyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9kYXRhL3N0bS9TdGF0ZVRyYWNraW5nTWFuYWdlcikuXG4gICAgICovXG4gICAgZW5hYmxlVW5kb1JlZG9LZXlzID8gOiBib29sZWFuXG4gICAgZXh0cmFEYXRhID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIHN0cmV0Y2ggdGhlIGxhc3QgY29sdW1uIGluIGEgZ3JpZCB3aXRoIGFsbCBmaXhlZCB3aWR0aCBjb2x1bW5zXG4gICAgICogdG8gZmlsbCBleHRyYSBhdmFpbGFibGUgc3BhY2UgaWYgdGhlIGdyaWQncyB3aWR0aCBpcyB3aWRlciB0aGFuIHRoZSBzdW0gb2YgYWxsXG4gICAgICogY29uZmlndXJlZCBjb2x1bW4gd2lkdGhzLlxuICAgICAqL1xuICAgIGZpbGxMYXN0Q29sdW1uID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVXNlIGZpeGVkIHJvdyBoZWlnaHQuIFNldHRpbmcgdGhpcyB0byBgdHJ1ZWAgd2lsbCBjb25maWd1cmUgdGhlIHVuZGVybHlpbmcgUm93TWFuYWdlciB0byB1c2UgZml4ZWQgcm93XG4gICAgICogaGVpZ2h0LCB3aGljaCBzYWNyaWZpY2VzIHRoZSBhYmlsaXR5IHRvIHVzZSByb3dzIHdpdGggdmFyaWFibGUgaGVpZ2h0IHRvIGdhaW4gYSBmcmFjdGlvbiBiZXR0ZXJcbiAgICAgKiBwZXJmb3JtYW5jZS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctZml4ZWRSb3dIZWlnaHQpXG4gICAgICovXG4gICAgZml4ZWRSb3dIZWlnaHQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENvbmZpZyBvYmplY3Qgb2YgYSBmb290ZXIuIE1heSBjb250YWluIGEgYGRvY2tgLCBgaHRtbGAgYW5kIGEgYGNsc2AgcHJvcGVydHkuIEEgZm9vdGVyIGlzIG5vdCBhIHdpZGdldCxcbiAgICAgKiBidXQgcmF0aGVyIHBsYWluIEhUTUwgdGhhdCBmb2xsb3dzIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhbmVsJ3MgYm9keSBhbmQgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1mb290ZXIpXG4gICAgICogQHByb3BlcnR5IHsndG9wJywncmlnaHQnLCdib3R0b20nLCdsZWZ0Jywnc3RhcnQnLCdlbmQnfSBkb2NrIFdoZXJlIHRvIGRvY2tcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gaHRtbCBIdG1sIHRvIHBvcHVsYXRlIHRoZSBmb290ZXIgd2l0aFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbHMgQ1NTIGNsYXNzIHRvIGFkZCB0byB0aGUgZm9vdGVyXG4gICAgICovXG4gICAgZm9vdGVyID8gOiBvYmplY3R8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdoaWNoIG5hbWVzIGZvcm11bGEgcHJlZml4ZXMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCBjb2x1bW5zIGNvbmZpZ3VyZWQgd2l0aFxuICAgICAqIGBmb3JtdWxhIDogdHJ1ZWAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWZvcm11bGFQcm92aWRlcnMpXG4gICAgICovXG4gICAgZm9ybXVsYVByb3ZpZGVycyA/IDogUmVjb3JkPHN0cmluZywgRm9ybXVsYVByb3ZpZGVyQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIFJlZnJlc2ggZW50aXJlIHJvdyB3aGVuIGEgcmVjb3JkIGNoYW5nZXMgKGB0cnVlYCkgb3IsIGlmIHBvc3NpYmxlLCBvbmx5IHRoZSBjZWxscyBhZmZlY3RlZCAoYGZhbHNlYCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWZ1bGxSb3dSZWZyZXNoKVxuICAgICAqL1xuICAgIGZ1bGxSb3dSZWZyZXNoID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiBjYWxsZWQgZm9yIGVhY2ggcm93IHRvIGRldGVybWluZSBpdHMgaGVpZ2h0LiBJdCBpcyBwYXNzZWQgYSBbcmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9kYXRhL01vZGVsKSBhbmRcbiAgICAgKiBleHBlY3RlZCB0byByZXR1cm4gdGhlIGRlc2lyZWQgaGVpZ2h0IG9mIHRoYXQgcmVjb3JkcyByb3cuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIEdyaWRzXG4gICAgICogY29uZmlndXJlZCBbcm93SGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1yb3dIZWlnaHQpIGlzIHVzZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWdldFJvd0hlaWdodClcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZ2V0Um93SGVpZ2h0LnJlY29yZCBSZWNvcmQgdG8gZGV0ZXJtaW5lIHJvdyBoZWlnaHQgZm9yXG4gICAgICogQHJldHVybnMge251bWJlcn0gRGVzaXJlZCByb3cgaGVpZ2h0XG4gICAgICovXG4gICAgZ2V0Um93SGVpZ2h0ID8gOiAoKSA9PiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBbb2JqZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjdHlwZWRlZi1QYW5lbEhlYWRlcikgZm9yIHRoZSBwYW5lbCdzIGhlYWRlciBvciBhIHN0cmluZyBpbiBwbGFjZSBvZiBhIGB0aXRsZWAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWhlYWRlcilcbiAgICAgKi9cbiAgICBoZWFkZXIgPyA6IHN0cmluZ3xib29sZWFufFBhbmVsSGVhZGVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgaGVpZ2h0LCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS5oZWlnaHRgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIGhlaWdodCBzdHJpbmcgb3IgYSBudW1iZXIsXG4gICAgICogd2hpY2ggd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCBoZWlnaHQsIGJ1dCBpbiBzb21lXG4gICAgICogY2FzZXMgdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICBoZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgd2l0aCB0cnVlIHRvIG1ha2Ugd2lkZ2V0IGluaXRpYWxseSBoaWRkZW4uXG4gICAgICovXG4gICAgaGlkZGVuID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBoaWRlIHRoZSBmb290ZXIgZWxlbWVudHNcbiAgICAgKi9cbiAgICBoaWRlRm9vdGVycyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaGlkZSB0aGUgY29sdW1uIGhlYWRlciBlbGVtZW50c1xuICAgICAqL1xuICAgIGhpZGVIZWFkZXJzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBoaWRlIHRoZSBHcmlkJ3MgaG9yaXpvbnRhbCBzY3JvbGxiYXIocylcbiAgICAgKi9cbiAgICBoaWRlSG9yaXpvbnRhbFNjcm9sbGJhciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEEgQ1NTIGNsYXNzIHRvIGFkZCB0byBob3ZlcmVkIHJvdyBlbGVtZW50c1xuICAgICAqL1xuICAgIGhvdmVyQ2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBpY29uIHRvIHNob3cgYmVmb3JlIHRoZSBbdGl0bGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctdGl0bGUpLiBFaXRoZXIgcGFzcyBhIENTUyBjbGFzcyBhcyBhIHN0cmluZywgb3IgcGFzcyBhXG4gICAgICogW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgb2JqZWN0IGRlc2NyaWJpbmcgYW4gZWxlbWVudCB0byByZXByZXNlbnQgdGhlIGljb24uXG4gICAgICovXG4gICAgaWNvbiA/IDogc3RyaW5nfERvbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFdpZGdldCBpZCwgaWYgbm90IHNwZWNpZmllZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuIEFsc28gdXNlZCBmb3IgbG9va3VwcyB0aHJvdWdoIFdpZGdldC5nZXRCeUlkXG4gICAgICovXG4gICAgaWQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIHdpZGdldHMgcmVhZC1vbmx5IHN0YXRlIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IGl0cyBwYXJlbnQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLWlnbm9yZVBhcmVudFJlYWRPbmx5KVxuICAgICAqL1xuICAgIGlnbm9yZVBhcmVudFJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byBhbGlnbiBpbnB1dCBmaWVsZHMgb2YgY2hpbGQgd2lkZ2V0cy4gQnkgZGVmYXVsdCwgdGhlIEZpZWxkIGlucHV0IGVsZW1lbnQgaXNcbiAgICAgKiBwbGFjZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBgbGFiZWxgLiBJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIGlucHV0IGZpZWxkcyBhbGlnbmVkIHRvIHRoZVxuICAgICAqIHJpZ2h0LCBzZXQgdGhpcyBjb25maWcgdG8gYCdlbmQnYC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctaW5wdXRGaWVsZEFsaWduKVxuICAgICAqL1xuICAgIGlucHV0RmllbGRBbGlnbiA/IDogJ3N0YXJ0J3wnZW5kJ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGluc2VydCB0aGlzIHdpZGdldCBiZWZvcmUuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKiA8ZGl2IGNsYXNzPVwibm90ZVwiPldoZW4gY3JlYXRpbmcgbmVzdGVkIHRyZWVzIG9mIHdpZGdldHMsIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0aGUgb3V0ZXJtb3N0IHdpZGdldC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctaW5zZXJ0QmVmb3JlKVxuICAgICAqL1xuICAgIGluc2VydEJlZm9yZSA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0IGVsZW1lbnQgdG8sIGFzIGEgZmlyc3QgY2hpbGQuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKiA8ZGl2IGNsYXNzPVwibm90ZVwiPldoZW4gY3JlYXRpbmcgbmVzdGVkIHRyZWVzIG9mIHdpZGdldHMsIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0aGUgb3V0ZXJtb3N0IHdpZGdldC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctaW5zZXJ0Rmlyc3QpXG4gICAgICovXG4gICAgaW5zZXJ0Rmlyc3QgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNlZSBbS2V5Ym9hcmQgc2hvcnRjdXRzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWQja2V5Ym9hcmQtc2hvcnRjdXRzKSBmb3IgZGV0YWlsc1xuICAgICAqL1xuICAgIGtleU1hcCA/IDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIHNldHRpbmcgdG8gdXNlIHNhbWUgbGFiZWwgcGxhY2VtZW50IG9uIGFsbCBjaGlsZCB3aWRnZXRzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1sYWJlbFBvc2l0aW9uKVxuICAgICAqL1xuICAgIGxhYmVsUG9zaXRpb24gPyA6ICdiZWZvcmUnfCdhYm92ZSd8J2FsaWduLWJlZm9yZSd8J2F1dG8nfG51bGxcbiAgICAvKipcbiAgICAgKiBTZXRzIGBsYWJlbFdpZHRoYCBmb3IgYWxsIGNoaWxkcmVuIG9mIHRoaXMgQ29udGFpbmVyLCB0aGF0IGRvIG5vdCBkZWZpbmUgdGhlaXIgb3duIGBsYWJlbFdpZHRoYC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctbGFiZWxXaWR0aClcbiAgICAgKi9cbiAgICBsYWJlbFdpZHRoID8gOiBudW1iZXJ8bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0ZW5lciBzZXQgZm9yIHRoaXMgb2JqZWN0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1saXN0ZW5lcnMpXG4gICAgICovXG4gICAgbGlzdGVuZXJzID8gOiBHcmlkQmFzZUxpc3RlbmVyc1xuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LCBvciBhIG1lc3NhZ2UgdG8gYmUgc2hvd24gd2hlbiBhIHN0b3JlIGlzIHBlcmZvcm1pbmcgYSByZW1vdGVcbiAgICAgKiBvcGVyYXRpb24sIG9yIENydWQgTWFuYWdlciBpcyBsb2FkaW5nIGRhdGEgZnJvbSB0aGUgc2V2ZXIuIFNldCB0byBgbnVsbGAgdG8gZGlzYWJsZSBkZWZhdWx0IGxvYWQgbWFzay5cbiAgICAgKi9cbiAgICBsb2FkTWFzayA/IDogc3RyaW5nfE1hc2tDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0IHRvIGFkanVzdCB0aGUgW21hc2tEZWZhdWx0c10oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbWFza0RlZmF1bHRzKVxuICAgICAqIHdoZW4gZGF0YSBpcyBsb2FkaW5nLiBUaGUgbWVzc2FnZSBhbmQgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmcm9tIHRoZVxuICAgICAqIFtsb2FkTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvbWl4aW4vTG9hZE1hc2thYmxlI2NvbmZpZy1sb2FkTWFzaykgY29uZmlnIHRha2UgcHJpb3JpdHkgb3ZlciB0aGVzZSBvcHRpb25zLCBqdXN0IGFzIHRoZXkgZG9cbiAgICAgKiBmb3IgYG1hc2tEZWZhdWx0c2AsIHJlc3BlY3RpdmVseS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctbG9hZE1hc2tEZWZhdWx0cylcbiAgICAgKi9cbiAgICBsb2FkTWFza0RlZmF1bHRzID8gOiBNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogQSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QgdG8gYWRqdXN0IHRoZSBbbWFza0RlZmF1bHRzXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tYXNrRGVmYXVsdHMpXG4gICAgICogd2hlbiBhbiBlcnJvciBvY2N1cnMgbG9hZGluZyBkYXRhLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1sb2FkTWFza0Vycm9yKVxuICAgICAqL1xuICAgIGxvYWRNYXNrRXJyb3IgPyA6IE1hc2tDb25maWd8TWFza3xib29sZWFuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBsb2NhbGl6YXRpb24gb2YgdGhpcyBvYmplY3QuXG4gICAgICovXG4gICAgbG9jYWxpemFibGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaW1lIGluIG1zIHVudGlsIGEgbG9uZ3ByZXNzIGlzIHRyaWdnZXJlZFxuICAgICAqL1xuICAgIGxvbmdQcmVzc1RpbWUgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIG1hcmdpbi4gVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBhIHNpbmdsZSBudW1iZXIgb3IgYSBgVFJCTGAgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyBwaXhlbHMuXG4gICAgICovXG4gICAgbWFyZ2luID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogR3JpZHMgY2hhbmdlIHRoZSBgbWFza0RlZmF1bHRzYCB0byBjb3ZlciBvbmx5IHRoZWlyIGBib2R5YCBlbGVtZW50LlxuICAgICAqL1xuICAgIG1hc2tEZWZhdWx0cyA/IDogTWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYXBwbHkgdGhlIGRlZmF1bHQgbWFzayB0byB0aGUgd2lkZ2V0LiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGNhbiBiZSB0aGUgbWFzayBtZXNzYWdlIG9yIGFcbiAgICAgKiBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgbWFza2VkID8gOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtYXhIZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1oZWlnaHQpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXhIZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWF4V2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4V2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBHcmlkJ3MgYG1pbi1oZWlnaHRgLiBEZWZhdWx0cyB0byBgMTBlbWAgdG8gYmUgc3VyZSB0aGF0IHRoZSBHcmlkIGFsd2F5cyBoYXMgYSBoZWlnaHQgd2hlcmV2ZXIgaXQgaXNcbiAgICAgKiBpbnNlcnRlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctbWluSGVpZ2h0KVxuICAgICAqL1xuICAgIG1pbkhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtaW5XaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5XaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIEdyaWQgbW9uaXRvcnMgd2luZG93IHJlc2l6ZSBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIG1vbml0b3JSZXNpemUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHBsdWdpbnMgKGFuIGFycmF5IG9mIGNsYXNzZXMpIGluIGNvbmZpZ1xuICAgICAqL1xuICAgIHBsdWdpbnMgPyA6IEluc3RhbmNlUGx1Z2luW118SW5zdGFuY2VQbHVnaW5cbiAgICAvKipcbiAgICAgKiBUcnVlIHRvIHByZXNlcnZlIGZvY3VzZWQgY2VsbCBhZnRlciBsb2FkaW5nIG5ldyBkYXRhXG4gICAgICovXG4gICAgcHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByZXNlcnZlIHRoZSBncmlkJ3MgdmVydGljYWwgc2Nyb2xsIHBvc2l0aW9uIHdoZW4gY2hhbmdlc2V0cyBhcmUgYXBwbGllZCwgYXMgaW4gdGhlIGNhc2Ugb2YgcmVtb3RlXG4gICAgICogY2hhbmdlcywgb3Igd2hlbiBzdG9yZXMgYXJlIGNvbmZpZ3VyZWQgd2l0aCBbc3luY0RhdGFPbkxvYWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUjY29uZmlnLXN5bmNEYXRhT25Mb2FkKS5cbiAgICAgKi9cbiAgICBwcmVzZXJ2ZVNjcm9sbCA/IDogUHJlc2VydmVTY3JvbGxPcHRpb25zfGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBwcmVzZXJ2ZSB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24gYWZ0ZXIgc3RvcmUgYWN0aW9ucyB0aGF0IHRyaWdnZXIgYSBgcmVmcmVzaGAgZXZlbnQsXG4gICAgICogc3VjaCBhcyBsb2FkaW5nIG5ldyBkYXRhIGFuZCBmaWx0ZXJpbmcuXG4gICAgICovXG4gICAgcHJlc2VydmVTY3JvbGxPbkRhdGFzZXRDaGFuZ2UgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IHRvb2x0aXAgZnJvbSBiZWluZyBkaXNwbGF5ZWQgb24gdG91Y2ggZGV2aWNlcy4gVXNlZnVsIGZvciBleGFtcGxlIGZvciBidXR0b25zIHRoYXQgZGlzcGxheSBhXG4gICAgICogbWVudSBvbiBjbGljayBldGMsIHNpbmNlIHRoZSB0b29sdGlwIHdvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAqL1xuICAgIHByZXZlbnRUb29sdGlwT25Ub3VjaCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbWFrZSB0aGUgZ3JpZCByZWFkLW9ubHksIGJ5IGRpc2FibGluZyBhbnkgVUlzIGZvciBtb2RpZnlpbmcgZGF0YS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWl0aGVyIGEgZGVmYXVsdCBgcmVuZGl0aW9uYCB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cywgb3IgYSBtYXAgb2YgcmVuZGl0aW9ucyBrZXllZCBieSBjaGlsZCB3aWRnZXRcbiAgICAgKiBgdHlwZWAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXJlbmRpdGlvbilcbiAgICAgKi9cbiAgICByZW5kaXRpb24gPyA6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fG51bGxcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBwcm9wZXJ0eSB0byBhbGxvdyB0aGUgd2lkZ2V0L2NvbXBvbmVudCB0byBiZSByZXNpemVkLiBQcmVzc2luZyA8a2JkPlNoaWZ0PC9rYmQ+IHdoaWxlIHJlc2l6aW5nIHdpbGxcbiAgICAgKiBjb25zdHJhaW4gdGhlIGFzcGVjdCByYXRpby5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcmVzaXphYmxlKVxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcmVzaXphYmxlLm1pbldpZHRoXSBUaGUgbWluaW11bSB3aWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW3Jlc2l6YWJsZS5tYXhXaWR0aF0gVGhlIG1heGltdW0gd2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFtyZXNpemFibGUubWluSGVpZ2h0XSBUaGUgbWluaW11bSBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IFtyZXNpemFibGUubWF4SGVpZ2h0XSBUaGUgbWF4aW11bSBoZWlnaHQgb2YgdGhlIGVsZW1lbnRcbiAgICAgKiBAcHJvcGVydHkge29iamVjdH0gW3Jlc2l6YWJsZS5oYW5kbGVzXSBBbiBvYmplY3QgY29udHJvbGxpbmcgd2hpY2ggZWRnZXMvY29ybmVycyBhcmUgcmVzaXphYmxlLlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLnRvcFN0YXJ0XSBSZXNpemFibGUgZnJvbSB0b3Atc3RhcnQgY29ybmVyXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzaXphYmxlLmhhbmRsZXMudG9wXSBSZXNpemFibGUgZnJvbSB0b3AgZWRnZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLnRvcEVuZF0gUmVzaXphYmxlIGZyb20gdG9wLWVuZCBjb3JuZXJcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNpemFibGUuaGFuZGxlcy5lbmRdIFJlc2l6YWJsZSBmcm9tIGVuZCBlZGdlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzaXphYmxlLmhhbmRsZXMuYm90dG9tRW5kXSBSZXNpemFibGUgZnJvbSBib3R0b20tZW5kIGNvcm5lclxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLmJvdHRvbV0gUmVzaXphYmxlIGZyb20gYm90dG9tIGVkZ2VcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyZXNpemFibGUuaGFuZGxlcy5ib3R0b21TdGFydF0gUmVzaXphYmxlIGZyb20gYm90dG9tLXN0YXJ0IGNvcm5lclxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Jlc2l6YWJsZS5oYW5kbGVzLnN0YXJ0XSBSZXNpemFibGUgZnJvbSBzdGFydCBlZGdlXG4gICAgICovXG4gICAgcmVzaXphYmxlID8gOiBib29sZWFufHsgbWluV2lkdGg/OiBudW1iZXIsIG1heFdpZHRoPzogbnVtYmVyLCBtaW5IZWlnaHQ/OiBudW1iZXIsIG1heEhlaWdodD86IG51bWJlciwgaGFuZGxlcz86IHsgdG9wU3RhcnQ/OiBib29sZWFuLCB0b3A/OiBib29sZWFuLCB0b3BFbmQ/OiBib29sZWFuLCBlbmQ/OiBib29sZWFuLCBib3R0b21FbmQ/OiBib29sZWFuLCBib3R0b20/OiBib29sZWFuLCBib3R0b21TdGFydD86IGJvb2xlYW4sIHN0YXJ0PzogYm9vbGVhbiB9IH1cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBvbmx5IG1lYXN1cmUgY2VsbCBjb250ZW50cyB3aGVuIGRvdWJsZS1jbGlja2luZyB0aGUgZWRnZSBiZXR3ZWVuIGNvbHVtbiBoZWFkZXJzLlxuICAgICAqL1xuICAgIHJlc2l6ZVRvRml0SW5jbHVkZXNIZWFkZXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBcIkJyZWFrIHBvaW50c1wiIGZvciB3aGljaCByZXNwb25zaXZlIGNvbmZpZyB0byB1c2UgZm9yIGNvbHVtbnMgYW5kIGNzcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcmVzcG9uc2l2ZUxldmVscylcbiAgICAgKi9cbiAgICByZXNwb25zaXZlTGV2ZWxzID8gOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXJ8c3RyaW5nfFJlc3BvbnNpdmVMZXZlbENvbmZpZz5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGhhdmUgdGhlIGNvbXBvbmVudCBkaXNwbGF5IGEgdHJhbnNsdWNlbnQgcmlwcGxlIHdoZW4gaXRzXG4gICAgICogW2ZvY3VzRWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1mb2N1c0VsZW1lbnQpLCBvciBbZWxlbWVudF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyB0YXBwZWQgPGVtPmlmIHRoZVxuICAgICAqIGN1cnJlbnQgdGhlbWUgc3VwcG9ydHMgcmlwcGxlczwvZW0+LiBPdXQgb2YgdGhlIGJveCwgb25seSB0aGUgTWF0ZXJpYWwgdGhlbWUgc3VwcG9ydHMgcmlwcGxlcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcmlwcGxlKVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVsZWdhdGVdIEEgQ1NTIHNlbGVjdG9yIHRvIGZpbHRlciB3aGljaCBjaGlsZCBlbGVtZW50cyB0cmlnZ2VyIHJpcHBsZXMuIEJ5IGRlZmF1bHQsIHRoZSByaXBwbGUgaXMgY2xpcHBlZCB0byB0aGUgdHJpZ2dlcmluZyBlbGVtZW50LlxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29sb3JdIEEgQ1NTIGNvbG9yIG5hbWUgb3Igc3BlY2lmaWNhdGlvbi5cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW3JhZGl1c10gVGhlIGVuZGluZyByYWRpdXMgb2YgdGhlIHJpcHBsZS4gTm90ZSB0aGF0IGl0IHdpbGwgYmUgY2xpcHBlZCBieSB0aGUgdGFyZ2V0IGVsZW1lbnQgYnkgZGVmYXVsdC5cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2NsaXBdIEEgc3RyaW5nIHdoaWNoIGRlc2NyaWJlcyBob3cgdG8gY2xpcCB0aGUgcmlwcGxlIGlmIGl0IGlzIG5vdCB0byBiZSBjbGlwcGVkIHRvIHRoZSBkZWZhdWx0IGVsZW1lbnQuIEVpdGhlciB0aGUgcHJvcGVydHkgb2YgdGhlIHdpZGdldCB0byB1c2UgYXMgdGhlIGNsaXBwaW5nIGVsZW1lbnQsIG9yIGEgc2VsZWN0b3IgdG8gYWxsb3cgY2xpcHBpbmcgdG8gdGhlIGNsb3Nlc3QgbWF0Y2hpbmcgYW5jZXN0b3IgdG8gdGhlIHRhcmdldCBlbGVtZW50LlxuICAgICAqL1xuICAgIHJpcHBsZSA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBUaGUgQVJJQSByb2xlIHRvIGFwcGx5IHRvIHRoaXMgd2lkZ2V0J3MgZWxlbWVudC4gQnkgZGVmYXVsdCwgdGhpcyBpcyBzZXQgdG8gYCdwcmVzZW50YXRpb24nYCB0byBhdm9pZFxuICAgICAqIGFjY2lkZW50YWxseSBhcHBseWluZyBhIHJvbGUgd2hpY2ggbWF5IGludGVyZmVyZSB3aXRoIHNjcmVlbiByZWFkZXJzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1yb2xlKVxuICAgICAqL1xuICAgIHJvbGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIElmIHlvdSBhcmUgcmVuZGVyaW5nIHRoaXMgd2lkZ2V0IHRvIGEgc2hhZG93IHJvb3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IHRoaXMgY29uZmlnIHRvIHRoZSBzaGFkb3dSb290LiBJZiBub3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IGl0IHRvIGBkb2N1bWVudC5ib2R5YFxuICAgICAqL1xuICAgIHJvb3RFbGVtZW50ID8gOiBTaGFkb3dSb290fEhUTUxFbGVtZW50XG4gICAgLyoqXG4gICAgICogUm93IGhlaWdodCBpbiBwaXhlbHMuIFRoaXMgYWxsb3dzIHRoZSBkZWZhdWx0IGhlaWdodCBmb3Igcm93cyB0byBiZSBjb250cm9sbGVkLiBOb3RlIHRoYXQgaXQgbWF5IGJlXG4gICAgICogb3ZlcnJpZGRlbiBieSBzcGVjaWZ5aW5nIGEgW3Jvd0hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZGF0YS9HcmlkUm93TW9kZWwjZmllbGQtcm93SGVpZ2h0KSBvbiBhIHBlciByZWNvcmQgYmFzaXMsIG9yIGZyb21cbiAgICAgKiBhIGNvbHVtbiBbcmVuZGVyZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLXJlbmRlcmVyKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctcm93SGVpZ2h0KVxuICAgICAqL1xuICAgIHJvd0hlaWdodCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgcm93IGxpbmVzLiBFbmQgcmVzdWx0IG1pZ2h0IGJlIG92ZXJydWxlZCBieS9kaWZmZXIgYmV0d2VlbiB0aGVtZXMuXG4gICAgICovXG4gICAgcm93TGluZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGB0cnVlYCB0byBtYWtlIHRoZSB3aWRnZXQncyBlbGVtZW50IHVzZSB0aGUgYGRpcmVjdGlvbjpydGxgIHN0eWxlLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyB3aGV0aGVyIHRoZSBncmlkIGlzIHNjcm9sbGFibGUgaW4gdGhlIGBZYCBheGlzLiBUaGlzIGlzIHVzZWQgdG8gY29uZmlndXJlIGEgW1Njcm9sbGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9oZWxwZXIvdXRpbC9TY3JvbGxlcikuXG4gICAgICogU2VlIHRoZSBbc2Nyb2xsZXJDbGFzc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc2Nyb2xsZXJDbGFzcykgY29uZmlnIG9wdGlvbi5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc2Nyb2xsYWJsZSlcbiAgICAgKi9cbiAgICBzY3JvbGxhYmxlID8gOiBib29sZWFufFNjcm9sbGVyQ29uZmlnfFNjcm9sbGVyXG4gICAgLyoqXG4gICAgICogVGhlIGNsYXNzIHRvIGluc3RhbnRpYXRlIHRvIHVzZSBhcyB0aGUgW3Njcm9sbGFibGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXNjcm9sbGFibGUpLiBEZWZhdWx0cyB0byBbU2Nyb2xsZXJdKCNDb3JlL2hlbHBlci91dGlsL1Njcm9sbGVyKS5cbiAgICAgKi9cbiAgICBzY3JvbGxlckNsYXNzID8gOiB0eXBlb2YgU2Nyb2xsZXJcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgdGhlIFtTY3JvbGxNYW5hZ2VyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS91dGlsL1Njcm9sbE1hbmFnZXIpIGNsYXNzIG9uIGluaXRpYWxpemF0aW9uLiBSZXR1cm5zIHRoZVxuICAgICAqIFtTY3JvbGxNYW5hZ2VyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS91dGlsL1Njcm9sbE1hbmFnZXIpIGF0IHJ1bnRpbWUuXG4gICAgICovXG4gICAgc2Nyb2xsTWFuYWdlciA/IDogU2Nyb2xsTWFuYWdlckNvbmZpZ3xTY3JvbGxNYW5hZ2VyXG4gICAgLyoqXG4gICAgICogU2VsZWN0aW9uIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGNoYW5nZSB0aGVzZSBwcm9wZXJ0aWVzIHRvIGNvbnRyb2wgaG93IHNlbGVjdGlvbiB3b3JrcyBhbmQgd2hhdCBjYW4gYmVcbiAgICAgKiBzZWxlY3RlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc2VsZWN0aW9uTW9kZSlcbiAgICAgKi9cbiAgICBzZWxlY3Rpb25Nb2RlID8gOiBHcmlkU2VsZWN0aW9uTW9kZVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gaGF2ZSB0aGUgZ3JpZCBzaG93IGEgcmVkIFwiY2hhbmdlZFwiIHRhZyBpbiBjZWxscyB3aG9zZVxuICAgICAqIGZpZWxkIHZhbHVlIGhhcyBjaGFuZ2VkIGFuZCBub3QgeWV0IGJlZW4gY29tbWl0dGVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1zaG93RGlydHkpXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBzaG93RGlydHkuZHVyaW5nRWRpdCBTZXQgdG8gYHRydWVgIHRvIHNob3cgdGhlIHJlZCB0YWcgd2hpbGUgZWRpdGluZyBhIGNlbGxcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHNob3dEaXJ0eS5uZXdSZWNvcmQgU2V0IHRvIGB0cnVlYCB0byBzaG93IHRoZSByZWQgdGFnIGZvciBhbGwgdGhlIGNlbGxzIG9mIHRoZSBuZXcgcmVjb3JkXG4gICAgICovXG4gICAgc2hvd0RpcnR5ID8gOiBib29sZWFufHsgZHVyaW5nRWRpdDogYm9vbGVhbiwgbmV3UmVjb3JkOiBib29sZWFuIH1cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIGhvdyBtYW55IGNvbHVtbnMgdG8gc3BhbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBzcGFuID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGlzIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc3RhdGVmdWwpXG4gICAgICovXG4gICAgc3RhdGVmdWwgPyA6IGJvb2xlYW58b2JqZWN0fHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50cyB0aGF0LCB3aGVuIGZpcmVkIGJ5IHRoaXMgY29tcG9uZW50LCBzaG91bGQgdHJpZ2dlciBpdCB0byBzYXZlIGl0cyBzdGF0ZSBieSBjYWxsaW5nXG4gICAgICogW3NhdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjZnVuY3Rpb24tc2F2ZVN0YXRlKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc3RhdGVmdWxFdmVudHMpXG4gICAgICovXG4gICAgc3RhdGVmdWxFdmVudHMgPyA6IG9iamVjdHxzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBrZXkgdG8gdXNlIHdoZW4gc2F2aW5nIHRoaXMgb2JqZWN0J3Mgc3RhdGUgaW4gdGhlIFtzdGF0ZVByb3ZpZGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVQcm92aWRlcikuIElmIHRoaXMgY29uZmlnIGlzXG4gICAgICogbm90IGFzc2lnbmVkLCBhbmQgW3N0YXRlZnVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVmdWwpIGlzIG5vdCBzZXQgdG8gYGZhbHNlYCwgdGhlIFtpZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaWQpXG4gICAgICogKGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkKSB3aWxsIGJlIHVzZWQgYXMgdGhlIGBzdGF0ZUlkYC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc3RhdGVJZClcbiAgICAgKi9cbiAgICBzdGF0ZUlkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgYFN0YXRlUHJvdmlkZXJgIHRvIHVzZSB0byBzYXZlIGFuZCByZXN0b3JlIHRoaXMgb2JqZWN0J3MgW3N0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNwcm9wZXJ0eS1zdGF0ZSkuIEJ5IGRlZmF1bHQsIGBzdGF0ZWBcbiAgICAgKiB3aWxsIGJlIHNhdmVkIHVzaW5nIHRoZSBbZGVmYXVsdCBzdGF0ZSBwcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvc3RhdGUvU3RhdGVQcm92aWRlciNwcm9wZXJ0eS1pbnN0YW5jZS1zdGF0aWMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1zdGF0ZVByb3ZpZGVyKVxuICAgICAqL1xuICAgIHN0YXRlUHJvdmlkZXIgPyA6IFN0YXRlUHJvdmlkZXJcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGlzIHNldHRpbmdzIG9iamVjdCBjb250cm9scyBob3cgZ3JpZCBpcyByZXN0b3JlZCBmcm9tIHN0YXRlIGRhdGEuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXN0YXRlU2V0dGluZ3MpXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbcmVzdG9yZVVuY29uZmlndXJlZENvbHVtbnNdIERldGVybWluZXMgd2hldGhlciB0byByZXN0b3JlIGNvbHVtbnMgZnJvbSB0aGUgc3RhdGUgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgZGVmaW5lZCBpbiB0aGUgZ3JpZCBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHN0YXRlU2V0dGluZ3MgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIFN0b3JlIHRoYXQgaG9sZHMgcmVjb3JkcyB0byBkaXNwbGF5IGluIHRoZSBncmlkLCBvciBhIHN0b3JlIGNvbmZpZyBvYmplY3QuIElmIHRoZSBjb25maWd1cmF0aW9uIGNvbnRhaW5zXG4gICAgICogYSBgcmVhZFVybGAsIGFuIGBBamF4U3RvcmVgIHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctc3RvcmUpXG4gICAgICovXG4gICAgc3RvcmUgPyA6IFN0b3JlfFN0b3JlQ29uZmlnfEFqYXhTdG9yZXxBamF4U3RvcmVDb25maWdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB3aWRnZXRzIGtleWVkIGJ5IG5hbWUuIEJ5IGRlZmF1bHQgKHdoZW4gbm8gYHR5cGVgIGlzIGdpdmVuKSwgc3RyaXBzIGFyZVxuICAgICAqIFt0b29sYmFyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIpLiBJZiB5b3Ugd2FudCB0byBwYXNzIGFuIGFycmF5LCB5b3UgY2FuIHVzZVxuICAgICAqIHRoZSB0b29sYmFyJ3MgW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcykuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXN0cmlwcylcbiAgICAgKi9cbiAgICBzdHJpcHMgPyA6IFJlY29yZDxzdHJpbmcsIEdyaWRDb250YWluZXJJdGVtQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHN1YiBncmlkIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyBrZXllZCBieSBhIGByZWdpb25gIHByb3BlcnR5LlxuICAgICAqIEJ5IGRlZmF1bHQsIGdyaWQgaGFzIGEgJ2xvY2tlZCcgcmVnaW9uIChpZiBjb25maWd1cmVkIHdpdGggbG9ja2VkIGNvbHVtbnMpIGFuZCBhICdub3JtYWwnIHJlZ2lvbi5cbiAgICAgKiBUaGUgJ25vcm1hbCcgcmVnaW9uIGRlZmF1bHRzIHRvIHVzZSBgZmxleDogMWAuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXN1YkdyaWRDb25maWdzKVxuICAgICAqL1xuICAgIHN1YkdyaWRDb25maWdzID8gOiBSZWNvcmQ8c3RyaW5nLCBTdWJHcmlkQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIEEgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LCBvciBhIG1lc3NhZ2UgdG8gYmUgc2hvd24gd2hlbiBDcnVkIE1hbmFnZXJcbiAgICAgKiBpcyBwZXJzaXN0aW5nIGNoYW5nZXMgb24gdGhlIHNlcnZlci4gU2V0IHRvIGBudWxsYCB0byBkaXNhYmxlIGRlZmF1bHQgc3luYyBtYXNrLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy1zeW5jTWFzaylcbiAgICAgKi9cbiAgICBzeW5jTWFzayA/IDogc3RyaW5nfE1hc2tDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEEgY29uZmlndXJhdGlvbiBmb3IgdGhlIFt0YWJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWIpIGNyZWF0ZWQgZm9yIHRoaXMgd2lkZ2V0IHdoZW4gaXQgaXMgcGxhY2VkIGluIGFcbiAgICAgKiBbVGFiUGFuZWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctdGFiKVxuICAgICAqL1xuICAgIHRhYiA/IDogYm9vbGVhbnxUYWJDb25maWdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgY29udGFpbmVyIGlzIHVzZWQgYXMgYSB0YWIgaW4gYSBUYWJQYW5lbCwgdGhlc2UgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZVxuICAgICAqIFtUYWJCYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJCYXIpIHdoZW4gdGhpcyBjb250YWluZXIgaXMgdGhlIGFjdGl2ZSB0YWIuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXRhYkJhckl0ZW1zKVxuICAgICAqL1xuICAgIHRhYkJhckl0ZW1zID8gOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIEEgQ29uZmlnIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBbVG9vbGJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIpLFxuICAgICAqIG9yIGFycmF5IG9mIGNvbmZpZyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgY2hpbGQgaXRlbXMgb2YgYSBUb29sYmFyLlxuICAgICAqIFRoaXMgY3JlYXRlcyBhIHRvb2xiYXIgZG9ja2VkIHRvIHRoZSB0b3Agb2YgdGhlIHBhbmVsIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBoZWFkZXIuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjY29uZmlnLXRiYXIpXG4gICAgICovXG4gICAgdGJhciA/IDogKEdyaWRDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEEgdGl0bGUgdG8gZGlzcGxheSBpbiB0aGUgaGVhZGVyIG9yIG93bmluZyBUYWJQYW5lbC4gQ2F1c2VzIGNyZWF0aW9uIGFuZCBkb2NraW5nIG9mIGEgaGVhZGVyXG4gICAgICogdG8gdGhlIHRvcCBpZiBubyBoZWFkZXIgaXMgY29uZmlndXJlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctdGl0bGUpXG4gICAgICovXG4gICAgdGl0bGUgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBbdG9vbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sKSB0byBhZGQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgYHRpdGxlYCBpbiB0aGUgUGFuZWwgaGVhZGVyLiBFYWNoXG4gICAgICogcHJvcGVydHkgbmFtZSBpcyB0aGUgcmVmZXJlbmNlIGJ5IHdoaWNoIGFuIGluc3RhbnRpYXRlZCB0b29sIG1heSBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgbGl2ZVxuICAgICAqIGBbdG9vbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9Ub29sYWJsZSNwcm9wZXJ0eS10b29scylgIHByb3BlcnR5LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2NvbmZpZy10b29scylcbiAgICAgKi9cbiAgICB0b29scyA/IDogUmVjb3JkPHN0cmluZywgVG9vbENvbmZpZz58bnVsbFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBVSSB0cmFuc2l0aW9ucyBmb3IgdmFyaW91cyBhY3Rpb25zIGluIHRoZSBncmlkLlxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaW5zZXJ0UmVjb3JkIFRyYW5zaXRpb24gcmVjb3JkIGluc2VydGlvbnNcbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92ZVJlY29yZCBUcmFuc2l0aW9uIHJlY29yZCByZW1vdmFsc1xuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG9nZ2xlQ29sdW1uIFRyYW5zaXRpb24gY29sdW1uIHZpc2liaWxpdHkgY2hhbmdlc1xuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXhwYW5kQ29sbGFwc2VDb2x1bW4gVHJhbnNpdGlvbiBwYXJlbnQvZ3JvdXAgY29sdW1uIGV4cGFuZC9jb2xsYXBzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG9nZ2xlUmVnaW9uIFRyYW5zaXRpb24gcmVnaW9uIGV4cGFuZC9jb2xsYXBzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdG9nZ2xlVHJlZU5vZGUgVHJhbnNpdGlvbiB0cmVlIG5vZGUgZXhwYW5kL2NvbGxhcHNlXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSB0b2dnbGVHcm91cCBUcmFuc2l0aW9uIGdyb3VwIGV4cGFuZC9jb2xsYXBzZVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmlsdGVyUmVtb3ZhbCBUcmFuc2l0aW9uIHJvdyByZW1vdmFscyBjYXVzZWQgYnkgZmlsdGVyaW5nICh1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zKVxuICAgICAqL1xuICAgIHRyYW5zaXRpb24gPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIEFuaW1hdGlvbiB0cmFuc2l0aW9uIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cbiAgICAgKi9cbiAgICB0cmFuc2l0aW9uRHVyYXRpb24gPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3MgbmFtZSBzdWZmaXhlcyB0byBhcHBseSB0byB0aGUgZWxlbWVudHMgcmVuZGVyZWQgYnkgdGhpcyB3aWRnZXQuIFRoaXMgbWF5IGJlIHNwZWNpZmllZFxuICAgICAqIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgYW4gYXJyYXkgb2Ygc3RyaW5ncywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzIHdpdGggdHJ1dGh5XG4gICAgICogdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNjb25maWctdWkpXG4gICAgICovXG4gICAgdWkgPyA6ICdwbGFpbid8J3Rvb2xiYXInfHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBIHdpZGdldHMgd2VpZ2h0IGRldGVybWluZXMgaXRzIHBvc2l0aW9uIGFtb25nIHNpYmxpbmdzIHdoZW4gYWRkZWQgdG8gYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKS5cbiAgICAgKiBIaWdoZXIgd2VpZ2h0cyBnbyBmdXJ0aGVyIGRvd24uXG4gICAgICovXG4gICAgd2VpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyB3aWR0aCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUud2lkdGhgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIHdpZHRoIHN0cmluZyBvciBhIG51bWJlciwgd2hpY2hcbiAgICAgKiB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIHdpZHRoLCBidXQgaW4gc29tZSBjYXNlc1xuICAgICAqIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgd2lkdGggPyA6IHN0cmluZ3xudW1iZXJcblxuICAgIC8vIEZlYXR1cmVzXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIEFJIGFnZW50IGZvciBHcmlkLiBJdCBwcm92aWRlcyBhIGNoYXQgcGFuZWwgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VuZCBtZXNzYWdlcyB0byB0aGVcbiAgICAgKiBhZ2VudCBhbmQgc2VlIHRoZSByZXNwb25zZXMuIFdoaWNoIGFsbG93cyB0aGUgdXNlciB0byB1c2UgbmF0dXJhbCBsYW5ndWFnZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBHcmlkIGluIGRpZmZlcmVudFxuICAgICAqIHdheXMuIEZvciBleGFtcGxlLCB0aGUgdXNlciBjYW4gYXNrIHRoZSBhZ2VudCB0byBmaWx0ZXIgdGhlIGRhdGEsIHNvcnQgaXQsIG9yIHNlbGVjdCBzcGVjaWZpYyByZWNvcmRzLiBUaGUgYWdlbnQgY2FuXG4gICAgICogYWxzbyBwZXJmb3JtIGRhdGEgbWFuaXB1bGF0aW9uIG9wZXJhdGlvbnMgc3VjaCBhcyBhZGRpbmcsIHVwZGF0aW5nLCBkZWxldGluZyByZWNvcmRzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0FJKVxuICAgICAqL1xuICAgIGFpRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEFJfEFJQ29uZmlnXG4gICAgLyoqXG4gICAgICogQUktcG93ZXJlZCBmaWx0ZXIgZmVhdHVyZSBmb3IgR3JpZC4gQWxsb3dzIHVzZXJzIHRvIHR5cGUgbmF0dXJhbCBsYW5ndWFnZSBxdWVyaWVzIHRvIGZpbHRlciBncmlkIGRhdGEuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvYWkvQUlGaWx0ZXIpXG4gICAgICovXG4gICAgYWlGaWx0ZXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8QUlGaWx0ZXJ8QUlGaWx0ZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdXNpbmcgYFtDdHJsL0NNRCArIENdYCwgYFtDdHJsL0NNRCArIFhdYCBhbmQgYFtDdHJsL0NNRCArIFZdYCB0byBjdXQsIGNvcHkgYW5kIHBhc3RlIGNlbGwgb3IgY2VsbCByYW5nZXMuIEFsc29cbiAgICAgKiBtYWtlcyBjdXQsIGNvcHkgYW5kIHBhc3RlIGFjdGlvbnMgYXZhaWxhYmxlIHZpYSB0aGUgY2VsbCBjb250ZXh0IG1lbnUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbENvcHlQYXN0ZSlcbiAgICAgKi9cbiAgICBjZWxsQ29weVBhc3RlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxDb3B5UGFzdGV8Q2VsbENvcHlQYXN0ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFkZGluZyB0aGlzIGZlYXR1cmUgdG8gdGhlIGdyaWQgYW5kIG90aGVyIEJyeW50dW0gcHJvZHVjdHMgd2hpY2ggYXJlIGJhc2VkIG9uIHRoZSBHcmlkIChpLmUuIFNjaGVkdWxlciwgU2NoZWR1bGVyUHJvLCBhbmQgR2FudHQpXG4gICAgICogZW5hYmxlcyBjZWxsIGVkaXRpbmcuIEFueSBzdWJjbGFzcyBvZiBbRmllbGRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9GaWVsZCkgY2FuIGJlIHVzZWRcbiAgICAgKiBhcyBlZGl0b3IgZm9yIHRoZSBbQ29sdW1uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9jb2x1bW4vQ29sdW1uKS4gVGhlIG1vc3QgcG9wdWxhciBhcmU6XG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbEVkaXQpXG4gICAgICovXG4gICAgY2VsbEVkaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbEVkaXR8Q2VsbEVkaXRDb25maWdcbiAgICAvKipcbiAgICAgKiBSaWdodCBjbGljayB0byBkaXNwbGF5IGNvbnRleHQgbWVudSBmb3IgY2VsbHMuIFRvIGludm9rZSB0aGUgY2VsbCBtZW51IGluIGEga2V5Ym9hcmQtYWNjZXNzaWJsZSBtYW5uZXIsIHVzZSB0aGVcbiAgICAgKiA8a2JkPlNwYWNlPC9rYmQ+IGtleSB3aGVuIHRoZSBjZWxsIGlzIGZvY3VzZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbE1lbnUpXG4gICAgICovXG4gICAgY2VsbE1lbnVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbE1lbnV8Q2VsbE1lbnVDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIHRvb2x0aXAgd2hlbiBob3ZlcmluZyBjZWxscy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsVG9vbHRpcClcbiAgICAgKi9cbiAgICBjZWxsVG9vbHRpcEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsVG9vbHRpcHxDZWxsVG9vbHRpcENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFkZHMgaW50ZXJhY3RpdmUgY2hhcnRpbmcgdG8gYSBHcmlkLiBbQ2hhcnRzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ2hhcnQvd2lkZ2V0L0NoYXJ0KSBjYW4gYmUgY3JlYXRlZCBmcm9tIGEgc2VsZWN0aW9uIG9mIEdyaWQgZGF0YVxuICAgICAqIGFuZCB1cGRhdGVkIGluIHJlYWx0aW1lIGFzIGRhdGEgY2hhbmdlcy4gU3VwcG9ydHMgbWFueSBjb21tb24gY2hhcnQgdHlwZXMgd2l0aCBleHRlbnNpdmUgc3R5bGluZyBhbmQgY3VzdG9taXphdGlvblxuICAgICAqIG9wdGlvbnMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2hhcnRzKVxuICAgICAqL1xuICAgIGNoYXJ0c0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDaGFydHN8Q2hhcnRzQ29uZmlnXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgW2F1dG9XaWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvY29sdW1uL0NvbHVtbiNjb25maWctYXV0b1dpZHRoKSBjb25maWcgZm9yIGEgZ3JpZCdzIGNvbHVtbnMuIFdoZW4gYSBjb2x1bW5cbiAgICAgKiBoYXMgYGF1dG9XaWR0aGAgc2V0LCB0aGlzIGZlYXR1cmUgbWVhc3VyZXMgdGhlIHJlbmRlcmVkIGNvbnRlbnQgb2YgYWxsIHZpc2libGUgY2VsbHMgaW4gdGhhdCBjb2x1bW5cbiAgICAgKiBhbmQgYWRqdXN0cyB0aGUgY29sdW1uIHdpZHRoIHRvIGZpdC4gVGhlIG1lYXN1cmVtZW50IGlzIHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5IHdoZW4gZGF0YSBjaGFuZ2VzXG4gICAgICogb3Igcm93cyBhcmUgcmVuZGVyZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uQXV0b1dpZHRoKVxuICAgICAqL1xuICAgIGNvbHVtbkF1dG9XaWR0aEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5BdXRvV2lkdGh8Q29sdW1uQXV0b1dpZHRoQ29uZmlnXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSB0b29sYmFyIHdoaWxlIGRyYWdnaW5nIGNvbHVtbiBoZWFkZXJzLiBEcm9wIG9uIGEgYnV0dG9uIGluIHRoZSB0b29sYmFyIHRvIGFjdGl2YXRlIGEgY2VydGFpbiBmdW5jdGlvbixcbiAgICAgKiBmb3IgZXhhbXBsZSB0byBncm91cCBieSB0aGF0IGNvbHVtbi4gVGhpcyBmZWF0dXJlIHNpbXBsaWZpZXMgY2VydGFpbiBvcGVyYXRpb25zIG9uIHRvdWNoIGRldmljZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uRHJhZ1Rvb2xiYXIpXG4gICAgICovXG4gICAgY29sdW1uRHJhZ1Rvb2xiYXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uRHJhZ1Rvb2xiYXJ8Q29sdW1uRHJhZ1Rvb2xiYXJDb25maWdcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIGNvbHVtbiBwaWNrZXIgKHRvIHNob3cvaGlkZSBjb2x1bW5zKSBpbiB0aGUgaGVhZGVyIGNvbnRleHQgbWVudS4gQ29sdW1ucyBjYW4gYmUgZGlzcGxheWVkIGluIHN1YiBtZW51c1xuICAgICAqIGJ5IHJlZ2lvbiBvciB0YWcuIEdyb3VwZWQgaGVhZGVycyBhcmUgZGlzcGxheWVkIGFzIG1lbnUgaGllcmFyY2hpZXMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUGlja2VyKVxuICAgICAqL1xuICAgIGNvbHVtblBpY2tlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5QaWNrZXJ8Q29sdW1uUGlja2VyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gcmVuYW1lIGNvbHVtbnMgYnkgZWl0aGVyIHJpZ2h0LWNsaWNraW5nIGNvbHVtbiBoZWFkZXIgb3IgdXNpbmcga2V5Ym9hcmQgc2hvcnRjdXRzIHdoZW4gY29sdW1uIGhlYWRlclxuICAgICAqIGlzIGZvY3VzZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUmVuYW1lKVxuICAgICAqL1xuICAgIGNvbHVtblJlbmFtZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDb2x1bW5SZW5hbWV8Q29sdW1uUmVuYW1lQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gcmVvcmRlciBjb2x1bW5zIGJ5IGRyYWdnaW5nIGhlYWRlcnMuIENsaWNrIGFuZCBkcmFnIGEgY29sdW1uIGhlYWRlciB0byBtb3ZlIGl0IHRvIGEgbmV3IHBvc2l0aW9uLlxuICAgICAqIFZpc3VhbCBmZWVkYmFjayBzaG93cyB0aGUgZHJvcCB0YXJnZXQgd2hpbGUgZHJhZ2dpbmcuIFRvIGdldCBub3RpZmllZCBhYm91dCBjb2x1bW4gcmVvcmRlciwgbGlzdGVuIHRvIHRoZVxuICAgICAqIGBjaGFuZ2VgIGV2ZW50IG9uIHRoZSBbY29sdW1uc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZGF0YS9Db2x1bW5TdG9yZSkgc3RvcmUuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ29sdW1uUmVvcmRlcilcbiAgICAgKi9cbiAgICBjb2x1bW5SZW9yZGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlb3JkZXJ8Q29sdW1uUmVvcmRlckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdXNlciB0byByZXNpemUgY29sdW1ucyBieSBkcmFnZ2luZyBhIGhhbmRsZSBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBoZWFkZXIuIEEgZHJhZyBoYW5kbGVcbiAgICAgKiBhcHBlYXJzIHdoZW4gaG92ZXJpbmcgbmVhciB0aGUgcmlnaHQgZWRnZSBvZiBhIGNvbHVtbiBoZWFkZXIuIERyYWdnaW5nIGl0IGFkanVzdHMgdGhlIGNvbHVtbiB3aWR0aCwgcmVzcGVjdGluZ1xuICAgICAqIGFueSBbbWluV2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLW1pbldpZHRoKSBvciBbbWF4V2lkdGhdKCNHcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLW1heFdpZHRoKSBjb25zdHJhaW50cy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Db2x1bW5SZXNpemUpXG4gICAgICovXG4gICAgY29sdW1uUmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlc2l6ZXxDb2x1bW5SZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiBBIGZlYXR1cmUgdGhhdCBhbGxvd3MgZXhwb3J0aW5nIEdyaWQgZGF0YSB0byBFeGNlbCBvciBDU1Ygd2l0aG91dCBpbnZvbHZpbmcgdGhlIHNlcnZlci4gSXQgdXNlc1xuICAgICAqIFtUYWJsZUV4cG9ydGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC91dGlsL1RhYmxlRXhwb3J0ZXIpIGNsYXNzIGFzIGRhdGEgcHJvdmlkZXIsIDNyZCBwYXJ0eSBwcm92aWRlciB0byBnZW5lcmF0ZSBYTFMgZmlsZXMsIGFuZFxuICAgICAqIFtNaWNyb3NvZnQgWE1MIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvb2ZmaWNlL2RvY3VtZW50Zm9ybWF0Lm9wZW54bWwuc3ByZWFkc2hlZXQuYXNweCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvZXhwZXJpbWVudGFsL0V4Y2VsRXhwb3J0ZXIpXG4gICAgICovXG4gICAgZXhjZWxFeHBvcnRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xFeGNlbEV4cG9ydGVyfEV4Y2VsRXhwb3J0ZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBBbiBleHBlcmltZW50YWwgZmVhdHVyZSB0aGF0IGxldHMgdXNlcnMgZHJvcCBmaWxlcyBvbiBhIFdpZGdldC4gVGhlIHdpZGdldCBmaXJlcyBhXG4gICAgICogW2ZpbGVEcm9wXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2V4cGVyaW1lbnRhbC9GaWxlRHJvcCNldmVudC1maWxlRHJvcCkgZXZlbnQgd2hlbiBhIGZpbGUgaXMgZHJvcHBlZCBvbnRvIGl0LiBJbiB0aGUgZXZlbnQsIHlvdSBnZXQgYWNjZXNzIHRvIHRoZSByYXdcbiAgICAgKiBmaWxlcyBhcyBzdHJpbmdzLCB0aGF0IHdlcmUgcGFyc2VkIGJ5IGNhbGxpbmcgYHJlYWRBc0JpbmFyeVN0cmluZ2AuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvZXhwZXJpbWVudGFsL0ZpbGVEcm9wKVxuICAgICAqL1xuICAgIGZpbGVEcm9wRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEZpbGVEcm9wfEZpbGVEcm9wQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhpcyBmZWF0dXJlIGFkZHMgYSBmaWxsIGhhbmRsZSB0byBhIEdyaWQgcmFuZ2Ugc2VsZWN0aW9uLCB3aGljaCB3aGVuIGRyYWdnZWQsIGZpbGxzIHRoZSBjZWxscyBiZWluZyBkcmFnZ2VkIG92ZXJcbiAgICAgKiB3aXRoIHZhbHVlcyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSBvcmlnaW5hbCBzZWxlY3RlZCByYW5nZS4gVGhpcyBpcyBzaW1pbGFyIHRvIGZ1bmN0aW9uYWxpdHkgbm9ybWFsbHkgc2VlbiBpblxuICAgICAqIHZhcmlvdXMgc3ByZWFkc2hlZXQgYXBwbGljYXRpb25zLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0ZpbGxIYW5kbGUpXG4gICAgICovXG4gICAgZmlsbEhhbmRsZUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWxsSGFuZGxlfEZpbGxIYW5kbGVDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgYWxsb3dzIGZpbHRlcmluZyBvZiB0aGUgZ3JpZCBieSBzZXR0aW5ncyBmaWx0ZXJzIG9uIGNvbHVtbnMuIFRoZSBhY3R1YWwgZmlsdGVyaW5nIGlzIGRvbmUgYnkgdGhlIHN0b3JlLlxuICAgICAqIEZvciBpbmZvIG9uIHByb2dyYW1tYXRpY2FsbHkgaGFuZGxpbmcgZmlsdGVycywgc2VlIFtTdG9yZUZpbHRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvZGF0YS9taXhpbi9TdG9yZUZpbHRlcikuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvRmlsdGVyKVxuICAgICAqL1xuICAgIGZpbHRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWx0ZXJ8RmlsdGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogRmVhdHVyZSB0aGF0IGFsbG93cyBmaWx0ZXJpbmcgb2YgdGhlIGdyaWQgYnkgZW50ZXJpbmcgZmlsdGVycyBvbiBjb2x1bW4gaGVhZGVycy5cbiAgICAgKiBUaGUgYWN0dWFsIGZpbHRlcmluZyBpcyBkb25lIGJ5IHRoZSBzdG9yZS5cbiAgICAgKiBGb3IgaW5mbyBvbiBwcm9ncmFtbWF0aWNhbGx5IGhhbmRsaW5nIGZpbHRlcnMsIHNlZSBbU3RvcmVGaWx0ZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvbWl4aW4vU3RvcmVGaWx0ZXIpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0ZpbHRlckJhcilcbiAgICAgKi9cbiAgICBmaWx0ZXJCYXJGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsdGVyQmFyfEZpbHRlckJhckNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgcmVuZGVyaW5nIGFuZCBoYW5kbGluZyBvZiByb3cgZ3JvdXBzLiBUaGUgYWN0dWFsIGdyb3VwaW5nIGlzIGRvbmUgaW4gdGhlIHN0b3JlLCBidXQgdHJpZ2dlcmVkIGJ5XG4gICAgICogPGtiZD5TaGlmdDwva2JkPiArIGNsaWNraW5nIGhlYWRlcnMsIG9yIGJ5IHVzaW5nIHRoZSBjb250ZXh0IG1lbnUsIG9yIGJ5IHVzaW5nIHR3byBmaW5nZXIgdGFwIChvbmUgb24gaGVhZGVyLFxuICAgICAqIG9uZSBhbnl3aGVyZSBvbiBncmlkKS4gVXNlIDxrYmQ+U2hpZnQ8L2tiZD4gKyA8a2JkPkFsdDwva2JkPiArIGNsaWNrLCBvciB0aGUgY29udGV4dCBtZW51LCB0byByZW1vdmUgYSBjb2x1bW5cbiAgICAgKiBncm91cGVyLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0dyb3VwKVxuICAgICAqL1xuICAgIGdyb3VwRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEdyb3VwfEdyb3VwQ29uZmlnXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBzdW1tYXJ5IHJvdyBhcyBhIGdyb3VwIGZvb3RlciBpbiBhIGdyb3VwZWQgZ3JpZC4gVXNlcyB0aGUgc2FtZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gY29sdW1ucyBhc1xuICAgICAqIFtTdW1tYXJ5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N1bW1hcnkpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL0dyb3VwU3VtbWFyeSlcbiAgICAgKi9cbiAgICBncm91cFN1bW1hcnlGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8R3JvdXBTdW1tYXJ5fEdyb3VwU3VtbWFyeUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFJpZ2h0IGNsaWNrIGNvbHVtbiBoZWFkZXIgb3IgZm9jdXMgaXQgYW5kIHByZXNzIFNQQUNFIGtleSB0byBzaG93IHRoZSBjb250ZXh0IG1lbnUgZm9yIGhlYWRlcnMuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvSGVhZGVyTWVudSlcbiAgICAgKi9cbiAgICBoZWFkZXJNZW51RmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfEhlYWRlck1lbnV8SGVhZGVyTWVudUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgZmVhdHVyZSBhbGxvd3MgcmVjb3JkcyB3aGljaCBzYXRpc2Z5IGEgY2VydGFpbiBjb25kaXRpb24gdG8gYmUgbG9ja2VkIGF0IHRoZSB0b3Agb2YgdGhlIGdyaWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvTG9ja1Jvd3MpXG4gICAgICovXG4gICAgbG9ja1Jvd3NGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TG9ja1Jvd3N8TG9ja1Jvd3NDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgbWVyZ2VzIGNlbGxzIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBpbiBzb3J0ZWQgKG9yIFtvcHRpb25hbGx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL01lcmdlQ2VsbHMjY29uZmlnLXNvcnRlZE9ubHkpIGFueSkgY29sdW1uc1xuICAgICAqIGNvbmZpZ3VyZWQgdG8gW21lcmdlQ2VsbHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9Db2x1bW4jY29uZmlnLW1lcmdlQ2VsbHMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL01lcmdlQ2VsbHMpXG4gICAgICovXG4gICAgbWVyZ2VDZWxsc0ZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xNZXJnZUNlbGxzfE1lcmdlQ2VsbHNDb25maWdcbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgUERGL1BORyBmaWxlcyBmcm9tIHRoZSBHcmlkIGNvbXBvbmVudC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9leHBvcnQvUGRmRXhwb3J0KVxuICAgICAqL1xuICAgIHBkZkV4cG9ydEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQZGZFeHBvcnR8UGRmRXhwb3J0Q29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHBpbm5pbmcgY29sdW1ucyB0byB0aGUgc3RhcnQgb3IgZW5kIHJlZ2lvbiBvZiB0aGUgZ3JpZCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHN1YkdyaWQgY29uZmlndXJhdGlvbnMuXG4gICAgICogV2hlbiBwaW5uaW5nIHRvIGEgcmVnaW9uIHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LCB0aGUgZmVhdHVyZSBjcmVhdGVzIHRoZSByZXF1aXJlZCBzdWJHcmlkIG9uIHRoZSBmbHkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvUGluQ29sdW1ucylcbiAgICAgKi9cbiAgICBwaW5Db2x1bW5zRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFBpbkNvbHVtbnN8UGluQ29sdW1uc0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIEFsbG93cyBwcmludGluZyBHcmlkIGNvbnRlbnRzIHVzaW5nIGJyb3dzZXIgcHJpbnQgZGlhbG9nLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL2V4cG9ydC9QcmludClcbiAgICAgKi9cbiAgICBwcmludEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQcmludHxQcmludENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEZlYXR1cmUgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VhcmNoIGluIGEgY29sdW1uIGJ5IGZvY3VzaW5nIGEgY2VsbCBhbmQgdHlwaW5nLiBOYXZpZ2F0ZSBiZXR3ZWVuIGhpdHMgdXNpbmcgdGhlXG4gICAgICoga2V5Ym9hcmQsIDxrYmQ+ZjM8L2tiZD4gb3IgPGtiZD5jdHJsPC9rYmQ+LzxrYmQ+Y21kPC9rYmQ+ICsgPGtiZD5nPC9rYmQ+IG1vdmVzIHRvIG5leHQsIGFsc28gcHJlc3NpbmdcbiAgICAgKiA8a2JkPnNoaWZ0PC9rYmQ+IG1vdmVzIHRvIHByZXZpb3VzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1F1aWNrRmluZClcbiAgICAgKi9cbiAgICBxdWlja0ZpbmRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8UXVpY2tGaW5kfFF1aWNrRmluZENvbmZpZ1xuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBzcGxpdHRlciBiZXR3ZWVuIGdyaWQgW3NlY3Rpb25zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L1N1YkdyaWQpIGRyYWdnYWJsZSwgdG8gbGV0IHVzZXJzIHJlc2l6ZSwgYW5kXG4gICAgICogY29sbGFwc2UvZXhwYW5kIHRoZSBzZWN0aW9ucy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9SZWdpb25SZXNpemUpXG4gICAgICovXG4gICAgcmVnaW9uUmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJlZ2lvblJlc2l6ZXxSZWdpb25SZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvdyB1c2luZyBbQ3RybC9DTUQgKyBDL1hdIGFuZCBbQ3RybC9DTUQgKyBWXSB0byBjb3B5L2N1dC1hbmQtcGFzdGUgcm93cy4gQWxzbyBtYWtlcyBjdXQsIGNvcHkgYW5kIHBhc3RlIGFjdGlvbnNcbiAgICAgKiBhdmFpbGFibGUgdmlhIHRoZSBjZWxsIGNvbnRleHQgbWVudS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dDb3B5UGFzdGUpXG4gICAgICovXG4gICAgcm93Q29weVBhc3RlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0NvcHlQYXN0ZXxSb3dDb3B5UGFzdGVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIGVkaXRpbmcgb2YgZW50aXJlIHJvd3MgaW4gYSBncmlkIGluIGEgZG9ja2VkIHBhbmVsIHdoaWNoIGJ5IGRlZmF1bHQgc2xpZGVzIG91dCBmcm9tIHRoZSByaWdodC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dFZGl0KVxuICAgICAqL1xuICAgIHJvd0VkaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Um93RWRpdHxSb3dFZGl0Q29uZmlnXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBleHBhbmRpbmcgb2YgR3JpZCByb3dzIGJ5IGVpdGhlciByb3cgY2xpY2sgb3IgZG91YmxlIGNsaWNrLCBvciBieSBhZGRpbmcgYSBzZXBhcmF0ZSBHcmlkIGNvbHVtbiB3aGljaCByZW5kZXJzXG4gICAgICogYSBidXR0b24gdGhhdCBleHBhbmRzIG9yIGNvbGxhcHNlcyB0aGUgcm93LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd0V4cGFuZGVyKVxuICAgICAqL1xuICAgIHJvd0V4cGFuZGVyRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0V4cGFuZGVyfFJvd0V4cGFuZGVyQ29uZmlnXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHVzZXIgdG8gcmVvcmRlciByb3dzIGJ5IGRyYWdnaW5nIHRoZW0uIFRvIGdldCBub3RpZmllZCBhYm91dCByb3cgcmVvcmRlciBsaXN0ZW4gdG8gYGNoYW5nZWAgZXZlbnRcbiAgICAgKiBvbiB0aGUgZ3JpZCBbc3RvcmVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvU3RvcmUpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1Jvd1Jlb3JkZXIpXG4gICAgICovXG4gICAgcm93UmVvcmRlckZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dSZW9yZGVyfFJvd1Jlb3JkZXJDb25maWdcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHVzZXIgdG8gY2hhbmdlIHJvdyBoZWlnaHQgYnkgZHJhZ2dpbmcgdGhlIGJvdHRvbSByb3cgYm9yZGVyLiBBZnRlciBhIHJlc2l6ZSBvcGVyYXRpb24sIHRoZSBbcm93SGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9kYXRhL0dyaWRSb3dNb2RlbCNmaWVsZC1yb3dIZWlnaHQpXG4gICAgICogZmllbGQgb2YgdGhlIHJlY29yZCBpcyB1cGRhdGVkICh3aGVuIFthcHBseVRvQWxsUm93c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dSZXNpemUjY29uZmlnLWFwcGx5VG9BbGxSb3dzKSBpcyBgZmFsc2VgKS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9Sb3dSZXNpemUpXG4gICAgICovXG4gICAgcm93UmVzaXplRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd1Jlc2l6ZXxSb3dSZXNpemVDb25maWdcbiAgICAvKipcbiAgICAgKiA8ZGl2IGNsYXNzPVwiZXh0ZXJuYWwtZXhhbXBsZSB2ZXJ0aWNhbFwiIGRhdGEtZmlsZT1cIkdyaWQvZmVhdHVyZS9TZWFyY2guanNcIj48L2Rpdj5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TZWFyY2gpXG4gICAgICovXG4gICAgc2VhcmNoRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNlYXJjaHxTZWFyY2hDb25maWdcbiAgICAvKipcbiAgICAgKiBBbGxvd3Mgc29ydGluZyBvZiBncmlkIGJ5IGNsaWNraW5nIChvciB0YXBwaW5nKSBoZWFkZXJzLCBhbHNvIGRpc3BsYXlzIHdoaWNoIGNvbHVtbnMgZ3JpZCBpcyBzb3J0ZWQgYnkgKG51bWJlcmVkIGlmXG4gICAgICogdXNpbmcgbXVsdGlzb3J0KS4gVXNlIG1vZGlmaWVyIGtleXMgZm9yIG11bHRpc29ydGluZzogW0N0cmwvQ01EICsgY2xpY2tdIHRvIGFkZCBzb3J0ZXIsIFtDdHJsL0NNRCArIEFsdCArIGNsaWNrXSB0byByZW1vdmUgc29ydGVyLlxuICAgICAqIFRoZSBhY3R1YWwgc29ydGluZyBpcyBkb25lIGJ5IHRoZSBzdG9yZSwgc2VlIFtTdG9yZS5zb3J0KCldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL2RhdGEvbWl4aW4vU3RvcmVTb3J0I2Z1bmN0aW9uLXNvcnQpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1NvcnQpXG4gICAgICovXG4gICAgc29ydEZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTb3J0fFNvcnRDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGlzIGZlYXR1cmUgYWxsb3dzIHNwbGl0dGluZyB0aGUgR3JpZCBpbnRvIG11bHRpcGxlIHZpZXdzLCBlaXRoZXIgYnkgdXNpbmcgdGhlIGNlbGwgY29udGV4dCBtZW51LCBvclxuICAgICAqIHByb2dyYW1tYXRpY2FsbHkgYnkgY2FsbGluZyBbc3BsaXQoKV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9TcGxpdCNmdW5jdGlvbi1zcGxpdCkuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3BsaXQpXG4gICAgICovXG4gICAgc3BsaXRGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3BsaXR8U3BsaXRDb25maWdcbiAgICAvKipcbiAgICAgKiBBIGZlYXR1cmUgd2hpY2ggcGlucyBjZWxsIGNvbnRlbnQgdG8gdGhlIHRvcCBvZiB0aGUgZ3JpZCB3aGlsZSB0aGUgcm93IHNjcm9sbHMgb2ZmIHRoZSB0b3AgYnV0IGlzIHN0aWxsIHZpc2libGUuIFZlcnlcbiAgICAgKiBzaW1pbGFyIHRvIG5hdGl2ZSBgcG9zaXRpb246IHN0aWNreWAsIHdoaWNoIGJlY2F1c2Ugb2YgR3JpZCdzIG11bHRpcGxlLXJlZ2lvbiBzZXR1cCB1bmZvcnR1bmF0ZWx5IGNhbm5vdCBiZSB1c2VkIHRvXG4gICAgICogYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvU3RpY2t5Q2VsbHMpXG4gICAgICovXG4gICAgc3RpY2t5Q2VsbHNGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3RpY2t5Q2VsbHN8U3RpY2t5Q2VsbHNDb25maWdcbiAgICAvKipcbiAgICAgKiBTdHJpcGVzIHJvd3MgYnkgYWRkaW5nIGFsdGVybmF0aW5nIENTUyBjbGFzc2VzIHRvIGFsbCByb3cgZWxlbWVudHMgKGBiLWV2ZW5gIGFuZCBgYi1vZGRgKS5cbiAgICAgKiBUaGlzIGltcHJvdmVzIHZpc3VhbCByZWFkYWJpbGl0eSBpbiBkYXRhLWhlYXZ5IGdyaWRzIGJ5IGdpdmluZyBhZGphY2VudCByb3dzIGRpZmZlcmVudCBiYWNrZ3JvdW5kIGNvbG9ycy5cbiAgICAgKiBTdHlsZSB0aGUgc3RyaXBlZCByb3dzIHVzaW5nIHRoZSBgLmItZXZlbmAgYW5kIGAuYi1vZGRgIENTUyBjbGFzc2VzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N0cmlwZSlcbiAgICAgKi9cbiAgICBzdHJpcGVGZWF0dXJlID8gOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3RyaXBlfFN0cmlwZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgc3VtbWFyeSByb3cgaW4gdGhlIGdyaWQgZm9vdGVyLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC9mZWF0dXJlL1N1bW1hcnkpXG4gICAgICovXG4gICAgc3VtbWFyeUZlYXR1cmUgPyA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdW1tYXJ5fFN1bW1hcnlDb25maWdcbiAgICAvKipcbiAgICAgKiBGZWF0dXJlIHRoYXQgbWFrZXMgdGhlIGdyaWQgd29yayBtb3JlIGxpa2UgYSB0cmVlLiBJbmNsdWRlZCBieSBkZWZhdWx0IGluIFtUcmVlR3JpZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9UcmVlR3JpZCkuIFJlcXVpcmVzXG4gICAgICogZXhhY3RseSBvbmUgW1RyZWVDb2x1bW5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2NvbHVtbi9UcmVlQ29sdW1uKSBhbW9uZyBncmlkcyBjb2x1bW5zLiBUaGF0IGNvbHVtbiB3aWxsIGhhdmUgaXRzIHJlbmRlcmVyIHJlcGxhY2VkIHdpdGggYVxuICAgICAqIHRyZWUgcmVuZGVyZXIgdGhhdCBhZGRzIHBhZGRpbmcgYW5kIGljb24gdG8gZ2l2ZSB0aGUgYXBwZWFyYW5jZSBvZiBhIHRyZWUuIFRoZSBvcmlnaW5hbCByZW5kZXJlciBpcyBwcmVzZXJ2ZWQgYW5kXG4gICAgICogYWxzbyBjYWxsZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvVHJlZSlcbiAgICAgKi9cbiAgICB0cmVlRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWV8VHJlZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgZmVhdHVyZSB0aGF0IGFsbG93cyB0cmFuc2Zvcm1pbmcgYSBmbGF0IGRhdGFzZXQgKG9yIHRoZSBsZWF2ZXMgb2YgYSBoaWVyYXJjaGljYWwpIGludG8gYSB0cmVlIGJ5IHNwZWNpZnlpbmcgYVxuICAgICAqIHJlY29yZCBmaWVsZCBwZXIgcGFyZW50IGxldmVsLiBQYXJlbnRzIGFyZSBnZW5lcmF0ZWQgYmFzZWQgb24gZWFjaCBsZWFmJ3MgdmFsdWUgZm9yIHRob3NlIGZpZWxkcy5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9UcmVlR3JvdXApXG4gICAgICovXG4gICAgdHJlZUdyb3VwRmVhdHVyZSA/IDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWVHcm91cHxUcmVlR3JvdXBDb25maWdcblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLWdyaWQtYmFzZScsXG4gICAgdGVtcGxhdGUgOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtR3JpZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlQ2xhc3MgPSBHcmlkQmFzZTtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VOYW1lID0gJ0dyaWRCYXNlJztcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1FdmVudHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAnb25CZWZvcmVDYW5jZWxDZWxsRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUNhbmNlbFJvd0VkaXQnLFxuICAgICAgICAnb25CZWZvcmVDZWxsRWRpdFN0YXJ0JyxcbiAgICAgICAgJ29uQmVmb3JlQ2VsbFJhbmdlRGVsZXRlJyxcbiAgICAgICAgJ29uQmVmb3JlQ2VsbFJhbmdlRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUNvbHVtbkNvbGxhcHNlVG9nZ2xlJyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uRHJvcEZpbmFsaXplJyxcbiAgICAgICAgJ29uQmVmb3JlQ29sdW1uUmVzaXplJyxcbiAgICAgICAgJ29uQmVmb3JlQ29weScsXG4gICAgICAgICdvbkJlZm9yZUNTVkV4cG9ydCcsXG4gICAgICAgICdvbkJlZm9yZURlc3Ryb3knLFxuICAgICAgICAnb25CZWZvcmVFeGNlbEV4cG9ydCcsXG4gICAgICAgICdvbkJlZm9yZUZpbGxIYW5kbGVEcmFnU3RhcnQnLFxuICAgICAgICAnb25CZWZvcmVGaW5pc2hDZWxsRWRpdCcsXG4gICAgICAgICdvbkJlZm9yZUZpbmlzaFJvd0VkaXQnLFxuICAgICAgICAnb25CZWZvcmVIaWRlJyxcbiAgICAgICAgJ29uQmVmb3JlUGFzdGUnLFxuICAgICAgICAnb25CZWZvcmVQZGZFeHBvcnQnLFxuICAgICAgICAnb25CZWZvcmVSZW5kZXJSb3cnLFxuICAgICAgICAnb25CZWZvcmVSZW5kZXJSb3dzJyxcbiAgICAgICAgJ29uQmVmb3JlUm93Q29sbGFwc2UnLFxuICAgICAgICAnb25CZWZvcmVSb3dFeHBhbmQnLFxuICAgICAgICAnb25CZWZvcmVTZWxlY3Rpb25DaGFuZ2UnLFxuICAgICAgICAnb25CZWZvcmVTZXRSZWNvcmQnLFxuICAgICAgICAnb25CZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhcnRSb3dFZGl0JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhdGVBcHBseScsXG4gICAgICAgICdvbkJlZm9yZVN0YXRlU2F2ZScsXG4gICAgICAgICdvbkJlZm9yZVRvZ2dsZUdyb3VwJyxcbiAgICAgICAgJ29uQmVmb3JlVG9nZ2xlTm9kZScsXG4gICAgICAgICdvbkNhbmNlbENlbGxFZGl0JyxcbiAgICAgICAgJ29uQ2F0Y2hBbGwnLFxuICAgICAgICAnb25DZWxsQ2xpY2snLFxuICAgICAgICAnb25DZWxsQ29udGV4dE1lbnUnLFxuICAgICAgICAnb25DZWxsRGJsQ2xpY2snLFxuICAgICAgICAnb25DZWxsTWVudUJlZm9yZVNob3cnLFxuICAgICAgICAnb25DZWxsTWVudUl0ZW0nLFxuICAgICAgICAnb25DZWxsTWVudVNob3cnLFxuICAgICAgICAnb25DZWxsTWVudVRvZ2dsZUl0ZW0nLFxuICAgICAgICAnb25DZWxsTW91c2VFbnRlcicsXG4gICAgICAgICdvbkNlbGxNb3VzZUxlYXZlJyxcbiAgICAgICAgJ29uQ2VsbE1vdXNlT3V0JyxcbiAgICAgICAgJ29uQ2VsbE1vdXNlT3ZlcicsXG4gICAgICAgICdvbkNvbGxhcHNlJyxcbiAgICAgICAgJ29uQ29sbGFwc2VOb2RlJyxcbiAgICAgICAgJ29uQ29sdW1uQ29sbGFwc2VUb2dnbGUnLFxuICAgICAgICAnb25Db2x1bW5EcmFnJyxcbiAgICAgICAgJ29uQ29sdW1uRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uQ29sdW1uRHJvcCcsXG4gICAgICAgICdvbkNvbHVtblJlc2l6ZScsXG4gICAgICAgICdvbkNvbHVtblJlc2l6ZVN0YXJ0JyxcbiAgICAgICAgJ29uQ29udGV4dE1lbnVJdGVtJyxcbiAgICAgICAgJ29uQ29udGV4dE1lbnVUb2dnbGVJdGVtJyxcbiAgICAgICAgJ29uQ29weScsXG4gICAgICAgICdvbkRhdGFDaGFuZ2UnLFxuICAgICAgICAnb25EZXN0cm95JyxcbiAgICAgICAgJ29uRGlydHlTdGF0ZUNoYW5nZScsXG4gICAgICAgICdvbkRyYWdTZWxlY3RpbmcnLFxuICAgICAgICAnb25FbGVtZW50Q3JlYXRlZCcsXG4gICAgICAgICdvbkV4cGFuZCcsXG4gICAgICAgICdvbkV4cGFuZE5vZGUnLFxuICAgICAgICAnb25GaWxlRHJvcCcsXG4gICAgICAgICdvbkZpbGxIYW5kbGVCZWZvcmVEcmFnRmluYWxpemUnLFxuICAgICAgICAnb25GaWxsSGFuZGxlRHJhZycsXG4gICAgICAgICdvbkZpbGxIYW5kbGVEcmFnQWJvcnQnLFxuICAgICAgICAnb25GaWxsSGFuZGxlRHJhZ0VuZCcsXG4gICAgICAgICdvbkZpbGxIYW5kbGVEcmFnU3RhcnQnLFxuICAgICAgICAnb25GaW5pc2hDZWxsRWRpdCcsXG4gICAgICAgICdvbkZpbmlzaFJvd0VkaXQnLFxuICAgICAgICAnb25Gb2N1c0luJyxcbiAgICAgICAgJ29uRm9jdXNPdXQnLFxuICAgICAgICAnb25HcmlkUm93QmVmb3JlRHJhZ1N0YXJ0JyxcbiAgICAgICAgJ29uR3JpZFJvd0JlZm9yZURyb3BGaW5hbGl6ZScsXG4gICAgICAgICdvbkdyaWRSb3dEcmFnJyxcbiAgICAgICAgJ29uR3JpZFJvd0RyYWdBYm9ydCcsXG4gICAgICAgICdvbkdyaWRSb3dEcmFnU3RhcnQnLFxuICAgICAgICAnb25HcmlkUm93RHJvcCcsXG4gICAgICAgICdvbkhlYWRlckNsaWNrJyxcbiAgICAgICAgJ29uSGVhZGVyTWVudUJlZm9yZVNob3cnLFxuICAgICAgICAnb25IZWFkZXJNZW51SXRlbScsXG4gICAgICAgICdvbkhlYWRlck1lbnVTaG93JyxcbiAgICAgICAgJ29uSGVhZGVyTWVudVRvZ2dsZUl0ZW0nLFxuICAgICAgICAnb25IaWRlJyxcbiAgICAgICAgJ29uTG9ja1Jvd3MnLFxuICAgICAgICAnb25Nb3VzZU91dCcsXG4gICAgICAgICdvbk1vdXNlT3ZlcicsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUGFzdGUnLFxuICAgICAgICAnb25QZGZFeHBvcnQnLFxuICAgICAgICAnb25SZWFkT25seScsXG4gICAgICAgICdvblJlY29tcG9zZScsXG4gICAgICAgICdvblJlbmRlclJvdycsXG4gICAgICAgICdvblJlbmRlclJvd3MnLFxuICAgICAgICAnb25SZXNpemUnLFxuICAgICAgICAnb25SZXNwb25zaXZlJyxcbiAgICAgICAgJ29uUm93Q29sbGFwc2UnLFxuICAgICAgICAnb25Sb3dFeHBhbmQnLFxuICAgICAgICAnb25Sb3dNb3VzZUVudGVyJyxcbiAgICAgICAgJ29uUm93TW91c2VMZWF2ZScsXG4gICAgICAgICdvblNjcm9sbCcsXG4gICAgICAgICdvblNlbGVjdGlvbkNoYW5nZScsXG4gICAgICAgICdvblNlbGVjdGlvbk1vZGVDaGFuZ2UnLFxuICAgICAgICAnb25TaG93JyxcbiAgICAgICAgJ29uU3BsaXQnLFxuICAgICAgICAnb25TcGxpdHRlckNvbGxhcHNlQ2xpY2snLFxuICAgICAgICAnb25TcGxpdHRlckRyYWdFbmQnLFxuICAgICAgICAnb25TcGxpdHRlckRyYWdTdGFydCcsXG4gICAgICAgICdvblNwbGl0dGVyRXhwYW5kQ2xpY2snLFxuICAgICAgICAnb25TdGFydENlbGxFZGl0JyxcbiAgICAgICAgJ29uU3RhcnRSb3dFZGl0JyxcbiAgICAgICAgJ29uU3ViR3JpZENvbGxhcHNlJyxcbiAgICAgICAgJ29uU3ViR3JpZEV4cGFuZCcsXG4gICAgICAgICdvblRvZ2dsZUdyb3VwJyxcbiAgICAgICAgJ29uVG9nZ2xlTm9kZScsXG4gICAgICAgICdvblRvb2xDbGljaycsXG4gICAgICAgICdvblRyZWVHcm91cCcsXG4gICAgICAgICdvblVubG9ja1Jvd3MnLFxuICAgICAgICAnb25VbnNwbGl0J1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2FpRmVhdHVyZScsXG4gICAgICAgICdhaUZpbHRlckZlYXR1cmUnLFxuICAgICAgICAnY2VsbENvcHlQYXN0ZUZlYXR1cmUnLFxuICAgICAgICAnY2VsbEVkaXRGZWF0dXJlJyxcbiAgICAgICAgJ2NlbGxNZW51RmVhdHVyZScsXG4gICAgICAgICdjZWxsVG9vbHRpcEZlYXR1cmUnLFxuICAgICAgICAnY2hhcnRzRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5BdXRvV2lkdGhGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtbkRyYWdUb29sYmFyRmVhdHVyZScsXG4gICAgICAgICdjb2x1bW5QaWNrZXJGZWF0dXJlJyxcbiAgICAgICAgJ2NvbHVtblJlbmFtZUZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVvcmRlckZlYXR1cmUnLFxuICAgICAgICAnY29sdW1uUmVzaXplRmVhdHVyZScsXG4gICAgICAgICdleGNlbEV4cG9ydGVyRmVhdHVyZScsXG4gICAgICAgICdmaWxlRHJvcEZlYXR1cmUnLFxuICAgICAgICAnZmlsbEhhbmRsZUZlYXR1cmUnLFxuICAgICAgICAnZmlsdGVyRmVhdHVyZScsXG4gICAgICAgICdmaWx0ZXJCYXJGZWF0dXJlJyxcbiAgICAgICAgJ2dyb3VwRmVhdHVyZScsXG4gICAgICAgICdncm91cFN1bW1hcnlGZWF0dXJlJyxcbiAgICAgICAgJ2hlYWRlck1lbnVGZWF0dXJlJyxcbiAgICAgICAgJ2xvY2tSb3dzRmVhdHVyZScsXG4gICAgICAgICdtZXJnZUNlbGxzRmVhdHVyZScsXG4gICAgICAgICdwZGZFeHBvcnRGZWF0dXJlJyxcbiAgICAgICAgJ3BpbkNvbHVtbnNGZWF0dXJlJyxcbiAgICAgICAgJ3ByaW50RmVhdHVyZScsXG4gICAgICAgICdxdWlja0ZpbmRGZWF0dXJlJyxcbiAgICAgICAgJ3JlZ2lvblJlc2l6ZUZlYXR1cmUnLFxuICAgICAgICAncm93Q29weVBhc3RlRmVhdHVyZScsXG4gICAgICAgICdyb3dFZGl0RmVhdHVyZScsXG4gICAgICAgICdyb3dFeHBhbmRlckZlYXR1cmUnLFxuICAgICAgICAncm93UmVvcmRlckZlYXR1cmUnLFxuICAgICAgICAncm93UmVzaXplRmVhdHVyZScsXG4gICAgICAgICdzZWFyY2hGZWF0dXJlJyxcbiAgICAgICAgJ3NvcnRGZWF0dXJlJyxcbiAgICAgICAgJ3NwbGl0RmVhdHVyZScsXG4gICAgICAgICdzdGlja3lDZWxsc0ZlYXR1cmUnLFxuICAgICAgICAnc3RyaXBlRmVhdHVyZScsXG4gICAgICAgICdzdW1tYXJ5RmVhdHVyZScsXG4gICAgICAgICd0cmVlRmVhdHVyZScsXG4gICAgICAgICd0cmVlR3JvdXBGZWF0dXJlJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtR3JpZEJhc2VDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWRvcHQnLFxuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FuaW1hdGVGaWx0ZXJSZW1vdmFscycsXG4gICAgICAgICdhbmltYXRlUmVtb3ZpbmdSb3dzJyxcbiAgICAgICAgJ2FuaW1hdGVUcmVlTm9kZVRvZ2dsZScsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2F1dG9IZWlnaHQnLFxuICAgICAgICAnYmJhcicsXG4gICAgICAgICdib2R5Q2xzJyxcbiAgICAgICAgJ2JvcmRlcicsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZWxsRWxsaXBzaXMnLFxuICAgICAgICAnY2xzJyxcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29sdW1uTGluZXMnLFxuICAgICAgICAnY29sdW1ucycsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQnLFxuICAgICAgICAnZGF0YScsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkZWZhdWx0UmVnaW9uJyxcbiAgICAgICAgJ2Rlc3Ryb3lTdG9yZScsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2Rpc2FibGVHcmlkQ29sdW1uSWRXYXJuaW5nJyxcbiAgICAgICAgJ2Rpc2FibGVHcmlkUm93TW9kZWxXYXJuaW5nJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhd2VyJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2VtcHR5VGV4dCcsXG4gICAgICAgICdlbmFibGVTdGlja3knLFxuICAgICAgICAnZW5hYmxlVGV4dFNlbGVjdGlvbicsXG4gICAgICAgICdlbmFibGVVbmRvUmVkb0tleXMnLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZpbGxMYXN0Q29sdW1uJyxcbiAgICAgICAgJ2ZpeGVkUm93SGVpZ2h0JyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2Zvcm11bGFQcm92aWRlcnMnLFxuICAgICAgICAnZnVsbFJvd1JlZnJlc2gnLFxuICAgICAgICAnZ2V0Um93SGVpZ2h0JyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVGb290ZXJzJyxcbiAgICAgICAgJ2hpZGVIZWFkZXJzJyxcbiAgICAgICAgJ2hpZGVIb3Jpem9udGFsU2Nyb2xsYmFyJyxcbiAgICAgICAgJ2hvdmVyQ2xzJyxcbiAgICAgICAgJ2ljb24nLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2FkTWFzaycsXG4gICAgICAgICdsb2FkTWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ2xvYWRNYXNrRXJyb3InLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9uZ1ByZXNzVGltZScsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAncGx1Z2lucycsXG4gICAgICAgICdwcmVzZXJ2ZUZvY3VzT25EYXRhc2V0Q2hhbmdlJyxcbiAgICAgICAgJ3ByZXNlcnZlU2Nyb2xsJyxcbiAgICAgICAgJ3ByZXNlcnZlU2Nyb2xsT25EYXRhc2V0Q2hhbmdlJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdyZWFkT25seScsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdyZXNpemFibGUnLFxuICAgICAgICAncmVzaXplVG9GaXRJbmNsdWRlc0hlYWRlcicsXG4gICAgICAgICdyZXNwb25zaXZlTGV2ZWxzJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb2xlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3Jvd0hlaWdodCcsXG4gICAgICAgICdyb3dMaW5lcycsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzY3JvbGxlckNsYXNzJyxcbiAgICAgICAgJ3Njcm9sbE1hbmFnZXInLFxuICAgICAgICAnc2VsZWN0aW9uTW9kZScsXG4gICAgICAgICdzaG93RGlydHknLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RhdGVTZXR0aW5ncycsXG4gICAgICAgICdzdG9yZScsXG4gICAgICAgICdzdHJpcHMnLFxuICAgICAgICAnc3ViR3JpZENvbmZpZ3MnLFxuICAgICAgICAnc3luY01hc2snLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhYkJhckl0ZW1zJyxcbiAgICAgICAgJ3RiYXInLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHMnLFxuICAgICAgICAndHJhbnNpdGlvbicsXG4gICAgICAgICd0cmFuc2l0aW9uRHVyYXRpb24nLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2VpZ2h0JyxcbiAgICAgICAgJ3dpZHRoJ1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3NPbmx5OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FuaW1hdGVGaWx0ZXJSZW1vdmFscycsXG4gICAgICAgICdhbmltYXRlUmVtb3ZpbmdSb3dzJyxcbiAgICAgICAgJ2FyaWFEZXNjcmlwdGlvbicsXG4gICAgICAgICdhcmlhTGFiZWwnLFxuICAgICAgICAnYXV0b0hlaWdodCcsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYm9yZGVyJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjb2xsYXBzaWJsZScsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RlZmF1bHRSZWdpb24nLFxuICAgICAgICAnZGVzdHJveVN0b3JlJyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZUdyaWRDb2x1bW5JZFdhcm5pbmcnLFxuICAgICAgICAnZGlzYWJsZUdyaWRSb3dNb2RlbFdhcm5pbmcnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW5hYmxlU3RpY2t5JyxcbiAgICAgICAgJ2VuYWJsZVRleHRTZWxlY3Rpb24nLFxuICAgICAgICAnZmlsbExhc3RDb2x1bW4nLFxuICAgICAgICAnZml4ZWRSb3dIZWlnaHQnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2Zvcm11bGFQcm92aWRlcnMnLFxuICAgICAgICAnZnVsbFJvd1JlZnJlc2gnLFxuICAgICAgICAnZ2V0Um93SGVpZ2h0JyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoaWRlSG9yaXpvbnRhbFNjcm9sbGJhcicsXG4gICAgICAgICdob3ZlckNscycsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2FkTWFzaycsXG4gICAgICAgICdsb2FkTWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ2xvYWRNYXNrRXJyb3InLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtb25pdG9yUmVzaXplJyxcbiAgICAgICAgJ3BsdWdpbnMnLFxuICAgICAgICAncHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmVzZXJ2ZVNjcm9sbE9uRGF0YXNldENoYW5nZScsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZXNpemFibGUnLFxuICAgICAgICAncmVzaXplVG9GaXRJbmNsdWRlc0hlYWRlcicsXG4gICAgICAgICdyZXNwb25zaXZlTGV2ZWxzJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb2xlJyxcbiAgICAgICAgJ3Jvb3RFbGVtZW50JyxcbiAgICAgICAgJ3Njcm9sbGVyQ2xhc3MnLFxuICAgICAgICAnc2Nyb2xsTWFuYWdlcicsXG4gICAgICAgICdzaG93RGlydHknLFxuICAgICAgICAnc3RhdGVmdWwnLFxuICAgICAgICAnc3RhdGVmdWxFdmVudHMnLFxuICAgICAgICAnc3RhdGVJZCcsXG4gICAgICAgICdzdGF0ZVByb3ZpZGVyJyxcbiAgICAgICAgJ3N0cmlwcycsXG4gICAgICAgICdzdWJHcmlkQ29uZmlncycsXG4gICAgICAgICdzeW5jTWFzaycsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiQmFySXRlbXMnLFxuICAgICAgICAndGJhcicsXG4gICAgICAgICd1aScsXG4gICAgICAgICd3ZWlnaHQnXG4gICAgXTtcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1Qcm9wczogc3RyaW5nW10gPSBCcnludHVtR3JpZEJhc2VDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FuaW1hdGVUcmVlTm9kZVRvZ2dsZScsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NlbGxFbGxpcHNpcycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb2x1bW5MaW5lcycsXG4gICAgICAgICdjb2x1bW5zJyxcbiAgICAgICAgJ2RhdGEnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdlbXB0eVRleHQnLFxuICAgICAgICAnZW5hYmxlVW5kb1JlZG9LZXlzJyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUZvb3RlcnMnLFxuICAgICAgICAnaGlkZUhlYWRlcnMnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYWJlbFdpZHRoJyxcbiAgICAgICAgJ2xvbmdQcmVzc1RpbWUnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtaW5IZWlnaHQnLFxuICAgICAgICAnbWluV2lkdGgnLFxuICAgICAgICAnb3JpZ2luYWxTdG9yZScsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncHJlc2VydmVTY3JvbGwnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3Jvd0hlaWdodCcsXG4gICAgICAgICdyb3dMaW5lcycsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzZWxlY3RlZENlbGwnLFxuICAgICAgICAnc2VsZWN0ZWRDZWxscycsXG4gICAgICAgICdzZWxlY3RlZFJlY29yZCcsXG4gICAgICAgICdzZWxlY3RlZFJlY29yZHMnLFxuICAgICAgICAnc2VsZWN0ZWRSb3dzJyxcbiAgICAgICAgJ3NlbGVjdGlvbk1vZGUnLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzdGF0ZScsXG4gICAgICAgICdzdGF0ZVNldHRpbmdzJyxcbiAgICAgICAgJ3N0b3JlJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndHJhbnNpdGlvbicsXG4gICAgICAgICd0cmFuc2l0aW9uRHVyYXRpb24nLFxuICAgICAgICAnd2lkdGgnXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICAgcHVibGljIGluc3RhbmNlITogR3JpZEJhc2U7XG5cbiAgICBwcml2YXRlIGJyeW50dW1Db25maWcgPSB7XG4gICAgICAgIGFkb3B0ICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFwcGVuZFRvICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGhyZWYgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFuZ3VsYXJDb21wb25lbnQgOiB0aGlzLFxuICAgICAgICBmZWF0dXJlcyAgICAgICAgIDoge30sXG4gICAgICAgIGxpc3RlbmVycyAgICAgICAgOiB7fVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlncyBvbmx5XG4gICAgQElucHV0KCkgYWRvcHQgICAgICAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBhbmltYXRlRmlsdGVyUmVtb3ZhbHMgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbmltYXRlUmVtb3ZpbmdSb3dzICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcmlhRGVzY3JpcHRpb24gICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b0hlaWdodCAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYmJhciAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChHcmlkQ29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgYm9keUNscyAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgYm9yZGVyICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYnViYmxlRXZlbnRzICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2xsYXBzaWJsZSAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWc7XG4gICAgQElucHV0KCkgY29sb3IgICAgICAgICAgICAgICAgICAgICAgICAgISA6IENvbG9yO1xuICAgIEBJbnB1dCgpIGNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY29udGVudEVsZW1lbnRDbHMgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgY29udGV4dE1lbnVUcmlnZ2VyRXZlbnQgICAgICAgISA6ICdjb250ZXh0bWVudSd8J2NsaWNrJ3wnZGJsY2xpY2snO1xuICAgIEBJbnB1dCgpIGRhdGFGaWVsZCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdFJlZ2lvbiAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZXN0cm95U3RvcmUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlR3JpZENvbHVtbklkV2FybmluZyAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlR3JpZFJvd01vZGVsV2FybmluZyAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGRyYXdlciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHsgc2lkZT86ICdzdGFydCd8J2xlZnQnfCdlbmQnfCdyaWdodCd8J3RvcCd8J2JvdHRvbScsIHNpemU/OiBzdHJpbmd8bnVtYmVyLCBpbmxpbmU/OiBib29sZWFuLCBhdXRvQ2xvc2U/OiBib29sZWFufHsgbW91c2Vkb3duPzogYm9vbGVhbnxzdHJpbmcsIGZvY3Vzb3V0PzogYm9vbGVhbnxzdHJpbmcsIG1vdXNlb3V0Pzogc3RyaW5nIH0sIGF1dG9DbG9zZURlbGF5PzogbnVtYmVyIH07XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ3xudWxsPjtcbiAgICBASW5wdXQoKSBlbmFibGVTdGlja3kgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBlbmFibGVUZXh0U2VsZWN0aW9uICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmaWxsTGFzdENvbHVtbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmaXhlZFJvd0hlaWdodCAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmb290ZXIgICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fHN0cmluZztcbiAgICBASW5wdXQoKSBmb3JtdWxhUHJvdmlkZXJzICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgRm9ybXVsYVByb3ZpZGVyQ29uZmlnPjtcbiAgICBASW5wdXQoKSBmdWxsUm93UmVmcmVzaCAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBnZXRSb3dIZWlnaHQgICAgICAgICAgICAgICAgICAhIDogKCkgPT4gbnVtYmVyO1xuICAgIEBJbnB1dCgpIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8Ym9vbGVhbnxQYW5lbEhlYWRlcjtcbiAgICBASW5wdXQoKSBoaWRlSG9yaXpvbnRhbFNjcm9sbGJhciAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBob3ZlckNscyAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGljb24gICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8RG9tQ29uZmlnO1xuICAgIEBJbnB1dCgpIGlnbm9yZVBhcmVudFJlYWRPbmx5ICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGxpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgICEgOiBHcmlkQmFzZUxpc3RlbmVycztcbiAgICBASW5wdXQoKSBsb2FkTWFzayAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfE1hc2tDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSBsb2FkTWFza0RlZmF1bHRzICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBsb2FkTWFza0Vycm9yICAgICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZ3xNYXNrfGJvb2xlYW47XG4gICAgQElucHV0KCkgbG9jYWxpemFibGUgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbWFza0RlZmF1bHRzICAgICAgICAgICAgICAgICAgISA6IE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWFza2VkICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbW9uaXRvclJlc2l6ZSAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcGx1Z2lucyAgICAgICAgICAgICAgICAgICAgICAgISA6IEluc3RhbmNlUGx1Z2luW118SW5zdGFuY2VQbHVnaW47XG4gICAgQElucHV0KCkgcHJlc2VydmVGb2N1c09uRGF0YXNldENoYW5nZSAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJlc2VydmVTY3JvbGxPbkRhdGFzZXRDaGFuZ2UgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVsYXlTdG9yZUV2ZW50cyAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVzaXphYmxlICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58eyBtaW5XaWR0aD86IG51bWJlciwgbWF4V2lkdGg/OiBudW1iZXIsIG1pbkhlaWdodD86IG51bWJlciwgbWF4SGVpZ2h0PzogbnVtYmVyLCBoYW5kbGVzPzogeyB0b3BTdGFydD86IGJvb2xlYW4sIHRvcD86IGJvb2xlYW4sIHRvcEVuZD86IGJvb2xlYW4sIGVuZD86IGJvb2xlYW4sIGJvdHRvbUVuZD86IGJvb2xlYW4sIGJvdHRvbT86IGJvb2xlYW4sIGJvdHRvbVN0YXJ0PzogYm9vbGVhbiwgc3RhcnQ/OiBib29sZWFuIH0gfTtcbiAgICBASW5wdXQoKSByZXNpemVUb0ZpdEluY2x1ZGVzSGVhZGVyICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlTGV2ZWxzICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgbnVtYmVyfHN0cmluZ3xSZXNwb25zaXZlTGV2ZWxDb25maWc+O1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdDtcbiAgICBASW5wdXQoKSByb2xlICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJvb3RFbGVtZW50ICAgICAgICAgICAgICAgICAgICEgOiBTaGFkb3dSb290fEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpIHNjcm9sbGVyQ2xhc3MgICAgICAgICAgICAgICAgICEgOiB0eXBlb2YgU2Nyb2xsZXI7XG4gICAgQElucHV0KCkgc2Nyb2xsTWFuYWdlciAgICAgICAgICAgICAgICAgISA6IFNjcm9sbE1hbmFnZXJDb25maWd8U2Nyb2xsTWFuYWdlcjtcbiAgICBASW5wdXQoKSBzaG93RGlydHkgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7IGR1cmluZ0VkaXQ6IGJvb2xlYW4sIG5ld1JlY29yZDogYm9vbGVhbiB9O1xuICAgIEBJbnB1dCgpIHN0YXRlZnVsICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdHxzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBzdGF0ZWZ1bEV2ZW50cyAgICAgICAgICAgICAgICAhIDogb2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlSWQgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc3RhdGVQcm92aWRlciAgICAgICAgICAgICAgICAgISA6IFN0YXRlUHJvdmlkZXI7XG4gICAgQElucHV0KCkgc3RyaXBzICAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEdyaWRDb250YWluZXJJdGVtQ29uZmlnPjtcbiAgICBASW5wdXQoKSBzdWJHcmlkQ29uZmlncyAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgU3ViR3JpZENvbmZpZz47XG4gICAgQElucHV0KCkgc3luY01hc2sgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xNYXNrQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgdGFiICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58VGFiQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRhYkJhckl0ZW1zICAgICAgICAgICAgICAgICAgICEgOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXTtcbiAgICBASW5wdXQoKSB0YmFyICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogKEdyaWRDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB1aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3BsYWluJ3wndG9vbGJhcid8c3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSB3ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gQ29uZmlncyBhbmQgcHJvcGVydGllc1xuICAgIEBJbnB1dCgpIGFsaWduU2VsZiAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFuaW1hdGVUcmVlTm9kZVRvZ2dsZSAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcHBlbmRUbyAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBjYWxsT25GdW5jdGlvbnMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNlbGxFbGxpcHNpcyAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgY29sbGFwc2VkICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbHVtbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNvbHVtbkxpbmVzICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjb2x1bW5zICAgICAgICAgICAgICAgICAgICAgISA6IENvbHVtblN0b3JlfEdyaWRDb2x1bW5Db25maWdbXXxDb2x1bW5TdG9yZUNvbmZpZztcbiAgICBASW5wdXQoKSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdFtdfE1vZGVsW118TW9kZWxDb25maWdbXTtcbiAgICBASW5wdXQoKSBkYXRhc2V0ICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIEBJbnB1dCgpIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnwnaW5lcnQnO1xuICAgIEBJbnB1dCgpIGVtcHR5VGV4dCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfEVtcHR5VGV4dERvbUNvbmZpZztcbiAgICBASW5wdXQoKSBlbmFibGVVbmRvUmVkb0tleXMgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZXh0cmFEYXRhICAgICAgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgZmxleCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhlaWdodCAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRkZW4gICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZUZvb3RlcnMgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVIZWFkZXJzICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBpbnB1dEZpZWxkQWxpZ24gICAgICAgICAgICAgISA6ICdzdGFydCd8J2VuZCc7XG4gICAgQElucHV0KCkgaW5zZXJ0QmVmb3JlICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgaW5zZXJ0Rmlyc3QgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkga2V5TWFwICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+O1xuICAgIEBJbnB1dCgpIGxhYmVsUG9zaXRpb24gICAgICAgICAgICAgICAhIDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbDtcbiAgICBASW5wdXQoKSBsYWJlbFdpZHRoICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxudWxsO1xuICAgIEBJbnB1dCgpIGxvbmdQcmVzc1RpbWUgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIG1hcmdpbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhIZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWF4V2lkdGggICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkhlaWdodCAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5XaWR0aCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgcHJlc2VydmVTY3JvbGwgICAgICAgICAgICAgICEgOiBQcmVzZXJ2ZVNjcm9sbE9wdGlvbnN8Ym9vbGVhbjtcbiAgICBASW5wdXQoKSByZWFkT25seSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVuZGl0aW9uICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8UmVjb3JkPHN0cmluZywgc3RyaW5nPnxudWxsO1xuICAgIEBJbnB1dCgpIHJvd0hlaWdodCAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHJvd0xpbmVzICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBydGwgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2Nyb2xsYWJsZSAgICAgICAgICAgICAgICAgICEgOiBTY3JvbGxlcnxib29sZWFufFNjcm9sbGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGUgICAgICAgICAgICAgICAhIDogR3JpZFNlbGVjdGlvbk1vZGU7XG4gICAgQElucHV0KCkgc3BhbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgc3RhdGVTZXR0aW5ncyAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIHJlc3RvcmVVbmNvbmZpZ3VyZWRDb2x1bW5zPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgc3RvcmUgICAgICAgICAgICAgICAgICAgICAgICEgOiBTdG9yZXxTdG9yZUNvbmZpZ3xBamF4U3RvcmV8QWpheFN0b3JlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRpdGxlICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRvb2xzICAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgVG9vbHxUb29sQ29uZmlnPnxudWxsfFJlY29yZDxzdHJpbmcsIFRvb2w+fFJlY29yZDxzdHJpbmcsIFRvb2xDb25maWc+O1xuICAgIEBJbnB1dCgpIHRyYW5zaXRpb24gICAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBpbnNlcnRSZWNvcmQ/OiBib29sZWFuXG4gICAgICAgIHJlbW92ZVJlY29yZD86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlQ29sdW1uPzogYm9vbGVhblxuICAgICAgICBleHBhbmRDb2xsYXBzZUNvbHVtbj86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlUmVnaW9uPzogYm9vbGVhblxuICAgICAgICB0b2dnbGVUcmVlTm9kZT86IGJvb2xlYW5cbiAgICAgICAgdG9nZ2xlR3JvdXA/OiBib29sZWFuXG4gICAgICAgIGZpbHRlclJlbW92YWw/OiBib29sZWFuXG4gICAgfTtcbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uRHVyYXRpb24gICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9ubHlcbiAgICBASW5wdXQoKSBjZW50ZXJlZCAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBvbmNlPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgb3JpZ2luYWxTdG9yZSAgICEgOiBTdG9yZTtcbiAgICBASW5wdXQoKSBwYXJlbnQgICAgICAgICAgISA6IFdpZGdldDtcbiAgICBASW5wdXQoKSBzZWxlY3RlZENlbGwgICAgISA6IEdyaWRMb2NhdGlvbnxHcmlkTG9jYXRpb25Db25maWc7XG4gICAgQElucHV0KCkgc2VsZWN0ZWRDZWxscyAgICEgOiBHcmlkTG9jYXRpb25bXXxHcmlkTG9jYXRpb25Db25maWdbXTtcbiAgICBASW5wdXQoKSBzZWxlY3RlZFJlY29yZCAgISA6IE1vZGVsO1xuICAgIEBJbnB1dCgpIHNlbGVjdGVkUmVjb3JkcyAhIDogTW9kZWxbXXxudW1iZXJbXTtcbiAgICBASW5wdXQoKSBzZWxlY3RlZFJvd3MgICAgISA6IE1vZGVsW118bnVtYmVyW107XG4gICAgQElucHV0KCkgc3RhdGUgICAgICAgICAgICEgOiBHcmlkU3RhdGVJbmZvO1xuICAgIEBJbnB1dCgpIHRvb2x0aXAgICAgICAgICAhIDogc3RyaW5nfFRvb2x0aXBDb25maWc7XG5cbiAgICAvLyBGZWF0dXJlc1xuICAgIEBJbnB1dCgpIGFpRmVhdHVyZSAgICAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xBSXxBSUNvbmZpZztcbiAgICBASW5wdXQoKSBhaUZpbHRlckZlYXR1cmUgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8QUlGaWx0ZXJ8QUlGaWx0ZXJDb25maWc7XG4gICAgQElucHV0KCkgY2VsbENvcHlQYXN0ZUZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxDb3B5UGFzdGV8Q2VsbENvcHlQYXN0ZUNvbmZpZztcbiAgICBASW5wdXQoKSBjZWxsRWRpdEZlYXR1cmUgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2VsbEVkaXR8Q2VsbEVkaXRDb25maWc7XG4gICAgQElucHV0KCkgY2VsbE1lbnVGZWF0dXJlICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENlbGxNZW51fENlbGxNZW51Q29uZmlnO1xuICAgIEBJbnB1dCgpIGNlbGxUb29sdGlwRmVhdHVyZSAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xDZWxsVG9vbHRpcHxDZWxsVG9vbHRpcENvbmZpZztcbiAgICBASW5wdXQoKSBjaGFydHNGZWF0dXJlICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q2hhcnRzfENoYXJ0c0NvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5BdXRvV2lkdGhGZWF0dXJlICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uQXV0b1dpZHRofENvbHVtbkF1dG9XaWR0aENvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5EcmFnVG9vbGJhckZlYXR1cmUgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uRHJhZ1Rvb2xiYXJ8Q29sdW1uRHJhZ1Rvb2xiYXJDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUGlja2VyRmVhdHVyZSAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblBpY2tlcnxDb2x1bW5QaWNrZXJDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUmVuYW1lRmVhdHVyZSAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlbmFtZXxDb2x1bW5SZW5hbWVDb25maWc7XG4gICAgQElucHV0KCkgY29sdW1uUmVvcmRlckZlYXR1cmUgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfENvbHVtblJlb3JkZXJ8Q29sdW1uUmVvcmRlckNvbmZpZztcbiAgICBASW5wdXQoKSBjb2x1bW5SZXNpemVGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8Q29sdW1uUmVzaXplfENvbHVtblJlc2l6ZUNvbmZpZztcbiAgICBASW5wdXQoKSBleGNlbEV4cG9ydGVyRmVhdHVyZSAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RXhjZWxFeHBvcnRlcnxFeGNlbEV4cG9ydGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbGVEcm9wRmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWxlRHJvcHxGaWxlRHJvcENvbmZpZztcbiAgICBASW5wdXQoKSBmaWxsSGFuZGxlRmVhdHVyZSAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8RmlsbEhhbmRsZXxGaWxsSGFuZGxlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbHRlckZlYXR1cmUgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWx0ZXJ8RmlsdGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGZpbHRlckJhckZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xGaWx0ZXJCYXJ8RmlsdGVyQmFyQ29uZmlnO1xuICAgIEBJbnB1dCgpIGdyb3VwRmVhdHVyZSAgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xHcm91cHxHcm91cENvbmZpZztcbiAgICBASW5wdXQoKSBncm91cFN1bW1hcnlGZWF0dXJlICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8R3JvdXBTdW1tYXJ5fEdyb3VwU3VtbWFyeUNvbmZpZztcbiAgICBASW5wdXQoKSBoZWFkZXJNZW51RmVhdHVyZSAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8SGVhZGVyTWVudXxIZWFkZXJNZW51Q29uZmlnO1xuICAgIEBJbnB1dCgpIGxvY2tSb3dzRmVhdHVyZSAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xMb2NrUm93c3xMb2NrUm93c0NvbmZpZztcbiAgICBASW5wdXQoKSBtZXJnZUNlbGxzRmVhdHVyZSAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8TWVyZ2VDZWxsc3xNZXJnZUNlbGxzQ29uZmlnO1xuICAgIEBJbnB1dCgpIHBkZkV4cG9ydEZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQZGZFeHBvcnR8UGRmRXhwb3J0Q29uZmlnO1xuICAgIEBJbnB1dCgpIHBpbkNvbHVtbnNGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xQaW5Db2x1bW5zfFBpbkNvbHVtbnNDb25maWc7XG4gICAgQElucHV0KCkgcHJpbnRGZWF0dXJlICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFByaW50fFByaW50Q29uZmlnO1xuICAgIEBJbnB1dCgpIHF1aWNrRmluZEZlYXR1cmUgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xRdWlja0ZpbmR8UXVpY2tGaW5kQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJlZ2lvblJlc2l6ZUZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSZWdpb25SZXNpemV8UmVnaW9uUmVzaXplQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJvd0NvcHlQYXN0ZUZlYXR1cmUgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dDb3B5UGFzdGV8Um93Q29weVBhc3RlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJvd0VkaXRGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dFZGl0fFJvd0VkaXRDb25maWc7XG4gICAgQElucHV0KCkgcm93RXhwYW5kZXJGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd0V4cGFuZGVyfFJvd0V4cGFuZGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHJvd1Jlb3JkZXJGZWF0dXJlICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xSb3dSZW9yZGVyfFJvd1Jlb3JkZXJDb25maWc7XG4gICAgQElucHV0KCkgcm93UmVzaXplRmVhdHVyZSAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFJvd1Jlc2l6ZXxSb3dSZXNpemVDb25maWc7XG4gICAgQElucHV0KCkgc2VhcmNoRmVhdHVyZSAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNlYXJjaHxTZWFyY2hDb25maWc7XG4gICAgQElucHV0KCkgc29ydEZlYXR1cmUgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFNvcnR8U29ydENvbmZpZztcbiAgICBASW5wdXQoKSBzcGxpdEZlYXR1cmUgICAgICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8U3BsaXR8U3BsaXRDb25maWc7XG4gICAgQElucHV0KCkgc3RpY2t5Q2VsbHNGZWF0dXJlICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFN0aWNreUNlbGxzfFN0aWNreUNlbGxzQ29uZmlnO1xuICAgIEBJbnB1dCgpIHN0cmlwZUZlYXR1cmUgICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdHJpcGV8U3RyaXBlQ29uZmlnO1xuICAgIEBJbnB1dCgpIHN1bW1hcnlGZWF0dXJlICAgICAgICAgICAgISA6IG9iamVjdHxib29sZWFufHN0cmluZ3xTdW1tYXJ5fFN1bW1hcnlDb25maWc7XG4gICAgQElucHV0KCkgdHJlZUZlYXR1cmUgICAgICAgICAgICAgICAhIDogb2JqZWN0fGJvb2xlYW58c3RyaW5nfFRyZWV8VHJlZUNvbmZpZztcbiAgICBASW5wdXQoKSB0cmVlR3JvdXBGZWF0dXJlICAgICAgICAgICEgOiBvYmplY3R8Ym9vbGVhbnxzdHJpbmd8VHJlZUdyb3VwfFRyZWVHcm91cENvbmZpZztcblxuICAgIC8vIEV2ZW50cyBlbWl0dGVyc1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIGNlbGwgZWRpdGluZyBpcyBjYW5jZWxlZCwgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBjYW5jZWxsYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbENlbGxFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBHcmlkTG9jYXRpb24gfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgcm93IGVkaXRpbmcgaXMgY2FuY2VsZWQsIHJldHVybiBmYWxzZSB0byBzaWduYWwgdGhhdCB0aGUgdmFsdWUgaXMgaW52YWxpZCBhbmQgZWRpdGluZyBzaG91bGQgbm90IGJlIGZpbmFsaXplZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNldmVudC1iZWZvcmVDYW5jZWxSb3dFZGl0KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRhcmdldCBncmlkXG4gICAgICogQHBhcmFtIHtSb3dFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbFJvd0VkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBSb3dFZGl0b3JDb250ZXh0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBlZGl0aW5nIHN0YXJ0cywgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCBlZGl0aW5nXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtDZWxsRWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDZWxsRWRpdFN0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGRlbGV0aW5nIGEgcmFuZ2Ugb2Ygc2VsZWN0ZWQgY2VsbCB2YWx1ZXMgYnkgcHJlc3NpbmcgPGtiZD5CYWNrc3BhY2U8L2tiZD4gb3IgPGtiZD5EZWxldGU8L2tiZD5cbiAgICAgKiBidXR0b25zIHdoaWxlIFthdXRvRWRpdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9DZWxsRWRpdCNjb25maWctYXV0b0VkaXQpIGlzIHNldCB0byBgdHJ1ZWAuIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgZWRpdGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0geyhHcmlkLnV0aWwuR3JpZExvY2F0aW9ufENvcmUuZGF0YS5Nb2RlbClbXX0gZXZlbnQuZ3JpZFNlbGVjdGlvbiBBbiBhcnJheSBvZiBjZWxsIHNlbGVjdG9ycyBvciByZWNvcmRzIHRoYXQgd2lsbCBoYXZlIHRoZWlyIHZhbHVlcyBkZWxldGVkICh0aGUgcmVjb3JkcyB0aGVtc2VsdmVzIHdpbGwgbm90IGdldCBkZWxldGVkLCBvbmx5IHZpc2libGUgY29sdW1uIHZhbHVlcykuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ2VsbFJhbmdlRGVsZXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBncmlkU2VsZWN0aW9uOiAoR3JpZExvY2F0aW9ufE1vZGVsKVtdIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGZvciBlYWNoIHNlbGVjdGVkIHJlY29yZCBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIGVkaXRpbmcgYSByYW5nZSBvZiBzZWxlY3RlZCBjZWxsIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIEN1cnJlbnQgc2VsZWN0ZWQgcmVjb3JkIGZyb20gdGhlIHJhbmdlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmZpZWxkIFRoZSBmaWVsZCBiZWluZyBjaGFuZ2VkXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50LnZhbHVlIFRoZSB2YWx1ZSBiZWluZyBzZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVDZWxsUmFuZ2VFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCwgZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBiZWZvcmUgYSBwYXJlbnQgY29sdW1uIGlzIGNvbGxhcHNlZCBvciBleHBhbmRlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtblxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2VkIGB0cnVlYCBpZiB0aGUgY29sdW1uIGlzIGJlaW5nIGNvbGxhcHNlZCwgYGZhbHNlYCBpZiBleHBhbmRlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvbHVtbkNvbGxhcHNlVG9nZ2xlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29sdW1uOiBDb2x1bW4sIGNvbGxhcHNlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCBwcmlvciB0byBzdGFydGluZyBhIGNvbHVtbiBkcmFnIGdlc3R1cmUuIFRoZSBkcmFnIGlzIGNhbmNlbGVkIGlmIGEgbGlzdGVuZXIgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgZHJhZ2dlZCBjb2x1bW4uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ29sdW1uRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZXZlbnQ6IEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGNvbHVtbiBpcyBkcm9wcGVkLCBhbmQgeW91IGNhbiByZXR1cm4gZmFsc2UgZnJvbSBhIGxpc3RlbmVyIHRvIGFib3J0IHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuaW5zZXJ0QmVmb3JlIFRoZSBjb2x1bW4gYmVmb3JlIHdoaWNoIHRoZSBkcmFnZ2VkIGNvbHVtbiB3aWxsIGJlIGluc2VydGVkLlxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5uZXdQYXJlbnQgVGhlIG5ldyBwYXJlbnQgY29sdW1uLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5yZWdpb24gVGhlIHJlZ2lvbiB3aGVyZSB0aGUgY29sdW1uIHdhcyBkcm9wcGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNvbHVtbkRyb3BGaW5hbGl6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY29sdW1uOiBDb2x1bW4sIGluc2VydEJlZm9yZTogQ29sdW1uLCBuZXdQYXJlbnQ6IENvbHVtbiwgZXZlbnQ6IEV2ZW50LCByZWdpb246IHN0cmluZyB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHByaW9yIHRvIHN0YXJ0aW5nIGEgY29sdW1uIHJlc2l6ZSBnZXN0dXJlLiBUaGUgcmVzaXplIGlzIGNhbmNlbGVkIGlmIGEgbGlzdGVuZXIgcmV0dXJuc1xuICAgICAqIGBmYWxzZWAuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtblxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ29sdW1uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgYSBjb3B5IGFjdGlvbiBpcyBwZXJmb3JtZWQsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGFjdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5jZWxscyBUaGUgY2VsbHMgYWJvdXQgdG8gYmUgY29waWVkIG9yIGN1dFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5kYXRhIFRoZSBzdHJpbmcgZGF0YSBhYm91dCB0byBiZSBjb3BpZWQgb3IgY3V0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5pc0N1dCBgdHJ1ZWAgaWYgdGhpcyBpcyBhIGN1dCBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZW50aXR5TmFtZSAnY2VsbCcgdG8gZGlzdGluZ3Vpc2ggdGhpcyBldmVudCBmcm9tIG90aGVyIGJlZm9yZUNvcHkgZXZlbnRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ29weTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY2VsbHM6IEdyaWRMb2NhdGlvbltdLCBkYXRhOiBzdHJpbmcsIGlzQ3V0OiBib29sZWFuLCBlbnRpdHlOYW1lOiBzdHJpbmcgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIENTViBleHBvcnQgc3RhcnRzLiBSZXR1cm4gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGV4cG9ydC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFeHBvcnRDb25maWd9IGV2ZW50LmNvbmZpZyBFeHBvcnQgY29uZmlnXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW5bXX0gZXZlbnQuY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW5zIHRvIGV4cG9ydFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnJvd3MgQW4gYXJyYXkgb2YgcmVjb3JkcyB0byBleHBvcnRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQubGluZURlbGltaXRlciBUaGUgQ1NWIGRlbGltaXRlciB0byBzZXBhcmF0ZSBsaW5lc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5jb2x1bW5EZWxpbWl0ZXIgVGhlIENTViBkZWxpbWl0ZXIgdG8gc2VwYXJhdGUgdmFsdWVzIG9uIG9uZSBsaW5lXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlQ1NWRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY29uZmlnOiBFeHBvcnRDb25maWcsIGNvbHVtbnM6IENvbHVtbltdLCByb3dzOiBNb2RlbFtdLCBsaW5lRGVsaW1pdGVyOiBzdHJpbmcsIGNvbHVtbkRlbGltaXRlcjogc3RyaW5nIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBFeGNlbCBleHBvcnQgc3RhcnRzLiBSZXR1cm4gYGZhbHNlYCB0byBjYW5jZWwgdGhlIGV4cG9ydC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFeHBvcnRDb25maWd9IGV2ZW50LmNvbmZpZyBFeHBvcnQgY29uZmlnXG4gICAgICogQHBhcmFtIHtYTFNDb2x1bW5bXX0gZXZlbnQuY29sdW1ucyBBbiBhcnJheSBvZiBjb2x1bW5zIHRvIGV4cG9ydFxuICAgICAqIEBwYXJhbSB7YW55W11bXX0gZXZlbnQucm93cyBBbiBhcnJheSBvZiByZWNvcmRzIHRvIGV4cG9ydFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUV4Y2VsRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY29uZmlnOiBFeHBvcnRDb25maWcsIGNvbHVtbnM6IFhMU0NvbHVtbltdLCByb3dzOiBhbnlbXSB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgZHJhZ2dpbmcgb2YgdGhlIEZpbGxIYW5kbGUgc3RhcnRzLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBkcmFnIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5jZWxsIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2x1bW4gLyByZWNvcmRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSByYXcgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlRmlsbEhhbmRsZURyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNlbGw6IEdyaWRMb2NhdGlvbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgY2VsbCBlZGl0aW5nIGlzIGZpbmlzaGVkLCByZXR1cm4gZmFsc2UgdG8gc2lnbmFsIHRoYXQgdGhlIHZhbHVlIGlzIGludmFsaWQgYW5kIGVkaXRpbmcgc2hvdWxkIG5vdCBiZSBmaW5hbGl6ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge0NlbGxFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUZpbmlzaENlbGxFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgdGhlIHJvdyBlZGl0aW5nIGlzIGZpbmlzaGVkLCByZXR1cm4gZmFsc2UgdG8gc2lnbmFsIHRoYXQgdGhlIHZhbHVlIGlzIGludmFsaWQgYW5kIGVkaXRpbmcgc2hvdWxkIG5vdCBiZSBmaW5hbGl6ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZXZlbnQtYmVmb3JlRmluaXNoUm93RWRpdClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUYXJnZXQgZ3JpZFxuICAgICAqIEBwYXJhbSB7Um93RWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVGaW5pc2hSb3dFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgZWRpdG9yQ29udGV4dDogUm93RWRpdG9yQ29udGV4dCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgaGlkZGVuLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBoaWRkZW4uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgYSBwYXN0ZSBhY3Rpb24gaXMgcGVyZm9ybWVkLCByZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuY2xpcGJvYXJkRGF0YSBUaGUgY2xpcGJvYXJkRGF0YSBhYm91dCB0byBiZSBwYXN0ZWRcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LnRhcmdldENlbGwgVGhlIGNlbGwgZnJvbSB3aGljaCB0aGUgcGFzdGUgd2lsbCBiZSBzdGFydGVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmVudGl0eU5hbWUgJ2NlbGwnIHRvIGRpc3Rpbmd1aXNoIHRoaXMgZXZlbnQgZnJvbSBvdGhlciBiZWZvcmVQYXN0ZSBldmVudHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQudGV4dCBUaGUgcmF3IHRleHQgZnJvbSBjbGlwYm9hcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVQYXN0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY2xpcGJvYXJkRGF0YTogc3RyaW5nLCB0YXJnZXRDZWxsOiBHcmlkTG9jYXRpb24sIGVudGl0eU5hbWU6IHN0cmluZywgdGV4dDogc3RyaW5nIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSBleHBvcnQgc3RhcnRlZC4gUmV0dXJuIGBmYWxzZWAgdG8gY2FuY2VsIHRoZSBleHBvcnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7UGRmRXhwb3J0Q29uZmlnfSBldmVudC5jb25maWcgRXhwb3J0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVBkZkV4cG9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNvbmZpZzogUGRmRXhwb3J0Q29uZmlnIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBhIHJvdyBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQucm93LlJvd30gZXZlbnQucm93IFRoZSByb3cgYWJvdXQgdG8gYmUgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgZm9yIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQucmVjb3JkSW5kZXggVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVJlbmRlclJvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIHJvdzogUm93LCByZWNvcmQ6IE1vZGVsLCByZWNvcmRJbmRleDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBHcmlkIHJvd3MgYXJlIGFib3V0IHRvIGJlIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgVGhpcyBncmlkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVJlbmRlclJvd3M6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIGJlZm9yZSByb3cgY29sbGFwc2UgaXMgc3RhcnRlZC5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNldmVudC1iZWZvcmVSb3dDb2xsYXBzZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSb3dDb2xsYXBzZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlY29yZDogTW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIGJlZm9yZSByb3cgZXhwYW5kIGlzIHN0YXJ0ZWQuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZXZlbnQtYmVmb3JlUm93RXhwYW5kKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVJvd0V4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlY29yZDogTW9kZWwgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiBSZXR1cm5pbmcgYGZhbHNlYCBmcm9tIGEgbGlzdGVuZXIgcHJldmVudHMgdGhlIGNoYW5nZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuYWN0aW9uIGAnc2VsZWN0J2AvYCdkZXNlbGVjdCdgXG4gICAgICogQHBhcmFtIHsncm93JywnY2VsbCd9IGV2ZW50Lm1vZGUgYCdyb3cnYC9gJ2NlbGwnYFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmRlc2VsZWN0ZWQgVGhlIHJlY29yZHMgdG8gYmUgZGVzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5zZWxlY3RlZCBUaGUgcmVjb3JkcyB0byBiZSBzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5zZWxlY3Rpb24gVGhlIHJlY29yZHMgaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBiZWZvcmUgYXBwbHlpbmcgYHNlbGVjdGVkYCBhbmQgYGRlc2VsZWN0ZWRgXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LmRlc2VsZWN0ZWRDZWxscyBUaGUgY2VsbHMgdG8gYmUgZGVzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuc2VsZWN0ZWRDZWxscyBUaGUgY2VsbHMgdG8gYmUgc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LmNlbGxTZWxlY3Rpb24gVGhlIGNlbGxzIGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgYmVmb3JlIGFwcGx5aW5nIGBzZWxlY3RlZENlbGxzYCBhbmQgYGRlc2VsZWN0ZWRDZWxsc2BcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTZWxlY3Rpb25DaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBhY3Rpb246IHN0cmluZywgbW9kZTogJ3Jvdyd8J2NlbGwnLCBzb3VyY2U6IEdyaWQsIGRlc2VsZWN0ZWQ6IE1vZGVsW10sIHNlbGVjdGVkOiBNb2RlbFtdLCBzZWxlY3Rpb246IE1vZGVsW10sIGRlc2VsZWN0ZWRDZWxsczogR3JpZExvY2F0aW9uW10sIHNlbGVjdGVkQ2VsbHM6IEdyaWRMb2NhdGlvbltdLCBjZWxsU2VsZWN0aW9uOiBHcmlkTG9jYXRpb25bXSB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhpcyBjb250YWluZXIgd2lsbCBsb2FkIHJlY29yZCB2YWx1ZXMgaW50byBpdHMgY2hpbGQgZmllbGRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VcbiAgICAgKiB3YW50IHRvIG1vZGlmeSB0aGUgVUkgYmVmb3JlIGRhdGEgaXMgbG9hZGVkIChlLmcuIHNldCBzb21lIGlucHV0IGZpZWxkIHRvIGJlIHJlYWRvbmx5KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbnRhaW5lcn0gZXZlbnQuc291cmNlIFRoZSBjb250YWluZXJcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTZXRSZWNvcmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBzaG93bi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldCxhbnl9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHNob3duXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0fGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCBiZWZvcmUgZWRpdGluZyBzdGFydHMsIHJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgZWRpdGluZ1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7Um93RWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGFydFJvd0VkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGVkaXRvckNvbnRleHQ6IFJvd0VkaXRvckNvbnRleHQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHN0YXRlIGlzIGFwcGxpZWQgdG8gdGhlIHNvdXJjZS4gQWxsb3dzIGVkaXRpbmcgdGhlIHN0YXRlIG9iamVjdCBvciBwcmV2ZW50aW5nIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZFN0YXRlSW5mb30gZXZlbnQuc3RhdGUgU3RhdGUgb2JqZWN0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXRlQXBwbHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogR3JpZFN0YXRlSW5mbyB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgc3RhdGUgaXMgc2F2ZWQgYnkgdGhlIFN0YXRlUHJvdmlkZXIuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWRTdGF0ZUluZm99IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZVNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogR3JpZFN0YXRlSW5mbyB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgZ3JvdXAgaXMgZ29pbmcgdG8gYmUgZXhwYW5kZWQgb3IgY29sbGFwc2VkIHVzaW5nIHRoZSBVSS5cbiAgICAgKiBSZXR1cm5pbmcgYGZhbHNlYCBmcm9tIGEgbGlzdGVuZXIgcHJldmVudHMgdGhlIG9wZXJhdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuZ3JvdXBSZWNvcmQgW0RFUFJFQ0FURURdIFVzZSBgZ3JvdXBSZWNvcmRzYCBwYXJhbSBpbnN0ZWFkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuZ3JvdXBSZWNvcmRzIFRoZSBncm91cCByZWNvcmRzIGJlaW5nIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbGxhcHNlIENvbGxhcHNlZCAodHJ1ZSkgb3IgZXhwYW5kZWQgKGZhbHNlKVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSB1c2VyIGludGVyYWN0aW9uIGV2ZW50IChlZyBhIGBjbGlja2AgZXZlbnQpIGlmIHRoZSB0b2dnbGUgcmVxdWVzdCB3YXMgaW5zdGlnYXRlZCBieSB1c2VyIGludGVyYWN0aW9uLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVRvZ2dsZUdyb3VwOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JvdXBSZWNvcmQ6IE1vZGVsLCBncm91cFJlY29yZHM6IE1vZGVsW10sIGNvbGxhcHNlOiBib29sZWFuLCBkb21FdmVudDogRXZlbnQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIGEgcGFyZW50IG5vZGUgcmVjb3JkIHRvZ2dsZXMgaXRzIGNvbGxhcHNlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgYmVpbmcgdG9nZ2xlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbGxhcHNlIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBiZWluZyBjb2xsYXBzZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlVG9nZ2xlTm9kZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sbGFwc2U6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGVkaXRpbmcgaXMgY2FuY2VsbGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBPd25lciBncmlkXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IEluY2x1ZGVkIGlmIHRoZSBjYW5jZWxsYXRpb24gd2FzIHRyaWdnZXJlZCBieSBhIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhbmNlbENlbGxFZGl0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBlZGl0b3JDb250ZXh0OiBHcmlkTG9jYXRpb24sIGV2ZW50OiBFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbnkgb3RoZXIgZXZlbnQgaXMgZmlyZWQgZnJvbSB0aGUgb2JqZWN0LlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2V2ZW50LWNhdGNoQWxsKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ319IGV2ZW50LmV2ZW50IFRoZSBPYmplY3QgdGhhdCBjb250YWlucyBldmVudCBkZXRhaWxzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmV2ZW50LnR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50IHdoaWNoIGlzIGNhdWdodCBieSB0aGUgbGlzdGVuZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DYXRjaEFsbDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIGNsaWNrcyBpbiBhIGdyaWQgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgcm93XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIHRvIHdoaWNoIHRoZSBjZWxsIGJlbG9uZ3NcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHVzZXIgYWN0aXZhdGVzIGNvbnRleHRtZW51IGluIGEgZ3JpZCBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gdG8gd2hpY2ggdGhlIGNlbGwgYmVsb25nc1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbENvbnRleHRNZW51OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdXNlciBkb3VibGUgY2xpY2tzIGEgZ3JpZCBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gdG8gd2hpY2ggdGhlIGNlbGwgYmVsb25nc1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbERibENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBncmlkIGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhIGNlbGwuXG4gICAgICogQWxsb3dzIG1hbmlwdWxhdGlvbiBvZiB0aGUgaXRlbXMgdG8gc2hvdyBpbiB0aGUgc2FtZSB3YXkgYXMgaW4gdGhlIFtwcm9jZXNzSXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL2ZlYXR1cmUvQ2VsbE1lbnUjY29uZmlnLXByb2Nlc3NJdGVtcykuXG4gICAgICogW01vcmUuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3ZpZXcvR3JpZEJhc2UjZXZlbnQtY2VsbE1lbnVCZWZvcmVTaG93KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+fSBldmVudC5pdGVtcyBNZW51IGl0ZW0gY29uZmlnc1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTWVudUJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5PiwgY29sdW1uOiBDb2x1bW4sIHJlY29yZDogTW9kZWwgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIGdyaWQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGluIHRoZSBjZWxsIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1lbnVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY29sdW1uOiBDb2x1bW4sIHJlY29yZDogTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBncmlkIGFmdGVyIHRoZSBjb250ZXh0IG1lbnUgaXMgc2hvd24gZm9yIGEgY2VsbC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1lbnVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIGNvbHVtbjogQ29sdW1uLCByZWNvcmQ6IE1vZGVsIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgZ3JpZCB3aGVuIGEgY2hlY2sgaXRlbSBpcyB0b2dnbGVkIGluIHRoZSBjZWxsIGNvbnRleHQgbWVudS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51SXRlbX0gZXZlbnQuaXRlbSBTZWxlY3RlZCBtZW51IGl0ZW1cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgUmVjb3JkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGVja2VkIENoZWNrZWQgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1lbnVUb2dnbGVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY29sdW1uOiBDb2x1bW4sIHJlY29yZDogTW9kZWwsIGNoZWNrZWQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyBhIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgaG92ZXJlZCBjZWxsXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIGN1cnJlbnRseSBob3ZlcmVkXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNlbGxNb3VzZUVudGVyOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIGEgY2VsbFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSBjZWxsIHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gcmVwcmVzZW50aW5nIHRoZSBjZWxsIHRoYXQgdGhlIG1vdXNlIGxlZnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnQgdGhhdCB0aGUgbW91c2UgbGVmdFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTW91c2VMZWF2ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSB1c2VyIG1vdmVzIHRoZSBtb3VzZSBvdXQgb2YgYSBncmlkIGNlbGxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuZ3JpZCBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIHJvd1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiB0byB3aGljaCB0aGUgY2VsbCBiZWxvbmdzXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuY2VsbEVsZW1lbnQgVGhlIGNlbGwgSFRNTCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudGFyZ2V0IFRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DZWxsTW91c2VPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBncmlkOiBHcmlkLCByZWNvcmQ6IE1vZGVsLCBjb2x1bW46IENvbHVtbiwgY2VsbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB1c2VyIG1vdmVzIHRoZSBtb3VzZSBvdmVyIGEgZ3JpZCBjZWxsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gdG8gd2hpY2ggdGhlIGNlbGwgYmVsb25nc1xuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRhcmdldCBUaGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1vdXNlT3ZlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNvbHVtbjogQ29sdW1uLCBjZWxsRWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQsIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgUGFuZWwgaXMgY29sbGFwc2VkIHVzaW5nIHRoZSBbY29sbGFwc2libGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpIHNldHRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuUGFuZWx9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbGxhcHNlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBQYW5lbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIGEgcGFyZW50IG5vZGUgcmVjb3JkIGlzIGNvbGxhcHNlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgd2hpY2ggaGFzIGJlZW4gY29sbGFwc2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbGxhcHNlTm9kZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgYSBwYXJlbnQgY29sdW1uIGhhcyBiZWVuIGNvbGxhcHNlZCBvciBleHBhbmRlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtbiBiZWluZyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZWQgYHRydWVgIGlmIHRoZSBjb2x1bW4gaXMgbm93IGNvbGxhcHNlZCwgYGZhbHNlYCBpZiBleHBhbmRlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtbkNvbGxhcHNlVG9nZ2xlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29sdW1uOiBDb2x1bW4sIGNvbGxhcHNlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIGEgY29sdW1uIGlzIGJlaW5nIGRyYWdnZWQsIGFuZCB5b3UgY2FuIHNldCB0aGUgYHZhbGlkYCBmbGFnIG9uIHRoZSBgY29udGV4dGAgb2JqZWN0XG4gICAgICogdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZHJvcCBwb3NpdGlvbiBpcyB2YWxpZCBvciBub3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBkcmFnZ2VkIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuaW5zZXJ0QmVmb3JlIFRoZSBjb2x1bW4gYmVmb3JlIHdoaWNoIHRoZSBkcmFnZ2VkIGNvbHVtbiB3aWxsIGJlIGluc2VydGVkIChpZiBub3QgbGFzdCkuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQudmFsaWQgU2V0IHRoaXMgdG8gYHRydWVgIG9yIGBmYWxzZWAgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZHJvcCBwb3NpdGlvbiBpcyB2YWxpZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2x1bW5EcmFnOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgaW5zZXJ0QmVmb3JlOiBDb2x1bW4sIGV2ZW50OiBFdmVudCwgY29udGV4dDogeyB2YWxpZDogYm9vbGVhbiB9IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBjb2x1bW4gZHJhZyBnZXN0dXJlIGhhcyBzdGFydGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgZHJhZ2dlZCBjb2x1bW4uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVGhlIGJyb3dzZXIgZXZlbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjb2x1bW46IENvbHVtbiwgZXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGFsd2F5cyBmaXJlZCBhZnRlciBhIGNvbHVtbiBpcyBkcm9wcGVkLiBUaGUgYHZhbGlkYCBwYXJhbSBpcyBgdHJ1ZWAgaWYgdGhlIG9wZXJhdGlvbiB3YXMgbm90XG4gICAgICogdmV0b2VkIGFuZCB0aGUgY29sdW1uIHdhcyBtb3ZlZCBpbiB0aGUgY29sdW1uIHN0b3JlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgZHJhZ2dlZCBjb2x1bW4uXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50Lmluc2VydEJlZm9yZSBUaGUgY29sdW1uIGJlZm9yZSB3aGljaCB0aGUgZHJhZ2dlZCBjb2x1bW4gd2lsbCBiZSBpbnNlcnRlZC5cbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQubmV3UGFyZW50IFRoZSBuZXcgcGFyZW50IGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnZhbGlkIGB0cnVlYCBpZiB0aGUgb3BlcmF0aW9uIHdhcyBub3QgdmV0b2VkLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBicm93c2VyIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5yZWdpb24gVGhlIHJlZ2lvbiB3aGVyZSB0aGUgY29sdW1uIHdhcyBkcm9wcGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbHVtbkRyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBpbnNlcnRCZWZvcmU6IENvbHVtbiwgbmV3UGFyZW50OiBDb2x1bW4sIHZhbGlkOiBib29sZWFuLCBldmVudDogRXZlbnQsIHJlZ2lvbjogc3RyaW5nIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSByZXNpemUgZ2VzdHVyZSBpcyBjb21wbGV0ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIHJlc2l6ZWQgY29sdW1uXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2x1bW5SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGNvbHVtbiByZXNpemUgZ2VzdHVyZSBzdGFydHMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gVGhlIGNvbHVtblxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBicm93c2VyIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ29sdW1uUmVzaXplU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGNvbHVtbjogQ29sdW1uLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyB3aWRnZXQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGluIHRoZSBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIG93bmluZyB3aWRnZXRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbnRleHRNZW51SXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIHdpZGdldCB3aGVuIGEgY2hlY2sgaXRlbSBpcyB0b2dnbGVkIGluIHRoZSBjb250ZXh0IG1lbnUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIG93bmluZyB3aWRnZXRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hlY2tlZCBDaGVja2VkIG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbnRleHRNZW51VG9nZ2xlSXRlbTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBtZW51OiBNZW51LCBpdGVtOiBNZW51SXRlbSwgY2hlY2tlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGFmdGVyIGEgY29weSBhY3Rpb24gaXMgcGVyZm9ybWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbltdfSBldmVudC5jZWxscyBUaGUgY2VsbHMgYWJvdXQgdG8gYmUgY29waWVkIG9yIGN1dFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5jb3BpZWREYXRhU3RyaW5nIFRoZSBjb25jYXRlbmF0ZWQgZGF0YSBzdHJpbmcgdGhhdCB3YXMgY29waWVkIG9yIGN1dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuaXNDdXQgYHRydWVgIGlmIHRoaXMgd2FzIGEgY3V0IGFjdGlvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5lbnRpdHlOYW1lICdjZWxsJyB0byBkaXN0aW5ndWlzaCB0aGlzIGV2ZW50IGZyb20gb3RoZXIgY29weSBldmVudHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db3B5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBjZWxsczogR3JpZExvY2F0aW9uW10sIGNvcGllZERhdGFTdHJpbmc6IHN0cmluZywgaXNDdXQ6IGJvb2xlYW4sIGVudGl0eU5hbWU6IHN0cmluZyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBkYXRhIGluIHRoZSBzdG9yZSBjaGFuZ2VzLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2V2ZW50LWRhdGFDaGFuZ2UpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2UgT3duaW5nIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5TdG9yZX0gZXZlbnQuc3RvcmUgVGhlIG9yaWdpbmF0aW5nIHN0b3JlXG4gICAgICogQHBhcmFtIHsncmVtb3ZlJywncmVtb3ZlQWxsJywnYWRkJywnY2xlYXJjaGFuZ2VzJywnZmlsdGVyJywndXBkYXRlJywnZGF0YXNldCcsJ3JlcGxhY2UnfSBldmVudC5hY3Rpb24gTmFtZSBvZiBhY3Rpb24gd2hpY2ggdHJpZ2dlcmVkIHRoZSBjaGFuZ2UuIE1heSBiZSBvbmUgb2Y6ICAqIGAncmVtb3ZlJ2AgKiBgJ3JlbW92ZUFsbCdgICogYCdhZGQnYCAqIGAnY2xlYXJjaGFuZ2VzJ2AgKiBgJ2ZpbHRlcidgICogYCd1cGRhdGUnYCAqIGAnZGF0YXNldCdgICogYCdyZXBsYWNlJ2BcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIENoYW5nZWQgcmVjb3JkLCBmb3IgYWN0aW9ucyB0aGF0IGFmZmVjdHMgZXhhY3RseSBvbmUgcmVjb3JkIChgJ3VwZGF0ZSdgKVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnJlY29yZHMgQ2hhbmdlZCByZWNvcmRzLCBwYXNzZWQgZm9yIGFsbCBhY3Rpb25zIGV4Y2VwdCBgJ3JlbW92ZUFsbCdgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNoYW5nZXMgUGFzc2VkIGZvciB0aGUgYCd1cGRhdGUnYCBhY3Rpb24sIGluZm8gb24gd2hpY2ggcmVjb3JkIGZpZWxkcyBjaGFuZ2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGF0YUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIHN0b3JlOiBTdG9yZSwgYWN0aW9uOiAncmVtb3ZlJ3wncmVtb3ZlQWxsJ3wnYWRkJ3wnY2xlYXJjaGFuZ2VzJ3wnZmlsdGVyJ3wndXBkYXRlJ3wnZGF0YXNldCd8J3JlcGxhY2UnLCByZWNvcmQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdLCBjaGFuZ2VzOiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBmaWVsZCBpcyBtdXRhdGVkIGFuZCB0aGUgc3RhdGUgb2YgdGhlIFtoYXNDaGFuZ2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LWhhc0NoYW5nZXMpIHByb3BlcnR5IGNoYW5nZXNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Db250YWluZXJ9IGV2ZW50LnNvdXJjZSBUaGUgY29udGFpbmVyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuZGlydHkgVGhlIGRpcnR5IHN0YXRlIG9mIHRoZSBDb250YWluZXIgLSBgdHJ1ZWAgaWYgdGhlcmUgYXJlIGFueSBmaWVsZHMgd2hpY2ggaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgaW5pdGlhbCBsb2FkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRpcnR5U3RhdGVDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgZGlydHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoaWxlIGRyYWcgc2VsZWN0aW5nLiBVSSB3aWxsIHVwZGF0ZSB3aXRoIGN1cnJlbnQgcmFuZ2UsIGJ1dCB0aGUgY2VsbHMgd2lsbCBub3QgYmUgc2VsZWN0ZWQgdW50aWxcbiAgICAgKiBtb3VzZSB1cC4gVGhpcyBldmVudCBjYW4gYmUgbGlzdGVuZWQgZm9yIHRvIHBlcmZvcm0gYWN0aW9ucyB3aGlsZSBkcmFnIHNlbGVjdGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtHcmlkTG9jYXRpb25Db25maWdbXSxHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LnNlbGVjdGVkQ2VsbHMgVGhlIGNlbGxzIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGRyYWdnZWQgb3ZlclxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGVkUmVjb3JkcyBUaGUgcmVjb3JkcyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBkcmFnZ2VkIG92ZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EcmFnU2VsZWN0aW5nOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzZWxlY3RlZENlbGxzOiBHcmlkTG9jYXRpb25Db25maWdbXXxHcmlkTG9jYXRpb25bXSwgc2VsZWN0ZWRSZWNvcmRzOiBNb2RlbFtdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIGF2YWlsYWJsZS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZWxlbWVudCBUaGUgV2lkZ2V0J3MgZWxlbWVudC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25FbGVtZW50Q3JlYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGVsZW1lbnQ6IEhUTUxFbGVtZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgUGFuZWwgaXMgZXhwYW5kZWQgdXNpbmcgdGhlIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzaWJsZSkgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5QYW5lbH0gZXZlbnQuc291cmNlIFRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBQYW5lbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgYSBwYXJlbnQgbm9kZSByZWNvcmQgaXMgZXhwYW5kZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHdoaWNoIGhhcyBiZWVuIGV4cGFuZGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV4cGFuZE5vZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBmaWxlIGlzIGRyb3BwZWQgb24gdGhlIHdpZGdldCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgb3duaW5nIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0RhdGFUcmFuc2Zlckl0ZW19IGV2ZW50LmZpbGUgVGhlIGRyb3BwZWQgZmlsZSBkZXNjcmlwdG9yXG4gICAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBuYXRpdmUgRHJhZ0V2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsZURyb3A6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGZpbGU6IERhdGFUcmFuc2Zlckl0ZW0sIGRvbUV2ZW50OiBEcmFnRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSB0aGUgRmlsbEhhbmRsZSBkcmFnZ2luZyBpcyBmaW5hbGl6ZWQgYW5kIHZhbHVlcyBhcmUgYXBwbGllZCB0byBjZWxscywgcmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGVcbiAgICAgKiBkcmFnIG9wZXJhdGlvbiBmcm9tIGFwcGx5aW5nIGRhdGEgY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5mcm9tIFRoZSBmcm9tIGNlbGxcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LnRvIFRoZSB0byBjZWxsXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVCZWZvcmVEcmFnRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBmcm9tOiBHcmlkTG9jYXRpb24sIHRvOiBHcmlkTG9jYXRpb24sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hpbGUgZHJhZ2dpbmcgdGhlIEZpbGxIYW5kbGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuZnJvbSBUaGUgZnJvbSBjZWxsXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC50byBUaGUgdG8gY2VsbFxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIHJhdyBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWxsSGFuZGxlRHJhZzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGZyb206IEdyaWRMb2NhdGlvbiwgdG86IEdyaWRMb2NhdGlvbiwgZG9tRXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBGaWxsSGFuZGxlIGRyYWcgb3BlcmF0aW9uIGlzIGFib3J0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsbEhhbmRsZURyYWdBYm9ydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGFmdGVyIGEgRmlsbEhhbmRsZSBkcmFnIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9ufSBldmVudC5mcm9tIFRoZSBmcm9tIGNlbGxcbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LnRvIFRoZSB0byBjZWxsXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVEcmFnRW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZnJvbTogR3JpZExvY2F0aW9uLCB0bzogR3JpZExvY2F0aW9uLCBkb21FdmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBkcmFnZ2luZyBvZiB0aGUgRmlsbEhhbmRsZSBzdGFydHMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC51dGlsLkdyaWRMb2NhdGlvbn0gZXZlbnQuY2VsbCBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sdW1uIC8gcmVjb3JkXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5kb21FdmVudCBUaGUgcmF3IERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZpbGxIYW5kbGVEcmFnU3RhcnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBjZWxsOiBHcmlkTG9jYXRpb24sIGRvbUV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGNlbGwgZWRpdGluZyBpcyBmaW5pc2hlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIFRhcmdldCBncmlkXG4gICAgICogQHBhcmFtIHtDZWxsRWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaW5pc2hDZWxsRWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYmVmb3JlIHRoZSByb3cgZWRpdGluZyBpcyBmaW5pc2hlZCwgcmV0dXJuIGZhbHNlIHRvIHNpZ25hbCB0aGF0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGFuZCBlZGl0aW5nIHNob3VsZCBub3QgYmUgZmluYWxpemVkLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2V2ZW50LWZpbmlzaFJvd0VkaXQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LmdyaWQgVGFyZ2V0IGdyaWRcbiAgICAgKiBAcGFyYW0ge1Jvd0VkaXRvckNvbnRleHR9IGV2ZW50LmVkaXRvckNvbnRleHQgRWRpdGluZyBjb250ZXh0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmluaXNoUm93RWRpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyaWQ6IEdyaWQsIGVkaXRvckNvbnRleHQ6IFJvd0VkaXRvckNvbnRleHQgfSkgPT4gUHJvbWlzZTxib29sZWFuPnxib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGVudGVycyB0aGlzIFdpZGdldC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmZyb21FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudG9FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuZnJvbVdpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRvV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuYmFja3dhcmRzIGB0cnVlYCBpZiB0aGUgYHRvRWxlbWVudGAgaXMgYmVmb3JlIHRoZSBgZnJvbUVsZW1lbnRgIGluIGRvY3VtZW50IG9yZGVyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzSW46IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBleGl0cyB0aGlzIFdpZGdldCdzIG93bmVyc2hpcCB0cmVlLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGEgYGJsdXJgIGV2ZW50LlxuICAgICAqIGZvY3VzIG1vdmluZyBmcm9tIHdpdGhpbiB0aGlzIFdpZGdldCdzIG93bmVyc2hpcCB0cmVlLCBldmVuIGlmIHRoZXJlIGFyZSBmbG9hdGluZyB3aWRnZXRzXG4gICAgICogd2lsbCBub3QgdHJpZ2dlciB0aGlzIGV2ZW50LiBUaGlzIGlzIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyB3aWRnZXQgY29tcGxldGVseS5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmZyb21FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQudG9FbGVtZW50IFRoZSBlbGVtZW50IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuZnJvbVdpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGxvc3QgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnRvV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuYmFja3dhcmRzIGB0cnVlYCBpZiB0aGUgYHRvRWxlbWVudGAgaXMgYmVmb3JlIHRoZSBgZnJvbUVsZW1lbnRgIGluIGRvY3VtZW50IG9yZGVyLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzT3V0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBkcmFnZ2luZyBzdGFydHMsIHJldHVybiBmYWxzZSB0byBwcmV2ZW50IHRoZSBkcmFnIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50LFRvdWNoRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0JlZm9yZURyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgcmVjb3JkczogTW9kZWxbXSB9LCBldmVudDogTW91c2VFdmVudHxUb3VjaEV2ZW50IH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSB0aGUgcm93IGRyb3Agb3BlcmF0aW9uIGlzIGZpbmFsaXplZC4gWW91IGNhbiByZXR1cm4gZmFsc2UgdG8gYWJvcnQgdGhlIGRyb3Agb3BlcmF0aW9uLCBvciBhXG4gICAgICogUHJvbWlzZSB5aWVsZGluZyBgdHJ1ZWAgLyBgZmFsc2VgIHdoaWNoIGFsbG93cyBmb3IgYXN5bmNocm9ub3VzIGFib3J0IChlLmcuIGZpcnN0IHNob3cgdXNlciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cpLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNvbnRleHRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbnRleHQudmFsaWQgU2V0IHRoaXMgdG8gdHJ1ZSBvciBmYWxzZSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBkcm9wIHBvc2l0aW9uIGlzIHZhbGlkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQuaW5zZXJ0QmVmb3JlIFRoZSByZWNvcmQgdG8gaW5zZXJ0IGJlZm9yZSAoYG51bGxgIGlmIGluc2VydGluZyBhdCBsYXN0IHBvc2l0aW9uIG9mIGEgcGFyZW50IG5vZGUpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQucGFyZW50IFRoZSBwYXJlbnQgcmVjb3JkIG9mIHRoZSBjdXJyZW50IGRyb3AgcG9zaXRpb24gKG9ubHkgYXBwbGljYWJsZSBmb3IgdHJlZXMpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtSZWNvcmRQb3NpdGlvbkNvbnRleHRbXX0gZXZlbnQuY29udGV4dC5vbGRQb3NpdGlvbkNvbnRleHQgQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91cyB0cmVlIHBvc2l0aW9uLiBPYmplY3RzIGNvbnRhaW4gdGhlIGByZWNvcmRgLCBhbmQgaXRzIG9yaWdpbmFsIGBwYXJlbnRJbmRleGAgYW5kIGBwYXJlbnRJZGAgdmFsdWVzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dCZWZvcmVEcm9wRmluYWxpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBjb250ZXh0OiB7IHZhbGlkOiBib29sZWFuLCBpbnNlcnRCZWZvcmU6IE1vZGVsLCBwYXJlbnQ6IE1vZGVsLCByZWNvcmRzOiBNb2RlbFtdLCBvbGRQb3NpdGlvbkNvbnRleHQ6IFJlY29yZFBvc2l0aW9uQ29udGV4dFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hpbGUgdGhlIHJvdyBpcyBiZWluZyBkcmFnZ2VkLCBpbiB0aGUgbGlzdGVuZXIgZnVuY3Rpb24geW91IGhhdmUgYWNjZXNzIHRvIGBjb250ZXh0Lmluc2VydEJlZm9yZWAgYSBncmlkIC9cbiAgICAgKiB0cmVlIHJlY29yZCwgYW5kIGFkZGl0aW9uYWxseSBgY29udGV4dC5wYXJlbnRgIChhIFRyZWVOb2RlKSBmb3IgdHJlZXMuIFlvdSBjYW4gc2lnbmFsIHRoYXQgdGhlIGRyb3AgcG9zaXRpb24gaXNcbiAgICAgKiB2YWxpZCBvciBpbnZhbGlkIGJ5IHNldHRpbmcgYGNvbnRleHQudmFsaWQgPSBmYWxzZTtgXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29udGV4dC52YWxpZCBTZXQgdGhpcyB0byB0cnVlIG9yIGZhbHNlIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRyb3AgcG9zaXRpb24gaXMgdmFsaWQuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQuaW5zZXJ0QmVmb3JlIFRoZSByZWNvcmQgdG8gaW5zZXJ0IGJlZm9yZSAoYG51bGxgIGlmIGluc2VydGluZyBhdCBsYXN0IHBvc2l0aW9uIG9mIGEgcGFyZW50IG5vZGUpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQucGFyZW50IFRoZSBwYXJlbnQgcmVjb3JkIG9mIHRoZSBjdXJyZW50IGRyb3AgcG9zaXRpb24gKG9ubHkgYXBwbGljYWJsZSBmb3IgdHJlZXMpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyaWRSb3dEcmFnOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyB2YWxpZDogYm9vbGVhbiwgaW5zZXJ0QmVmb3JlOiBNb2RlbCwgcGFyZW50OiBNb2RlbCwgcmVjb3JkczogTW9kZWxbXSB9LCBldmVudDogTW91c2VFdmVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHJvdyBkcmFnIG9wZXJhdGlvbiBpcyBhYm9ydGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5zb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuY29udGV4dFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmNvbnRleHQucmVjb3JkcyBUaGUgZHJhZ2dlZCByb3cgcmVjb3Jkc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93RHJhZ0Fib3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgY29udGV4dDogeyByZWNvcmRzOiBNb2RlbFtdIH0sIGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGRyYWdnaW5nIHN0YXJ0cy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50LFRvdWNoRXZlbnR9IGV2ZW50LmV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uR3JpZFJvd0RyYWdTdGFydDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgcmVjb3JkczogTW9kZWxbXSB9LCBldmVudDogTW91c2VFdmVudHxUb3VjaEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBhZnRlciB0aGUgcm93IGRyb3Agb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWQsIHJlZ2FyZGxlc3Mgb2YgdmFsaWRpdHlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5jb250ZXh0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb250ZXh0LnZhbGlkIHRydWUgb3IgZmFsc2UgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGRyb3AgcG9zaXRpb24gd2FzIHZhbGlkXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQuaW5zZXJ0QmVmb3JlIFRoZSByZWNvcmQgdG8gaW5zZXJ0IGJlZm9yZSAoYG51bGxgIGlmIGluc2VydGluZyBhdCBsYXN0IHBvc2l0aW9uIG9mIGEgcGFyZW50IG5vZGUpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LmNvbnRleHQucGFyZW50IFRoZSBwYXJlbnQgcmVjb3JkIG9mIHRoZSBjdXJyZW50IGRyb3AgcG9zaXRpb24gKG9ubHkgYXBwbGljYWJsZSBmb3IgdHJlZXMpXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWxbXX0gZXZlbnQuY29udGV4dC5yZWNvcmRzIFRoZSBkcmFnZ2VkIHJvdyByZWNvcmRzXG4gICAgICogQHBhcmFtIHtSZWNvcmRQb3NpdGlvbkNvbnRleHRbXX0gZXZlbnQuY29udGV4dC5vbGRQb3NpdGlvbkNvbnRleHQgQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91cyB0cmVlIHBvc2l0aW9uLiBPYmplY3RzIGNvbnRhaW4gdGhlIHJlY29yZCwgYW5kIGl0cyBvcmlnaW5hbCBgcGFyZW50SW5kZXhgIGFuZCBgcGFyZW50SWRgIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQuZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25HcmlkUm93RHJvcDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIGNvbnRleHQ6IHsgdmFsaWQ6IGJvb2xlYW4sIGluc2VydEJlZm9yZTogTW9kZWwsIHBhcmVudDogTW9kZWwsIHJlY29yZHM6IE1vZGVsW10sIG9sZFBvc2l0aW9uQ29udGV4dDogUmVjb3JkUG9zaXRpb25Db250ZXh0W10gfSwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBncmlkIGhlYWRlciBpcyBjbGlja2VkIG9uLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2V2ZW50LWhlYWRlckNsaWNrKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgdHJpZ2dlcmluZyBET00gZXZlbnQuXG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50LmNvbHVtbiBUaGUgY29sdW1uIGNsaWNrZWQgb24uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBkb21FdmVudDogRXZlbnQsIGNvbHVtbjogQ29sdW1uIH0pID0+IGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgZmlyZXMgb24gdGhlIG93bmluZyBHcmlkIGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIHNob3duIGZvciBhIGhlYWRlci5cbiAgICAgKiBBbGxvd3MgbWFuaXB1bGF0aW9uIG9mIHRoZSBpdGVtcyB0byBzaG93IGluIHRoZSBzYW1lIHdheSBhcyBpbiB0aGUgW3Byb2Nlc3NJdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvZmVhdHVyZS9IZWFkZXJNZW51I2NvbmZpZy1wcm9jZXNzSXRlbXMpLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2V2ZW50LWhlYWRlck1lbnVCZWZvcmVTaG93KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE1lbnVJdGVtRW50cnk+fSBldmVudC5pdGVtcyBNZW51IGl0ZW0gY29uZmlnc1xuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyTWVudUJlZm9yZVNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5PiwgY29sdW1uOiBDb2x1bW4gfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIGluIHRoZSBoZWFkZXIgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyTWVudUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtLCBjb2x1bW46IENvbHVtbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYWZ0ZXIgdGhlIGNvbnRleHQgbWVudSBpcyBzaG93biBmb3IgYSBoZWFkZXJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5NZW51fSBldmVudC5tZW51IFRoZSBtZW51XG4gICAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBNZW51SXRlbUVudHJ5Pn0gZXZlbnQuaXRlbXMgTWVudSBpdGVtIGNvbmZpZ3NcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIENvbHVtblxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhlYWRlck1lbnVTaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBtZW51OiBNZW51LCBpdGVtczogUmVjb3JkPHN0cmluZywgTWVudUl0ZW1FbnRyeT4sIGNvbHVtbjogQ29sdW1uIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIG9uIHRoZSBvd25pbmcgR3JpZCB3aGVuIGEgY2hlY2sgaXRlbSBpcyB0b2dnbGVkIGluIHRoZSBoZWFkZXIgY29udGV4dCBtZW51LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnV9IGV2ZW50Lm1lbnUgVGhlIG1lbnVcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lk1lbnVJdGVtfSBldmVudC5pdGVtIFNlbGVjdGVkIG1lbnUgaXRlbVxuICAgICAqIEBwYXJhbSB7R3JpZC5jb2x1bW4uQ29sdW1ufSBldmVudC5jb2x1bW4gQ29sdW1uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGVja2VkIENoZWNrZWQgb3Igbm90XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyTWVudVRvZ2dsZUl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIG1lbnU6IE1lbnUsIGl0ZW06IE1lbnVJdGVtLCBjb2x1bW46IENvbHVtbiwgY2hlY2tlZDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IHdhcyBoaWRkZW5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHJvdyBsb2NraW5nIGlzIGVuYWJsZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWRCYXNlfSBldmVudC5jbG9uZSBUaGUgY3JlYXRlZCBjbG9uZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkxvY2tSb3dzOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2xvbmU6IEdyaWRCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBNb3VzZSBtb3ZlZCBvdXQgZnJvbSBlbGVtZW50IGluIGdyaWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIGJyb3dzZXIgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Nb3VzZU91dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBNb3VzZSBtb3ZlZCBpbiBvdmVyIGVsZW1lbnQgaW4gZ3JpZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgYnJvd3NlciBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbk1vdXNlT3ZlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGV2ZW50OiBNb3VzZUV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCB3aGljaCBoYWQgYmVlbiBpbiBhIG5vbi12aXNpYmxlIHN0YXRlIGZvciBhbnkgcmVhc29uXG4gICAgICogYWNoaWV2ZXMgdmlzaWJpbGl0eS5cbiAgICAgKiBbTW9yZS4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvdmlldy9HcmlkQmFzZSNldmVudC1wYWludClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHBhaW50ZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5maXJzdFBhaW50IGB0cnVlYCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYWludDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmaXJzdFBhaW50OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgYWZ0ZXIgYSBwYXN0ZSBhY3Rpb24gaXMgcGVyZm9ybWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5jbGlwYm9hcmREYXRhIFRoZSBjbGlwYm9hcmREYXRhIHRoYXQgd2FzIHBhc3RlZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50Lm1vZGlmaWVkUmVjb3JkcyBUaGUgcmVjb3JkcyB3aGljaCBoYXZlIGJlZW4gbW9kaWZpZWQgZHVlIHRvIHRoZSBwYXN0ZSBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb259IGV2ZW50LnRhcmdldENlbGwgVGhlIGNlbGwgZnJvbSB3aGljaCB0aGUgcGFzdGUgd2lsbCBiZSBzdGFydGVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmVudGl0eU5hbWUgJ2NlbGwnIHRvIGRpc3Rpbmd1aXNoIHRoaXMgZXZlbnQgZnJvbSBvdGhlciBwYXN0ZSBldmVudHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYXN0ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgY2xpcGJvYXJkRGF0YTogc3RyaW5nLCBtb2RpZmllZFJlY29yZHM6IE1vZGVsW10sIHRhcmdldENlbGw6IEdyaWRMb2NhdGlvbiwgZW50aXR5TmFtZTogc3RyaW5nIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBleHBvcnQgaGFzIGZpbmlzaGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7UmVzcG9uc2V9IFtldmVudC5yZXNwb25zZV0gT3B0aW9uYWwgcmVzcG9uc2UsIGlmIHJlY2VpdmVkXG4gICAgICogQHBhcmFtIHtFcnJvcn0gW2V2ZW50LmVycm9yXSBPcHRpb25hbCBlcnJvciwgaWYgZXhjZXB0aW9uIG9jY3VycmVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGRmRXhwb3J0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVzcG9uc2U/OiBSZXNwb25zZSwgZXJyb3I/OiBFcnJvciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFdpZGdldCdzIHJlYWQgb25seSBzdGF0ZSBpcyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQucmVhZE9ubHkgUmVhZCBvbmx5IG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlYWRPbmx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVhZE9ubHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSB3aWRnZXQncyBlbGVtZW50cyBoYXZlIGJlZW4gc3luY2hyb25pemVkIGR1ZSB0byBhIGRpcmVjdCBvciBpbmRpcmVjdCBjYWxsXG4gICAgICogdG8gW3JlY29tcG9zZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1yZWNvbXBvc2UpLCBpZiB0aGlzIHJlc3VsdHMgaW4gc29tZSBjaGFuZ2UgdG8gdGhlIHdpZGdldCdzIHJlbmRlcmVkIERPTSBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWNvbXBvc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBhZnRlciBhIHJvdyBpcyByZW5kZXJlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQucm93LlJvd30gZXZlbnQucm93IFRoZSByb3cgdGhhdCBoYXMgYmVlbiByZW5kZXJlZFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHJlY29yZCBmb3IgdGhlIHJvd1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5yZWNvcmRJbmRleCBUaGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgcmVjb3JkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVuZGVyUm93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgcm93OiBSb3csIHJlY29yZDogTW9kZWwsIHJlY29yZEluZGV4OiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEdyaWQgcm93cyBoYXZlIGJlZW4gcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGlzIGdyaWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVuZGVyUm93czogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIGVuY2Fwc3VsYXRpbmcgZWxlbWVudCBvZiBhIFdpZGdldCByZXNpemVzICpvbmx5IHdoZW4gW21vbml0b3JSZXNpemVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLW1vbml0b3JSZXNpemUpIGlzIGB0cnVlYCouXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQud2lkdGggVGhlIG5ldyB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5oZWlnaHQgVGhlIG5ldyBoZWlnaHRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkV2lkdGggVGhlIG9sZCB3aWR0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRIZWlnaHQgVGhlIG9sZCBoZWlnaHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXNpemU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG9sZFdpZHRoOiBudW1iZXIsIG9sZEhlaWdodDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBHcmlkIHJlc2l6ZSBsZWFkIHRvIGEgbmV3IHJlc3BvbnNpdmUgbGV2ZWwgYmVpbmcgYXBwbGllZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5ncmlkIEdyaWQgdGhhdCB3YXMgcmVzaXplZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5sZXZlbCBOZXcgcmVzcG9uc2l2ZSBsZXZlbCAoc21hbGwsIGxhcmdlLCBldGMpXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIE5ldyB3aWR0aCBpbiBweFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5vbGRMZXZlbCBPbGQgcmVzcG9uc2l2ZSBsZXZlbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRXaWR0aCBPbGQgd2lkdGggaW4gcHhcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXNwb25zaXZlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JpZDogR3JpZCwgbGV2ZWw6IHN0cmluZywgd2lkdGg6IG51bWJlciwgb2xkTGV2ZWw6IHN0cmluZywgb2xkV2lkdGg6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyB3aGVuIGEgcm93IGhhcyBmaW5pc2hlZCBjb2xsYXBzaW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFJlY29yZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJvd0NvbGxhcHNlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBmaXJlcyB3aGVuIGEgcm93IGV4cGFuZCBoYXMgZmluaXNoZWQgZXhwYW5kaW5nLlxuICAgICAqIFtNb3JlLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L0dyaWRCYXNlI2V2ZW50LXJvd0V4cGFuZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBSZWNvcmRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuZXhwYW5kZWRFbGVtZW50cyBBbiBvYmplY3Qgd2l0aCB0aGUgR3JpZCByZWdpb24gbmFtZSBhcyBwcm9wZXJ0eSBhbmQgdGhlIGV4cGFuZGVkIGJvZHkgZWxlbWVudCBhcyB2YWx1ZVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC53aWRnZXQgSW4gY2FzZSBvZiBleHBhbmRpbmcgYSBXaWRnZXQsIHRoaXMgd2lsbCBiZSBhIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2UgY3JlYXRlZCBieSB0aGUgYWN0dWFsIGV4cGFuc2lvbi4gSWYgdGhlcmUgaXMgbXVsdGlwbGUgR3JpZCByZWdpb25zLCB1c2UgdGhlIGB3aWRnZXRzYCBwYXJhbSBpbnN0ZWFkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC53aWRnZXRzIEluIGNhc2Ugb2YgZXhwYW5kaW5nIGEgV2lkZ2V0LCB0aGlzIHdpbGwgYmUgYW4gb2JqZWN0IHdpdGggdGhlIEdyaWQgcmVnaW9uIG5hbWUgYXMgcHJvcGVydHkgYW5kIHRoZSByZWZlcmVuY2UgdG8gdGhlIHdpZGdldCBpbnN0YW5jZSBjcmVhdGVkIGJ5IHRoZSBhY3R1YWwgZXhwYW5zaW9uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93RXhwYW5kOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVjb3JkOiBNb2RlbCwgZXhwYW5kZWRFbGVtZW50czogb2JqZWN0LCB3aWRnZXQ6IFdpZGdldCwgd2lkZ2V0czogb2JqZWN0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtb3VzZSBlbnRlcnMgYSByb3dcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIFRoZSBncmlkIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBUaGUgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUgaG92ZXJlZCByb3dcbiAgICAgKiBAcGFyYW0ge0dyaWQuY29sdW1uLkNvbHVtbn0gZXZlbnQuY29sdW1uIFRoZSBjb2x1bW4gY3VycmVudGx5IGhvdmVyZWRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5jZWxsRWxlbWVudCBUaGUgY2VsbCBIVE1MIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50LmV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93TW91c2VFbnRlcjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgcmVjb3JkOiBNb2RlbCwgY29sdW1uOiBDb2x1bW4sIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyBhIHJvd1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgVGhlIGdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgcmVwcmVzZW50aW5nIHRoZSByb3cgdGhhdCB0aGUgbW91c2UgbGVmdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGxFbGVtZW50IFRoZSBjZWxsIEhUTUwgZWxlbWVudCB0aGF0IHRoZSBtb3VzZSBsZWZ0XG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudC5ldmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJvd01vdXNlTGVhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHJlY29yZDogTW9kZWwsIGNlbGxFbGVtZW50OiBIVE1MRWxlbWVudCwgZXZlbnQ6IE1vdXNlRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEdyaWQgaGFzIHNjcm9sbGVkIHZlcnRpY2FsbHlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LnNjcm9sbFRvcCBUaGUgdmVydGljYWwgc2Nyb2xsIHBvc2l0aW9uLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNjcm9sbDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZEJhc2UsIHNjcm9sbFRvcDogbnVtYmVyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGUgc2VsZWN0aW9uIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7J3NlbGVjdCcsJ2Rlc2VsZWN0J30gZXZlbnQuYWN0aW9uIGAnc2VsZWN0J2AvYCdkZXNlbGVjdCdgXG4gICAgICogQHBhcmFtIHsncm93JywnY2VsbCd9IGV2ZW50Lm1vZGUgYCdyb3cnYC9gJ2NlbGwnYFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LmRlc2VsZWN0ZWQgVGhlIHJlY29yZHMgZGVzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5zZWxlY3RlZCBUaGUgcmVjb3JkcyBzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5zZWxlY3Rpb24gVGhlIHJlY29yZHMgaW4gdGhlIG5ldyBzZWxlY3Rpb24uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LmRlc2VsZWN0ZWRDZWxscyBUaGUgY2VsbHMgZGVzZWxlY3RlZCBpbiB0aGlzIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0dyaWQudXRpbC5HcmlkTG9jYXRpb25bXX0gZXZlbnQuc2VsZWN0ZWRDZWxscyBUaGUgY2VsbHMgc2VsZWN0ZWQgaW4gdGhpcyBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtHcmlkLnV0aWwuR3JpZExvY2F0aW9uW119IGV2ZW50LmNlbGxTZWxlY3Rpb24gVGhlIGNlbGxzIGluIHRoZSBuZXcgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGFjdGlvbjogJ3NlbGVjdCd8J2Rlc2VsZWN0JywgbW9kZTogJ3Jvdyd8J2NlbGwnLCBzb3VyY2U6IEdyaWQsIGRlc2VsZWN0ZWQ6IE1vZGVsW10sIHNlbGVjdGVkOiBNb2RlbFtdLCBzZWxlY3Rpb246IE1vZGVsW10sIGRlc2VsZWN0ZWRDZWxsczogR3JpZExvY2F0aW9uW10sIHNlbGVjdGVkQ2VsbHM6IEdyaWRMb2NhdGlvbltdLCBjZWxsU2VsZWN0aW9uOiBHcmlkTG9jYXRpb25bXSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVGhlIHNlbGVjdGlvbk1vZGUgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQuc2VsZWN0aW9uTW9kZSBUaGUgbmV3IFtzZWxlY3Rpb25Nb2RlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC92aWV3L21peGluL0dyaWRTZWxlY3Rpb24jY29uZmlnLXNlbGVjdGlvbk1vZGUpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uTW9kZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNlbGVjdGlvbk1vZGU6IG9iamVjdCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TaG93OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gc3BsaXR0aW5nIHRoZSBHcmlkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZVtdfSBldmVudC5zdWJWaWV3cyBUaGUgc3ViIHZpZXdzIGNyZWF0ZWQgYnkgdGhlIHNwbGl0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50Lm9wdGlvbnMgVGhlIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBzcGxpdCBjYWxsXG4gICAgICogQHBhcmFtIHsnaG9yaXpvbnRhbCcsJ3ZlcnRpY2FsJywnYm90aCd9IGV2ZW50Lm9wdGlvbnMuZGlyZWN0aW9uIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHNwbGl0XG4gICAgICogQHBhcmFtIHtHcmlkLmNvbHVtbi5Db2x1bW59IGV2ZW50Lm9wdGlvbnMuYXRDb2x1bW4gVGhlIGNvbHVtbiB0byBzcGxpdCBhdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5vcHRpb25zLmF0UmVjb3JkIFRoZSByZWNvcmQgdG8gc3BsaXQgYXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TcGxpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHN1YlZpZXdzOiBHcmlkQmFzZVtdLCBvcHRpb25zOiB7IGRpcmVjdGlvbjogJ2hvcml6b250YWwnfCd2ZXJ0aWNhbCd8J2JvdGgnLCBhdENvbHVtbjogQ29sdW1uLCBhdFJlY29yZDogTW9kZWwgfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYnkgdGhlIEdyaWQgd2hlbiB0aGUgY29sbGFwc2UgaWNvbiBpcyBjbGlja2VkLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGNvbGxhcHNlIGFjdGlvbixcbiAgICAgKiBpZiB5b3Ugd2FudCB0byBpbXBsZW1lbnQgeW91ciBvd24gYmVoYXZpb3IuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSBzdWJncmlkXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TcGxpdHRlckNvbGxhcHNlQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIHN1YkdyaWQ6IFN1YkdyaWQsIGRvbUV2ZW50OiBFdmVudCB9KSA9PiBib29sZWFufHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBieSB0aGUgR3JpZCBhZnRlciBhIHN1Yi1ncmlkIGhhcyBiZWVuIHJlc2l6ZWQgdXNpbmcgdGhlIHNwbGl0dGVyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSByZXNpemVkIHN1YmdyaWRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0dGVyRHJhZ0VuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgc3ViR3JpZDogU3ViR3JpZCwgZG9tRXZlbnQ6IEV2ZW50IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBieSB0aGUgR3JpZCB3aGVuIGEgc3ViLWdyaWQgcmVzaXplIGdlc3R1cmUgc3RhcnRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSBzdWJncmlkIGFib3V0IHRvIGJlIHJlc2l6ZWRcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudC5kb21FdmVudCBUaGUgbmF0aXZlIERPTSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNwbGl0dGVyRHJhZ1N0YXJ0OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJ5IHRoZSBHcmlkIHdoZW4gdGhlIGV4cGFuZCBpY29uIGlzIGNsaWNrZWQuIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIGRlZmF1bHQgZXhwYW5kIGFjdGlvbixcbiAgICAgKiBpZiB5b3Ugd2FudCB0byBpbXBsZW1lbnQgeW91ciBvd24gYmVoYXZpb3IuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgR3JpZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSBzdWJncmlkXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TcGxpdHRlckV4cGFuZENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkLCBzdWJHcmlkOiBTdWJHcmlkLCBkb21FdmVudDogRXZlbnQgfSkgPT4gYm9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIG93bmluZyBHcmlkIHdoZW4gZWRpdGluZyBzdGFydHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZH0gZXZlbnQuc291cmNlIE93bmVyIGdyaWRcbiAgICAgKiBAcGFyYW0ge0NlbGxFZGl0b3JDb250ZXh0fSBldmVudC5lZGl0b3JDb250ZXh0IEVkaXRpbmcgY29udGV4dFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN0YXJ0Q2VsbEVkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGVkaXRvckNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiB0aGUgb3duaW5nIEdyaWQgd2hlbiBlZGl0aW5nIHN0YXJ0c1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkfSBldmVudC5zb3VyY2UgT3duZXIgZ3JpZFxuICAgICAqIEBwYXJhbSB7Um93RWRpdG9yQ29udGV4dH0gZXZlbnQuZWRpdG9yQ29udGV4dCBFZGl0aW5nIGNvbnRleHRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TdGFydFJvd0VkaXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWQsIGVkaXRvckNvbnRleHQ6IFJvd0VkaXRvckNvbnRleHQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIGEgc3ViIGdyaWQgaXMgY29sbGFwc2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuc291cmNlIFRoZSBmaXJpbmcgR3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LlN1YkdyaWR9IGV2ZW50LnN1YkdyaWQgVGhlIHN1YiBncmlkIGluc3RhbmNlXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU3ViR3JpZENvbGxhcHNlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBHcmlkQmFzZSwgc3ViR3JpZDogU3ViR3JpZCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYWZ0ZXIgYSBzdWIgZ3JpZCBpcyBleHBhbmRlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtHcmlkLnZpZXcuR3JpZEJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgZmlyaW5nIEdyaWQgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5TdWJHcmlkfSBldmVudC5zdWJHcmlkIFRoZSBzdWIgZ3JpZCBpbnN0YW5jZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN1YkdyaWRFeHBhbmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEdyaWRCYXNlLCBzdWJHcmlkOiBTdWJHcmlkIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIG9uZSBvciBtb3JlIGdyb3VwcyBhcmUgZXhwYW5kZWQgb3IgY29sbGFwc2VkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5ncm91cFJlY29yZCBbREVQUkVDQVRFRF0gVXNlIGBncm91cFJlY29yZHNgIHBhcmFtIGluc3RlYWRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbFtdfSBldmVudC5ncm91cFJlY29yZHMgVGhlIGdyb3VwIHJlY29yZHMgYmVpbmcgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2UgQ29sbGFwc2VkICh0cnVlKSBvciBleHBhbmRlZCAoZmFsc2UpXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZXZlbnQuYWxsUmVjb3Jkc10gVHJ1ZSBpZiB0aGlzIGV2ZW50IGlzIHBhcnQgb2YgdG9nZ2xpbmcgYWxsIGdyb3Vwc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRvZ2dsZUdyb3VwOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZ3JvdXBSZWNvcmQ6IE1vZGVsLCBncm91cFJlY29yZHM6IE1vZGVsW10sIGNvbGxhcHNlOiBib29sZWFuLCBhbGxSZWNvcmRzPzogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgYSBwYXJlbnQgbm9kZSByZWNvcmQgdG9nZ2xlcyBpdHMgY29sbGFwc2VkIHN0YXRlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmQgYmVpbmcgdG9nZ2xlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmNvbGxhcHNlIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBiZWluZyBjb2xsYXBzZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVG9nZ2xlTm9kZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlY29yZDogTW9kZWwsIGNvbGxhcHNlOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBBIGhlYWRlciBbdG9vbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy10b29scykgaGFzIGJlZW4gY2xpY2tlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Ub29sfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlRvb2x9IGV2ZW50LnRvb2wgVGhlIHRvb2wgd2hpY2ggaXMgYmVpbmcgY2xpY2tlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub29sQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRvb2wsIHRvb2w6IFRvb2wgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIG9uIHRoZSBvd25pbmcgR3JpZC9TY2hlZHVsZXIvR2FudHQgYWZ0ZXIgdHJlZSBncm91cGluZyBsZXZlbHMgY2hhbmdlXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7R3JpZC52aWV3LkdyaWR9IGV2ZW50LnNvdXJjZSBUaGUgZ3JpZCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xGdW5jdGlvbilbXX0gZXZlbnQuZ3JvdXBlcnMgQXJyYXkgb2YgZmllbGQgbmFtZXMgb3IgZnVuY3Rpb25zIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBncm91cGluZyBsZXZlbHNcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8RnVuY3Rpb24pW119IGV2ZW50Lm9sZEdyb3VwZXJzIEFycmF5IG9mIGZpZWxkIG5hbWVzIG9yIGZ1bmN0aW9ucyByZXByZXNlbnRpbmcgdGhlIHByZXZpb3VzIGdyb3VwaW5nIGxldmVsc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRyZWVHcm91cDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogR3JpZCwgZ3JvdXBlcnM6IChzdHJpbmd8RnVuY3Rpb24pW10sIG9sZEdyb3VwZXJzOiAoc3RyaW5nfEZ1bmN0aW9uKVtdIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHJvdyBsb2NraW5nIGlzIGRpc2FibGVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0dyaWQudmlldy5HcmlkQmFzZX0gZXZlbnQuY2xvbmUgVGhlIGxvY2tlZCBjbG9uZSB0aGF0IHdpbGwgYmUgZGVzdHJveWVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVW5sb2NrUm93czogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNsb25lOiBHcmlkQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiB1bi1zcGxpdHRpbmcgdGhlIEdyaWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVW5zcGxpdDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuZCBhcHBlbmQgdGhlIHVuZGVybHlpbmcgd2lkZ2V0XG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBtZSA9IHRoaXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnXG4gICAgICAgICAgICB9ID0gbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDbGFzcyxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZU5hbWUsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ3MsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUV2ZW50c1xuICAgICAgICAgICAgfSA9IEJyeW50dW1HcmlkQmFzZUNvbXBvbmVudDtcblxuICAgICAgICBicnludHVtQ29uZmlncy5maWx0ZXIocHJvcCA9PiBwcm9wIGluIHRoaXMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGJyeW50dW1Db25maWcsIHByb3AsIHRoaXNbcHJvcF0pO1xuICAgICAgICAgICAgaWYgKFsnZmVhdHVyZXMnLCAnY29uZmlnJ10uaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb25maWdQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGJyeW50dW1FdmVudHMuZmlsdGVyKGV2ZW50ID0+IHRoaXNbZXZlbnRdICYmIHRoaXNbZXZlbnRdLm9ic2VydmVycy5sZW5ndGggPiAwKS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgdW5jYXBpdGFsaXplID0gKHN0cjogc3RyaW5nKSA9PiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSksXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gKHN0cjogc3RyaW5nKSA9PiB1bmNhcGl0YWxpemUoc3RyLnNsaWNlKDIpKTtcblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5saXN0ZW5lcnNbZXZlbnROYW1lKGV2ZW50KV0gPSBlID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgbWVbZXZlbnRdLmVtaXQoZSk7XG4gICAgICAgICAgICAgICAgLy8gRXZlbnRFbWl0dGVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMgaW4gdGhlIG5vcm1hbCB3YXksIHdvcmsgYXJvdW5kIGl0IGJ5IHNldHRpbmcgYHJldHVyblZhbHVlYCBmbGFnXG4gICAgICAgICAgICAgICAgLy8gaW4gQW5ndWxhciBsaXN0ZW5lcnNcbiAgICAgICAgICAgICAgICByZXR1cm4gZS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIElmIGNvbXBvbmVudCBoYXMgbm8gY29udGFpbmVyIHNwZWNpZmllZCBpbiBjb25maWcgdGhlbiB1c2UgYWRvcHQgdG8gV3JhcHBlcidzIGVsZW1lbnRcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIGNvbnRhaW5lclBhcmFtID0gW1xuICAgICAgICAgICAgICAgICdhZG9wdCcsXG4gICAgICAgICAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QWZ0ZXInLFxuICAgICAgICAgICAgICAgICdpbnNlcnRCZWZvcmUnXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgXS5maW5kKHByb3AgPT4gYnJ5bnR1bUNvbmZpZ1twcm9wXSk7XG4gICAgICAgIGlmICghY29udGFpbmVyUGFyYW0pIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZU5hbWUgPT09ICdCdXR0b24nIHx8IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRSb290Tm9kZSgpIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgIC8vIEJ1dHRvbiBzaG91bGQgYWx3YXlzIGJlIDxhPiBvciA8YnV0dG9uPiBpbnNpZGUgb3duZXIgZWxlbWVudFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYXBwZW5kVG8gPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFkb3B0ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29udGFpbmVyKGluc3RhbmNlTmFtZSwgY29udGFpbmVyUGFyYW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW4gc2hhZG93IERPTSAoZS5nLiBBbmd1bGFyIFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSksIHRoZW1lIENTUyBmcm9tIGRvY3VtZW50LmhlYWRcbiAgICAgICAgLy8gZG9lcyBub3QgY2FzY2FkZSBpbnRvIHRoZSBzaGFkb3cgcm9vdC4gSW5qZWN0IGEgbWF0Y2hpbmcgPGxpbms+IHNvIEJyeW50dW0ncyBDU1MgY2hlY2tcbiAgICAgICAgLy8gZmluZHMgdGhlIHRoZW1lLiBUaGUgQGZvbnQtZmFjZSBydWxlcyBmcm9tIGNvbXBvbmVudCBzdHlsZXMgYXJlIGFsc28gZXh0cmFjdGVkIHRvXG4gICAgICAgIC8vIGRvY3VtZW50IHNjb3BlIHNvIGRvY3VtZW50LmZvbnRzIGRldGVjdHMgdGhlbSAoc2hhZG93LXJvb3QgQGZvbnQtZmFjZSBpcyBub3QgcmVsaWFibHlcbiAgICAgICAgLy8gaW5jbHVkZWQgaW4gZG9jdW1lbnQuZm9udHMgYWNyb3NzIGFsbCBicm93c2VycykuXG4gICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgaWYgKHNoYWRvd1Jvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBpbml0VGhlbWVJblNoYWRvd1Jvb3RzKCk7XG4gICAgICAgICAgICBCcnludHVtR3JpZEJhc2VDb21wb25lbnQuZW5zdXJlRm9udHNJbkRvY3VtZW50KHNoYWRvd1Jvb3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBtZS5pbnN0YW5jZSA9IGluc3RhbmNlTmFtZSA9PT0gJ1dpZGdldCcgPyBXaWRnZXQuY3JlYXRlKGJyeW50dW1Db25maWcpIDogbmV3IGluc3RhbmNlQ2xhc3MoYnJ5bnR1bUNvbmZpZyk7XG5cbiAgICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIGdyaWRJbnN0YW5jZSwgc2NoZWR1bGVySW5zdGFuY2UgZXRjLlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lW1N0cmluZ0hlbHBlci51bmNhcGl0YWxpemUoaW5zdGFuY2VOYW1lKSArICdJbnN0YW5jZSddID0gbWUuaW5zdGFuY2U7XG4gICAgICAgIC8vIFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIGFsbCBAZm9udC1mYWNlIGRlY2xhcmF0aW9ucyBmcm9tIGEgc2hhZG93IHJvb3QncyBzdHlsZXNoZWV0cyBhbmQgYWRkcyB0aGVtIHRvXG4gICAgICogZG9jdW1lbnQuaGVhZCBhcyBhIHNpbmdsZSA8c3R5bGU+IGVsZW1lbnQuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgQGZvbnQtZmFjZSBydWxlcyBpbnNpZGVcbiAgICAgKiBhIHNoYWRvdyByb290IGFyZSBub3QgcmVsaWFibHkgaW5jbHVkZWQgaW4gZG9jdW1lbnQuZm9udHMgYWNyb3NzIGFsbCBicm93c2VycywgY2F1c2luZ1xuICAgICAqIEJyeW50dW0ncyBDU1MgY29tcGF0aWJpbGl0eSBjaGVjayB0byBpbmNvcnJlY3RseSByZXBvcnQgbWlzc2luZyBmb250cy5cbiAgICAgKiBTYWZlIHRvIGNhbGwgbXVsdGlwbGUgdGltZXMg4oCUIHRoZSBleHRyYWN0aW9uIHJ1bnMgb25seSBvbmNlIHBlciBwYWdlLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGVuc3VyZUZvbnRzSW5Eb2N1bWVudChzaGFkb3dSb290OiBTaGFkb3dSb290KTogdm9pZCB7XG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYi1zaGFkb3ctcm9vdC1mb250cycpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb250RmFjZVJ1bGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGV4dHJhY3RGcm9tU2hlZXQgPSAoc2hlZXQ6IENTU1N0eWxlU2hlZXQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChydWxlc1tpXS50eXBlID09PSBDU1NSdWxlLkZPTlRfRkFDRV9SVUxFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250RmFjZVJ1bGVzLnB1c2gocnVsZXNbaV0uY3NzVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoX2UpIHtcbiAgICAgICAgICAgICAgICAvLyBDcm9zcy1vcmlnaW4gYWNjZXNzIG1heSB0aHJvdzsgc2lsZW50bHkgc2tpcFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFkb3B0ZWRTdHlsZVNoZWV0cyAoQW5ndWxhciAxNCsgLyBtb2Rlcm4gYnJvd3NlcnMpXG4gICAgICAgIGNvbnN0IGFkb3B0ZWRTaGVldHM6IENTU1N0eWxlU2hlZXRbXSA9IChzaGFkb3dSb290IGFzIGFueSkuYWRvcHRlZFN0eWxlU2hlZXRzID8/IFtdO1xuICAgICAgICBhZG9wdGVkU2hlZXRzLmZvckVhY2goc2hlZXQgPT4gZXh0cmFjdEZyb21TaGVldChzaGVldCkpO1xuXG4gICAgICAgIC8vIDxzdHlsZT4gZWxlbWVudHMgKG9sZGVyIEFuZ3VsYXIgb3IgZmFsbGJhY2spXG4gICAgICAgIHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGlmIChlbC5zaGVldCkge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RGcm9tU2hlZXQoZWwuc2hlZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZm9udEZhY2VSdWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgICBzdHlsZS5pZCA9ICdiLXNoYWRvdy1yb290LWZvbnRzJztcbiAgICAgICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gZm9udEZhY2VSdWxlcy5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2F0Y2ggZm9yIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0gY2hhbmdlc1xuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICB7IGluc3RhbmNlTmFtZSB9ID0gQnJ5bnR1bUdyaWRCYXNlQ29tcG9uZW50O1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBjaGFuZ2VzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpLmZvckVhY2goKFtwcm9wLCBjaGFuZ2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gKGNoYW5nZSBhcyBTaW1wbGVDaGFuZ2UpLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgICAgIHsgYnJ5bnR1bUNvbmZpZ3NPbmx5LCBicnludHVtUHJvcHMgfSA9IEJyeW50dW1HcmlkQmFzZUNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChicnludHVtUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGluc3RhbmNlLCBwcm9wLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChicnludHVtQ29uZmlnc09ubHkuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nVXBkYXRlUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5kZXN0cm95KSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==