@seniorsistemas/data-seniorx-core 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/core/constants/chips.const.d.ts +1 -0
  2. package/core/constants/combobox.const.d.ts +1 -1
  3. package/core/constants/fileupload.const.d.ts +9 -0
  4. package/core/constants/icon-picker.const.d.ts +1 -0
  5. package/core/constants/picklist.const.d.ts +1 -0
  6. package/core/constants/table.const.d.ts +43 -0
  7. package/core/types/button.type.d.ts +18 -2
  8. package/core/types/fileupload.type.d.ts +17 -0
  9. package/core/types/filters.type.d.ts +4 -0
  10. package/core/types/table-column.type.d.ts +31 -0
  11. package/core/types/table-options.type.d.ts +90 -0
  12. package/core/types/table-shared.type.d.ts +13 -0
  13. package/core/types/table-visual.type.d.ts +23 -0
  14. package/core/types/table.type.d.ts +4 -113
  15. package/core/utils/layout.util.d.ts +4 -0
  16. package/esm2022/core/constants/chips.const.mjs +2 -1
  17. package/esm2022/core/constants/combobox.const.mjs +2 -2
  18. package/esm2022/core/constants/fileupload.const.mjs +10 -0
  19. package/esm2022/core/constants/icon-picker.const.mjs +76 -1
  20. package/esm2022/core/constants/picklist.const.mjs +2 -1
  21. package/esm2022/core/constants/table.const.mjs +53 -6
  22. package/esm2022/core/types/button.type.mjs +1 -1
  23. package/esm2022/core/types/fileupload.type.mjs +2 -0
  24. package/esm2022/core/types/filters.type.mjs +1 -1
  25. package/esm2022/core/types/table-column.type.mjs +2 -0
  26. package/esm2022/core/types/table-options.type.mjs +2 -0
  27. package/esm2022/core/types/table-shared.type.mjs +2 -0
  28. package/esm2022/core/types/table-visual.type.mjs +2 -0
  29. package/esm2022/core/types/table.type.mjs +1 -1
  30. package/esm2022/core/utils/combobox.util.mjs +2 -2
  31. package/esm2022/core/utils/layout.util.mjs +21 -5
  32. package/esm2022/features/accordion/accordion-item.component.mjs +1 -1
  33. package/esm2022/features/badge/badge.component.mjs +1 -1
  34. package/esm2022/features/button/button.component.mjs +76 -11
  35. package/esm2022/features/button/components/button-menu.component.mjs +81 -0
  36. package/esm2022/features/card-list/card/card.component.mjs +3 -3
  37. package/esm2022/features/checkbox/checkbox.component.mjs +3 -3
  38. package/esm2022/features/chips/chips.component.mjs +8 -5
  39. package/esm2022/features/color-picker/color-picker.component.mjs +1 -1
  40. package/esm2022/features/combobox/combobox.component.mjs +17 -4
  41. package/esm2022/features/fileupload/fileupload.component.mjs +311 -0
  42. package/esm2022/features/filters/filters.component.mjs +3 -3
  43. package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
  44. package/esm2022/features/icon-picker/icon-picker.component.mjs +34 -7
  45. package/esm2022/features/info-sign/info-sign.component.mjs +1 -1
  46. package/esm2022/features/mask/mask.component.mjs +1 -1
  47. package/esm2022/features/modal/modal.component.mjs +1 -1
  48. package/esm2022/features/number-input/number-input.component.mjs +1 -1
  49. package/esm2022/features/paginator/paginator.component.mjs +3 -3
  50. package/esm2022/features/picklist/picklist.component.mjs +33 -6
  51. package/esm2022/features/row-card-list/row-card/row-card.component.mjs +3 -3
  52. package/esm2022/features/searchbox/searchbox.component.mjs +3 -3
  53. package/esm2022/features/stats-card/stats-card.component.mjs +1 -1
  54. package/esm2022/features/switch/switch.component.mjs +3 -2
  55. package/esm2022/features/table/components/table-actions-menu.component.mjs +86 -0
  56. package/esm2022/features/table/components/table-cell-content.component.mjs +124 -0
  57. package/esm2022/features/table/components/table-sort-indicator.component.mjs +65 -0
  58. package/esm2022/features/table/table.component.mjs +116 -319
  59. package/esm2022/features/table/utils/table-config.util.mjs +35 -0
  60. package/esm2022/features/table/utils/table-data.util.mjs +96 -0
  61. package/esm2022/features/table/utils/table-layout.util.mjs +25 -0
  62. package/esm2022/features/table/utils/table-truncate.pipe.mjs +19 -0
  63. package/esm2022/features/table/utils/table-visual.util.mjs +221 -0
  64. package/esm2022/features/textarea/textarea.component.mjs +1 -1
  65. package/esm2022/features/textbox/textbox.component.mjs +1 -1
  66. package/esm2022/features/tooltip/tooltip.component.mjs +12 -3
  67. package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2 -2
  68. package/esm2022/locales/en.json +194 -0
  69. package/esm2022/locales/es-CO.json +187 -1
  70. package/esm2022/locales/pt.json +194 -0
  71. package/esm2022/providers/features.provider.mjs +3 -1
  72. package/esm2022/public-api.mjs +3 -1
  73. package/features/button/button.component.d.ts +14 -7
  74. package/features/button/components/button-menu.component.d.ts +25 -0
  75. package/features/chips/chips.component.d.ts +1 -0
  76. package/features/combobox/combobox.component.d.ts +4 -1
  77. package/features/fileupload/fileupload.component.d.ts +66 -0
  78. package/features/icon-picker/icon-picker.component.d.ts +3 -0
  79. package/features/modal/modal.component.d.ts +1 -1
  80. package/features/picklist/picklist.component.d.ts +6 -1
  81. package/features/table/components/table-actions-menu.component.d.ts +12 -0
  82. package/features/table/components/table-cell-content.component.d.ts +41 -0
  83. package/features/table/components/table-sort-indicator.component.d.ts +11 -0
  84. package/features/table/table.component.d.ts +28 -44
  85. package/features/table/utils/table-config.util.d.ts +3 -0
  86. package/features/table/utils/table-data.util.d.ts +10 -0
  87. package/features/table/utils/table-layout.util.d.ts +4 -0
  88. package/features/table/utils/table-truncate.pipe.d.ts +12 -0
  89. package/features/table/utils/table-visual.util.d.ts +21 -0
  90. package/features/tooltip/tooltip.component.d.ts +3 -1
  91. package/fesm2022/seniorsistemas-data-seniorx-core.mjs +3525 -1848
  92. package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
  93. package/package.json +1 -1
  94. package/public-api.d.ts +5 -2
  95. package/src/locales/en.json +194 -0
  96. package/src/locales/es-CO.json +187 -1
  97. package/src/locales/pt.json +194 -0
@@ -2766,7 +2766,7 @@ export class VisualSqlEditorComponent {
2766
2766
  .filter((item) => !!item);
2767
2767
  }
2768
2768
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VisualSqlEditorComponent, deps: [{ token: i1.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
2769
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: VisualSqlEditorComponent, isStandalone: true, selector: "sdc-visual-sql-editor", inputs: { loading: "loading", config: "config" }, outputs: { configChange: "configChange", save: "save", cancel: "cancel" }, host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "sectionsContainer", first: true, predicate: ["sectionsContainer"], descendants: true }, { propertyName: "builderSections", predicate: ["builderSection"], descendants: true }], ngImport: i0, template: "<div class=\"dynamic-view-builder\" [attr.aria-busy]=\"loading\">\n <div class=\"dynamic-view-builder__toolbar\">\n <div class=\"dynamic-view-builder__toolbar-copy\">\n <div class=\"dynamic-view-builder__title\">\n {{ config.metadata.title }}\n </div>\n <div class=\"dynamic-view-builder__subtitle\">\n {{ config.metadata.description }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__toolbar-actions\">\n <span class=\"dynamic-view-builder__toolbar-label\">\n {{ (config.translationPrefix + '.fields.layoutMode') | translate }}\n </span>\n <sdc-select-button\n [items]=\"layoutModeItems\"\n [ngModel]=\"selectedLayoutModeItems\"\n (ngModelChange)=\"onLayoutModeChange($event)\"\n ></sdc-select-button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__preview-toggle\"\n (click)=\"togglePreview()\"\n [attr.aria-pressed]=\"previewVisible\"\n [title]=\"previewToggleLabel\"\n [attr.aria-label]=\"previewToggleLabel\"\n >\n <i\n [class]=\"previewVisible ? 'fas fa-eye-slash' : 'fas fa-eye'\"\n aria-hidden=\"true\"\n ></i>\n {{ previewToggleLabel }}\n </button>\n </div>\n </div>\n\n @if (selectionModalVisible) {\n <sdc-modal\n [visible]=\"selectionModalVisible\"\n (visibleChange)=\"$event ? (selectionModalVisible = true) : closeSelectionModal()\"\n [header]=\"selectionModalTitle\"\n [width]=\"modalDimensions.selection.width\"\n [height]=\"modalDimensions.selection.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n @if (selectionModalMode === 'tables') {\n <div class=\"dynamic-view-builder__modal-inline-surface\">\n <sdc-textbox\n [label]=\"modalSearchLabel\"\n [placeholder]=\"modalSearchPlaceholder\"\n [ngModel]=\"selectionModalSearch\"\n (ngModelChange)=\"selectionModalSearch = $event\"\n width=\"100%\"\n ></sdc-textbox>\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-stage-body\"\n >\n <div\n class=\"dynamic-view-builder__selection-table\n dynamic-view-builder__selection-table--chooser\n dynamic-view-builder__selection-table--fluid\"\n >\n <div class=\"dynamic-view-builder__selection-head\">\n <div class=\"dynamic-view-builder__selection-col\">\n {{ modalNameLabel }}\n </div>\n <div class=\"dynamic-view-builder__selection-col\">\n {{ modalTypeLabel }}\n </div>\n <div class=\"dynamic-view-builder__selection-col dynamic-view-builder__selection-col--select\">\n {{ modalSelectLabel }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__selection-body\">\n @for (row of selectionModalRows; track trackById($index, row)) {\n <div\n class=\"dynamic-view-builder__selection-row\"\n [class.dynamic-view-builder__selection-row--selected]=\"row.selected\"\n [attr.role]=\"'button'\"\n [attr.tabindex]=\"row.disabled ? -1 : 0\"\n [attr.aria-pressed]=\"row.selected\"\n [attr.aria-disabled]=\"row.disabled\"\n (click)=\"toggleSelectionModalRow(row.id)\"\n (keydown)=\"onSelectableRowKeydown($event)\"\n >\n <div class=\"dynamic-view-builder__selection-cell\">\n @if (row.tableLabel) {\n <span class=\"dynamic-view-builder__selection-path\">\n @if (row.pathType === 'table') {\n @if (row.dbLabel) {\n <span class=\"dynamic-view-builder__selection-db\">{{ row.dbLabel }}</span>\n }\n @if (row.dbLabel) {\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n }\n <span class=\"dynamic-view-builder__selection-table-label\">{{ row.tableLabel }}</span>\n } @else {\n <span class=\"dynamic-view-builder__selection-table-label\">{{ row.tableLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ row.name }}</span>\n }\n </span>\n } @else {\n {{ row.name }}\n }\n </div>\n <div class=\"dynamic-view-builder__selection-cell dynamic-view-builder__selection-cell--meta\">\n <span>{{ row.meta }}</span>\n @if (row.note) {\n <span class=\"dynamic-view-builder__selection-note\">\n {{ row.note }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__selection-cell dynamic-view-builder__selection-cell--select\">\n <span\n class=\"dynamic-view-builder__selection-marker\"\n [class.dynamic-view-builder__selection-marker--selected]=\"row.selected\"\n aria-hidden=\"true\"\n >\n <i class=\"fas fa-check\"></i>\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"selectionModalPicklistItems\"\n [selectedIds]=\"selectionModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSelectionModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSelectionModal()\"\n (keydown.enter)=\"closeSelectionModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.confirmSelection') | translate\"\n (click)=\"confirmSelectionModal()\"\n (keydown.enter)=\"confirmSelectionModal()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (sourceModalVisible) {\n <sdc-modal\n [visible]=\"sourceModalVisible\"\n (visibleChange)=\"$event ? (sourceModalVisible = true) : closeSourceModal()\"\n [header]=\"sourceModalTitle\"\n [width]=\"modalDimensions.source.width\"\n [height]=\"modalDimensions.source.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__field-modal\">\n <sdc-timeline\n [items]=\"sourceModalTimelineItems\"\n [activeIndex]=\"sourceModalConfigurationStepActive ? 1 : 0\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"sourceModalTimelineAriaLabel\"\n (stepSelect)=\"onSourceModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (sourceModalSelectionStepActive) {\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"sourceModalPicklistItems\"\n [selectedIds]=\"sourceModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSourceModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__field-config-shell\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-list-shell\"\n >\n <div class=\"dynamic-view-builder__source-config-list\">\n @for (item of sourceModalConfiguredItems; track trackById($index, item)) {\n <div class=\"dynamic-view-builder__source-config-row\">\n <div class=\"dynamic-view-builder__source-config-main\">\n <div class=\"dynamic-view-builder__field-config-title\">\n <span class=\"dynamic-view-builder__selection-table-label\">{{ item.dbLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ item.tableLabel }}</span>\n </div>\n </div>\n <div class=\"dynamic-view-builder__source-config-controls\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"item.alias\"\n (ngModelChange)=\"onSourceModalAliasChange(item.table, $event)\"\n width=\"100%\"\n [maxlength]=\"24\"\n ></sdc-textbox>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSourceModal()\"\n (keydown.enter)=\"closeSourceModal()\"\n ></sdc-button>\n @if (sourceModalSelectionStepActive && sourceModalCanProceed) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.nextStep') | translate\"\n (click)=\"advanceSourceModalStep()\"\n (keydown.enter)=\"advanceSourceModalStep()\"\n ></sdc-button>\n }\n @if (sourceModalConfigurationStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!sourceModalCanProceed\"\n (click)=\"saveSourceModal()\"\n (keydown.enter)=\"saveSourceModal()\"\n ></sdc-button>\n }\n </div>\n </sdc-modal>\n }\n\n @if (joinModalVisible) {\n <sdc-modal\n [visible]=\"joinModalVisible\"\n (visibleChange)=\"$event ? (joinModalVisible = true) : closeJoinModal()\"\n [header]=\"(config.translationPrefix + '.cards.joins.title') | translate\"\n [width]=\"modalDimensions.join.width\"\n [height]=\"modalDimensions.join.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__join-modal\">\n <div class=\"dynamic-view-builder__join-modal-top\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-card\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.left') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >{{ joinSourceSummary }}</div>\n </div>\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--compact\n dynamic-view-builder__modal-card\"\n >\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.operator'\"\n [ngModel]=\"joinDraft.operator\"\n (ngModelChange)=\"joinDraft.operator = $event\"\n [options]=\"joinOperatorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n </div>\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-card\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.right') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >{{ joinTargetSummary }}</div>\n </div>\n </div>\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--fit\">\n <div\n class=\"dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__modal-card dynamic-view-builder__picklist-shell\"\n >\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.left') | translate }}\n </div>\n <sdc-picklist\n [items]=\"joinSourcePicklistItems\"\n [selectedIds]=\"joinSourceSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onJoinSourceSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n <div\n class=\"dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__modal-card dynamic-view-builder__picklist-shell\"\n >\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.right') | translate }}\n </div>\n <sdc-picklist\n [items]=\"joinTargetPicklistItems\"\n [selectedIds]=\"joinTargetSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onJoinTargetSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeJoinModal()\"\n (keydown.enter)=\"closeJoinModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveJoin\"\n (click)=\"saveJoin()\"\n (keydown.enter)=\"saveJoin()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (sortModalVisible) {\n <sdc-modal\n [visible]=\"sortModalVisible\"\n (visibleChange)=\"$event ? (sortModalVisible = true) : closeSortModal()\"\n [header]=\"sortModalTitle\"\n [width]=\"modalDimensions.sort.width\"\n [height]=\"modalDimensions.sort.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__sort-modal\">\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--full\n dynamic-view-builder__sort-direction-field\"\n >\n <div class=\"dynamic-view-builder__modal-label\">\n {{ (config.translationPrefix + '.fields.direction') | translate }}\n </div>\n <sdc-select-button\n class=\"dynamic-view-builder__sort-direction\"\n [items]=\"sortDirectionItems\"\n appearance=\"soft\"\n [ngModel]=\"selectedSortDirectionItems\"\n (ngModelChange)=\"onSortDirectionChange($event)\"\n ></sdc-select-button>\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__selection-flow dynamic-view-builder__picklist-shell\n dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"sortPicklistItems\"\n [selectedIds]=\"sortSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSortSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSortModal()\"\n (keydown.enter)=\"closeSortModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveSort\"\n (click)=\"saveSort()\"\n (keydown.enter)=\"saveSort()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (filterModalVisible) {\n <sdc-modal\n [visible]=\"filterModalVisible\"\n (visibleChange)=\"$event ? (filterModalVisible = true) : closeFilterModal()\"\n [header]=\"filterModalTitle\"\n [width]=\"modalDimensions.filter.width\"\n [height]=\"modalDimensions.filter.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__filter-modal\">\n <sdc-timeline\n [items]=\"filterModalTimelineItems\"\n [activeIndex]=\"filterModalReviewStepActive ? 2 : (filterModalConfigurationStepActive ? 1 : 0)\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"filterModalTimelineAriaLabel\"\n (stepSelect)=\"onFilterModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (filterModalSelectionStepActive) {\n <div class=\"dynamic-view-builder__filter-step\">\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-base-selector\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.modals.filter.steps.select.title') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.filters.tooltips.mode'\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-mode-row\">\n <div class=\"dynamic-view-builder__filter-mode-copy\">\n {{ (config.translationPrefix + '.modals.filter.title') | translate }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__filter-mode-selector\">\n <sdc-select-button\n [items]=\"filterModeItems\"\n appearance=\"soft\"\n [ngModel]=\"selectedFilterModeItems\"\n (ngModelChange)=\"onFilterModeChange($event[0]?.value || 'condition')\"\n ></sdc-select-button>\n </div>\n </div>\n @if (filterModalMode === 'condition') {\n <div\n class=\"dynamic-view-builder__modal-picker\n dynamic-view-builder__modal-picker--filter\n dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__selection-flow\n dynamic-view-builder__modal-stage-body\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell\"\n >\n <sdc-picklist\n [items]=\"filterModalPicklistItems\"\n [selectedIds]=\"filterModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [autoResize]=\"false\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onFilterModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-domain-intro\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.filters.domainLabel') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"filterDomainExpressionTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-grid\">\n <div class=\"dynamic-view-builder__filter-domain-item\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.domainExpression') | translate }}\n </div>\n <div class=\"dynamic-view-builder__modal-summary-value\">\n {{ filterDomainExpressionTooltip }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-item\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.connector') | translate }}\n </div>\n <div class=\"dynamic-view-builder__modal-summary-value\">\n {{ filterConnectorTooltip }}\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n @if (filterModalConfigurationStepActive) {\n <div class=\"dynamic-view-builder__filter-step\">\n <div class=\"dynamic-view-builder__filter-toolbar\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-summary--filter\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.modals.filter.steps.configure.title') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >\n {{ filterConfigurationSummaryLabel }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"goToFilterModalStep('select')\"\n >\n {{ filterBackToSelectionLabel }}\n </button>\n </div>\n @if (filterModalMode === 'condition') {\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-config-section\">\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.modals.filter.steps.configure.title') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.filters.tooltips.configure'\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--filter-controls\">\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.connector'\"\n [ngModel]=\"filterDraft.connector\"\n (ngModelChange)=\"filterDraft.connector = $event\"\n [options]=\"filterConnectorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterConnectorDisabled\"\n [infoTooltip]=\"filterConnectorTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.operator'\"\n [ngModel]=\"filterDraft.operator\"\n (ngModelChange)=\"filterDraft.operator = $event; onFilterOperatorChange()\"\n [options]=\"filterOperatorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n [disabled]=\"!filterDraft.column\"\n [infoTooltip]=\"filterOperatorTooltip\"\n ></sdc-combobox>\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.valueType'\"\n [ngModel]=\"filterDraft.valueType\"\n (ngModelChange)=\"filterDraft.valueType = $event; onFilterValueTypeChange()\"\n [options]=\"valueTypeOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterValueTypeDisabled\"\n [infoTooltip]=\"filterValueTypeTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <div class=\"dynamic-view-builder__filter-optional\">\n <sdc-checkbox\n [label]=\"config.translationPrefix + '.states.optional'\"\n [ngModel]=\"filterDraft.optional\"\n (ngModelChange)=\"filterDraft.optional = $event\"\n ></sdc-checkbox>\n <sdc-info-sign\n [tooltip]=\"filterOptionalTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n </div>\n </div>\n <div\n class=\"dynamic-view-builder__filter-config-section\n dynamic-view-builder__filter-config-section--value\"\n >\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--single\">\n @if (showFilterBooleanCombobox) {\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.value'\"\n [ngModel]=\"filterDraft.value\"\n (ngModelChange)=\"filterDraft.value = $event\"\n [options]=\"booleanValueOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n }\n @if (showFilterValueTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.value'\"\n [ngModel]=\"filterDraft.value\"\n (ngModelChange)=\"filterDraft.value = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n @if (showFilterValuesTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.values'\"\n [ngModel]=\"filterDraft.valuesText\"\n (ngModelChange)=\"filterDraft.valuesText = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n @if (showFilterBetweenInputs) {\n <div class=\"dynamic-view-builder__between dynamic-view-builder__modal-grid-column-full\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.valueStart'\"\n [ngModel]=\"filterDraft.betweenStart\"\n (ngModelChange)=\"filterDraft.betweenStart = $event\"\n width=\"100%\"\n ></sdc-textbox>\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.valueEnd'\"\n [ngModel]=\"filterDraft.betweenEnd\"\n (ngModelChange)=\"filterDraft.betweenEnd = $event\"\n width=\"100%\"\n ></sdc-textbox>\n </div>\n }\n @if (showFilterParameterTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.parameterName'\"\n [ngModel]=\"filterDraft.parameterName\"\n (ngModelChange)=\"filterDraft.parameterName = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-config-section\">\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--filter-controls\">\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.connector'\"\n [ngModel]=\"filterDraft.connector\"\n (ngModelChange)=\"filterDraft.connector = $event\"\n [options]=\"filterConnectorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterConnectorDisabled\"\n [infoTooltip]=\"filterConnectorTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <div class=\"dynamic-view-builder__filter-optional\">\n <sdc-checkbox\n [label]=\"config.translationPrefix + '.states.optional'\"\n [ngModel]=\"filterDraft.optional\"\n (ngModelChange)=\"filterDraft.optional = $event\"\n ></sdc-checkbox>\n <sdc-info-sign\n [tooltip]=\"filterOptionalTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n </div>\n </div>\n <div\n class=\"dynamic-view-builder__filter-config-section\n dynamic-view-builder__filter-config-section--domain\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.domainExpression') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"filterDomainExpressionTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-hint\">\n {{ filterDomainExpressionTooltip }}\n </div>\n <sdc-textarea\n [label]=\"''\"\n [ngModel]=\"filterDraft.domainExpression\"\n (ngModelChange)=\"filterDraft.domainExpression = $event\"\n width=\"100%\"\n [rows]=\"10\"\n ></sdc-textarea>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"dynamic-view-builder__filter-step\">\n <div class=\"dynamic-view-builder__filter-toolbar\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-summary--filter\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.modals.filter.steps.review.title') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >\n {{ filterConfigurationSummaryLabel }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"goToFilterModalStep('configure')\"\n >\n {{ filterBackToConfigurationLabel }}\n </button>\n </div>\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-review-grid\">\n @for (item of filterReviewItems; track trackById($index, item)) {\n <div\n class=\"dynamic-view-builder__filter-review-item\"\n >\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ item.label }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\"\n [class.dynamic-view-builder__modal-summary-value--path]=\"item.emphasize === 'path'\"\n [class.dynamic-view-builder__filter-review-code]=\"item.emphasize === 'code'\"\n >\n {{ item.value }}\n </div>\n </div>\n }\n </div>\n <div class=\"dynamic-view-builder__filter-review-preview\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.sqlPreview') | translate }}\n </div>\n <sdc-textarea\n [label]=\"''\"\n [ngModel]=\"filterReviewPreviewLabel\"\n width=\"100%\"\n [rows]=\"6\"\n [disabled]=\"true\"\n ></sdc-textarea>\n </div>\n </div>\n </div>\n }\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeFilterModal()\"\n (keydown.enter)=\"closeFilterModal()\"\n ></sdc-button>\n @if (filterModalSelectionStepActive) {\n <sdc-button\n [label]=\"filterModalConfigureActionLabel\"\n [disabled]=\"!filterModalCanProceed\"\n (click)=\"advanceFilterModalStep()\"\n (keydown.enter)=\"advanceFilterModalStep()\"\n ></sdc-button>\n }\n @if (filterModalConfigurationStepActive) {\n <sdc-button\n [label]=\"filterModalReviewActionLabel\"\n [disabled]=\"!filterModalCanReview\"\n (click)=\"advanceFilterModalStep()\"\n (keydown.enter)=\"advanceFilterModalStep()\"\n ></sdc-button>\n }\n @if (filterModalReviewStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveFilter\"\n (click)=\"saveFilter()\"\n (keydown.enter)=\"saveFilter()\"\n ></sdc-button>\n }\n </div>\n </sdc-modal>\n }\n\n @if (fieldModalVisible) {\n <sdc-modal\n [visible]=\"fieldModalVisible\"\n (visibleChange)=\"$event ? (fieldModalVisible = true) : closeFieldModal()\"\n [header]=\"fieldModalTitle\"\n [width]=\"modalDimensions.field.width\"\n [height]=\"modalDimensions.field.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__field-modal\">\n <sdc-timeline\n [items]=\"fieldModalTimelineItems\"\n [activeIndex]=\"fieldModalConfigurationStepActive ? 1 : 0\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"fieldModalTimelineAriaLabel\"\n (stepSelect)=\"onFieldModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (fieldModalSelectionStepActive) {\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"fieldModalPicklistItems\"\n [selectedIds]=\"fieldModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [autoResize]=\"false\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onFieldModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__field-config-shell\"\n >\n <div class=\"dynamic-view-builder__field-config-toolbar\">\n <div class=\"dynamic-view-builder__field-config-summary\">\n {{ fieldModalConfiguredItems.length }}\n {{ (config.translationPrefix + '.cards.fields.title') | translate }}\n </div>\n @if (fieldModalHasSelectableColumns) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--primary\"\n (click)=\"addAnotherFieldFromModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-list-shell\"\n >\n <div class=\"dynamic-view-builder__field-config-list\">\n @for (item of fieldModalConfiguredItems; track trackById($index, item)) {\n <div class=\"dynamic-view-builder__field-config-row\">\n <div class=\"dynamic-view-builder__field-config-main\">\n <div class=\"dynamic-view-builder__field-config-title\">\n <span class=\"dynamic-view-builder__selection-table-label\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ item.fieldLabel }}</span>\n </div>\n @if (item.functionName && !isFieldFunctionEditing(item.column)) {\n <div class=\"dynamic-view-builder__field-config-function\">\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n @if (item.functionAlias) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.functionAlias }}\n </span>\n }\n </div>\n }\n </div>\n @if (!isFieldFunctionEditing(item.column)) {\n <div class=\"dynamic-view-builder__field-config-controls\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"item.alias\"\n (ngModelChange)=\"onFieldModalAliasChange(item.column, $event)\"\n width=\"100%\"\n [maxlength]=\"24\"\n ></sdc-textbox>\n <div class=\"dynamic-view-builder__field-width\">\n <div class=\"dynamic-view-builder__modal-label-row\">\n <span class=\"dynamic-view-builder__modal-label\">\n {{ (config.translationPrefix + '.fields.width') | translate }}\n </span>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.messages.fieldWidthInfo'\"\n ></sdc-info-sign>\n </div>\n <sdc-textbox\n [label]=\"''\"\n [ngModel]=\"item.width\"\n (ngModelChange)=\"onFieldModalWidthChange(item.column, $event)\"\n width=\"100%\"\n [maxlength]=\"12\"\n placeholder=\"160\"\n ></sdc-textbox>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"startFieldFunctionEdit(item.column)\"\n >\n {{ item.functionName\n ? ((config.translationPrefix + '.actions.configureField') | translate)\n : ((config.translationPrefix + '.fields.functionName') | translate) }}\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--danger\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeFieldModalDraft(item.column)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__field-config-controls\n dynamic-view-builder__field-config-controls--function\"\n >\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.functionName'\"\n [ngModel]=\"fieldFunctionDraft.functionName\"\n (ngModelChange)=\"onFieldFunctionDraftNameChange($event)\"\n [options]=\"fieldModalFunctionOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"fieldFunctionDraft.functionAlias\"\n (ngModelChange)=\"fieldFunctionDraft.functionAlias = $event\"\n width=\"100%\"\n [maxlength]=\"24\"\n [disabled]=\"!fieldFunctionDraft.functionName\"\n ></sdc-textbox>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--danger\"\n [title]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n (click)=\"cancelFieldFunctionEdit()\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--active\"\n [title]=\"(config.translationPrefix + '.actions.save') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.save') | translate\"\n (click)=\"saveFieldFunctionEdit()\"\n >\n <i class=\"fas fa-check\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer dynamic-view-builder__modal-footer--between\">\n <div class=\"dynamic-view-builder__modal-footer-group dynamic-view-builder__modal-footer-group--start\">\n @if (fieldModalSelectionStepActive && fieldModalCanSelectAll) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--primary\"\n (click)=\"selectAllFieldModalColumns()\"\n >\n {{ (config.translationPrefix + '.actions.selectAllColumns') | translate }}\n </button>\n }\n </div>\n <div class=\"dynamic-view-builder__modal-footer-group\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeFieldModal()\"\n (keydown.enter)=\"closeFieldModal()\"\n ></sdc-button>\n @if (fieldModalSelectionStepActive && fieldModalCanProceed) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.nextStep') | translate\"\n (click)=\"advanceFieldModalStep()\"\n (keydown.enter)=\"advanceFieldModalStep()\"\n ></sdc-button>\n }\n @if (fieldModalConfigurationStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveFieldModal\"\n (click)=\"saveField()\"\n (keydown.enter)=\"saveField()\"\n ></sdc-button>\n }\n </div>\n </div>\n </sdc-modal>\n }\n\n <div\n class=\"dynamic-view-builder__workspace\"\n [class.dynamic-view-builder__workspace--stacked]=\"layoutMode === 'stacked'\"\n [class.dynamic-view-builder__workspace--split]=\"layoutMode === 'split'\"\n [class.dynamic-view-builder__workspace--preview-hidden]=\"!previewVisible\"\n >\n <div class=\"dynamic-view-builder__builder-area\">\n <div\n #sectionsContainer\n class=\"dynamic-view-builder__sections\"\n [class.dynamic-view-builder__sections--stacked]=\"layoutMode === 'stacked'\"\n [class.dynamic-view-builder__sections--split]=\"layoutMode === 'split'\"\n >\n <section\n #builderSection\n data-section-id=\"tables\"\n class=\"dynamic-view-builder__section\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.sources.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n (click)=\"openSourceModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canOpenSourceConfiguration\"\n [title]=\"(config.translationPrefix + '.actions.configureAliases') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.configureAliases') | translate\"\n (click)=\"openSourceConfigurationModal()\"\n >\n <i class=\"fas fa-cog\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sourceItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearSources()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!sourceItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n (click)=\"openSourceModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectTables') | translate }}\n </button>\n }\n @if (sourceItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (source of sourceItems; track trackById(i, source); let i = $index) {\n <div\n class=\"dynamic-view-builder__row dynamic-view-builder__row--source\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-table-group\">\n <span class=\"dynamic-view-builder__row-db\">{{ source.dbLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-table\">\n {{ source.tableLabel }}\n </span>\n </span>\n @if (source.alias) {\n <span class=\"dynamic-view-builder__row-meta\">\n Alias {{ source.alias }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeSource(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n <div class=\"dynamic-view-builder__section-row\">\n <section\n #builderSection\n data-section-id=\"joins\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--fluid\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.joins.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canConfigureJoins\"\n [title]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n (click)=\"openJoinModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !joinItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearJoins()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!canConfigureJoins) {\n <div class=\"dynamic-view-builder__info-row\">\n {{ (config.translationPrefix + '.messages.joinRequiresTwoTables') | translate }}\n </div>\n }\n @if (canConfigureJoins && !joinItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n (click)=\"openJoinModal()\"\n >\n {{ (config.translationPrefix + '.actions.addJoin') | translate }}\n </button>\n }\n @if (joinItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of joinItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.sourceTable }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.sourceField }}</span>\n </span>\n <span class=\"dynamic-view-builder__join-operator\">{{ item.operator }}</span>\n <span class=\"dynamic-view-builder__join-arrow\" aria-hidden=\"true\">\n <i class=\"fas fa-long-arrow-alt-right\"></i>\n </span>\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.targetTable }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.targetField }}</span>\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openJoinModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeJoin(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n <section\n #builderSection\n data-section-id=\"groupBy\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--compact\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-heading\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.groupBy.title') | translate }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !groupBySelectableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n (click)=\"openSelectionModal('groupBy')\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !groupByItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearGroupBy()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!groupByItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n (click)=\"openSelectionModal('groupBy')\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n @if (groupByItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of groupByItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeGroupBy(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n </div>\n\n <section\n #builderSection\n data-section-id=\"fields\"\n class=\"dynamic-view-builder__section\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-heading\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.fields.title') | translate }}\n </div>\n <sdc-info-sign\n class=\"dynamic-view-builder__hint\"\n [tooltip]=\"'Voc\u00EA pode ordenar a sequ\u00EAncia dos campos arrastando e soltando.'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !fieldSelectableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n (click)=\"openFieldModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canOpenFieldConfiguration\"\n [title]=\"(config.translationPrefix + '.actions.configureField') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.configureField') | translate\"\n (click)=\"openFieldConfigurationModal()\"\n >\n <i class=\"fas fa-cog\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !fieldItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearFields()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!fieldItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n (click)=\"openFieldModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n @if (fieldItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of fieldItems; track trackById(i, item); let i = $index) {\n @if (isFieldDropIndicatorVisible(i)) {\n <div\n class=\"dynamic-view-builder__field-drop-indicator\"\n aria-hidden=\"true\"\n ></div>\n }\n <div\n class=\"dynamic-view-builder__row dynamic-view-builder__row--draggable\"\n [class.dynamic-view-builder__row--drag-origin]=\"draggingFieldIndex === item.sourceIndex\"\n [draggable]=\"!isReadonly\"\n (dragstart)=\"onFieldDragStart(item.sourceIndex)\"\n (dragover)=\"onFieldDragOver($event, i)\"\n (drop)=\"onFieldDrop()\"\n (dragend)=\"onFieldDragEnd()\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-order\">{{ item.orderLabel }}</span>\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n @if (item.alias) {\n <span class=\"dynamic-view-builder__row-meta\">\n Alias {{ item.alias }}\n </span>\n }\n @if (item.width) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.width }}\n </span>\n }\n @if (item.functionName) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n }\n @if (item.functionAlias) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.functionAlias }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeField(item.sourceIndex)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n @if (isFieldDropIndicatorAtEndVisible()) {\n <div\n class=\"dynamic-view-builder__field-drop-indicator\"\n aria-hidden=\"true\"\n ></div>\n }\n </div>\n }\n </section>\n\n <div class=\"dynamic-view-builder__section-row\">\n <section\n #builderSection\n data-section-id=\"sorting\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--compact\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.sorting.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sortSelectableItems.length\"\n [title]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n (click)=\"openSortModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sortItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearSorting()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!sortItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n (click)=\"openSortModal()\"\n >\n {{ (config.translationPrefix + '.actions.addSort') | translate }}\n </button>\n }\n @if (sortItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of sortItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n @if (item.functionName) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n }\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.direction }}\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openSortModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeSort(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n <section\n #builderSection\n data-section-id=\"filters\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--fluid\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.filters.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !availableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n (click)=\"openFilterModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !filterItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearFilters()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!filterItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n (click)=\"openFilterModal()\"\n >\n {{ (config.translationPrefix + '.actions.addFilter') | translate }}\n </button>\n }\n @if (filterItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of filterItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n @if (!item.isDomain) {\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n <span\n class=\"dynamic-view-builder__row-chip\n dynamic-view-builder__row-chip--operator\"\n >{{ item.operatorLabel }}</span>\n } @else {\n <span\n class=\"dynamic-view-builder__row-chip\n dynamic-view-builder__row-chip--domain\"\n >{{ item.tableLabel }}</span>\n }\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--value\">\n {{ item.subtitle }}\n </span>\n @if (item.optional) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--optional\">\n {{ (config.translationPrefix + '.states.optional') | translate }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openFilterModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeFilter(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n </div>\n\n @for (arrow of flowArrows; track trackByArrow($index, arrow)) {\n <div\n class=\"dynamic-view-builder__flow-arrow\"\n [class.dynamic-view-builder__flow-arrow--right]=\"arrow.direction === 'right'\"\n [class.dynamic-view-builder__flow-arrow--down]=\"arrow.direction === 'down'\"\n [style.left.px]=\"arrow.left\"\n [style.top.px]=\"arrow.top\"\n aria-hidden=\"true\"\n >\n <i\n [class]=\"arrow.direction === 'right'\n ? 'fas fa-angle-double-right'\n : 'fas fa-angle-double-down'\"\n ></i>\n </div>\n }\n </div>\n </div>\n\n @if (previewVisible) {\n <aside class=\"dynamic-view-builder__preview-area\">\n <div\n class=\"dynamic-view-builder__preview\"\n [style.height]=\"sqlPreviewPanelHeight\"\n >\n <div class=\"dynamic-view-builder__preview-header\">\n <div class=\"dynamic-view-builder__preview-title\">SQL Preview</div>\n <div class=\"dynamic-view-builder__preview-subtitle\">\n Consulta gerada automaticamente a partir da configuracao atual.\n </div>\n </div>\n <div class=\"dynamic-view-builder__preview-body\">\n <sdc-code-editor\n [sql]=\"sqlPreview\"\n language=\"sql\"\n [readOnly]=\"true\"\n [showCopy]=\"true\"\n [height]=\"sqlPreviewHeight\"\n ></sdc-code-editor>\n </div>\n </div>\n </aside>\n }\n </div>\n</div>\n", styles: [":host{display:block}::ng-deep .sdc-loading-state{overflow:auto!important}.dynamic-view-builder{display:flex;flex-direction:column;gap:.75rem;color:#243342}.dynamic-view-builder__toolbar{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.25rem 0}.dynamic-view-builder__toolbar-copy{min-width:0}.dynamic-view-builder__title{font-size:1rem;font-weight:700;line-height:1.2;color:#243342}.dynamic-view-builder__subtitle{margin-top:.2rem;color:#70839a;font-size:.875rem;line-height:1.35}.dynamic-view-builder__toolbar-actions{display:flex;align-items:center;gap:.625rem;flex-shrink:0;flex-wrap:wrap}.dynamic-view-builder__toolbar-label{color:#70839a;font-size:.75rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__workspace{display:grid;gap:.875rem;min-width:0}.dynamic-view-builder__workspace--preview-hidden,.dynamic-view-builder__workspace--split.dynamic-view-builder__workspace--preview-hidden{grid-template-columns:1fr;grid-template-areas:\"builder\"}.dynamic-view-builder__workspace--stacked{grid-template-columns:1fr;grid-template-areas:\"preview\" \"builder\"}.dynamic-view-builder__workspace--split{grid-template-columns:minmax(0,62fr) minmax(20rem,38fr);grid-template-areas:\"builder preview\";align-items:start}.dynamic-view-builder__builder-area{grid-area:builder;display:flex;flex-direction:column;gap:.75rem;min-width:0}.dynamic-view-builder__sections{display:flex;flex-direction:column;gap:.5rem;min-width:0;position:relative}.dynamic-view-builder__section{display:flex;flex-direction:column;gap:.4rem;min-width:0;padding:.55rem .65rem;border:1px solid #dbe3ec;border-radius:.5rem;background:#fff;min-inline-size:0;max-inline-size:100%;position:relative;width:100%}.dynamic-view-builder__section-row{display:flex;flex-wrap:wrap;align-items:stretch;gap:.5rem;min-width:0}.dynamic-view-builder__section-row>.dynamic-view-builder__section{align-self:stretch}.dynamic-view-builder__section--half{flex:1 1 18rem;width:auto}.dynamic-view-builder__section--compact{flex:0 0 clamp(18rem,30%,22rem);width:auto}.dynamic-view-builder__section--fluid{flex:1 1 26rem;min-inline-size:min(100%,26rem);width:auto}.dynamic-view-builder__flow-arrow{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:1.4rem;height:1.4rem;border:1px solid #d9e3ed;border-radius:999px;background:#fff;color:#68809a;pointer-events:none;z-index:2;transform:translate(-50%,-50%)}.dynamic-view-builder__flow-arrow i{font-size:.74rem;line-height:1}.dynamic-view-builder__section-head{display:flex;justify-content:space-between;align-items:flex-start;gap:.75rem}.dynamic-view-builder__section-heading{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.dynamic-view-builder__section-label{min-width:0;color:#516173;font-size:.78rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.dynamic-view-builder__section-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;flex-wrap:wrap;flex-shrink:0}.dynamic-view-builder__hint{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;padding:0;border:0;background:transparent;color:#8ca0b6;cursor:help}.dynamic-view-builder__hint--legacy{display:none}.dynamic-view-builder__stack{display:flex;gap:.35rem;min-width:0}.dynamic-view-builder__stack--wrap{flex-direction:row;flex-wrap:wrap;align-items:flex-start}.dynamic-view-builder__row,.dynamic-view-builder__empty-row,.dynamic-view-builder__info-row{min-width:0;border:1px solid #e7edf4;border-radius:.4rem;background:#fbfcfe}.dynamic-view-builder__row{display:inline-flex;align-items:stretch;justify-content:space-between;gap:.45rem;padding:.5rem .6rem;inline-size:auto;min-inline-size:min(100%,12rem);max-inline-size:100%;flex:0 1 auto}.dynamic-view-builder__row-main{min-width:0;display:flex;align-items:center;gap:.3rem;flex-wrap:wrap;flex:1 1 auto}.dynamic-view-builder__row-label{color:#243342;font-weight:600;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-value{color:#627588;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-separator{color:#b0bcc9;flex-shrink:0}.dynamic-view-builder__row-actions{display:flex;align-items:center;justify-content:flex-end;gap:.2rem;flex-wrap:wrap;flex:0 0 auto}.dynamic-view-builder__row--source{align-items:center;min-inline-size:min(100%,16.5rem);padding-block:.45rem}.dynamic-view-builder__row--source .dynamic-view-builder__row-main{align-items:center;flex-wrap:nowrap;gap:.18rem}.dynamic-view-builder__row-table-group{display:inline-flex;align-items:center;gap:0;min-width:0;flex:0 1 auto}.dynamic-view-builder__row-db{color:#243342;font-weight:700;line-height:1.25;white-space:nowrap}.dynamic-view-builder__row-order{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;padding:.1rem .35rem;border-radius:999px;background:#eef3f8;color:#516173;font-size:.75rem;font-weight:700}.dynamic-view-builder__row-path{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:wrap}.dynamic-view-builder__row-table{color:#425466;font-weight:500;line-height:1.35}.dynamic-view-builder__row-table--accent{color:#1f8a52;font-weight:700}.dynamic-view-builder__row-dot{color:#8fa1b3;flex:0 0 auto;margin-inline:.02rem}.dynamic-view-builder__row-field{color:#1f8a52;font-weight:700;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-meta{display:inline-flex;align-items:center;padding:.12rem .4rem;border-radius:999px;background:#f0f4f8;color:#627588;font-size:.74rem;line-height:1.2}.dynamic-view-builder__join-operator{display:inline-flex;align-items:center;padding:.1rem .35rem;border-radius:999px;background:#eef3f8;color:#627588;font-size:.73rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase}.dynamic-view-builder__join-arrow{color:#9ab0c6;font-size:.85rem}.dynamic-view-builder__row--draggable{cursor:grab}.dynamic-view-builder__row--drag-origin{opacity:.6;border-color:#b8cae0;background:#f4f8fc}.dynamic-view-builder__row--draggable:active{cursor:grabbing}.dynamic-view-builder__alias-field{flex:0 1 5.4rem;min-inline-size:4.4rem;max-inline-size:5.8rem}.dynamic-view-builder__alias-field :where(.sdc-textbox__label-row){display:none}.dynamic-view-builder__action-link{padding:0;border:0;background:transparent;color:#6d7786;font:inherit;font-size:.82rem;font-weight:600;line-height:1.25;cursor:pointer;transition:color .18s ease;pointer-events:auto;position:relative;z-index:2;text-decoration:none}.dynamic-view-builder__action-link:disabled{opacity:.45;cursor:default}.dynamic-view-builder__action-link:hover:not(:disabled),.dynamic-view-builder__action-link:focus-visible:not(:disabled){color:#1b5cff}.dynamic-view-builder__action-link--primary{color:#1b5cff}.dynamic-view-builder__action-link--icon{display:inline-flex;align-items:center;justify-content:center;min-width:1.5rem;min-height:1.5rem}.dynamic-view-builder__action-link--icon i{font-size:.9rem;line-height:1}.dynamic-view-builder__preview-toggle{display:inline-flex;align-items:center;gap:.4rem;min-height:2rem;padding:0 .75rem;border:1px solid #dbe3ec;border-radius:999px;background:#f8fafc;color:#425466;font:inherit;font-size:.82rem;font-weight:600;cursor:pointer;transition:border-color .18s ease,background-color .18s ease,color .18s ease}.dynamic-view-builder__preview-toggle:focus-visible{outline:2px solid rgba(27,92,255,.18);outline-offset:2px}.dynamic-view-builder__preview-toggle:hover:not(:disabled),.dynamic-view-builder__preview-toggle:focus-visible:not(:disabled){border-color:#b9c7d6;background:#eef4fb;color:#1b5cff}.dynamic-view-builder__icon-action{display:inline-flex;align-items:center;justify-content:center;width:1.35rem;height:1.35rem;padding:0;border:0;background:transparent;color:#7b8ea2;cursor:pointer;transition:color .18s ease}.dynamic-view-builder__icon-action:focus-visible{outline:2px solid rgba(27,92,255,.18);outline-offset:2px;border-radius:999px}.dynamic-view-builder__icon-action:disabled{opacity:.45;cursor:default}.dynamic-view-builder__icon-action:hover:not(:disabled),.dynamic-view-builder__icon-action:focus-visible:not(:disabled){color:#1b5cff}.dynamic-view-builder__icon-action--active{color:#1c9b5f}.dynamic-view-builder__icon-action--danger{color:#8d9caf}.dynamic-view-builder__icon-action--danger:hover:not(:disabled),.dynamic-view-builder__icon-action--danger:focus-visible:not(:disabled){color:#d14343}.dynamic-view-builder__empty-row{width:auto;max-width:100%;padding:.45rem .55rem;text-align:left;color:#70839a;cursor:pointer;inline-size:fit-content;pointer-events:auto;position:relative;z-index:1}.dynamic-view-builder__info-row{padding:.45rem .55rem;color:#3d6ae8;line-height:1.35;inline-size:fit-content;max-inline-size:100%}.dynamic-view-builder__preview-area{grid-area:preview;min-width:0;display:flex;align-self:start}.dynamic-view-builder__preview{display:flex;flex:1 1 auto;flex-direction:column;border:1px solid #dbe3ec;border-radius:.5rem;background:#fff;overflow:hidden;min-height:0}.dynamic-view-builder__preview-header{padding:.75rem .9rem;border-bottom:1px solid #e7edf4;background:#f8fafc}.dynamic-view-builder__preview-title{color:#243342;font-weight:700;line-height:1.25}.dynamic-view-builder__preview-subtitle{margin-top:.2rem;color:#70839a;line-height:1.35}.dynamic-view-builder__preview-body{display:flex;flex:1 1 auto;min-height:0;padding:.55rem}.dynamic-view-builder__preview-body :where(sdc-code-editor){display:block;flex:1 1 auto;min-height:0;width:100%}.dynamic-view-builder__footer{display:flex;justify-content:flex-start;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-shell{display:flex;flex-direction:column;gap:.875rem;min-height:0;height:100%}.dynamic-view-builder__modal-shell--full{height:100%}.dynamic-view-builder__modal-stage{display:flex;flex-direction:column;gap:.75rem;min-height:0}.dynamic-view-builder__modal-stage-body{flex:1 1 auto;min-height:0}.dynamic-view-builder__modal-card{padding:.85rem .95rem;border:1px solid #dbe3ec;border-radius:.65rem;background:#fff;box-shadow:0 1px 2px #0f172a0a}.dynamic-view-builder__modal-card--compact{padding:.75rem .85rem}.dynamic-view-builder__modal-card--section{display:flex;flex-direction:column;gap:.875rem}.dynamic-view-builder__modal-card--soft{background:linear-gradient(180deg,#fbfdff,#f6f9fc)}.dynamic-view-builder__modal-inline-surface{display:flex;flex-direction:column;gap:.625rem;min-width:0}.dynamic-view-builder__modal-list-shell{flex:1 1 auto;min-height:0;overflow:hidden;padding:.8rem}.dynamic-view-builder__modal-card-title{color:#243342;font-size:.92rem;font-weight:700;line-height:1.25}.dynamic-view-builder__modal-card-text{margin-top:.2rem;color:#70839a;font-size:.8rem;line-height:1.35}.dynamic-view-builder__modal-panel-title{color:#425466;font-size:.78rem;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.dynamic-view-builder__modal-panel-title--section{margin-bottom:-.1rem}.dynamic-view-builder__modal-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;align-items:start;min-height:0}.dynamic-view-builder__modal-grid>*{min-width:0}.dynamic-view-builder__modal-grid--single{grid-template-columns:1fr}.dynamic-view-builder__modal-grid--filter{grid-template-columns:repeat(2,minmax(0,1fr))}.dynamic-view-builder__modal-grid--filter-controls{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem .75rem}.dynamic-view-builder__modal-grid-column-full{grid-column:1/-1}.dynamic-view-builder__modal-field,.dynamic-view-builder__modal-picker{display:flex;flex-direction:column;gap:.625rem;min-width:0;min-height:0}.dynamic-view-builder__modal-field--stretch,.dynamic-view-builder__modal-picker--stretch{height:100%}.dynamic-view-builder__modal-field--compact{gap:.5rem}.dynamic-view-builder__modal-field--full{width:100%}.dynamic-view-builder__modal-label-row{display:inline-flex;align-items:center;gap:.35rem;min-width:0}.dynamic-view-builder__modal-label{color:#425466;font-size:.875rem;font-weight:600;line-height:1.25}.dynamic-view-builder__join-modal{display:flex;flex-direction:column;gap:.875rem}.dynamic-view-builder__selection-flow{display:flex;flex-direction:column;gap:.75rem;height:100%;min-height:0}.dynamic-view-builder__filter-modal{display:flex;flex-direction:column;gap:.875rem;min-height:min(30rem,100vh - 14rem);height:100%;overflow:hidden}.dynamic-view-builder__filter-step{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0;flex:1 1 auto}.dynamic-view-builder__filter-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:.875rem;flex-wrap:wrap}.dynamic-view-builder__filter-toolbar>*{min-width:0}.dynamic-view-builder__filter-heading{display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-width:0}.dynamic-view-builder__filter-base-selector,.dynamic-view-builder__filter-domain-intro{min-width:0}.dynamic-view-builder__filter-base-selector{gap:.625rem;padding:.85rem 1rem}.dynamic-view-builder__filter-mode-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.dynamic-view-builder__filter-mode-copy{color:#70839a;font-size:.84rem;line-height:1.4}.dynamic-view-builder__filter-mode-selector{display:flex;min-width:0}.dynamic-view-builder__filter-mode-selector :where(.select-button){max-width:100%}.dynamic-view-builder__picklist-shell{flex:1 1 auto;min-height:0;overflow:hidden;display:flex;flex-direction:column}.dynamic-view-builder__picklist-shell :where(sdc-picklist){display:flex;flex:1 1 auto;height:100%;min-height:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist){display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__loading-state){display:flex;flex-direction:column;min-height:0;flex:1 1 auto}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__content){min-height:0;flex:1 1 auto;overflow:auto}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__list){margin:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__search),.dynamic-view-builder__picklist-shell :where(.sdc-picklist__selected),.dynamic-view-builder__picklist-shell :where(.sdc-picklist__footer){flex:0 0 auto}.dynamic-view-builder__filter-config-card{flex:1 1 auto;min-height:0;gap:.75rem;overflow:auto;padding:.85rem 1rem}.dynamic-view-builder__filter-panel{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0}.dynamic-view-builder__filter-context{display:flex;flex-direction:column;gap:.2rem;padding:0 .1rem;min-width:0}.dynamic-view-builder__filter-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem;min-width:0}.dynamic-view-builder__filter-summary-item{display:flex;flex-direction:column;gap:.22rem;padding:.7rem .8rem;border:1px solid #dbe3ec;border-radius:.55rem;background:#f8fafc;min-width:0}.dynamic-view-builder__sort-modal{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0;height:100%;overflow:hidden}.dynamic-view-builder__sort-direction{display:block;width:100%;max-width:18rem;min-width:0;overflow:hidden}.dynamic-view-builder__sort-direction :where(.select-button){width:100%;max-width:100%;overflow:hidden}.dynamic-view-builder__sort-direction :where(.select-button-item){min-width:0}.dynamic-view-builder__sort-modal>.dynamic-view-builder__modal-field{flex:0 0 auto}.dynamic-view-builder__sort-modal>.dynamic-view-builder__modal-picker{flex:1 1 auto;min-height:0}.dynamic-view-builder__sort-modal :where(.select-button--soft){padding:.25rem}.dynamic-view-builder__sort-modal :where(.select-button--soft .select-button-item){min-height:2rem;padding:.4rem .65rem}.dynamic-view-builder__modal-summary{display:flex;flex-direction:column;gap:.25rem;align-self:start}.dynamic-view-builder__modal-summary--filter{gap:.35rem}.dynamic-view-builder__modal-summary--compact{width:fit-content;max-width:100%}.dynamic-view-builder__modal-summary--field{min-width:min(100%,15rem)}.dynamic-view-builder__join-modal-top{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,14rem) minmax(0,1fr);gap:.875rem;align-items:stretch}.dynamic-view-builder__join-modal-top>*{height:100%}.dynamic-view-builder__join-modal-top .dynamic-view-builder__modal-summary,.dynamic-view-builder__join-modal-top .dynamic-view-builder__modal-field{align-self:stretch}.dynamic-view-builder__modal-summary-label{color:#70839a;font-size:.73rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__modal-summary-value{color:#243342;font-weight:600;line-height:1.35;word-break:break-word}.dynamic-view-builder__modal-summary-value--path{color:#1f8a52;font-family:Consolas,Courier New,monospace;font-size:.86rem;font-weight:600}.dynamic-view-builder__picker-title{color:#425466;font-weight:700;line-height:1.35}.dynamic-view-builder__picker-title--path{font-family:Consolas,Courier New,monospace;font-size:.85rem;font-weight:600}.dynamic-view-builder__modal-footer{display:flex;justify-content:flex-end;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-footer--between{justify-content:space-between;align-items:center}.dynamic-view-builder__modal-footer-group{display:inline-flex;align-items:center;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-footer-group--start{margin-right:auto}.dynamic-view-builder__filter-config-section{display:flex;flex-direction:column;gap:.625rem;min-width:0}.dynamic-view-builder__filter-config-section--value,.dynamic-view-builder__filter-config-section--domain{padding-top:.25rem;border-top:1px solid #e8edf3}.dynamic-view-builder__filter-optional{display:flex;align-items:flex-end;gap:.35rem;min-height:100%;padding-bottom:.15rem}.dynamic-view-builder__filter-config-section :where(.sdc-checkbox){min-height:34px}.dynamic-view-builder__filter-domain-grid,.dynamic-view-builder__filter-review-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}.dynamic-view-builder__filter-domain-item,.dynamic-view-builder__filter-review-item{display:flex;flex-direction:column;gap:.25rem;min-width:0;padding:.8rem .9rem;border:1px solid #e5ebf2;border-radius:.6rem;background:#f8fafc}.dynamic-view-builder__filter-domain-hint{color:#70839a;font-size:.82rem;line-height:1.45}.dynamic-view-builder__filter-review-preview{display:flex;flex-direction:column;gap:.35rem;min-width:0;padding-top:.25rem;border-top:1px solid #e8edf3}.dynamic-view-builder__filter-review-code{color:#243342;font-family:Consolas,Courier New,monospace;font-size:.84rem;line-height:1.45;white-space:pre-wrap;word-break:break-word}.dynamic-view-builder__sort-direction-field{gap:.4rem}.dynamic-view-builder__selection-table{display:flex;flex-direction:column;border:1px solid #d7dde5;background:#fff;overflow:hidden;border-radius:.5rem;min-height:0;flex:1 1 auto}.dynamic-view-builder__modal-stage-body>.dynamic-view-builder__selection-table,.dynamic-view-builder__modal-stage-body.dynamic-view-builder__picklist-shell{height:100%}.dynamic-view-builder__selection-table--chooser{min-height:0}.dynamic-view-builder__selection-head{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 5rem;gap:.75rem;padding:.875rem 1rem;border-bottom:1px solid #e4e8ef;background:#f6f8fb}.dynamic-view-builder__selection-body{flex:1 1 auto;min-height:0;max-height:22rem;overflow:auto}.dynamic-view-builder__selection-table--fluid,.dynamic-view-builder__selection-table--fluid .dynamic-view-builder__selection-body{min-height:0;max-height:none;height:100%}.dynamic-view-builder__selection-row{width:100%;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 5rem;gap:.75rem;padding:.875rem 1rem;border:0;border-bottom:1px solid #eef2f7;background:transparent;text-align:left;cursor:pointer;transition:background-color .18s ease,box-shadow .18s ease}.dynamic-view-builder__selection-row:last-child{border-bottom:0}.dynamic-view-builder__selection-row:hover{background:#f9fbff}.dynamic-view-builder__selection-row--selected{background:#eef5ff}.dynamic-view-builder__selection-row:focus-visible{outline:2px solid rgba(27,92,255,.22);outline-offset:-2px}.dynamic-view-builder__selection-col,.dynamic-view-builder__selection-cell{min-width:0;color:#425466;line-height:1.4;word-break:break-word}.dynamic-view-builder__selection-col{font-weight:700}.dynamic-view-builder__selection-cell--meta{color:#70839a}.dynamic-view-builder__selection-path{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:nowrap}.dynamic-view-builder__selection-db{color:#243342;font-weight:700}.dynamic-view-builder__selection-table-label{color:#425466;font-weight:500}.dynamic-view-builder__selection-separator{color:#9aaaba;flex:0 0 auto;margin-inline:.02rem}.dynamic-view-builder__selection-accent{color:#1f8a52;font-weight:700}.dynamic-view-builder__selection-note{display:block;margin-top:.1rem;color:#8da0b4;font-size:.74rem}.dynamic-view-builder__selection-col--select,.dynamic-view-builder__selection-cell--select{display:flex;align-items:center;justify-content:center}.dynamic-view-builder__selection-marker{display:inline-flex;align-items:center;justify-content:center;width:1.2rem;height:1.2rem;border:1px solid #c8d4e0;border-radius:.3rem;background:#fff;color:transparent}.dynamic-view-builder__selection-marker i{font-size:.72rem;line-height:1}.dynamic-view-builder__selection-marker--selected{border-color:#1b5cff;background:#1b5cff;color:#fff}.dynamic-view-builder__selection-empty{padding:1rem;color:#70839a;text-align:center;line-height:1.4}.dynamic-view-builder__modal-picker--filter,.dynamic-view-builder__modal-picker--filter .dynamic-view-builder__selection-table{min-height:100%}.dynamic-view-builder__modal-picker--filter .dynamic-view-builder__selection-body{max-height:none}.dynamic-view-builder__field-modal{display:flex;flex-direction:column;gap:1rem;min-height:0;width:100%;height:100%}.dynamic-view-builder__field-config-shell{gap:.85rem;min-height:0;height:100%}.dynamic-view-builder__field-config-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__field-config-summary{color:#516173;font-size:.8rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__field-selection-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__field-config-list,.dynamic-view-builder__source-config-list{display:flex;flex-direction:column;flex:1 1 auto;gap:.75rem;width:100%;min-height:0;overflow:auto}.dynamic-view-builder__field-config-row{display:grid;grid-template-columns:minmax(13rem,1.1fr) minmax(0,1.9fr);gap:.9rem;align-items:start;width:100%;padding:.85rem .9rem;border:1px solid #dbe3ec;border-radius:.7rem;background:#fff}.dynamic-view-builder__source-config-row{display:grid;grid-template-columns:minmax(13rem,1fr) minmax(0,1.35fr);gap:.9rem;align-items:center;width:100%;padding:.85rem .9rem;border:1px solid #dbe3ec;border-radius:.7rem;background:#fff}.dynamic-view-builder__field-config-main,.dynamic-view-builder__source-config-main{display:flex;flex-direction:column;gap:.45rem;min-width:0}.dynamic-view-builder__field-config-title{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:wrap}.dynamic-view-builder__field-config-function{display:inline-flex;align-items:center;gap:.45rem;flex-wrap:wrap}.dynamic-view-builder__field-config-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(7rem,8rem) auto auto;gap:.75rem;align-items:end;min-width:0}.dynamic-view-builder__source-config-controls{display:grid;grid-template-columns:minmax(0,1fr);gap:.75rem;align-items:end;min-width:0}.dynamic-view-builder__field-config-controls--function{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto auto}.dynamic-view-builder__field-form{display:grid;grid-template-columns:minmax(0,1fr) minmax(10rem,11rem);gap:.75rem 1rem;align-items:start}.dynamic-view-builder__field-form--balanced{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr)}.dynamic-view-builder__field-width{display:flex;flex-direction:column;gap:.35rem;min-width:0}.dynamic-view-builder__between{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.dynamic-view-builder__row-chip{display:inline-flex;align-items:center;padding:.14rem .45rem;border-radius:999px;font-size:.74rem;font-weight:600;line-height:1.2}.dynamic-view-builder__row-chip--operator{background:#eef4fb;color:#1b5cff}.dynamic-view-builder__row-chip--value{background:#f4f7fa;color:#5d7084}.dynamic-view-builder__row-chip--optional{background:#f2f7f3;color:#1f8a52}.dynamic-view-builder__row-chip--domain{background:#eef4fb;color:#425466}.dynamic-view-builder__field-drop-indicator{display:inline-flex;align-self:stretch;width:.2rem;min-height:2.2rem;border-radius:999px;background:#1b5cff;box-shadow:0 0 0 3px #1b5cff24;flex:0 0 auto}@media (max-width: 1120px){.dynamic-view-builder__workspace--split{grid-template-columns:1fr;grid-template-areas:\"builder\" \"preview\"}.dynamic-view-builder__workspace--split.dynamic-view-builder__workspace--preview-hidden{justify-items:stretch}.dynamic-view-builder__sections--split{padding-right:0}}@media (max-width: 900px){.dynamic-view-builder__field-form,.dynamic-view-builder__field-form--balanced,.dynamic-view-builder__field-config-toolbar,.dynamic-view-builder__field-config-row,.dynamic-view-builder__source-config-row,.dynamic-view-builder__field-config-controls,.dynamic-view-builder__source-config-controls,.dynamic-view-builder__field-config-controls--function{grid-template-columns:1fr}.dynamic-view-builder__section-row{flex-direction:column}.dynamic-view-builder__section--half,.dynamic-view-builder__section--compact,.dynamic-view-builder__section--fluid{width:100%}.dynamic-view-builder__toolbar,.dynamic-view-builder__section-head,.dynamic-view-builder__row,.dynamic-view-builder__footer,.dynamic-view-builder__modal-footer,.dynamic-view-builder__filter-toolbar,.dynamic-view-builder__field-selection-toolbar{flex-direction:column;align-items:stretch}.dynamic-view-builder__toolbar-actions,.dynamic-view-builder__section-actions,.dynamic-view-builder__row-actions{justify-content:flex-start}.dynamic-view-builder__alias-field{min-inline-size:6rem;max-inline-size:100%}.dynamic-view-builder__modal-grid,.dynamic-view-builder__modal-grid--filter,.dynamic-view-builder__modal-grid--filter-controls,.dynamic-view-builder__filter-modal,.dynamic-view-builder__filter-summary,.dynamic-view-builder__filter-domain-grid,.dynamic-view-builder__filter-review-grid,.dynamic-view-builder__between,.dynamic-view-builder__join-modal-top{grid-template-columns:1fr}.dynamic-view-builder__row{min-inline-size:100%}}:host ::ng-deep .sdc-modal__content{display:flex;flex-direction:column;min-height:0;overflow:hidden}:host ::ng-deep .sdc-modal__content>.dynamic-view-builder__modal-shell{flex:1 1 auto;min-height:0}@media (max-width: 768px){.dynamic-view-builder__selection-head,.dynamic-view-builder__selection-row{grid-template-columns:1fr}.dynamic-view-builder__selection-col--select,.dynamic-view-builder__selection-cell--select{justify-content:flex-start}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["id", "label", "ariaLabel", "disabled", "width", "priority", "size", "type", "icon", "rightIcon", "auxiliary", "caret", "tooltip", "animation", "slide", "styleClass", "badge", "menuOptions", "menuContext", "model"], outputs: ["clicked"] }, { kind: "component", type: CheckboxComponent, selector: "sdc-checkbox", inputs: ["label", "disabled", "commonCheckbox", "labelPosition", "size", "checked"], outputs: ["checkedChange"] }, { kind: "component", type: CodeEditorComponent, selector: "sdc-code-editor", inputs: ["sql", "height", "width", "showCopy", "customHeaderItems", "activeHeaderKey", "readOnly", "language", "schema"], outputs: ["headerSelect", "onCopy", "languageChange", "domainFilterClick"] }, { kind: "component", type: ComboboxComponent, selector: "sdc-combobox", inputs: ["multiple", "appendTo", "zIndex", "options", "overrideChipMessage", "maxSelectedLabels", "showClear", "iconSelector", "showIconClass", "infoTooltip", "infoTooltipPosition", "infoTooltipEvent"], outputs: ["onSelectedItem"] }, { kind: "component", type: InfoSignComponent, selector: "sdc-info-sign", inputs: ["label", "labelParams", "tooltip", "tooltipParams", "iconClass", "iconAriaLabel", "tooltipPosition", "tooltipEvent", "inline"] }, { kind: "component", type: ModalComponent, selector: "sdc-modal", inputs: ["footerButtons", "header", "height", "maximizable", "maximize", "resizable", "responsive", "width", "zIndex", "closable", "styleClass", "appendToBody", "visible"], outputs: ["hidden", "visibleChange"] }, { kind: "component", type: PicklistComponent, selector: "sdc-picklist", inputs: ["items", "selectedIds", "idKey", "titleKey", "subtitleKey", "iconClass", "selectionIconClass", "placeholder", "emptyTitle", "emptyText", "resultsCounterSingularLabel", "resultsCounterPluralLabel", "filterFields", "first", "rows", "rowsPerPageOptions", "maxVisibleSelectedItems", "showPaginator", "showRowsPerPageOptions", "showSelectionCounter", "showResultsCounter", "showItemIcon", "autoResize", "autoResizeMinRows", "autoResizeMaxRows", "autoResizeItemHeight", "autoResizeViewportOffset", "loading"], outputs: ["pageChange", "selectedIdsChange"] }, { kind: "component", type: SelectButtonComponent, selector: "sdc-select-button", inputs: ["items", "multiple", "compareWith"], outputs: ["itemSelected", "itemClicked"] }, { kind: "component", type: TextareaComponent, selector: "sdc-textarea", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "rows", "autoResize"] }, { kind: "component", type: TextboxComponent, selector: "sdc-textbox", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent"] }, { kind: "component", type: TimelineComponent, selector: "sdc-timeline", inputs: ["items", "activeIndex", "orientation", "interactive", "responsive", "showDescriptions", "ariaLabel", "ariaLabelParams"], outputs: ["stepSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2769
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: VisualSqlEditorComponent, isStandalone: true, selector: "sdc-visual-sql-editor", inputs: { loading: "loading", config: "config" }, outputs: { configChange: "configChange", save: "save", cancel: "cancel" }, host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "sectionsContainer", first: true, predicate: ["sectionsContainer"], descendants: true }, { propertyName: "builderSections", predicate: ["builderSection"], descendants: true }], ngImport: i0, template: "<div class=\"dynamic-view-builder\" [attr.aria-busy]=\"loading\">\n <div class=\"dynamic-view-builder__toolbar\">\n <div class=\"dynamic-view-builder__toolbar-copy\">\n <div class=\"dynamic-view-builder__title\">\n {{ config.metadata.title }}\n </div>\n <div class=\"dynamic-view-builder__subtitle\">\n {{ config.metadata.description }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__toolbar-actions\">\n <span class=\"dynamic-view-builder__toolbar-label\">\n {{ (config.translationPrefix + '.fields.layoutMode') | translate }}\n </span>\n <sdc-select-button\n [items]=\"layoutModeItems\"\n [ngModel]=\"selectedLayoutModeItems\"\n (ngModelChange)=\"onLayoutModeChange($event)\"\n ></sdc-select-button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__preview-toggle\"\n (click)=\"togglePreview()\"\n [attr.aria-pressed]=\"previewVisible\"\n [title]=\"previewToggleLabel\"\n [attr.aria-label]=\"previewToggleLabel\"\n >\n <i\n [class]=\"previewVisible ? 'fas fa-eye-slash' : 'fas fa-eye'\"\n aria-hidden=\"true\"\n ></i>\n {{ previewToggleLabel }}\n </button>\n </div>\n </div>\n\n @if (selectionModalVisible) {\n <sdc-modal\n [visible]=\"selectionModalVisible\"\n (visibleChange)=\"$event ? (selectionModalVisible = true) : closeSelectionModal()\"\n [header]=\"selectionModalTitle\"\n [width]=\"modalDimensions.selection.width\"\n [height]=\"modalDimensions.selection.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n @if (selectionModalMode === 'tables') {\n <div class=\"dynamic-view-builder__modal-inline-surface\">\n <sdc-textbox\n [label]=\"modalSearchLabel\"\n [placeholder]=\"modalSearchPlaceholder\"\n [ngModel]=\"selectionModalSearch\"\n (ngModelChange)=\"selectionModalSearch = $event\"\n width=\"100%\"\n ></sdc-textbox>\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-stage-body\"\n >\n <div\n class=\"dynamic-view-builder__selection-table\n dynamic-view-builder__selection-table--chooser\n dynamic-view-builder__selection-table--fluid\"\n >\n <div class=\"dynamic-view-builder__selection-head\">\n <div class=\"dynamic-view-builder__selection-col\">\n {{ modalNameLabel }}\n </div>\n <div class=\"dynamic-view-builder__selection-col\">\n {{ modalTypeLabel }}\n </div>\n <div class=\"dynamic-view-builder__selection-col dynamic-view-builder__selection-col--select\">\n {{ modalSelectLabel }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__selection-body\">\n @for (row of selectionModalRows; track trackById($index, row)) {\n <div\n class=\"dynamic-view-builder__selection-row\"\n [class.dynamic-view-builder__selection-row--selected]=\"row.selected\"\n [attr.role]=\"'button'\"\n [attr.tabindex]=\"row.disabled ? -1 : 0\"\n [attr.aria-pressed]=\"row.selected\"\n [attr.aria-disabled]=\"row.disabled\"\n (click)=\"toggleSelectionModalRow(row.id)\"\n (keydown)=\"onSelectableRowKeydown($event)\"\n >\n <div class=\"dynamic-view-builder__selection-cell\">\n @if (row.tableLabel) {\n <span class=\"dynamic-view-builder__selection-path\">\n @if (row.pathType === 'table') {\n @if (row.dbLabel) {\n <span class=\"dynamic-view-builder__selection-db\">{{ row.dbLabel }}</span>\n }\n @if (row.dbLabel) {\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n }\n <span class=\"dynamic-view-builder__selection-table-label\">{{ row.tableLabel }}</span>\n } @else {\n <span class=\"dynamic-view-builder__selection-table-label\">{{ row.tableLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ row.name }}</span>\n }\n </span>\n } @else {\n {{ row.name }}\n }\n </div>\n <div class=\"dynamic-view-builder__selection-cell dynamic-view-builder__selection-cell--meta\">\n <span>{{ row.meta }}</span>\n @if (row.note) {\n <span class=\"dynamic-view-builder__selection-note\">\n {{ row.note }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__selection-cell dynamic-view-builder__selection-cell--select\">\n <span\n class=\"dynamic-view-builder__selection-marker\"\n [class.dynamic-view-builder__selection-marker--selected]=\"row.selected\"\n aria-hidden=\"true\"\n >\n <i class=\"fas fa-check\"></i>\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"selectionModalPicklistItems\"\n [selectedIds]=\"selectionModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSelectionModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSelectionModal()\"\n (keydown.enter)=\"closeSelectionModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.confirmSelection') | translate\"\n (click)=\"confirmSelectionModal()\"\n (keydown.enter)=\"confirmSelectionModal()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (sourceModalVisible) {\n <sdc-modal\n [visible]=\"sourceModalVisible\"\n (visibleChange)=\"$event ? (sourceModalVisible = true) : closeSourceModal()\"\n [header]=\"sourceModalTitle\"\n [width]=\"modalDimensions.source.width\"\n [height]=\"modalDimensions.source.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__field-modal\">\n <sdc-timeline\n [items]=\"sourceModalTimelineItems\"\n [activeIndex]=\"sourceModalConfigurationStepActive ? 1 : 0\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"sourceModalTimelineAriaLabel\"\n (stepSelect)=\"onSourceModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (sourceModalSelectionStepActive) {\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"sourceModalPicklistItems\"\n [selectedIds]=\"sourceModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSourceModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__field-config-shell\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-list-shell\"\n >\n <div class=\"dynamic-view-builder__source-config-list\">\n @for (item of sourceModalConfiguredItems; track trackById($index, item)) {\n <div class=\"dynamic-view-builder__source-config-row\">\n <div class=\"dynamic-view-builder__source-config-main\">\n <div class=\"dynamic-view-builder__field-config-title\">\n <span class=\"dynamic-view-builder__selection-table-label\">{{ item.dbLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ item.tableLabel }}</span>\n </div>\n </div>\n <div class=\"dynamic-view-builder__source-config-controls\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"item.alias\"\n (ngModelChange)=\"onSourceModalAliasChange(item.table, $event)\"\n width=\"100%\"\n [maxlength]=\"24\"\n ></sdc-textbox>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSourceModal()\"\n (keydown.enter)=\"closeSourceModal()\"\n ></sdc-button>\n @if (sourceModalSelectionStepActive && sourceModalCanProceed) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.nextStep') | translate\"\n (click)=\"advanceSourceModalStep()\"\n (keydown.enter)=\"advanceSourceModalStep()\"\n ></sdc-button>\n }\n @if (sourceModalConfigurationStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!sourceModalCanProceed\"\n (click)=\"saveSourceModal()\"\n (keydown.enter)=\"saveSourceModal()\"\n ></sdc-button>\n }\n </div>\n </sdc-modal>\n }\n\n @if (joinModalVisible) {\n <sdc-modal\n [visible]=\"joinModalVisible\"\n (visibleChange)=\"$event ? (joinModalVisible = true) : closeJoinModal()\"\n [header]=\"(config.translationPrefix + '.cards.joins.title') | translate\"\n [width]=\"modalDimensions.join.width\"\n [height]=\"modalDimensions.join.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__join-modal\">\n <div class=\"dynamic-view-builder__join-modal-top\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-card\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.left') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >{{ joinSourceSummary }}</div>\n </div>\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--compact\n dynamic-view-builder__modal-card\"\n >\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.operator'\"\n [ngModel]=\"joinDraft.operator\"\n (ngModelChange)=\"joinDraft.operator = $event\"\n [options]=\"joinOperatorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n </div>\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-card\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.right') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >{{ joinTargetSummary }}</div>\n </div>\n </div>\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--fit\">\n <div\n class=\"dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__modal-card dynamic-view-builder__picklist-shell\"\n >\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.left') | translate }}\n </div>\n <sdc-picklist\n [items]=\"joinSourcePicklistItems\"\n [selectedIds]=\"joinSourceSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onJoinSourceSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n <div\n class=\"dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__modal-card dynamic-view-builder__picklist-shell\"\n >\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.right') | translate }}\n </div>\n <sdc-picklist\n [items]=\"joinTargetPicklistItems\"\n [selectedIds]=\"joinTargetSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onJoinTargetSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeJoinModal()\"\n (keydown.enter)=\"closeJoinModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveJoin\"\n (click)=\"saveJoin()\"\n (keydown.enter)=\"saveJoin()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (sortModalVisible) {\n <sdc-modal\n [visible]=\"sortModalVisible\"\n (visibleChange)=\"$event ? (sortModalVisible = true) : closeSortModal()\"\n [header]=\"sortModalTitle\"\n [width]=\"modalDimensions.sort.width\"\n [height]=\"modalDimensions.sort.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__sort-modal\">\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--full\n dynamic-view-builder__sort-direction-field\"\n >\n <div class=\"dynamic-view-builder__modal-label\">\n {{ (config.translationPrefix + '.fields.direction') | translate }}\n </div>\n <sdc-select-button\n class=\"dynamic-view-builder__sort-direction\"\n [items]=\"sortDirectionItems\"\n appearance=\"soft\"\n [ngModel]=\"selectedSortDirectionItems\"\n (ngModelChange)=\"onSortDirectionChange($event)\"\n ></sdc-select-button>\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-picker dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__selection-flow dynamic-view-builder__picklist-shell\n dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"sortPicklistItems\"\n [selectedIds]=\"sortSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [autoResize]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onSortSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeSortModal()\"\n (keydown.enter)=\"closeSortModal()\"\n ></sdc-button>\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveSort\"\n (click)=\"saveSort()\"\n (keydown.enter)=\"saveSort()\"\n ></sdc-button>\n </div>\n </sdc-modal>\n }\n\n @if (filterModalVisible) {\n <sdc-modal\n [visible]=\"filterModalVisible\"\n (visibleChange)=\"$event ? (filterModalVisible = true) : closeFilterModal()\"\n [header]=\"filterModalTitle\"\n [width]=\"modalDimensions.filter.width\"\n [height]=\"modalDimensions.filter.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__filter-modal\">\n <sdc-timeline\n [items]=\"filterModalTimelineItems\"\n [activeIndex]=\"filterModalReviewStepActive ? 2 : (filterModalConfigurationStepActive ? 1 : 0)\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"filterModalTimelineAriaLabel\"\n (stepSelect)=\"onFilterModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (filterModalSelectionStepActive) {\n <div class=\"dynamic-view-builder__filter-step\">\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-base-selector\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.modals.filter.steps.select.title') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.filters.tooltips.mode'\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-mode-row\">\n <div class=\"dynamic-view-builder__filter-mode-copy\">\n {{ (config.translationPrefix + '.modals.filter.title') | translate }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__filter-mode-selector\">\n <sdc-select-button\n [items]=\"filterModeItems\"\n appearance=\"soft\"\n [ngModel]=\"selectedFilterModeItems\"\n (ngModelChange)=\"onFilterModeChange($event[0]?.value || 'condition')\"\n ></sdc-select-button>\n </div>\n </div>\n @if (filterModalMode === 'condition') {\n <div\n class=\"dynamic-view-builder__modal-picker\n dynamic-view-builder__modal-picker--filter\n dynamic-view-builder__modal-picker--stretch\n dynamic-view-builder__selection-flow\n dynamic-view-builder__modal-stage-body\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell\"\n >\n <sdc-picklist\n [items]=\"filterModalPicklistItems\"\n [selectedIds]=\"filterModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [autoResize]=\"false\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [maxVisibleSelectedItems]=\"1\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onFilterModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-domain-intro\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.filters.domainLabel') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"filterDomainExpressionTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-grid\">\n <div class=\"dynamic-view-builder__filter-domain-item\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.domainExpression') | translate }}\n </div>\n <div class=\"dynamic-view-builder__modal-summary-value\">\n {{ filterDomainExpressionTooltip }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-item\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.connector') | translate }}\n </div>\n <div class=\"dynamic-view-builder__modal-summary-value\">\n {{ filterConnectorTooltip }}\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n } @else {\n @if (filterModalConfigurationStepActive) {\n <div class=\"dynamic-view-builder__filter-step\">\n <div class=\"dynamic-view-builder__filter-toolbar\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-summary--filter\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.modals.filter.steps.configure.title') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >\n {{ filterConfigurationSummaryLabel }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"goToFilterModalStep('select')\"\n >\n {{ filterBackToSelectionLabel }}\n </button>\n </div>\n @if (filterModalMode === 'condition') {\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-config-section\">\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.modals.filter.steps.configure.title') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.filters.tooltips.configure'\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--filter-controls\">\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.connector'\"\n [ngModel]=\"filterDraft.connector\"\n (ngModelChange)=\"filterDraft.connector = $event\"\n [options]=\"filterConnectorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterConnectorDisabled\"\n [infoTooltip]=\"filterConnectorTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.operator'\"\n [ngModel]=\"filterDraft.operator\"\n (ngModelChange)=\"filterDraft.operator = $event; onFilterOperatorChange()\"\n [options]=\"filterOperatorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n [disabled]=\"!filterDraft.column\"\n [infoTooltip]=\"filterOperatorTooltip\"\n ></sdc-combobox>\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.valueType'\"\n [ngModel]=\"filterDraft.valueType\"\n (ngModelChange)=\"filterDraft.valueType = $event; onFilterValueTypeChange()\"\n [options]=\"valueTypeOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterValueTypeDisabled\"\n [infoTooltip]=\"filterValueTypeTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <div class=\"dynamic-view-builder__filter-optional\">\n <sdc-checkbox\n [label]=\"config.translationPrefix + '.states.optional'\"\n [ngModel]=\"filterDraft.optional\"\n (ngModelChange)=\"filterDraft.optional = $event\"\n ></sdc-checkbox>\n <sdc-info-sign\n [tooltip]=\"filterOptionalTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n </div>\n </div>\n <div\n class=\"dynamic-view-builder__filter-config-section\n dynamic-view-builder__filter-config-section--value\"\n >\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--single\">\n @if (showFilterBooleanCombobox) {\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.value'\"\n [ngModel]=\"filterDraft.value\"\n (ngModelChange)=\"filterDraft.value = $event\"\n [options]=\"booleanValueOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n }\n @if (showFilterValueTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.value'\"\n [ngModel]=\"filterDraft.value\"\n (ngModelChange)=\"filterDraft.value = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n @if (showFilterValuesTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.values'\"\n [ngModel]=\"filterDraft.valuesText\"\n (ngModelChange)=\"filterDraft.valuesText = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n @if (showFilterBetweenInputs) {\n <div class=\"dynamic-view-builder__between dynamic-view-builder__modal-grid-column-full\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.valueStart'\"\n [ngModel]=\"filterDraft.betweenStart\"\n (ngModelChange)=\"filterDraft.betweenStart = $event\"\n width=\"100%\"\n ></sdc-textbox>\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.valueEnd'\"\n [ngModel]=\"filterDraft.betweenEnd\"\n (ngModelChange)=\"filterDraft.betweenEnd = $event\"\n width=\"100%\"\n ></sdc-textbox>\n </div>\n }\n @if (showFilterParameterTextbox) {\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.parameterName'\"\n [ngModel]=\"filterDraft.parameterName\"\n (ngModelChange)=\"filterDraft.parameterName = $event\"\n width=\"100%\"\n ></sdc-textbox>\n }\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-config-section\">\n <div class=\"dynamic-view-builder__modal-grid dynamic-view-builder__modal-grid--filter-controls\">\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.connector'\"\n [ngModel]=\"filterDraft.connector\"\n (ngModelChange)=\"filterDraft.connector = $event\"\n [options]=\"filterConnectorOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n [disabled]=\"filterConnectorDisabled\"\n [infoTooltip]=\"filterConnectorTooltip\"\n width=\"100%\"\n ></sdc-combobox>\n <div class=\"dynamic-view-builder__filter-optional\">\n <sdc-checkbox\n [label]=\"config.translationPrefix + '.states.optional'\"\n [ngModel]=\"filterDraft.optional\"\n (ngModelChange)=\"filterDraft.optional = $event\"\n ></sdc-checkbox>\n <sdc-info-sign\n [tooltip]=\"filterOptionalTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n </div>\n </div>\n <div\n class=\"dynamic-view-builder__filter-config-section\n dynamic-view-builder__filter-config-section--domain\"\n >\n <div class=\"dynamic-view-builder__filter-heading\">\n <div class=\"dynamic-view-builder__modal-panel-title\">\n {{ (config.translationPrefix + '.fields.domainExpression') | translate }}\n </div>\n <sdc-info-sign\n [tooltip]=\"filterDomainExpressionTooltip\"\n [tooltipPosition]=\"'left'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__filter-domain-hint\">\n {{ filterDomainExpressionTooltip }}\n </div>\n <sdc-textarea\n [label]=\"''\"\n [ngModel]=\"filterDraft.domainExpression\"\n (ngModelChange)=\"filterDraft.domainExpression = $event\"\n width=\"100%\"\n [rows]=\"10\"\n ></sdc-textarea>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"dynamic-view-builder__filter-step\">\n <div class=\"dynamic-view-builder__filter-toolbar\">\n <div class=\"dynamic-view-builder__modal-summary dynamic-view-builder__modal-summary--filter\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.modals.filter.steps.review.title') | translate }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\n dynamic-view-builder__modal-summary-value--path\"\n >\n {{ filterConfigurationSummaryLabel }}\n </div>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"goToFilterModalStep('configure')\"\n >\n {{ filterBackToConfigurationLabel }}\n </button>\n </div>\n <div\n class=\"dynamic-view-builder__modal-field\n dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__modal-card\n dynamic-view-builder__modal-card--section\n dynamic-view-builder__filter-config-card\"\n >\n <div class=\"dynamic-view-builder__filter-review-grid\">\n @for (item of filterReviewItems; track trackById($index, item)) {\n <div\n class=\"dynamic-view-builder__filter-review-item\"\n >\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ item.label }}\n </div>\n <div\n class=\"dynamic-view-builder__modal-summary-value\"\n [class.dynamic-view-builder__modal-summary-value--path]=\"item.emphasize === 'path'\"\n [class.dynamic-view-builder__filter-review-code]=\"item.emphasize === 'code'\"\n >\n {{ item.value }}\n </div>\n </div>\n }\n </div>\n <div class=\"dynamic-view-builder__filter-review-preview\">\n <div class=\"dynamic-view-builder__modal-summary-label\">\n {{ (config.translationPrefix + '.fields.sqlPreview') | translate }}\n </div>\n <sdc-textarea\n [label]=\"''\"\n [ngModel]=\"filterReviewPreviewLabel\"\n width=\"100%\"\n [rows]=\"6\"\n [disabled]=\"true\"\n ></sdc-textarea>\n </div>\n </div>\n </div>\n }\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeFilterModal()\"\n (keydown.enter)=\"closeFilterModal()\"\n ></sdc-button>\n @if (filterModalSelectionStepActive) {\n <sdc-button\n [label]=\"filterModalConfigureActionLabel\"\n [disabled]=\"!filterModalCanProceed\"\n (click)=\"advanceFilterModalStep()\"\n (keydown.enter)=\"advanceFilterModalStep()\"\n ></sdc-button>\n }\n @if (filterModalConfigurationStepActive) {\n <sdc-button\n [label]=\"filterModalReviewActionLabel\"\n [disabled]=\"!filterModalCanReview\"\n (click)=\"advanceFilterModalStep()\"\n (keydown.enter)=\"advanceFilterModalStep()\"\n ></sdc-button>\n }\n @if (filterModalReviewStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveFilter\"\n (click)=\"saveFilter()\"\n (keydown.enter)=\"saveFilter()\"\n ></sdc-button>\n }\n </div>\n </sdc-modal>\n }\n\n @if (fieldModalVisible) {\n <sdc-modal\n [visible]=\"fieldModalVisible\"\n (visibleChange)=\"$event ? (fieldModalVisible = true) : closeFieldModal()\"\n [header]=\"fieldModalTitle\"\n [width]=\"modalDimensions.field.width\"\n [height]=\"modalDimensions.field.height\"\n [maximizable]=\"false\"\n [footerButtons]=\"[]\"\n >\n <div class=\"dynamic-view-builder__modal-shell dynamic-view-builder__field-modal\">\n <sdc-timeline\n [items]=\"fieldModalTimelineItems\"\n [activeIndex]=\"fieldModalConfigurationStepActive ? 1 : 0\"\n [interactive]=\"true\"\n [showDescriptions]=\"false\"\n [ariaLabel]=\"fieldModalTimelineAriaLabel\"\n (stepSelect)=\"onFieldModalTimelineStepSelect($event)\"\n ></sdc-timeline>\n @if (fieldModalSelectionStepActive) {\n <div\n class=\"dynamic-view-builder__modal-shell dynamic-view-builder__modal-shell--full\n dynamic-view-builder__selection-flow dynamic-view-builder__modal-stage\"\n >\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__picklist-shell dynamic-view-builder__modal-stage-body\"\n >\n <sdc-picklist\n [items]=\"fieldModalPicklistItems\"\n [selectedIds]=\"fieldModalSelectedPicklistIds\"\n idKey=\"id\"\n titleKey=\"title\"\n titlePrefixKey=\"titlePrefix\"\n titleSuffixKey=\"titleSuffix\"\n titlePrefixColorKey=\"titlePrefixColor\"\n titleSuffixColorKey=\"titleSuffixColor\"\n badgeKey=\"badge\"\n badgeColorKey=\"badgeColor\"\n [autoResize]=\"false\"\n [showPaginator]=\"false\"\n [showItemIcon]=\"false\"\n [showSelectionCounter]=\"false\"\n [placeholder]=\"config.translationPrefix + '.modals.searchPlaceholder'\"\n (selectedIdsChange)=\"onFieldModalSelectedIdsChange($event)\"\n ></sdc-picklist>\n </div>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__modal-field dynamic-view-builder__modal-field--stretch\n dynamic-view-builder__field-config-shell\"\n >\n <div class=\"dynamic-view-builder__field-config-toolbar\">\n <div class=\"dynamic-view-builder__field-config-summary\">\n {{ fieldModalConfiguredItems.length }}\n {{ (config.translationPrefix + '.cards.fields.title') | translate }}\n </div>\n @if (fieldModalHasSelectableColumns) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--primary\"\n (click)=\"addAnotherFieldFromModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n </div>\n <div\n class=\"dynamic-view-builder__modal-card dynamic-view-builder__modal-card--section\n dynamic-view-builder__modal-list-shell\"\n >\n <div class=\"dynamic-view-builder__field-config-list\">\n @for (item of fieldModalConfiguredItems; track trackById($index, item)) {\n <div class=\"dynamic-view-builder__field-config-row\">\n <div class=\"dynamic-view-builder__field-config-main\">\n <div class=\"dynamic-view-builder__field-config-title\">\n <span class=\"dynamic-view-builder__selection-table-label\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__selection-separator\">.</span>\n <span class=\"dynamic-view-builder__selection-accent\">{{ item.fieldLabel }}</span>\n </div>\n @if (item.functionName && !isFieldFunctionEditing(item.column)) {\n <div class=\"dynamic-view-builder__field-config-function\">\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n @if (item.functionAlias) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.functionAlias }}\n </span>\n }\n </div>\n }\n </div>\n @if (!isFieldFunctionEditing(item.column)) {\n <div class=\"dynamic-view-builder__field-config-controls\">\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"item.alias\"\n (ngModelChange)=\"onFieldModalAliasChange(item.column, $event)\"\n width=\"100%\"\n [maxlength]=\"24\"\n ></sdc-textbox>\n <div class=\"dynamic-view-builder__field-width\">\n <div class=\"dynamic-view-builder__modal-label-row\">\n <span class=\"dynamic-view-builder__modal-label\">\n {{ (config.translationPrefix + '.fields.width') | translate }}\n </span>\n <sdc-info-sign\n [tooltip]=\"config.translationPrefix + '.messages.fieldWidthInfo'\"\n ></sdc-info-sign>\n </div>\n <sdc-textbox\n [label]=\"''\"\n [ngModel]=\"item.width\"\n (ngModelChange)=\"onFieldModalWidthChange(item.column, $event)\"\n width=\"100%\"\n [maxlength]=\"12\"\n placeholder=\"160\"\n ></sdc-textbox>\n </div>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\"\n (click)=\"startFieldFunctionEdit(item.column)\"\n >\n {{ item.functionName\n ? ((config.translationPrefix + '.actions.configureField') | translate)\n : ((config.translationPrefix + '.fields.functionName') | translate) }}\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--danger\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeFieldModalDraft(item.column)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n } @else {\n <div\n class=\"dynamic-view-builder__field-config-controls\n dynamic-view-builder__field-config-controls--function\"\n >\n <sdc-combobox\n [label]=\"config.translationPrefix + '.fields.functionName'\"\n [ngModel]=\"fieldFunctionDraft.functionName\"\n (ngModelChange)=\"onFieldFunctionDraftNameChange($event)\"\n [options]=\"fieldModalFunctionOptions\"\n [appendTo]=\"overlayAppendTarget\"\n [zIndex]=\"overlayZIndex\"\n width=\"100%\"\n ></sdc-combobox>\n <sdc-textbox\n [label]=\"config.translationPrefix + '.fields.alias'\"\n [ngModel]=\"fieldFunctionDraft.functionAlias\"\n (ngModelChange)=\"fieldFunctionDraft.functionAlias = $event\"\n width=\"100%\"\n [maxlength]=\"24\"\n [disabled]=\"!fieldFunctionDraft.functionName\"\n ></sdc-textbox>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--danger\"\n [title]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n (click)=\"cancelFieldFunctionEdit()\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\n dynamic-view-builder__icon-action--active\"\n [title]=\"(config.translationPrefix + '.actions.save') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.save') | translate\"\n (click)=\"saveFieldFunctionEdit()\"\n >\n <i class=\"fas fa-check\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n <div footer class=\"dynamic-view-builder__modal-footer dynamic-view-builder__modal-footer--between\">\n <div class=\"dynamic-view-builder__modal-footer-group dynamic-view-builder__modal-footer-group--start\">\n @if (fieldModalSelectionStepActive && fieldModalCanSelectAll) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--primary\"\n (click)=\"selectAllFieldModalColumns()\"\n >\n {{ (config.translationPrefix + '.actions.selectAllColumns') | translate }}\n </button>\n }\n </div>\n <div class=\"dynamic-view-builder__modal-footer-group\">\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.cancel') | translate\"\n priority=\"secondary\"\n (click)=\"closeFieldModal()\"\n (keydown.enter)=\"closeFieldModal()\"\n ></sdc-button>\n @if (fieldModalSelectionStepActive && fieldModalCanProceed) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.nextStep') | translate\"\n (click)=\"advanceFieldModalStep()\"\n (keydown.enter)=\"advanceFieldModalStep()\"\n ></sdc-button>\n }\n @if (fieldModalConfigurationStepActive) {\n <sdc-button\n [label]=\"(config.translationPrefix + '.actions.save') | translate\"\n [disabled]=\"!canSaveFieldModal\"\n (click)=\"saveField()\"\n (keydown.enter)=\"saveField()\"\n ></sdc-button>\n }\n </div>\n </div>\n </sdc-modal>\n }\n\n <div\n class=\"dynamic-view-builder__workspace\"\n [class.dynamic-view-builder__workspace--stacked]=\"layoutMode === 'stacked'\"\n [class.dynamic-view-builder__workspace--split]=\"layoutMode === 'split'\"\n [class.dynamic-view-builder__workspace--preview-hidden]=\"!previewVisible\"\n >\n <div class=\"dynamic-view-builder__builder-area\">\n <div\n #sectionsContainer\n class=\"dynamic-view-builder__sections\"\n [class.dynamic-view-builder__sections--stacked]=\"layoutMode === 'stacked'\"\n [class.dynamic-view-builder__sections--split]=\"layoutMode === 'split'\"\n >\n <section\n #builderSection\n data-section-id=\"tables\"\n class=\"dynamic-view-builder__section\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.sources.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n (click)=\"openSourceModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canOpenSourceConfiguration\"\n [title]=\"(config.translationPrefix + '.actions.configureAliases') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.configureAliases') | translate\"\n (click)=\"openSourceConfigurationModal()\"\n >\n <i class=\"fas fa-cog\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sourceItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearSources()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!sourceItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectTables') | translate\"\n (click)=\"openSourceModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectTables') | translate }}\n </button>\n }\n @if (sourceItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (source of sourceItems; track trackById(i, source); let i = $index) {\n <div\n class=\"dynamic-view-builder__row dynamic-view-builder__row--source\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-table-group\">\n <span class=\"dynamic-view-builder__row-db\">{{ source.dbLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-table\">\n {{ source.tableLabel }}\n </span>\n </span>\n @if (source.alias) {\n <span class=\"dynamic-view-builder__row-meta\">\n Alias {{ source.alias }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeSource(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n <div class=\"dynamic-view-builder__section-row\">\n <section\n #builderSection\n data-section-id=\"joins\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--fluid\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.joins.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canConfigureJoins\"\n [title]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n (click)=\"openJoinModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !joinItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearJoins()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!canConfigureJoins) {\n <div class=\"dynamic-view-builder__info-row\">\n {{ (config.translationPrefix + '.messages.joinRequiresTwoTables') | translate }}\n </div>\n }\n @if (canConfigureJoins && !joinItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addJoin') | translate\"\n (click)=\"openJoinModal()\"\n >\n {{ (config.translationPrefix + '.actions.addJoin') | translate }}\n </button>\n }\n @if (joinItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of joinItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.sourceTable }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.sourceField }}</span>\n </span>\n <span class=\"dynamic-view-builder__join-operator\">{{ item.operator }}</span>\n <span class=\"dynamic-view-builder__join-arrow\" aria-hidden=\"true\">\n <i class=\"fas fa-long-arrow-alt-right\"></i>\n </span>\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.targetTable }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.targetField }}</span>\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openJoinModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeJoin(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n <section\n #builderSection\n data-section-id=\"groupBy\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--compact\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-heading\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.groupBy.title') | translate }}\n </div>\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !groupBySelectableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n (click)=\"openSelectionModal('groupBy')\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !groupByItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearGroupBy()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!groupByItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n (click)=\"openSelectionModal('groupBy')\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n @if (groupByItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of groupByItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeGroupBy(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n </div>\n\n <section\n #builderSection\n data-section-id=\"fields\"\n class=\"dynamic-view-builder__section\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-heading\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.fields.title') | translate }}\n </div>\n <sdc-info-sign\n class=\"dynamic-view-builder__hint\"\n [tooltip]=\"'Voc\u00EA pode ordenar a sequ\u00EAncia dos campos arrastando e soltando.'\"\n ></sdc-info-sign>\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !fieldSelectableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.selectColumns') | translate\"\n (click)=\"openFieldModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !canOpenFieldConfiguration\"\n [title]=\"(config.translationPrefix + '.actions.configureField') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.configureField') | translate\"\n (click)=\"openFieldConfigurationModal()\"\n >\n <i class=\"fas fa-cog\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !fieldItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearFields()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!fieldItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n (click)=\"openFieldModal()\"\n >\n {{ (config.translationPrefix + '.actions.selectColumns') | translate }}\n </button>\n }\n @if (fieldItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of fieldItems; track trackById(i, item); let i = $index) {\n @if (isFieldDropIndicatorVisible(i)) {\n <div\n class=\"dynamic-view-builder__field-drop-indicator\"\n aria-hidden=\"true\"\n ></div>\n }\n <div\n class=\"dynamic-view-builder__row dynamic-view-builder__row--draggable\"\n [class.dynamic-view-builder__row--drag-origin]=\"draggingFieldIndex === item.sourceIndex\"\n [draggable]=\"!isReadonly\"\n (dragstart)=\"onFieldDragStart(item.sourceIndex)\"\n (dragover)=\"onFieldDragOver($event, i)\"\n (drop)=\"onFieldDrop()\"\n (dragend)=\"onFieldDragEnd()\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n <span class=\"dynamic-view-builder__row-order\">{{ item.orderLabel }}</span>\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n @if (item.alias) {\n <span class=\"dynamic-view-builder__row-meta\">\n Alias {{ item.alias }}\n </span>\n }\n @if (item.width) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.width }}\n </span>\n }\n @if (item.functionName) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n }\n @if (item.functionAlias) {\n <span class=\"dynamic-view-builder__row-meta\">\n {{ item.functionAlias }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeField(item.sourceIndex)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n @if (isFieldDropIndicatorAtEndVisible()) {\n <div\n class=\"dynamic-view-builder__field-drop-indicator\"\n aria-hidden=\"true\"\n ></div>\n }\n </div>\n }\n </section>\n\n <div class=\"dynamic-view-builder__section-row\">\n <section\n #builderSection\n data-section-id=\"sorting\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--compact\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.sorting.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sortSelectableItems.length\"\n [title]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n (click)=\"openSortModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !sortItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearSorting()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!sortItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addSort') | translate\"\n (click)=\"openSortModal()\"\n >\n {{ (config.translationPrefix + '.actions.addSort') | translate }}\n </button>\n }\n @if (sortItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of sortItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n @if (item.functionName) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.functionLabel }}\n </span>\n }\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--operator\">\n {{ item.direction }}\n </span>\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openSortModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeSort(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n\n <section\n #builderSection\n data-section-id=\"filters\"\n class=\"dynamic-view-builder__section dynamic-view-builder__section--fluid\"\n >\n <div class=\"dynamic-view-builder__section-head\">\n <div class=\"dynamic-view-builder__section-label\">\n {{ (config.translationPrefix + '.cards.filters.title') | translate }}\n </div>\n <div class=\"dynamic-view-builder__section-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link\n dynamic-view-builder__action-link--primary\n dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !availableColumns.length\"\n [title]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n (click)=\"openFilterModal()\"\n >\n <i class=\"fas fa-plus\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__action-link dynamic-view-builder__action-link--icon\"\n [disabled]=\"isReadonly || !filterItems.length\"\n [title]=\"(config.translationPrefix + '.actions.clear') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.clear') | translate\"\n (click)=\"clearFilters()\"\n >\n <i class=\"fas fa-trash-alt\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n @if (!filterItems.length) {\n <button\n type=\"button\"\n class=\"dynamic-view-builder__empty-row\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.addFilter') | translate\"\n (click)=\"openFilterModal()\"\n >\n {{ (config.translationPrefix + '.actions.addFilter') | translate }}\n </button>\n }\n @if (filterItems.length) {\n <div class=\"dynamic-view-builder__stack dynamic-view-builder__stack--wrap\">\n @for (item of filterItems; track trackById(i, item); let i = $index) {\n <div\n class=\"dynamic-view-builder__row\"\n >\n <div class=\"dynamic-view-builder__row-main\">\n @if (!item.isDomain) {\n <span class=\"dynamic-view-builder__row-path\">\n <span class=\"dynamic-view-builder__row-table\">{{ item.tableLabel }}</span>\n <span class=\"dynamic-view-builder__row-dot\">.</span>\n <span class=\"dynamic-view-builder__row-field\">{{ item.fieldLabel }}</span>\n </span>\n <span\n class=\"dynamic-view-builder__row-chip\n dynamic-view-builder__row-chip--operator\"\n >{{ item.operatorLabel }}</span>\n } @else {\n <span\n class=\"dynamic-view-builder__row-chip\n dynamic-view-builder__row-chip--domain\"\n >{{ item.tableLabel }}</span>\n }\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--value\">\n {{ item.subtitle }}\n </span>\n @if (item.optional) {\n <span class=\"dynamic-view-builder__row-chip dynamic-view-builder__row-chip--optional\">\n {{ (config.translationPrefix + '.states.optional') | translate }}\n </span>\n }\n </div>\n <div class=\"dynamic-view-builder__row-actions\">\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.edit') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.edit') | translate\"\n (click)=\"openFilterModal(i)\"\n >\n <i class=\"fas fa-pen\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"dynamic-view-builder__icon-action dynamic-view-builder__icon-action--danger\"\n [disabled]=\"isReadonly\"\n [title]=\"(config.translationPrefix + '.actions.remove') | translate\"\n [attr.aria-label]=\"(config.translationPrefix + '.actions.remove') | translate\"\n (click)=\"removeFilter(i)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n }\n </section>\n </div>\n\n @for (arrow of flowArrows; track trackByArrow($index, arrow)) {\n <div\n class=\"dynamic-view-builder__flow-arrow\"\n [class.dynamic-view-builder__flow-arrow--right]=\"arrow.direction === 'right'\"\n [class.dynamic-view-builder__flow-arrow--down]=\"arrow.direction === 'down'\"\n [style.left.px]=\"arrow.left\"\n [style.top.px]=\"arrow.top\"\n aria-hidden=\"true\"\n >\n <i\n [class]=\"arrow.direction === 'right'\n ? 'fas fa-angle-double-right'\n : 'fas fa-angle-double-down'\"\n ></i>\n </div>\n }\n </div>\n </div>\n\n @if (previewVisible) {\n <aside class=\"dynamic-view-builder__preview-area\">\n <div\n class=\"dynamic-view-builder__preview\"\n [style.height]=\"sqlPreviewPanelHeight\"\n >\n <div class=\"dynamic-view-builder__preview-header\">\n <div class=\"dynamic-view-builder__preview-title\">SQL Preview</div>\n <div class=\"dynamic-view-builder__preview-subtitle\">\n Consulta gerada automaticamente a partir da configuracao atual.\n </div>\n </div>\n <div class=\"dynamic-view-builder__preview-body\">\n <sdc-code-editor\n [sql]=\"sqlPreview\"\n language=\"sql\"\n [readOnly]=\"true\"\n [showCopy]=\"true\"\n [height]=\"sqlPreviewHeight\"\n ></sdc-code-editor>\n </div>\n </div>\n </aside>\n }\n </div>\n</div>\n", styles: [":host{display:block}::ng-deep .sdc-loading-state{overflow:auto!important}.dynamic-view-builder{display:flex;flex-direction:column;gap:.75rem;color:#243342}.dynamic-view-builder__toolbar{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.25rem 0}.dynamic-view-builder__toolbar-copy{min-width:0}.dynamic-view-builder__title{font-size:1rem;font-weight:700;line-height:1.2;color:#243342}.dynamic-view-builder__subtitle{margin-top:.2rem;color:#70839a;font-size:.875rem;line-height:1.35}.dynamic-view-builder__toolbar-actions{display:flex;align-items:center;gap:.625rem;flex-shrink:0;flex-wrap:wrap}.dynamic-view-builder__toolbar-label{color:#70839a;font-size:.75rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__workspace{display:grid;gap:.875rem;min-width:0}.dynamic-view-builder__workspace--preview-hidden,.dynamic-view-builder__workspace--split.dynamic-view-builder__workspace--preview-hidden{grid-template-columns:1fr;grid-template-areas:\"builder\"}.dynamic-view-builder__workspace--stacked{grid-template-columns:1fr;grid-template-areas:\"preview\" \"builder\"}.dynamic-view-builder__workspace--split{grid-template-columns:minmax(0,62fr) minmax(20rem,38fr);grid-template-areas:\"builder preview\";align-items:start}.dynamic-view-builder__builder-area{grid-area:builder;display:flex;flex-direction:column;gap:.75rem;min-width:0}.dynamic-view-builder__sections{display:flex;flex-direction:column;gap:.5rem;min-width:0;position:relative}.dynamic-view-builder__section{display:flex;flex-direction:column;gap:.4rem;min-width:0;padding:.55rem .65rem;border:1px solid #dbe3ec;border-radius:.5rem;background:#fff;min-inline-size:0;max-inline-size:100%;position:relative;width:100%}.dynamic-view-builder__section-row{display:flex;flex-wrap:wrap;align-items:stretch;gap:.5rem;min-width:0}.dynamic-view-builder__section-row>.dynamic-view-builder__section{align-self:stretch}.dynamic-view-builder__section--half{flex:1 1 18rem;width:auto}.dynamic-view-builder__section--compact{flex:0 0 clamp(18rem,30%,22rem);width:auto}.dynamic-view-builder__section--fluid{flex:1 1 26rem;min-inline-size:min(100%,26rem);width:auto}.dynamic-view-builder__flow-arrow{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:1.4rem;height:1.4rem;border:1px solid #d9e3ed;border-radius:999px;background:#fff;color:#68809a;pointer-events:none;z-index:2;transform:translate(-50%,-50%)}.dynamic-view-builder__flow-arrow i{font-size:.74rem;line-height:1}.dynamic-view-builder__section-head{display:flex;justify-content:space-between;align-items:flex-start;gap:.75rem}.dynamic-view-builder__section-heading{display:inline-flex;align-items:center;gap:.4rem;min-width:0}.dynamic-view-builder__section-label{min-width:0;color:#516173;font-size:.78rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.dynamic-view-builder__section-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;flex-wrap:wrap;flex-shrink:0}.dynamic-view-builder__hint{display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1rem;padding:0;border:0;background:transparent;color:#8ca0b6;cursor:help}.dynamic-view-builder__hint--legacy{display:none}.dynamic-view-builder__stack{display:flex;gap:.35rem;min-width:0}.dynamic-view-builder__stack--wrap{flex-direction:row;flex-wrap:wrap;align-items:flex-start}.dynamic-view-builder__row,.dynamic-view-builder__empty-row,.dynamic-view-builder__info-row{min-width:0;border:1px solid #e7edf4;border-radius:.4rem;background:#fbfcfe}.dynamic-view-builder__row{display:inline-flex;align-items:stretch;justify-content:space-between;gap:.45rem;padding:.5rem .6rem;inline-size:auto;min-inline-size:min(100%,12rem);max-inline-size:100%;flex:0 1 auto}.dynamic-view-builder__row-main{min-width:0;display:flex;align-items:center;gap:.3rem;flex-wrap:wrap;flex:1 1 auto}.dynamic-view-builder__row-label{color:#243342;font-weight:600;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-value{color:#627588;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-separator{color:#b0bcc9;flex-shrink:0}.dynamic-view-builder__row-actions{display:flex;align-items:center;justify-content:flex-end;gap:.2rem;flex-wrap:wrap;flex:0 0 auto}.dynamic-view-builder__row--source{align-items:center;min-inline-size:min(100%,16.5rem);padding-block:.45rem}.dynamic-view-builder__row--source .dynamic-view-builder__row-main{align-items:center;flex-wrap:nowrap;gap:.18rem}.dynamic-view-builder__row-table-group{display:inline-flex;align-items:center;gap:0;min-width:0;flex:0 1 auto}.dynamic-view-builder__row-db{color:#243342;font-weight:700;line-height:1.25;white-space:nowrap}.dynamic-view-builder__row-order{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;padding:.1rem .35rem;border-radius:999px;background:#eef3f8;color:#516173;font-size:.75rem;font-weight:700}.dynamic-view-builder__row-path{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:wrap}.dynamic-view-builder__row-table{color:#425466;font-weight:500;line-height:1.35}.dynamic-view-builder__row-table--accent{color:#1f8a52;font-weight:700}.dynamic-view-builder__row-dot{color:#8fa1b3;flex:0 0 auto;margin-inline:.02rem}.dynamic-view-builder__row-field{color:#1f8a52;font-weight:700;line-height:1.35;word-break:break-word}.dynamic-view-builder__row-meta{display:inline-flex;align-items:center;padding:.12rem .4rem;border-radius:999px;background:#f0f4f8;color:#627588;font-size:.74rem;line-height:1.2}.dynamic-view-builder__join-operator{display:inline-flex;align-items:center;padding:.1rem .35rem;border-radius:999px;background:#eef3f8;color:#627588;font-size:.73rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase}.dynamic-view-builder__join-arrow{color:#9ab0c6;font-size:.85rem}.dynamic-view-builder__row--draggable{cursor:grab}.dynamic-view-builder__row--drag-origin{opacity:.6;border-color:#b8cae0;background:#f4f8fc}.dynamic-view-builder__row--draggable:active{cursor:grabbing}.dynamic-view-builder__alias-field{flex:0 1 5.4rem;min-inline-size:4.4rem;max-inline-size:5.8rem}.dynamic-view-builder__alias-field :where(.sdc-textbox__label-row){display:none}.dynamic-view-builder__action-link{padding:0;border:0;background:transparent;color:#6d7786;font:inherit;font-size:.82rem;font-weight:600;line-height:1.25;cursor:pointer;transition:color .18s ease;pointer-events:auto;position:relative;z-index:2;text-decoration:none}.dynamic-view-builder__action-link:disabled{opacity:.45;cursor:default}.dynamic-view-builder__action-link:hover:not(:disabled),.dynamic-view-builder__action-link:focus-visible:not(:disabled){color:#1b5cff}.dynamic-view-builder__action-link--primary{color:#1b5cff}.dynamic-view-builder__action-link--icon{display:inline-flex;align-items:center;justify-content:center;min-width:1.5rem;min-height:1.5rem}.dynamic-view-builder__action-link--icon i{font-size:.9rem;line-height:1}.dynamic-view-builder__preview-toggle{display:inline-flex;align-items:center;gap:.4rem;min-height:2rem;padding:0 .75rem;border:1px solid #dbe3ec;border-radius:999px;background:#f8fafc;color:#425466;font:inherit;font-size:.82rem;font-weight:600;cursor:pointer;transition:border-color .18s ease,background-color .18s ease,color .18s ease}.dynamic-view-builder__preview-toggle:focus-visible{outline:2px solid rgba(27,92,255,.18);outline-offset:2px}.dynamic-view-builder__preview-toggle:hover:not(:disabled),.dynamic-view-builder__preview-toggle:focus-visible:not(:disabled){border-color:#b9c7d6;background:#eef4fb;color:#1b5cff}.dynamic-view-builder__icon-action{display:inline-flex;align-items:center;justify-content:center;width:1.35rem;height:1.35rem;padding:0;border:0;background:transparent;color:#7b8ea2;cursor:pointer;transition:color .18s ease}.dynamic-view-builder__icon-action:focus-visible{outline:2px solid rgba(27,92,255,.18);outline-offset:2px;border-radius:999px}.dynamic-view-builder__icon-action:disabled{opacity:.45;cursor:default}.dynamic-view-builder__icon-action:hover:not(:disabled),.dynamic-view-builder__icon-action:focus-visible:not(:disabled){color:#1b5cff}.dynamic-view-builder__icon-action--active{color:#1c9b5f}.dynamic-view-builder__icon-action--danger{color:#8d9caf}.dynamic-view-builder__icon-action--danger:hover:not(:disabled),.dynamic-view-builder__icon-action--danger:focus-visible:not(:disabled){color:#d14343}.dynamic-view-builder__empty-row{width:auto;max-width:100%;padding:.45rem .55rem;text-align:left;color:#70839a;cursor:pointer;inline-size:fit-content;pointer-events:auto;position:relative;z-index:1}.dynamic-view-builder__info-row{padding:.45rem .55rem;color:#3d6ae8;line-height:1.35;inline-size:fit-content;max-inline-size:100%}.dynamic-view-builder__preview-area{grid-area:preview;min-width:0;display:flex;align-self:start}.dynamic-view-builder__preview{display:flex;flex:1 1 auto;flex-direction:column;border:1px solid #dbe3ec;border-radius:.5rem;background:#fff;overflow:hidden;min-height:0}.dynamic-view-builder__preview-header{padding:.75rem .9rem;border-bottom:1px solid #e7edf4;background:#f8fafc}.dynamic-view-builder__preview-title{color:#243342;font-weight:700;line-height:1.25}.dynamic-view-builder__preview-subtitle{margin-top:.2rem;color:#70839a;line-height:1.35}.dynamic-view-builder__preview-body{display:flex;flex:1 1 auto;min-height:0;padding:.55rem}.dynamic-view-builder__preview-body :where(sdc-code-editor){display:block;flex:1 1 auto;min-height:0;width:100%}.dynamic-view-builder__footer{display:flex;justify-content:flex-start;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-shell{display:flex;flex-direction:column;gap:.875rem;min-height:0;height:100%}.dynamic-view-builder__modal-shell--full{height:100%}.dynamic-view-builder__modal-stage{display:flex;flex-direction:column;gap:.75rem;min-height:0}.dynamic-view-builder__modal-stage-body{flex:1 1 auto;min-height:0}.dynamic-view-builder__modal-card{padding:.85rem .95rem;border:1px solid #dbe3ec;border-radius:.65rem;background:#fff;box-shadow:0 1px 2px #0f172a0a}.dynamic-view-builder__modal-card--compact{padding:.75rem .85rem}.dynamic-view-builder__modal-card--section{display:flex;flex-direction:column;gap:.875rem}.dynamic-view-builder__modal-card--soft{background:linear-gradient(180deg,#fbfdff,#f6f9fc)}.dynamic-view-builder__modal-inline-surface{display:flex;flex-direction:column;gap:.625rem;min-width:0}.dynamic-view-builder__modal-list-shell{flex:1 1 auto;min-height:0;overflow:hidden;padding:.8rem}.dynamic-view-builder__modal-card-title{color:#243342;font-size:.92rem;font-weight:700;line-height:1.25}.dynamic-view-builder__modal-card-text{margin-top:.2rem;color:#70839a;font-size:.8rem;line-height:1.35}.dynamic-view-builder__modal-panel-title{color:#425466;font-size:.78rem;font-weight:700;letter-spacing:.04em;line-height:1.25;text-transform:uppercase}.dynamic-view-builder__modal-panel-title--section{margin-bottom:-.1rem}.dynamic-view-builder__modal-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;align-items:start;min-height:0}.dynamic-view-builder__modal-grid>*{min-width:0}.dynamic-view-builder__modal-grid--single{grid-template-columns:1fr}.dynamic-view-builder__modal-grid--filter{grid-template-columns:repeat(2,minmax(0,1fr))}.dynamic-view-builder__modal-grid--filter-controls{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem .75rem}.dynamic-view-builder__modal-grid-column-full{grid-column:1/-1}.dynamic-view-builder__modal-field,.dynamic-view-builder__modal-picker{display:flex;flex-direction:column;gap:.625rem;min-width:0;min-height:0}.dynamic-view-builder__modal-field--stretch,.dynamic-view-builder__modal-picker--stretch{height:100%}.dynamic-view-builder__modal-field--compact{gap:.5rem}.dynamic-view-builder__modal-field--full{width:100%}.dynamic-view-builder__modal-label-row{display:inline-flex;align-items:center;gap:.35rem;min-width:0}.dynamic-view-builder__modal-label{color:#425466;font-size:.875rem;font-weight:600;line-height:1.25}.dynamic-view-builder__join-modal{display:flex;flex-direction:column;gap:.875rem}.dynamic-view-builder__selection-flow{display:flex;flex-direction:column;gap:.75rem;height:100%;min-height:0}.dynamic-view-builder__filter-modal{display:flex;flex-direction:column;gap:.875rem;min-height:min(30rem,100vh - 14rem);height:100%;overflow:hidden}.dynamic-view-builder__filter-step{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0;flex:1 1 auto}.dynamic-view-builder__filter-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:.875rem;flex-wrap:wrap}.dynamic-view-builder__filter-toolbar>*{min-width:0}.dynamic-view-builder__filter-heading{display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-width:0}.dynamic-view-builder__filter-base-selector,.dynamic-view-builder__filter-domain-intro{min-width:0}.dynamic-view-builder__filter-base-selector{gap:.625rem;padding:.85rem 1rem}.dynamic-view-builder__filter-mode-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.dynamic-view-builder__filter-mode-copy{color:#70839a;font-size:.84rem;line-height:1.4}.dynamic-view-builder__filter-mode-selector{display:flex;min-width:0}.dynamic-view-builder__filter-mode-selector :where(.select-button){max-width:100%}.dynamic-view-builder__picklist-shell{flex:1 1 auto;min-height:0;overflow:hidden;display:flex;flex-direction:column}.dynamic-view-builder__picklist-shell :where(sdc-picklist){display:flex;flex:1 1 auto;height:100%;min-height:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist){display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__loading-state){display:flex;flex-direction:column;min-height:0;flex:1 1 auto}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__content){min-height:0;flex:1 1 auto;overflow:auto}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__list){margin:0}.dynamic-view-builder__picklist-shell :where(.sdc-picklist__search),.dynamic-view-builder__picklist-shell :where(.sdc-picklist__selected),.dynamic-view-builder__picklist-shell :where(.sdc-picklist__footer){flex:0 0 auto}.dynamic-view-builder__filter-config-card{flex:1 1 auto;min-height:0;gap:.75rem;overflow:auto;padding:.85rem 1rem}.dynamic-view-builder__filter-panel{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0}.dynamic-view-builder__filter-context{display:flex;flex-direction:column;gap:.2rem;padding:0 .1rem;min-width:0}.dynamic-view-builder__filter-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem;min-width:0}.dynamic-view-builder__filter-summary-item{display:flex;flex-direction:column;gap:.22rem;padding:.7rem .8rem;border:1px solid #dbe3ec;border-radius:.55rem;background:#f8fafc;min-width:0}.dynamic-view-builder__sort-modal{display:flex;flex-direction:column;gap:.75rem;min-width:0;min-height:0;height:100%;overflow:hidden}.dynamic-view-builder__sort-direction{display:block;width:100%;max-width:18rem;min-width:0;overflow:hidden}.dynamic-view-builder__sort-direction :where(.select-button){width:100%;max-width:100%;overflow:hidden}.dynamic-view-builder__sort-direction :where(.select-button-item){min-width:0}.dynamic-view-builder__sort-modal>.dynamic-view-builder__modal-field{flex:0 0 auto}.dynamic-view-builder__sort-modal>.dynamic-view-builder__modal-picker{flex:1 1 auto;min-height:0}.dynamic-view-builder__sort-modal :where(.select-button--soft){padding:.25rem}.dynamic-view-builder__sort-modal :where(.select-button--soft .select-button-item){min-height:2rem;padding:.4rem .65rem}.dynamic-view-builder__modal-summary{display:flex;flex-direction:column;gap:.25rem;align-self:start}.dynamic-view-builder__modal-summary--filter{gap:.35rem}.dynamic-view-builder__modal-summary--compact{width:fit-content;max-width:100%}.dynamic-view-builder__modal-summary--field{min-width:min(100%,15rem)}.dynamic-view-builder__join-modal-top{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,14rem) minmax(0,1fr);gap:.875rem;align-items:stretch}.dynamic-view-builder__join-modal-top>*{height:100%}.dynamic-view-builder__join-modal-top .dynamic-view-builder__modal-summary,.dynamic-view-builder__join-modal-top .dynamic-view-builder__modal-field{align-self:stretch}.dynamic-view-builder__modal-summary-label{color:#70839a;font-size:.73rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__modal-summary-value{color:#243342;font-weight:600;line-height:1.35;word-break:break-word}.dynamic-view-builder__modal-summary-value--path{color:#1f8a52;font-family:Consolas,Courier New,monospace;font-size:.86rem;font-weight:600}.dynamic-view-builder__picker-title{color:#425466;font-weight:700;line-height:1.35}.dynamic-view-builder__picker-title--path{font-family:Consolas,Courier New,monospace;font-size:.85rem;font-weight:600}.dynamic-view-builder__modal-footer{display:flex;justify-content:flex-end;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-footer--between{justify-content:space-between;align-items:center}.dynamic-view-builder__modal-footer-group{display:inline-flex;align-items:center;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__modal-footer-group--start{margin-right:auto}.dynamic-view-builder__filter-config-section{display:flex;flex-direction:column;gap:.625rem;min-width:0}.dynamic-view-builder__filter-config-section--value,.dynamic-view-builder__filter-config-section--domain{padding-top:.25rem;border-top:1px solid #e8edf3}.dynamic-view-builder__filter-optional{display:flex;align-items:flex-end;gap:.35rem;min-height:100%;padding-bottom:.15rem}.dynamic-view-builder__filter-config-section :where(.sdc-checkbox){min-height:34px}.dynamic-view-builder__filter-domain-grid,.dynamic-view-builder__filter-review-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}.dynamic-view-builder__filter-domain-item,.dynamic-view-builder__filter-review-item{display:flex;flex-direction:column;gap:.25rem;min-width:0;padding:.8rem .9rem;border:1px solid #e5ebf2;border-radius:.6rem;background:#f8fafc}.dynamic-view-builder__filter-domain-hint{color:#70839a;font-size:.82rem;line-height:1.45}.dynamic-view-builder__filter-review-preview{display:flex;flex-direction:column;gap:.35rem;min-width:0;padding-top:.25rem;border-top:1px solid #e8edf3}.dynamic-view-builder__filter-review-code{color:#243342;font-family:Consolas,Courier New,monospace;font-size:.84rem;line-height:1.45;white-space:pre-wrap;word-break:break-word}.dynamic-view-builder__sort-direction-field{gap:.4rem}.dynamic-view-builder__selection-table{display:flex;flex-direction:column;border:1px solid #d7dde5;background:#fff;overflow:hidden;border-radius:.5rem;min-height:0;flex:1 1 auto}.dynamic-view-builder__modal-stage-body>.dynamic-view-builder__selection-table,.dynamic-view-builder__modal-stage-body.dynamic-view-builder__picklist-shell{height:100%}.dynamic-view-builder__selection-table--chooser{min-height:0}.dynamic-view-builder__selection-head{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 5rem;gap:.75rem;padding:.875rem 1rem;border-bottom:1px solid #e4e8ef;background:#f6f8fb}.dynamic-view-builder__selection-body{flex:1 1 auto;min-height:0;max-height:22rem;overflow:auto}.dynamic-view-builder__selection-table--fluid,.dynamic-view-builder__selection-table--fluid .dynamic-view-builder__selection-body{min-height:0;max-height:none;height:100%}.dynamic-view-builder__selection-row{width:100%;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) 5rem;gap:.75rem;padding:.875rem 1rem;border:0;border-bottom:1px solid #eef2f7;background:transparent;text-align:left;cursor:pointer;transition:background-color .18s ease,box-shadow .18s ease}.dynamic-view-builder__selection-row:last-child{border-bottom:0}.dynamic-view-builder__selection-row:hover{background:#f9fbff}.dynamic-view-builder__selection-row--selected{background:#eef5ff}.dynamic-view-builder__selection-row:focus-visible{outline:2px solid rgba(27,92,255,.22);outline-offset:-2px}.dynamic-view-builder__selection-col,.dynamic-view-builder__selection-cell{min-width:0;color:#425466;line-height:1.4;word-break:break-word}.dynamic-view-builder__selection-col{font-weight:700}.dynamic-view-builder__selection-cell--meta{color:#70839a}.dynamic-view-builder__selection-path{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:nowrap}.dynamic-view-builder__selection-db{color:#243342;font-weight:700}.dynamic-view-builder__selection-table-label{color:#425466;font-weight:500}.dynamic-view-builder__selection-separator{color:#9aaaba;flex:0 0 auto;margin-inline:.02rem}.dynamic-view-builder__selection-accent{color:#1f8a52;font-weight:700}.dynamic-view-builder__selection-note{display:block;margin-top:.1rem;color:#8da0b4;font-size:.74rem}.dynamic-view-builder__selection-col--select,.dynamic-view-builder__selection-cell--select{display:flex;align-items:center;justify-content:center}.dynamic-view-builder__selection-marker{display:inline-flex;align-items:center;justify-content:center;width:1.2rem;height:1.2rem;border:1px solid #c8d4e0;border-radius:.3rem;background:#fff;color:transparent}.dynamic-view-builder__selection-marker i{font-size:.72rem;line-height:1}.dynamic-view-builder__selection-marker--selected{border-color:#1b5cff;background:#1b5cff;color:#fff}.dynamic-view-builder__selection-empty{padding:1rem;color:#70839a;text-align:center;line-height:1.4}.dynamic-view-builder__modal-picker--filter,.dynamic-view-builder__modal-picker--filter .dynamic-view-builder__selection-table{min-height:100%}.dynamic-view-builder__modal-picker--filter .dynamic-view-builder__selection-body{max-height:none}.dynamic-view-builder__field-modal{display:flex;flex-direction:column;gap:1rem;min-height:0;width:100%;height:100%}.dynamic-view-builder__field-config-shell{gap:.85rem;min-height:0;height:100%}.dynamic-view-builder__field-config-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__field-config-summary{color:#516173;font-size:.8rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.dynamic-view-builder__field-selection-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.dynamic-view-builder__field-config-list,.dynamic-view-builder__source-config-list{display:flex;flex-direction:column;flex:1 1 auto;gap:.75rem;width:100%;min-height:0;overflow:auto}.dynamic-view-builder__field-config-row{display:grid;grid-template-columns:minmax(13rem,1.1fr) minmax(0,1.9fr);gap:.9rem;align-items:start;width:100%;padding:.85rem .9rem;border:1px solid #dbe3ec;border-radius:.7rem;background:#fff}.dynamic-view-builder__source-config-row{display:grid;grid-template-columns:minmax(13rem,1fr) minmax(0,1.35fr);gap:.9rem;align-items:center;width:100%;padding:.85rem .9rem;border:1px solid #dbe3ec;border-radius:.7rem;background:#fff}.dynamic-view-builder__field-config-main,.dynamic-view-builder__source-config-main{display:flex;flex-direction:column;gap:.45rem;min-width:0}.dynamic-view-builder__field-config-title{display:inline-flex;align-items:baseline;gap:0;min-width:0;flex-wrap:wrap}.dynamic-view-builder__field-config-function{display:inline-flex;align-items:center;gap:.45rem;flex-wrap:wrap}.dynamic-view-builder__field-config-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(7rem,8rem) auto auto;gap:.75rem;align-items:end;min-width:0}.dynamic-view-builder__source-config-controls{display:grid;grid-template-columns:minmax(0,1fr);gap:.75rem;align-items:end;min-width:0}.dynamic-view-builder__field-config-controls--function{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto auto}.dynamic-view-builder__field-form{display:grid;grid-template-columns:minmax(0,1fr) minmax(10rem,11rem);gap:.75rem 1rem;align-items:start}.dynamic-view-builder__field-form--balanced{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr)}.dynamic-view-builder__field-width{display:flex;flex-direction:column;gap:.35rem;min-width:0}.dynamic-view-builder__between{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.625rem}.dynamic-view-builder__row-chip{display:inline-flex;align-items:center;padding:.14rem .45rem;border-radius:999px;font-size:.74rem;font-weight:600;line-height:1.2}.dynamic-view-builder__row-chip--operator{background:#eef4fb;color:#1b5cff}.dynamic-view-builder__row-chip--value{background:#f4f7fa;color:#5d7084}.dynamic-view-builder__row-chip--optional{background:#f2f7f3;color:#1f8a52}.dynamic-view-builder__row-chip--domain{background:#eef4fb;color:#425466}.dynamic-view-builder__field-drop-indicator{display:inline-flex;align-self:stretch;width:.2rem;min-height:2.2rem;border-radius:999px;background:#1b5cff;box-shadow:0 0 0 3px #1b5cff24;flex:0 0 auto}@media (max-width: 1120px){.dynamic-view-builder__workspace--split{grid-template-columns:1fr;grid-template-areas:\"builder\" \"preview\"}.dynamic-view-builder__workspace--split.dynamic-view-builder__workspace--preview-hidden{justify-items:stretch}.dynamic-view-builder__sections--split{padding-right:0}}@media (max-width: 900px){.dynamic-view-builder__field-form,.dynamic-view-builder__field-form--balanced,.dynamic-view-builder__field-config-toolbar,.dynamic-view-builder__field-config-row,.dynamic-view-builder__source-config-row,.dynamic-view-builder__field-config-controls,.dynamic-view-builder__source-config-controls,.dynamic-view-builder__field-config-controls--function{grid-template-columns:1fr}.dynamic-view-builder__section-row{flex-direction:column}.dynamic-view-builder__section--half,.dynamic-view-builder__section--compact,.dynamic-view-builder__section--fluid{width:100%}.dynamic-view-builder__toolbar,.dynamic-view-builder__section-head,.dynamic-view-builder__row,.dynamic-view-builder__footer,.dynamic-view-builder__modal-footer,.dynamic-view-builder__filter-toolbar,.dynamic-view-builder__field-selection-toolbar{flex-direction:column;align-items:stretch}.dynamic-view-builder__toolbar-actions,.dynamic-view-builder__section-actions,.dynamic-view-builder__row-actions{justify-content:flex-start}.dynamic-view-builder__alias-field{min-inline-size:6rem;max-inline-size:100%}.dynamic-view-builder__modal-grid,.dynamic-view-builder__modal-grid--filter,.dynamic-view-builder__modal-grid--filter-controls,.dynamic-view-builder__filter-modal,.dynamic-view-builder__filter-summary,.dynamic-view-builder__filter-domain-grid,.dynamic-view-builder__filter-review-grid,.dynamic-view-builder__between,.dynamic-view-builder__join-modal-top{grid-template-columns:1fr}.dynamic-view-builder__row{min-inline-size:100%}}:host ::ng-deep .sdc-modal__content{display:flex;flex-direction:column;min-height:0;overflow:hidden}:host ::ng-deep .sdc-modal__content>.dynamic-view-builder__modal-shell{flex:1 1 auto;min-height:0}@media (max-width: 768px){.dynamic-view-builder__selection-head,.dynamic-view-builder__selection-row{grid-template-columns:1fr}.dynamic-view-builder__selection-col--select,.dynamic-view-builder__selection-cell--select{justify-content:flex-start}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["id", "label", "ariaLabel", "disabled", "width", "priority", "size", "type", "icon", "rightIcon", "auxiliary", "caret", "tooltip", "animation", "slide", "styleClass", "badge", "menuOptions", "menuContext", "model"], outputs: ["clicked"] }, { kind: "component", type: CheckboxComponent, selector: "sdc-checkbox", inputs: ["label", "disabled", "commonCheckbox", "labelPosition", "size", "checked"], outputs: ["checkedChange"] }, { kind: "component", type: CodeEditorComponent, selector: "sdc-code-editor", inputs: ["sql", "height", "width", "showCopy", "customHeaderItems", "activeHeaderKey", "readOnly", "language", "schema"], outputs: ["headerSelect", "onCopy", "languageChange", "domainFilterClick"] }, { kind: "component", type: ComboboxComponent, selector: "sdc-combobox", inputs: ["multiple", "appendTo", "zIndex", "options", "overrideChipMessage", "maxSelectedLabels", "showClear", "iconSelector", "showIconClass", "infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "infoTooltipAllowHtml"], outputs: ["onSelectedItem", "panelClosed"] }, { kind: "component", type: InfoSignComponent, selector: "sdc-info-sign", inputs: ["label", "labelParams", "tooltip", "tooltipParams", "iconClass", "iconAriaLabel", "tooltipPosition", "tooltipEvent", "inline"] }, { kind: "component", type: ModalComponent, selector: "sdc-modal", inputs: ["footerButtons", "header", "height", "maximizable", "maximize", "resizable", "responsive", "width", "zIndex", "closable", "styleClass", "appendToBody", "visible"], outputs: ["hidden", "visibleChange"] }, { kind: "component", type: PicklistComponent, selector: "sdc-picklist", inputs: ["items", "selectedIds", "idKey", "titleKey", "subtitleKey", "iconClass", "selectionIconClass", "placeholder", "emptyTitle", "emptyText", "emptyIconClass", "resultsCounterSingularLabel", "resultsCounterPluralLabel", "filterFields", "first", "rows", "rowsPerPageOptions", "maxVisibleSelectedItems", "showPaginator", "showRowsPerPageOptions", "showSelectionCounter", "showResultsCounter", "showItemIcon", "autoResize", "autoResizeMinRows", "autoResizeMaxRows", "autoResizeItemHeight", "autoResizeViewportOffset", "maxTitleLength", "maxSubtitleLength", "autofocusSearch", "loading"], outputs: ["pageChange", "selectedIdsChange"] }, { kind: "component", type: SelectButtonComponent, selector: "sdc-select-button", inputs: ["items", "multiple", "compareWith"], outputs: ["itemSelected", "itemClicked"] }, { kind: "component", type: TextareaComponent, selector: "sdc-textarea", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "rows", "autoResize"] }, { kind: "component", type: TextboxComponent, selector: "sdc-textbox", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent"] }, { kind: "component", type: TimelineComponent, selector: "sdc-timeline", inputs: ["items", "activeIndex", "orientation", "interactive", "responsive", "showDescriptions", "ariaLabel", "ariaLabelParams"], outputs: ["stepSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2770
2770
  }
2771
2771
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VisualSqlEditorComponent, decorators: [{
2772
2772
  type: Component,
@@ -2807,4 +2807,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2807
2807
  args: ["window:resize"]
2808
2808
  }] } });
2809
2809
  export { VisualSqlEditorComponent as DynamicViewBuilderComponent };
2810
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsLXNxbC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy92aXN1YWwtc3FsLWVkaXRvci92aXN1YWwtc3FsLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Zpc3VhbC1zcWwtZWRpdG9yL3Zpc3VhbC1zcWwtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBd0IvRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFB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QUFNO3FIQXdDdEMsT0FBTztzQkFBZixLQUFLO2dCQUNPLE1BQU07c0JBQWxCLEtBQUs7Z0JBWWEsWUFBWTtzQkFBOUIsTUFBTTtnQkFFWSxJQUFJO3NCQUF0QixNQUFNO2dCQUNZLE1BQU07c0JBQXhCLE1BQU07Z0JBRVUsaUJBQWlCO3NCQURqQyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFHYixlQUFlO3NCQUQvQixZQUFZO3VCQUFDLGdCQUFnQjtnQkEwRjlCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlOztBQThvRy9CLE9BQU8sRUFBRSx3QkFBd0IsSUFBSSwyQkFBMkIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgRFlOQU1JQ19WSUVXX0JVSUxERVJfREVGQVVMVF9UQUJMRV9ST1dTIH0gZnJvbSBcIi4uLy4uL2NvcmUvY29uc3RhbnRzL2R5bmFtaWMtdmlldy1idWlsZGVyLmNvbnN0XCI7XG5pbXBvcnQgeyBERUZBVUxUX01PREFMX1pfSU5ERVggfSBmcm9tIFwiLi4vLi4vY29yZS9jb25zdGFudHMvbW9kYWwuY29uc3RcIjtcbmltcG9ydCB7IGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbmZpZy9keW5hbWljLXZpZXctYnVpbGRlci5jb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQmFkZ2VDb2xvciB9IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL2JhZGdlLnR5cGVcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0QnV0dG9uSXRlbSB9IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL3NlbGVjdC1idXR0b24udHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFJlY29yZCB9IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL3BpY2tsaXN0LnR5cGVcIjtcbmltcG9ydCB0eXBlIHsgVGltZWxpbmVJdGVtLCBUaW1lbGluZVN0ZXBTZWxlY3RFdmVudCB9IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL3RpbWVsaW5lLnR5cGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uLFxuICBEeW5hbWljVmlld0J1aWxkZXJDb25maWcsXG4gIER5bmFtaWNWaWV3QnVpbGRlckZpZWxkLFxuICBEeW5hbWljVmlld0J1aWxkZXJGaWVsZEZ1bmN0aW9uLFxuICBEeW5hbWljVmlld0J1aWxkZXJGaWx0ZXIsXG4gIER5bmFtaWNWaWV3QnVpbGRlckZpbHRlckNvbm5lY3RvcixcbiAgRHluYW1pY1ZpZXdCdWlsZGVyRmlsdGVyVmFsdWVUeXBlLFxuICBEeW5hbWljVmlld0J1aWxkZXJGdW5jdGlvbixcbiAgRHluYW1pY1ZpZXdCdWlsZGVySm9pbixcbiAgRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uLFxuICBEeW5hbWljVmlld0J1aWxkZXJTb3J0LFxuICBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbixcbn0gZnJvbSBcIi4uLy4uL2NvcmUvdHlwZXMvZHluYW1pYy12aWV3LWJ1aWxkZXIudHlwZVwiO1xuaW1wb3J0IHR5cGUge1xuICBSb3dCYXNlLFxuICBUYWJsZUNvbHVtbixcbiAgVGFibGVPcHRpb25zLFxufSBmcm9tIFwiLi4vLi4vY29yZS90eXBlcy90YWJsZS50eXBlXCI7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tIFwiLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSBcIi4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29kZUVkaXRvckNvbXBvbmVudCB9IGZyb20gXCIuLi9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnRcIjtcbmltcG9ydCB7IENvbWJvYm94Q29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSW5mb1NpZ25Db21wb25lbnQgfSBmcm9tIFwiLi4vaW5mby1zaWduL2luZm8tc2lnbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSBcIi4uL21vZGFsL21vZGFsLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUGlja2xpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTZWxlY3RCdXR0b25Db21wb25lbnQgfSBmcm9tIFwiLi4vc2VsZWN0LWJ1dHRvbi9zZWxlY3QtYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vdGFibGUvdGFibGUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUZXh0YXJlYUNvbXBvbmVudCB9IGZyb20gXCIuLi90ZXh0YXJlYS90ZXh0YXJlYS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tIFwiLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGltZWxpbmVDb21wb25lbnQgfSBmcm9tIFwiLi4vdGltZWxpbmUvdGltZWxpbmUuY29tcG9uZW50XCI7XG50eXBlIFNlbGVjdGlvbk1vZGFsTW9kZSA9IFwidGFibGVzXCIgfCBcImZpZWxkc1wiIHwgXCJncm91cEJ5XCI7XG50eXBlIEJ1aWxkZXJMYXlvdXRNb2RlID0gXCJzdGFja2VkXCIgfCBcInNwbGl0XCI7XG50eXBlIFNvdXJjZU1vZGFsU3RlcCA9IFwic2VsZWN0XCIgfCBcImNvbmZpZ3VyZVwiO1xudHlwZSBGaWVsZE1vZGFsU3RlcCA9IFwic2VsZWN0XCIgfCBcImNvbmZpZ3VyZVwiO1xudHlwZSBGaWx0ZXJNb2RhbFN0ZXAgPSBcInNlbGVjdFwiIHwgXCJjb25maWd1cmVcIiB8IFwicmV2aWV3XCI7XG50eXBlIEJ1aWxkZXJTZWN0aW9uSWQgPVxuICB8IFwidGFibGVzXCJcbiAgfCBcImpvaW5zXCJcbiAgfCBcImdyb3VwQnlcIlxuICB8IFwiZmllbGRzXCJcbiAgfCBcInNvcnRpbmdcIlxuICB8IFwiZmlsdGVyc1wiO1xudHlwZSBGaWx0ZXJNb2RhbE1vZGUgPSBcImNvbmRpdGlvblwiIHwgXCJkb21haW5cIjtcbmludGVyZmFjZSBTZWxlY3Rpb25Sb3cge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG1ldGE6IHN0cmluZztcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBkYkxhYmVsPzogc3RyaW5nO1xuICB0YWJsZUxhYmVsPzogc3RyaW5nO1xuICBwYXRoVHlwZT86IFwidGFibGVcIiB8IFwiY29sdW1uXCI7XG4gIHByZWZpeD86IHN0cmluZztcbiAgbm90ZT86IHN0cmluZztcbn1cbmludGVyZmFjZSBTb3VyY2VWaWV3SXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRiTGFiZWw6IHN0cmluZztcbiAgdGFibGVMYWJlbDogc3RyaW5nO1xuICBhbGlhczogc3RyaW5nO1xuICBoYXNDdXN0b21BbGlhczogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBTb3VyY2VNb2RhbERyYWZ0IHtcbiAgdGFibGU6IHN0cmluZztcbiAgYWxpYXM6IHN0cmluZztcbn1cbmludGVyZmFjZSBTb3VyY2VDb25maWd1cmVkSXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIGRiTGFiZWw6IHN0cmluZztcbiAgdGFibGVMYWJlbDogc3RyaW5nO1xuICBhbGlhczogc3RyaW5nO1xufVxuaW50ZXJmYWNlIEpvaW5WaWV3SXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNvdXJjZVRhYmxlOiBzdHJpbmc7XG4gIHNvdXJjZUZpZWxkOiBzdHJpbmc7XG4gIG9wZXJhdG9yOiBzdHJpbmc7XG4gIHRhcmdldFRhYmxlOiBzdHJpbmc7XG4gIHRhcmdldEZpZWxkOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgU2ltcGxlVmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBkYkxhYmVsOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xufVxuaW50ZXJmYWNlIEZpZWxkVmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBzb3VyY2VJbmRleDogbnVtYmVyO1xuICBjb2x1bW46IHN0cmluZztcbiAgb3JkZXJMYWJlbDogc3RyaW5nO1xuICBkYkxhYmVsOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xuICBhbGlhczogc3RyaW5nO1xuICB3aWR0aDogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgZnVuY3Rpb25MYWJlbDogc3RyaW5nO1xuICBmdW5jdGlvbkFsaWFzOiBzdHJpbmc7XG4gIGhhc0N1c3RvbUNvbmZpZzogYm9vbGVhbjtcbiAgb3JkZXI6IG51bWJlcjtcbn1cbmludGVyZmFjZSBTb3J0Vmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBkYkxhYmVsOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgZnVuY3Rpb25MYWJlbDogc3RyaW5nO1xuICBkaXJlY3Rpb246IHN0cmluZztcbn1cbmludGVyZmFjZSBTb3J0U2VsZWN0YWJsZUl0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xuICBtZXRhOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgRmlsdGVyVmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBkYkxhYmVsOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xuICBvcGVyYXRvckxhYmVsOiBzdHJpbmc7XG4gIHN1YnRpdGxlOiBzdHJpbmc7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBpc0RvbWFpbjogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBGaWx0ZXJSZXZpZXdJdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZW1waGFzaXplPzogXCJwYXRoXCIgfCBcImNvZGVcIiB8IFwiZGVmYXVsdFwiO1xufVxuaW50ZXJmYWNlIENvbHVtbkRpc3BsYXlQYXJ0cyB7XG4gIGRiTGFiZWw6IHN0cmluZztcbiAgdGFibGVMYWJlbDogc3RyaW5nO1xuICBmaWVsZExhYmVsOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgVGFibGVEaXNwbGF5UGFydHMge1xuICBkYkxhYmVsOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbn1cbmludGVyZmFjZSBGaWVsZE1vZGFsQ29uZmlndXJlZEl0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgdGFibGVMYWJlbDogc3RyaW5nO1xuICBmaWVsZExhYmVsOiBzdHJpbmc7XG4gIGFsaWFzOiBzdHJpbmc7XG4gIHdpZHRoOiBzdHJpbmc7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbkxhYmVsOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQWxpYXM6IHN0cmluZztcbn1cbmludGVyZmFjZSBCdWlsZGVyRmxvd0Fycm93IHtcbiAgaWQ6IHN0cmluZztcbiAgZGlyZWN0aW9uOiBcInJpZ2h0XCIgfCBcImRvd25cIjtcbiAgbGVmdDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbn1cbmludGVyZmFjZSBDb2x1bW5QaWNrbGlzdEl0ZW0gZXh0ZW5kcyBQaWNrbGlzdFJlY29yZCB7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRpdGxlUHJlZml4OiBzdHJpbmc7XG4gIHRpdGxlU3VmZml4OiBzdHJpbmc7XG4gIHRpdGxlUHJlZml4Q29sb3I6IHN0cmluZztcbiAgdGl0bGVTdWZmaXhDb2xvcjogc3RyaW5nO1xuICBiYWRnZTogc3RyaW5nO1xuICBiYWRnZUNvbG9yOiBCYWRnZUNvbG9yO1xuICBjb2x1bW46IHN0cmluZztcbn1cbmludGVyZmFjZSBTb3J0UGlja2xpc3RJdGVtIGV4dGVuZHMgUGlja2xpc3RSZWNvcmQge1xuICBpZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB0aXRsZVByZWZpeDogc3RyaW5nO1xuICB0aXRsZVN1ZmZpeDogc3RyaW5nO1xuICB0aXRsZVByZWZpeENvbG9yOiBzdHJpbmc7XG4gIHRpdGxlU3VmZml4Q29sb3I6IHN0cmluZztcbiAgYmFkZ2U6IHN0cmluZztcbiAgYmFkZ2VDb2xvcjogQmFkZ2VDb2xvcjtcbiAgc2VsZWN0aW9uSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgVGFibGVQaWNrbGlzdEl0ZW0gZXh0ZW5kcyBQaWNrbGlzdFJlY29yZCB7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRpdGxlUHJlZml4OiBzdHJpbmc7XG4gIHRpdGxlU3VmZml4OiBzdHJpbmc7XG4gIHRpdGxlUHJlZml4Q29sb3I6IHN0cmluZztcbiAgdGl0bGVTdWZmaXhDb2xvcjogc3RyaW5nO1xuICBiYWRnZTogc3RyaW5nO1xuICBiYWRnZUNvbG9yOiBCYWRnZUNvbG9yO1xuICB0YWJsZTogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFByZXZpZXdDb2x1bW5MaWtlIHtcbiAgZmllbGQ6IHN0cmluZztcbiAgaGVhZGVyPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xufVxudHlwZSBEeW5hbWljTW9kYWxEaW1lbnNpb24gPSB7XG4gIHdpZHRoOiBzdHJpbmc7XG4gIGhlaWdodDogc3RyaW5nO1xufTtcblxudHlwZSBEeW5hbWljTW9kYWxEaW1lbnNpb25zTWFwID0ge1xuICBzb3VyY2U6IER5bmFtaWNNb2RhbERpbWVuc2lvbjtcbiAgc2VsZWN0aW9uOiBEeW5hbWljTW9kYWxEaW1lbnNpb247XG4gIGpvaW46IER5bmFtaWNNb2RhbERpbWVuc2lvbjtcbiAgc29ydDogRHluYW1pY01vZGFsRGltZW5zaW9uO1xuICBmaWx0ZXI6IER5bmFtaWNNb2RhbERpbWVuc2lvbjtcbiAgZmllbGQ6IER5bmFtaWNNb2RhbERpbWVuc2lvbjtcbn07XG5jb25zdCBFTVBUWV9WQUxVRSA9IFwiXCI7XG5jb25zdCBERUZBVUxUX0pPSU5fT1BFUkFUT1IgPSBcIkVRVUFMU1wiO1xuY29uc3QgREVGQVVMVF9GVU5DVElPTl9OQU1FID0gXCJjb3VudFwiO1xuY29uc3QgREVGQVVMVF9TT1JUX0RJUkVDVElPTiA9IFwiQVNDXCI7XG5jb25zdCBFTVBUWV9TT1JUX0ZVTkNUSU9OID0gXCJfX2Jhc2VfX1wiO1xuY29uc3QgRkxPV19BUlJPV19JTlNFVCA9IDM7XG5jb25zdCBGTE9XX0FSUk9XX01JTl9HQVAgPSAxMjtcbmNvbnN0IEZMT1dfQVJST1dTX1JFRlJFU0hfREVMQVlfTVMgPSAxMjA7XG5jb25zdCBERUZBVUxUX0ZJTFRFUl9PUEVSQVRPUiA9IFwiRVFVQUxcIjtcbmNvbnN0IERFRkFVTFRfRklMVEVSX0NPTk5FQ1RPUjogRHluYW1pY1ZpZXdCdWlsZGVyRmlsdGVyQ29ubmVjdG9yID0gXCJBTkRcIjtcbmNvbnN0IERFRkFVTFRfRklMVEVSX1ZBTFVFX1RZUEU6IER5bmFtaWNWaWV3QnVpbGRlckZpbHRlclZhbHVlVHlwZSA9IFwidmFsdWVcIjtcbmNvbnN0IEZJTFRFUl9NT0RFX0RPTUFJTiA9IFwiZG9tYWluXCIgYXMgY29uc3Q7XG5jb25zdCBPVkVSTEFZX0FQUEVORF9UQVJHRVQgPSBcImJvZHlcIjtcbmNvbnN0IE1PREFMX1pfSU5ERVhfT0ZGU0VUID0gMjA7XG5jb25zdCBNT0RBTF9PVkVSTEFZX1pfSU5ERVggPSBERUZBVUxUX01PREFMX1pfSU5ERVggKyBNT0RBTF9aX0lOREVYX09GRlNFVDtcbmNvbnN0IEZJRUxEX1BJQ0tMSVNUX1JPV1MgPSA4O1xuY29uc3QgRklMVEVSX1BJQ0tMSVNUX1JPV1MgPSA5O1xuY29uc3QgVklTVUFMX1NRTF9UQUJMRV9DT0xPUiA9IFwiIzQyNTQ2NlwiO1xuY29uc3QgVklTVUFMX1NRTF9GSUVMRF9DT0xPUiA9IFwiIzFmOGE1MlwiO1xuY29uc3QgUElDS0xJU1RfREFUQV9UWVBFX0JBREdFX0NPTE9SOiBCYWRnZUNvbG9yID0gXCJncmF5XCI7XG5jb25zdCBQSUNLTElTVF9GVU5DVElPTl9CQURHRV9DT0xPUjogQmFkZ2VDb2xvciA9IFwiYmx1ZVwiO1xuY29uc3QgRkFMTEJBQ0tfU0VMRUNUX1RBQkxFUyA9IFwiU2VsZWNpb25hciB0YWJlbGFzXCI7XG5jb25zdCBGQUxMQkFDS19FTVBUWV9TRUxFQ1RJT04gPSBcIk5lbmh1bSBzZWxlY2lvbmFkb1wiO1xuY29uc3QgUFJFVklFV19ST1dTX1BFUl9QQUdFX09QVElPTlMgPSBbNSwgMTAsIDIwXTtcbmNvbnN0IEFMSUFTX01BWF9MRU5HVEggPSAxMjtcbmNvbnN0IE1JTl9QQVJUU19GT1JfREIgPSAzO1xuY29uc3QgREJfUEFSVFNfT0ZGU0VUID0gLTI7XG5jb25zdCBNSU5fUEFSVFNfRk9SX1RBQkxFID0gMjtcbmNvbnN0IEpPSU5fT1BFUkFUT1JfTEFCRUxTOiBSZWNvcmQ8c3RyaW5nLCB7IGtleTogc3RyaW5nOyBmYWxsYmFjazogc3RyaW5nIH0+ID0ge1xuICBFUVVBTFM6IHtcbiAgICBrZXk6IFwiam9pbk9wZXJhdG9ycy5lcXVhbHNcIixcbiAgICBmYWxsYmFjazogXCJJZ3VhbCBhICg9KVwiLFxuICB9LFxuICBOT1RfRVFVQUxTOiB7XG4gICAga2V5OiBcImpvaW5PcGVyYXRvcnMubm90RXF1YWxzXCIsXG4gICAgZmFsbGJhY2s6IFwiRGlmZXJlbnRlIGRlICg8PilcIixcbiAgfSxcbiAgR1JFQVRFUl9USEFOOiB7XG4gICAga2V5OiBcImpvaW5PcGVyYXRvcnMuZ3JlYXRlclRoYW5cIixcbiAgICBmYWxsYmFjazogXCJNYWlvciBxdWUgKD4pXCIsXG4gIH0sXG4gIEdSRUFURVJfVEhBTl9PUl9FUVVBTDoge1xuICAgIGtleTogXCJqb2luT3BlcmF0b3JzLmdyZWF0ZXJUaGFuT3JFcXVhbFwiLFxuICAgIGZhbGxiYWNrOiBcIk1haW9yIG91IGlndWFsIGEgKD49KVwiLFxuICB9LFxuICBMRVNTX1RIQU46IHtcbiAgICBrZXk6IFwiam9pbk9wZXJhdG9ycy5sZXNzVGhhblwiLFxuICAgIGZhbGxiYWNrOiBcIk1lbm9yIHF1ZSAoPClcIixcbiAgfSxcbiAgTEVTU19USEFOX09SX0VRVUFMOiB7XG4gICAga2V5OiBcImpvaW5PcGVyYXRvcnMubGVzc1RoYW5PckVxdWFsXCIsXG4gICAgZmFsbGJhY2s6IFwiTWVub3Igb3UgaWd1YWwgYSAoPD0pXCIsXG4gIH0sXG59O1xuY29uc3QgRFlOQU1JQ19NT0RBTF9ESU1FTlNJT05TOiBEeW5hbWljTW9kYWxEaW1lbnNpb25zTWFwID0ge1xuICBzb3VyY2U6IHtcbiAgICB3aWR0aDogXCI2NHJlbVwiLFxuICAgIGhlaWdodDogXCI0MHJlbVwiLFxuICB9LFxuICBzZWxlY3Rpb246IHtcbiAgICB3aWR0aDogXCI2NHJlbVwiLFxuICAgIGhlaWdodDogXCI0MHJlbVwiLFxuICB9LFxuICBqb2luOiB7XG4gICAgd2lkdGg6IFwiNzByZW1cIixcbiAgICBoZWlnaHQ6IFwiNDByZW1cIixcbiAgfSxcbiAgc29ydDoge1xuICAgIHdpZHRoOiBcIjU2cmVtXCIsXG4gICAgaGVpZ2h0OiBcIjM0cmVtXCIsXG4gIH0sXG4gIGZpbHRlcjoge1xuICAgIHdpZHRoOiBcIjY4cmVtXCIsXG4gICAgaGVpZ2h0OiBcIjU1cmVtXCIsXG4gIH0sXG4gIGZpZWxkOiB7XG4gICAgd2lkdGg6IFwiNjhyZW1cIixcbiAgICBoZWlnaHQ6IFwiNDJyZW1cIixcbiAgfSxcbn07XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwic2RjLXZpc3VhbC1zcWwtZWRpdG9yXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIENvZGVFZGl0b3JDb21wb25lbnQsXG4gICAgQ29tYm9ib3hDb21wb25lbnQsXG4gICAgSW5mb1NpZ25Db21wb25lbnQsXG4gICAgTW9kYWxDb21wb25lbnQsXG4gICAgUGlja2xpc3RDb21wb25lbnQsXG4gICAgU2VsZWN0QnV0dG9uQ29tcG9uZW50LFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFRleHRhcmVhQ29tcG9uZW50LFxuICAgIFRleHRib3hDb21wb25lbnQsXG4gICAgVGltZWxpbmVDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6IFwiLi92aXN1YWwtc3FsLWVkaXRvci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdmlzdWFsLXNxbC1lZGl0b3IuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBWaXN1YWxTcWxFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGludGVybmFsQ29uZmlnID0gY3JlYXRlRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdGlvbk9yZGVyOiBCdWlsZGVyU2VjdGlvbklkW10gPSBbXG4gICAgXCJ0YWJsZXNcIixcbiAgICBcImpvaW5zXCIsXG4gICAgXCJncm91cEJ5XCIsXG4gICAgXCJmaWVsZHNcIixcbiAgICBcInNvcnRpbmdcIixcbiAgICBcImZpbHRlcnNcIixcbiAgXTtcbiAgcHJpdmF0ZSByZWZyZXNoRmxvd0Fycm93c0ZyYW1lOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWZyZXNoRmxvd0Fycm93c1RpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHJlYWRvbmx5IGxheW91dE1vZGVJdGVtczogU2VsZWN0QnV0dG9uSXRlbTxCdWlsZGVyTGF5b3V0TW9kZT5bXSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCJCbG9jb3NcIixcbiAgICAgIHZhbHVlOiBcInN0YWNrZWRcIixcbiAgICAgIGljb25DbGFzczogXCJmYXMgZmEtdGgtbGFyZ2VcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBcIkxpc3RhXCIsXG4gICAgICB2YWx1ZTogXCJzcGxpdFwiLFxuICAgICAgaWNvbkNsYXNzOiBcImZhcyBmYS1saXN0XCIsXG4gICAgfSxcbiAgXTtcbiAgcmVhZG9ubHkgZmlsdGVyTW9kZUl0ZW1zOiBTZWxlY3RCdXR0b25JdGVtPEZpbHRlck1vZGFsTW9kZT5bXSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCJGaWx0cm9cIixcbiAgICAgIHZhbHVlOiBcImNvbmRpdGlvblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIixcbiAgICAgIHZhbHVlOiBGSUxURVJfTU9ERV9ET01BSU4sXG4gICAgfSxcbiAgXTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXM6IFNlbGVjdEJ1dHRvbkl0ZW08RmlsdGVyTW9kYWxNb2RlPltdID0gW107XG4gIHJlYWRvbmx5IHNvcnREaXJlY3Rpb25JdGVtczogU2VsZWN0QnV0dG9uSXRlbTxzdHJpbmc+W10gPSBbXTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRMYXlvdXRNb2RlSXRlbXM6IFNlbGVjdEJ1dHRvbkl0ZW08QnVpbGRlckxheW91dE1vZGU+W10gPSBbXTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRTb3J0RGlyZWN0aW9uSXRlbXM6IFNlbGVjdEJ1dHRvbkl0ZW08c3RyaW5nPltdID0gW107XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IGNvbmZpZyh2YWx1ZTogRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnKSB7XG4gICAgdGhpcy5pbnRlcm5hbENvbmZpZyA9IHZhbHVlXG4gICAgICA/IGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyh2YWx1ZSlcbiAgICAgIDogY3JlYXRlRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnKCk7XG4gICAgdGhpcy5zeW5jTGF5b3V0TW9kZUl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jRmlsdGVyTW9kZUl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jU29ydERpcmVjdGlvbkl0ZW1zKCk7XG4gICAgdGhpcy5zYW5pdGl6ZUJ1aWxkZXIoKTtcbiAgfVxuICBnZXQgY29uZmlnKCk6IER5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxDb25maWc7XG4gIH1cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbmZpZ0NoYW5nZSA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljVmlld0J1aWxkZXJDb25maWc+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljVmlld0J1aWxkZXJDb25maWc+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBWaWV3Q2hpbGQoXCJzZWN0aW9uc0NvbnRhaW5lclwiKVxuICBwcml2YXRlIHJlYWRvbmx5IHNlY3Rpb25zQ29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGRyZW4oXCJidWlsZGVyU2VjdGlvblwiKVxuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkZXJTZWN0aW9ucz86IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG4gIGxheW91dE1vZGU6IEJ1aWxkZXJMYXlvdXRNb2RlID0gXCJzdGFja2VkXCI7XG4gIHByZXZpZXdWaXNpYmxlID0gZmFsc2U7XG4gIGZsb3dBcnJvd3M6IEJ1aWxkZXJGbG93QXJyb3dbXSA9IFtdO1xuICBtZWFzdXJlZFNwbGl0UHJldmlld0hlaWdodCA9IFwiMjRyZW1cIjtcbiAgZHJhZ2dpbmdGaWVsZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgZHJhZ1ByZXZpZXdJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHJlYWRvbmx5IG92ZXJsYXlBcHBlbmRUYXJnZXQgPSBPVkVSTEFZX0FQUEVORF9UQVJHRVQ7XG4gIHJlYWRvbmx5IG92ZXJsYXlaSW5kZXggPSBNT0RBTF9PVkVSTEFZX1pfSU5ERVg7XG4gIHJlYWRvbmx5IG1vZGFsRGltZW5zaW9ucyA9IERZTkFNSUNfTU9EQUxfRElNRU5TSU9OUztcbiAgcmVhZG9ubHkgZmllbGRQaWNrbGlzdFJvd3MgPSBGSUVMRF9QSUNLTElTVF9ST1dTO1xuICByZWFkb25seSBmaWx0ZXJQaWNrbGlzdFJvd3MgPSBGSUxURVJfUElDS0xJU1RfUk9XUztcbiAgc291cmNlTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIHNvdXJjZU1vZGFsU3RlcDogU291cmNlTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgc291cmNlTW9kYWxEcmFmdHM6IFNvdXJjZU1vZGFsRHJhZnRbXSA9IFtdO1xuICBzZWxlY3Rpb25Nb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc2VsZWN0aW9uTW9kYWxNb2RlOiBTZWxlY3Rpb25Nb2RhbE1vZGUgPSBcInRhYmxlc1wiO1xuICBzZWxlY3Rpb25Nb2RhbElkczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0aW9uTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgam9pbk1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICBqb2luRWRpdEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgam9pblNvdXJjZVNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICBqb2luVGFyZ2V0U2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gIGpvaW5EcmFmdCA9IHtcbiAgICBzb3VyY2VDb2x1bW46IEVNUFRZX1ZBTFVFLFxuICAgIHRhcmdldENvbHVtbjogRU1QVFlfVkFMVUUsXG4gICAgb3BlcmF0b3I6IERFRkFVTFRfSk9JTl9PUEVSQVRPUixcbiAgfTtcbiAgc29ydE1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICBzb3J0RWRpdEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgc29ydFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICBzb3J0RHJhZnQgPSB7XG4gICAgY29sdW1uOiBFTVBUWV9WQUxVRSxcbiAgICBmdW5jdGlvbk5hbWU6IEVNUFRZX1ZBTFVFLFxuICAgIGRpcmVjdGlvbjogREVGQVVMVF9TT1JUX0RJUkVDVElPTixcbiAgfTtcbiAgZmllbGRNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgZmllbGRNb2RhbFN0ZXA6IEZpZWxkTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgZmllbGRNb2RhbFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICBmaWVsZE1vZGFsRHJhZnRzOiBEeW5hbWljVmlld0J1aWxkZXJGaWVsZFtdID0gW107XG4gIGZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgZmllbGRGdW5jdGlvbkRyYWZ0ID0ge1xuICAgIGNvbHVtbjogRU1QVFlfVkFMVUUsXG4gICAgZnVuY3Rpb25OYW1lOiBFTVBUWV9WQUxVRSxcbiAgICBmdW5jdGlvbkFsaWFzOiBFTVBUWV9WQUxVRSxcbiAgfTtcbiAgZmlsdGVyTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIGZpbHRlckVkaXRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGZpbHRlck1vZGFsU3RlcDogRmlsdGVyTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgZmlsdGVyTW9kYWxNb2RlOiBGaWx0ZXJNb2RhbE1vZGUgPSBcImNvbmRpdGlvblwiO1xuICBmaWx0ZXJTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgZmlsdGVyRHJhZnQgPSB7XG4gICAgbW9kZTogXCJjb25kaXRpb25cIiBhcyBGaWx0ZXJNb2RhbE1vZGUsXG4gICAgY29sdW1uOiBFTVBUWV9WQUxVRSxcbiAgICBvcGVyYXRvcjogREVGQVVMVF9GSUxURVJfT1BFUkFUT1IsXG4gICAgY29ubmVjdG9yOiBERUZBVUxUX0ZJTFRFUl9DT05ORUNUT1IsXG4gICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgIHZhbHVlVHlwZTogREVGQVVMVF9GSUxURVJfVkFMVUVfVFlQRSxcbiAgICB2YWx1ZTogRU1QVFlfVkFMVUUsXG4gICAgdmFsdWVzVGV4dDogRU1QVFlfVkFMVUUsXG4gICAgYmV0d2VlblN0YXJ0OiBFTVBUWV9WQUxVRSxcbiAgICBiZXR3ZWVuRW5kOiBFTVBUWV9WQUxVRSxcbiAgICBwYXJhbWV0ZXJOYW1lOiBFTVBUWV9WQUxVRSxcbiAgICBkb21haW5FeHByZXNzaW9uOiBFTVBUWV9WQUxVRSxcbiAgfTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5zeW5jTGF5b3V0TW9kZUl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jRmlsdGVyTW9kZUl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jU29ydERpcmVjdGlvbkl0ZW1zKCk7XG4gICAgdGhpcy5zYW5pdGl6ZUJ1aWxkZXIoKTtcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5idWlsZGVyU2VjdGlvbnM/LmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKCk7XG4gICAgfSk7XG4gICAgdGhpcy5zY2hlZHVsZUZsb3dBcnJvd1JlZnJlc2goKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoRmxvd0Fycm93c0ZyYW1lICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJlZnJlc2hGbG93QXJyb3dzRnJhbWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWZyZXNoRmxvd0Fycm93c1RpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hGbG93QXJyb3dzVGltZW91dCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIpXG4gIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKCk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkTGF5b3V0TW9kZUl0ZW0oKTogU2VsZWN0QnV0dG9uSXRlbTxCdWlsZGVyTGF5b3V0TW9kZT4gfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5sYXlvdXRNb2RlSXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5sYXlvdXRNb2RlKSA/P1xuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgZ2V0IGlzUmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLm1ldGFkYXRhLnZpZXdNb2RlID09PSBcInJlYWRvbmx5XCI7XG4gIH1cbiAgZ2V0IGpvaW5PcGVyYXRvck9wdGlvbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW10ge1xuICAgIHJldHVybiAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS5qb2luT3BlcmF0b3JzID8/IFtdKS5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgdGV4dDogdGhpcy5yZXNvbHZlSm9pbk9wZXJhdG9yT3B0aW9uVGV4dChpdGVtKSxcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IGZ1bmN0aW9uT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuZnVuY3Rpb25zID8/IFtdO1xuICB9XG4gIGdldCBzb3J0RGlyZWN0aW9uT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuc29ydERpcmVjdGlvbnMgPz8gW107XG4gIH1cbiAgZ2V0IGZpbHRlckNvbm5lY3Rvck9wdGlvbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLmZpbHRlckNvbm5lY3RvcnMgPz8gW107XG4gIH1cbiAgZ2V0IHZhbHVlVHlwZU9wdGlvbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy52YWx1ZVR5cGVzLnZhbHVlYCxcbiAgICAgICAgICBcIlZhbG9yXCJcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6IFwidmFsdWVcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy52YWx1ZVR5cGVzLnBhcmFtZXRlcmAsXG4gICAgICAgICAgXCJQYXJhbWV0cm9cIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogXCJwYXJhbWV0ZXJcIixcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBnZXQgYm9vbGVhblZhbHVlT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGV4dDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmJvb2xlYW4udHJ1ZWAsXG4gICAgICAgICAgXCJUcnVlXCJcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6IFwidHJ1ZVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmJvb2xlYW4uZmFsc2VgLFxuICAgICAgICAgIFwiRmFsc2VcIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogXCJmYWxzZVwiLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGdldCBzZWxlY3RlZFRhYmxlcygpOiBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbltdIHtcbiAgICBjb25zdCBpZHMgPSBuZXcgU2V0KFxuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMubWFwKChpdGVtKSA9PiBpdGVtLnRhYmxlKVxuICAgICk7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSkuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgaWRzLmhhcyhpdGVtLnZhbHVlKVxuICAgICk7XG4gIH1cbiAgZ2V0IGF2YWlsYWJsZUNvbHVtbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkVGFibGVJZHMgPSBuZXcgU2V0KFxuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMubWFwKChpdGVtKSA9PiBpdGVtLnRhYmxlKVxuICAgICk7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLmNvbHVtbnMgPz8gW10pLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgIHNlbGVjdGVkVGFibGVJZHMuaGFzKGl0ZW0udGFibGUpXG4gICAgKTtcbiAgfVxuICBnZXQgZmllbGRTZWxlY3RhYmxlQ29sdW1ucygpOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSB7XG4gICAgaWYgKCF0aGlzLmF2YWlsYWJsZUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmICghdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVDb2x1bW5zO1xuICAgIH1cbiAgICBjb25zdCBncm91cEJ5ID0gbmV3IFNldCh0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeSk7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlQ29sdW1ucy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4gZ3JvdXBCeS5oYXMoaXRlbS52YWx1ZSkgfHwgaXRlbS5pc0FnZ3JlZ2F0YWJsZSAhPT0gZmFsc2VcbiAgICApO1xuICB9XG4gIGdldCBncm91cEJ5U2VsZWN0YWJsZUNvbHVtbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZUNvbHVtbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzQWdncmVnYXRhYmxlICE9PSBmYWxzZSk7XG4gIH1cbiAgZ2V0IHNvcnRTZWxlY3RhYmxlSXRlbXMoKTogU29ydFNlbGVjdGFibGVJdGVtW10ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWVsZHMgPSB0aGlzLm5vcm1hbGl6ZWRGaWVsZHM7XG4gICAgaWYgKCFub3JtYWxpemVkRmllbGRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwQnlTZXQgPSBuZXcgU2V0KHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5KTtcblxuICAgIHJldHVybiB0aGlzLmRlZHVwbGljYXRlQnlLZXkoXG4gICAgICBub3JtYWxpemVkRmllbGRzXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24oaXRlbS5jb2x1bW4pO1xuICAgICAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4uaXNTb3J0YWJsZSAhPT0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGdyb3VwQnlTZXQuaGFzKGl0ZW0uY29sdW1uKSB8fCAhIWl0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZT8udHJpbSgpO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLmNvbHVtbik7XG4gICAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gaXRlbS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUU7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgaWQ6IHRoaXMuYnVpbGRTb3J0U2VsZWN0aW9uSWQoaXRlbS5jb2x1bW4sIGZ1bmN0aW9uTmFtZSksXG4gICAgICAgICAgICBjb2x1bW46IGl0ZW0uY29sdW1uLFxuICAgICAgICAgICAgdGFibGVMYWJlbDogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgICAgIGZpZWxkTGFiZWw6IHBhcnRzLmZpZWxkTGFiZWwsXG4gICAgICAgICAgICBtZXRhOiBmdW5jdGlvbk5hbWVcbiAgICAgICAgICAgICAgPyB0aGlzLnJlc29sdmVGdW5jdGlvbkxhYmVsKGZ1bmN0aW9uTmFtZSlcbiAgICAgICAgICAgICAgOiB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24oaXRlbS5jb2x1bW4pPy5kYXRhVHlwZSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIChpdGVtKSA9PiBpdGVtLmlkXG4gICAgKTtcbiAgfVxuICBnZXQgY2FuQ29uZmlndXJlSm9pbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLmxlbmd0aCA+IDE7XG4gIH1cbiAgZ2V0IGNhblNhdmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHMubGVuZ3RoIHx8IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5Lmxlbmd0aCk7XG4gIH1cbiAgZ2V0IGNhblNhdmVKb2luKCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4gfHxcbiAgICAgICF0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4gfHxcbiAgICAgICF0aGlzLmpvaW5EcmFmdC5vcGVyYXRvclxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uKTtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uKTtcbiAgICByZXR1cm4gISFzb3VyY2UgJiYgISF0YXJnZXQgJiYgc291cmNlLnRhYmxlICE9PSB0YXJnZXQudGFibGU7XG4gIH1cbiAgZ2V0IGNhblNhdmVTb3J0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc29ydERyYWZ0LmNvbHVtbiAmJiAhIXRoaXMuc29ydERyYWZ0LmRpcmVjdGlvbjtcbiAgfVxuICBnZXQgY2FuU2F2ZUZpZWxkTW9kYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5maWVsZE1vZGFsRHJhZnRzLmxlbmd0aCAmJiAhdGhpcy5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbjtcbiAgfVxuICBnZXQgY2FuU2F2ZUZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmJ1aWxkRmlsdGVyRnJvbURyYWZ0KCk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxDYW5Qcm9jZWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkTW9kYWxEcmFmdHMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgY2FuT3BlbkZpZWxkQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZEl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RhbFN0ZXAgPT09IFwic2VsZWN0XCI7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyTW9kYWxTdGVwID09PSBcImNvbmZpZ3VyZVwiO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFJldmlld1N0ZXBBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyTW9kYWxTdGVwID09PSBcInJldmlld1wiO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbENhblByb2NlZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyTW9kYWxNb2RlID09PSBGSUxURVJfTU9ERV9ET01BSU4gfHwgISF0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbjtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxDYW5SZXZpZXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FuU2F2ZUZpbHRlcjtcbiAgfVxuICBnZXQgZmlsdGVyTmVlZHNWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIVtcIkVNUFRZXCIsIFwiTk9UX0VNUFRZXCJdLmluY2x1ZGVzKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IpO1xuICB9XG4gIGdldCBmaWx0ZXJDb25uZWN0b3JEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXF1ZW5jZUluZGV4ID09PSAwO1xuICB9XG4gIGdldCBmaWx0ZXJDb25uZWN0b3JEaXNhYmxlZFJlYXNvbigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5maWx0ZXJDb25uZWN0b3JEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIEVNUFRZX1ZBTFVFO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kaXNhYmxlZFJlYXNvbnMuY29ubmVjdG9yYCxcbiAgICAgIFwiTyBwcmltZWlybyBmaWx0cm8gc2VtcHJlIGluaWNpYSBvIFdIRVJFLCBwb3IgaXNzbyBvIGNvbmVjdG9yIGZpY2EgdHJhdmFkby5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck9wZXJhdG9yRGlzYWJsZWRSZWFzb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pIHtcbiAgICAgIHJldHVybiBFTVBUWV9WQUxVRTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZGlzYWJsZWRSZWFzb25zLm9wZXJhdG9yYCxcbiAgICAgIFwiU2VsZWNpb25lIHVtIGNhbXBvIG5hIGV0YXBhIGFudGVyaW9yIHBhcmEgbGliZXJhciBzb21lbnRlIG9zIG9wZXJhZG9yZXMgY29tcGF0aXZlaXMuXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJWYWx1ZVR5cGVEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZmlsdGVyRHJhZnQuY29sdW1uIHx8ICF0aGlzLmZpbHRlck5lZWRzVmFsdWU7XG4gIH1cbiAgZ2V0IGZpbHRlclZhbHVlVHlwZURpc2FibGVkUmVhc29uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZGlzYWJsZWRSZWFzb25zLnZhbHVlVHlwZVdpdGhvdXRDb2x1bW5gLFxuICAgICAgICBcIkVzY29saGEgdW0gY2FtcG8gZSB1bSBvcGVyYWRvciBhbnRlcyBkZSBkZWZpbmlyIGNvbW8gbyB2YWxvciBzZXJhIGluZm9ybWFkby5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZGlzYWJsZWRSZWFzb25zLnZhbHVlVHlwZVdpdGhvdXRWYWx1ZWAsXG4gICAgICAgIFwiTyBvcGVyYWRvciBhdHVhbCBuYW8gdXNhIHZhbG9yLCBlbnRhbyB0aXBvIGRlIHZhbG9yIGUgZW50cmFkYSBmaWNhbSBvY3VsdG9zLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBFTVBUWV9WQUxVRTtcbiAgfVxuICBnZXQgZmlsdGVyT3BlcmF0b3JUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMub3BlcmF0b3JEZWZhdWx0YCxcbiAgICAgICAgXCJPcyBvcGVyYWRvcmVzIG11ZGFtIGNvbmZvcm1lIG8gdGlwbyBkbyBjYW1wbyBzZWxlY2lvbmFkby5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pO1xuICAgIGxldCBvcGVyYXRvcktleTogc3RyaW5nO1xuICAgIGlmICh0aGlzLmlzTnVtZXJpY1R5cGUoY29sdW1uPy5kYXRhVHlwZSkpIHtcbiAgICAgIG9wZXJhdG9yS2V5ID0gXCJvcGVyYXRvck51bWVyaWNcIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNEYXRlVHlwZShjb2x1bW4/LmRhdGFUeXBlKSkge1xuICAgICAgb3BlcmF0b3JLZXkgPSBcIm9wZXJhdG9yRGF0ZVwiO1xuICAgIH0gZWxzZSBpZiAoKGNvbHVtbj8uZGF0YVR5cGUgPz8gRU1QVFlfVkFMVUUpLnRvTG93ZXJDYXNlKCkgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBvcGVyYXRvcktleSA9IFwib3BlcmF0b3JCb29sZWFuXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wZXJhdG9yS2V5ID0gXCJvcGVyYXRvclRleHRcIjtcbiAgICB9XG5cbiAgICBjb25zdCBmYWxsYmFja0J5S2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgb3BlcmF0b3JOdW1lcmljOiBcIkNhbXBvcyBudW1lcmljb3MgcGVybWl0ZW0gY29tcGFyYWNvZXMsIGZhaXhhcyBlIGxpc3Rhcy5cIixcbiAgICAgIG9wZXJhdG9yRGF0ZTogXCJDYW1wb3MgZGUgZGF0YSBlIGhvcmEgcGVybWl0ZW0gY29tcGFyYWNvZXMgY3Jvbm9sb2dpY2FzIGUgaW50ZXJ2YWxvLlwiLFxuICAgICAgb3BlcmF0b3JCb29sZWFuOiBcIkNhbXBvcyBib29sZWFub3MgYWNlaXRhbSBjb21wYXJhY2FvIGRpcmV0YSBvdSB2ZXJpZmljYWNhbyBkZSB2YXppby5cIixcbiAgICAgIG9wZXJhdG9yVGV4dDogXCJDYW1wb3MgdGV4dHVhaXMgYWNlaXRhbSBidXNjYSBwb3IgdHJlY2hvLCBwcmVmaXhvLCBzdWZpeG8gZSBsaXN0YXMuXCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLiR7b3BlcmF0b3JLZXl9YCxcbiAgICAgIGZhbGxiYWNrQnlLZXlbb3BlcmF0b3JLZXldXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyVmFsdWVUeXBlVG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnZhbHVlVHlwZURlZmF1bHRgLFxuICAgICAgICBcIlVzZSB2YWxvciBkaWdpdGFkbyBwYXJhIGNvbXBhcmFyIGFnb3JhIG91IHBhcmFtZXRybyBwYXJhIHBlZGlyIG8gdmFsb3IgZW0gdGVtcG8gZGUgZXhlY3VjYW8uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZpbHRlck5lZWRzVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnZhbHVlVHlwZU5vdFJlcXVpcmVkYCxcbiAgICAgICAgXCJDb20gZXN0ZSBvcGVyYWRvciBvIGZpbHRybyBuYW8gcHJlY2lzYSByZWNlYmVyIHZhbG9yLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy50b29sdGlwcy52YWx1ZVR5cGVgLFxuICAgICAgXCJWYWxvciBkaWdpdGFkbyBzYWx2YSB1bWEgY29tcGFyYWNhbyBmaXhhLiBQYXJhbWV0cm8gZGVpeGEgbyB2YWxvciBhYmVydG8gcGFyYSBwcmVlbmNoaW1lbnRvIGZ1dHVyby5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlckNvbm5lY3RvclRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMuY29ubmVjdG9yYCxcbiAgICAgIFwiQ29uZWN0b3IgZGVmaW5lIGNvbW8gZXN0YSByZWdyYSBzZSBsaWdhIGFvIGZpbHRybyBhbnRlcmlvcjogQU5EIHJlc3RyaW5nZSwgT1IgYW1wbGlhLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyT3B0aW9uYWxUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLm9wdGlvbmFsYCxcbiAgICAgIFwiTWFycXVlIGNvbW8gb3BjaW9uYWwgcXVhbmRvIGEgcmVncmEgcHVkZXIgc2VyIGlnbm9yYWRhIHNlbSBpbnZhbGlkYXIgYSBleGVjdWNhby5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlckRvbWFpbkV4cHJlc3Npb25Ub29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLmRvbWFpbkV4cHJlc3Npb25gLFxuICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pbyBlbnRyYSBjb21vIGNvbmRpY2FvIG1hbnVhbCBubyBXSEVSRS4gVXNlIHF1YW5kbyBhIHJlZ3JhIG5hbyBjb3ViZXIgbm9zIG9wZXJhZG9yZXMgcGFkcmFvLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyVmFsdWVJbnB1dFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnBhcmFtZXRlck5hbWVgLFxuICAgICAgICBcIkluZm9ybWUgbyBub21lIHRlY25pY28gcXVlIHNlcmEgdXNhZG8gcGFyYSBwZWRpciBvIHZhbG9yIGVtIHRlbXBvIGRlIGV4ZWN1Y2FvLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIklOXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnZhbHVlc0xpc3RgLFxuICAgICAgICBcIlNlcGFyZSBvcyB2YWxvcmVzIHBvciB2aXJndWxhIHBhcmEgbW9udGFyIGEgbGlzdGEgZmluYWwgZG8gSU4uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiQkVUV0VFTlwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy50b29sdGlwcy5iZXR3ZWVuYCxcbiAgICAgICAgXCJQcmVlbmNoYSBpbmljaW8gZSBmaW0gcGFyYSBtb250YXIgbyBpbnRlcnZhbG8gY29tcGxldG8uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnZhbHVlYCxcbiAgICAgIFwiTyB2YWxvciBmaW5hbCByZXNwZWl0YSBvIHRpcG8gZG8gY2FtcG8gZSBvIG9wZXJhZG9yIGVzY29saGlkby5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNob3dGaWx0ZXJWYWx1ZVRleHRib3goKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNWYWx1ZU1vZGUgPSB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJ2YWx1ZVwiICYmIHRoaXMuZmlsdGVyTmVlZHNWYWx1ZTtcbiAgICByZXR1cm4gKFxuICAgICAgaXNWYWx1ZU1vZGUgJiZcbiAgICAgICF0aGlzLnNob3dGaWx0ZXJWYWx1ZXNUZXh0Ym94ICYmXG4gICAgICAhdGhpcy5zaG93RmlsdGVyQmV0d2VlbklucHV0cyAmJlxuICAgICAgIXRoaXMuc2hvd0ZpbHRlckJvb2xlYW5Db21ib2JveFxuICAgICk7XG4gIH1cbiAgZ2V0IHNob3dGaWx0ZXJWYWx1ZXNUZXh0Ym94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJ2YWx1ZVwiICYmXG4gICAgICB0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIklOXCJcbiAgICApO1xuICB9XG4gIGdldCBzaG93RmlsdGVyQmV0d2VlbklucHV0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPT09IFwidmFsdWVcIiAmJlxuICAgICAgdGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciA9PT0gXCJCRVRXRUVOXCJcbiAgICApO1xuICB9XG4gIGdldCBzaG93RmlsdGVyUGFyYW1ldGVyVGV4dGJveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCI7XG4gIH1cbiAgZ2V0IHNob3dGaWx0ZXJCb29sZWFuQ29tYm9ib3goKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKTtcbiAgICByZXR1cm4gKFxuICAgICAgISFjb2x1bW4gJiYgY29sdW1uLmRhdGFUeXBlID09PSBcImJvb2xlYW5cIiAmJiB0aGlzLnNob3dGaWx0ZXJWYWx1ZVRleHRib3hcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJSZXZpZXdJdGVtcygpOiBGaWx0ZXJSZXZpZXdJdGVtW10geyAvLyBOT1NPTkFSIC0gY29tcGxleGl0eTogZXh0cmFjdGlvbiB3b3VsZCByaXNrIGJlaGF2aW9yIGNoYW5nZVxuICAgIGNvbnN0IHZhbHVlVHlwZUxhYmVsID0gdGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgPyB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICApXG4gICAgICA6IHRoaXMucmVzb2x2ZU9wdGlvbkxhYmVsKHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlLCB0aGlzLnZhbHVlVHlwZU9wdGlvbnMpO1xuXG4gICAgY29uc3QgaXRlbXM6IEZpbHRlclJldmlld0l0ZW1bXSA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwibW9kZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMudHlwZWAsXG4gICAgICAgICAgXCJUaXBvXCJcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyTW9kYWxNb2RlID09PSBGSUxURVJfTU9ERV9ET01BSU5cbiAgICAgICAgICA/IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgICAgICAgIFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIlxuICAgICAgICAgIClcbiAgICAgICAgICA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLm1vZGVzLmNvbmRpdGlvbmAsXG4gICAgICAgICAgICBcIkZpbHRyb1wiXG4gICAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBcImNvbm5lY3RvclwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMuY29ubmVjdG9yYCxcbiAgICAgICAgICBcIkNvbmVjdG9yXCJcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyQ29ubmVjdG9yRGlzYWJsZWRcbiAgICAgICAgICA/IFwiV0hFUkVcIlxuICAgICAgICAgIDogdGhpcy5yZXNvbHZlT3B0aW9uTGFiZWwodGhpcy5maWx0ZXJEcmFmdC5jb25uZWN0b3IsIHRoaXMuZmlsdGVyQ29ubmVjdG9yT3B0aW9ucyksXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgaXRlbXMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcImV4cHJlc3Npb25cIixcbiAgICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpZWxkcy5kb21haW5FeHByZXNzaW9uYCxcbiAgICAgICAgICAgIFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIlxuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRHJhZnQuZG9tYWluRXhwcmVzc2lvbi50cmltKCkgfHwgXCItXCIsXG4gICAgICAgICAgZW1waGFzaXplOiBcImNvZGVcIixcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJmaWVsZFwiLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLmZpZWxkYCxcbiAgICAgICAgICAgIFwiQ2FtcG9cIlxuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID8gdGhpcy5yZXNvbHZlQ29sdW1uUGF0aCh0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbikgOiBcIi1cIixcbiAgICAgICAgICBlbXBoYXNpemU6IFwicGF0aFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwib3BlcmF0b3JcIixcbiAgICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpZWxkcy5vcGVyYXRvcmAsXG4gICAgICAgICAgICBcIk9wZXJhZG9yXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnJlc29sdmVGaWx0ZXJPcGVyYXRvckxhYmVsKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwidmFsdWVUeXBlXCIsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMudmFsdWVUeXBlYCxcbiAgICAgICAgICAgIFwiVGlwbyBkZSB2YWxvclwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJOZWVkc1ZhbHVlID8gdmFsdWVUeXBlTGFiZWwgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLm5vbmVgLFxuICAgICAgICAgICAgXCJTZW0gdmFsb3JcIlxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJ2YWx1ZVwiLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLnZhbHVlYCxcbiAgICAgICAgICAgIFwiVmFsb3JcIlxuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6IHRoaXMucmVzb2x2ZUZpbHRlckRyYWZ0RGlzcGxheVZhbHVlKCkgfHwgXCItXCIsXG4gICAgICAgICAgZW1waGFzaXplOiB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJwYXJhbWV0ZXJcIiA/IFwiY29kZVwiIDogXCJkZWZhdWx0XCIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIGl0ZW1zLnB1c2goe1xuICAgICAgaWQ6IFwib3B0aW9uYWxcIixcbiAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMub3B0aW9uYWxgLFxuICAgICAgICBcIk9wY2lvbmFsXCJcbiAgICAgICksXG4gICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEcmFmdC5vcHRpb25hbFxuICAgICAgICA/IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLnllc2AsXG4gICAgICAgICAgXCJTaW1cIlxuICAgICAgICApXG4gICAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMubm9gLFxuICAgICAgICAgIFwiTmFvXCJcbiAgICAgICAgKSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICBnZXQgZmlsdGVyUmV2aWV3UHJldmlld0xhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJldmlldyA9IHRoaXMucmVzb2x2ZUZpbHRlckRyYWZ0U3FsUHJldmlldygpO1xuICAgIHJldHVybiBwcmV2aWV3IHx8IFwiLVwiO1xuICB9XG4gIGdldCBzb3VyY2VNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlTW9kYWxTdGVwID09PSBcInNlbGVjdFwiO1xuICB9XG4gIGdldCBzb3VyY2VNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZU1vZGFsU3RlcCA9PT0gXCJjb25maWd1cmVcIjtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxDYW5Qcm9jZWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IGNhbk9wZW5Tb3VyY2VDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZUl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IHNvdXJjZUl0ZW1zKCk6IFNvdXJjZVZpZXdJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlVGFibGVEaXNwbGF5UGFydHMoaXRlbS50YWJsZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogaXRlbS50YWJsZSxcbiAgICAgICAgZGJMYWJlbDogcGFydHMuZGJMYWJlbCxcbiAgICAgICAgdGFibGVMYWJlbDogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgYWxpYXM6IGl0ZW0uYWxpYXMsXG4gICAgICAgIGhhc0N1c3RvbUFsaWFzOiB0aGlzLmhhc0N1c3RvbUFsaWFzKGl0ZW0udGFibGUsIGl0ZW0uYWxpYXMpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxUaW1lbGluZUl0ZW1zKCk6IFRpbWVsaW5lSXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogXCJzZWxlY3RcIixcbiAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWN0aW9ucy5zZWxlY3RUYWJsZXNgLFxuICAgICAgICAgIEZBTExCQUNLX1NFTEVDVF9UQUJMRVNcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLnNvdXJjZXMuc3RlcHMuc2VsZWN0LnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkVzY29saGEgYXMgdGFiZWxhcyBxdWUgZGV2ZW0gYWxpbWVudGFyIGEgdmlzYW8gYW50ZXMgZGUgY29uZmlndXJhciBvcyBhbGlhc2VzLlwiXG4gICAgICAgICksXG4gICAgICAgIGluZGljYXRvckxhYmVsOiBcIjFcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBcImNvbmZpZ3VyZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLmNvbmZpZ3VyZUFsaWFzZXNgLFxuICAgICAgICAgIFwiQ29uZmlndXJhciBhbGlhc2VzXCJcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLnNvdXJjZXMuc3RlcHMuY29uZmlndXJlLnN1YnRpdGxlYCxcbiAgICAgICAgICBcIlJldmlzZSBvcyBhbGlhc2VzIHN1Z2VyaWRvcyBlIGFqdXN0ZSBvcyBub21lcyBmaW5haXMgZGFzIHRhYmVsYXMgc2VsZWNpb25hZGFzLlwiXG4gICAgICAgICksXG4gICAgICAgIGluZGljYXRvckxhYmVsOiBcIjJcIixcbiAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLnNvdXJjZU1vZGFsQ2FuUHJvY2VlZCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLnNvdXJjZXMudGl0bGVgLFxuICAgICAgRkFMTEJBQ0tfU0VMRUNUX1RBQkxFU1xuICAgICk7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsVGltZWxpbmVBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjY2Vzc2liaWxpdHkuc291cmNlTW9kYWxUaW1lbGluZWAsXG4gICAgICBcIkV0YXBhcyBkYSBjb25maWd1cmFjYW8gZGFzIHRhYmVsYXNcIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsUGlja2xpc3RJdGVtcygpOiBUYWJsZVBpY2tsaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZFRhYmxlUGlja2xpc3RJdGVtcyh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSk7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsU2VsZWN0ZWRQaWNrbGlzdElkcygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlTW9kYWxEcmFmdHNcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHRoaXMucmVzb2x2ZVRhYmxlUGlja2xpc3RJZChpdGVtLnRhYmxlKSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpdGVtKTogaXRlbSBpcyBudW1iZXIgPT4gdHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIgJiYgaXRlbSA+IDBcbiAgICAgICk7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsQ29uZmlndXJlZEl0ZW1zKCk6IFNvdXJjZUNvbmZpZ3VyZWRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnJlc29sdmVUYWJsZURpc3BsYXlQYXJ0cyhpdGVtLnRhYmxlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpdGVtLnRhYmxlLFxuICAgICAgICB0YWJsZTogaXRlbS50YWJsZSxcbiAgICAgICAgZGJMYWJlbDogcGFydHMuZGJMYWJlbCxcbiAgICAgICAgdGFibGVMYWJlbDogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgYWxpYXM6IGl0ZW0uYWxpYXMsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGdldCBqb2luSXRlbXMoKTogSm9pblZpZXdJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS5zb3VyY2VDb2x1bW4pO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS50YXJnZXRDb2x1bW4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGAke2l0ZW0uc291cmNlQ29sdW1ufS0ke2l0ZW0udGFyZ2V0Q29sdW1ufS0ke2luZGV4fWAsXG4gICAgICAgIHNvdXJjZVRhYmxlOiBzb3VyY2UudGFibGVMYWJlbCxcbiAgICAgICAgc291cmNlRmllbGQ6IHNvdXJjZS5maWVsZExhYmVsLFxuICAgICAgICBvcGVyYXRvcjogdGhpcy5yZXNvbHZlSm9pbk9wZXJhdG9yTGFiZWwoaXRlbS5vcGVyYXRvciksXG4gICAgICAgIHRhcmdldFRhYmxlOiB0YXJnZXQudGFibGVMYWJlbCxcbiAgICAgICAgdGFyZ2V0RmllbGQ6IHRhcmdldC5maWVsZExhYmVsLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBnZXQgZ3JvdXBCeUl0ZW1zKCk6IFNpbXBsZVZpZXdJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeS5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICBpZDogaXRlbSxcbiAgICAgIC4uLnRoaXMucmVzb2x2ZUNvbHVtblBhcnRzKGl0ZW0pLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgZmllbGRJdGVtc0xlZ2FjeSgpOiB1bmtub3duW10ge1xuICAgIHJldHVybiB0aGlzLmdldE9yZGVyZWRGaWVsZEVudHJpZXMoKS5tYXAoKGVudHJ5LCBpbmRleCkgPT4gKHtcbiAgICAgIGlkOiBlbnRyeS5jb2x1bW4sXG4gICAgICBsYWJlbDogYCR7aW5kZXggKyAxfcKwICR7dGhpcy5yZXNvbHZlQ29sdW1uUGF0aChlbnRyeS5jb2x1bW4pfWAsXG4gICAgICBvcmRlcjogaW5kZXgsXG4gICAgfSkpO1xuICB9XG4gIGdldCBmaWVsZEl0ZW1zKCk6IEZpZWxkVmlld0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3JkZXJlZEZpZWxkRW50cmllcygpLm1hcCgoZW50cnksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBlbnRyeS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUU7XG4gICAgICBjb25zdCBmdW5jdGlvbkFsaWFzID0gZW50cnkuZnVuY3Rpb24/LmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUU7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgJHtlbnRyeS5jb2x1bW59LSR7aW5kZXh9YCxcbiAgICAgICAgc291cmNlSW5kZXg6IGVudHJ5LnNvdXJjZUluZGV4LFxuICAgICAgICBjb2x1bW46IGVudHJ5LmNvbHVtbixcbiAgICAgICAgb3JkZXJMYWJlbDogYCR7aW5kZXggKyAxfcKwYCxcbiAgICAgICAgLi4udGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoZW50cnkuY29sdW1uKSxcbiAgICAgICAgYWxpYXM6IGVudHJ5LmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIHdpZHRoOiBlbnRyeS53aWR0aD8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgIGZ1bmN0aW9uTGFiZWw6IGZ1bmN0aW9uTmFtZSA/IHRoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwoZnVuY3Rpb25OYW1lKSA6IEVNUFRZX1ZBTFVFLFxuICAgICAgICBmdW5jdGlvbkFsaWFzLFxuICAgICAgICBoYXNDdXN0b21Db25maWc6XG4gICAgICAgICAgISFlbnRyeS5hbGlhcz8udHJpbSgpIHx8ICEhZW50cnkud2lkdGg/LnRyaW0oKSB8fCAhIWZ1bmN0aW9uTmFtZSB8fCAhIWZ1bmN0aW9uQWxpYXMsXG4gICAgICAgIG9yZGVyOiBpbmRleCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxTZWxlY3Rpb25Sb3dzKCk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblNlbGVjdGlvblJvd3MoXG4gICAgICB0aGlzLmZpZWxkU2VsZWN0YWJsZUNvbHVtbnMsXG4gICAgICB0aGlzLmZpZWxkTW9kYWxEcmFmdHMubWFwKChpdGVtKSA9PiBpdGVtLmNvbHVtbiksXG4gICAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2gsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbENvbmZpZ3VyZWRJdGVtcygpOiBGaWVsZE1vZGFsQ29uZmlndXJlZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRNb2RhbERyYWZ0cy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZUNvbHVtblBhcnRzKGl0ZW0uY29sdW1uKTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGl0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgIGlkOiBgJHtpdGVtLmNvbHVtbn0tJHtpbmRleH1gLFxuICAgICAgICBjb2x1bW46IGl0ZW0uY29sdW1uLFxuICAgICAgICB0YWJsZUxhYmVsOiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICBmaWVsZExhYmVsOiBwYXJ0cy5maWVsZExhYmVsLFxuICAgICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICB3aWR0aDogaXRlbS53aWR0aD8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICBmdW5jdGlvbkxhYmVsOiBmdW5jdGlvbk5hbWVcbiAgICAgICAgICA/IHRoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwoZnVuY3Rpb25OYW1lKVxuICAgICAgICAgIDogRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uQWxpYXM6IGl0ZW0uZnVuY3Rpb24/LmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsSGFzU2VsZWN0YWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRTZWxlY3RhYmxlQ29sdW1ucy5zb21lKFxuICAgICAgKGl0ZW0pID0+ICF0aGlzLmZpZWxkTW9kYWxEcmFmdHMuc29tZSgoZHJhZnQpID0+IGRyYWZ0LmNvbHVtbiA9PT0gaXRlbS52YWx1ZSlcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsQ2FuU2VsZWN0QWxsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkTW9kYWxTZWxlY3Rpb25Sb3dzLnNvbWUoKGl0ZW0pID0+ICFpdGVtLnNlbGVjdGVkKTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbFBpY2tsaXN0SXRlbXMoKTogQ29sdW1uUGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uUGlja2xpc3RJdGVtcyh0aGlzLmZpZWxkU2VsZWN0YWJsZUNvbHVtbnMpO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsU2VsZWN0ZWRQaWNrbGlzdElkcygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRNb2RhbERyYWZ0c1xuICAgICAgLm1hcCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RJZChpdGVtLmNvbHVtbikpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoaXRlbSk6IGl0ZW0gaXMgbnVtYmVyID0+IHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiICYmIGl0ZW0gPiAwXG4gICAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZE1vZGFsU3RlcCA9PT0gXCJzZWxlY3RcIjtcbiAgfVxuICBnZXQgZmllbGRNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkTW9kYWxTdGVwID09PSBcImNvbmZpZ3VyZVwiO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsVGltZWxpbmVBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjY2Vzc2liaWxpdHkuZmllbGRNb2RhbFRpbWVsaW5lYCxcbiAgICAgIFwiRXRhcGFzIGRhIGNvbmZpZ3VyYWNhbyBkbyBjYW1wb1wiXG4gICAgKTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbFRpbWVsaW5lSXRlbXMoKTogVGltZWxpbmVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiBcInNlbGVjdFwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLnNlbGVjdENvbHVtbnNgLFxuICAgICAgICAgIFwiU2VsZWNpb25hciBjb2x1bmFzXCJcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpZWxkcy5zdWJ0aXRsZWAsXG4gICAgICAgICAgXCJFc2NvbGhhIHVtYSBvdSBtYWlzIGNvbHVuYXMgcGFyYSBleHBvciBubyByZXN1bHRhZG8uXCJcbiAgICAgICAgKSxcbiAgICAgICAgaW5kaWNhdG9yTGFiZWw6IFwiMVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwiY29uZmlndXJlXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmZpZWxkTW9kYWxUaXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpZWxkLnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkFqdXN0ZSBhbGlhcywgbGFyZ3VyYSBlIGZ1bmNhbyBhbnRlcyBkZSBzYWx2YXIgbyBjYW1wby5cIlxuICAgICAgICApLFxuICAgICAgICBpbmRpY2F0b3JMYWJlbDogXCIyXCIsXG4gICAgICAgIGRpc2FibGVkOiAhdGhpcy5maWVsZE1vZGFsRHJhZnRzLmxlbmd0aCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxUaW1lbGluZUFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWNjZXNzaWJpbGl0eS5maWx0ZXJNb2RhbFRpbWVsaW5lYCxcbiAgICAgIFwiRXRhcGFzIGRhIGNvbmZpZ3VyYWNhbyBkbyBmaWx0cm9cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsVGltZWxpbmVJdGVtcygpOiBUaW1lbGluZUl0ZW1bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwic2VsZWN0XCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuc3RlcHMuc2VsZWN0LnRpdGxlYCxcbiAgICAgICAgICBcIlNlbGVjaW9uYXIgYmFzZVwiXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuc3RlcHMuc2VsZWN0LnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkVzY29saGEgbyB0aXBvIGRlIGZpbHRybyBlIGRlZmluYSBvIGNhbXBvIGluaWNpYWwgYW50ZXMgZGUgY29uZmlndXJhci5cIlxuICAgICAgICApLFxuICAgICAgICBpbmRpY2F0b3JMYWJlbDogXCIxXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogXCJjb25maWd1cmVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpbHRlci5zdGVwcy5jb25maWd1cmUudGl0bGVgLFxuICAgICAgICAgIFwiQ29uZmlndXJhciBmaWx0cm9cIlxuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmlsdGVyLnN0ZXBzLmNvbmZpZ3VyZS5zdWJ0aXRsZWAsXG4gICAgICAgICAgXCJEZWZpbmEgb3BlcmFkb3IsIHZhbG9yIGUgY29tcG9ydGFtZW50byBmaW5hbCBkbyBmaWx0cm8uXCJcbiAgICAgICAgKSxcbiAgICAgICAgaW5kaWNhdG9yTGFiZWw6IFwiMlwiLFxuICAgICAgICBkaXNhYmxlZDogIXRoaXMuZmlsdGVyTW9kYWxDYW5Qcm9jZWVkLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwicmV2aWV3XCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuc3RlcHMucmV2aWV3LnRpdGxlYCxcbiAgICAgICAgICBcIlJldmlzYXIgcmVncmFcIlxuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmlsdGVyLnN0ZXBzLnJldmlldy5zdWJ0aXRsZWAsXG4gICAgICAgICAgXCJDb25maXJtZSBvIHJlc3VtbyBmaW5hbCBkYSByZWdyYSBhbnRlcyBkZSBzYWx2YXIuXCJcbiAgICAgICAgKSxcbiAgICAgICAgaW5kaWNhdG9yTGFiZWw6IFwiM1wiLFxuICAgICAgICBkaXNhYmxlZDogIXRoaXMuZmlsdGVyTW9kYWxDYW5SZXZpZXcsXG4gICAgICB9LFxuICAgIF07XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsQ29uZmlndXJlQWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMubmV4dFN0ZXBgLFxuICAgICAgXCJQcm94aW1hIGV0YXBhXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFJldmlld0FjdGlvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLnJldmlld1J1bGVgLFxuICAgICAgXCJSZXZpc2FyIHJlZ3JhXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFNlbGVjdGlvbkhlbHBlclRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuZG9tYWluU2VsZWN0aW9uSGludGAsXG4gICAgICAgIFwiQSBleHByZXNzYW8gZGUgZG9taW5pbyBzZXJhIGNvbmZpZ3VyYWRhIG5hIHByb3hpbWEgZXRhcGEuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmlsdGVyLmNvbmRpdGlvblNlbGVjdGlvbkhpbnRgLFxuICAgICAgXCJTZWxlY2lvbmUgdW0gY2FtcG8gcGFyYSBsaWJlcmFyIGEgY29uZmlndXJhY2FvIGRldGFsaGFkYSBkbyBmaWx0cm8uXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsRnVuY3Rpb25PcHRpb25zKCk6IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbltdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0ZXh0OiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5ub25lYCxcbiAgICAgICAgICBcIlNlbSBmdW5jYW9cIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogRU1QVFlfVkFMVUUsXG4gICAgICB9LFxuICAgICAgLi4udGhpcy5mdW5jdGlvbk9wdGlvbnMsXG4gICAgXTtcbiAgfVxuICBnZXQgc29ydEl0ZW1zKCk6IFNvcnRWaWV3SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvcnRpbmcubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgIGlkOiBgJHtpdGVtLmNvbHVtbn0tJHtpdGVtLmZ1bmN0aW9uTmFtZSA/PyBFTVBUWV9WQUxVRX0tJHtpdGVtLmRpcmVjdGlvbn0tJHtpbmRleH1gLFxuICAgICAgLi4udGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS5jb2x1bW4pLFxuICAgICAgZnVuY3Rpb25OYW1lOiBpdGVtLmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb25MYWJlbDogaXRlbS5mdW5jdGlvbk5hbWVcbiAgICAgICAgPyB0aGlzLnJlc29sdmVGdW5jdGlvbkxhYmVsKGl0ZW0uZnVuY3Rpb25OYW1lKVxuICAgICAgICA6IEVNUFRZX1ZBTFVFLFxuICAgICAgZGlyZWN0aW9uOiB0aGlzLnJlc29sdmVPcHRpb25MYWJlbChcbiAgICAgICAgaXRlbS5kaXJlY3Rpb24sXG4gICAgICAgIHRoaXMuc29ydERpcmVjdGlvbk9wdGlvbnNcbiAgICAgICksXG4gICAgfSkpO1xuICB9XG4gIGdldCBmaWx0ZXJJdGVtc0xlZ2FjeSgpOiB1bmtub3duW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVycy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgaWQ6IGAke2l0ZW0udmFsdWVUeXBlfS0ke2l0ZW0uY29sdW1ufS0ke2luZGV4fWAsXG4gICAgICB0aXRsZTpcbiAgICAgICAgaXRlbS52YWx1ZVR5cGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgICAgID8gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICAgICAgKVxuICAgICAgICAgIDogYCR7dGhpcy5yZXNvbHZlQ29sdW1uTGFiZWwoXG4gICAgICAgICAgICBpdGVtLmNvbHVtblxuICAgICAgICAgICl9IMK3ICR7dGhpcy5yZXNvbHZlRmlsdGVyT3BlcmF0b3JMYWJlbChpdGVtLm9wZXJhdG9yKX1gLFxuICAgICAgc3VidGl0bGU6IHRoaXMucmVzb2x2ZUZpbHRlckRpc3BsYXlWYWx1ZShpdGVtKSxcbiAgICAgIG9wdGlvbmFsOiBpdGVtLm9wdGlvbmFsLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgZmlsdGVySXRlbXMoKTogRmlsdGVyVmlld0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWx0ZXJzLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID1cbiAgICAgICAgaXRlbS52YWx1ZVR5cGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgZGJMYWJlbDogRU1QVFlfVkFMVUUsXG4gICAgICAgICAgICB0YWJsZUxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgICAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZmllbGRMYWJlbDogRU1QVFlfVkFMVUUsXG4gICAgICAgICAgfVxuICAgICAgICAgIDogdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS5jb2x1bW4pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogYCR7aXRlbS52YWx1ZVR5cGV9LSR7aXRlbS5jb2x1bW59LSR7aW5kZXh9YCxcbiAgICAgICAgLi4ucGFydHMsXG4gICAgICAgIG9wZXJhdG9yTGFiZWw6XG4gICAgICAgICAgaXRlbS52YWx1ZVR5cGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgICAgICAgPyBFTVBUWV9WQUxVRVxuICAgICAgICAgICAgOiB0aGlzLnJlc29sdmVGaWx0ZXJPcGVyYXRvckxhYmVsKGl0ZW0ub3BlcmF0b3IpLFxuICAgICAgICBzdWJ0aXRsZTogdGhpcy5yZXNvbHZlRmlsdGVyRGlzcGxheVZhbHVlKGl0ZW0pLFxuICAgICAgICBvcHRpb25hbDogaXRlbS5vcHRpb25hbCxcbiAgICAgICAgaXNEb21haW46IGl0ZW0udmFsdWVUeXBlID09PSBGSUxURVJfTU9ERV9ET01BSU4sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGdldCBzZWxlY3Rpb25Nb2RhbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID09PSBcInRhYmxlc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLnNvdXJjZXMudGl0bGVgLFxuICAgICAgICBGQUxMQkFDS19TRUxFQ1RfVEFCTEVTXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RhbE1vZGUgPT09IFwiZmllbGRzXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmllbGRzLnRpdGxlYCxcbiAgICAgICAgXCJTZWxlY2lvbmFyIGNhbXBvc1wiXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5ncm91cEJ5LnRpdGxlYCxcbiAgICAgIFwiU2VsZWNpb25hciBHcm91cCBCeVwiXG4gICAgKTtcbiAgfVxuICBnZXQgbW9kYWxTZWFyY2hMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLnNlYXJjaGAsXG4gICAgICBcIkJ1c2NhclwiXG4gICAgKTtcbiAgfVxuICBnZXQgbW9kYWxTZWFyY2hQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyYCxcbiAgICAgIFwiQnVzY2FyXCJcbiAgICApO1xuICB9XG4gIGdldCBtb2RhbE5hbWVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLm5hbWVgLFxuICAgICAgXCJOb21lXCJcbiAgICApO1xuICB9XG4gIGdldCBtb2RhbFR5cGVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLnR5cGVgLFxuICAgICAgXCJUaXBvXCJcbiAgICApO1xuICB9XG4gIGdldCBtb2RhbFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLnNlbGVjdGAsXG4gICAgICBcIlNlbGVjaW9uYXJcIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmNhcmRzLmZpbHRlcnMudGl0bGVgLFxuICAgICAgXCJGaWx0cm9zXCJcbiAgICApO1xuICB9XG4gIGdldCBzb3J0TW9kYWxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uY2FyZHMuc29ydGluZy50aXRsZWAsXG4gICAgICBcIk9yZGVuYWNhb1wiXG4gICAgKTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmllbGQudGl0bGVgLFxuICAgICAgXCJDb25maWd1cmFyIGNhbXBvXCJcbiAgICApO1xuICB9XG4gIGdldCBzZWxlY3Rpb25Nb2RhbFJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJ0YWJsZXNcIikge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRUYWJsZVNlbGVjdGlvblJvd3MoXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMsXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxTZWFyY2hcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJmaWVsZHNcIikge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5TZWxlY3Rpb25Sb3dzKFxuICAgICAgICB0aGlzLmZpZWxkU2VsZWN0YWJsZUNvbHVtbnMsXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMsXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxTZWFyY2hcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICAgIHRoaXMuZ3JvdXBCeVNlbGVjdGFibGVDb2x1bW5zLFxuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyxcbiAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxTZWFyY2hcbiAgICApO1xuICB9XG4gIGdldCBzZWxlY3Rpb25Nb2RhbFBpY2tsaXN0SXRlbXMoKTogQ29sdW1uUGlja2xpc3RJdGVtW10ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJmaWVsZHNcIikge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuZmllbGRTZWxlY3RhYmxlQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuZ3JvdXBCeVNlbGVjdGFibGVDb2x1bW5zKTtcbiAgfVxuICBnZXQgc2VsZWN0aW9uTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RhbElkc1xuICAgICAgLm1hcCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RJZChpdGVtKSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpdGVtKTogaXRlbSBpcyBudW1iZXIgPT4gdHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIgJiYgaXRlbSA+IDBcbiAgICAgICk7XG4gIH1cbiAgZ2V0IGpvaW5Tb3VyY2VSb3dzKCk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblNlbGVjdGlvblJvd3MoXG4gICAgICB0aGlzLmF2YWlsYWJsZUNvbHVtbnMsXG4gICAgICB0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4gPyBbdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uXSA6IFtdLFxuICAgICAgdGhpcy5qb2luU291cmNlU2VhcmNoLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG4gIGdldCBqb2luU291cmNlUGlja2xpc3RJdGVtcygpOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuYXZhaWxhYmxlQ29sdW1ucyk7XG4gIH1cbiAgZ2V0IGpvaW5Tb3VyY2VTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBzZWxlY3RlZElkID0gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RJZCh0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4pO1xuICAgIHJldHVybiB0eXBlb2Ygc2VsZWN0ZWRJZCA9PT0gXCJudW1iZXJcIiAmJiBzZWxlY3RlZElkID4gMFxuICAgICAgPyBbc2VsZWN0ZWRJZF1cbiAgICAgIDogW107XG4gIH1cbiAgZ2V0IGpvaW5UYXJnZXRSb3dzKCk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uKTtcbiAgICBjb25zdCBpdGVtcyA9IHNvdXJjZVxuICAgICAgPyB0aGlzLmF2YWlsYWJsZUNvbHVtbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRhYmxlICE9PSBzb3VyY2UudGFibGUpXG4gICAgICA6IHRoaXMuYXZhaWxhYmxlQ29sdW1ucztcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblNlbGVjdGlvblJvd3MoXG4gICAgICBpdGVtcyxcbiAgICAgIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiA/IFt0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW5dIDogW10sXG4gICAgICB0aGlzLmpvaW5UYXJnZXRTZWFyY2gsXG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cbiAgZ2V0IGpvaW5UYXJnZXRTZWxlY3RhYmxlQ29sdW1ucygpOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbik7XG4gICAgcmV0dXJuIHNvdXJjZVxuICAgICAgPyB0aGlzLmF2YWlsYWJsZUNvbHVtbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRhYmxlICE9PSBzb3VyY2UudGFibGUpXG4gICAgICA6IHRoaXMuYXZhaWxhYmxlQ29sdW1ucztcbiAgfVxuICBnZXQgam9pblRhcmdldFBpY2tsaXN0SXRlbXMoKTogQ29sdW1uUGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uUGlja2xpc3RJdGVtcyh0aGlzLmpvaW5UYXJnZXRTZWxlY3RhYmxlQ29sdW1ucyk7XG4gIH1cbiAgZ2V0IGpvaW5UYXJnZXRTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBzZWxlY3RlZElkID0gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RJZCh0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4pO1xuICAgIHJldHVybiB0eXBlb2Ygc2VsZWN0ZWRJZCA9PT0gXCJudW1iZXJcIiAmJiBzZWxlY3RlZElkID4gMFxuICAgICAgPyBbc2VsZWN0ZWRJZF1cbiAgICAgIDogW107XG4gIH1cbiAgZ2V0IHNvcnRDb2x1bW5Sb3dzKCk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0U2VsZWN0YWJsZUl0ZW1zXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICB0aGlzLm1hdGNoZXNTZWFyY2goXG4gICAgICAgICAgW2l0ZW0udGFibGVMYWJlbCwgaXRlbS5maWVsZExhYmVsLCBpdGVtLm1ldGFdLFxuICAgICAgICAgIHRoaXMuc29ydFNlYXJjaFxuICAgICAgICApXG4gICAgICApXG4gICAgICAubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgbmFtZTogaXRlbS5maWVsZExhYmVsLFxuICAgICAgICBtZXRhOiBpdGVtLm1ldGEsXG4gICAgICAgIHNlbGVjdGVkOlxuICAgICAgICAgIHRoaXMuc29ydERyYWZ0LmNvbHVtbiA9PT0gaXRlbS5jb2x1bW4gJiZcbiAgICAgICAgICAodGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lIHx8IEVNUFRZX1ZBTFVFKSA9PT0gaXRlbS5mdW5jdGlvbk5hbWUsXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgdGFibGVMYWJlbDogaXRlbS50YWJsZUxhYmVsLFxuICAgICAgICBwYXRoVHlwZTogXCJjb2x1bW5cIiBhcyBjb25zdCxcbiAgICAgIH0pKTtcbiAgfVxuICBnZXQgc29ydFBpY2tsaXN0SXRlbXMoKTogU29ydFBpY2tsaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0U2VsZWN0YWJsZUl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XG4gICAgICBpZDogaW5kZXggKyAxLFxuICAgICAgdGl0bGU6IGAke2l0ZW0udGFibGVMYWJlbH0uJHtpdGVtLmZpZWxkTGFiZWx9YCxcbiAgICAgIHRpdGxlUHJlZml4OiBpdGVtLnRhYmxlTGFiZWwsXG4gICAgICB0aXRsZVN1ZmZpeDogaXRlbS5maWVsZExhYmVsLFxuICAgICAgdGl0bGVQcmVmaXhDb2xvcjogVklTVUFMX1NRTF9UQUJMRV9DT0xPUixcbiAgICAgIHRpdGxlU3VmZml4Q29sb3I6IFZJU1VBTF9TUUxfRklFTERfQ09MT1IsXG4gICAgICBiYWRnZTogaXRlbS5tZXRhLFxuICAgICAgYmFkZ2VDb2xvcjogaXRlbS5mdW5jdGlvbk5hbWVcbiAgICAgICAgPyBQSUNLTElTVF9GVU5DVElPTl9CQURHRV9DT0xPUlxuICAgICAgICA6IFBJQ0tMSVNUX0RBVEFfVFlQRV9CQURHRV9DT0xPUixcbiAgICAgIHNlbGVjdGlvbklkOiBpdGVtLmlkLFxuICAgICAgY29sdW1uOiBpdGVtLmNvbHVtbixcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IHNvcnRTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc29ydFBpY2tsaXN0SXRlbXMuZmluZChcbiAgICAgIChpdGVtKSA9PlxuICAgICAgICBpdGVtLmNvbHVtbiA9PT0gdGhpcy5zb3J0RHJhZnQuY29sdW1uICYmXG4gICAgICAgIGl0ZW0uc2VsZWN0aW9uSWQgPT09XG4gICAgICAgIHRoaXMuYnVpbGRTb3J0U2VsZWN0aW9uSWQoXG4gICAgICAgICAgdGhpcy5zb3J0RHJhZnQuY29sdW1uLFxuICAgICAgICAgIHRoaXMuc29ydERyYWZ0LmZ1bmN0aW9uTmFtZSB8fCBFTVBUWV9TT1JUX0ZVTkNUSU9OXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkID8gW3NlbGVjdGVkLmlkXSA6IFtdO1xuICB9XG4gIGdldCBmaWx0ZXJDb2x1bW5Sb3dzKCk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblNlbGVjdGlvblJvd3MoXG4gICAgICB0aGlzLmF2YWlsYWJsZUNvbHVtbnMsXG4gICAgICB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbiA/IFt0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbl0gOiBbXSxcbiAgICAgIHRoaXMuZmlsdGVyU2VhcmNoLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFBpY2tsaXN0SXRlbXMoKTogQ29sdW1uUGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uUGlja2xpc3RJdGVtcyh0aGlzLmF2YWlsYWJsZUNvbHVtbnMpO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFNlbGVjdGVkUGlja2xpc3RJZHMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdElkKHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKTtcbiAgICByZXR1cm4gdHlwZW9mIHNlbGVjdGVkSWQgPT09IFwibnVtYmVyXCIgJiYgc2VsZWN0ZWRJZCA+IDBcbiAgICAgID8gW3NlbGVjdGVkSWRdXG4gICAgICA6IFtdO1xuICB9XG4gIGdldCBzb3J0Q29sdW1uU3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvcnREcmFmdC5jb2x1bW5cbiAgICAgID8gdGhpcy5yZXNvbHZlU29ydERyYWZ0TGFiZWwoKVxuICAgICAgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMuZW1wdHlTZWxlY3Rpb25gLFxuICAgICAgICBGQUxMQkFDS19FTVBUWV9TRUxFQ1RJT05cbiAgICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlckNvbHVtblN1bW1hcnkoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtblxuICAgICAgPyB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKVxuICAgICAgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMuZW1wdHlTZWxlY3Rpb25gLFxuICAgICAgICBGQUxMQkFDS19FTVBUWV9TRUxFQ1RJT05cbiAgICAgICk7XG4gIH1cbiAgZ2V0IGpvaW5Tb3VyY2VTdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtblxuICAgICAgPyB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbilcbiAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLmVtcHR5U2VsZWN0aW9uYCxcbiAgICAgICAgRkFMTEJBQ0tfRU1QVFlfU0VMRUNUSU9OXG4gICAgICApO1xuICB9XG4gIGdldCBqb2luVGFyZ2V0U3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW5cbiAgICAgID8gdGhpcy5yZXNvbHZlQ29sdW1uUGF0aCh0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4pXG4gICAgICA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5lbXB0eVNlbGVjdGlvbmAsXG4gICAgICAgIEZBTExCQUNLX0VNUFRZX1NFTEVDVElPTlxuICAgICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyT3BlcmF0b3JPcHRpb25zKCk6IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbltdIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pO1xuICAgIGlmICghY29sdW1uKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlck9wZXJhdG9yc0ZvckNvbHVtbihjb2x1bW4pLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICB2YWx1ZSxcbiAgICAgIHRleHQ6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXhcbiAgICAgICAgfS5maWx0ZXJzLm9wZXJhdG9ycy4ke3ZhbHVlLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgICAgdGhpcy5odW1hbml6ZUtleSh2YWx1ZSlcbiAgICAgICksXG4gICAgfSkpO1xuICB9XG4gIGdldCBub3JtYWxpemVkRmllbGRzKCk6IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzLm1hcCgoaXRlbSkgPT5cbiAgICAgIHRoaXMubm9ybWFsaXplR2VuZXJhdGVkRmllbGQoaXRlbSlcbiAgICApO1xuICB9XG4gIGdldCBzZWxlY3RlZFNvcnREaXJlY3Rpb25JdGVtKCk6IFNlbGVjdEJ1dHRvbkl0ZW08c3RyaW5nPiB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb25JdGVtcy5maW5kKFxuICAgICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uXG4gICAgICApID8/IG51bGxcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJFeHByZXNzaW9uU3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uLnRyaW0oKTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW5cbiAgICAgID8gdGhpcy5yZXNvbHZlQ29sdW1uUGF0aCh0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbilcbiAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLmVtcHR5U2VsZWN0aW9uYCxcbiAgICAgICAgRkFMTEJBQ0tfRU1QVFlfU0VMRUNUSU9OXG4gICAgICApO1xuICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvclxuICAgICAgPyB0aGlzLnJlc29sdmVGaWx0ZXJPcGVyYXRvckxhYmVsKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IpXG4gICAgICA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5lbXB0eVNlbGVjdGlvbmAsXG4gICAgICAgIEZBTExCQUNLX0VNUFRZX1NFTEVDVElPTlxuICAgICAgKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVzb2x2ZUZpbHRlckRyYWZ0RGlzcGxheVZhbHVlKCk7XG4gICAgcmV0dXJuIFtjb2x1bW4sIG9wZXJhdG9yLCB2YWx1ZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgfCBcIik7XG4gIH1cbiAgZ2V0IGZpbHRlckNvbmZpZ3VyYXRpb25TdW1tYXJ5TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgPyB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICApXG4gICAgICA6IHRoaXMuZmlsdGVyQ29sdW1uU3VtbWFyeTtcbiAgfVxuICBnZXQgZmlsdGVyQmFja1RvU2VsZWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuYmFja1RvU2VsZWN0aW9uYCxcbiAgICAgIFwiVm9sdGFyIHBhcmEgc2VsZWNhb1wiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyQmFja1RvQ29uZmlndXJhdGlvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLmJhY2tUb0NvbmZpZ3VyYXRpb25gLFxuICAgICAgXCJWb2x0YXIgcGFyYSBjb25maWd1cmFjYW9cIlxuICAgICk7XG4gIH1cbiAgZ2V0IHByZXZpZXdDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSB0aGlzLnJlc29sdmVQcmV2aWV3Q29sdW1ucygpO1xuICAgIHJldHVybiBjb25maWdDb2x1bW5zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGZpZWxkOiBpdGVtLmZpZWxkLFxuICAgICAgaGVhZGVyOiBpdGVtLmhlYWRlciA/PyBpdGVtLmZpZWxkLFxuICAgICAgdHlwZTogKGl0ZW0udHlwZSBhcyBUYWJsZUNvbHVtbltcInR5cGVcIl0pID8/IFwidGV4dFwiLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgcHJldmlld1Jvd3MoKTogUm93QmFzZVtdIHtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLnByZXZpZXdDb2x1bW5zXG4gICAgICAubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKVxuICAgICAgLmZpbHRlcigoZmllbGQpOiBmaWVsZCBpcyBzdHJpbmcgPT4gdHlwZW9mIGZpZWxkID09PSBcInN0cmluZ1wiKTtcbiAgICBjb25zdCByb3dzID0gKCh0aGlzLmNvbmZpZy5wcmV2aWV3Py5yb3dzID8/IFtdKSBhcyBSb3dCYXNlW10pLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCBuZXh0OiBSb3dCYXNlID0ge307XG4gICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgbmV4dFtmaWVsZF0gPSByb3dbZmllbGRdID8/IEVNUFRZX1ZBTFVFO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICBpZiAocm93cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiByb3dzO1xuICAgIH1cbiAgICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDUgfSkubWFwKChfLCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV4dDogUm93QmFzZSA9IHt9O1xuICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIG5leHRbZmllbGRdID0gYCR7ZmllbGR9XyR7cm93SW5kZXggKyAxfWA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICB9XG4gIGdldCBwcmV2aWV3VGFibGVDb25maWcoKTogVGFibGVPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm93czogRFlOQU1JQ19WSUVXX0JVSUxERVJfREVGQVVMVF9UQUJMRV9ST1dTLFxuICAgICAgc2hvd1Jvd3NQZXJQYWdlT3B0aW9uczogdHJ1ZSxcbiAgICAgIHJvd3NQZXJQYWdlT3B0aW9uczogUFJFVklFV19ST1dTX1BFUl9QQUdFX09QVElPTlMsXG4gICAgICBlbXB0eVRpdGxlOiBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZW1wdHkucHJldmlld1RpdGxlYCxcbiAgICAgIGVtcHR5U3VidGl0bGU6IGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5lbXB0eS5wcmV2aWV3VGV4dGAsXG4gICAgfSBhcyBUYWJsZU9wdGlvbnM7XG4gIH1cbiAgZ2V0IHNxbFByZXZpZXcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBnZW5lcmF0ZWRTcWwgPSB0aGlzLmJ1aWxkR2VuZXJhdGVkU3FsKCk7XG4gICAgaWYgKGdlbmVyYXRlZFNxbCkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlZFNxbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLm1hbnVhbD8uc3FsID8/IEVNUFRZX1ZBTFVFO1xuICB9XG4gIGdldCBzcWxQcmV2aWV3SGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gXCJzcGxpdFwiID8gXCIxMDAlXCIgOiBcIjI0cmVtXCI7XG4gIH1cbiAgZ2V0IHNxbFByZXZpZXdQYW5lbEhlaWdodCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBcInNwbGl0XCJcbiAgICAgID8gdGhpcy5tZWFzdXJlZFNwbGl0UHJldmlld0hlaWdodFxuICAgICAgOiBudWxsO1xuICB9XG4gIGdldCBwcmV2aWV3VG9nZ2xlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuJHt0aGlzLnByZXZpZXdWaXNpYmxlID8gXCJoaWRlUHJldmlld1wiIDogXCJzaG93UHJldmlld1wiXG4gICAgICB9YCxcbiAgICAgIHRoaXMucHJldmlld1Zpc2libGUgPyBcIk9jdWx0YXIgcHJldmlld1wiIDogXCJWaXN1YWxpemFyIHByZXZpZXdcIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkRmlsdGVyTW9kZUl0ZW0oKTogU2VsZWN0QnV0dG9uSXRlbTxGaWx0ZXJNb2RhbE1vZGU+IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZmlsdGVyTW9kZUl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHRoaXMuZmlsdGVyTW9kYWxNb2RlKSA/P1xuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgdHJhY2tCeUlkKF86IG51bWJlciwgaXRlbTogeyBpZDogc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG4gIHRyYWNrQnlBcnJvdyhfOiBudW1iZXIsIGl0ZW06IEJ1aWxkZXJGbG93QXJyb3cpOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG4gIG9uTGF5b3V0TW9kZUNoYW5nZShpdGVtczogU2VsZWN0QnV0dG9uSXRlbTxCdWlsZGVyTGF5b3V0TW9kZT5bXSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBpdGVtc1swXT8udmFsdWU7XG4gICAgaWYgKG5leHQgPT09IFwic3RhY2tlZFwiIHx8IG5leHQgPT09IFwic3BsaXRcIikge1xuICAgICAgdGhpcy5sYXlvdXRNb2RlID0gbmV4dDtcbiAgICAgIHRoaXMuc3luY1NlbGVjdGVkTGF5b3V0TW9kZUl0ZW1zKCk7XG4gICAgICB0aGlzLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuICB0b2dnbGVQcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1Zpc2libGUgPSAhdGhpcy5wcmV2aWV3VmlzaWJsZTtcbiAgICB0aGlzLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCgpO1xuICB9XG4gIG9uU29ydERpcmVjdGlvbkNoYW5nZShpdGVtczogU2VsZWN0QnV0dG9uSXRlbTxzdHJpbmc+W10pOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gaXRlbXNbMF0/LnZhbHVlO1xuICAgIGlmIChuZXh0KSB7XG4gICAgICB0aGlzLnNvcnREcmFmdC5kaXJlY3Rpb24gPSBuZXh0O1xuICAgICAgdGhpcy5zeW5jU2VsZWN0ZWRTb3J0RGlyZWN0aW9uSXRlbXMoKTtcbiAgICB9XG4gIH1cbiAgaXNGaWVsZERyb3BJbmRpY2F0b3JWaXNpYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggIT09IG51bGwgJiYgdGhpcy5kcmFnUHJldmlld0luZGV4ID09PSBpbmRleDtcbiAgfVxuICBpc0ZpZWxkRHJvcEluZGljYXRvckF0RW5kVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggIT09IG51bGwgJiZcbiAgICAgIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9PT0gdGhpcy5maWVsZEl0ZW1zLmxlbmd0aFxuICAgICk7XG4gIH1cbiAgb25GaWVsZERyYWdTdGFydChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPSB0aGlzLmdldEZpZWxkUHJldmlld1NvdXJjZUluZGV4ZXMoKS5pbmRleE9mKGluZGV4KTtcbiAgfVxuICBvbkZpZWxkRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCF0YXJnZXQgfHwgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBzaG91bGRJbnNlcnRBZnRlciA9IGV2ZW50LmNsaWVudFggPiByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMjtcbiAgICB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPSBNYXRoLm1pbihcbiAgICAgIGluZGV4ICsgKHNob3VsZEluc2VydEFmdGVyID8gMSA6IDApLFxuICAgICAgdGhpcy5maWVsZEl0ZW1zLmxlbmd0aFxuICAgICk7XG4gIH1cbiAgb25GaWVsZERyb3AoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ID09PSBudWxsIHx8IHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPSBudWxsO1xuICAgICAgdGhpcy5kcmFnUHJldmlld0luZGV4ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJldmlld0luZGV4ZXMgPSB0aGlzLmdldEZpZWxkUHJldmlld1NvdXJjZUluZGV4ZXMoKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gcHJldmlld0luZGV4ZXMubWFwKFxuICAgICAgKGl0ZW1JbmRleCkgPT4gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpZWxkc1tpdGVtSW5kZXhdXG4gICAgKTtcbiAgICB0aGlzLmRyYWdnaW5nRmllbGRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5kcmFnUHJldmlld0luZGV4ID0gbnVsbDtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb25GaWVsZERyYWdFbmQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPSBudWxsO1xuICAgIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9IG51bGw7XG4gIH1cbiAgb3BlbkZpZWxkTW9kYWwoaW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID1cbiAgICAgIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiA/IHRoaXMubm9ybWFsaXplZEZpZWxkc1tpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5maWVsZE1vZGFsRHJhZnRzID0gdGhpcy5nZXRPcmRlcmVkRmllbGRFbnRyaWVzKCkubWFwKChpdGVtKSA9PiAoe1xuICAgICAgY29sdW1uOiBpdGVtLmNvbHVtbixcbiAgICAgIGFsaWFzOiBpdGVtLmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICB3aWR0aDogaXRlbS53aWR0aD8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb246IGl0ZW0uZnVuY3Rpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBpdGVtLmZ1bmN0aW9uLmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICAgIGFsaWFzOiBpdGVtLmZ1bmN0aW9uLmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgIH0pKTtcbiAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uID0gbnVsbDtcbiAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdCA9IHtcbiAgICAgIGNvbHVtbjogRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbk5hbWU6IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb25BbGlhczogRU1QVFlfVkFMVUUsXG4gICAgfTtcbiAgICB0aGlzLmZpZWxkTW9kYWxTdGVwID1cbiAgICAgIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiAmJiBjdXJyZW50ID8gXCJjb25maWd1cmVcIiA6IFwic2VsZWN0XCI7XG4gICAgdGhpcy5maWVsZE1vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cbiAgb3BlbkZpZWxkQ29uZmlndXJhdGlvbk1vZGFsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5PcGVuRmllbGRDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuRmllbGRNb2RhbCgwKTtcbiAgfVxuICBjbG9zZUZpZWxkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5maWVsZE1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZmllbGRNb2RhbFN0ZXAgPSBcInNlbGVjdFwiO1xuICAgIHRoaXMuZmllbGRNb2RhbFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmllbGRNb2RhbERyYWZ0cyA9IFtdO1xuICAgIHRoaXMuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPSBudWxsO1xuICAgIHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0ID0ge1xuICAgICAgY29sdW1uOiBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uTmFtZTogRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbkFsaWFzOiBFTVBUWV9WQUxVRSxcbiAgICB9O1xuICB9XG4gIGdvVG9GaWVsZE1vZGFsU3RlcChzdGVwOiBGaWVsZE1vZGFsU3RlcCk6IHZvaWQge1xuICAgIGlmIChzdGVwID09PSBcImNvbmZpZ3VyZVwiICYmICF0aGlzLmZpZWxkTW9kYWxEcmFmdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZmllbGRNb2RhbFN0ZXAgPSBzdGVwO1xuICAgIGlmIChzdGVwID09PSBcInNlbGVjdFwiKSB7XG4gICAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB9XG4gIH1cbiAgYWR2YW5jZUZpZWxkTW9kYWxTdGVwKCk6IHZvaWQge1xuICAgIHRoaXMuZ29Ub0ZpZWxkTW9kYWxTdGVwKFwiY29uZmlndXJlXCIpO1xuICB9XG4gIG9uRmllbGRNb2RhbFRpbWVsaW5lU3RlcFNlbGVjdChldmVudDogVGltZWxpbmVTdGVwU2VsZWN0RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmdvVG9GaWVsZE1vZGFsU3RlcChldmVudC5pdGVtLmlkID09PSBcImNvbmZpZ3VyZVwiID8gXCJjb25maWd1cmVcIiA6IFwic2VsZWN0XCIpO1xuICB9XG4gIHNlbGVjdEZpZWxkTW9kYWxDb2x1bW4oY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5maWVsZE1vZGFsRHJhZnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29sdW1uID09PSBjb2x1bW4pO1xuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZUZpZWxkTW9kYWxEcmFmdChjb2x1bW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmllbGRNb2RhbERyYWZ0cyA9IFtcbiAgICAgIC4uLnRoaXMuZmllbGRNb2RhbERyYWZ0cyxcbiAgICAgIHtcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBhbGlhczogRU1QVFlfVkFMVUUsXG4gICAgICAgIHdpZHRoOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgZnVuY3Rpb246IG51bGwsXG4gICAgICB9LFxuICAgIF07XG4gICAgdGhpcy5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbiA9IG51bGw7XG4gIH1cbiAgc2VsZWN0QWxsRmllbGRNb2RhbENvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gbmV3IFNldChcbiAgICAgIHRoaXMuZmllbGRNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29sdW1uKVxuICAgICk7XG4gICAgY29uc3Qgcm93c1RvU2VsZWN0ID0gdGhpcy5maWVsZFNlbGVjdGFibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiAhc2VsZWN0ZWRDb2x1bW5zLmhhcyhpdGVtLnZhbHVlKVxuICAgICk7XG5cbiAgICBpZiAoIXJvd3NUb1NlbGVjdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpZWxkTW9kYWxEcmFmdHMgPSBbXG4gICAgICAuLi50aGlzLmZpZWxkTW9kYWxEcmFmdHMsXG4gICAgICAuLi5yb3dzVG9TZWxlY3QubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBjb2x1bW46IGl0ZW0udmFsdWUsXG4gICAgICAgIGFsaWFzOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgd2lkdGg6IEVNUFRZX1ZBTFVFLFxuICAgICAgICBmdW5jdGlvbjogbnVsbCxcbiAgICAgIH0pKSxcbiAgICBdO1xuICAgIHRoaXMuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPSBudWxsO1xuICB9XG4gIGFkZEFub3RoZXJGaWVsZEZyb21Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgfVxuICBvbkZpZWxkTW9kYWxTZWxlY3RlZElkc0NoYW5nZShpZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gbmV3IFNldChcbiAgICAgIGlkc1xuICAgICAgICAubWFwKChpdGVtKSA9PiB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdENvbHVtbihpdGVtKSlcbiAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+ICEhaXRlbSlcbiAgICApO1xuICAgIGNvbnN0IHByZXNlcnZlZERyYWZ0cyA9IHRoaXMuZmllbGRNb2RhbERyYWZ0cy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICBzZWxlY3RlZENvbHVtbnMuaGFzKGl0ZW0uY29sdW1uKVxuICAgICk7XG4gICAgY29uc3QgcHJlc2VydmVkQ29sdW1ucyA9IG5ldyBTZXQoXG4gICAgICBwcmVzZXJ2ZWREcmFmdHMubWFwKChpdGVtKSA9PiBpdGVtLmNvbHVtbilcbiAgICApO1xuICAgIGNvbnN0IGFwcGVuZGVkRHJhZnRzID0gdGhpcy5maWVsZFNlbGVjdGFibGVDb2x1bW5zXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICBzZWxlY3RlZENvbHVtbnMuaGFzKGl0ZW0udmFsdWUpICYmICFwcmVzZXJ2ZWRDb2x1bW5zLmhhcyhpdGVtLnZhbHVlKVxuICAgICAgKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgY29sdW1uOiBpdGVtLnZhbHVlLFxuICAgICAgICBhbGlhczogRU1QVFlfVkFMVUUsXG4gICAgICAgIHdpZHRoOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgZnVuY3Rpb246IG51bGwsXG4gICAgICB9KSk7XG5cbiAgICB0aGlzLmZpZWxkTW9kYWxEcmFmdHMgPSBbLi4ucHJlc2VydmVkRHJhZnRzLCAuLi5hcHBlbmRlZERyYWZ0c107XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uICYmXG4gICAgICAhc2VsZWN0ZWRDb2x1bW5zLmhhcyh0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uKVxuICAgICkge1xuICAgICAgdGhpcy5jYW5jZWxGaWVsZEZ1bmN0aW9uRWRpdCgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5maWVsZE1vZGFsRHJhZnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWVsZE1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gICAgfVxuICB9XG4gIG9uRmllbGRNb2RhbEFsaWFzQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXRjaEZpZWxkTW9kYWxEcmFmdChjb2x1bW4sIHsgYWxpYXM6IHZhbHVlIH0pO1xuICB9XG4gIG9uRmllbGRNb2RhbFdpZHRoQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXRjaEZpZWxkTW9kYWxEcmFmdChjb2x1bW4sIHsgd2lkdGg6IHZhbHVlIH0pO1xuICB9XG4gIHJlbW92ZUZpZWxkTW9kYWxEcmFmdChjb2x1bW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRNb2RhbERyYWZ0cyA9IHRoaXMuZmllbGRNb2RhbERyYWZ0cy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4gaXRlbS5jb2x1bW4gIT09IGNvbHVtblxuICAgICk7XG4gICAgaWYgKHRoaXMuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgdGhpcy5jYW5jZWxGaWVsZEZ1bmN0aW9uRWRpdCgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmllbGRNb2RhbERyYWZ0cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmllbGRNb2RhbFN0ZXAgPSBcInNlbGVjdFwiO1xuICAgIH1cbiAgfVxuICBzdGFydEZpZWxkRnVuY3Rpb25FZGl0KGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZmllbGRNb2RhbERyYWZ0cy5maW5kKChpdGVtKSA9PiBpdGVtLmNvbHVtbiA9PT0gY29sdW1uKTtcbiAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbiA9IGNvbHVtbjtcbiAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdCA9IHtcbiAgICAgIGNvbHVtbixcbiAgICAgIGZ1bmN0aW9uTmFtZTogY3VycmVudC5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbkFsaWFzOiBjdXJyZW50LmZ1bmN0aW9uPy5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgIH07XG4gIH1cbiAgY2FuY2VsRmllbGRGdW5jdGlvbkVkaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbiA9IG51bGw7XG4gICAgdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQgPSB7XG4gICAgICBjb2x1bW46IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb25OYW1lOiBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uQWxpYXM6IEVNUFRZX1ZBTFVFLFxuICAgIH07XG4gIH1cbiAgb25GaWVsZEZ1bmN0aW9uRHJhZnROYW1lQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uRmllbGRGdW5jdGlvbk5hbWVDaGFuZ2UoKTtcbiAgfVxuICBzYXZlRmllbGRGdW5jdGlvbkVkaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGF0Y2hGaWVsZE1vZGFsRHJhZnQodGhpcy5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbiwge1xuICAgICAgZnVuY3Rpb246IHRoaXMuYnVpbGRGaWVsZEZ1bmN0aW9uRHJhZnQoKSxcbiAgICB9KTtcbiAgICB0aGlzLmNhbmNlbEZpZWxkRnVuY3Rpb25FZGl0KCk7XG4gIH1cbiAgaXNGaWVsZEZ1bmN0aW9uRWRpdGluZyhjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uID09PSBjb2x1bW47XG4gIH1cbiAgc2F2ZUZpZWxkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5TYXZlRmllbGRNb2RhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gdGhpcy5maWVsZE1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgd2lkdGg6IGl0ZW0ud2lkdGg/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uOiBpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWU/LnRyaW0oKVxuICAgICAgICA/IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IGl0ZW0uZnVuY3Rpb24uZnVuY3Rpb25OYW1lLnRyaW0oKSxcbiAgICAgICAgICBhbGlhczogaXRlbS5mdW5jdGlvbi5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB9KSk7XG4gICAgdGhpcy5jbG9zZUZpZWxkTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlblNvdXJjZU1vZGFsKHN0ZXA6IFNvdXJjZU1vZGFsU3RlcCA9IFwic2VsZWN0XCIpOiB2b2lkIHtcbiAgICB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzID0gdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgdGFibGU6IGl0ZW0udGFibGUsXG4gICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpIHx8IHRoaXMucmVzb2x2ZURlZmF1bHRTb3VyY2VBbGlhcyhpdGVtLnRhYmxlKSxcbiAgICB9KSk7XG4gICAgdGhpcy5zb3VyY2VNb2RhbFN0ZXAgPVxuICAgICAgc3RlcCA9PT0gXCJjb25maWd1cmVcIiAmJiB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzLmxlbmd0aFxuICAgICAgICA/IFwiY29uZmlndXJlXCJcbiAgICAgICAgOiBcInNlbGVjdFwiO1xuICAgIHRoaXMuc291cmNlTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuICBvcGVuU291cmNlQ29uZmlndXJhdGlvbk1vZGFsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5PcGVuU291cmNlQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlblNvdXJjZU1vZGFsKFwiY29uZmlndXJlXCIpO1xuICB9XG4gIGNsb3NlU291cmNlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zb3VyY2VNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnNvdXJjZU1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gICAgdGhpcy5zb3VyY2VNb2RhbERyYWZ0cyA9IFtdO1xuICB9XG4gIGdvVG9Tb3VyY2VNb2RhbFN0ZXAoc3RlcDogU291cmNlTW9kYWxTdGVwKTogdm9pZCB7XG4gICAgaWYgKHN0ZXAgPT09IFwiY29uZmlndXJlXCIgJiYgIXRoaXMuc291cmNlTW9kYWxEcmFmdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2VNb2RhbFN0ZXAgPSBzdGVwO1xuICB9XG4gIGFkdmFuY2VTb3VyY2VNb2RhbFN0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5nb1RvU291cmNlTW9kYWxTdGVwKFwiY29uZmlndXJlXCIpO1xuICB9XG4gIG9uU291cmNlTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoZXZlbnQ6IFRpbWVsaW5lU3RlcFNlbGVjdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5nb1RvU291cmNlTW9kYWxTdGVwKFxuICAgICAgZXZlbnQuaXRlbS5pZCA9PT0gXCJjb25maWd1cmVcIiA/IFwiY29uZmlndXJlXCIgOiBcInNlbGVjdFwiXG4gICAgKTtcbiAgfVxuICBvblNvdXJjZU1vZGFsU2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkVGFibGVzID0gdGhpcy5yZXNvbHZlVGFibGVzRnJvbVBpY2tsaXN0SWRzKGlkcyk7XG4gICAgY29uc3QgZHJhZnRCeVRhYmxlID0gbmV3IE1hcChcbiAgICAgIHRoaXMuc291cmNlTW9kYWxEcmFmdHMubWFwKChpdGVtKSA9PiBbaXRlbS50YWJsZSwgaXRlbV0pXG4gICAgKTtcblxuICAgIHRoaXMuc291cmNlTW9kYWxEcmFmdHMgPSBzZWxlY3RlZFRhYmxlcy5tYXAoKHRhYmxlKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZHJhZnRCeVRhYmxlLmdldCh0YWJsZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjdXJyZW50ID8/IHtcbiAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICBhbGlhczogdGhpcy5yZXNvbHZlRGVmYXVsdFNvdXJjZUFsaWFzKHRhYmxlKSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5zb3VyY2VNb2RhbERyYWZ0cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc291cmNlTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgICB9XG4gIH1cbiAgb25Tb3VyY2VNb2RhbEFsaWFzQ2hhbmdlKHRhYmxlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzID0gdGhpcy5zb3VyY2VNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+XG4gICAgICBpdGVtLnRhYmxlID09PSB0YWJsZVxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIGFsaWFzOiB2YWx1ZSxcbiAgICAgICAgfVxuICAgICAgICA6IGl0ZW1cbiAgICApO1xuICB9XG4gIHNhdmVTb3VyY2VNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc291cmNlTW9kYWxEcmFmdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMgPSB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnJlc29sdmVUYWJsZU9wdGlvbihpdGVtLnRhYmxlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhYmxlOiBpdGVtLnRhYmxlLFxuICAgICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpIHx8IHRoaXMucmVzb2x2ZURlZmF1bHRTb3VyY2VBbGlhcyhpdGVtLnRhYmxlKSwgLy8gTk9TT05BUlxuICAgICAgICBzY2hlbWE6IHRhYmxlPy5zY2hlbWEsXG4gICAgICAgIGxhYmVsOiB0YWJsZT8uZGlzcGxheU5hbWUgfHwgdGFibGU/LnRleHQsIC8vIE5PU09OQVJcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmNsb3NlU291cmNlTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlblNlbGVjdGlvbk1vZGFsKG1vZGU6IFNlbGVjdGlvbk1vZGFsTW9kZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID0gbW9kZTtcbiAgICB0aGlzLnNlbGVjdGlvbk1vZGFsU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgaWYgKG1vZGUgPT09IFwidGFibGVzXCIpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMgPSB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5tYXAoXG4gICAgICAgIChpdGVtKSA9PiBpdGVtLnRhYmxlXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gXCJmaWVsZHNcIikge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyA9IHRoaXMubm9ybWFsaXplZEZpZWxkcy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29sdW1uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyA9IFsuLi50aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeV07XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuICBjbG9zZVNlbGVjdGlvbk1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgfVxuICB0b2dnbGVTZWxlY3Rpb25Nb2RhbFJvdyhpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyA9IHRoaXMudG9nZ2xlTXVsdGlwbGVWYWx1ZShcbiAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMsXG4gICAgICBpZFxuICAgICk7XG4gIH1cbiAgb25TZWxlY3Rpb25Nb2RhbFNlbGVjdGVkSWRzQ2hhbmdlKGlkczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzID0gdGhpcy5yZXNvbHZlQ29sdW1uc0Zyb21QaWNrbGlzdElkcyhpZHMpO1xuICB9XG4gIG9uU2VsZWN0YWJsZVJvd0tleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbCk/LmNsaWNrKCk7XG4gICAgfVxuICB9XG4gIGNvbmZpcm1TZWxlY3Rpb25Nb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RhbE1vZGUgPT09IFwidGFibGVzXCIpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgTWFwKFxuICAgICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5tYXAoKGl0ZW0pID0+IFtcbiAgICAgICAgICBpdGVtLnRhYmxlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsaWFzOiBpdGVtLmFsaWFzLFxuICAgICAgICAgICAgc2NoZW1hOiBpdGVtLnNjaGVtYSxcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMgPSAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS50YWJsZXMgPz8gW10pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMuaW5jbHVkZXMoaXRlbS52YWx1ZSkpXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgdGFibGU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgYWxpYXM6XG4gICAgICAgICAgICBhbGlhc2VzLmdldChpdGVtLnZhbHVlKT8uYWxpYXM/LnRyaW0oKSB8fCB0aGlzLmJ1aWxkQWxpYXNGb3JUYWJsZShpdGVtKSwgLy8gTk9TT05BUlxuICAgICAgICAgIHNjaGVtYTogYWxpYXNlcy5nZXQoaXRlbS52YWx1ZSk/LnNjaGVtYSA/PyBpdGVtLnNjaGVtYSxcbiAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgIGFsaWFzZXMuZ2V0KGl0ZW0udmFsdWUpPy5sYWJlbCA/P1xuICAgICAgICAgICAgaXRlbS5kaXNwbGF5TmFtZSA/P1xuICAgICAgICAgICAgaXRlbS50ZXh0LFxuICAgICAgICB9KSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJmaWVsZHNcIikge1xuICAgICAgY29uc3QgZmllbGRDb25maWdCeUNvbHVtbiA9IG5ldyBNYXAoXG4gICAgICAgIHRoaXMubm9ybWFsaXplZEZpZWxkcy5tYXAoKGl0ZW0pID0+IFtpdGVtLmNvbHVtbiwgaXRlbV0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpZWxkcyA9IHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMubWFwKFxuICAgICAgICAoY29sdW1uKSA9PiBmaWVsZENvbmZpZ0J5Q29sdW1uLmdldChjb2x1bW4pID8/IHsgY29sdW1uIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5ID0gWy4uLnRoaXMuc2VsZWN0aW9uTW9kYWxJZHNdO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlU2VsZWN0aW9uTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlbkpvaW5Nb2RhbChpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPVxuICAgICAgdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zW2luZGV4XSA6IG51bGw7XG4gICAgdGhpcy5qb2luRWRpdEluZGV4ID0gdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gaW5kZXggOiBudWxsO1xuICAgIHRoaXMuam9pblNvdXJjZVNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuam9pblRhcmdldFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuam9pbkRyYWZ0ID0ge1xuICAgICAgc291cmNlQ29sdW1uOiBjdXJyZW50Py5zb3VyY2VDb2x1bW4gPz8gRU1QVFlfVkFMVUUsXG4gICAgICB0YXJnZXRDb2x1bW46IGN1cnJlbnQ/LnRhcmdldENvbHVtbiA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIG9wZXJhdG9yOiBjdXJyZW50Py5vcGVyYXRvciA/PyBERUZBVUxUX0pPSU5fT1BFUkFUT1IsXG4gICAgfTtcbiAgICB0aGlzLmpvaW5Nb2RhbFZpc2libGUgPSB0cnVlO1xuICB9XG4gIGNsb3NlSm9pbk1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuam9pbk1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuam9pbkVkaXRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5qb2luU291cmNlU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5qb2luVGFyZ2V0U2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5qb2luRHJhZnQgPSB7XG4gICAgICBzb3VyY2VDb2x1bW46IEVNUFRZX1ZBTFVFLFxuICAgICAgdGFyZ2V0Q29sdW1uOiBFTVBUWV9WQUxVRSxcbiAgICAgIG9wZXJhdG9yOiBERUZBVUxUX0pPSU5fT1BFUkFUT1IsXG4gICAgfTtcbiAgfVxuICBzZWxlY3RKb2luU291cmNlKGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uID1cbiAgICAgIHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiA9PT0gY29sdW1uID8gRU1QVFlfVkFMVUUgOiBjb2x1bW47XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbik7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbik7XG4gICAgaWYgKHNvdXJjZSAmJiB0YXJnZXQgJiYgc291cmNlLnRhYmxlID09PSB0YXJnZXQudGFibGUpIHtcbiAgICAgIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiA9IEVNUFRZX1ZBTFVFO1xuICAgIH1cbiAgfVxuICBvbkpvaW5Tb3VyY2VTZWxlY3RlZElkc0NoYW5nZShpZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlTGFzdENvbHVtbkZyb21QaWNrbGlzdElkcyhpZHMpO1xuXG4gICAgdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uID1cbiAgICAgIGNvbHVtbiAmJiBjb2x1bW4gPT09IHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiA/IEVNUFRZX1ZBTFVFIDogY29sdW1uID8/IEVNUFRZX1ZBTFVFO1xuXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbik7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbik7XG4gICAgaWYgKHNvdXJjZSAmJiB0YXJnZXQgJiYgc291cmNlLnRhYmxlID09PSB0YXJnZXQudGFibGUpIHtcbiAgICAgIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiA9IEVNUFRZX1ZBTFVFO1xuICAgIH1cbiAgfVxuICBzZWxlY3RKb2luVGFyZ2V0KGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uID1cbiAgICAgIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiA9PT0gY29sdW1uID8gRU1QVFlfVkFMVUUgOiBjb2x1bW47XG4gIH1cbiAgb25Kb2luVGFyZ2V0U2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUxhc3RDb2x1bW5Gcm9tUGlja2xpc3RJZHMoaWRzKTtcbiAgICB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4gPVxuICAgICAgY29sdW1uICYmIGNvbHVtbiA9PT0gdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uID8gRU1QVFlfVkFMVUUgOiBjb2x1bW4gPz8gRU1QVFlfVkFMVUU7XG4gIH1cbiAgc2F2ZUpvaW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblNhdmVKb2luKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHQ6IER5bmFtaWNWaWV3QnVpbGRlckpvaW4gPSB7XG4gICAgICBzb3VyY2VDb2x1bW46IHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbixcbiAgICAgIHRhcmdldENvbHVtbjogdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uLFxuICAgICAgb3BlcmF0b3I6IHRoaXMuam9pbkRyYWZ0Lm9wZXJhdG9yLFxuICAgIH07XG4gICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zXTtcbiAgICBpZiAodGhpcy5qb2luRWRpdEluZGV4ID09PSBudWxsKSB7XG4gICAgICBpdGVtcy5wdXNoKG5leHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc1t0aGlzLmpvaW5FZGl0SW5kZXhdID0gbmV4dDtcbiAgICB9XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KGl0ZW1zLCAoaXRlbSkgPT5cbiAgICAgIFtpdGVtLnNvdXJjZUNvbHVtbiwgaXRlbS50YXJnZXRDb2x1bW4sIGl0ZW0ub3BlcmF0b3JdLmpvaW4oXCJ8XCIpXG4gICAgKTtcbiAgICB0aGlzLmNsb3NlSm9pbk1vZGFsKCk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIG9wZW5Tb3J0TW9kYWwoaW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID1cbiAgICAgIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiA/IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nW2luZGV4XSA6IG51bGw7XG4gICAgdGhpcy5zb3J0RWRpdEluZGV4ID0gdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gaW5kZXggOiBudWxsO1xuICAgIHRoaXMuc29ydFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuc29ydERyYWZ0ID0ge1xuICAgICAgY29sdW1uOiBjdXJyZW50Py5jb2x1bW4gPz8gRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbk5hbWU6IGN1cnJlbnQ/LmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgZGlyZWN0aW9uOiBjdXJyZW50Py5kaXJlY3Rpb24gPz8gREVGQVVMVF9TT1JUX0RJUkVDVElPTixcbiAgICB9O1xuICAgIHRoaXMuc29ydE1vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cbiAgY2xvc2VTb3J0TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0TW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5zb3J0RWRpdEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLnNvcnRTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnNvcnREcmFmdCA9IHtcbiAgICAgIGNvbHVtbjogRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbk5hbWU6IEVNUFRZX1ZBTFVFLFxuICAgICAgZGlyZWN0aW9uOiBERUZBVUxUX1NPUlRfRElSRUNUSU9OLFxuICAgIH07XG4gIH1cbiAgc2VsZWN0U29ydENvbHVtbihzb3J0U2VsZWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnBhcnNlU29ydFNlbGVjdGlvbklkKHNvcnRTZWxlY3Rpb25JZCk7XG4gICAgY29uc3QgaXNTYW1lU2VsZWN0aW9uID1cbiAgICAgIHRoaXMuc29ydERyYWZ0LmNvbHVtbiA9PT0gbmV4dC5jb2x1bW4gJiZcbiAgICAgICh0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUgfHwgRU1QVFlfVkFMVUUpID09PSBuZXh0LmZ1bmN0aW9uTmFtZTtcblxuICAgIHRoaXMuc29ydERyYWZ0LmNvbHVtbiA9IGlzU2FtZVNlbGVjdGlvbiA/IEVNUFRZX1ZBTFVFIDogbmV4dC5jb2x1bW47XG4gICAgdGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lID0gaXNTYW1lU2VsZWN0aW9uXG4gICAgICA/IEVNUFRZX1ZBTFVFXG4gICAgICA6IG5leHQuZnVuY3Rpb25OYW1lO1xuICB9XG4gIG9uU29ydFNlbGVjdGVkSWRzQ2hhbmdlKGlkczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZElkID0gaWRzLmF0KC0xKTtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNvcnRQaWNrbGlzdEl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHNlbGVjdGVkSWQpO1xuXG4gICAgaWYgKCFzZWxlY3RlZEl0ZW0pIHtcbiAgICAgIHRoaXMuc29ydERyYWZ0LmNvbHVtbiA9IEVNUFRZX1ZBTFVFO1xuICAgICAgdGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lID0gRU1QVFlfVkFMVUU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RTb3J0Q29sdW1uKHNlbGVjdGVkSXRlbS5zZWxlY3Rpb25JZCk7XG4gIH1cbiAgc2F2ZVNvcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblNhdmVTb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHQ6IER5bmFtaWNWaWV3QnVpbGRlclNvcnQgPSB7XG4gICAgICBjb2x1bW46IHRoaXMuc29ydERyYWZ0LmNvbHVtbixcbiAgICAgIGZ1bmN0aW9uTmFtZTogdGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lIHx8IHVuZGVmaW5lZCxcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uLFxuICAgIH07XG4gICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvcnRpbmddO1xuICAgIGlmICh0aGlzLnNvcnRFZGl0SW5kZXggPT09IG51bGwpIHtcbiAgICAgIGl0ZW1zLnB1c2gobmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zW3RoaXMuc29ydEVkaXRJbmRleF0gPSBuZXh0O1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZyA9IHRoaXMuZGVkdXBsaWNhdGVCeUtleShpdGVtcywgKGl0ZW0pID0+XG4gICAgICBbaXRlbS5jb2x1bW4sIGl0ZW0uZnVuY3Rpb25OYW1lID8/IEVNUFRZX1ZBTFVFLCBpdGVtLmRpcmVjdGlvbl0uam9pbihcInxcIilcbiAgICApO1xuICAgIHRoaXMuY2xvc2VTb3J0TW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlbkZpbHRlck1vZGFsKGluZGV4PzogbnVtYmVyKTogdm9pZCB7IC8vIE5PU09OQVIgLSBjb21wbGV4aXR5OiBleHRyYWN0aW9uIHdvdWxkIHJpc2sgYmVoYXZpb3IgY2hhbmdlXG4gICAgY29uc3QgY3VycmVudCA9XG4gICAgICB0eXBlb2YgaW5kZXggPT09IFwibnVtYmVyXCIgPyB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVyc1tpbmRleF0gOiBudWxsO1xuICAgIHRoaXMuZmlsdGVyRWRpdEluZGV4ID0gdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gaW5kZXggOiBudWxsO1xuICAgIHRoaXMuZmlsdGVyTW9kYWxNb2RlID1cbiAgICAgIGN1cnJlbnQ/LnZhbHVlVHlwZSA9PT0gRklMVEVSX01PREVfRE9NQUlOID8gRklMVEVSX01PREVfRE9NQUlOIDogXCJjb25kaXRpb25cIjtcbiAgICB0aGlzLmZpbHRlck1vZGFsU3RlcCA9IHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiAmJiBjdXJyZW50ID8gXCJjb25maWd1cmVcIiA6IFwic2VsZWN0XCI7XG4gICAgdGhpcy5maWx0ZXJTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0ID0ge1xuICAgICAgbW9kZTogdGhpcy5maWx0ZXJNb2RhbE1vZGUsXG4gICAgICBjb2x1bW46IGN1cnJlbnQ/LmNvbHVtbiA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIG9wZXJhdG9yOiBjdXJyZW50Py5vcGVyYXRvciA/PyBERUZBVUxUX0ZJTFRFUl9PUEVSQVRPUixcbiAgICAgIGNvbm5lY3RvcjogY3VycmVudD8uY29ubmVjdG9yID8/IERFRkFVTFRfRklMVEVSX0NPTk5FQ1RPUixcbiAgICAgIG9wdGlvbmFsOiBjdXJyZW50Py5vcHRpb25hbCA/PyBmYWxzZSxcbiAgICAgIHZhbHVlVHlwZTogY3VycmVudD8udmFsdWVUeXBlID8/IERFRkFVTFRfRklMVEVSX1ZBTFVFX1RZUEUsXG4gICAgICB2YWx1ZTogY3VycmVudD8udmFsdWUgPz8gRU1QVFlfVkFMVUUsXG4gICAgICB2YWx1ZXNUZXh0OiBjdXJyZW50Py52YWx1ZXM/LmpvaW4oXCIsIFwiKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIGJldHdlZW5TdGFydDogY3VycmVudD8udmFsdWVzPy5bMF0gPz8gRU1QVFlfVkFMVUUsXG4gICAgICBiZXR3ZWVuRW5kOiBjdXJyZW50Py52YWx1ZXM/LlsxXSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIHBhcmFtZXRlck5hbWU6IGN1cnJlbnQ/LnBhcmFtZXRlck5hbWUgPz8gRU1QVFlfVkFMVUUsXG4gICAgICBkb21haW5FeHByZXNzaW9uOiBjdXJyZW50Py5kb21haW5FeHByZXNzaW9uID8/IEVNUFRZX1ZBTFVFLFxuICAgIH07XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgICB0aGlzLmZpbHRlck1vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cbiAgY2xvc2VGaWx0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZmlsdGVyRWRpdEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlck1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gICAgdGhpcy5maWx0ZXJNb2RhbE1vZGUgPSBcImNvbmRpdGlvblwiO1xuICAgIHRoaXMuZmlsdGVyU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdCA9IHtcbiAgICAgIG1vZGU6IFwiY29uZGl0aW9uXCIsXG4gICAgICBjb2x1bW46IEVNUFRZX1ZBTFVFLFxuICAgICAgb3BlcmF0b3I6IERFRkFVTFRfRklMVEVSX09QRVJBVE9SLFxuICAgICAgY29ubmVjdG9yOiBERUZBVUxUX0ZJTFRFUl9DT05ORUNUT1IsXG4gICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICB2YWx1ZVR5cGU6IERFRkFVTFRfRklMVEVSX1ZBTFVFX1RZUEUsXG4gICAgICB2YWx1ZTogRU1QVFlfVkFMVUUsXG4gICAgICB2YWx1ZXNUZXh0OiBFTVBUWV9WQUxVRSxcbiAgICAgIGJldHdlZW5TdGFydDogRU1QVFlfVkFMVUUsXG4gICAgICBiZXR3ZWVuRW5kOiBFTVBUWV9WQUxVRSxcbiAgICAgIHBhcmFtZXRlck5hbWU6IEVNUFRZX1ZBTFVFLFxuICAgICAgZG9tYWluRXhwcmVzc2lvbjogRU1QVFlfVkFMVUUsXG4gICAgfTtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZEZpbHRlck1vZGVJdGVtcygpO1xuICB9XG4gIHNlbGVjdEZpbHRlckNvbHVtbihjb2x1bW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID1cbiAgICAgIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID09PSBjb2x1bW4gPyBFTVBUWV9WQUxVRSA6IGNvbHVtbjtcbiAgICB0aGlzLnJlc2V0RmlsdGVyRHJhZnRWYWx1ZVN0YXRlKCk7XG4gIH1cbiAgb25GaWx0ZXJNb2RhbFNlbGVjdGVkSWRzQ2hhbmdlKGlkczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0U2VsZWN0ZWRJZCA9IGlkcy5hdCgtMSk7XG4gICAgY29uc3QgbmV4dENvbHVtbiA9XG4gICAgICB0eXBlb2YgbmV4dFNlbGVjdGVkSWQgPT09IFwibnVtYmVyXCJcbiAgICAgICAgPyB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdENvbHVtbihuZXh0U2VsZWN0ZWRJZCkgPz8gRU1QVFlfVkFMVUVcbiAgICAgICAgOiBFTVBUWV9WQUxVRTtcblxuICAgIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID0gbmV4dENvbHVtbjtcbiAgICB0aGlzLnJlc2V0RmlsdGVyRHJhZnRWYWx1ZVN0YXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSByZXNldEZpbHRlckRyYWZ0VmFsdWVTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdE9wZXJhdG9yID1cbiAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JPcHRpb25zWzBdPy52YWx1ZSA/PyBERUZBVUxUX0ZJTFRFUl9PUEVSQVRPUjtcbiAgICB0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID0gZmlyc3RPcGVyYXRvcjtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZXNUZXh0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5FbmQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSBFTVBUWV9WQUxVRTtcbiAgfVxuICBnb1RvRmlsdGVyTW9kYWxTdGVwKHN0ZXA6IEZpbHRlck1vZGFsU3RlcCk6IHZvaWQge1xuICAgIGlmIChzdGVwID09PSBcImNvbmZpZ3VyZVwiICYmICF0aGlzLmZpbHRlck1vZGFsQ2FuUHJvY2VlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdGVwID09PSBcInJldmlld1wiICYmICF0aGlzLmZpbHRlck1vZGFsQ2FuUmV2aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJNb2RhbFN0ZXAgPSBzdGVwO1xuXG4gICAgaWYgKHN0ZXAgPT09IFwic2VsZWN0XCIpIHtcbiAgICAgIHRoaXMuZmlsdGVyU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgfVxuICB9XG4gIGFkdmFuY2VGaWx0ZXJNb2RhbFN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVyTW9kYWxTZWxlY3Rpb25TdGVwQWN0aXZlKSB7XG4gICAgICB0aGlzLmdvVG9GaWx0ZXJNb2RhbFN0ZXAoXCJjb25maWd1cmVcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyTW9kYWxDb25maWd1cmF0aW9uU3RlcEFjdGl2ZSkge1xuICAgICAgdGhpcy5nb1RvRmlsdGVyTW9kYWxTdGVwKFwicmV2aWV3XCIpO1xuICAgIH1cbiAgfVxuICBvbkZpbHRlclZhbHVlVHlwZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZXNUZXh0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5FbmQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSBFTVBUWV9WQUxVRTtcbiAgfVxuICBvbkZpbHRlck9wZXJhdG9yQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWUgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlc1RleHQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5TdGFydCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQuYmV0d2VlbkVuZCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQucGFyYW1ldGVyTmFtZSA9IEVNUFRZX1ZBTFVFO1xuXG4gICAgaWYgKCF0aGlzLmZpbHRlck5lZWRzVmFsdWUpIHtcbiAgICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID0gREVGQVVMVF9GSUxURVJfVkFMVUVfVFlQRTtcbiAgICB9XG4gIH1cbiAgb25GaWx0ZXJNb2RlQ2hhbmdlKG1vZGU6IEZpbHRlck1vZGFsTW9kZSk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyTW9kYWxNb2RlID0gbW9kZTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0Lm1vZGUgPSBtb2RlO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciA9IERFRkFVTFRfRklMVEVSX09QRVJBVE9SO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID0gREVGQVVMVF9GSUxURVJfVkFMVUVfVFlQRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZXNUZXh0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5FbmQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmRvbWFpbkV4cHJlc3Npb24gPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlck1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgfVxuICBvbkZpbHRlck1vZGFsVGltZWxpbmVTdGVwU2VsZWN0KGV2ZW50OiBUaW1lbGluZVN0ZXBTZWxlY3RFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5pdGVtLmlkID09PSBcInJldmlld1wiKSB7XG4gICAgICB0aGlzLmdvVG9GaWx0ZXJNb2RhbFN0ZXAoXCJyZXZpZXdcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5nb1RvRmlsdGVyTW9kYWxTdGVwKGV2ZW50Lml0ZW0uaWQgPT09IFwiY29uZmlndXJlXCIgPyBcImNvbmZpZ3VyZVwiIDogXCJzZWxlY3RcIik7XG4gIH1cbiAgc2F2ZUZpbHRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5idWlsZEZpbHRlckZyb21EcmFmdCgpO1xuXG4gICAgaWYgKCFuZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnNdO1xuICAgIGlmICh0aGlzLmZpbHRlckVkaXRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgaXRlbXMucHVzaChuZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNbdGhpcy5maWx0ZXJFZGl0SW5kZXhdID0gbmV4dDtcbiAgICB9XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMgPSBpdGVtcztcbiAgICB0aGlzLmNsb3NlRmlsdGVyTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb25Tb3VyY2VBbGlhc0NoYW5nZShpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzW2luZGV4XTtcbiAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnJlc29sdmVUYWJsZU9wdGlvbihjdXJyZW50LnRhYmxlKTtcbiAgICBjdXJyZW50LmFsaWFzID1cbiAgICAgIHZhbHVlLnRyaW0oKSB8fCAodGFibGUgPyB0aGlzLmJ1aWxkQWxpYXNGb3JUYWJsZSh0YWJsZSkgOiBjdXJyZW50LmFsaWFzKTtcbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCgpO1xuICB9XG4gIHJlbW92ZVNvdXJjZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgcmVtb3ZlSm9pbihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUdyb3VwQnkoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5LnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUZpZWxkKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZVNvcnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUZpbHRlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgY2xlYXJTb3VyY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFySm9pbnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFyR3JvdXBCeSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeSA9IFtdO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBjbGVhckZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFyU29ydGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZyA9IFtdO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBjbGVhckZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMgPSBbXTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgaGFuZGxlU2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNhbml0aXplQnVpbGRlcigpO1xuICAgIHRoaXMuc2F2ZS5lbWl0KGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyh0aGlzLmNvbmZpZykpO1xuICB9XG4gIHByaXZhdGUgYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zYW5pdGl6ZUJ1aWxkZXIoKTtcbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCgpO1xuICB9XG4gIHByaXZhdGUgZW1pdENvbmZpZ0NoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZS5lbWl0KGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyh0aGlzLmNvbmZpZykpO1xuICB9XG4gIHByaXZhdGUgc2FuaXRpemVCdWlsZGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlc0J5SWQgPSBuZXcgTWFwKFxuICAgICAgKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKS5tYXAoKGl0ZW0pID0+IFtpdGVtLnZhbHVlLCBpdGVtXSlcbiAgICApO1xuICAgIGNvbnN0IHNlbGVjdGVkU291cmNlcyA9IHRoaXMuZGVkdXBsaWNhdGVCeUtleShcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgdGFibGVzQnlJZC5oYXMoaXRlbS50YWJsZSlcbiAgICAgICksXG4gICAgICAoaXRlbSkgPT4gaXRlbS50YWJsZVxuICAgICkubWFwKChpdGVtKSA9PiAoe1xuICAgICAgdGFibGU6IGl0ZW0udGFibGUsXG4gICAgICBhbGlhczpcbiAgICAgICAgaXRlbS5hbGlhcz8udHJpbSgpIHx8XG4gICAgICAgIHRoaXMuYnVpbGRBbGlhc0ZvclRhYmxlKFxuICAgICAgICAgIHRhYmxlc0J5SWQuZ2V0KGl0ZW0udGFibGUpIGFzIER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uXG4gICAgICAgICksXG4gICAgICBzY2hlbWE6IGl0ZW0uc2NoZW1hID8/IHRhYmxlc0J5SWQuZ2V0KGl0ZW0udGFibGUpPy5zY2hlbWEsXG4gICAgICBsYWJlbDpcbiAgICAgICAgaXRlbS5sYWJlbCA/P1xuICAgICAgICB0YWJsZXNCeUlkLmdldChpdGVtLnRhYmxlKT8uZGlzcGxheU5hbWUgPz9cbiAgICAgICAgdGFibGVzQnlJZC5nZXQoaXRlbS50YWJsZSk/LnRleHQsXG4gICAgfSkpO1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzID0gc2VsZWN0ZWRTb3VyY2VzO1xuICAgIGNvbnN0IHNlbGVjdGVkVGFibGVJZHMgPSBuZXcgU2V0KHNlbGVjdGVkU291cmNlcy5tYXAoKGl0ZW0pID0+IGl0ZW0udGFibGUpKTtcbiAgICBjb25zdCBhdmFpbGFibGVDb2x1bW5zID0gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuY29sdW1ucyA/PyBbXSkuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+IHNlbGVjdGVkVGFibGVJZHMuaGFzKGl0ZW0udGFibGUpXG4gICAgKTtcbiAgICBjb25zdCBhdmFpbGFibGVDb2x1bW5NYXAgPSBuZXcgTWFwKFxuICAgICAgYXZhaWxhYmxlQ29sdW1ucy5tYXAoKGl0ZW0pID0+IFtpdGVtLnZhbHVlLCBpdGVtXSlcbiAgICApO1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5ID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KFxuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGF2YWlsYWJsZUNvbHVtbk1hcC5nZXQoaXRlbSk7XG4gICAgICAgIHJldHVybiAhIWNvbHVtbiAmJiBjb2x1bW4uaXNBZ2dyZWdhdGFibGUgIT09IGZhbHNlO1xuICAgICAgfSksXG4gICAgICAoaXRlbSkgPT4gaXRlbVxuICAgICk7XG4gICAgY29uc3QgZ3JvdXBCeVNldCA9IG5ldyBTZXQodGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWVsZHMgPSB0aGlzLm1lcmdlTGVnYWN5RnVuY3Rpb25zSW50b0ZpZWxkcyhcbiAgICAgIHRoaXMubm9ybWFsaXplZEZpZWxkcyxcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5mdW5jdGlvbnNcbiAgICApO1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHMgPSB0aGlzLmRlZHVwbGljYXRlQnlLZXkoXG4gICAgICBub3JtYWxpemVkRmllbGRzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBhdmFpbGFibGVDb2x1bW5NYXAuZ2V0KGl0ZW0uY29sdW1uKTtcbiAgICAgICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3JvdXBCeVNldC5oYXMoaXRlbS5jb2x1bW4pIHx8ICghIWl0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZSAmJiBjb2x1bW4uaXNBZ2dyZWdhdGFibGUgIT09IGZhbHNlKTtcbiAgICAgIH0pLFxuICAgICAgKGl0ZW0pID0+IGAke2l0ZW0uY29sdW1ufXwke2l0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZSA/PyBFTVBUWV9WQUxVRX1gXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZnVuY3Rpb25zID0gdGhpcy5leHRyYWN0RnVuY3Rpb25zRnJvbUZpZWxkcyhcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHMubWFwKChpdGVtKSA9PiB0aGlzLm5vcm1hbGl6ZUdlbmVyYXRlZEZpZWxkKGl0ZW0pKVxuICAgICk7XG4gICAgY29uc3Qgc29ydEFsbG93ZWQgPSBuZXcgU2V0KFxuICAgICAgdGhpcy5zb3J0U2VsZWN0YWJsZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5pZClcbiAgICApO1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KFxuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvcnRpbmcuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBzb3J0QWxsb3dlZC5oYXMoXG4gICAgICAgICAgdGhpcy5idWlsZFNvcnRTZWxlY3Rpb25JZChpdGVtLmNvbHVtbiwgaXRlbS5mdW5jdGlvbk5hbWUgPz8gRU1QVFlfVkFMVUUpXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICAoaXRlbSkgPT4gYCR7aXRlbS5jb2x1bW59fCR7aXRlbS5mdW5jdGlvbk5hbWUgPz8gRU1QVFlfVkFMVUV9fCR7aXRlbS5kaXJlY3Rpb259YFxuICAgICk7XG4gICAgaWYgKHNlbGVjdGVkU291cmNlcy5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KFxuICAgICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gYXZhaWxhYmxlQ29sdW1uTWFwLmdldChpdGVtLnNvdXJjZUNvbHVtbik7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXZhaWxhYmxlQ29sdW1uTWFwLmdldChpdGVtLnRhcmdldENvbHVtbik7XG4gICAgICAgICAgcmV0dXJuICEhc291cmNlICYmICEhdGFyZ2V0ICYmIHNvdXJjZS50YWJsZSAhPT0gdGFyZ2V0LnRhYmxlO1xuICAgICAgICB9KSxcbiAgICAgICAgKGl0ZW0pID0+IGAke2l0ZW0uc291cmNlQ29sdW1ufXwke2l0ZW0udGFyZ2V0Q29sdW1ufXwke2l0ZW0ub3BlcmF0b3J9YFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMgPSB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVycy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS52YWx1ZVR5cGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgICAgIHJldHVybiAhIWl0ZW0uZG9tYWluRXhwcmVzc2lvbj8udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhdmFpbGFibGVDb2x1bW5NYXAuaGFzKGl0ZW0uY29sdW1uKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVByZXZpZXdDb2x1bW5zKCk6IFByZXZpZXdDb2x1bW5MaWtlW10ge1xuICAgIGNvbnN0IHByZXZpZXdDb2x1bW5zID0gKFxuICAgICAgKHRoaXMuY29uZmlnLnByZXZpZXc/LmNvbHVtbnMgPz8gW10pIGFzIFByZXZpZXdDb2x1bW5MaWtlW11cbiAgICApXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0/LmZpZWxkKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgZmllbGQ6IGl0ZW0uZmllbGQsXG4gICAgICAgIGhlYWRlcjogaXRlbS5oZWFkZXIgPz8gaXRlbS5maWVsZCxcbiAgICAgICAgdHlwZTogaXRlbS50eXBlLFxuICAgICAgfSkpO1xuICAgIGlmIChwcmV2aWV3Q29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBwcmV2aWV3Q29sdW1ucztcbiAgICB9XG4gICAgY29uc3QgZ2VuZXJhdGVkQ29sdW1ucyA9IFtcbiAgICAgIC4uLnRoaXMubm9ybWFsaXplZEZpZWxkcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGZpZWxkOlxuICAgICAgICAgIGl0ZW0uZnVuY3Rpb24/LmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUlxuICAgICAgICAgIGl0ZW0uYWxpYXM/LnRyaW0oKSB8fCAvLyBOT1NPTkFSXG4gICAgICAgICAgaXRlbS5jb2x1bW4sXG4gICAgICAgIGhlYWRlcjpcbiAgICAgICAgICBpdGVtLmZ1bmN0aW9uPy5hbGlhcz8udHJpbSgpIHx8IC8vIE5PU09OQVJcbiAgICAgICAgICBpdGVtLmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUlxuICAgICAgICAgIChpdGVtLmZ1bmN0aW9uXG4gICAgICAgICAgICA/IGAke3RoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwoaXRlbS5mdW5jdGlvbi5mdW5jdGlvbk5hbWUpfSAke3RoaXMucmVzb2x2ZUNvbHVtbkxhYmVsKGl0ZW0uY29sdW1uKX1gXG4gICAgICAgICAgICA6IHRoaXMucmVzb2x2ZUNvbHVtbkxhYmVsKGl0ZW0uY29sdW1uKSksXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgfSkpLFxuICAgIF07XG4gICAgcmV0dXJuIHRoaXMuZGVkdXBsaWNhdGVCeUtleShnZW5lcmF0ZWRDb2x1bW5zLCAoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZFRhYmxlU2VsZWN0aW9uUm93cyhcbiAgICBzZWxlY3RlZElkczogc3RyaW5nW10sXG4gICAgc2VhcmNoOiBzdHJpbmdcbiAgKTogU2VsZWN0aW9uUm93W10ge1xuICAgIHJldHVybiAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS50YWJsZXMgPz8gW10pXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlVGFibGVEaXNwbGF5UGFydHMoaXRlbS52YWx1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgbmFtZTogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgICBkYkxhYmVsOiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICAgIHRhYmxlTGFiZWw6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgICAgcGF0aFR5cGU6IFwidGFibGVcIiBhcyBjb25zdCxcbiAgICAgICAgICBwcmVmaXg6IHBhcnRzLmRiTGFiZWwsXG4gICAgICAgICAgbWV0YTogaXRlbS5kZXNjcmlwdGlvbiB8fCBpdGVtLmRpc3BsYXlOYW1lIHx8IEVNUFRZX1ZBTFVFLCAvLyBOT1NPTkFSXG4gICAgICAgICAgbm90ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5jbHVkZXMoaXRlbS52YWx1ZSksXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIHRoaXMubWF0Y2hlc1NlYXJjaChbaXRlbS5wcmVmaXggPz8gRU1QVFlfVkFMVUUsIGl0ZW0ubmFtZSwgaXRlbS5tZXRhLCBpdGVtLm5vdGUgPz8gRU1QVFlfVkFMVUVdLCBzZWFyY2gpXG4gICAgICApO1xuICB9XG4gIHByaXZhdGUgYnVpbGRDb2x1bW5TZWxlY3Rpb25Sb3dzKFxuICAgIGl0ZW1zOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSxcbiAgICBzZWxlY3RlZElkczogc3RyaW5nW10sXG4gICAgc2VhcmNoOiBzdHJpbmcsXG4gICAgbXVsdGlwbGUgPSB0cnVlXG4gICk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gaXRlbXNcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogaXRlbS52YWx1ZSxcbiAgICAgICAgICBuYW1lOiBwYXJ0cy5maWVsZExhYmVsLFxuICAgICAgICAgIGRiTGFiZWw6IHBhcnRzLmRiTGFiZWwsXG4gICAgICAgICAgdGFibGVMYWJlbDogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgICBwYXRoVHlwZTogXCJjb2x1bW5cIiBhcyBjb25zdCxcbiAgICAgICAgICBwcmVmaXg6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgICAgbWV0YTogaXRlbS5kYXRhVHlwZSxcbiAgICAgICAgICBub3RlOiBpdGVtLmZ1bGxOYW1lLFxuICAgICAgICAgIHNlbGVjdGVkOiBtdWx0aXBsZVxuICAgICAgICAgICAgPyBzZWxlY3RlZElkcy5pbmNsdWRlcyhpdGVtLnZhbHVlKVxuICAgICAgICAgICAgOiBzZWxlY3RlZElkc1swXSA9PT0gaXRlbS52YWx1ZSxcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgdGhpcy5tYXRjaGVzU2VhcmNoKFtpdGVtLnByZWZpeCA/PyBFTVBUWV9WQUxVRSwgaXRlbS5uYW1lLCBpdGVtLm1ldGEsIGl0ZW0ubm90ZSA/PyBFTVBUWV9WQUxVRV0sIHNlYXJjaClcbiAgICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZENvbHVtblBpY2tsaXN0SXRlbXMoXG4gICAgaXRlbXM6IER5bmFtaWNWaWV3QnVpbGRlckNvbHVtbk9wdGlvbltdXG4gICk6IENvbHVtblBpY2tsaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBwaWNrbGlzdElkID0gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RJZChpdGVtLnZhbHVlKTtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS52YWx1ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwaWNrbGlzdElkID8/IDAsXG4gICAgICAgIHRpdGxlOiBgJHtwYXJ0cy50YWJsZUxhYmVsfS4ke3BhcnRzLmZpZWxkTGFiZWx9YCxcbiAgICAgICAgdGl0bGVQcmVmaXg6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgIHRpdGxlU3VmZml4OiBwYXJ0cy5maWVsZExhYmVsLFxuICAgICAgICB0aXRsZVByZWZpeENvbG9yOiBWSVNVQUxfU1FMX1RBQkxFX0NPTE9SLFxuICAgICAgICB0aXRsZVN1ZmZpeENvbG9yOiBWSVNVQUxfU1FMX0ZJRUxEX0NPTE9SLFxuICAgICAgICBiYWRnZTogaXRlbS5kYXRhVHlwZSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgICAgYmFkZ2VDb2xvcjogUElDS0xJU1RfREFUQV9UWVBFX0JBREdFX0NPTE9SLFxuICAgICAgICBjb2x1bW46IGl0ZW0udmFsdWUsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgYnVpbGRUYWJsZVBpY2tsaXN0SXRlbXMoXG4gICAgaXRlbXM6IER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uW11cbiAgKTogVGFibGVQaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlVGFibGVEaXNwbGF5UGFydHMoaXRlbS52YWx1ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpbmRleCArIDEsXG4gICAgICAgIHRpdGxlOiBgJHtwYXJ0cy5kYkxhYmVsfS4ke3BhcnRzLnRhYmxlTGFiZWx9YCxcbiAgICAgICAgdGl0bGVQcmVmaXg6IHBhcnRzLmRiTGFiZWwsXG4gICAgICAgIHRpdGxlU3VmZml4OiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICB0aXRsZVByZWZpeENvbG9yOiBWSVNVQUxfU1FMX1RBQkxFX0NPTE9SLFxuICAgICAgICB0aXRsZVN1ZmZpeENvbG9yOiBWSVNVQUxfU1FMX0ZJRUxEX0NPTE9SLFxuICAgICAgICBiYWRnZTpcbiAgICAgICAgICBpdGVtLmRpc3BsYXlOYW1lICYmIGl0ZW0uZGlzcGxheU5hbWUgIT09IHBhcnRzLnRhYmxlTGFiZWxcbiAgICAgICAgICAgID8gaXRlbS5kaXNwbGF5TmFtZVxuICAgICAgICAgICAgOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgYmFkZ2VDb2xvcjogUElDS0xJU1RfREFUQV9UWVBFX0JBREdFX0NPTE9SLFxuICAgICAgICB0YWJsZTogaXRlbS52YWx1ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlQ29sdW1uc0Zyb21QaWNrbGlzdElkcyhpZHM6IG51bWJlcltdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBpZHNcbiAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdENvbHVtbihpZCkpXG4gICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBzdHJpbmcgPT4gISFpdGVtKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVMYXN0Q29sdW1uRnJvbVBpY2tsaXN0SWRzKGlkczogbnVtYmVyW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5yZXNvbHZlQ29sdW1uc0Zyb21QaWNrbGlzdElkcyhpZHMpO1xuICAgIHJldHVybiBjb2x1bW5zLmF0KC0xKSA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVRhYmxlUGlja2xpc3RJZCh0YWJsZVZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgICBjb25zdCBpdGVtSW5kZXggPSAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS50YWJsZXMgPz8gW10pLmZpbmRJbmRleChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0YWJsZVZhbHVlXG4gICAgKTtcblxuICAgIHJldHVybiBpdGVtSW5kZXggPj0gMCA/IGl0ZW1JbmRleCArIDEgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVRhYmxlUGlja2xpc3RUYWJsZShpZDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlbSA9ICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSkuZmluZChcbiAgICAgIChfZW50cnksIGluZGV4KSA9PiBpbmRleCArIDEgPT09IGlkXG4gICAgKTtcblxuICAgIHJldHVybiBpdGVtPy52YWx1ZSA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVRhYmxlc0Zyb21QaWNrbGlzdElkcyhpZHM6IG51bWJlcltdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBpZHNcbiAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLnJlc29sdmVUYWJsZVBpY2tsaXN0VGFibGUoaWQpKVxuICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+ICEhaXRlbSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlQ29sdW1uUGlja2xpc3RJZChjb2x1bW46IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuYXZhaWxhYmxlQ29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gY29sdW1uXG4gICAgKTtcblxuICAgIHJldHVybiBpdGVtSW5kZXggPj0gMCA/IGl0ZW1JbmRleCArIDEgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtblBpY2tsaXN0Q29sdW1uKGlkOiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5hdmFpbGFibGVDb2x1bW5zW2lkIC0gMV07XG4gICAgcmV0dXJuIGl0ZW0/LnZhbHVlID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBtYXRjaGVzU2VhcmNoKHZhbHVlczogc3RyaW5nW10sIHNlYXJjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IHRoaXMubm9ybWFsaXplKHNlYXJjaCk7XG4gICAgaWYgKCFub3JtYWxpemVkU2VhcmNoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcy5zb21lKCh2YWx1ZSkgPT5cbiAgICAgIHRoaXMubm9ybWFsaXplKHZhbHVlKS5pbmNsdWRlcyhub3JtYWxpemVkU2VhcmNoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBub3JtYWxpemUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh2YWx1ZSA/PyBcIlwiKVxuICAgICAgLm5vcm1hbGl6ZShcIk5GRFwiKVxuICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnRyaW0oKTtcbiAgfVxuICBwcml2YXRlIHRvZ2dsZU11bHRpcGxlVmFsdWUodmFsdWVzOiBzdHJpbmdbXSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgPyB2YWx1ZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSB2YWx1ZSlcbiAgICAgIDogWy4uLnZhbHVlcywgdmFsdWVdO1xuICB9XG4gIHByaXZhdGUgZmlsdGVyRnVuY3Rpb25TZWxlY3RhYmxlQ29sdW1ucyhcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZ1xuICApOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEJ5ID0gbmV3IFNldCh0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeSk7XG4gICAgY29uc3QgYWxsID0gdGhpcy5hdmFpbGFibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiAhc2VsZWN0ZWRHcm91cEJ5LmhhcyhpdGVtLnZhbHVlKVxuICAgICk7XG4gICAgaWYgKGZ1bmN0aW9uTmFtZSA9PT0gXCJjb3VudFwiKSB7XG4gICAgICByZXR1cm4gYWxsO1xuICAgIH1cbiAgICBpZiAoW1wic3VtXCIsIFwiYXZnXCIsIFwibWluXCIsIFwibWF4XCJdLmluY2x1ZGVzKGZ1bmN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuaXNOdW1lcmljVHlwZShpdGVtLmRhdGFUeXBlKSk7XG4gICAgfVxuICAgIHJldHVybiBhbGw7XG4gIH1cbiAgcHJpdmF0ZSBmaWx0ZXJPcGVyYXRvcnNGb3JDb2x1bW4oXG4gICAgY29sdW1uOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25cbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRhVHlwZSA9IChjb2x1bW4uZGF0YVR5cGUgPz8gRU1QVFlfVkFMVUUpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAobm9ybWFsaXplZERhdGFUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIFtcIkVRVUFMXCIsIFwiTk9UX0VRVUFMXCIsIFwiRU1QVFlcIiwgXCJOT1RfRU1QVFlcIl07XG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWREYXRhVHlwZSA9PT0gXCJkYXRldGltZVwiIHx8IG5vcm1hbGl6ZWREYXRhVHlwZSA9PT0gXCJ0aW1lXCIgfHwgbm9ybWFsaXplZERhdGFUeXBlID09PSBcInRpbWVzdGFtcFwiKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcIkVRVUFMXCIsXG4gICAgICAgIFwiTk9UX0VRVUFMXCIsXG4gICAgICAgIFwiR1JFQVRFUl9USEFOXCIsXG4gICAgICAgIFwiR1JFQVRFUl9USEFOX09SX0VRVUFMXCIsXG4gICAgICAgIFwiTEVTU19USEFOXCIsXG4gICAgICAgIFwiTEVTU19USEFOX09SX0VRVUFMXCIsXG4gICAgICAgIFwiQkVUV0VFTlwiLFxuICAgICAgICBcIkVNUFRZXCIsXG4gICAgICAgIFwiTk9UX0VNUFRZXCIsXG4gICAgICBdO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNOdW1lcmljVHlwZShjb2x1bW4uZGF0YVR5cGUpIHx8XG4gICAgICBub3JtYWxpemVkRGF0YVR5cGUgPT09IFwiZGF0ZVwiXG4gICAgKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcIkVRVUFMXCIsXG4gICAgICAgIFwiTk9UX0VRVUFMXCIsXG4gICAgICAgIFwiR1JFQVRFUl9USEFOXCIsXG4gICAgICAgIFwiR1JFQVRFUl9USEFOX09SX0VRVUFMXCIsXG4gICAgICAgIFwiTEVTU19USEFOXCIsXG4gICAgICAgIFwiTEVTU19USEFOX09SX0VRVUFMXCIsXG4gICAgICAgIFwiQkVUV0VFTlwiLFxuICAgICAgICBcIklOXCIsXG4gICAgICAgIFwiRU1QVFlcIixcbiAgICAgICAgXCJOT1RfRU1QVFlcIixcbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICBcIkVRVUFMXCIsXG4gICAgICBcIk5PVF9FUVVBTFwiLFxuICAgICAgXCJDT05UQUlOU1wiLFxuICAgICAgXCJET0VTX05PVF9DT05UQUlOXCIsXG4gICAgICBcIlNUQVJUU19XSVRIXCIsXG4gICAgICBcIkVORFNfV0lUSFwiLFxuICAgICAgXCJJTlwiLFxuICAgICAgXCJFTVBUWVwiLFxuICAgICAgXCJOT1RfRU1QVFlcIixcbiAgICBdO1xuICB9XG4gIHByaXZhdGUgaXNOdW1lcmljVHlwZSh2YWx1ZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBbXG4gICAgICBcIm51bWJlclwiLFxuICAgICAgXCJpbnRlZ2VyXCIsXG4gICAgICBcImRlY2ltYWxcIixcbiAgICAgIFwiZmxvYXRcIixcbiAgICAgIFwiZG91YmxlXCIsXG4gICAgICBcImxvbmdcIixcbiAgICAgIFwic2hvcnRcIixcbiAgICBdLmluY2x1ZGVzKCh2YWx1ZSA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBwcml2YXRlIGlzRGF0ZVR5cGUodmFsdWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gW1wiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwidGltZXN0YW1wXCIsIFwidGltZVwiXS5pbmNsdWRlcyhcbiAgICAgICh2YWx1ZSA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZU9wdGlvbihcbiAgICB2YWx1ZTogc3RyaW5nXG4gICk6IER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKS5maW5kKFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVDb2x1bW5PcHRpb24oXG4gICAgdmFsdWU6IHN0cmluZ1xuICApOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS5jb2x1bW5zID8/IFtdKS5maW5kKFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZUxhYmVsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVUYWJsZU9wdGlvbih2YWx1ZSk/LnRleHQgPz8gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlVGFibGVEaXNwbGF5UGFydHModmFsdWU6IHN0cmluZyk6IFRhYmxlRGlzcGxheVBhcnRzIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucmVzb2x2ZVRhYmxlT3B0aW9uKHZhbHVlKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICBjb25zdCByYXdQYXJ0cyA9IHZhbHVlLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYkxhYmVsOiByYXdQYXJ0cy5sZW5ndGggPiAxID8gcmF3UGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oXCIuXCIpIDogXCJkYlwiLFxuICAgICAgICB0YWJsZUxhYmVsOiByYXdQYXJ0cy5hdCgtMSkgPz8gdmFsdWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGJMYWJlbDogdGFibGUuc2NoZW1hIHx8IFwiZGJcIiwgLy8gTk9TT05BUlxuICAgICAgdGFibGVMYWJlbDogdGFibGUudmFsdWUsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZVBhdGgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnJlc29sdmVUYWJsZURpc3BsYXlQYXJ0cyh2YWx1ZSk7XG4gICAgcmV0dXJuIHBhcnRzLmRiTGFiZWwgPyBgJHtwYXJ0cy5kYkxhYmVsfS4ke3BhcnRzLnRhYmxlTGFiZWx9YCA6IHBhcnRzLnRhYmxlTGFiZWw7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlQ29sdW1uUGFydHMoIC8vIE5PU09OQVIgLSBjb21wbGV4aXR5OiBleHRyYWN0aW9uIHdvdWxkIHJpc2sgYmVoYXZpb3IgY2hhbmdlXG4gICAgdmFsdWU6IHN0cmluZyB8IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkXG4gICk6IENvbHVtbkRpc3BsYXlQYXJ0cyB7XG4gICAgY29uc3QgY29sdW1uVmFsdWUgPVxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS5jb2x1bW4gPz8gRU1QVFlfVkFMVUU7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKGNvbHVtblZhbHVlKTtcbiAgICBpZiAoIWNvbHVtbikge1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSBgJHtjb2x1bW5WYWx1ZX1gLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYkxhYmVsOiBmYWxsYmFjay5sZW5ndGggPj0gTUlOX1BBUlRTX0ZPUl9EQiA/IGZhbGxiYWNrLnNsaWNlKDAsIERCX1BBUlRTX09GRlNFVCkuam9pbihcIi5cIikgOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgdGFibGVMYWJlbDogZmFsbGJhY2subGVuZ3RoID49IE1JTl9QQVJUU19GT1JfVEFCTEUgPyBmYWxsYmFja1tmYWxsYmFjay5sZW5ndGggLSBNSU5fUEFSVFNfRk9SX1RBQkxFXSA6IGNvbHVtblZhbHVlLFxuICAgICAgICBmaWVsZExhYmVsOiBmYWxsYmFjay5hdCgtMSkgPz8gY29sdW1uVmFsdWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IChjb2x1bW4uZnVsbE5hbWUgPz8gY29sdW1uVmFsdWUpLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRiTGFiZWw6IHBhcnRzLmxlbmd0aCA+PSBNSU5fUEFSVFNfRk9SX0RCID8gcGFydHMuc2xpY2UoMCwgREJfUEFSVFNfT0ZGU0VUKS5qb2luKFwiLlwiKSA6IEVNUFRZX1ZBTFVFLFxuICAgICAgdGFibGVMYWJlbDogcGFydHMubGVuZ3RoID49IE1JTl9QQVJUU19GT1JfVEFCTEUgPyBwYXJ0c1twYXJ0cy5sZW5ndGggLSBNSU5fUEFSVFNfRk9SX1RBQkxFXSA6IHRoaXMucmVzb2x2ZVRhYmxlUGF0aChjb2x1bW4udGFibGUpLFxuICAgICAgZmllbGRMYWJlbDogcGFydHMuYXQoLTEpID8/IGNvbHVtbi52YWx1ZSxcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtbkxhYmVsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVTb3J0RHJhZnRMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuc29ydERyYWZ0LmNvbHVtbik7XG4gICAgaWYgKCF0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5yZXNvbHZlRnVuY3Rpb25MYWJlbCh0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUpfSgke2Jhc2V9KWA7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZFNvcnRTZWxlY3Rpb25JZChcbiAgICBjb2x1bW46IHN0cmluZyxcbiAgICBmdW5jdGlvbk5hbWUgPSBFTVBUWV9WQUxVRVxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjb2x1bW59Ojoke2Z1bmN0aW9uTmFtZSB8fCBFTVBUWV9TT1JUX0ZVTkNUSU9OfWA7XG4gIH1cbiAgcHJpdmF0ZSBwYXJzZVNvcnRTZWxlY3Rpb25JZChcbiAgICBzZWxlY3Rpb25JZDogc3RyaW5nXG4gICk6IHsgY29sdW1uOiBzdHJpbmc7IGZ1bmN0aW9uTmFtZTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IFtjb2x1bW4sIGZ1bmN0aW9uTmFtZSA9IEVNUFRZX1NPUlRfRlVOQ1RJT05dID0gc2VsZWN0aW9uSWQuc3BsaXQoXCI6OlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uLFxuICAgICAgZnVuY3Rpb25OYW1lOlxuICAgICAgICBmdW5jdGlvbk5hbWUgPT09IEVNUFRZX1NPUlRfRlVOQ1RJT04gPyBFTVBUWV9WQUxVRSA6IGZ1bmN0aW9uTmFtZSxcbiAgICB9O1xuICB9XG4gIHJlc29sdmVDb2x1bW5QYXRoKHZhbHVlOiBzdHJpbmcgfCBEeW5hbWljVmlld0J1aWxkZXJGaWVsZCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uVmFsdWUgPVxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS5jb2x1bW4gPz8gRU1QVFlfVkFMVUU7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKGNvbHVtblZhbHVlKTtcbiAgICBpZiAoIWNvbHVtbikge1xuICAgICAgcmV0dXJuIGNvbHVtblZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IChjb2x1bW4uZnVsbE5hbWUgPz8gY29sdW1uVmFsdWUpLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+PSBNSU5fUEFSVFNfRk9SX1RBQkxFID8gcGFydHMuc2xpY2UoREJfUEFSVFNfT0ZGU0VUKS5qb2luKFwiLlwiKSA6IGNvbHVtbi5mdWxsTmFtZTtcbiAgfVxuICBwcml2YXRlIG5vcm1hbGl6ZUdlbmVyYXRlZEZpZWxkKFxuICAgIHZhbHVlOiBzdHJpbmcgfCBEeW5hbWljVmlld0J1aWxkZXJGaWVsZFxuICApOiBEeW5hbWljVmlld0J1aWxkZXJGaWVsZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHsgY29sdW1uOiB2YWx1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uOiB2YWx1ZS5jb2x1bW4sXG4gICAgICBhbGlhczogdmFsdWUuYWxpYXM/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIHdpZHRoOiB2YWx1ZS53aWR0aD8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb246IHZhbHVlLmZ1bmN0aW9uXG4gICAgICAgID8ge1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogdmFsdWUuZnVuY3Rpb24uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgICAgYWxpYXM6IHZhbHVlLmZ1bmN0aW9uLmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkRmllbGRFbnRyaWVzKCk6IEFycmF5PFxuICAgIER5bmFtaWNWaWV3QnVpbGRlckZpZWxkICYgeyBzb3VyY2VJbmRleDogbnVtYmVyIH1cbiAgPiB7XG4gICAgY29uc3QgZW50cmllcyA9IHRoaXMubm9ybWFsaXplZEZpZWxkcy5tYXAoKGl0ZW0sIHNvdXJjZUluZGV4KSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIHNvdXJjZUluZGV4LFxuICAgIH0pKTtcbiAgICBjb25zdCBwcmV2aWV3SW5kZXhlcyA9IHRoaXMuZ2V0RmllbGRQcmV2aWV3U291cmNlSW5kZXhlcygpO1xuICAgIHJldHVybiBwcmV2aWV3SW5kZXhlcy5tYXAoKGluZGV4KSA9PiBlbnRyaWVzW2luZGV4XSkuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG4gIHByaXZhdGUgZ2V0RmllbGRQcmV2aWV3U291cmNlSW5kZXhlcygpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgYmFzZUluZGV4ZXMgPSB0aGlzLm5vcm1hbGl6ZWRGaWVsZHMubWFwKChfLCBpbmRleCkgPT4gaW5kZXgpO1xuICAgIGlmICh0aGlzLmRyYWdnaW5nRmllbGRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGJhc2VJbmRleGVzO1xuICAgIH1cbiAgICBjb25zdCByZW1haW5pbmdJbmRleGVzID0gYmFzZUluZGV4ZXMuZmlsdGVyKFxuICAgICAgKGluZGV4KSA9PiBpbmRleCAhPT0gdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXhcbiAgICApO1xuICAgIGNvbnN0IGluc2VydGlvbkluZGV4ID1cbiAgICAgIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9PT0gbnVsbFxuICAgICAgICA/IGJhc2VJbmRleGVzLmluZGV4T2YodGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXgpXG4gICAgICAgIDogTWF0aC5taW4odGhpcy5kcmFnUHJldmlld0luZGV4LCByZW1haW5pbmdJbmRleGVzLmxlbmd0aCk7XG4gICAgcmVtYWluaW5nSW5kZXhlcy5zcGxpY2UoaW5zZXJ0aW9uSW5kZXgsIDAsIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4KTtcbiAgICByZXR1cm4gcmVtYWluaW5nSW5kZXhlcztcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGdW5jdGlvbkxhYmVsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVPcHRpb25MYWJlbCh2YWx1ZSwgdGhpcy5mdW5jdGlvbk9wdGlvbnMpO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUpvaW5PcGVyYXRvckxhYmVsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVPcHRpb25MYWJlbCh2YWx1ZSwgdGhpcy5qb2luT3BlcmF0b3JPcHRpb25zKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVKb2luT3BlcmF0b3JPcHRpb25UZXh0KG9wdGlvbjogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBmYWxsYmFjayA9IEpPSU5fT1BFUkFUT1JfTEFCRUxTW29wdGlvbi52YWx1ZV07XG4gICAgY29uc3QgaGFzUmVhZGFibGVUZXh0ID0gL1tBLVphLXrDgC3Dv10vLnRlc3Qob3B0aW9uLnRleHQpO1xuXG4gICAgaWYgKCFmYWxsYmFjayB8fCBoYXNSZWFkYWJsZVRleHQpIHtcbiAgICAgIHJldHVybiBvcHRpb24udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LiR7ZmFsbGJhY2sua2V5fWAsXG4gICAgICBmYWxsYmFjay5mYWxsYmFja1xuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmlsdGVyT3BlcmF0b3JMYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXhcbiAgICAgIH0uZmlsdGVycy5vcGVyYXRvcnMuJHt2YWx1ZS50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICB0aGlzLmh1bWFuaXplS2V5KHZhbHVlKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlT3B0aW9uTGFiZWwoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXVxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBvcHRpb25zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKT8udGV4dCA/PyB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJEaXNwbGF5VmFsdWUoZmlsdGVyOiBEeW5hbWljVmlld0J1aWxkZXJGaWx0ZXIpOiBzdHJpbmcgeyAvLyBOT1NPTkFSIC0gY29tcGxleGl0eTogZXh0cmFjdGlvbiB3b3VsZCByaXNrIGJlaGF2aW9yIGNoYW5nZVxuICAgIGlmIChmaWx0ZXIudmFsdWVUeXBlID09PSBGSUxURVJfTU9ERV9ET01BSU4pIHtcbiAgICAgIHJldHVybiBmaWx0ZXIuZG9tYWluRXhwcmVzc2lvbiA/PyBFTVBUWV9WQUxVRTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiBgOiR7ZmlsdGVyLnBhcmFtZXRlck5hbWUgPz8gRU1QVFlfVkFMVUV9YDtcbiAgICB9XG4gICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gXCJJTlwiKSB7XG4gICAgICByZXR1cm4gKGZpbHRlci52YWx1ZXMgPz8gW10pLmpvaW4oXCIsIFwiKTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gXCJCRVRXRUVOXCIpIHtcbiAgICAgIHJldHVybiBgJHtmaWx0ZXIudmFsdWVzPy5bMF0gPz8gRU1QVFlfVkFMVUV9IC0gJHtmaWx0ZXIudmFsdWVzPy5bMV0gPz8gRU1QVFlfVkFMVUVcbiAgICAgICAgfWA7XG4gICAgfVxuICAgIGlmIChbXCJFTVBUWVwiLCBcIk5PVF9FTVBUWVwiXS5pbmNsdWRlcyhmaWx0ZXIub3BlcmF0b3IpKSB7XG4gICAgICByZXR1cm4gXCItXCI7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXIudmFsdWUgPz8gRU1QVFlfVkFMVUU7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEdlbmVyYXRlZFNxbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNvdXJjZXMgPSB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcztcbiAgICBpZiAoIXNvdXJjZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gRU1QVFlfVkFMVUU7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdFBhcnRzID0gdGhpcy5ub3JtYWxpemVkRmllbGRzXG4gICAgICAubWFwKChmaWVsZCkgPT4gdGhpcy5yZXNvbHZlRmllbGRTcWwoZmllbGQpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCBzcWwgPSBbXG4gICAgICBcIlNFTEVDVFwiLFxuICAgICAgYCAgJHsoc2VsZWN0UGFydHMubGVuZ3RoID8gc2VsZWN0UGFydHMgOiBbXCIqXCJdKS5qb2luKFwiLFxcbiAgXCIpfWAsXG4gICAgICBgRlJPTSAke3RoaXMucmVzb2x2ZVNvdXJjZVNxbChzb3VyY2VzWzBdKX1gLFxuICAgICAgLi4udGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zLm1hcCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlSm9pblNxbChpdGVtKSksXG4gICAgICAuLi50aGlzLmJ1aWxkV2hlcmVTcWwoKSxcbiAgICAgIC4uLnRoaXMuYnVpbGRHcm91cEJ5U3FsKCksXG4gICAgICAuLi50aGlzLmJ1aWxkT3JkZXJCeVNxbCgpLFxuICAgIF07XG4gICAgcmV0dXJuIHNxbC5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHByaXZhdGUgYnVpbGRXaGVyZVNxbCgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbnMgPSB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVyc1xuICAgICAgLm1hcCgoZmlsdGVyLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjb25uZWN0b3IgPSBpbmRleCA9PT0gMCA/IFwiV0hFUkVcIiA6IGZpbHRlci5jb25uZWN0b3I7XG4gICAgICAgIHJldHVybiBgICAke2Nvbm5lY3Rvcn0gJHt0aGlzLnJlc29sdmVGaWx0ZXJTcWwoZmlsdGVyKX1gO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmVuZHNXaXRoKEVNUFRZX1ZBTFVFKSk7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25zLmxlbmd0aCA/IGV4cHJlc3Npb25zIDogW107XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEdyb3VwQnlTcWwoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICBcIkdST1VQIEJZXCIsXG4gICAgICBgICAke3RoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5XG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHRoaXMucmVzb2x2ZUNvbHVtblNxbChpdGVtKSlcbiAgICAgICAgLmpvaW4oXCIsXFxuICBcIil9YCxcbiAgICBdO1xuICB9XG4gIHByaXZhdGUgYnVpbGRPcmRlckJ5U3FsKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgXCJPUkRFUiBCWVwiLFxuICAgICAgYCAgJHt0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZ1xuICAgICAgICAubWFwKChpdGVtKSA9PiBgJHt0aGlzLnJlc29sdmVTb3J0U3FsKGl0ZW0pfSAke2l0ZW0uZGlyZWN0aW9ufWApXG4gICAgICAgIC5qb2luKFwiLFxcbiAgXCIpfWAsXG4gICAgXTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVTb3VyY2VTcWwoc291cmNlOiBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbiB8IHtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIGFsaWFzOiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhYmxlID0gXCJ0YWJsZVwiIGluIHNvdXJjZSA/IHRoaXMucmVzb2x2ZVRhYmxlT3B0aW9uKHNvdXJjZS50YWJsZSkgOiBzb3VyY2U7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgcmV0dXJuIEVNUFRZX1ZBTFVFO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2VBbGlhcyA9IFwidGFibGVcIiBpbiBzb3VyY2UgPyBzb3VyY2UuYWxpYXMgOiBFTVBUWV9WQUxVRTtcbiAgICBjb25zdCBmdWxsTmFtZSA9IHRhYmxlLnNjaGVtYSA/IGAke3RhYmxlLnNjaGVtYX0uJHt0YWJsZS52YWx1ZX1gIDogdGFibGUudmFsdWU7XG4gICAgcmV0dXJuIHNvdXJjZUFsaWFzID8gYCR7ZnVsbE5hbWV9ICR7c291cmNlQWxpYXN9YCA6IGZ1bGxOYW1lO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUpvaW5TcWwoaXRlbTogRHluYW1pY1ZpZXdCdWlsZGVySm9pbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBKT0lOICR7dGhpcy5yZXNvbHZlSm9pbmVkVGFibGVTcWwoXG4gICAgICBpdGVtXG4gICAgKX0gT04gJHt0aGlzLnJlc29sdmVDb2x1bW5TcWwoaXRlbS5zb3VyY2VDb2x1bW4pfSAke3RoaXMucmVzb2x2ZUpvaW5PcGVyYXRvclNxbChcbiAgICAgIGl0ZW0ub3BlcmF0b3JcbiAgICApfSAke3RoaXMucmVzb2x2ZUNvbHVtblNxbChpdGVtLnRhcmdldENvbHVtbil9YDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVKb2luZWRUYWJsZVNxbChpdGVtOiBEeW5hbWljVmlld0J1aWxkZXJKb2luKTogc3RyaW5nIHtcbiAgICBjb25zdCB0YXJnZXRDb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24oaXRlbS50YXJnZXRDb2x1bW4pO1xuICAgIGlmICghdGFyZ2V0Q29sdW1uKSB7XG4gICAgICByZXR1cm4gRU1QVFlfVkFMVUU7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLmZpbmQoXG4gICAgICAoZW50cnkpID0+IGVudHJ5LnRhYmxlID09PSB0YXJnZXRDb2x1bW4udGFibGVcbiAgICApO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICByZXR1cm4gRU1QVFlfVkFMVUU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc29sdmVTb3VyY2VTcWwoc291cmNlKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVDb2x1bW5TcWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHZhbHVlKTtcbiAgICBpZiAoIWNvbHVtbikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBhbGlhcyA9IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS50YWJsZSA9PT0gY29sdW1uLnRhYmxlXG4gICAgKT8uYWxpYXM7XG4gICAgY29uc3QgZmllbGROYW1lID0gY29sdW1uLmZ1bGxOYW1lLnNwbGl0KFwiLlwiKS5wb3AoKSA/PyBjb2x1bW4udmFsdWU7XG4gICAgcmV0dXJuIGFsaWFzID8gYCR7YWxpYXN9LiR7ZmllbGROYW1lfWAgOiBjb2x1bW4uZnVsbE5hbWU7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmllbGRTcWwoZmllbGQ6IHN0cmluZyB8IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkRmllbGQgPSB0aGlzLm5vcm1hbGl6ZUdlbmVyYXRlZEZpZWxkKGZpZWxkKTtcbiAgICBjb25zdCBmaWVsZFNxbCA9IHRoaXMucmVzb2x2ZUNvbHVtblNxbChub3JtYWxpemVkRmllbGQuY29sdW1uKTtcbiAgICBpZiAobm9ybWFsaXplZEZpZWxkLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVGdW5jdGlvblNxbCh7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogbm9ybWFsaXplZEZpZWxkLmZ1bmN0aW9uLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgY29sdW1uOiBub3JtYWxpemVkRmllbGQuY29sdW1uLFxuICAgICAgICBhbGlhczpcbiAgICAgICAgICBub3JtYWxpemVkRmllbGQuZnVuY3Rpb24uYWxpYXM/LnRyaW0oKSB8fCAvLyBOT1NPTkFSXG4gICAgICAgICAgbm9ybWFsaXplZEZpZWxkLmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUlxuICAgICAgICAgIEVNUFRZX1ZBTFVFLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGFsaWFzID0gbm9ybWFsaXplZEZpZWxkLmFsaWFzPy50cmltKCk7XG4gICAgcmV0dXJuIGFsaWFzID8gYCR7ZmllbGRTcWx9IEFTICR7YWxpYXN9YCA6IGZpZWxkU3FsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUZ1bmN0aW9uU3FsKGl0ZW06IER5bmFtaWNWaWV3QnVpbGRlckZ1bmN0aW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkRnVuY3Rpb24gPSBpdGVtLmZ1bmN0aW9uTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gdGhpcy5yZXNvbHZlQ29sdW1uU3FsKGl0ZW0uY29sdW1uKTtcbiAgICBjb25zdCBhbGlhcyA9IGl0ZW0uYWxpYXM/LnRyaW0oKTtcbiAgICByZXR1cm4gYWxpYXNcbiAgICAgID8gYCR7bm9ybWFsaXplZEZ1bmN0aW9ufSgke2FyZ3VtZW50fSkgQVMgJHthbGlhc31gXG4gICAgICA6IGAke25vcm1hbGl6ZWRGdW5jdGlvbn0oJHthcmd1bWVudH0pYDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVTb3J0U3FsKGl0ZW06IER5bmFtaWNWaWV3QnVpbGRlclNvcnQpOiBzdHJpbmcge1xuICAgIGlmICghaXRlbS5mdW5jdGlvbk5hbWU/LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbHVtblNxbChpdGVtLmNvbHVtbik7XG4gICAgfVxuICAgIHJldHVybiBgJHtpdGVtLmZ1bmN0aW9uTmFtZS50cmltKCkudG9VcHBlckNhc2UoKX0oJHt0aGlzLnJlc29sdmVDb2x1bW5TcWwoXG4gICAgICBpdGVtLmNvbHVtblxuICAgICl9KWA7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlSm9pbk9wZXJhdG9yU3FsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB7XG4gICAgICAgIEVRVUFMUzogXCI9XCIsXG4gICAgICAgIE5PVF9FUVVBTFM6IFwiPD5cIixcbiAgICAgIH1bdmFsdWVdID8/IHZhbHVlXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJTcWwoZmlsdGVyOiBEeW5hbWljVmlld0J1aWxkZXJGaWx0ZXIpOiBzdHJpbmcgeyAvLyBOT1NPTkFSIC0gY29tcGxleGl0eTogZXh0cmFjdGlvbiB3b3VsZCByaXNrIGJlaGF2aW9yIGNoYW5nZVxuICAgIGlmIChmaWx0ZXIudmFsdWVUeXBlID09PSBGSUxURVJfTU9ERV9ET01BSU4pIHtcbiAgICAgIHJldHVybiBgKCR7ZmlsdGVyLmRvbWFpbkV4cHJlc3Npb24gPz8gRU1QVFlfVkFMVUV9KWA7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5yZXNvbHZlQ29sdW1uU3FsKGZpbHRlci5jb2x1bW4pO1xuICAgIGlmICghZmllbGQpIHtcbiAgICAgIHJldHVybiBFTVBUWV9WQUxVRTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gXCJFTVBUWVwiKSB7XG4gICAgICByZXR1cm4gYCR7ZmllbGR9IElTIE5VTExgO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyLm9wZXJhdG9yID09PSBcIk5PVF9FTVBUWVwiKSB7XG4gICAgICByZXR1cm4gYCR7ZmllbGR9IElTIE5PVCBOVUxMYDtcbiAgICB9XG4gICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gXCJJTlwiKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSAoZmlsdGVyLnZhbHVlcyA/PyBbXSkubWFwKChpdGVtKSA9PlxuICAgICAgICB0aGlzLnJlc29sdmVGaWx0ZXJWYWx1ZVNxbChmaWx0ZXIuY29sdW1uLCBmaWx0ZXIub3BlcmF0b3IsIGl0ZW0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIGAke2ZpZWxkfSBJTiAoJHt2YWx1ZXMuam9pbihcIiwgXCIpfSlgO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyLm9wZXJhdG9yID09PSBcIkJFVFdFRU5cIikge1xuICAgICAgcmV0dXJuIGAke2ZpZWxkfSBCRVRXRUVOICR7dGhpcy5yZXNvbHZlRmlsdGVyVmFsdWVTcWwoXG4gICAgICAgIGZpbHRlci5jb2x1bW4sXG4gICAgICAgIGZpbHRlci5vcGVyYXRvcixcbiAgICAgICAgZmlsdGVyLnZhbHVlcz8uWzBdXG4gICAgICApfSBBTkQgJHt0aGlzLnJlc29sdmVGaWx0ZXJWYWx1ZVNxbChcbiAgICAgICAgZmlsdGVyLmNvbHVtbixcbiAgICAgICAgZmlsdGVyLm9wZXJhdG9yLFxuICAgICAgICBmaWx0ZXIudmFsdWVzPy5bMV1cbiAgICAgICl9YDtcbiAgICB9XG4gICAgaWYgKGZpbHRlci52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiBgJHtmaWVsZH0gJHt0aGlzLnJlc29sdmVGaWx0ZXJPcGVyYXRvclNxbChcbiAgICAgICAgZmlsdGVyLm9wZXJhdG9yXG4gICAgICApfSA6JHtmaWx0ZXIucGFyYW1ldGVyTmFtZSA/PyBFTVBUWV9WQUxVRX1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7ZmllbGR9ICR7dGhpcy5yZXNvbHZlRmlsdGVyT3BlcmF0b3JTcWwoXG4gICAgICBmaWx0ZXIub3BlcmF0b3JcbiAgICApfSAke3RoaXMucmVzb2x2ZUZpbHRlclZhbHVlU3FsKGZpbHRlci5jb2x1bW4sIGZpbHRlci5vcGVyYXRvciwgZmlsdGVyLnZhbHVlKX1gO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUZpbHRlck9wZXJhdG9yU3FsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB7XG4gICAgICAgIEVRVUFMOiBcIj1cIixcbiAgICAgICAgTk9UX0VRVUFMOiBcIjw+XCIsXG4gICAgICAgIEdSRUFURVI6IFwiPlwiLFxuICAgICAgICBHUkVBVEVSX1RIQU46IFwiPlwiLFxuICAgICAgICBHUkVBVEVSX09SX0VRVUFMOiBcIj49XCIsXG4gICAgICAgIEdSRUFURVJfVEhBTl9PUl9FUVVBTDogXCI+PVwiLFxuICAgICAgICBMRVNTOiBcIjxcIixcbiAgICAgICAgTEVTU19USEFOOiBcIjxcIixcbiAgICAgICAgTEVTU19PUl9FUVVBTDogXCI8PVwiLFxuICAgICAgICBMRVNTX1RIQU5fT1JfRVFVQUw6IFwiPD1cIixcbiAgICAgICAgQ09OVEFJTlM6IFwiTElLRVwiLFxuICAgICAgICBET0VTX05PVF9DT05UQUlOOiBcIk5PVCBMSUtFXCIsXG4gICAgICAgIFNUQVJUU19XSVRIOiBcIkxJS0VcIixcbiAgICAgICAgRU5EU19XSVRIOiBcIkxJS0VcIixcbiAgICAgIH1bdmFsdWVdID8/IHZhbHVlXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJWYWx1ZVNxbChcbiAgICBjb2x1bW5WYWx1ZTogc3RyaW5nLFxuICAgIG9wZXJhdG9yOiBzdHJpbmcsXG4gICAgdmFsdWU6IHVua25vd25cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSA/PyBFTVBUWV9WQUxVRSk7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKGNvbHVtblZhbHVlKTtcbiAgICBpZiAoY29sdW1uPy5kYXRhVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBzdHJpbmdWYWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIiA/IFwiVFJVRVwiIDogXCJGQUxTRVwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc051bWVyaWNUeXBlKGNvbHVtbj8uZGF0YVR5cGUpICYmIHN0cmluZ1ZhbHVlKSB7XG4gICAgICByZXR1cm4gc3RyaW5nVmFsdWU7XG4gICAgfVxuICAgIGlmIChbXCJDT05UQUlOU1wiLCBcIkRPRVNfTk9UX0NPTlRBSU5cIiwgXCJTVEFSVFNfV0lUSFwiLCBcIkVORFNfV0lUSFwiXS5pbmNsdWRlcyhcbiAgICAgIG9wZXJhdG9yXG4gICAgKSkge1xuICAgICAgcmV0dXJuIHRoaXMucXVvdGVTcWxWYWx1ZSh0aGlzLmRlY29yYXRlTGlrZVZhbHVlKG9wZXJhdG9yLCBzdHJpbmdWYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5xdW90ZVNxbFZhbHVlKHN0cmluZ1ZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGRlY29yYXRlTGlrZVZhbHVlKG9wZXJhdG9yOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChvcGVyYXRvciA9PT0gXCJTVEFSVFNfV0lUSFwiKSB7XG4gICAgICByZXR1cm4gYCR7dmFsdWV9JWA7XG4gICAgfVxuICAgIGlmIChvcGVyYXRvciA9PT0gXCJFTkRTX1dJVEhcIikge1xuICAgICAgcmV0dXJuIGAlJHt2YWx1ZX1gO1xuICAgIH1cbiAgICBpZiAob3BlcmF0b3IgPT09IFwiQ09OVEFJTlNcIiB8fCBvcGVyYXRvciA9PT0gXCJET0VTX05PVF9DT05UQUlOXCIpIHtcbiAgICAgIHJldHVybiBgJSR7dmFsdWV9JWA7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIHF1b3RlU3FsVmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XG4gIH1cbiAgcHJpdmF0ZSBzeW5jTGF5b3V0TW9kZUl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMubGF5b3V0TW9kZUl0ZW1zWzBdLmxhYmVsID0gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmxheW91dE1vZGVzLnN0YWNrZWRgLFxuICAgICAgXCJCbG9jb3NcIlxuICAgICk7XG4gICAgdGhpcy5sYXlvdXRNb2RlSXRlbXNbMV0ubGFiZWwgPSB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubGF5b3V0TW9kZXMuc3BsaXRgLFxuICAgICAgXCJMaXN0YVwiXG4gICAgKTtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZExheW91dE1vZGVJdGVtcygpO1xuICB9XG4gIHByaXZhdGUgc3luY0ZpbHRlck1vZGVJdGVtcygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck1vZGVJdGVtc1swXS5sYWJlbCA9IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLm1vZGVzLmNvbmRpdGlvbmAsXG4gICAgICBcIkZpbHRyb1wiXG4gICAgKTtcbiAgICB0aGlzLmZpbHRlck1vZGVJdGVtc1sxXS5sYWJlbCA9IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgIFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIlxuICAgICk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTb3J0RGlyZWN0aW9uSXRlbXMoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbXMuc3BsaWNlKFxuICAgICAgMCxcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLnRoaXMuc29ydERpcmVjdGlvbk9wdGlvbnMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBsYWJlbDogaXRlbS50ZXh0LFxuICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgIH0pKVxuICAgICk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRTb3J0RGlyZWN0aW9uSXRlbXMoKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTZWxlY3RlZExheW91dE1vZGVJdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMubGF5b3V0TW9kZUl0ZW1zLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5sYXlvdXRNb2RlXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkTGF5b3V0TW9kZUl0ZW1zLnNwbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLnNlbGVjdGVkTGF5b3V0TW9kZUl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLihzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgc3luY1NlbGVjdGVkRmlsdGVyTW9kZUl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5maWx0ZXJNb2RlSXRlbXMuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0aGlzLmZpbHRlck1vZGFsTW9kZVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlck1vZGVJdGVtcy5zcGxpY2UoXG4gICAgICAwLFxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlck1vZGVJdGVtcy5sZW5ndGgsXG4gICAgICAuLi4oc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW10pXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTZWxlY3RlZFNvcnREaXJlY3Rpb25JdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc29ydERpcmVjdGlvbkl0ZW1zLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zLnNwbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLnNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLihzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0IGZpbHRlclNlcXVlbmNlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJFZGl0SW5kZXggPz8gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMubGVuZ3RoO1xuICB9XG4gIHByaXZhdGUgcGFyc2VNdWx0aVZhbHVlVGV4dCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG4gIHByaXZhdGUgYnVpbGRBbGlhc0ZvclRhYmxlKHRhYmxlOiBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3Qgd29yZHMgPSB0YWJsZS50ZXh0XG4gICAgICAuc3BsaXQoL1tcXHNfLi1dKy8pXG4gICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKHdvcmRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB3b3Jkc1xuICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtWzBdPy50b0xvd2VyQ2FzZSgpID8/IEVNUFRZX1ZBTFVFKVxuICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuICh0YWJsZS52YWx1ZS5zcGxpdChcIi5cIikucG9wKCkgPz8gdGFibGUudmFsdWUpXG4gICAgICAuc2xpY2UoMCwgQUxJQVNfTUFYX0xFTkdUSClcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZURlZmF1bHRTb3VyY2VBbGlhcyh0YWJsZVZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5yZXNvbHZlVGFibGVPcHRpb24odGFibGVWYWx1ZSk7XG4gICAgcmV0dXJuIHRhYmxlID8gdGhpcy5idWlsZEFsaWFzRm9yVGFibGUodGFibGUpIDogRU1QVFlfVkFMVUU7XG4gIH1cbiAgcHJpdmF0ZSBoYXNDdXN0b21BbGlhcyh0YWJsZVZhbHVlOiBzdHJpbmcsIGFsaWFzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucmVzb2x2ZVRhYmxlT3B0aW9uKHRhYmxlVmFsdWUpO1xuICAgIGlmICghdGFibGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICEhYWxpYXMudHJpbSgpICYmIGFsaWFzLnRyaW0oKSAhPT0gdGhpcy5idWlsZEFsaWFzRm9yVGFibGUodGFibGUpO1xuICB9XG4gIG9uRmllbGRGdW5jdGlvbk5hbWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uQWxpYXMgPSBFTVBUWV9WQUxVRTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuY29sdW1uKTtcbiAgICBpZiAoXG4gICAgICBzZWxlY3RlZENvbHVtbiAmJlxuICAgICAgIXRoaXMuZmlsdGVyRnVuY3Rpb25TZWxlY3RhYmxlQ29sdW1ucyh0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWUpXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpXG4gICAgICAgIC5pbmNsdWRlcyhzZWxlY3RlZENvbHVtbi52YWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZSA9IEVNUFRZX1ZBTFVFO1xuICAgICAgdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25BbGlhcyA9IEVNUFRZX1ZBTFVFO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uQWxpYXMudHJpbSgpKSB7XG4gICAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbkFsaWFzID0gdGhpcy5idWlsZEZpZWxkRnVuY3Rpb25BbGlhcygpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGJ1aWxkRnVuY3Rpb25BbGlhcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5jb2x1bW4pO1xuICAgIGNvbnN0IGJhc2UgPSBjb2x1bW4/LnRleHQgPz8gdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuY29sdW1uID8/IEVNUFRZX1ZBTFVFO1xuICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMuc2x1Z2lmeShiYXNlKTtcbiAgICByZXR1cm4gc3VmZml4XG4gICAgICA/IGAke3RoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZX1fJHtzdWZmaXh9YFxuICAgICAgOiB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWU7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEZpZWxkRnVuY3Rpb25BbGlhcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkRnVuY3Rpb25BbGlhcygpO1xuICB9XG4gIHByaXZhdGUgYnVpbGRGaWVsZEZ1bmN0aW9uRHJhZnQoKTogRHluYW1pY1ZpZXdCdWlsZGVyRmllbGRGdW5jdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZS50cmltKCk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgYWxpYXM6IChcbiAgICAgICAgdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25BbGlhcyB8fCB0aGlzLmJ1aWxkRmllbGRGdW5jdGlvbkFsaWFzKClcbiAgICAgICkudHJpbSgpLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBwYXRjaEZpZWxkTW9kYWxEcmFmdChcbiAgICBjb2x1bW46IHN0cmluZyxcbiAgICBwYXRjaDogUGFydGlhbDxEeW5hbWljVmlld0J1aWxkZXJGaWVsZD5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5maWVsZE1vZGFsRHJhZnRzID0gdGhpcy5maWVsZE1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT5cbiAgICAgIGl0ZW0uY29sdW1uID09PSBjb2x1bW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAuLi5wYXRjaCxcbiAgICAgICAgfVxuICAgICAgICA6IGl0ZW1cbiAgICApO1xuICB9XG4gIHByaXZhdGUgbWVyZ2VMZWdhY3lGdW5jdGlvbnNJbnRvRmllbGRzKFxuICAgIGZpZWxkczogRHluYW1pY1ZpZXdCdWlsZGVyRmllbGRbXSxcbiAgICBmdW5jdGlvbnM6IER5bmFtaWNWaWV3QnVpbGRlckZ1bmN0aW9uW11cbiAgKTogRHluYW1pY1ZpZXdCdWlsZGVyRmllbGRbXSB7XG4gICAgY29uc3QgZmllbGRCeUNvbHVtbiA9IG5ldyBNYXAoZmllbGRzLm1hcCgoaXRlbSkgPT4gW2l0ZW0uY29sdW1uLCB7IC4uLml0ZW0gfV0pKTtcblxuICAgIGZ1bmN0aW9ucy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZmllbGRCeUNvbHVtbi5nZXQoaXRlbS5jb2x1bW4pID8/IHsgY29sdW1uOiBpdGVtLmNvbHVtbiB9O1xuICAgICAgaWYgKCFjdXJyZW50LmZ1bmN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnQuZnVuY3Rpb24gPSB7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBpdGVtLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICBhbGlhczogaXRlbS5hbGlhcyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZpZWxkQnlDb2x1bW4uc2V0KGl0ZW0uY29sdW1uLCBjdXJyZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGZpZWxkQnlDb2x1bW4udmFsdWVzKCkpO1xuICB9XG4gIHByaXZhdGUgZXh0cmFjdEZ1bmN0aW9uc0Zyb21GaWVsZHMoXG4gICAgZmllbGRzOiBEeW5hbWljVmlld0J1aWxkZXJGaWVsZFtdXG4gICk6IER5bmFtaWNWaWV3QnVpbGRlckZ1bmN0aW9uW10ge1xuICAgIHJldHVybiBmaWVsZHNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkpXG4gICAgICAubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBmdW5jdGlvbk5hbWU6IGl0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICBjb2x1bW46IGl0ZW0uY29sdW1uLFxuICAgICAgICBhbGlhczpcbiAgICAgICAgICBpdGVtLmZ1bmN0aW9uPy5hbGlhcz8udHJpbSgpIHx8IC8vIE5PU09OQVIgLSBlbXB0eSBzdHJpbmcgZmFsbGJhY2sgaXMgaW50ZW50aW9uYWxcbiAgICAgICAgICBpdGVtLmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUiAtIGVtcHR5IHN0cmluZyBmYWxsYmFjayBpcyBpbnRlbnRpb25hbFxuICAgICAgICAgIHRoaXMuc2x1Z2lmeShgJHtpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWUgPz8gRU1QVFlfVkFMVUV9XyR7aXRlbS5jb2x1bW59YCksXG4gICAgICB9KSk7XG4gIH1cbiAgcHJpdmF0ZSBzbHVnaWZ5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZSh2YWx1ZSkucmVwbGFjZSgvW15hLXowLTldKy9nLCBcIl9cIik7XG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBsZXQgZW5kID0gbm9ybWFsaXplZC5sZW5ndGg7XG5cbiAgICB3aGlsZSAoc3RhcnQgPCBlbmQgJiYgbm9ybWFsaXplZC5jaGFyQXQoc3RhcnQpID09PSBcIl9cIikge1xuICAgICAgc3RhcnQgKz0gMTtcbiAgICB9XG5cbiAgICB3aGlsZSAoZW5kID4gc3RhcnQgJiYgbm9ybWFsaXplZC5jaGFyQXQoZW5kIC0gMSkgPT09IFwiX1wiKSB7XG4gICAgICBlbmQgLT0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZC5zbGljZShzdGFydCwgZW5kKTtcbiAgfVxuICBwcml2YXRlIGRlZHVwbGljYXRlQnlLZXk8VD4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBrZXlSZXNvbHZlcjogKGl0ZW06IFQpID0+IHN0cmluZ1xuICApOiBUW10ge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUPigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IG1hcC5zZXQoa2V5UmVzb2x2ZXIoaXRlbSksIGl0ZW0pKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShtYXAudmFsdWVzKCkpO1xuICB9XG4gIHByaXZhdGUgaHVtYW5pemVLZXkodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnNwbGl0KFwiX1wiKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGl0ZW0uc2xpY2UoMSkpXG4gICAgICAuam9pbihcIiBcIik7XG4gIH1cbiAgcHJpdmF0ZSBpbnN0YW50V2l0aEZhbGxiYWNrKGtleTogc3RyaW5nLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChrZXkpO1xuICAgIHJldHVybiB0cmFuc2xhdGVkICYmIHRyYW5zbGF0ZWQgIT09IGtleSA/IHRyYW5zbGF0ZWQgOiBmYWxsYmFjaztcbiAgfVxuICBwcml2YXRlIGJ1aWxkRmlsdGVyRnJvbURyYWZ0KCk6IER5bmFtaWNWaWV3QnVpbGRlckZpbHRlciB8IG51bGwgeyAvLyBOT1NPTkFSIC0gY29tcGxleGl0eTogZXh0cmFjdGlvbiB3b3VsZCByaXNrIGJlaGF2aW9yIGNoYW5nZVxuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICBjb25zdCBkb21haW5FeHByZXNzaW9uID0gdGhpcy5maWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uLnRyaW0oKTtcblxuICAgICAgaWYgKCFkb21haW5FeHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW46IEVNUFRZX1ZBTFVFLFxuICAgICAgICBvcGVyYXRvcjogRU1QVFlfVkFMVUUsXG4gICAgICAgIGNvbm5lY3RvcjogdGhpcy5maWx0ZXJEcmFmdC5jb25uZWN0b3IsXG4gICAgICAgIG9wdGlvbmFsOiB0aGlzLmZpbHRlckRyYWZ0Lm9wdGlvbmFsLFxuICAgICAgICB2YWx1ZVR5cGU6IEZJTFRFUl9NT0RFX0RPTUFJTixcbiAgICAgICAgZG9tYWluRXhwcmVzc2lvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbiB8fCAhdGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dDogRHluYW1pY1ZpZXdCdWlsZGVyRmlsdGVyID0ge1xuICAgICAgY29sdW1uOiB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbixcbiAgICAgIG9wZXJhdG9yOiB0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yLFxuICAgICAgY29ubmVjdG9yOiB0aGlzLmZpbHRlckRyYWZ0LmNvbm5lY3RvcixcbiAgICAgIG9wdGlvbmFsOiB0aGlzLmZpbHRlckRyYWZ0Lm9wdGlvbmFsLFxuICAgICAgdmFsdWVUeXBlOiB0aGlzLmZpbHRlck5lZWRzVmFsdWUgPyB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA6IERFRkFVTFRfRklMVEVSX1ZBTFVFX1RZUEUsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5maWx0ZXJOZWVkc1ZhbHVlKSB7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSB0aGlzLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUudHJpbSgpO1xuXG4gICAgICBpZiAoIXBhcmFtZXRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5leHQucGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciA9PT0gXCJJTlwiKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnBhcnNlTXVsdGlWYWx1ZVRleHQodGhpcy5maWx0ZXJEcmFmdC52YWx1ZXNUZXh0KTtcblxuICAgICAgaWYgKCF2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBuZXh0LnZhbHVlcyA9IHZhbHVlcztcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIkJFVFdFRU5cIikge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5TdGFydC50cmltKCk7XG4gICAgICBjb25zdCBlbmQgPSB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5FbmQudHJpbSgpO1xuXG4gICAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5leHQudmFsdWVzID0gW3N0YXJ0LCBlbmRdO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlLnRyaW0oKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG5leHQudmFsdWUgPSB2YWx1ZTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJEcmFmdFNxbFByZXZpZXcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5idWlsZEZpbHRlckZyb21EcmFmdCgpO1xuXG4gICAgaWYgKCFuZXh0KSB7XG4gICAgICByZXR1cm4gRU1QVFlfVkFMVUU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUZpbHRlclNxbChuZXh0KTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJEcmFmdERpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uLnRyaW0oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWVcbiAgICAgICAgPyBgOiR7dGhpcy5maWx0ZXJEcmFmdC5wYXJhbWV0ZXJOYW1lfWBcbiAgICAgICAgOiBFTVBUWV9WQUxVRTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiSU5cIikge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyRHJhZnQudmFsdWVzVGV4dDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiQkVUV0VFTlwiKSB7XG4gICAgICByZXR1cm4gW3RoaXMuZmlsdGVyRHJhZnQuYmV0d2VlblN0YXJ0LCB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5FbmRdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oXCIgLSBcIik7XG4gICAgfVxuICAgIGlmICghdGhpcy5maWx0ZXJOZWVkc1ZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLm9wdGlvbmFsYCxcbiAgICAgICAgXCJTZW0gdmFsb3JcIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRHJhZnQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBzY2hlZHVsZUZsb3dBcnJvd1JlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVmcmVzaEZsb3dBcnJvd3NGcmFtZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZWZyZXNoRmxvd0Fycm93c0ZyYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVmcmVzaEZsb3dBcnJvd3NUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoRmxvd0Fycm93c1RpbWVvdXQpO1xuICAgICAgdGhpcy5yZWZyZXNoRmxvd0Fycm93c1RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hGbG93QXJyb3dzRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoRmxvd0Fycm93c0ZyYW1lID0gbnVsbDtcbiAgICAgIHRoaXMucmVmcmVzaEZsb3dBcnJvd3MoKTtcbiAgICAgIHRoaXMucmVmcmVzaEZsb3dBcnJvd3NUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVmcmVzaEZsb3dBcnJvd3NUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWZyZXNoRmxvd0Fycm93cygpO1xuICAgICAgfSwgRkxPV19BUlJPV1NfUkVGUkVTSF9ERUxBWV9NUyk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSByZWZyZXNoRmxvd0Fycm93cygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hNZWFzdXJlZFByZXZpZXdIZWlnaHQoKTtcbiAgICBjb25zdCBuZXh0QXJyb3dzID0gdGhpcy5idWlsZEZsb3dBcnJvd3MoKTtcbiAgICB0aGlzLmZsb3dBcnJvd3MgPSBuZXh0QXJyb3dzO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgcHJpdmF0ZSByZWZyZXNoTWVhc3VyZWRQcmV2aWV3SGVpZ2h0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNlY3Rpb25zSGVpZ2h0ID0gdGhpcy5zZWN0aW9uc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgPz8gMDtcbiAgICB0aGlzLm1lYXN1cmVkU3BsaXRQcmV2aWV3SGVpZ2h0ID1cbiAgICAgIHNlY3Rpb25zSGVpZ2h0ID4gMCA/IGAke3NlY3Rpb25zSGVpZ2h0fXB4YCA6IFwiMjRyZW1cIjtcbiAgfVxuICBwcml2YXRlIGJ1aWxkRmxvd0Fycm93cygpOiBCdWlsZGVyRmxvd0Fycm93W10ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2VjdGlvbnNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSB0aGlzLmJ1aWxkZXJTZWN0aW9ucz8udG9BcnJheSgpID8/IFtdO1xuICAgIGlmICghY29udGFpbmVyIHx8IHNlY3Rpb25zLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc2VjdGlvbk1hcCA9IG5ldyBNYXA8QnVpbGRlclNlY3Rpb25JZCwgSFRNTEVsZW1lbnQ+KCk7XG4gICAgc2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvblJlZikgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbklkID0gc2VjdGlvblJlZi5uYXRpdmVFbGVtZW50LmRhdGFzZXRbXG4gICAgICAgIFwic2VjdGlvbklkXCJcbiAgICAgIF0gYXMgQnVpbGRlclNlY3Rpb25JZCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChzZWN0aW9uSWQpIHtcbiAgICAgICAgc2VjdGlvbk1hcC5zZXQoc2VjdGlvbklkLCBzZWN0aW9uUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHRoaXMuc2VjdGlvbk9yZGVyXG4gICAgICAuc2xpY2UoMCwgLTEpXG4gICAgICAubWFwKChzZWN0aW9uSWQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzZWN0aW9uTWFwLmdldChzZWN0aW9uSWQpO1xuICAgICAgICBjb25zdCBuZXh0ID0gc2VjdGlvbk1hcC5nZXQodGhpcy5zZWN0aW9uT3JkZXJbaW5kZXggKyAxXSk7XG4gICAgICAgIGlmICghY3VycmVudCB8fCAhbmV4dCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZWN0ID0gY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgbmV4dFJlY3QgPSBuZXh0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBpc1NhbWVSb3cgPSBNYXRoLmFicyhjdXJyZW50UmVjdC50b3AgLSBuZXh0UmVjdC50b3ApIDwgMTY7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxHYXAgPSBNYXRoLm1heChGTE9XX0FSUk9XX01JTl9HQVAsIG5leHRSZWN0LmxlZnQgLSBjdXJyZW50UmVjdC5yaWdodCk7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsR2FwID0gTWF0aC5tYXgoRkxPV19BUlJPV19NSU5fR0FQLCBuZXh0UmVjdC50b3AgLSBjdXJyZW50UmVjdC5ib3R0b20pO1xuICAgICAgICBjb25zdCBvdmVybGFwTGVmdCA9IE1hdGgubWF4KGN1cnJlbnRSZWN0LmxlZnQsIG5leHRSZWN0LmxlZnQpO1xuICAgICAgICBjb25zdCBvdmVybGFwUmlnaHQgPSBNYXRoLm1pbihjdXJyZW50UmVjdC5yaWdodCwgbmV4dFJlY3QucmlnaHQpO1xuICAgICAgICBjb25zdCBvdmVybGFwVG9wID0gTWF0aC5tYXgoY3VycmVudFJlY3QudG9wLCBuZXh0UmVjdC50b3ApO1xuICAgICAgICBjb25zdCBvdmVybGFwQm90dG9tID0gTWF0aC5taW4oY3VycmVudFJlY3QuYm90dG9tLCBuZXh0UmVjdC5ib3R0b20pO1xuICAgICAgICBjb25zdCBuZXh0Q2VudGVyWCA9IG5leHRSZWN0LmxlZnQgKyBuZXh0UmVjdC53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IHNhbWVSb3dUb3AgPVxuICAgICAgICAgIG92ZXJsYXBUb3AgPCBvdmVybGFwQm90dG9tXG4gICAgICAgICAgICA/IG92ZXJsYXBUb3AgKyAob3ZlcmxhcEJvdHRvbSAtIG92ZXJsYXBUb3ApIC8gMlxuICAgICAgICAgICAgOiAoY3VycmVudFJlY3QudG9wICtcbiAgICAgICAgICAgICAgY3VycmVudFJlY3QuaGVpZ2h0IC8gMiArXG4gICAgICAgICAgICAgIChuZXh0UmVjdC50b3AgKyBuZXh0UmVjdC5oZWlnaHQgLyAyKSkgL1xuICAgICAgICAgICAgMjtcbiAgICAgICAgY29uc3QgZG93bkxlZnQgPVxuICAgICAgICAgIG92ZXJsYXBMZWZ0IDwgb3ZlcmxhcFJpZ2h0XG4gICAgICAgICAgICA/IG92ZXJsYXBMZWZ0ICsgKG92ZXJsYXBSaWdodCAtIG92ZXJsYXBMZWZ0KSAvIDJcbiAgICAgICAgICAgIDogKGN1cnJlbnRSZWN0LmxlZnQgKyBjdXJyZW50UmVjdC53aWR0aCAvIDIgKyBuZXh0Q2VudGVyWCkgLyAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiBgJHtzZWN0aW9uSWR9LSR7dGhpcy5zZWN0aW9uT3JkZXJbaW5kZXggKyAxXX1gLFxuICAgICAgICAgIGRpcmVjdGlvbjogaXNTYW1lUm93ID8gXCJyaWdodFwiIDogXCJkb3duXCIsXG4gICAgICAgICAgbGVmdDogaXNTYW1lUm93XG4gICAgICAgICAgICA/IGN1cnJlbnRSZWN0LnJpZ2h0IC0gY29udGFpbmVyUmVjdC5sZWZ0IC0gRkxPV19BUlJPV19JTlNFVCArIGhvcml6b250YWxHYXAgLyAyXG4gICAgICAgICAgICA6IGRvd25MZWZ0IC0gY29udGFpbmVyUmVjdC5sZWZ0LFxuICAgICAgICAgIHRvcDogaXNTYW1lUm93XG4gICAgICAgICAgICA/IHNhbWVSb3dUb3AgLSBjb250YWluZXJSZWN0LnRvcFxuICAgICAgICAgICAgOiBjdXJyZW50UmVjdC5ib3R0b20gLSBjb250YWluZXJSZWN0LnRvcCAtIEZMT1dfQVJST1dfSU5TRVQgKyB2ZXJ0aWNhbEdhcCAvIDIsXG4gICAgICAgIH0gc2F0aXNmaWVzIEJ1aWxkZXJGbG93QXJyb3c7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgQnVpbGRlckZsb3dBcnJvdyA9PiAhIWl0ZW0pO1xuICB9XG59XG5cbmV4cG9ydCB7IFZpc3VhbFNxbEVkaXRvckNvbXBvbmVudCBhcyBEeW5hbWljVmlld0J1aWxkZXJDb21wb25lbnQgfTtcbiIsIjxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlclwiIFthdHRyLmFyaWEtYnVzeV09XCJsb2FkaW5nXCI+XG4gIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fdG9vbGJhclwiPlxuICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fdG9vbGJhci1jb3B5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3RpdGxlXCI+XG4gICAgICAgIHt7IGNvbmZpZy5tZXRhZGF0YS50aXRsZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N1YnRpdGxlXCI+XG4gICAgICAgIHt7IGNvbmZpZy5tZXRhZGF0YS5kZXNjcmlwdGlvbiB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX190b29sYmFyLWFjdGlvbnNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Rvb2xiYXItbGFiZWxcIj5cbiAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmxheW91dE1vZGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNkYy1zZWxlY3QtYnV0dG9uXG4gICAgICAgIFtpdGVtc109XCJsYXlvdXRNb2RlSXRlbXNcIlxuICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZExheW91dE1vZGVJdGVtc1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTGF5b3V0TW9kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L3NkYy1zZWxlY3QtYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy10b2dnbGVcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUHJldmlldygpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cInByZXZpZXdWaXNpYmxlXCJcbiAgICAgICAgW3RpdGxlXT1cInByZXZpZXdUb2dnbGVMYWJlbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldmlld1RvZ2dsZUxhYmVsXCJcbiAgICAgICAgPlxuICAgICAgICA8aVxuICAgICAgICAgIFtjbGFzc109XCJwcmV2aWV3VmlzaWJsZSA/ICdmYXMgZmEtZXllLXNsYXNoJyA6ICdmYXMgZmEtZXllJ1wiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAge3sgcHJldmlld1RvZ2dsZUxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgQGlmIChzZWxlY3Rpb25Nb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJzZWxlY3Rpb25Nb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKHNlbGVjdGlvbk1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTZWxlY3Rpb25Nb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwic2VsZWN0aW9uTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLnNlbGVjdGlvbi53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zZWxlY3Rpb24uaGVpZ2h0XCJcbiAgICAgIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiXG4gICAgICBbZm9vdGVyQnV0dG9uc109XCJbXVwiXG4gICAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbC0tZnVsbFxuICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZmxvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2VcIlxuICAgICAgICA+XG4gICAgICAgIEBpZiAoc2VsZWN0aW9uTW9kYWxNb2RlID09PSAndGFibGVzJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtaW5saW5lLXN1cmZhY2VcIj5cbiAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICBbbGFiZWxdPVwibW9kYWxTZWFyY2hMYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtb2RhbFNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0aW9uTW9kYWxTZWFyY2hcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3Rpb25Nb2RhbFNlYXJjaCA9ICRldmVudFwiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkLS1zZWN0aW9uXG4gICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZS1ib2R5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXRhYmxlXG4gICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS0tY2hvb3NlclxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tdGFibGUtLWZsdWlkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1oZWFkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tY29sXCI+XG4gICAgICAgICAgICAgICAgICB7eyBtb2RhbE5hbWVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNvbFwiPlxuICAgICAgICAgICAgICAgICAge3sgbW9kYWxUeXBlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jb2wgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jb2wtLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAge3sgbW9kYWxTZWxlY3RMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBzZWxlY3Rpb25Nb2RhbFJvd3M7IHRyYWNrIHRyYWNrQnlJZCgkaW5kZXgsIHJvdykpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXJvdy0tc2VsZWN0ZWRdPVwicm93LnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCInYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInJvdy5kaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJyb3cuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInJvdy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb25Nb2RhbFJvdyhyb3cuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25TZWxlY3RhYmxlUm93S2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cudGFibGVMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXBhdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cucGF0aFR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5kYkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZGJcIj57eyByb3cuZGJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cuZGJMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXNlcGFyYXRvclwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IHJvdy50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tdGFibGUtbGFiZWxcIj57eyByb3cudGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tc2VwYXJhdG9yXCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tYWNjZW50XCI+e3sgcm93Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJvdy5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tY2VsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNlbGwtLW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyByb3cubWV0YSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5ub3RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tbm90ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3cubm90ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jZWxsLS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1tYXJrZXItLXNlbGVjdGVkXT1cInJvdy5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2tcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlLWJvZHlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgICBbaXRlbXNdPVwic2VsZWN0aW9uTW9kYWxQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cInNlbGVjdGlvbk1vZGFsU2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICAgIGlkS2V5PVwiaWRcIlxuICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4S2V5PVwidGl0bGVTdWZmaXhcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgICAgYmFkZ2VLZXk9XCJiYWRnZVwiXG4gICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuc2VhcmNoUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU2VsZWN0aW9uTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGZvb3RlciBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jYW5jZWwnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcHJpb3JpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZVNlbGVjdGlvbk1vZGFsKClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsb3NlU2VsZWN0aW9uTW9kYWwoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY29uZmlybVNlbGVjdGlvbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAoY2xpY2spPVwiY29uZmlybVNlbGVjdGlvbk1vZGFsKClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbmZpcm1TZWxlY3Rpb25Nb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2RjLW1vZGFsPlxuICB9XG5cbiAgQGlmIChzb3VyY2VNb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJzb3VyY2VNb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKHNvdXJjZU1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTb3VyY2VNb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwic291cmNlTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLnNvdXJjZS53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zb3VyY2UuaGVpZ2h0XCJcbiAgICAgIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiXG4gICAgICBbZm9vdGVyQnV0dG9uc109XCJbXVwiXG4gICAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1tb2RhbFwiPlxuICAgICAgICA8c2RjLXRpbWVsaW5lXG4gICAgICAgICAgW2l0ZW1zXT1cInNvdXJjZU1vZGFsVGltZWxpbmVJdGVtc1wiXG4gICAgICAgICAgW2FjdGl2ZUluZGV4XT1cInNvdXJjZU1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUgPyAxIDogMFwiXG4gICAgICAgICAgW2ludGVyYWN0aXZlXT1cInRydWVcIlxuICAgICAgICAgIFtzaG93RGVzY3JpcHRpb25zXT1cImZhbHNlXCJcbiAgICAgICAgICBbYXJpYUxhYmVsXT1cInNvdXJjZU1vZGFsVGltZWxpbmVBcmlhTGFiZWxcIlxuICAgICAgICAgIChzdGVwU2VsZWN0KT1cIm9uU291cmNlTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3NkYy10aW1lbGluZT5cbiAgICAgICAgQGlmIChzb3VyY2VNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc2hlbGwtLWZ1bGxcbiAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1mbG93IGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlLWJvZHlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwic291cmNlTW9kYWxQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRJZHNdPVwic291cmNlTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgICBbc2hvd1BhZ2luYXRvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dJdGVtSWNvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU291cmNlTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvc2RjLXBpY2tsaXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtY29uZmlnLXNoZWxsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1saXN0LXNoZWxsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvdXJjZS1jb25maWctbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc291cmNlTW9kYWxDb25maWd1cmVkSXRlbXM7IHRyYWNrIHRyYWNrQnlJZCgkaW5kZXgsIGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvdXJjZS1jb25maWctcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc291cmNlLWNvbmZpZy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IGl0ZW0uZGJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1zZXBhcmF0b3JcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWFjY2VudFwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc291cmNlLWNvbmZpZy1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmFsaWFzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpdGVtLmFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU291cmNlTW9kYWxBbGlhc0NoYW5nZShpdGVtLnRhYmxlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBmb290ZXIgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2FuY2VsJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2VTb3VyY2VNb2RhbCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZVNvdXJjZU1vZGFsKClcIlxuICAgICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgICBAaWYgKHNvdXJjZU1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSAmJiBzb3VyY2VNb2RhbENhblByb2NlZWQpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMubmV4dFN0ZXAnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWR2YW5jZVNvdXJjZU1vZGFsU3RlcCgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFkdmFuY2VTb3VyY2VNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNvdXJjZU1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc291cmNlTW9kYWxDYW5Qcm9jZWVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zZGMtbW9kYWw+XG4gIH1cblxuICBAaWYgKGpvaW5Nb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJqb2luTW9kYWxWaXNpYmxlXCJcbiAgICAgICh2aXNpYmxlQ2hhbmdlKT1cIiRldmVudCA/IChqb2luTW9kYWxWaXNpYmxlID0gdHJ1ZSkgOiBjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuY2FyZHMuam9pbnMudGl0bGUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLmpvaW4ud2lkdGhcIlxuICAgICAgW2hlaWdodF09XCJtb2RhbERpbWVuc2lvbnMuam9pbi5oZWlnaHRcIlxuICAgICAgW21heGltaXphYmxlXT1cImZhbHNlXCJcbiAgICAgIFtmb290ZXJCdXR0b25zXT1cIltdXCJcbiAgICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2pvaW4tbW9kYWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19qb2luLW1vZGFsLXRvcFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeSBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LWxhYmVsXCI+XG4gICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5sZWZ0JykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlXG4gICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWUtLXBhdGhcIlxuICAgICAgICAgICAgICA+e3sgam9pblNvdXJjZVN1bW1hcnkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQtLWNvbXBhY3RcbiAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMub3BlcmF0b3InXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiam9pbkRyYWZ0Lm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiam9pbkRyYWZ0Lm9wZXJhdG9yID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiam9pbk9wZXJhdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICAgIFthcHBlbmRUb109XCJvdmVybGF5QXBwZW5kVGFyZ2V0XCJcbiAgICAgICAgICAgICAgW3pJbmRleF09XCJvdmVybGF5WkluZGV4XCJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgID48L3NkYy1jb21ib2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnkgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMucmlnaHQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZS0tcGF0aFwiXG4gICAgICAgICAgICAgID57eyBqb2luVGFyZ2V0U3VtbWFyeSB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLS1maXRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXIgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMubGVmdCcpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImpvaW5Tb3VyY2VQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImpvaW5Tb3VyY2VTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgaWRLZXk9XCJpZFwiXG4gICAgICAgICAgICAgIHRpdGxlS2V5PVwidGl0bGVcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgdGl0bGVTdWZmaXhLZXk9XCJ0aXRsZVN1ZmZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlUHJlZml4Q29sb3JLZXk9XCJ0aXRsZVByZWZpeENvbG9yXCJcbiAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICBiYWRnZUtleT1cImJhZGdlXCJcbiAgICAgICAgICAgICAgYmFkZ2VDb2xvcktleT1cImJhZGdlQ29sb3JcIlxuICAgICAgICAgICAgICBbc2hvd1BhZ2luYXRvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtzaG93SXRlbUljb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd1NlbGVjdGlvbkNvdW50ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFttYXhWaXNpYmxlU2VsZWN0ZWRJdGVtc109XCIxXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgIChzZWxlY3RlZElkc0NoYW5nZSk9XCJvbkpvaW5Tb3VyY2VTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXIgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMucmlnaHQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c2RjLXBpY2tsaXN0XG4gICAgICAgICAgICAgIFtpdGVtc109XCJqb2luVGFyZ2V0UGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJqb2luVGFyZ2V0U2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICAgIGlkS2V5PVwiaWRcIlxuICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4S2V5PVwidGl0bGVTdWZmaXhcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgICAgYmFkZ2VLZXk9XCJiYWRnZVwiXG4gICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbbWF4VmlzaWJsZVNlbGVjdGVkSXRlbXNdPVwiMVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5zZWFyY2hQbGFjZWhvbGRlcidcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25Kb2luVGFyZ2V0U2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9zZGMtcGlja2xpc3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGZvb3RlciBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jYW5jZWwnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcHJpb3JpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zYXZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUpvaW5cIlxuICAgICAgICAgIChjbGljayk9XCJzYXZlSm9pbigpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlSm9pbigpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2RjLW1vZGFsPlxuICB9XG5cbiAgQGlmIChzb3J0TW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwic29ydE1vZGFsVmlzaWJsZVwiXG4gICAgICAodmlzaWJsZUNoYW5nZSk9XCIkZXZlbnQgPyAoc29ydE1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cInNvcnRNb2RhbFRpdGxlXCJcbiAgICAgIFt3aWR0aF09XCJtb2RhbERpbWVuc2lvbnMuc29ydC53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zb3J0LmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fc29ydC1tb2RhbFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGRcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tZnVsbFxuICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvcnQtZGlyZWN0aW9uLWZpZWxkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmRpcmVjdGlvbicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNkYy1zZWxlY3QtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zb3J0LWRpcmVjdGlvblwiXG4gICAgICAgICAgICBbaXRlbXNdPVwic29ydERpcmVjdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzb2Z0XCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU29ydERpcmVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9zZGMtc2VsZWN0LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkLS1zZWN0aW9uXG4gICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGlja2VyIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXItLXN0cmV0Y2hcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZmxvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZS1ib2R5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgW2l0ZW1zXT1cInNvcnRQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJzb3J0U2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgIHRpdGxlS2V5PVwidGl0bGVcIlxuICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgIHRpdGxlUHJlZml4Q29sb3JLZXk9XCJ0aXRsZVByZWZpeENvbG9yXCJcbiAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgYmFkZ2VDb2xvcktleT1cImJhZGdlQ29sb3JcIlxuICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3Nob3dJdGVtSWNvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbc2hvd1NlbGVjdGlvbkNvdW50ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW21heFZpc2libGVTZWxlY3RlZEl0ZW1zXT1cIjFcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25Tb3J0U2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvc2RjLXBpY2tsaXN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBmb290ZXIgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2FuY2VsJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblNhdmVTb3J0XCJcbiAgICAgICAgICAoY2xpY2spPVwic2F2ZVNvcnQoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZVNvcnQoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NkYy1tb2RhbD5cbiAgfVxuXG4gIEBpZiAoZmlsdGVyTW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwiZmlsdGVyTW9kYWxWaXNpYmxlXCJcbiAgICAgICh2aXNpYmxlQ2hhbmdlKT1cIiRldmVudCA/IChmaWx0ZXJNb2RhbFZpc2libGUgPSB0cnVlKSA6IGNsb3NlRmlsdGVyTW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cImZpbHRlck1vZGFsVGl0bGVcIlxuICAgICAgW3dpZHRoXT1cIm1vZGFsRGltZW5zaW9ucy5maWx0ZXIud2lkdGhcIlxuICAgICAgW2hlaWdodF09XCJtb2RhbERpbWVuc2lvbnMuZmlsdGVyLmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW1vZGFsXCI+XG4gICAgICAgIDxzZGMtdGltZWxpbmVcbiAgICAgICAgICBbaXRlbXNdPVwiZmlsdGVyTW9kYWxUaW1lbGluZUl0ZW1zXCJcbiAgICAgICAgICBbYWN0aXZlSW5kZXhdPVwiZmlsdGVyTW9kYWxSZXZpZXdTdGVwQWN0aXZlID8gMiA6IChmaWx0ZXJNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlID8gMSA6IDApXCJcbiAgICAgICAgICBbaW50ZXJhY3RpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dEZXNjcmlwdGlvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgIFthcmlhTGFiZWxdPVwiZmlsdGVyTW9kYWxUaW1lbGluZUFyaWFMYWJlbFwiXG4gICAgICAgICAgKHN0ZXBTZWxlY3QpPVwib25GaWx0ZXJNb2RhbFRpbWVsaW5lU3RlcFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgPjwvc2RjLXRpbWVsaW5lPlxuICAgICAgICBAaWYgKGZpbHRlck1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXN0ZXBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItYmFzZS1zZWxlY3RvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5maWx0ZXIuc3RlcHMuc2VsZWN0LnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWx0ZXJzLnRvb2x0aXBzLm1vZGUnXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItbW9kZS1yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1tb2RlLWNvcHlcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5maWx0ZXIudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItbW9kZS1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICAgIDxzZGMtc2VsZWN0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpbHRlck1vZGVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic29mdFwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEZpbHRlck1vZGVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlck1vZGVDaGFuZ2UoJGV2ZW50WzBdPy52YWx1ZSB8fCAnY29uZGl0aW9uJylcIlxuICAgICAgICAgICAgICAgID48L3NkYy1zZWxlY3QtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChmaWx0ZXJNb2RhbE1vZGUgPT09ICdjb25kaXRpb24nKSB7XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXJcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXItLWZpbHRlclxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1mbG93XG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2UtYm9keVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3BpY2tsaXN0LXNoZWxsXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpbHRlck1vZGFsUGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJmaWx0ZXJNb2RhbFNlbGVjdGVkUGlja2xpc3RJZHNcIlxuICAgICAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVLZXk9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlUHJlZml4S2V5PVwidGl0bGVQcmVmaXhcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVQcmVmaXhDb2xvcktleT1cInRpdGxlUHJlZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeENvbG9yS2V5PVwidGl0bGVTdWZmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICBiYWRnZUNvbG9yS2V5PVwiYmFkZ2VDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvUmVzaXplXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW21heFZpc2libGVTZWxlY3RlZEl0ZW1zXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuc2VhcmNoUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uRmlsdGVyTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItZG9tYWluLWludHJvXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWx0ZXJzLmRvbWFpbkxhYmVsJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNkYy1pbmZvLXNpZ25cbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZmlsdGVyRG9tYWluRXhwcmVzc2lvblRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWRvbWFpbi1ncmlkXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1kb21haW4taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZG9tYWluRXhwcmVzc2lvbicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJEb21haW5FeHByZXNzaW9uVG9vbHRpcCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItZG9tYWluLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmNvbm5lY3RvcicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJDb25uZWN0b3JUb29sdGlwIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKGZpbHRlck1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXN0ZXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeSBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS0tZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLmZpbHRlci5zdGVwcy5jb25maWd1cmUudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZS0tcGF0aFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyQ29uZmlndXJhdGlvblN1bW1hcnlMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0ZpbHRlck1vZGFsU3RlcCgnc2VsZWN0JylcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgZmlsdGVyQmFja1RvU2VsZWN0aW9uTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyTW9kYWxNb2RlID09PSAnY29uZGl0aW9uJykge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tc3RyZXRjaFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWNvbmZpZy1jYXJkXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWNvbmZpZy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBhbmVsLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuZmlsdGVyLnN0ZXBzLmNvbmZpZ3VyZS50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNkYy1pbmZvLXNpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmlsdGVycy50b29sdGlwcy5jb25maWd1cmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLS1maWx0ZXItY29udHJvbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNvbWJvYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuY29ubmVjdG9yJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5jb25uZWN0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyRHJhZnQuY29ubmVjdG9yID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpbHRlckNvbm5lY3Rvck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIm92ZXJsYXlBcHBlbmRUYXJnZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJvdmVybGF5WkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJDb25uZWN0b3JEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5mb1Rvb2x0aXBdPVwiZmlsdGVyQ29ubmVjdG9yVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jb21ib2JveD5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNvbWJvYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMub3BlcmF0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0Lm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wZXJhdG9yID0gJGV2ZW50OyBvbkZpbHRlck9wZXJhdG9yQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyT3BlcmF0b3JPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCJvdmVybGF5QXBwZW5kVGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWx0ZXJEcmFmdC5jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZm9Ub29sdGlwXT1cImZpbHRlck9wZXJhdG9yVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtY29tYm9ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZVR5cGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0LnZhbHVlVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC52YWx1ZVR5cGUgPSAkZXZlbnQ7IG9uRmlsdGVyVmFsdWVUeXBlQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwidmFsdWVUeXBlT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cIm92ZXJsYXlaSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclZhbHVlVHlwZURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmZvVG9vbHRpcF09XCJmaWx0ZXJWYWx1ZVR5cGVUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW9wdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLnN0YXRlcy5vcHRpb25hbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5vcHRpb25hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wdGlvbmFsID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtaW5mby1zaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImZpbHRlck9wdGlvbmFsVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLXNlY3Rpb24tLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQtLXNpbmdsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0ZpbHRlckJvb2xlYW5Db21ib2JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMudmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC52YWx1ZSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImJvb2xlYW5WYWx1ZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtY29tYm9ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0ZpbHRlclZhbHVlVGV4dGJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy10ZXh0Ym94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0LnZhbHVlID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dGaWx0ZXJWYWx1ZXNUZXh0Ym94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnZhbHVlcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC52YWx1ZXNUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyRHJhZnQudmFsdWVzVGV4dCA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93RmlsdGVyQmV0d2VlbklucHV0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19iZXR3ZWVuIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZVN0YXJ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQuYmV0d2VlblN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMudmFsdWVFbmQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuRW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuRW5kID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dGaWx0ZXJQYXJhbWV0ZXJUZXh0Ym94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnBhcmFtZXRlck5hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQucGFyYW1ldGVyTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRib3g+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQtLXN0cmV0Y2hcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctY2FyZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQtLWZpbHRlci1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtY29tYm9ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5jb25uZWN0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0LmNvbm5lY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5jb25uZWN0b3IgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyQ29ubmVjdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cIm92ZXJsYXlaSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlckNvbm5lY3RvckRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmZvVG9vbHRpcF09XCJmaWx0ZXJDb25uZWN0b3JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW9wdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLnN0YXRlcy5vcHRpb25hbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5vcHRpb25hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wdGlvbmFsID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtaW5mby1zaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImZpbHRlck9wdGlvbmFsVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLXNlY3Rpb24tLWRvbWFpblwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5kb21haW5FeHByZXNzaW9uJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZmlsdGVyRG9tYWluRXhwcmVzc2lvblRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1kb21haW4taGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckRvbWFpbkV4cHJlc3Npb25Ub29sdGlwIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItc3RlcFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5IGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LS1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuZmlsdGVyLnN0ZXBzLnJldmlldy50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlLS1wYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJDb25maWd1cmF0aW9uU3VtbWFyeUxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvRmlsdGVyTW9kYWxTdGVwKCdjb25maWd1cmUnKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJCYWNrVG9Db25maWd1cmF0aW9uTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkLS1zdHJldGNoXG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLWNhcmRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1yZXZpZXctZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBmaWx0ZXJSZXZpZXdJdGVtczsgdHJhY2sgdHJhY2tCeUlkKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1yZXZpZXctaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlLS1wYXRoXT1cIml0ZW0uZW1waGFzaXplID09PSAncGF0aCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItcmV2aWV3LWNvZGVdPVwiaXRlbS5lbXBoYXNpemUgPT09ICdjb2RlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXJldmlldy1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnNxbFByZXZpZXcnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c2RjLXRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlclJldmlld1ByZXZpZXdMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjZcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZm9vdGVyIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZvb3RlclwiPlxuICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBwcmlvcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsb3NlRmlsdGVyTW9kYWwoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VGaWx0ZXJNb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cImZpbHRlck1vZGFsQ29uZmlndXJlQWN0aW9uTGFiZWxcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWx0ZXJNb2RhbENhblByb2NlZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWx0ZXJNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhZHZhbmNlRmlsdGVyTW9kYWxTdGVwKClcIlxuICAgICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlKSB7XG4gICAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJmaWx0ZXJNb2RhbFJldmlld0FjdGlvbkxhYmVsXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZmlsdGVyTW9kYWxDYW5SZXZpZXdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWx0ZXJNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhZHZhbmNlRmlsdGVyTW9kYWxTdGVwKClcIlxuICAgICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbFJldmlld1N0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUZpbHRlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2F2ZUZpbHRlcigpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVGaWx0ZXIoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zZGMtbW9kYWw+XG4gIH1cblxuICBAaWYgKGZpZWxkTW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwiZmllbGRNb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKGZpZWxkTW9kYWxWaXNpYmxlID0gdHJ1ZSkgOiBjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cImZpZWxkTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLmZpZWxkLndpZHRoXCJcbiAgICAgIFtoZWlnaHRdPVwibW9kYWxEaW1lbnNpb25zLmZpZWxkLmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtbW9kYWxcIj5cbiAgICAgICAgPHNkYy10aW1lbGluZVxuICAgICAgICAgIFtpdGVtc109XCJmaWVsZE1vZGFsVGltZWxpbmVJdGVtc1wiXG4gICAgICAgICAgW2FjdGl2ZUluZGV4XT1cImZpZWxkTW9kYWxDb25maWd1cmF0aW9uU3RlcEFjdGl2ZSA/IDEgOiAwXCJcbiAgICAgICAgICBbaW50ZXJhY3RpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dEZXNjcmlwdGlvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgIFthcmlhTGFiZWxdPVwiZmllbGRNb2RhbFRpbWVsaW5lQXJpYUxhYmVsXCJcbiAgICAgICAgICAoc3RlcFNlbGVjdCk9XCJvbkZpZWxkTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3NkYy10aW1lbGluZT5cbiAgICAgICAgQGlmIChmaWVsZE1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbC0tZnVsbFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWZsb3cgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19waWNrbGlzdC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2UtYm9keVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZE1vZGFsUGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImZpZWxkTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtzaG93SXRlbUljb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtzaG93U2VsZWN0aW9uQ291bnRlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uRmllbGRNb2RhbFNlbGVjdGVkSWRzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9zZGMtcGlja2xpc3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkLS1zdHJldGNoXG4gICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdG9vbGJhclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1zdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAge3sgZmllbGRNb2RhbENvbmZpZ3VyZWRJdGVtcy5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5maWVsZHMudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgQGlmIChmaWVsZE1vZGFsSGFzU2VsZWN0YWJsZUNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQW5vdGhlckZpZWxkRnJvbU1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtbGlzdC1zaGVsbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZmllbGRNb2RhbENvbmZpZ3VyZWRJdGVtczsgdHJhY2sgdHJhY2tCeUlkKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtY29uZmlnLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1zZXBhcmF0b3JcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWFjY2VudFwiPnt7IGl0ZW0uZmllbGRMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25OYW1lICYmICFpc0ZpZWxkRnVuY3Rpb25FZGl0aW5nKGl0ZW0uY29sdW1uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctZnVuY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1vcGVyYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5mdW5jdGlvbkFsaWFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25BbGlhcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghaXNGaWVsZEZ1bmN0aW9uRWRpdGluZyhpdGVtLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy10ZXh0Ym94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5hbGlhcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpdGVtLmFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZE1vZGFsQWxpYXNDaGFuZ2UoaXRlbS5jb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWxhYmVsLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMud2lkdGgnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tZXNzYWdlcy5maWVsZFdpZHRoSW5mbydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIml0ZW0ud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRNb2RhbFdpZHRoQ2hhbmdlKGl0ZW0uY29sdW1uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMTYwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0RmllbGRGdW5jdGlvbkVkaXQoaXRlbS5jb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmZ1bmN0aW9uTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY29uZmlndXJlRmllbGQnKSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZnVuY3Rpb25OYW1lJykgfCB0cmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWVsZE1vZGFsRHJhZnQoaXRlbS5jb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctY29udHJvbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1jb250cm9scy0tZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZnVuY3Rpb25OYW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkRnVuY3Rpb25EcmFmdE5hbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpZWxkTW9kYWxGdW5jdGlvbk9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtY29tYm9ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmFsaWFzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbkFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uQWxpYXMgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24tLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEZpZWxkRnVuY3Rpb25FZGl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNhdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRmllbGRGdW5jdGlvbkVkaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZm9vdGVyIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZvb3RlciBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLWdyb3VwIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXItZ3JvdXAtLXN0YXJ0XCI+XG4gICAgICAgICAgQGlmIChmaWVsZE1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSAmJiBmaWVsZE1vZGFsQ2FuU2VsZWN0QWxsKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsRmllbGRNb2RhbENvbHVtbnMoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RBbGxDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLWdyb3VwXCI+XG4gICAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgICBAaWYgKGZpZWxkTW9kYWxTZWxlY3Rpb25TdGVwQWN0aXZlICYmIGZpZWxkTW9kYWxDYW5Qcm9jZWVkKSB7XG4gICAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5uZXh0U3RlcCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWVsZE1vZGFsU3RlcCgpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWR2YW5jZUZpZWxkTW9kYWxTdGVwKClcIlxuICAgICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChmaWVsZE1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNhdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUZpZWxkTW9kYWxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUZpZWxkKClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlRmllbGQoKVwiXG4gICAgICAgICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NkYy1tb2RhbD5cbiAgfVxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX193b3Jrc3BhY2VcIlxuICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fd29ya3NwYWNlLS1zdGFja2VkXT1cImxheW91dE1vZGUgPT09ICdzdGFja2VkJ1wiXG4gICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX193b3Jrc3BhY2UtLXNwbGl0XT1cImxheW91dE1vZGUgPT09ICdzcGxpdCdcIlxuICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fd29ya3NwYWNlLS1wcmV2aWV3LWhpZGRlbl09XCIhcHJldmlld1Zpc2libGVcIlxuICAgID5cbiAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2J1aWxkZXItYXJlYVwiPlxuICAgICAgPGRpdlxuICAgICAgICAjc2VjdGlvbnNDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbnNcIlxuICAgICAgICBbY2xhc3MuZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb25zLS1zdGFja2VkXT1cImxheW91dE1vZGUgPT09ICdzdGFja2VkJ1wiXG4gICAgICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbnMtLXNwbGl0XT1cImxheW91dE1vZGUgPT09ICdzcGxpdCdcIlxuICAgICAgICA+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwidGFibGVzXCJcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1sYWJlbFwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5zb3VyY2VzLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2VsZWN0VGFibGVzJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmsgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhY2FuT3BlblNvdXJjZUNvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUFsaWFzZXMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUFsaWFzZXMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3VyY2VDb25maWd1cmF0aW9uTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFzb3VyY2VJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNsZWFyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTb3VyY2VzKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaC1hbHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmICghc291cmNlSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19lbXB0eS1yb3dcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3VyY2VNb2RhbCgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChzb3VyY2VJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2sgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrLS13cmFwXCI+XG4gICAgICAgICAgICAgIEBmb3IgKHNvdXJjZSBvZiBzb3VyY2VJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIHNvdXJjZSk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93IGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctLXNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kYlwiPnt7IHNvdXJjZS5kYkxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kb3RcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc291cmNlLnRhYmxlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzb3VyY2UuYWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctbWV0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQWxpYXMge3sgc291cmNlLmFsaWFzIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVNvdXJjZShpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tcm93XCI+XG4gICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICNidWlsZGVyU2VjdGlvblxuICAgICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiam9pbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbiBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi0tZmx1aWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuY2FyZHMuam9pbnMudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWNhbkNvbmZpZ3VyZUpvaW5zXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZEpvaW4nKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSm9pbk1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAham9pbkl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckpvaW5zKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghY2FuQ29uZmlndXJlSm9pbnMpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19pbmZvLXJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1lc3NhZ2VzLmpvaW5SZXF1aXJlc1R3b1RhYmxlcycpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChjYW5Db25maWd1cmVKb2lucyAmJiAham9pbkl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkpvaW5Nb2RhbCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRKb2luJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGpvaW5JdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGpvaW5JdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS5zb3VyY2VUYWJsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kb3RcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWZpZWxkXCI+e3sgaXRlbS5zb3VyY2VGaWVsZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fam9pbi1vcGVyYXRvclwiPnt7IGl0ZW0ub3BlcmF0b3IgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fam9pbi1hcnJvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbG9uZy1hcnJvdy1hbHQtcmlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1wYXRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctdGFibGVcIj57eyBpdGVtLnRhcmdldFRhYmxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLnRhcmdldEZpZWxkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmVkaXQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSm9pbk1vZGFsKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSm9pbihpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgICBkYXRhLXNlY3Rpb24taWQ9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tLWNvbXBhY3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmNhcmRzLmdyb3VwQnkudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWdyb3VwQnlTZWxlY3RhYmxlQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2VsZWN0Q29sdW1ucycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3Rpb25Nb2RhbCgnZ3JvdXBCeScpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWdyb3VwQnlJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJHcm91cEJ5KClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghZ3JvdXBCeUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3Rpb25Nb2RhbCgnZ3JvdXBCeScpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGdyb3VwQnlJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwQnlJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVHcm91cEJ5KGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiZmllbGRzXCJcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmNhcmRzLmZpZWxkcy50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2hpbnRcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidWb2PDqiBwb2RlIG9yZGVuYXIgYSBzZXF1w6puY2lhIGRvcyBjYW1wb3MgYXJyYXN0YW5kbyBlIHNvbHRhbmRvLidcIlxuICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmtcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhZmllbGRTZWxlY3RhYmxlQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdENvbHVtbnMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdENvbHVtbnMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWVsZE1vZGFsKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWNhbk9wZW5GaWVsZENvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUZpZWxkJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jb25maWd1cmVGaWVsZCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkQ29uZmlndXJhdGlvbk1vZGFsKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmsgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhZmllbGRJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNsZWFyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWVsZHMoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoLWFsdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKCFmaWVsZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGZpZWxkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrIGR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjay0td3JhcFwiPlxuICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZpZWxkSXRlbXM7IHRyYWNrIHRyYWNrQnlJZChpLCBpdGVtKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBAaWYgKGlzRmllbGREcm9wSW5kaWNhdG9yVmlzaWJsZShpKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1kcm9wLWluZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3JvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LS1kcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctLWRyYWctb3JpZ2luXT1cImRyYWdnaW5nRmllbGRJbmRleCA9PT0gaXRlbS5zb3VyY2VJbmRleFwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cIiFpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25GaWVsZERyYWdTdGFydChpdGVtLnNvdXJjZUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ292ZXIpPVwib25GaWVsZERyYWdPdmVyKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgKGRyb3ApPVwib25GaWVsZERyb3AoKVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ2VuZCk9XCJvbkZpZWxkRHJhZ0VuZCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW9yZGVyXCI+e3sgaXRlbS5vcmRlckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZVwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZG90XCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmFsaWFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFsaWFzIHt7IGl0ZW0uYWxpYXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ud2lkdGggfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwIGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcC0tb3BlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25BbGlhcykge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmZ1bmN0aW9uQWxpYXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmllbGQoaXRlbS5zb3VyY2VJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGlzRmllbGREcm9wSW5kaWNhdG9yQXRFbmRWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1kcm9wLWluZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLXJvd1wiPlxuICAgICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgICAjYnVpbGRlclNlY3Rpb25cbiAgICAgICAgICAgIGRhdGEtc2VjdGlvbi1pZD1cInNvcnRpbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbiBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi0tY29tcGFjdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24taGVhZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5zb3J0aW5nLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFzb3J0U2VsZWN0YWJsZUl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRTb3J0JykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZFNvcnQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNvcnRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIXNvcnRJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTb3J0aW5nKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghc29ydEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkU29ydCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkU29ydCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNvcnRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRTb3J0JykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNvcnRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHNvcnRJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLW9wZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwIGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcC0tb3BlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZGlyZWN0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5lZGl0JykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3J0TW9kYWwoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVTb3J0KGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICNidWlsZGVyU2VjdGlvblxuICAgICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiZmlsdGVyc1wiXG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLS1mbHVpZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24taGVhZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5maWx0ZXJzLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFhdmFpbGFibGVDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRGaWx0ZXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWx0ZXJNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWZpbHRlckl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaC1hbHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKCFmaWx0ZXJJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2VtcHR5LXJvd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZEZpbHRlcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGZpbHRlckl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrIGR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjay0td3JhcFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZmlsdGVySXRlbXM7IHRyYWNrIHRyYWNrQnlJZChpLCBpdGVtKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmICghaXRlbS5pc0RvbWFpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXBhdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZG90XCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWZpZWxkXCI+e3sgaXRlbS5maWVsZExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLW9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGl0ZW0ub3BlcmF0b3JMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1kb21haW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnN1YnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5vcHRpb25hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1vcHRpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5zdGF0ZXMub3B0aW9uYWwnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmVkaXQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyTW9kYWwoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBmb3IgKGFycm93IG9mIGZsb3dBcnJvd3M7IHRyYWNrIHRyYWNrQnlBcnJvdygkaW5kZXgsIGFycm93KSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2Zsb3ctYXJyb3dcIlxuICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19mbG93LWFycm93LS1yaWdodF09XCJhcnJvdy5kaXJlY3Rpb24gPT09ICdyaWdodCdcIlxuICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19mbG93LWFycm93LS1kb3duXT1cImFycm93LmRpcmVjdGlvbiA9PT0gJ2Rvd24nXCJcbiAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImFycm93LmxlZnRcIlxuICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJhcnJvdy50b3BcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIFtjbGFzc109XCJhcnJvdy5kaXJlY3Rpb24gPT09ICdyaWdodCdcbiAgICAgICAgICAgICAgICA/ICdmYXMgZmEtYW5nbGUtZG91YmxlLXJpZ2h0J1xuICAgICAgICAgICAgICAgIDogJ2ZhcyBmYS1hbmdsZS1kb3VibGUtZG93bidcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKHByZXZpZXdWaXNpYmxlKSB7XG4gICAgICA8YXNpZGUgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy1hcmVhXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19wcmV2aWV3XCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cInNxbFByZXZpZXdQYW5lbEhlaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy10aXRsZVwiPlNRTCBQcmV2aWV3PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3ByZXZpZXctc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgQ29uc3VsdGEgZ2VyYWRhIGF1dG9tYXRpY2FtZW50ZSBhIHBhcnRpciBkYSBjb25maWd1cmFjYW8gYXR1YWwuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3ByZXZpZXctYm9keVwiPlxuICAgICAgICAgICAgPHNkYy1jb2RlLWVkaXRvclxuICAgICAgICAgICAgICBbc3FsXT1cInNxbFByZXZpZXdcIlxuICAgICAgICAgICAgICBsYW5ndWFnZT1cInNxbFwiXG4gICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Nob3dDb3B5XT1cInRydWVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cInNxbFByZXZpZXdIZWlnaHRcIlxuICAgICAgICAgICAgPjwvc2RjLWNvZGUtZWRpdG9yPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXNpZGU+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
2810
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsLXNxbC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy92aXN1YWwtc3FsLWVkaXRvci92aXN1YWwtc3FsLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Zpc3VhbC1zcWwtZWRpdG9yL3Zpc3VhbC1zcWwtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBd0IvRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFB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QUFNO3FIQXdDdEMsT0FBTztzQkFBZixLQUFLO2dCQUNPLE1BQU07c0JBQWxCLEtBQUs7Z0JBWWEsWUFBWTtzQkFBOUIsTUFBTTtnQkFFWSxJQUFJO3NCQUF0QixNQUFNO2dCQUNZLE1BQU07c0JBQXhCLE1BQU07Z0JBRVUsaUJBQWlCO3NCQURqQyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFHYixlQUFlO3NCQUQvQixZQUFZO3VCQUFDLGdCQUFnQjtnQkEwRjlCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlOztBQThvRy9CLE9BQU8sRUFBRSx3QkFBd0IsSUFBSSwyQkFBMkIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgRFlOQU1JQ19WSUVXX0JVSUxERVJfREVGQVVMVF9UQUJMRV9ST1dTIH0gZnJvbSBcIi4uLy4uL2NvcmUvY29uc3RhbnRzL2R5bmFtaWMtdmlldy1idWlsZGVyLmNvbnN0XCI7XG5pbXBvcnQgeyBERUZBVUxUX01PREFMX1pfSU5ERVggfSBmcm9tIFwiLi4vLi4vY29yZS9jb25zdGFudHMvbW9kYWwuY29uc3RcIjtcbmltcG9ydCB7IGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbmZpZy9keW5hbWljLXZpZXctYnVpbGRlci5jb25maWdcIjtcbmltcG9ydCB0eXBlIHsgQmFkZ2VDb2xvciB9IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL2JhZGdlLnR5cGVcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0QnV0dG9uSXRlbSB9IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL3NlbGVjdC1idXR0b24udHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFJlY29yZCB9IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL3BpY2tsaXN0LnR5cGVcIjtcbmltcG9ydCB0eXBlIHsgVGltZWxpbmVJdGVtLCBUaW1lbGluZVN0ZXBTZWxlY3RFdmVudCB9IGZyb20gXCIuLi8uLi9jb3JlL3R5cGVzL3RpbWVsaW5lLnR5cGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uLFxuICBEeW5hbWljVmlld0J1aWxkZXJDb25maWcsXG4gIER5bmFtaWNWaWV3QnVpbGRlckZpZWxkLFxuICBEeW5hbWljVmlld0J1aWxkZXJGaWVsZEZ1bmN0aW9uLFxuICBEeW5hbWljVmlld0J1aWxkZXJGaWx0ZXIsXG4gIER5bmFtaWNWaWV3QnVpbGRlckZpbHRlckNvbm5lY3RvcixcbiAgRHluYW1pY1ZpZXdCdWlsZGVyRmlsdGVyVmFsdWVUeXBlLFxuICBEeW5hbWljVmlld0J1aWxkZXJGdW5jdGlvbixcbiAgRHluYW1pY1ZpZXdCdWlsZGVySm9pbixcbiAgRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uLFxuICBEeW5hbWljVmlld0J1aWxkZXJTb3J0LFxuICBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbixcbn0gZnJvbSBcIi4uLy4uL2NvcmUvdHlwZXMvZHluYW1pYy12aWV3LWJ1aWxkZXIudHlwZVwiO1xuaW1wb3J0IHR5cGUge1xuICBSb3dCYXNlLFxuICBUYWJsZUNvbHVtbixcbiAgVGFibGVPcHRpb25zLFxufSBmcm9tIFwiLi4vLi4vY29yZS90eXBlcy90YWJsZS50eXBlXCI7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tIFwiLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSBcIi4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29kZUVkaXRvckNvbXBvbmVudCB9IGZyb20gXCIuLi9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnRcIjtcbmltcG9ydCB7IENvbWJvYm94Q29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSW5mb1NpZ25Db21wb25lbnQgfSBmcm9tIFwiLi4vaW5mby1zaWduL2luZm8tc2lnbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSBcIi4uL21vZGFsL21vZGFsLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUGlja2xpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTZWxlY3RCdXR0b25Db21wb25lbnQgfSBmcm9tIFwiLi4vc2VsZWN0LWJ1dHRvbi9zZWxlY3QtYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vdGFibGUvdGFibGUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUZXh0YXJlYUNvbXBvbmVudCB9IGZyb20gXCIuLi90ZXh0YXJlYS90ZXh0YXJlYS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tIFwiLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVGltZWxpbmVDb21wb25lbnQgfSBmcm9tIFwiLi4vdGltZWxpbmUvdGltZWxpbmUuY29tcG9uZW50XCI7XG50eXBlIFNlbGVjdGlvbk1vZGFsTW9kZSA9IFwidGFibGVzXCIgfCBcImZpZWxkc1wiIHwgXCJncm91cEJ5XCI7XG50eXBlIEJ1aWxkZXJMYXlvdXRNb2RlID0gXCJzdGFja2VkXCIgfCBcInNwbGl0XCI7XG50eXBlIFNvdXJjZU1vZGFsU3RlcCA9IFwic2VsZWN0XCIgfCBcImNvbmZpZ3VyZVwiO1xudHlwZSBGaWVsZE1vZGFsU3RlcCA9IFwic2VsZWN0XCIgfCBcImNvbmZpZ3VyZVwiO1xudHlwZSBGaWx0ZXJNb2RhbFN0ZXAgPSBcInNlbGVjdFwiIHwgXCJjb25maWd1cmVcIiB8IFwicmV2aWV3XCI7XG50eXBlIEJ1aWxkZXJTZWN0aW9uSWQgPVxuICB8IFwidGFibGVzXCJcbiAgfCBcImpvaW5zXCJcbiAgfCBcImdyb3VwQnlcIlxuICB8IFwiZmllbGRzXCJcbiAgfCBcInNvcnRpbmdcIlxuICB8IFwiZmlsdGVyc1wiO1xudHlwZSBGaWx0ZXJNb2RhbE1vZGUgPSBcImNvbmRpdGlvblwiIHwgXCJkb21haW5cIjtcbmludGVyZmFjZSBTZWxlY3Rpb25Sb3cge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG1ldGE6IHN0cmluZztcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBkYkxhYmVsPzogc3RyaW5nO1xuICB0YWJsZUxhYmVsPzogc3RyaW5nO1xuICBwYXRoVHlwZT86IFwidGFibGVcIiB8IFwiY29sdW1uXCI7XG4gIHByZWZpeD86IHN0cmluZztcbiAgbm90ZT86IHN0cmluZztcbn1cbmludGVyZmFjZSBTb3VyY2VWaWV3SXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRiTGFiZWw6IHN0cmluZztcbiAgdGFibGVMYWJlbDogc3RyaW5nO1xuICBhbGlhczogc3RyaW5nO1xuICBoYXNDdXN0b21BbGlhczogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBTb3VyY2VNb2RhbERyYWZ0IHtcbiAgdGFibGU6IHN0cmluZztcbiAgYWxpYXM6IHN0cmluZztcbn1cbmludGVyZmFjZSBTb3VyY2VDb25maWd1cmVkSXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIGRiTGFiZWw6IHN0cmluZztcbiAgdGFibGVMYWJlbDogc3RyaW5nO1xuICBhbGlhczogc3RyaW5nO1xufVxuaW50ZXJmYWNlIEpvaW5WaWV3SXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNvdXJjZVRhYmxlOiBzdHJpbmc7XG4gIHNvdXJjZUZpZWxkOiBzdHJpbmc7XG4gIG9wZXJhdG9yOiBzdHJpbmc7XG4gIHRhcmdldFRhYmxlOiBzdHJpbmc7XG4gIHRhcmdldEZpZWxkOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgU2ltcGxlVmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBkYkxhYmVsOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xufVxuaW50ZXJmYWNlIEZpZWxkVmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBzb3VyY2VJbmRleDogbnVtYmVyO1xuICBjb2x1bW46IHN0cmluZztcbiAgb3JkZXJMYWJlbDogc3RyaW5nO1xuICBkYkxhYmVsOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xuICBhbGlhczogc3RyaW5nO1xuICB3aWR0aDogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgZnVuY3Rpb25MYWJlbDogc3RyaW5nO1xuICBmdW5jdGlvbkFsaWFzOiBzdHJpbmc7XG4gIGhhc0N1c3RvbUNvbmZpZzogYm9vbGVhbjtcbiAgb3JkZXI6IG51bWJlcjtcbn1cbmludGVyZmFjZSBTb3J0Vmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBkYkxhYmVsOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgZnVuY3Rpb25MYWJlbDogc3RyaW5nO1xuICBkaXJlY3Rpb246IHN0cmluZztcbn1cbmludGVyZmFjZSBTb3J0U2VsZWN0YWJsZUl0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xuICBtZXRhOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgRmlsdGVyVmlld0l0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBkYkxhYmVsOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbiAgZmllbGRMYWJlbDogc3RyaW5nO1xuICBvcGVyYXRvckxhYmVsOiBzdHJpbmc7XG4gIHN1YnRpdGxlOiBzdHJpbmc7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBpc0RvbWFpbjogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBGaWx0ZXJSZXZpZXdJdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZW1waGFzaXplPzogXCJwYXRoXCIgfCBcImNvZGVcIiB8IFwiZGVmYXVsdFwiO1xufVxuaW50ZXJmYWNlIENvbHVtbkRpc3BsYXlQYXJ0cyB7XG4gIGRiTGFiZWw6IHN0cmluZztcbiAgdGFibGVMYWJlbDogc3RyaW5nO1xuICBmaWVsZExhYmVsOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgVGFibGVEaXNwbGF5UGFydHMge1xuICBkYkxhYmVsOiBzdHJpbmc7XG4gIHRhYmxlTGFiZWw6IHN0cmluZztcbn1cbmludGVyZmFjZSBGaWVsZE1vZGFsQ29uZmlndXJlZEl0ZW0ge1xuICBpZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgdGFibGVMYWJlbDogc3RyaW5nO1xuICBmaWVsZExhYmVsOiBzdHJpbmc7XG4gIGFsaWFzOiBzdHJpbmc7XG4gIHdpZHRoOiBzdHJpbmc7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbkxhYmVsOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQWxpYXM6IHN0cmluZztcbn1cbmludGVyZmFjZSBCdWlsZGVyRmxvd0Fycm93IHtcbiAgaWQ6IHN0cmluZztcbiAgZGlyZWN0aW9uOiBcInJpZ2h0XCIgfCBcImRvd25cIjtcbiAgbGVmdDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbn1cbmludGVyZmFjZSBDb2x1bW5QaWNrbGlzdEl0ZW0gZXh0ZW5kcyBQaWNrbGlzdFJlY29yZCB7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRpdGxlUHJlZml4OiBzdHJpbmc7XG4gIHRpdGxlU3VmZml4OiBzdHJpbmc7XG4gIHRpdGxlUHJlZml4Q29sb3I6IHN0cmluZztcbiAgdGl0bGVTdWZmaXhDb2xvcjogc3RyaW5nO1xuICBiYWRnZTogc3RyaW5nO1xuICBiYWRnZUNvbG9yOiBCYWRnZUNvbG9yO1xuICBjb2x1bW46IHN0cmluZztcbn1cbmludGVyZmFjZSBTb3J0UGlja2xpc3RJdGVtIGV4dGVuZHMgUGlja2xpc3RSZWNvcmQge1xuICBpZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB0aXRsZVByZWZpeDogc3RyaW5nO1xuICB0aXRsZVN1ZmZpeDogc3RyaW5nO1xuICB0aXRsZVByZWZpeENvbG9yOiBzdHJpbmc7XG4gIHRpdGxlU3VmZml4Q29sb3I6IHN0cmluZztcbiAgYmFkZ2U6IHN0cmluZztcbiAgYmFkZ2VDb2xvcjogQmFkZ2VDb2xvcjtcbiAgc2VsZWN0aW9uSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgVGFibGVQaWNrbGlzdEl0ZW0gZXh0ZW5kcyBQaWNrbGlzdFJlY29yZCB7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRpdGxlUHJlZml4OiBzdHJpbmc7XG4gIHRpdGxlU3VmZml4OiBzdHJpbmc7XG4gIHRpdGxlUHJlZml4Q29sb3I6IHN0cmluZztcbiAgdGl0bGVTdWZmaXhDb2xvcjogc3RyaW5nO1xuICBiYWRnZTogc3RyaW5nO1xuICBiYWRnZUNvbG9yOiBCYWRnZUNvbG9yO1xuICB0YWJsZTogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFByZXZpZXdDb2x1bW5MaWtlIHtcbiAgZmllbGQ6IHN0cmluZztcbiAgaGVhZGVyPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xufVxudHlwZSBEeW5hbWljTW9kYWxEaW1lbnNpb24gPSB7XG4gIHdpZHRoOiBzdHJpbmc7XG4gIGhlaWdodDogc3RyaW5nO1xufTtcblxudHlwZSBEeW5hbWljTW9kYWxEaW1lbnNpb25zTWFwID0ge1xuICBzb3VyY2U6IER5bmFtaWNNb2RhbERpbWVuc2lvbjtcbiAgc2VsZWN0aW9uOiBEeW5hbWljTW9kYWxEaW1lbnNpb247XG4gIGpvaW46IER5bmFtaWNNb2RhbERpbWVuc2lvbjtcbiAgc29ydDogRHluYW1pY01vZGFsRGltZW5zaW9uO1xuICBmaWx0ZXI6IER5bmFtaWNNb2RhbERpbWVuc2lvbjtcbiAgZmllbGQ6IER5bmFtaWNNb2RhbERpbWVuc2lvbjtcbn07XG5jb25zdCBFTVBUWV9WQUxVRSA9IFwiXCI7XG5jb25zdCBERUZBVUxUX0pPSU5fT1BFUkFUT1IgPSBcIkVRVUFMU1wiO1xuY29uc3QgREVGQVVMVF9GVU5DVElPTl9OQU1FID0gXCJjb3VudFwiO1xuY29uc3QgREVGQVVMVF9TT1JUX0RJUkVDVElPTiA9IFwiQVNDXCI7XG5jb25zdCBFTVBUWV9TT1JUX0ZVTkNUSU9OID0gXCJfX2Jhc2VfX1wiO1xuY29uc3QgRkxPV19BUlJPV19JTlNFVCA9IDM7XG5jb25zdCBGTE9XX0FSUk9XX01JTl9HQVAgPSAxMjtcbmNvbnN0IEZMT1dfQVJST1dTX1JFRlJFU0hfREVMQVlfTVMgPSAxMjA7XG5jb25zdCBERUZBVUxUX0ZJTFRFUl9PUEVSQVRPUiA9IFwiRVFVQUxcIjtcbmNvbnN0IERFRkFVTFRfRklMVEVSX0NPTk5FQ1RPUjogRHluYW1pY1ZpZXdCdWlsZGVyRmlsdGVyQ29ubmVjdG9yID0gXCJBTkRcIjtcbmNvbnN0IERFRkFVTFRfRklMVEVSX1ZBTFVFX1RZUEU6IER5bmFtaWNWaWV3QnVpbGRlckZpbHRlclZhbHVlVHlwZSA9IFwidmFsdWVcIjtcbmNvbnN0IEZJTFRFUl9NT0RFX0RPTUFJTiA9IFwiZG9tYWluXCIgYXMgY29uc3Q7XG5jb25zdCBPVkVSTEFZX0FQUEVORF9UQVJHRVQgPSBcImJvZHlcIjtcbmNvbnN0IE1PREFMX1pfSU5ERVhfT0ZGU0VUID0gMjA7XG5jb25zdCBNT0RBTF9PVkVSTEFZX1pfSU5ERVggPSBERUZBVUxUX01PREFMX1pfSU5ERVggKyBNT0RBTF9aX0lOREVYX09GRlNFVDtcbmNvbnN0IEZJRUxEX1BJQ0tMSVNUX1JPV1MgPSA4O1xuY29uc3QgRklMVEVSX1BJQ0tMSVNUX1JPV1MgPSA5O1xuY29uc3QgVklTVUFMX1NRTF9UQUJMRV9DT0xPUiA9IFwiIzQyNTQ2NlwiO1xuY29uc3QgVklTVUFMX1NRTF9GSUVMRF9DT0xPUiA9IFwiIzFmOGE1MlwiO1xuY29uc3QgUElDS0xJU1RfREFUQV9UWVBFX0JBREdFX0NPTE9SOiBCYWRnZUNvbG9yID0gXCJncmF5XCI7XG5jb25zdCBQSUNLTElTVF9GVU5DVElPTl9CQURHRV9DT0xPUjogQmFkZ2VDb2xvciA9IFwiYmx1ZVwiO1xuY29uc3QgRkFMTEJBQ0tfU0VMRUNUX1RBQkxFUyA9IFwiU2VsZWNpb25hciB0YWJlbGFzXCI7XG5jb25zdCBGQUxMQkFDS19FTVBUWV9TRUxFQ1RJT04gPSBcIk5lbmh1bSBzZWxlY2lvbmFkb1wiO1xuY29uc3QgUFJFVklFV19ST1dTX1BFUl9QQUdFX09QVElPTlMgPSBbNSwgMTAsIDIwXTtcbmNvbnN0IEFMSUFTX01BWF9MRU5HVEggPSAxMjtcbmNvbnN0IE1JTl9QQVJUU19GT1JfREIgPSAzO1xuY29uc3QgREJfUEFSVFNfT0ZGU0VUID0gLTI7XG5jb25zdCBNSU5fUEFSVFNfRk9SX1RBQkxFID0gMjtcbmNvbnN0IEpPSU5fT1BFUkFUT1JfTEFCRUxTOiBSZWNvcmQ8c3RyaW5nLCB7IGtleTogc3RyaW5nOyBmYWxsYmFjazogc3RyaW5nIH0+ID0ge1xuICBFUVVBTFM6IHtcbiAgICBrZXk6IFwiam9pbk9wZXJhdG9ycy5lcXVhbHNcIixcbiAgICBmYWxsYmFjazogXCJJZ3VhbCBhICg9KVwiLFxuICB9LFxuICBOT1RfRVFVQUxTOiB7XG4gICAga2V5OiBcImpvaW5PcGVyYXRvcnMubm90RXF1YWxzXCIsXG4gICAgZmFsbGJhY2s6IFwiRGlmZXJlbnRlIGRlICg8PilcIixcbiAgfSxcbiAgR1JFQVRFUl9USEFOOiB7XG4gICAga2V5OiBcImpvaW5PcGVyYXRvcnMuZ3JlYXRlclRoYW5cIixcbiAgICBmYWxsYmFjazogXCJNYWlvciBxdWUgKD4pXCIsXG4gIH0sXG4gIEdSRUFURVJfVEhBTl9PUl9FUVVBTDoge1xuICAgIGtleTogXCJqb2luT3BlcmF0b3JzLmdyZWF0ZXJUaGFuT3JFcXVhbFwiLFxuICAgIGZhbGxiYWNrOiBcIk1haW9yIG91IGlndWFsIGEgKD49KVwiLFxuICB9LFxuICBMRVNTX1RIQU46IHtcbiAgICBrZXk6IFwiam9pbk9wZXJhdG9ycy5sZXNzVGhhblwiLFxuICAgIGZhbGxiYWNrOiBcIk1lbm9yIHF1ZSAoPClcIixcbiAgfSxcbiAgTEVTU19USEFOX09SX0VRVUFMOiB7XG4gICAga2V5OiBcImpvaW5PcGVyYXRvcnMubGVzc1RoYW5PckVxdWFsXCIsXG4gICAgZmFsbGJhY2s6IFwiTWVub3Igb3UgaWd1YWwgYSAoPD0pXCIsXG4gIH0sXG59O1xuY29uc3QgRFlOQU1JQ19NT0RBTF9ESU1FTlNJT05TOiBEeW5hbWljTW9kYWxEaW1lbnNpb25zTWFwID0ge1xuICBzb3VyY2U6IHtcbiAgICB3aWR0aDogXCI2NHJlbVwiLFxuICAgIGhlaWdodDogXCI0MHJlbVwiLFxuICB9LFxuICBzZWxlY3Rpb246IHtcbiAgICB3aWR0aDogXCI2NHJlbVwiLFxuICAgIGhlaWdodDogXCI0MHJlbVwiLFxuICB9LFxuICBqb2luOiB7XG4gICAgd2lkdGg6IFwiNzByZW1cIixcbiAgICBoZWlnaHQ6IFwiNDByZW1cIixcbiAgfSxcbiAgc29ydDoge1xuICAgIHdpZHRoOiBcIjU2cmVtXCIsXG4gICAgaGVpZ2h0OiBcIjM0cmVtXCIsXG4gIH0sXG4gIGZpbHRlcjoge1xuICAgIHdpZHRoOiBcIjY4cmVtXCIsXG4gICAgaGVpZ2h0OiBcIjU1cmVtXCIsXG4gIH0sXG4gIGZpZWxkOiB7XG4gICAgd2lkdGg6IFwiNjhyZW1cIixcbiAgICBoZWlnaHQ6IFwiNDJyZW1cIixcbiAgfSxcbn07XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwic2RjLXZpc3VhbC1zcWwtZWRpdG9yXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29tcG9uZW50LFxuICAgIENvZGVFZGl0b3JDb21wb25lbnQsXG4gICAgQ29tYm9ib3hDb21wb25lbnQsXG4gICAgSW5mb1NpZ25Db21wb25lbnQsXG4gICAgTW9kYWxDb21wb25lbnQsXG4gICAgUGlja2xpc3RDb21wb25lbnQsXG4gICAgU2VsZWN0QnV0dG9uQ29tcG9uZW50LFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFRleHRhcmVhQ29tcG9uZW50LFxuICAgIFRleHRib3hDb21wb25lbnQsXG4gICAgVGltZWxpbmVDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6IFwiLi92aXN1YWwtc3FsLWVkaXRvci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdmlzdWFsLXNxbC1lZGl0b3IuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBWaXN1YWxTcWxFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGludGVybmFsQ29uZmlnID0gY3JlYXRlRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdGlvbk9yZGVyOiBCdWlsZGVyU2VjdGlvbklkW10gPSBbXG4gICAgXCJ0YWJsZXNcIixcbiAgICBcImpvaW5zXCIsXG4gICAgXCJncm91cEJ5XCIsXG4gICAgXCJmaWVsZHNcIixcbiAgICBcInNvcnRpbmdcIixcbiAgICBcImZpbHRlcnNcIixcbiAgXTtcbiAgcHJpdmF0ZSByZWZyZXNoRmxvd0Fycm93c0ZyYW1lOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWZyZXNoRmxvd0Fycm93c1RpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHJlYWRvbmx5IGxheW91dE1vZGVJdGVtczogU2VsZWN0QnV0dG9uSXRlbTxCdWlsZGVyTGF5b3V0TW9kZT5bXSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCJCbG9jb3NcIixcbiAgICAgIHZhbHVlOiBcInN0YWNrZWRcIixcbiAgICAgIGljb25DbGFzczogXCJmYXMgZmEtdGgtbGFyZ2VcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBcIkxpc3RhXCIsXG4gICAgICB2YWx1ZTogXCJzcGxpdFwiLFxuICAgICAgaWNvbkNsYXNzOiBcImZhcyBmYS1saXN0XCIsXG4gICAgfSxcbiAgXTtcbiAgcmVhZG9ubHkgZmlsdGVyTW9kZUl0ZW1zOiBTZWxlY3RCdXR0b25JdGVtPEZpbHRlck1vZGFsTW9kZT5bXSA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCJGaWx0cm9cIixcbiAgICAgIHZhbHVlOiBcImNvbmRpdGlvblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIixcbiAgICAgIHZhbHVlOiBGSUxURVJfTU9ERV9ET01BSU4sXG4gICAgfSxcbiAgXTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXM6IFNlbGVjdEJ1dHRvbkl0ZW08RmlsdGVyTW9kYWxNb2RlPltdID0gW107XG4gIHJlYWRvbmx5IHNvcnREaXJlY3Rpb25JdGVtczogU2VsZWN0QnV0dG9uSXRlbTxzdHJpbmc+W10gPSBbXTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRMYXlvdXRNb2RlSXRlbXM6IFNlbGVjdEJ1dHRvbkl0ZW08QnVpbGRlckxheW91dE1vZGU+W10gPSBbXTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRTb3J0RGlyZWN0aW9uSXRlbXM6IFNlbGVjdEJ1dHRvbkl0ZW08c3RyaW5nPltdID0gW107XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IGNvbmZpZyh2YWx1ZTogRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnKSB7XG4gICAgdGhpcy5pbnRlcm5hbENvbmZpZyA9IHZhbHVlXG4gICAgICA/IGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyh2YWx1ZSlcbiAgICAgIDogY3JlYXRlRHluYW1pY1ZpZXdCdWlsZGVyQ29uZmlnKCk7XG4gICAgdGhpcy5zeW5jTGF5b3V0TW9kZUl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jRmlsdGVyTW9kZUl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jU29ydERpcmVjdGlvbkl0ZW1zKCk7XG4gICAgdGhpcy5zYW5pdGl6ZUJ1aWxkZXIoKTtcbiAgfVxuICBnZXQgY29uZmlnKCk6IER5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxDb25maWc7XG4gIH1cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNvbmZpZ0NoYW5nZSA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljVmlld0J1aWxkZXJDb25maWc+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljVmlld0J1aWxkZXJDb25maWc+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBWaWV3Q2hpbGQoXCJzZWN0aW9uc0NvbnRhaW5lclwiKVxuICBwcml2YXRlIHJlYWRvbmx5IHNlY3Rpb25zQ29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGRyZW4oXCJidWlsZGVyU2VjdGlvblwiKVxuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkZXJTZWN0aW9ucz86IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG4gIGxheW91dE1vZGU6IEJ1aWxkZXJMYXlvdXRNb2RlID0gXCJzdGFja2VkXCI7XG4gIHByZXZpZXdWaXNpYmxlID0gZmFsc2U7XG4gIGZsb3dBcnJvd3M6IEJ1aWxkZXJGbG93QXJyb3dbXSA9IFtdO1xuICBtZWFzdXJlZFNwbGl0UHJldmlld0hlaWdodCA9IFwiMjRyZW1cIjtcbiAgZHJhZ2dpbmdGaWVsZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgZHJhZ1ByZXZpZXdJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHJlYWRvbmx5IG92ZXJsYXlBcHBlbmRUYXJnZXQgPSBPVkVSTEFZX0FQUEVORF9UQVJHRVQ7XG4gIHJlYWRvbmx5IG92ZXJsYXlaSW5kZXggPSBNT0RBTF9PVkVSTEFZX1pfSU5ERVg7XG4gIHJlYWRvbmx5IG1vZGFsRGltZW5zaW9ucyA9IERZTkFNSUNfTU9EQUxfRElNRU5TSU9OUztcbiAgcmVhZG9ubHkgZmllbGRQaWNrbGlzdFJvd3MgPSBGSUVMRF9QSUNLTElTVF9ST1dTO1xuICByZWFkb25seSBmaWx0ZXJQaWNrbGlzdFJvd3MgPSBGSUxURVJfUElDS0xJU1RfUk9XUztcbiAgc291cmNlTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIHNvdXJjZU1vZGFsU3RlcDogU291cmNlTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgc291cmNlTW9kYWxEcmFmdHM6IFNvdXJjZU1vZGFsRHJhZnRbXSA9IFtdO1xuICBzZWxlY3Rpb25Nb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgc2VsZWN0aW9uTW9kYWxNb2RlOiBTZWxlY3Rpb25Nb2RhbE1vZGUgPSBcInRhYmxlc1wiO1xuICBzZWxlY3Rpb25Nb2RhbElkczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0aW9uTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgam9pbk1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICBqb2luRWRpdEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgam9pblNvdXJjZVNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICBqb2luVGFyZ2V0U2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gIGpvaW5EcmFmdCA9IHtcbiAgICBzb3VyY2VDb2x1bW46IEVNUFRZX1ZBTFVFLFxuICAgIHRhcmdldENvbHVtbjogRU1QVFlfVkFMVUUsXG4gICAgb3BlcmF0b3I6IERFRkFVTFRfSk9JTl9PUEVSQVRPUixcbiAgfTtcbiAgc29ydE1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICBzb3J0RWRpdEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgc29ydFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICBzb3J0RHJhZnQgPSB7XG4gICAgY29sdW1uOiBFTVBUWV9WQUxVRSxcbiAgICBmdW5jdGlvbk5hbWU6IEVNUFRZX1ZBTFVFLFxuICAgIGRpcmVjdGlvbjogREVGQVVMVF9TT1JUX0RJUkVDVElPTixcbiAgfTtcbiAgZmllbGRNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgZmllbGRNb2RhbFN0ZXA6IEZpZWxkTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgZmllbGRNb2RhbFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICBmaWVsZE1vZGFsRHJhZnRzOiBEeW5hbWljVmlld0J1aWxkZXJGaWVsZFtdID0gW107XG4gIGZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgZmllbGRGdW5jdGlvbkRyYWZ0ID0ge1xuICAgIGNvbHVtbjogRU1QVFlfVkFMVUUsXG4gICAgZnVuY3Rpb25OYW1lOiBFTVBUWV9WQUxVRSxcbiAgICBmdW5jdGlvbkFsaWFzOiBFTVBUWV9WQUxVRSxcbiAgfTtcbiAgZmlsdGVyTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIGZpbHRlckVkaXRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGZpbHRlck1vZGFsU3RlcDogRmlsdGVyTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgZmlsdGVyTW9kYWxNb2RlOiBGaWx0ZXJNb2RhbE1vZGUgPSBcImNvbmRpdGlvblwiO1xuICBmaWx0ZXJTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgZmlsdGVyRHJhZnQgPSB7XG4gICAgbW9kZTogXCJjb25kaXRpb25cIiBhcyBGaWx0ZXJNb2RhbE1vZGUsXG4gICAgY29sdW1uOiBFTVBUWV9WQUxVRSxcbiAgICBvcGVyYXRvcjogREVGQVVMVF9GSUxURVJfT1BFUkFUT1IsXG4gICAgY29ubmVjdG9yOiBERUZBVUxUX0ZJTFRFUl9DT05ORUNUT1IsXG4gICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgIHZhbHVlVHlwZTogREVGQVVMVF9GSUxURVJfVkFMVUVfVFlQRSxcbiAgICB2YWx1ZTogRU1QVFlfVkFMVUUsXG4gICAgdmFsdWVzVGV4dDogRU1QVFlfVkFMVUUsXG4gICAgYmV0d2VlblN0YXJ0OiBFTVBUWV9WQUxVRSxcbiAgICBiZXR3ZWVuRW5kOiBFTVBUWV9WQUxVRSxcbiAgICBwYXJhbWV0ZXJOYW1lOiBFTVBUWV9WQUxVRSxcbiAgICBkb21haW5FeHByZXNzaW9uOiBFTVBUWV9WQUxVRSxcbiAgfTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5zeW5jTGF5b3V0TW9kZUl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jRmlsdGVyTW9kZUl0ZW1zKCk7XG4gICAgdGhpcy5zeW5jU29ydERpcmVjdGlvbkl0ZW1zKCk7XG4gICAgdGhpcy5zYW5pdGl6ZUJ1aWxkZXIoKTtcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5idWlsZGVyU2VjdGlvbnM/LmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKCk7XG4gICAgfSk7XG4gICAgdGhpcy5zY2hlZHVsZUZsb3dBcnJvd1JlZnJlc2goKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoRmxvd0Fycm93c0ZyYW1lICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJlZnJlc2hGbG93QXJyb3dzRnJhbWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWZyZXNoRmxvd0Fycm93c1RpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hGbG93QXJyb3dzVGltZW91dCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIpXG4gIG9uV2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGbG93QXJyb3dSZWZyZXNoKCk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkTGF5b3V0TW9kZUl0ZW0oKTogU2VsZWN0QnV0dG9uSXRlbTxCdWlsZGVyTGF5b3V0TW9kZT4gfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5sYXlvdXRNb2RlSXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5sYXlvdXRNb2RlKSA/P1xuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgZ2V0IGlzUmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLm1ldGFkYXRhLnZpZXdNb2RlID09PSBcInJlYWRvbmx5XCI7XG4gIH1cbiAgZ2V0IGpvaW5PcGVyYXRvck9wdGlvbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW10ge1xuICAgIHJldHVybiAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS5qb2luT3BlcmF0b3JzID8/IFtdKS5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgdGV4dDogdGhpcy5yZXNvbHZlSm9pbk9wZXJhdG9yT3B0aW9uVGV4dChpdGVtKSxcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IGZ1bmN0aW9uT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuZnVuY3Rpb25zID8/IFtdO1xuICB9XG4gIGdldCBzb3J0RGlyZWN0aW9uT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuc29ydERpcmVjdGlvbnMgPz8gW107XG4gIH1cbiAgZ2V0IGZpbHRlckNvbm5lY3Rvck9wdGlvbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLmZpbHRlckNvbm5lY3RvcnMgPz8gW107XG4gIH1cbiAgZ2V0IHZhbHVlVHlwZU9wdGlvbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy52YWx1ZVR5cGVzLnZhbHVlYCxcbiAgICAgICAgICBcIlZhbG9yXCJcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6IFwidmFsdWVcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy52YWx1ZVR5cGVzLnBhcmFtZXRlcmAsXG4gICAgICAgICAgXCJQYXJhbWV0cm9cIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogXCJwYXJhbWV0ZXJcIixcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBnZXQgYm9vbGVhblZhbHVlT3B0aW9ucygpOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGV4dDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmJvb2xlYW4udHJ1ZWAsXG4gICAgICAgICAgXCJUcnVlXCJcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6IFwidHJ1ZVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGV4dDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmJvb2xlYW4uZmFsc2VgLFxuICAgICAgICAgIFwiRmFsc2VcIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogXCJmYWxzZVwiLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIGdldCBzZWxlY3RlZFRhYmxlcygpOiBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbltdIHtcbiAgICBjb25zdCBpZHMgPSBuZXcgU2V0KFxuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMubWFwKChpdGVtKSA9PiBpdGVtLnRhYmxlKVxuICAgICk7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSkuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgaWRzLmhhcyhpdGVtLnZhbHVlKVxuICAgICk7XG4gIH1cbiAgZ2V0IGF2YWlsYWJsZUNvbHVtbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkVGFibGVJZHMgPSBuZXcgU2V0KFxuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMubWFwKChpdGVtKSA9PiBpdGVtLnRhYmxlKVxuICAgICk7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLmNvbHVtbnMgPz8gW10pLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgIHNlbGVjdGVkVGFibGVJZHMuaGFzKGl0ZW0udGFibGUpXG4gICAgKTtcbiAgfVxuICBnZXQgZmllbGRTZWxlY3RhYmxlQ29sdW1ucygpOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSB7XG4gICAgaWYgKCF0aGlzLmF2YWlsYWJsZUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmICghdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVDb2x1bW5zO1xuICAgIH1cbiAgICBjb25zdCBncm91cEJ5ID0gbmV3IFNldCh0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeSk7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlQ29sdW1ucy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4gZ3JvdXBCeS5oYXMoaXRlbS52YWx1ZSkgfHwgaXRlbS5pc0FnZ3JlZ2F0YWJsZSAhPT0gZmFsc2VcbiAgICApO1xuICB9XG4gIGdldCBncm91cEJ5U2VsZWN0YWJsZUNvbHVtbnMoKTogRHluYW1pY1ZpZXdCdWlsZGVyQ29sdW1uT3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZUNvbHVtbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzQWdncmVnYXRhYmxlICE9PSBmYWxzZSk7XG4gIH1cbiAgZ2V0IHNvcnRTZWxlY3RhYmxlSXRlbXMoKTogU29ydFNlbGVjdGFibGVJdGVtW10ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWVsZHMgPSB0aGlzLm5vcm1hbGl6ZWRGaWVsZHM7XG4gICAgaWYgKCFub3JtYWxpemVkRmllbGRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwQnlTZXQgPSBuZXcgU2V0KHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5KTtcblxuICAgIHJldHVybiB0aGlzLmRlZHVwbGljYXRlQnlLZXkoXG4gICAgICBub3JtYWxpemVkRmllbGRzXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24oaXRlbS5jb2x1bW4pO1xuICAgICAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW4uaXNTb3J0YWJsZSAhPT0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGdyb3VwQnlTZXQuaGFzKGl0ZW0uY29sdW1uKSB8fCAhIWl0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZT8udHJpbSgpO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLmNvbHVtbik7XG4gICAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gaXRlbS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUU7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgaWQ6IHRoaXMuYnVpbGRTb3J0U2VsZWN0aW9uSWQoaXRlbS5jb2x1bW4sIGZ1bmN0aW9uTmFtZSksXG4gICAgICAgICAgICBjb2x1bW46IGl0ZW0uY29sdW1uLFxuICAgICAgICAgICAgdGFibGVMYWJlbDogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgICAgIGZpZWxkTGFiZWw6IHBhcnRzLmZpZWxkTGFiZWwsXG4gICAgICAgICAgICBtZXRhOiBmdW5jdGlvbk5hbWVcbiAgICAgICAgICAgICAgPyB0aGlzLnJlc29sdmVGdW5jdGlvbkxhYmVsKGZ1bmN0aW9uTmFtZSlcbiAgICAgICAgICAgICAgOiB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24oaXRlbS5jb2x1bW4pPy5kYXRhVHlwZSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIChpdGVtKSA9PiBpdGVtLmlkXG4gICAgKTtcbiAgfVxuICBnZXQgY2FuQ29uZmlndXJlSm9pbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLmxlbmd0aCA+IDE7XG4gIH1cbiAgZ2V0IGNhblNhdmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHMubGVuZ3RoIHx8IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5Lmxlbmd0aCk7XG4gIH1cbiAgZ2V0IGNhblNhdmVKb2luKCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4gfHxcbiAgICAgICF0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4gfHxcbiAgICAgICF0aGlzLmpvaW5EcmFmdC5vcGVyYXRvclxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uKTtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uKTtcbiAgICByZXR1cm4gISFzb3VyY2UgJiYgISF0YXJnZXQgJiYgc291cmNlLnRhYmxlICE9PSB0YXJnZXQudGFibGU7XG4gIH1cbiAgZ2V0IGNhblNhdmVTb3J0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuc29ydERyYWZ0LmNvbHVtbiAmJiAhIXRoaXMuc29ydERyYWZ0LmRpcmVjdGlvbjtcbiAgfVxuICBnZXQgY2FuU2F2ZUZpZWxkTW9kYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5maWVsZE1vZGFsRHJhZnRzLmxlbmd0aCAmJiAhdGhpcy5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbjtcbiAgfVxuICBnZXQgY2FuU2F2ZUZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmJ1aWxkRmlsdGVyRnJvbURyYWZ0KCk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxDYW5Qcm9jZWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkTW9kYWxEcmFmdHMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgY2FuT3BlbkZpZWxkQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZEl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RhbFN0ZXAgPT09IFwic2VsZWN0XCI7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyTW9kYWxTdGVwID09PSBcImNvbmZpZ3VyZVwiO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFJldmlld1N0ZXBBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyTW9kYWxTdGVwID09PSBcInJldmlld1wiO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbENhblByb2NlZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyTW9kYWxNb2RlID09PSBGSUxURVJfTU9ERV9ET01BSU4gfHwgISF0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbjtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxDYW5SZXZpZXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FuU2F2ZUZpbHRlcjtcbiAgfVxuICBnZXQgZmlsdGVyTmVlZHNWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIVtcIkVNUFRZXCIsIFwiTk9UX0VNUFRZXCJdLmluY2x1ZGVzKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IpO1xuICB9XG4gIGdldCBmaWx0ZXJDb25uZWN0b3JEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXF1ZW5jZUluZGV4ID09PSAwO1xuICB9XG4gIGdldCBmaWx0ZXJDb25uZWN0b3JEaXNhYmxlZFJlYXNvbigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5maWx0ZXJDb25uZWN0b3JEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIEVNUFRZX1ZBTFVFO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy5kaXNhYmxlZFJlYXNvbnMuY29ubmVjdG9yYCxcbiAgICAgIFwiTyBwcmltZWlybyBmaWx0cm8gc2VtcHJlIGluaWNpYSBvIFdIRVJFLCBwb3IgaXNzbyBvIGNvbmVjdG9yIGZpY2EgdHJhdmFkby5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck9wZXJhdG9yRGlzYWJsZWRSZWFzb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pIHtcbiAgICAgIHJldHVybiBFTVBUWV9WQUxVRTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZGlzYWJsZWRSZWFzb25zLm9wZXJhdG9yYCxcbiAgICAgIFwiU2VsZWNpb25lIHVtIGNhbXBvIG5hIGV0YXBhIGFudGVyaW9yIHBhcmEgbGliZXJhciBzb21lbnRlIG9zIG9wZXJhZG9yZXMgY29tcGF0aXZlaXMuXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJWYWx1ZVR5cGVEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZmlsdGVyRHJhZnQuY29sdW1uIHx8ICF0aGlzLmZpbHRlck5lZWRzVmFsdWU7XG4gIH1cbiAgZ2V0IGZpbHRlclZhbHVlVHlwZURpc2FibGVkUmVhc29uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZGlzYWJsZWRSZWFzb25zLnZhbHVlVHlwZVdpdGhvdXRDb2x1bW5gLFxuICAgICAgICBcIkVzY29saGEgdW0gY2FtcG8gZSB1bSBvcGVyYWRvciBhbnRlcyBkZSBkZWZpbmlyIGNvbW8gbyB2YWxvciBzZXJhIGluZm9ybWFkby5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZmlsdGVyTmVlZHNWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZGlzYWJsZWRSZWFzb25zLnZhbHVlVHlwZVdpdGhvdXRWYWx1ZWAsXG4gICAgICAgIFwiTyBvcGVyYWRvciBhdHVhbCBuYW8gdXNhIHZhbG9yLCBlbnRhbyB0aXBvIGRlIHZhbG9yIGUgZW50cmFkYSBmaWNhbSBvY3VsdG9zLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBFTVBUWV9WQUxVRTtcbiAgfVxuICBnZXQgZmlsdGVyT3BlcmF0b3JUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMub3BlcmF0b3JEZWZhdWx0YCxcbiAgICAgICAgXCJPcyBvcGVyYWRvcmVzIG11ZGFtIGNvbmZvcm1lIG8gdGlwbyBkbyBjYW1wbyBzZWxlY2lvbmFkby5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pO1xuICAgIGxldCBvcGVyYXRvcktleTogc3RyaW5nO1xuICAgIGlmICh0aGlzLmlzTnVtZXJpY1R5cGUoY29sdW1uPy5kYXRhVHlwZSkpIHtcbiAgICAgIG9wZXJhdG9yS2V5ID0gXCJvcGVyYXRvck51bWVyaWNcIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNEYXRlVHlwZShjb2x1bW4/LmRhdGFUeXBlKSkge1xuICAgICAgb3BlcmF0b3JLZXkgPSBcIm9wZXJhdG9yRGF0ZVwiO1xuICAgIH0gZWxzZSBpZiAoKGNvbHVtbj8uZGF0YVR5cGUgPz8gRU1QVFlfVkFMVUUpLnRvTG93ZXJDYXNlKCkgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBvcGVyYXRvcktleSA9IFwib3BlcmF0b3JCb29sZWFuXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wZXJhdG9yS2V5ID0gXCJvcGVyYXRvclRleHRcIjtcbiAgICB9XG5cbiAgICBjb25zdCBmYWxsYmFja0J5S2V5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgb3BlcmF0b3JOdW1lcmljOiBcIkNhbXBvcyBudW1lcmljb3MgcGVybWl0ZW0gY29tcGFyYWNvZXMsIGZhaXhhcyBlIGxpc3Rhcy5cIixcbiAgICAgIG9wZXJhdG9yRGF0ZTogXCJDYW1wb3MgZGUgZGF0YSBlIGhvcmEgcGVybWl0ZW0gY29tcGFyYWNvZXMgY3Jvbm9sb2dpY2FzIGUgaW50ZXJ2YWxvLlwiLFxuICAgICAgb3BlcmF0b3JCb29sZWFuOiBcIkNhbXBvcyBib29sZWFub3MgYWNlaXRhbSBjb21wYXJhY2FvIGRpcmV0YSBvdSB2ZXJpZmljYWNhbyBkZSB2YXppby5cIixcbiAgICAgIG9wZXJhdG9yVGV4dDogXCJDYW1wb3MgdGV4dHVhaXMgYWNlaXRhbSBidXNjYSBwb3IgdHJlY2hvLCBwcmVmaXhvLCBzdWZpeG8gZSBsaXN0YXMuXCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLiR7b3BlcmF0b3JLZXl9YCxcbiAgICAgIGZhbGxiYWNrQnlLZXlbb3BlcmF0b3JLZXldXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyVmFsdWVUeXBlVG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnZhbHVlVHlwZURlZmF1bHRgLFxuICAgICAgICBcIlVzZSB2YWxvciBkaWdpdGFkbyBwYXJhIGNvbXBhcmFyIGFnb3JhIG91IHBhcmFtZXRybyBwYXJhIHBlZGlyIG8gdmFsb3IgZW0gdGVtcG8gZGUgZXhlY3VjYW8uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZpbHRlck5lZWRzVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnZhbHVlVHlwZU5vdFJlcXVpcmVkYCxcbiAgICAgICAgXCJDb20gZXN0ZSBvcGVyYWRvciBvIGZpbHRybyBuYW8gcHJlY2lzYSByZWNlYmVyIHZhbG9yLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy50b29sdGlwcy52YWx1ZVR5cGVgLFxuICAgICAgXCJWYWxvciBkaWdpdGFkbyBzYWx2YSB1bWEgY29tcGFyYWNhbyBmaXhhLiBQYXJhbWV0cm8gZGVpeGEgbyB2YWxvciBhYmVydG8gcGFyYSBwcmVlbmNoaW1lbnRvIGZ1dHVyby5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlckNvbm5lY3RvclRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMudG9vbHRpcHMuY29ubmVjdG9yYCxcbiAgICAgIFwiQ29uZWN0b3IgZGVmaW5lIGNvbW8gZXN0YSByZWdyYSBzZSBsaWdhIGFvIGZpbHRybyBhbnRlcmlvcjogQU5EIHJlc3RyaW5nZSwgT1IgYW1wbGlhLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyT3B0aW9uYWxUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLm9wdGlvbmFsYCxcbiAgICAgIFwiTWFycXVlIGNvbW8gb3BjaW9uYWwgcXVhbmRvIGEgcmVncmEgcHVkZXIgc2VyIGlnbm9yYWRhIHNlbSBpbnZhbGlkYXIgYSBleGVjdWNhby5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlckRvbWFpbkV4cHJlc3Npb25Ub29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLmRvbWFpbkV4cHJlc3Npb25gLFxuICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pbyBlbnRyYSBjb21vIGNvbmRpY2FvIG1hbnVhbCBubyBXSEVSRS4gVXNlIHF1YW5kbyBhIHJlZ3JhIG5hbyBjb3ViZXIgbm9zIG9wZXJhZG9yZXMgcGFkcmFvLlwiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyVmFsdWVJbnB1dFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnBhcmFtZXRlck5hbWVgLFxuICAgICAgICBcIkluZm9ybWUgbyBub21lIHRlY25pY28gcXVlIHNlcmEgdXNhZG8gcGFyYSBwZWRpciBvIHZhbG9yIGVtIHRlbXBvIGRlIGV4ZWN1Y2FvLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIklOXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnZhbHVlc0xpc3RgLFxuICAgICAgICBcIlNlcGFyZSBvcyB2YWxvcmVzIHBvciB2aXJndWxhIHBhcmEgbW9udGFyIGEgbGlzdGEgZmluYWwgZG8gSU4uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiQkVUV0VFTlwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmlsdGVycy50b29sdGlwcy5iZXR3ZWVuYCxcbiAgICAgICAgXCJQcmVlbmNoYSBpbmljaW8gZSBmaW0gcGFyYSBtb250YXIgbyBpbnRlcnZhbG8gY29tcGxldG8uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLnRvb2x0aXBzLnZhbHVlYCxcbiAgICAgIFwiTyB2YWxvciBmaW5hbCByZXNwZWl0YSBvIHRpcG8gZG8gY2FtcG8gZSBvIG9wZXJhZG9yIGVzY29saGlkby5cIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNob3dGaWx0ZXJWYWx1ZVRleHRib3goKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNWYWx1ZU1vZGUgPSB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJ2YWx1ZVwiICYmIHRoaXMuZmlsdGVyTmVlZHNWYWx1ZTtcbiAgICByZXR1cm4gKFxuICAgICAgaXNWYWx1ZU1vZGUgJiZcbiAgICAgICF0aGlzLnNob3dGaWx0ZXJWYWx1ZXNUZXh0Ym94ICYmXG4gICAgICAhdGhpcy5zaG93RmlsdGVyQmV0d2VlbklucHV0cyAmJlxuICAgICAgIXRoaXMuc2hvd0ZpbHRlckJvb2xlYW5Db21ib2JveFxuICAgICk7XG4gIH1cbiAgZ2V0IHNob3dGaWx0ZXJWYWx1ZXNUZXh0Ym94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJ2YWx1ZVwiICYmXG4gICAgICB0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIklOXCJcbiAgICApO1xuICB9XG4gIGdldCBzaG93RmlsdGVyQmV0d2VlbklucHV0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPT09IFwidmFsdWVcIiAmJlxuICAgICAgdGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciA9PT0gXCJCRVRXRUVOXCJcbiAgICApO1xuICB9XG4gIGdldCBzaG93RmlsdGVyUGFyYW1ldGVyVGV4dGJveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCI7XG4gIH1cbiAgZ2V0IHNob3dGaWx0ZXJCb29sZWFuQ29tYm9ib3goKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKTtcbiAgICByZXR1cm4gKFxuICAgICAgISFjb2x1bW4gJiYgY29sdW1uLmRhdGFUeXBlID09PSBcImJvb2xlYW5cIiAmJiB0aGlzLnNob3dGaWx0ZXJWYWx1ZVRleHRib3hcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJSZXZpZXdJdGVtcygpOiBGaWx0ZXJSZXZpZXdJdGVtW10geyAvLyBOT1NPTkFSIC0gY29tcGxleGl0eTogZXh0cmFjdGlvbiB3b3VsZCByaXNrIGJlaGF2aW9yIGNoYW5nZVxuICAgIGNvbnN0IHZhbHVlVHlwZUxhYmVsID0gdGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgPyB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICApXG4gICAgICA6IHRoaXMucmVzb2x2ZU9wdGlvbkxhYmVsKHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlLCB0aGlzLnZhbHVlVHlwZU9wdGlvbnMpO1xuXG4gICAgY29uc3QgaXRlbXM6IEZpbHRlclJldmlld0l0ZW1bXSA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwibW9kZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMudHlwZWAsXG4gICAgICAgICAgXCJUaXBvXCJcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyTW9kYWxNb2RlID09PSBGSUxURVJfTU9ERV9ET01BSU5cbiAgICAgICAgICA/IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgICAgICAgIFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIlxuICAgICAgICAgIClcbiAgICAgICAgICA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLm1vZGVzLmNvbmRpdGlvbmAsXG4gICAgICAgICAgICBcIkZpbHRyb1wiXG4gICAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBcImNvbm5lY3RvclwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMuY29ubmVjdG9yYCxcbiAgICAgICAgICBcIkNvbmVjdG9yXCJcbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyQ29ubmVjdG9yRGlzYWJsZWRcbiAgICAgICAgICA/IFwiV0hFUkVcIlxuICAgICAgICAgIDogdGhpcy5yZXNvbHZlT3B0aW9uTGFiZWwodGhpcy5maWx0ZXJEcmFmdC5jb25uZWN0b3IsIHRoaXMuZmlsdGVyQ29ubmVjdG9yT3B0aW9ucyksXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgaXRlbXMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcImV4cHJlc3Npb25cIixcbiAgICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpZWxkcy5kb21haW5FeHByZXNzaW9uYCxcbiAgICAgICAgICAgIFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIlxuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRHJhZnQuZG9tYWluRXhwcmVzc2lvbi50cmltKCkgfHwgXCItXCIsXG4gICAgICAgICAgZW1waGFzaXplOiBcImNvZGVcIixcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJmaWVsZFwiLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLmZpZWxkYCxcbiAgICAgICAgICAgIFwiQ2FtcG9cIlxuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID8gdGhpcy5yZXNvbHZlQ29sdW1uUGF0aCh0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbikgOiBcIi1cIixcbiAgICAgICAgICBlbXBoYXNpemU6IFwicGF0aFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwib3BlcmF0b3JcIixcbiAgICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpZWxkcy5vcGVyYXRvcmAsXG4gICAgICAgICAgICBcIk9wZXJhZG9yXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnJlc29sdmVGaWx0ZXJPcGVyYXRvckxhYmVsKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwidmFsdWVUeXBlXCIsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWVsZHMudmFsdWVUeXBlYCxcbiAgICAgICAgICAgIFwiVGlwbyBkZSB2YWxvclwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJOZWVkc1ZhbHVlID8gdmFsdWVUeXBlTGFiZWwgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLm5vbmVgLFxuICAgICAgICAgICAgXCJTZW0gdmFsb3JcIlxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJ2YWx1ZVwiLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLnZhbHVlYCxcbiAgICAgICAgICAgIFwiVmFsb3JcIlxuICAgICAgICAgICksXG4gICAgICAgICAgdmFsdWU6IHRoaXMucmVzb2x2ZUZpbHRlckRyYWZ0RGlzcGxheVZhbHVlKCkgfHwgXCItXCIsXG4gICAgICAgICAgZW1waGFzaXplOiB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA9PT0gXCJwYXJhbWV0ZXJcIiA/IFwiY29kZVwiIDogXCJkZWZhdWx0XCIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIGl0ZW1zLnB1c2goe1xuICAgICAgaWQ6IFwib3B0aW9uYWxcIixcbiAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMub3B0aW9uYWxgLFxuICAgICAgICBcIk9wY2lvbmFsXCJcbiAgICAgICksXG4gICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEcmFmdC5vcHRpb25hbFxuICAgICAgICA/IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLnllc2AsXG4gICAgICAgICAgXCJTaW1cIlxuICAgICAgICApXG4gICAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMubm9gLFxuICAgICAgICAgIFwiTmFvXCJcbiAgICAgICAgKSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICBnZXQgZmlsdGVyUmV2aWV3UHJldmlld0xhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJldmlldyA9IHRoaXMucmVzb2x2ZUZpbHRlckRyYWZ0U3FsUHJldmlldygpO1xuICAgIHJldHVybiBwcmV2aWV3IHx8IFwiLVwiO1xuICB9XG4gIGdldCBzb3VyY2VNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlTW9kYWxTdGVwID09PSBcInNlbGVjdFwiO1xuICB9XG4gIGdldCBzb3VyY2VNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZU1vZGFsU3RlcCA9PT0gXCJjb25maWd1cmVcIjtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxDYW5Qcm9jZWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IGNhbk9wZW5Tb3VyY2VDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZUl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cbiAgZ2V0IHNvdXJjZUl0ZW1zKCk6IFNvdXJjZVZpZXdJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlVGFibGVEaXNwbGF5UGFydHMoaXRlbS50YWJsZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogaXRlbS50YWJsZSxcbiAgICAgICAgZGJMYWJlbDogcGFydHMuZGJMYWJlbCxcbiAgICAgICAgdGFibGVMYWJlbDogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgYWxpYXM6IGl0ZW0uYWxpYXMsXG4gICAgICAgIGhhc0N1c3RvbUFsaWFzOiB0aGlzLmhhc0N1c3RvbUFsaWFzKGl0ZW0udGFibGUsIGl0ZW0uYWxpYXMpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxUaW1lbGluZUl0ZW1zKCk6IFRpbWVsaW5lSXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogXCJzZWxlY3RcIixcbiAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWN0aW9ucy5zZWxlY3RUYWJsZXNgLFxuICAgICAgICAgIEZBTExCQUNLX1NFTEVDVF9UQUJMRVNcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLnNvdXJjZXMuc3RlcHMuc2VsZWN0LnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkVzY29saGEgYXMgdGFiZWxhcyBxdWUgZGV2ZW0gYWxpbWVudGFyIGEgdmlzYW8gYW50ZXMgZGUgY29uZmlndXJhciBvcyBhbGlhc2VzLlwiXG4gICAgICAgICksXG4gICAgICAgIGluZGljYXRvckxhYmVsOiBcIjFcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBcImNvbmZpZ3VyZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLmNvbmZpZ3VyZUFsaWFzZXNgLFxuICAgICAgICAgIFwiQ29uZmlndXJhciBhbGlhc2VzXCJcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLnNvdXJjZXMuc3RlcHMuY29uZmlndXJlLnN1YnRpdGxlYCxcbiAgICAgICAgICBcIlJldmlzZSBvcyBhbGlhc2VzIHN1Z2VyaWRvcyBlIGFqdXN0ZSBvcyBub21lcyBmaW5haXMgZGFzIHRhYmVsYXMgc2VsZWNpb25hZGFzLlwiXG4gICAgICAgICksXG4gICAgICAgIGluZGljYXRvckxhYmVsOiBcIjJcIixcbiAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLnNvdXJjZU1vZGFsQ2FuUHJvY2VlZCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBnZXQgc291cmNlTW9kYWxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLnNvdXJjZXMudGl0bGVgLFxuICAgICAgRkFMTEJBQ0tfU0VMRUNUX1RBQkxFU1xuICAgICk7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsVGltZWxpbmVBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjY2Vzc2liaWxpdHkuc291cmNlTW9kYWxUaW1lbGluZWAsXG4gICAgICBcIkV0YXBhcyBkYSBjb25maWd1cmFjYW8gZGFzIHRhYmVsYXNcIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsUGlja2xpc3RJdGVtcygpOiBUYWJsZVBpY2tsaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZFRhYmxlUGlja2xpc3RJdGVtcyh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSk7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsU2VsZWN0ZWRQaWNrbGlzdElkcygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlTW9kYWxEcmFmdHNcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHRoaXMucmVzb2x2ZVRhYmxlUGlja2xpc3RJZChpdGVtLnRhYmxlKSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpdGVtKTogaXRlbSBpcyBudW1iZXIgPT4gdHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIgJiYgaXRlbSA+IDBcbiAgICAgICk7XG4gIH1cbiAgZ2V0IHNvdXJjZU1vZGFsQ29uZmlndXJlZEl0ZW1zKCk6IFNvdXJjZUNvbmZpZ3VyZWRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnJlc29sdmVUYWJsZURpc3BsYXlQYXJ0cyhpdGVtLnRhYmxlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpdGVtLnRhYmxlLFxuICAgICAgICB0YWJsZTogaXRlbS50YWJsZSxcbiAgICAgICAgZGJMYWJlbDogcGFydHMuZGJMYWJlbCxcbiAgICAgICAgdGFibGVMYWJlbDogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgYWxpYXM6IGl0ZW0uYWxpYXMsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGdldCBqb2luSXRlbXMoKTogSm9pblZpZXdJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS5zb3VyY2VDb2x1bW4pO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS50YXJnZXRDb2x1bW4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGAke2l0ZW0uc291cmNlQ29sdW1ufS0ke2l0ZW0udGFyZ2V0Q29sdW1ufS0ke2luZGV4fWAsXG4gICAgICAgIHNvdXJjZVRhYmxlOiBzb3VyY2UudGFibGVMYWJlbCxcbiAgICAgICAgc291cmNlRmllbGQ6IHNvdXJjZS5maWVsZExhYmVsLFxuICAgICAgICBvcGVyYXRvcjogdGhpcy5yZXNvbHZlSm9pbk9wZXJhdG9yTGFiZWwoaXRlbS5vcGVyYXRvciksXG4gICAgICAgIHRhcmdldFRhYmxlOiB0YXJnZXQudGFibGVMYWJlbCxcbiAgICAgICAgdGFyZ2V0RmllbGQ6IHRhcmdldC5maWVsZExhYmVsLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBnZXQgZ3JvdXBCeUl0ZW1zKCk6IFNpbXBsZVZpZXdJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeS5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICBpZDogaXRlbSxcbiAgICAgIC4uLnRoaXMucmVzb2x2ZUNvbHVtblBhcnRzKGl0ZW0pLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgZmllbGRJdGVtc0xlZ2FjeSgpOiB1bmtub3duW10ge1xuICAgIHJldHVybiB0aGlzLmdldE9yZGVyZWRGaWVsZEVudHJpZXMoKS5tYXAoKGVudHJ5LCBpbmRleCkgPT4gKHtcbiAgICAgIGlkOiBlbnRyeS5jb2x1bW4sXG4gICAgICBsYWJlbDogYCR7aW5kZXggKyAxfcKwICR7dGhpcy5yZXNvbHZlQ29sdW1uUGF0aChlbnRyeS5jb2x1bW4pfWAsXG4gICAgICBvcmRlcjogaW5kZXgsXG4gICAgfSkpO1xuICB9XG4gIGdldCBmaWVsZEl0ZW1zKCk6IEZpZWxkVmlld0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3JkZXJlZEZpZWxkRW50cmllcygpLm1hcCgoZW50cnksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBlbnRyeS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUU7XG4gICAgICBjb25zdCBmdW5jdGlvbkFsaWFzID0gZW50cnkuZnVuY3Rpb24/LmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUU7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBgJHtlbnRyeS5jb2x1bW59LSR7aW5kZXh9YCxcbiAgICAgICAgc291cmNlSW5kZXg6IGVudHJ5LnNvdXJjZUluZGV4LFxuICAgICAgICBjb2x1bW46IGVudHJ5LmNvbHVtbixcbiAgICAgICAgb3JkZXJMYWJlbDogYCR7aW5kZXggKyAxfcKwYCxcbiAgICAgICAgLi4udGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoZW50cnkuY29sdW1uKSxcbiAgICAgICAgYWxpYXM6IGVudHJ5LmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIHdpZHRoOiBlbnRyeS53aWR0aD8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgIGZ1bmN0aW9uTGFiZWw6IGZ1bmN0aW9uTmFtZSA/IHRoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwoZnVuY3Rpb25OYW1lKSA6IEVNUFRZX1ZBTFVFLFxuICAgICAgICBmdW5jdGlvbkFsaWFzLFxuICAgICAgICBoYXNDdXN0b21Db25maWc6XG4gICAgICAgICAgISFlbnRyeS5hbGlhcz8udHJpbSgpIHx8ICEhZW50cnkud2lkdGg/LnRyaW0oKSB8fCAhIWZ1bmN0aW9uTmFtZSB8fCAhIWZ1bmN0aW9uQWxpYXMsXG4gICAgICAgIG9yZGVyOiBpbmRleCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgZ2V0IGZpZWxkTW9kYWxTZWxlY3Rpb25Sb3dzKCk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblNlbGVjdGlvblJvd3MoXG4gICAgICB0aGlzLmZpZWxkU2VsZWN0YWJsZUNvbHVtbnMsXG4gICAgICB0aGlzLmZpZWxkTW9kYWxEcmFmdHMubWFwKChpdGVtKSA9PiBpdGVtLmNvbHVtbiksXG4gICAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2gsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbENvbmZpZ3VyZWRJdGVtcygpOiBGaWVsZE1vZGFsQ29uZmlndXJlZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRNb2RhbERyYWZ0cy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRoaXMucmVzb2x2ZUNvbHVtblBhcnRzKGl0ZW0uY29sdW1uKTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGl0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgIGlkOiBgJHtpdGVtLmNvbHVtbn0tJHtpbmRleH1gLFxuICAgICAgICBjb2x1bW46IGl0ZW0uY29sdW1uLFxuICAgICAgICB0YWJsZUxhYmVsOiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICBmaWVsZExhYmVsOiBwYXJ0cy5maWVsZExhYmVsLFxuICAgICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICB3aWR0aDogaXRlbS53aWR0aD8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICBmdW5jdGlvbkxhYmVsOiBmdW5jdGlvbk5hbWVcbiAgICAgICAgICA/IHRoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwoZnVuY3Rpb25OYW1lKVxuICAgICAgICAgIDogRU1QVFlfVkFMVUUsXG4gICAgICAgIGZ1bmN0aW9uQWxpYXM6IGl0ZW0uZnVuY3Rpb24/LmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsSGFzU2VsZWN0YWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRTZWxlY3RhYmxlQ29sdW1ucy5zb21lKFxuICAgICAgKGl0ZW0pID0+ICF0aGlzLmZpZWxkTW9kYWxEcmFmdHMuc29tZSgoZHJhZnQpID0+IGRyYWZ0LmNvbHVtbiA9PT0gaXRlbS52YWx1ZSlcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsQ2FuU2VsZWN0QWxsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkTW9kYWxTZWxlY3Rpb25Sb3dzLnNvbWUoKGl0ZW0pID0+ICFpdGVtLnNlbGVjdGVkKTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbFBpY2tsaXN0SXRlbXMoKTogQ29sdW1uUGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uUGlja2xpc3RJdGVtcyh0aGlzLmZpZWxkU2VsZWN0YWJsZUNvbHVtbnMpO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsU2VsZWN0ZWRQaWNrbGlzdElkcygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRNb2RhbERyYWZ0c1xuICAgICAgLm1hcCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RJZChpdGVtLmNvbHVtbikpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoaXRlbSk6IGl0ZW0gaXMgbnVtYmVyID0+IHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiICYmIGl0ZW0gPiAwXG4gICAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZE1vZGFsU3RlcCA9PT0gXCJzZWxlY3RcIjtcbiAgfVxuICBnZXQgZmllbGRNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkTW9kYWxTdGVwID09PSBcImNvbmZpZ3VyZVwiO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsVGltZWxpbmVBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjY2Vzc2liaWxpdHkuZmllbGRNb2RhbFRpbWVsaW5lYCxcbiAgICAgIFwiRXRhcGFzIGRhIGNvbmZpZ3VyYWNhbyBkbyBjYW1wb1wiXG4gICAgKTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbFRpbWVsaW5lSXRlbXMoKTogVGltZWxpbmVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiBcInNlbGVjdFwiLFxuICAgICAgICBsYWJlbDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLnNlbGVjdENvbHVtbnNgLFxuICAgICAgICAgIFwiU2VsZWNpb25hciBjb2x1bmFzXCJcbiAgICAgICAgKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpZWxkcy5zdWJ0aXRsZWAsXG4gICAgICAgICAgXCJFc2NvbGhhIHVtYSBvdSBtYWlzIGNvbHVuYXMgcGFyYSBleHBvciBubyByZXN1bHRhZG8uXCJcbiAgICAgICAgKSxcbiAgICAgICAgaW5kaWNhdG9yTGFiZWw6IFwiMVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwiY29uZmlndXJlXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmZpZWxkTW9kYWxUaXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpZWxkLnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkFqdXN0ZSBhbGlhcywgbGFyZ3VyYSBlIGZ1bmNhbyBhbnRlcyBkZSBzYWx2YXIgbyBjYW1wby5cIlxuICAgICAgICApLFxuICAgICAgICBpbmRpY2F0b3JMYWJlbDogXCIyXCIsXG4gICAgICAgIGRpc2FibGVkOiAhdGhpcy5maWVsZE1vZGFsRHJhZnRzLmxlbmd0aCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICBnZXQgZmlsdGVyTW9kYWxUaW1lbGluZUFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uYWNjZXNzaWJpbGl0eS5maWx0ZXJNb2RhbFRpbWVsaW5lYCxcbiAgICAgIFwiRXRhcGFzIGRhIGNvbmZpZ3VyYWNhbyBkbyBmaWx0cm9cIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsVGltZWxpbmVJdGVtcygpOiBUaW1lbGluZUl0ZW1bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwic2VsZWN0XCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuc3RlcHMuc2VsZWN0LnRpdGxlYCxcbiAgICAgICAgICBcIlNlbGVjaW9uYXIgYmFzZVwiXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuc3RlcHMuc2VsZWN0LnN1YnRpdGxlYCxcbiAgICAgICAgICBcIkVzY29saGEgbyB0aXBvIGRlIGZpbHRybyBlIGRlZmluYSBvIGNhbXBvIGluaWNpYWwgYW50ZXMgZGUgY29uZmlndXJhci5cIlxuICAgICAgICApLFxuICAgICAgICBpbmRpY2F0b3JMYWJlbDogXCIxXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogXCJjb25maWd1cmVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLmZpbHRlci5zdGVwcy5jb25maWd1cmUudGl0bGVgLFxuICAgICAgICAgIFwiQ29uZmlndXJhciBmaWx0cm9cIlxuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmlsdGVyLnN0ZXBzLmNvbmZpZ3VyZS5zdWJ0aXRsZWAsXG4gICAgICAgICAgXCJEZWZpbmEgb3BlcmFkb3IsIHZhbG9yIGUgY29tcG9ydGFtZW50byBmaW5hbCBkbyBmaWx0cm8uXCJcbiAgICAgICAgKSxcbiAgICAgICAgaW5kaWNhdG9yTGFiZWw6IFwiMlwiLFxuICAgICAgICBkaXNhYmxlZDogIXRoaXMuZmlsdGVyTW9kYWxDYW5Qcm9jZWVkLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwicmV2aWV3XCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuc3RlcHMucmV2aWV3LnRpdGxlYCxcbiAgICAgICAgICBcIlJldmlzYXIgcmVncmFcIlxuICAgICAgICApLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmlsdGVyLnN0ZXBzLnJldmlldy5zdWJ0aXRsZWAsXG4gICAgICAgICAgXCJDb25maXJtZSBvIHJlc3VtbyBmaW5hbCBkYSByZWdyYSBhbnRlcyBkZSBzYWx2YXIuXCJcbiAgICAgICAgKSxcbiAgICAgICAgaW5kaWNhdG9yTGFiZWw6IFwiM1wiLFxuICAgICAgICBkaXNhYmxlZDogIXRoaXMuZmlsdGVyTW9kYWxDYW5SZXZpZXcsXG4gICAgICB9LFxuICAgIF07XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsQ29uZmlndXJlQWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMubmV4dFN0ZXBgLFxuICAgICAgXCJQcm94aW1hIGV0YXBhXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFJldmlld0FjdGlvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLnJldmlld1J1bGVgLFxuICAgICAgXCJSZXZpc2FyIHJlZ3JhXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFNlbGVjdGlvbkhlbHBlclRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5maWx0ZXIuZG9tYWluU2VsZWN0aW9uSGludGAsXG4gICAgICAgIFwiQSBleHByZXNzYW8gZGUgZG9taW5pbyBzZXJhIGNvbmZpZ3VyYWRhIG5hIHByb3hpbWEgZXRhcGEuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmlsdGVyLmNvbmRpdGlvblNlbGVjdGlvbkhpbnRgLFxuICAgICAgXCJTZWxlY2lvbmUgdW0gY2FtcG8gcGFyYSBsaWJlcmFyIGEgY29uZmlndXJhY2FvIGRldGFsaGFkYSBkbyBmaWx0cm8uXCJcbiAgICApO1xuICB9XG4gIGdldCBmaWVsZE1vZGFsRnVuY3Rpb25PcHRpb25zKCk6IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbltdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0ZXh0OiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5ub25lYCxcbiAgICAgICAgICBcIlNlbSBmdW5jYW9cIlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogRU1QVFlfVkFMVUUsXG4gICAgICB9LFxuICAgICAgLi4udGhpcy5mdW5jdGlvbk9wdGlvbnMsXG4gICAgXTtcbiAgfVxuICBnZXQgc29ydEl0ZW1zKCk6IFNvcnRWaWV3SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvcnRpbmcubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgIGlkOiBgJHtpdGVtLmNvbHVtbn0tJHtpdGVtLmZ1bmN0aW9uTmFtZSA/PyBFTVBUWV9WQUxVRX0tJHtpdGVtLmRpcmVjdGlvbn0tJHtpbmRleH1gLFxuICAgICAgLi4udGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS5jb2x1bW4pLFxuICAgICAgZnVuY3Rpb25OYW1lOiBpdGVtLmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb25MYWJlbDogaXRlbS5mdW5jdGlvbk5hbWVcbiAgICAgICAgPyB0aGlzLnJlc29sdmVGdW5jdGlvbkxhYmVsKGl0ZW0uZnVuY3Rpb25OYW1lKVxuICAgICAgICA6IEVNUFRZX1ZBTFVFLFxuICAgICAgZGlyZWN0aW9uOiB0aGlzLnJlc29sdmVPcHRpb25MYWJlbChcbiAgICAgICAgaXRlbS5kaXJlY3Rpb24sXG4gICAgICAgIHRoaXMuc29ydERpcmVjdGlvbk9wdGlvbnNcbiAgICAgICksXG4gICAgfSkpO1xuICB9XG4gIGdldCBmaWx0ZXJJdGVtc0xlZ2FjeSgpOiB1bmtub3duW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVycy5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgaWQ6IGAke2l0ZW0udmFsdWVUeXBlfS0ke2l0ZW0uY29sdW1ufS0ke2luZGV4fWAsXG4gICAgICB0aXRsZTpcbiAgICAgICAgaXRlbS52YWx1ZVR5cGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgICAgID8gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICAgICAgKVxuICAgICAgICAgIDogYCR7dGhpcy5yZXNvbHZlQ29sdW1uTGFiZWwoXG4gICAgICAgICAgICBpdGVtLmNvbHVtblxuICAgICAgICAgICl9IMK3ICR7dGhpcy5yZXNvbHZlRmlsdGVyT3BlcmF0b3JMYWJlbChpdGVtLm9wZXJhdG9yKX1gLFxuICAgICAgc3VidGl0bGU6IHRoaXMucmVzb2x2ZUZpbHRlckRpc3BsYXlWYWx1ZShpdGVtKSxcbiAgICAgIG9wdGlvbmFsOiBpdGVtLm9wdGlvbmFsLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgZmlsdGVySXRlbXMoKTogRmlsdGVyVmlld0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWx0ZXJzLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID1cbiAgICAgICAgaXRlbS52YWx1ZVR5cGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgZGJMYWJlbDogRU1QVFlfVkFMVUUsXG4gICAgICAgICAgICB0YWJsZUxhYmVsOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgICAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZmllbGRMYWJlbDogRU1QVFlfVkFMVUUsXG4gICAgICAgICAgfVxuICAgICAgICAgIDogdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS5jb2x1bW4pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogYCR7aXRlbS52YWx1ZVR5cGV9LSR7aXRlbS5jb2x1bW59LSR7aW5kZXh9YCxcbiAgICAgICAgLi4ucGFydHMsXG4gICAgICAgIG9wZXJhdG9yTGFiZWw6XG4gICAgICAgICAgaXRlbS52YWx1ZVR5cGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgICAgICAgPyBFTVBUWV9WQUxVRVxuICAgICAgICAgICAgOiB0aGlzLnJlc29sdmVGaWx0ZXJPcGVyYXRvckxhYmVsKGl0ZW0ub3BlcmF0b3IpLFxuICAgICAgICBzdWJ0aXRsZTogdGhpcy5yZXNvbHZlRmlsdGVyRGlzcGxheVZhbHVlKGl0ZW0pLFxuICAgICAgICBvcHRpb25hbDogaXRlbS5vcHRpb25hbCxcbiAgICAgICAgaXNEb21haW46IGl0ZW0udmFsdWVUeXBlID09PSBGSUxURVJfTU9ERV9ET01BSU4sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGdldCBzZWxlY3Rpb25Nb2RhbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID09PSBcInRhYmxlc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLnNvdXJjZXMudGl0bGVgLFxuICAgICAgICBGQUxMQkFDS19TRUxFQ1RfVEFCTEVTXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RhbE1vZGUgPT09IFwiZmllbGRzXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmllbGRzLnRpdGxlYCxcbiAgICAgICAgXCJTZWxlY2lvbmFyIGNhbXBvc1wiXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9Lm1vZGFscy5ncm91cEJ5LnRpdGxlYCxcbiAgICAgIFwiU2VsZWNpb25hciBHcm91cCBCeVwiXG4gICAgKTtcbiAgfVxuICBnZXQgbW9kYWxTZWFyY2hMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLnNlYXJjaGAsXG4gICAgICBcIkJ1c2NhclwiXG4gICAgKTtcbiAgfVxuICBnZXQgbW9kYWxTZWFyY2hQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyYCxcbiAgICAgIFwiQnVzY2FyXCJcbiAgICApO1xuICB9XG4gIGdldCBtb2RhbE5hbWVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLm5hbWVgLFxuICAgICAgXCJOb21lXCJcbiAgICApO1xuICB9XG4gIGdldCBtb2RhbFR5cGVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZmllbGRzLnR5cGVgLFxuICAgICAgXCJUaXBvXCJcbiAgICApO1xuICB9XG4gIGdldCBtb2RhbFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLnNlbGVjdGAsXG4gICAgICBcIlNlbGVjaW9uYXJcIlxuICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlck1vZGFsVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmNhcmRzLmZpbHRlcnMudGl0bGVgLFxuICAgICAgXCJGaWx0cm9zXCJcbiAgICApO1xuICB9XG4gIGdldCBzb3J0TW9kYWxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uY2FyZHMuc29ydGluZy50aXRsZWAsXG4gICAgICBcIk9yZGVuYWNhb1wiXG4gICAgKTtcbiAgfVxuICBnZXQgZmllbGRNb2RhbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5tb2RhbHMuZmllbGQudGl0bGVgLFxuICAgICAgXCJDb25maWd1cmFyIGNhbXBvXCJcbiAgICApO1xuICB9XG4gIGdldCBzZWxlY3Rpb25Nb2RhbFJvd3MoKTogU2VsZWN0aW9uUm93W10ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJ0YWJsZXNcIikge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRUYWJsZVNlbGVjdGlvblJvd3MoXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMsXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxTZWFyY2hcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJmaWVsZHNcIikge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5TZWxlY3Rpb25Sb3dzKFxuICAgICAgICB0aGlzLmZpZWxkU2VsZWN0YWJsZUNvbHVtbnMsXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMsXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxTZWFyY2hcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uU2VsZWN0aW9uUm93cyhcbiAgICAgIHRoaXMuZ3JvdXBCeVNlbGVjdGFibGVDb2x1bW5zLFxuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyxcbiAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxTZWFyY2hcbiAgICApO1xuICB9XG4gIGdldCBzZWxlY3Rpb25Nb2RhbFBpY2tsaXN0SXRlbXMoKTogQ29sdW1uUGlja2xpc3RJdGVtW10ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJmaWVsZHNcIikge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuZmllbGRTZWxlY3RhYmxlQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuZ3JvdXBCeVNlbGVjdGFibGVDb2x1bW5zKTtcbiAgfVxuICBnZXQgc2VsZWN0aW9uTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RhbElkc1xuICAgICAgLm1hcCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RJZChpdGVtKSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpdGVtKTogaXRlbSBpcyBudW1iZXIgPT4gdHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIgJiYgaXRlbSA+IDBcbiAgICAgICk7XG4gIH1cbiAgZ2V0IGpvaW5Tb3VyY2VSb3dzKCk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblNlbGVjdGlvblJvd3MoXG4gICAgICB0aGlzLmF2YWlsYWJsZUNvbHVtbnMsXG4gICAgICB0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4gPyBbdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uXSA6IFtdLFxuICAgICAgdGhpcy5qb2luU291cmNlU2VhcmNoLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG4gIGdldCBqb2luU291cmNlUGlja2xpc3RJdGVtcygpOiBDb2x1bW5QaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW5QaWNrbGlzdEl0ZW1zKHRoaXMuYXZhaWxhYmxlQ29sdW1ucyk7XG4gIH1cbiAgZ2V0IGpvaW5Tb3VyY2VTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBzZWxlY3RlZElkID0gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RJZCh0aGlzLmpvaW5EcmFmdC5zb3VyY2VDb2x1bW4pO1xuICAgIHJldHVybiB0eXBlb2Ygc2VsZWN0ZWRJZCA9PT0gXCJudW1iZXJcIiAmJiBzZWxlY3RlZElkID4gMFxuICAgICAgPyBbc2VsZWN0ZWRJZF1cbiAgICAgIDogW107XG4gIH1cbiAgZ2V0IGpvaW5UYXJnZXRSb3dzKCk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uKTtcbiAgICBjb25zdCBpdGVtcyA9IHNvdXJjZVxuICAgICAgPyB0aGlzLmF2YWlsYWJsZUNvbHVtbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRhYmxlICE9PSBzb3VyY2UudGFibGUpXG4gICAgICA6IHRoaXMuYXZhaWxhYmxlQ29sdW1ucztcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblNlbGVjdGlvblJvd3MoXG4gICAgICBpdGVtcyxcbiAgICAgIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiA/IFt0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW5dIDogW10sXG4gICAgICB0aGlzLmpvaW5UYXJnZXRTZWFyY2gsXG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cbiAgZ2V0IGpvaW5UYXJnZXRTZWxlY3RhYmxlQ29sdW1ucygpOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbik7XG4gICAgcmV0dXJuIHNvdXJjZVxuICAgICAgPyB0aGlzLmF2YWlsYWJsZUNvbHVtbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRhYmxlICE9PSBzb3VyY2UudGFibGUpXG4gICAgICA6IHRoaXMuYXZhaWxhYmxlQ29sdW1ucztcbiAgfVxuICBnZXQgam9pblRhcmdldFBpY2tsaXN0SXRlbXMoKTogQ29sdW1uUGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uUGlja2xpc3RJdGVtcyh0aGlzLmpvaW5UYXJnZXRTZWxlY3RhYmxlQ29sdW1ucyk7XG4gIH1cbiAgZ2V0IGpvaW5UYXJnZXRTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBzZWxlY3RlZElkID0gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RJZCh0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4pO1xuICAgIHJldHVybiB0eXBlb2Ygc2VsZWN0ZWRJZCA9PT0gXCJudW1iZXJcIiAmJiBzZWxlY3RlZElkID4gMFxuICAgICAgPyBbc2VsZWN0ZWRJZF1cbiAgICAgIDogW107XG4gIH1cbiAgZ2V0IHNvcnRDb2x1bW5Sb3dzKCk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0U2VsZWN0YWJsZUl0ZW1zXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICB0aGlzLm1hdGNoZXNTZWFyY2goXG4gICAgICAgICAgW2l0ZW0udGFibGVMYWJlbCwgaXRlbS5maWVsZExhYmVsLCBpdGVtLm1ldGFdLFxuICAgICAgICAgIHRoaXMuc29ydFNlYXJjaFxuICAgICAgICApXG4gICAgICApXG4gICAgICAubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgbmFtZTogaXRlbS5maWVsZExhYmVsLFxuICAgICAgICBtZXRhOiBpdGVtLm1ldGEsXG4gICAgICAgIHNlbGVjdGVkOlxuICAgICAgICAgIHRoaXMuc29ydERyYWZ0LmNvbHVtbiA9PT0gaXRlbS5jb2x1bW4gJiZcbiAgICAgICAgICAodGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lIHx8IEVNUFRZX1ZBTFVFKSA9PT0gaXRlbS5mdW5jdGlvbk5hbWUsXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgdGFibGVMYWJlbDogaXRlbS50YWJsZUxhYmVsLFxuICAgICAgICBwYXRoVHlwZTogXCJjb2x1bW5cIiBhcyBjb25zdCxcbiAgICAgIH0pKTtcbiAgfVxuICBnZXQgc29ydFBpY2tsaXN0SXRlbXMoKTogU29ydFBpY2tsaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0U2VsZWN0YWJsZUl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XG4gICAgICBpZDogaW5kZXggKyAxLFxuICAgICAgdGl0bGU6IGAke2l0ZW0udGFibGVMYWJlbH0uJHtpdGVtLmZpZWxkTGFiZWx9YCxcbiAgICAgIHRpdGxlUHJlZml4OiBpdGVtLnRhYmxlTGFiZWwsXG4gICAgICB0aXRsZVN1ZmZpeDogaXRlbS5maWVsZExhYmVsLFxuICAgICAgdGl0bGVQcmVmaXhDb2xvcjogVklTVUFMX1NRTF9UQUJMRV9DT0xPUixcbiAgICAgIHRpdGxlU3VmZml4Q29sb3I6IFZJU1VBTF9TUUxfRklFTERfQ09MT1IsXG4gICAgICBiYWRnZTogaXRlbS5tZXRhLFxuICAgICAgYmFkZ2VDb2xvcjogaXRlbS5mdW5jdGlvbk5hbWVcbiAgICAgICAgPyBQSUNLTElTVF9GVU5DVElPTl9CQURHRV9DT0xPUlxuICAgICAgICA6IFBJQ0tMSVNUX0RBVEFfVFlQRV9CQURHRV9DT0xPUixcbiAgICAgIHNlbGVjdGlvbklkOiBpdGVtLmlkLFxuICAgICAgY29sdW1uOiBpdGVtLmNvbHVtbixcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IHNvcnRTZWxlY3RlZFBpY2tsaXN0SWRzKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc29ydFBpY2tsaXN0SXRlbXMuZmluZChcbiAgICAgIChpdGVtKSA9PlxuICAgICAgICBpdGVtLmNvbHVtbiA9PT0gdGhpcy5zb3J0RHJhZnQuY29sdW1uICYmXG4gICAgICAgIGl0ZW0uc2VsZWN0aW9uSWQgPT09XG4gICAgICAgIHRoaXMuYnVpbGRTb3J0U2VsZWN0aW9uSWQoXG4gICAgICAgICAgdGhpcy5zb3J0RHJhZnQuY29sdW1uLFxuICAgICAgICAgIHRoaXMuc29ydERyYWZ0LmZ1bmN0aW9uTmFtZSB8fCBFTVBUWV9TT1JUX0ZVTkNUSU9OXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkID8gW3NlbGVjdGVkLmlkXSA6IFtdO1xuICB9XG4gIGdldCBmaWx0ZXJDb2x1bW5Sb3dzKCk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtblNlbGVjdGlvblJvd3MoXG4gICAgICB0aGlzLmF2YWlsYWJsZUNvbHVtbnMsXG4gICAgICB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbiA/IFt0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbl0gOiBbXSxcbiAgICAgIHRoaXMuZmlsdGVyU2VhcmNoLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFBpY2tsaXN0SXRlbXMoKTogQ29sdW1uUGlja2xpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQ29sdW1uUGlja2xpc3RJdGVtcyh0aGlzLmF2YWlsYWJsZUNvbHVtbnMpO1xuICB9XG4gIGdldCBmaWx0ZXJNb2RhbFNlbGVjdGVkUGlja2xpc3RJZHMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdElkKHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKTtcbiAgICByZXR1cm4gdHlwZW9mIHNlbGVjdGVkSWQgPT09IFwibnVtYmVyXCIgJiYgc2VsZWN0ZWRJZCA+IDBcbiAgICAgID8gW3NlbGVjdGVkSWRdXG4gICAgICA6IFtdO1xuICB9XG4gIGdldCBzb3J0Q29sdW1uU3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvcnREcmFmdC5jb2x1bW5cbiAgICAgID8gdGhpcy5yZXNvbHZlU29ydERyYWZ0TGFiZWwoKVxuICAgICAgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMuZW1wdHlTZWxlY3Rpb25gLFxuICAgICAgICBGQUxMQkFDS19FTVBUWV9TRUxFQ1RJT05cbiAgICAgICk7XG4gIH1cbiAgZ2V0IGZpbHRlckNvbHVtblN1bW1hcnkoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmZpbHRlcnMuZG9tYWluTGFiZWxgLFxuICAgICAgICBcIkV4cHJlc3NhbyBkZSBkb21pbmlvXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtblxuICAgICAgPyB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uKVxuICAgICAgOiB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5zdGF0ZXMuZW1wdHlTZWxlY3Rpb25gLFxuICAgICAgICBGQUxMQkFDS19FTVBUWV9TRUxFQ1RJT05cbiAgICAgICk7XG4gIH1cbiAgZ2V0IGpvaW5Tb3VyY2VTdW1tYXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtblxuICAgICAgPyB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbilcbiAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLmVtcHR5U2VsZWN0aW9uYCxcbiAgICAgICAgRkFMTEJBQ0tfRU1QVFlfU0VMRUNUSU9OXG4gICAgICApO1xuICB9XG4gIGdldCBqb2luVGFyZ2V0U3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW5cbiAgICAgID8gdGhpcy5yZXNvbHZlQ29sdW1uUGF0aCh0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4pXG4gICAgICA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5lbXB0eVNlbGVjdGlvbmAsXG4gICAgICAgIEZBTExCQUNLX0VNUFRZX1NFTEVDVElPTlxuICAgICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyT3BlcmF0b3JPcHRpb25zKCk6IER5bmFtaWNWaWV3QnVpbGRlck9wdGlvbltdIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5maWx0ZXJEcmFmdC5jb2x1bW4pO1xuICAgIGlmICghY29sdW1uKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlck9wZXJhdG9yc0ZvckNvbHVtbihjb2x1bW4pLm1hcCgodmFsdWUpID0+ICh7XG4gICAgICB2YWx1ZSxcbiAgICAgIHRleHQ6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXhcbiAgICAgICAgfS5maWx0ZXJzLm9wZXJhdG9ycy4ke3ZhbHVlLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgICAgdGhpcy5odW1hbml6ZUtleSh2YWx1ZSlcbiAgICAgICksXG4gICAgfSkpO1xuICB9XG4gIGdldCBub3JtYWxpemVkRmllbGRzKCk6IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzLm1hcCgoaXRlbSkgPT5cbiAgICAgIHRoaXMubm9ybWFsaXplR2VuZXJhdGVkRmllbGQoaXRlbSlcbiAgICApO1xuICB9XG4gIGdldCBzZWxlY3RlZFNvcnREaXJlY3Rpb25JdGVtKCk6IFNlbGVjdEJ1dHRvbkl0ZW08c3RyaW5nPiB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb25JdGVtcy5maW5kKFxuICAgICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uXG4gICAgICApID8/IG51bGxcbiAgICApO1xuICB9XG4gIGdldCBmaWx0ZXJFeHByZXNzaW9uU3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uLnRyaW0oKTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maWx0ZXJEcmFmdC5jb2x1bW5cbiAgICAgID8gdGhpcy5yZXNvbHZlQ29sdW1uUGF0aCh0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbilcbiAgICAgIDogdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLmVtcHR5U2VsZWN0aW9uYCxcbiAgICAgICAgRkFMTEJBQ0tfRU1QVFlfU0VMRUNUSU9OXG4gICAgICApO1xuICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvclxuICAgICAgPyB0aGlzLnJlc29sdmVGaWx0ZXJPcGVyYXRvckxhYmVsKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IpXG4gICAgICA6IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LnN0YXRlcy5lbXB0eVNlbGVjdGlvbmAsXG4gICAgICAgIEZBTExCQUNLX0VNUFRZX1NFTEVDVElPTlxuICAgICAgKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVzb2x2ZUZpbHRlckRyYWZ0RGlzcGxheVZhbHVlKCk7XG4gICAgcmV0dXJuIFtjb2x1bW4sIG9wZXJhdG9yLCB2YWx1ZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgfCBcIik7XG4gIH1cbiAgZ2V0IGZpbHRlckNvbmZpZ3VyYXRpb25TdW1tYXJ5TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJNb2RhbE1vZGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTlxuICAgICAgPyB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgICAgXCJFeHByZXNzYW8gZGUgZG9taW5pb1wiXG4gICAgICApXG4gICAgICA6IHRoaXMuZmlsdGVyQ29sdW1uU3VtbWFyeTtcbiAgfVxuICBnZXQgZmlsdGVyQmFja1RvU2VsZWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuYmFja1RvU2VsZWN0aW9uYCxcbiAgICAgIFwiVm9sdGFyIHBhcmEgc2VsZWNhb1wiXG4gICAgKTtcbiAgfVxuICBnZXQgZmlsdGVyQmFja1RvQ29uZmlndXJhdGlvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5hY3Rpb25zLmJhY2tUb0NvbmZpZ3VyYXRpb25gLFxuICAgICAgXCJWb2x0YXIgcGFyYSBjb25maWd1cmFjYW9cIlxuICAgICk7XG4gIH1cbiAgZ2V0IHByZXZpZXdDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSB0aGlzLnJlc29sdmVQcmV2aWV3Q29sdW1ucygpO1xuICAgIHJldHVybiBjb25maWdDb2x1bW5zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGZpZWxkOiBpdGVtLmZpZWxkLFxuICAgICAgaGVhZGVyOiBpdGVtLmhlYWRlciA/PyBpdGVtLmZpZWxkLFxuICAgICAgdHlwZTogKGl0ZW0udHlwZSBhcyBUYWJsZUNvbHVtbltcInR5cGVcIl0pID8/IFwidGV4dFwiLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgcHJldmlld1Jvd3MoKTogUm93QmFzZVtdIHtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLnByZXZpZXdDb2x1bW5zXG4gICAgICAubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKVxuICAgICAgLmZpbHRlcigoZmllbGQpOiBmaWVsZCBpcyBzdHJpbmcgPT4gdHlwZW9mIGZpZWxkID09PSBcInN0cmluZ1wiKTtcbiAgICBjb25zdCByb3dzID0gKCh0aGlzLmNvbmZpZy5wcmV2aWV3Py5yb3dzID8/IFtdKSBhcyBSb3dCYXNlW10pLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCBuZXh0OiBSb3dCYXNlID0ge307XG4gICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgbmV4dFtmaWVsZF0gPSByb3dbZmllbGRdID8/IEVNUFRZX1ZBTFVFO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICBpZiAocm93cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiByb3dzO1xuICAgIH1cbiAgICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDUgfSkubWFwKChfLCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV4dDogUm93QmFzZSA9IHt9O1xuICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIG5leHRbZmllbGRdID0gYCR7ZmllbGR9XyR7cm93SW5kZXggKyAxfWA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICB9XG4gIGdldCBwcmV2aWV3VGFibGVDb25maWcoKTogVGFibGVPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm93czogRFlOQU1JQ19WSUVXX0JVSUxERVJfREVGQVVMVF9UQUJMRV9ST1dTLFxuICAgICAgc2hvd1Jvd3NQZXJQYWdlT3B0aW9uczogdHJ1ZSxcbiAgICAgIHJvd3NQZXJQYWdlT3B0aW9uczogUFJFVklFV19ST1dTX1BFUl9QQUdFX09QVElPTlMsXG4gICAgICBlbXB0eVRpdGxlOiBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uZW1wdHkucHJldmlld1RpdGxlYCxcbiAgICAgIGVtcHR5U3VidGl0bGU6IGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5lbXB0eS5wcmV2aWV3VGV4dGAsXG4gICAgfSBhcyBUYWJsZU9wdGlvbnM7XG4gIH1cbiAgZ2V0IHNxbFByZXZpZXcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBnZW5lcmF0ZWRTcWwgPSB0aGlzLmJ1aWxkR2VuZXJhdGVkU3FsKCk7XG4gICAgaWYgKGdlbmVyYXRlZFNxbCkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlZFNxbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLm1hbnVhbD8uc3FsID8/IEVNUFRZX1ZBTFVFO1xuICB9XG4gIGdldCBzcWxQcmV2aWV3SGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gXCJzcGxpdFwiID8gXCIxMDAlXCIgOiBcIjI0cmVtXCI7XG4gIH1cbiAgZ2V0IHNxbFByZXZpZXdQYW5lbEhlaWdodCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBcInNwbGl0XCJcbiAgICAgID8gdGhpcy5tZWFzdXJlZFNwbGl0UHJldmlld0hlaWdodFxuICAgICAgOiBudWxsO1xuICB9XG4gIGdldCBwcmV2aWV3VG9nZ2xlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmFjdGlvbnMuJHt0aGlzLnByZXZpZXdWaXNpYmxlID8gXCJoaWRlUHJldmlld1wiIDogXCJzaG93UHJldmlld1wiXG4gICAgICB9YCxcbiAgICAgIHRoaXMucHJldmlld1Zpc2libGUgPyBcIk9jdWx0YXIgcHJldmlld1wiIDogXCJWaXN1YWxpemFyIHByZXZpZXdcIlxuICAgICk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkRmlsdGVyTW9kZUl0ZW0oKTogU2VsZWN0QnV0dG9uSXRlbTxGaWx0ZXJNb2RhbE1vZGU+IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZmlsdGVyTW9kZUl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHRoaXMuZmlsdGVyTW9kYWxNb2RlKSA/P1xuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgdHJhY2tCeUlkKF86IG51bWJlciwgaXRlbTogeyBpZDogc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG4gIHRyYWNrQnlBcnJvdyhfOiBudW1iZXIsIGl0ZW06IEJ1aWxkZXJGbG93QXJyb3cpOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG4gIG9uTGF5b3V0TW9kZUNoYW5nZShpdGVtczogU2VsZWN0QnV0dG9uSXRlbTxCdWlsZGVyTGF5b3V0TW9kZT5bXSk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBpdGVtc1swXT8udmFsdWU7XG4gICAgaWYgKG5leHQgPT09IFwic3RhY2tlZFwiIHx8IG5leHQgPT09IFwic3BsaXRcIikge1xuICAgICAgdGhpcy5sYXlvdXRNb2RlID0gbmV4dDtcbiAgICAgIHRoaXMuc3luY1NlbGVjdGVkTGF5b3V0TW9kZUl0ZW1zKCk7XG4gICAgICB0aGlzLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuICB0b2dnbGVQcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1Zpc2libGUgPSAhdGhpcy5wcmV2aWV3VmlzaWJsZTtcbiAgICB0aGlzLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCgpO1xuICB9XG4gIG9uU29ydERpcmVjdGlvbkNoYW5nZShpdGVtczogU2VsZWN0QnV0dG9uSXRlbTxzdHJpbmc+W10pOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gaXRlbXNbMF0/LnZhbHVlO1xuICAgIGlmIChuZXh0KSB7XG4gICAgICB0aGlzLnNvcnREcmFmdC5kaXJlY3Rpb24gPSBuZXh0O1xuICAgICAgdGhpcy5zeW5jU2VsZWN0ZWRTb3J0RGlyZWN0aW9uSXRlbXMoKTtcbiAgICB9XG4gIH1cbiAgaXNGaWVsZERyb3BJbmRpY2F0b3JWaXNpYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggIT09IG51bGwgJiYgdGhpcy5kcmFnUHJldmlld0luZGV4ID09PSBpbmRleDtcbiAgfVxuICBpc0ZpZWxkRHJvcEluZGljYXRvckF0RW5kVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggIT09IG51bGwgJiZcbiAgICAgIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9PT0gdGhpcy5maWVsZEl0ZW1zLmxlbmd0aFxuICAgICk7XG4gIH1cbiAgb25GaWVsZERyYWdTdGFydChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPSB0aGlzLmdldEZpZWxkUHJldmlld1NvdXJjZUluZGV4ZXMoKS5pbmRleE9mKGluZGV4KTtcbiAgfVxuICBvbkZpZWxkRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCF0YXJnZXQgfHwgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBzaG91bGRJbnNlcnRBZnRlciA9IGV2ZW50LmNsaWVudFggPiByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMjtcbiAgICB0aGlzLmRyYWdQcmV2aWV3SW5kZXggPSBNYXRoLm1pbihcbiAgICAgIGluZGV4ICsgKHNob3VsZEluc2VydEFmdGVyID8gMSA6IDApLFxuICAgICAgdGhpcy5maWVsZEl0ZW1zLmxlbmd0aFxuICAgICk7XG4gIH1cbiAgb25GaWVsZERyb3AoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4ID09PSBudWxsIHx8IHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPSBudWxsO1xuICAgICAgdGhpcy5kcmFnUHJldmlld0luZGV4ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJldmlld0luZGV4ZXMgPSB0aGlzLmdldEZpZWxkUHJldmlld1NvdXJjZUluZGV4ZXMoKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gcHJldmlld0luZGV4ZXMubWFwKFxuICAgICAgKGl0ZW1JbmRleCkgPT4gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpZWxkc1tpdGVtSW5kZXhdXG4gICAgKTtcbiAgICB0aGlzLmRyYWdnaW5nRmllbGRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5kcmFnUHJldmlld0luZGV4ID0gbnVsbDtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb25GaWVsZERyYWdFbmQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXggPSBudWxsO1xuICAgIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9IG51bGw7XG4gIH1cbiAgb3BlbkZpZWxkTW9kYWwoaW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID1cbiAgICAgIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiA/IHRoaXMubm9ybWFsaXplZEZpZWxkc1tpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5maWVsZE1vZGFsRHJhZnRzID0gdGhpcy5nZXRPcmRlcmVkRmllbGRFbnRyaWVzKCkubWFwKChpdGVtKSA9PiAoe1xuICAgICAgY29sdW1uOiBpdGVtLmNvbHVtbixcbiAgICAgIGFsaWFzOiBpdGVtLmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICB3aWR0aDogaXRlbS53aWR0aD8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb246IGl0ZW0uZnVuY3Rpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBpdGVtLmZ1bmN0aW9uLmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICAgIGFsaWFzOiBpdGVtLmZ1bmN0aW9uLmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgIH0pKTtcbiAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uID0gbnVsbDtcbiAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdCA9IHtcbiAgICAgIGNvbHVtbjogRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbk5hbWU6IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb25BbGlhczogRU1QVFlfVkFMVUUsXG4gICAgfTtcbiAgICB0aGlzLmZpZWxkTW9kYWxTdGVwID1cbiAgICAgIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiAmJiBjdXJyZW50ID8gXCJjb25maWd1cmVcIiA6IFwic2VsZWN0XCI7XG4gICAgdGhpcy5maWVsZE1vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cbiAgb3BlbkZpZWxkQ29uZmlndXJhdGlvbk1vZGFsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5PcGVuRmllbGRDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuRmllbGRNb2RhbCgwKTtcbiAgfVxuICBjbG9zZUZpZWxkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5maWVsZE1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZmllbGRNb2RhbFN0ZXAgPSBcInNlbGVjdFwiO1xuICAgIHRoaXMuZmllbGRNb2RhbFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmllbGRNb2RhbERyYWZ0cyA9IFtdO1xuICAgIHRoaXMuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPSBudWxsO1xuICAgIHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0ID0ge1xuICAgICAgY29sdW1uOiBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uTmFtZTogRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbkFsaWFzOiBFTVBUWV9WQUxVRSxcbiAgICB9O1xuICB9XG4gIGdvVG9GaWVsZE1vZGFsU3RlcChzdGVwOiBGaWVsZE1vZGFsU3RlcCk6IHZvaWQge1xuICAgIGlmIChzdGVwID09PSBcImNvbmZpZ3VyZVwiICYmICF0aGlzLmZpZWxkTW9kYWxEcmFmdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZmllbGRNb2RhbFN0ZXAgPSBzdGVwO1xuICAgIGlmIChzdGVwID09PSBcInNlbGVjdFwiKSB7XG4gICAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB9XG4gIH1cbiAgYWR2YW5jZUZpZWxkTW9kYWxTdGVwKCk6IHZvaWQge1xuICAgIHRoaXMuZ29Ub0ZpZWxkTW9kYWxTdGVwKFwiY29uZmlndXJlXCIpO1xuICB9XG4gIG9uRmllbGRNb2RhbFRpbWVsaW5lU3RlcFNlbGVjdChldmVudDogVGltZWxpbmVTdGVwU2VsZWN0RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmdvVG9GaWVsZE1vZGFsU3RlcChldmVudC5pdGVtLmlkID09PSBcImNvbmZpZ3VyZVwiID8gXCJjb25maWd1cmVcIiA6IFwic2VsZWN0XCIpO1xuICB9XG4gIHNlbGVjdEZpZWxkTW9kYWxDb2x1bW4oY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5maWVsZE1vZGFsRHJhZnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29sdW1uID09PSBjb2x1bW4pO1xuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZUZpZWxkTW9kYWxEcmFmdChjb2x1bW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmllbGRNb2RhbERyYWZ0cyA9IFtcbiAgICAgIC4uLnRoaXMuZmllbGRNb2RhbERyYWZ0cyxcbiAgICAgIHtcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBhbGlhczogRU1QVFlfVkFMVUUsXG4gICAgICAgIHdpZHRoOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgZnVuY3Rpb246IG51bGwsXG4gICAgICB9LFxuICAgIF07XG4gICAgdGhpcy5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbiA9IG51bGw7XG4gIH1cbiAgc2VsZWN0QWxsRmllbGRNb2RhbENvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gbmV3IFNldChcbiAgICAgIHRoaXMuZmllbGRNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29sdW1uKVxuICAgICk7XG4gICAgY29uc3Qgcm93c1RvU2VsZWN0ID0gdGhpcy5maWVsZFNlbGVjdGFibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiAhc2VsZWN0ZWRDb2x1bW5zLmhhcyhpdGVtLnZhbHVlKVxuICAgICk7XG5cbiAgICBpZiAoIXJvd3NUb1NlbGVjdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZpZWxkTW9kYWxEcmFmdHMgPSBbXG4gICAgICAuLi50aGlzLmZpZWxkTW9kYWxEcmFmdHMsXG4gICAgICAuLi5yb3dzVG9TZWxlY3QubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBjb2x1bW46IGl0ZW0udmFsdWUsXG4gICAgICAgIGFsaWFzOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgd2lkdGg6IEVNUFRZX1ZBTFVFLFxuICAgICAgICBmdW5jdGlvbjogbnVsbCxcbiAgICAgIH0pKSxcbiAgICBdO1xuICAgIHRoaXMuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPSBudWxsO1xuICB9XG4gIGFkZEFub3RoZXJGaWVsZEZyb21Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgICB0aGlzLmZpZWxkTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgfVxuICBvbkZpZWxkTW9kYWxTZWxlY3RlZElkc0NoYW5nZShpZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gbmV3IFNldChcbiAgICAgIGlkc1xuICAgICAgICAubWFwKChpdGVtKSA9PiB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdENvbHVtbihpdGVtKSlcbiAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+ICEhaXRlbSlcbiAgICApO1xuICAgIGNvbnN0IHByZXNlcnZlZERyYWZ0cyA9IHRoaXMuZmllbGRNb2RhbERyYWZ0cy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICBzZWxlY3RlZENvbHVtbnMuaGFzKGl0ZW0uY29sdW1uKVxuICAgICk7XG4gICAgY29uc3QgcHJlc2VydmVkQ29sdW1ucyA9IG5ldyBTZXQoXG4gICAgICBwcmVzZXJ2ZWREcmFmdHMubWFwKChpdGVtKSA9PiBpdGVtLmNvbHVtbilcbiAgICApO1xuICAgIGNvbnN0IGFwcGVuZGVkRHJhZnRzID0gdGhpcy5maWVsZFNlbGVjdGFibGVDb2x1bW5zXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICBzZWxlY3RlZENvbHVtbnMuaGFzKGl0ZW0udmFsdWUpICYmICFwcmVzZXJ2ZWRDb2x1bW5zLmhhcyhpdGVtLnZhbHVlKVxuICAgICAgKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgY29sdW1uOiBpdGVtLnZhbHVlLFxuICAgICAgICBhbGlhczogRU1QVFlfVkFMVUUsXG4gICAgICAgIHdpZHRoOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgZnVuY3Rpb246IG51bGwsXG4gICAgICB9KSk7XG5cbiAgICB0aGlzLmZpZWxkTW9kYWxEcmFmdHMgPSBbLi4ucHJlc2VydmVkRHJhZnRzLCAuLi5hcHBlbmRlZERyYWZ0c107XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uICYmXG4gICAgICAhc2VsZWN0ZWRDb2x1bW5zLmhhcyh0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uKVxuICAgICkge1xuICAgICAgdGhpcy5jYW5jZWxGaWVsZEZ1bmN0aW9uRWRpdCgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5maWVsZE1vZGFsRHJhZnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWVsZE1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gICAgfVxuICB9XG4gIG9uRmllbGRNb2RhbEFsaWFzQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXRjaEZpZWxkTW9kYWxEcmFmdChjb2x1bW4sIHsgYWxpYXM6IHZhbHVlIH0pO1xuICB9XG4gIG9uRmllbGRNb2RhbFdpZHRoQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXRjaEZpZWxkTW9kYWxEcmFmdChjb2x1bW4sIHsgd2lkdGg6IHZhbHVlIH0pO1xuICB9XG4gIHJlbW92ZUZpZWxkTW9kYWxEcmFmdChjb2x1bW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRNb2RhbERyYWZ0cyA9IHRoaXMuZmllbGRNb2RhbERyYWZ0cy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4gaXRlbS5jb2x1bW4gIT09IGNvbHVtblxuICAgICk7XG4gICAgaWYgKHRoaXMuZmllbGRGdW5jdGlvbkVkaXRDb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgdGhpcy5jYW5jZWxGaWVsZEZ1bmN0aW9uRWRpdCgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmllbGRNb2RhbERyYWZ0cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmllbGRNb2RhbFN0ZXAgPSBcInNlbGVjdFwiO1xuICAgIH1cbiAgfVxuICBzdGFydEZpZWxkRnVuY3Rpb25FZGl0KGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZmllbGRNb2RhbERyYWZ0cy5maW5kKChpdGVtKSA9PiBpdGVtLmNvbHVtbiA9PT0gY29sdW1uKTtcbiAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbiA9IGNvbHVtbjtcbiAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdCA9IHtcbiAgICAgIGNvbHVtbixcbiAgICAgIGZ1bmN0aW9uTmFtZTogY3VycmVudC5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbkFsaWFzOiBjdXJyZW50LmZ1bmN0aW9uPy5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgIH07XG4gIH1cbiAgY2FuY2VsRmllbGRGdW5jdGlvbkVkaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbiA9IG51bGw7XG4gICAgdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQgPSB7XG4gICAgICBjb2x1bW46IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb25OYW1lOiBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uQWxpYXM6IEVNUFRZX1ZBTFVFLFxuICAgIH07XG4gIH1cbiAgb25GaWVsZEZ1bmN0aW9uRHJhZnROYW1lQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uRmllbGRGdW5jdGlvbk5hbWVDaGFuZ2UoKTtcbiAgfVxuICBzYXZlRmllbGRGdW5jdGlvbkVkaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGF0Y2hGaWVsZE1vZGFsRHJhZnQodGhpcy5maWVsZEZ1bmN0aW9uRWRpdENvbHVtbiwge1xuICAgICAgZnVuY3Rpb246IHRoaXMuYnVpbGRGaWVsZEZ1bmN0aW9uRHJhZnQoKSxcbiAgICB9KTtcbiAgICB0aGlzLmNhbmNlbEZpZWxkRnVuY3Rpb25FZGl0KCk7XG4gIH1cbiAgaXNGaWVsZEZ1bmN0aW9uRWRpdGluZyhjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkRnVuY3Rpb25FZGl0Q29sdW1uID09PSBjb2x1bW47XG4gIH1cbiAgc2F2ZUZpZWxkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5TYXZlRmllbGRNb2RhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gdGhpcy5maWVsZE1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgd2lkdGg6IGl0ZW0ud2lkdGg/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIGZ1bmN0aW9uOiBpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWU/LnRyaW0oKVxuICAgICAgICA/IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IGl0ZW0uZnVuY3Rpb24uZnVuY3Rpb25OYW1lLnRyaW0oKSxcbiAgICAgICAgICBhbGlhczogaXRlbS5mdW5jdGlvbi5hbGlhcz8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICB9KSk7XG4gICAgdGhpcy5jbG9zZUZpZWxkTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlblNvdXJjZU1vZGFsKHN0ZXA6IFNvdXJjZU1vZGFsU3RlcCA9IFwic2VsZWN0XCIpOiB2b2lkIHtcbiAgICB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzID0gdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgdGFibGU6IGl0ZW0udGFibGUsXG4gICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpIHx8IHRoaXMucmVzb2x2ZURlZmF1bHRTb3VyY2VBbGlhcyhpdGVtLnRhYmxlKSxcbiAgICB9KSk7XG4gICAgdGhpcy5zb3VyY2VNb2RhbFN0ZXAgPVxuICAgICAgc3RlcCA9PT0gXCJjb25maWd1cmVcIiAmJiB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzLmxlbmd0aFxuICAgICAgICA/IFwiY29uZmlndXJlXCJcbiAgICAgICAgOiBcInNlbGVjdFwiO1xuICAgIHRoaXMuc291cmNlTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuICBvcGVuU291cmNlQ29uZmlndXJhdGlvbk1vZGFsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5PcGVuU291cmNlQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlblNvdXJjZU1vZGFsKFwiY29uZmlndXJlXCIpO1xuICB9XG4gIGNsb3NlU291cmNlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zb3VyY2VNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnNvdXJjZU1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gICAgdGhpcy5zb3VyY2VNb2RhbERyYWZ0cyA9IFtdO1xuICB9XG4gIGdvVG9Tb3VyY2VNb2RhbFN0ZXAoc3RlcDogU291cmNlTW9kYWxTdGVwKTogdm9pZCB7XG4gICAgaWYgKHN0ZXAgPT09IFwiY29uZmlndXJlXCIgJiYgIXRoaXMuc291cmNlTW9kYWxEcmFmdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2VNb2RhbFN0ZXAgPSBzdGVwO1xuICB9XG4gIGFkdmFuY2VTb3VyY2VNb2RhbFN0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5nb1RvU291cmNlTW9kYWxTdGVwKFwiY29uZmlndXJlXCIpO1xuICB9XG4gIG9uU291cmNlTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoZXZlbnQ6IFRpbWVsaW5lU3RlcFNlbGVjdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5nb1RvU291cmNlTW9kYWxTdGVwKFxuICAgICAgZXZlbnQuaXRlbS5pZCA9PT0gXCJjb25maWd1cmVcIiA/IFwiY29uZmlndXJlXCIgOiBcInNlbGVjdFwiXG4gICAgKTtcbiAgfVxuICBvblNvdXJjZU1vZGFsU2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkVGFibGVzID0gdGhpcy5yZXNvbHZlVGFibGVzRnJvbVBpY2tsaXN0SWRzKGlkcyk7XG4gICAgY29uc3QgZHJhZnRCeVRhYmxlID0gbmV3IE1hcChcbiAgICAgIHRoaXMuc291cmNlTW9kYWxEcmFmdHMubWFwKChpdGVtKSA9PiBbaXRlbS50YWJsZSwgaXRlbV0pXG4gICAgKTtcblxuICAgIHRoaXMuc291cmNlTW9kYWxEcmFmdHMgPSBzZWxlY3RlZFRhYmxlcy5tYXAoKHRhYmxlKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZHJhZnRCeVRhYmxlLmdldCh0YWJsZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjdXJyZW50ID8/IHtcbiAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICBhbGlhczogdGhpcy5yZXNvbHZlRGVmYXVsdFNvdXJjZUFsaWFzKHRhYmxlKSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5zb3VyY2VNb2RhbERyYWZ0cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc291cmNlTW9kYWxTdGVwID0gXCJzZWxlY3RcIjtcbiAgICB9XG4gIH1cbiAgb25Tb3VyY2VNb2RhbEFsaWFzQ2hhbmdlKHRhYmxlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzID0gdGhpcy5zb3VyY2VNb2RhbERyYWZ0cy5tYXAoKGl0ZW0pID0+XG4gICAgICBpdGVtLnRhYmxlID09PSB0YWJsZVxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIGFsaWFzOiB2YWx1ZSxcbiAgICAgICAgfVxuICAgICAgICA6IGl0ZW1cbiAgICApO1xuICB9XG4gIHNhdmVTb3VyY2VNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc291cmNlTW9kYWxEcmFmdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMgPSB0aGlzLnNvdXJjZU1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnJlc29sdmVUYWJsZU9wdGlvbihpdGVtLnRhYmxlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhYmxlOiBpdGVtLnRhYmxlLFxuICAgICAgICBhbGlhczogaXRlbS5hbGlhcz8udHJpbSgpIHx8IHRoaXMucmVzb2x2ZURlZmF1bHRTb3VyY2VBbGlhcyhpdGVtLnRhYmxlKSwgLy8gTk9TT05BUlxuICAgICAgICBzY2hlbWE6IHRhYmxlPy5zY2hlbWEsXG4gICAgICAgIGxhYmVsOiB0YWJsZT8uZGlzcGxheU5hbWUgfHwgdGFibGU/LnRleHQsIC8vIE5PU09OQVJcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmNsb3NlU291cmNlTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlblNlbGVjdGlvbk1vZGFsKG1vZGU6IFNlbGVjdGlvbk1vZGFsTW9kZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxNb2RlID0gbW9kZTtcbiAgICB0aGlzLnNlbGVjdGlvbk1vZGFsU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgaWYgKG1vZGUgPT09IFwidGFibGVzXCIpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMgPSB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5tYXAoXG4gICAgICAgIChpdGVtKSA9PiBpdGVtLnRhYmxlXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gXCJmaWVsZHNcIikge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyA9IHRoaXMubm9ybWFsaXplZEZpZWxkcy5tYXAoKGl0ZW0pID0+IGl0ZW0uY29sdW1uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyA9IFsuLi50aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeV07XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuICBjbG9zZVNlbGVjdGlvbk1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgfVxuICB0b2dnbGVTZWxlY3Rpb25Nb2RhbFJvdyhpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RhbElkcyA9IHRoaXMudG9nZ2xlTXVsdGlwbGVWYWx1ZShcbiAgICAgIHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMsXG4gICAgICBpZFxuICAgICk7XG4gIH1cbiAgb25TZWxlY3Rpb25Nb2RhbFNlbGVjdGVkSWRzQ2hhbmdlKGlkczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbk1vZGFsSWRzID0gdGhpcy5yZXNvbHZlQ29sdW1uc0Zyb21QaWNrbGlzdElkcyhpZHMpO1xuICB9XG4gIG9uU2VsZWN0YWJsZVJvd0tleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbCk/LmNsaWNrKCk7XG4gICAgfVxuICB9XG4gIGNvbmZpcm1TZWxlY3Rpb25Nb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RhbE1vZGUgPT09IFwidGFibGVzXCIpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgTWFwKFxuICAgICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcy5tYXAoKGl0ZW0pID0+IFtcbiAgICAgICAgICBpdGVtLnRhYmxlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsaWFzOiBpdGVtLmFsaWFzLFxuICAgICAgICAgICAgc2NoZW1hOiBpdGVtLnNjaGVtYSxcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMgPSAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS50YWJsZXMgPz8gW10pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMuaW5jbHVkZXMoaXRlbS52YWx1ZSkpXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgdGFibGU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgYWxpYXM6XG4gICAgICAgICAgICBhbGlhc2VzLmdldChpdGVtLnZhbHVlKT8uYWxpYXM/LnRyaW0oKSB8fCB0aGlzLmJ1aWxkQWxpYXNGb3JUYWJsZShpdGVtKSwgLy8gTk9TT05BUlxuICAgICAgICAgIHNjaGVtYTogYWxpYXNlcy5nZXQoaXRlbS52YWx1ZSk/LnNjaGVtYSA/PyBpdGVtLnNjaGVtYSxcbiAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgIGFsaWFzZXMuZ2V0KGl0ZW0udmFsdWUpPy5sYWJlbCA/P1xuICAgICAgICAgICAgaXRlbS5kaXNwbGF5TmFtZSA/P1xuICAgICAgICAgICAgaXRlbS50ZXh0LFxuICAgICAgICB9KSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGFsTW9kZSA9PT0gXCJmaWVsZHNcIikge1xuICAgICAgY29uc3QgZmllbGRDb25maWdCeUNvbHVtbiA9IG5ldyBNYXAoXG4gICAgICAgIHRoaXMubm9ybWFsaXplZEZpZWxkcy5tYXAoKGl0ZW0pID0+IFtpdGVtLmNvbHVtbiwgaXRlbV0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpZWxkcyA9IHRoaXMuc2VsZWN0aW9uTW9kYWxJZHMubWFwKFxuICAgICAgICAoY29sdW1uKSA9PiBmaWVsZENvbmZpZ0J5Q29sdW1uLmdldChjb2x1bW4pID8/IHsgY29sdW1uIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5ID0gWy4uLnRoaXMuc2VsZWN0aW9uTW9kYWxJZHNdO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlU2VsZWN0aW9uTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlbkpvaW5Nb2RhbChpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPVxuICAgICAgdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zW2luZGV4XSA6IG51bGw7XG4gICAgdGhpcy5qb2luRWRpdEluZGV4ID0gdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gaW5kZXggOiBudWxsO1xuICAgIHRoaXMuam9pblNvdXJjZVNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuam9pblRhcmdldFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuam9pbkRyYWZ0ID0ge1xuICAgICAgc291cmNlQ29sdW1uOiBjdXJyZW50Py5zb3VyY2VDb2x1bW4gPz8gRU1QVFlfVkFMVUUsXG4gICAgICB0YXJnZXRDb2x1bW46IGN1cnJlbnQ/LnRhcmdldENvbHVtbiA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIG9wZXJhdG9yOiBjdXJyZW50Py5vcGVyYXRvciA/PyBERUZBVUxUX0pPSU5fT1BFUkFUT1IsXG4gICAgfTtcbiAgICB0aGlzLmpvaW5Nb2RhbFZpc2libGUgPSB0cnVlO1xuICB9XG4gIGNsb3NlSm9pbk1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuam9pbk1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuam9pbkVkaXRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5qb2luU291cmNlU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5qb2luVGFyZ2V0U2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5qb2luRHJhZnQgPSB7XG4gICAgICBzb3VyY2VDb2x1bW46IEVNUFRZX1ZBTFVFLFxuICAgICAgdGFyZ2V0Q29sdW1uOiBFTVBUWV9WQUxVRSxcbiAgICAgIG9wZXJhdG9yOiBERUZBVUxUX0pPSU5fT1BFUkFUT1IsXG4gICAgfTtcbiAgfVxuICBzZWxlY3RKb2luU291cmNlKGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uID1cbiAgICAgIHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiA9PT0gY29sdW1uID8gRU1QVFlfVkFMVUUgOiBjb2x1bW47XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbik7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbik7XG4gICAgaWYgKHNvdXJjZSAmJiB0YXJnZXQgJiYgc291cmNlLnRhYmxlID09PSB0YXJnZXQudGFibGUpIHtcbiAgICAgIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiA9IEVNUFRZX1ZBTFVFO1xuICAgIH1cbiAgfVxuICBvbkpvaW5Tb3VyY2VTZWxlY3RlZElkc0NoYW5nZShpZHM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlTGFzdENvbHVtbkZyb21QaWNrbGlzdElkcyhpZHMpO1xuXG4gICAgdGhpcy5qb2luRHJhZnQuc291cmNlQ29sdW1uID1cbiAgICAgIGNvbHVtbiAmJiBjb2x1bW4gPT09IHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbiA/IEVNUFRZX1ZBTFVFIDogY29sdW1uID8/IEVNUFRZX1ZBTFVFO1xuXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbik7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbik7XG4gICAgaWYgKHNvdXJjZSAmJiB0YXJnZXQgJiYgc291cmNlLnRhYmxlID09PSB0YXJnZXQudGFibGUpIHtcbiAgICAgIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiA9IEVNUFRZX1ZBTFVFO1xuICAgIH1cbiAgfVxuICBzZWxlY3RKb2luVGFyZ2V0KGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uID1cbiAgICAgIHRoaXMuam9pbkRyYWZ0LnRhcmdldENvbHVtbiA9PT0gY29sdW1uID8gRU1QVFlfVkFMVUUgOiBjb2x1bW47XG4gIH1cbiAgb25Kb2luVGFyZ2V0U2VsZWN0ZWRJZHNDaGFuZ2UoaWRzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUxhc3RDb2x1bW5Gcm9tUGlja2xpc3RJZHMoaWRzKTtcbiAgICB0aGlzLmpvaW5EcmFmdC50YXJnZXRDb2x1bW4gPVxuICAgICAgY29sdW1uICYmIGNvbHVtbiA9PT0gdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uID8gRU1QVFlfVkFMVUUgOiBjb2x1bW4gPz8gRU1QVFlfVkFMVUU7XG4gIH1cbiAgc2F2ZUpvaW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblNhdmVKb2luKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHQ6IER5bmFtaWNWaWV3QnVpbGRlckpvaW4gPSB7XG4gICAgICBzb3VyY2VDb2x1bW46IHRoaXMuam9pbkRyYWZ0LnNvdXJjZUNvbHVtbixcbiAgICAgIHRhcmdldENvbHVtbjogdGhpcy5qb2luRHJhZnQudGFyZ2V0Q29sdW1uLFxuICAgICAgb3BlcmF0b3I6IHRoaXMuam9pbkRyYWZ0Lm9wZXJhdG9yLFxuICAgIH07XG4gICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zXTtcbiAgICBpZiAodGhpcy5qb2luRWRpdEluZGV4ID09PSBudWxsKSB7XG4gICAgICBpdGVtcy5wdXNoKG5leHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc1t0aGlzLmpvaW5FZGl0SW5kZXhdID0gbmV4dDtcbiAgICB9XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KGl0ZW1zLCAoaXRlbSkgPT5cbiAgICAgIFtpdGVtLnNvdXJjZUNvbHVtbiwgaXRlbS50YXJnZXRDb2x1bW4sIGl0ZW0ub3BlcmF0b3JdLmpvaW4oXCJ8XCIpXG4gICAgKTtcbiAgICB0aGlzLmNsb3NlSm9pbk1vZGFsKCk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIG9wZW5Tb3J0TW9kYWwoaW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID1cbiAgICAgIHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiA/IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nW2luZGV4XSA6IG51bGw7XG4gICAgdGhpcy5zb3J0RWRpdEluZGV4ID0gdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gaW5kZXggOiBudWxsO1xuICAgIHRoaXMuc29ydFNlYXJjaCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuc29ydERyYWZ0ID0ge1xuICAgICAgY29sdW1uOiBjdXJyZW50Py5jb2x1bW4gPz8gRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbk5hbWU6IGN1cnJlbnQ/LmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgZGlyZWN0aW9uOiBjdXJyZW50Py5kaXJlY3Rpb24gPz8gREVGQVVMVF9TT1JUX0RJUkVDVElPTixcbiAgICB9O1xuICAgIHRoaXMuc29ydE1vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cbiAgY2xvc2VTb3J0TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0TW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5zb3J0RWRpdEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLnNvcnRTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLnNvcnREcmFmdCA9IHtcbiAgICAgIGNvbHVtbjogRU1QVFlfVkFMVUUsXG4gICAgICBmdW5jdGlvbk5hbWU6IEVNUFRZX1ZBTFVFLFxuICAgICAgZGlyZWN0aW9uOiBERUZBVUxUX1NPUlRfRElSRUNUSU9OLFxuICAgIH07XG4gIH1cbiAgc2VsZWN0U29ydENvbHVtbihzb3J0U2VsZWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnBhcnNlU29ydFNlbGVjdGlvbklkKHNvcnRTZWxlY3Rpb25JZCk7XG4gICAgY29uc3QgaXNTYW1lU2VsZWN0aW9uID1cbiAgICAgIHRoaXMuc29ydERyYWZ0LmNvbHVtbiA9PT0gbmV4dC5jb2x1bW4gJiZcbiAgICAgICh0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUgfHwgRU1QVFlfVkFMVUUpID09PSBuZXh0LmZ1bmN0aW9uTmFtZTtcblxuICAgIHRoaXMuc29ydERyYWZ0LmNvbHVtbiA9IGlzU2FtZVNlbGVjdGlvbiA/IEVNUFRZX1ZBTFVFIDogbmV4dC5jb2x1bW47XG4gICAgdGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lID0gaXNTYW1lU2VsZWN0aW9uXG4gICAgICA/IEVNUFRZX1ZBTFVFXG4gICAgICA6IG5leHQuZnVuY3Rpb25OYW1lO1xuICB9XG4gIG9uU29ydFNlbGVjdGVkSWRzQ2hhbmdlKGlkczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZElkID0gaWRzLmF0KC0xKTtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNvcnRQaWNrbGlzdEl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHNlbGVjdGVkSWQpO1xuXG4gICAgaWYgKCFzZWxlY3RlZEl0ZW0pIHtcbiAgICAgIHRoaXMuc29ydERyYWZ0LmNvbHVtbiA9IEVNUFRZX1ZBTFVFO1xuICAgICAgdGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lID0gRU1QVFlfVkFMVUU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RTb3J0Q29sdW1uKHNlbGVjdGVkSXRlbS5zZWxlY3Rpb25JZCk7XG4gIH1cbiAgc2F2ZVNvcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblNhdmVTb3J0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHQ6IER5bmFtaWNWaWV3QnVpbGRlclNvcnQgPSB7XG4gICAgICBjb2x1bW46IHRoaXMuc29ydERyYWZ0LmNvbHVtbixcbiAgICAgIGZ1bmN0aW9uTmFtZTogdGhpcy5zb3J0RHJhZnQuZnVuY3Rpb25OYW1lIHx8IHVuZGVmaW5lZCxcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uLFxuICAgIH07XG4gICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvcnRpbmddO1xuICAgIGlmICh0aGlzLnNvcnRFZGl0SW5kZXggPT09IG51bGwpIHtcbiAgICAgIGl0ZW1zLnB1c2gobmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zW3RoaXMuc29ydEVkaXRJbmRleF0gPSBuZXh0O1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZyA9IHRoaXMuZGVkdXBsaWNhdGVCeUtleShpdGVtcywgKGl0ZW0pID0+XG4gICAgICBbaXRlbS5jb2x1bW4sIGl0ZW0uZnVuY3Rpb25OYW1lID8/IEVNUFRZX1ZBTFVFLCBpdGVtLmRpcmVjdGlvbl0uam9pbihcInxcIilcbiAgICApO1xuICAgIHRoaXMuY2xvc2VTb3J0TW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb3BlbkZpbHRlck1vZGFsKGluZGV4PzogbnVtYmVyKTogdm9pZCB7IC8vIE5PU09OQVIgLSBjb21wbGV4aXR5OiBleHRyYWN0aW9uIHdvdWxkIHJpc2sgYmVoYXZpb3IgY2hhbmdlXG4gICAgY29uc3QgY3VycmVudCA9XG4gICAgICB0eXBlb2YgaW5kZXggPT09IFwibnVtYmVyXCIgPyB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVyc1tpbmRleF0gOiBudWxsO1xuICAgIHRoaXMuZmlsdGVyRWRpdEluZGV4ID0gdHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gaW5kZXggOiBudWxsO1xuICAgIHRoaXMuZmlsdGVyTW9kYWxNb2RlID1cbiAgICAgIGN1cnJlbnQ/LnZhbHVlVHlwZSA9PT0gRklMVEVSX01PREVfRE9NQUlOID8gRklMVEVSX01PREVfRE9NQUlOIDogXCJjb25kaXRpb25cIjtcbiAgICB0aGlzLmZpbHRlck1vZGFsU3RlcCA9IHR5cGVvZiBpbmRleCA9PT0gXCJudW1iZXJcIiAmJiBjdXJyZW50ID8gXCJjb25maWd1cmVcIiA6IFwic2VsZWN0XCI7XG4gICAgdGhpcy5maWx0ZXJTZWFyY2ggPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0ID0ge1xuICAgICAgbW9kZTogdGhpcy5maWx0ZXJNb2RhbE1vZGUsXG4gICAgICBjb2x1bW46IGN1cnJlbnQ/LmNvbHVtbiA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIG9wZXJhdG9yOiBjdXJyZW50Py5vcGVyYXRvciA/PyBERUZBVUxUX0ZJTFRFUl9PUEVSQVRPUixcbiAgICAgIGNvbm5lY3RvcjogY3VycmVudD8uY29ubmVjdG9yID8/IERFRkFVTFRfRklMVEVSX0NPTk5FQ1RPUixcbiAgICAgIG9wdGlvbmFsOiBjdXJyZW50Py5vcHRpb25hbCA/PyBmYWxzZSxcbiAgICAgIHZhbHVlVHlwZTogY3VycmVudD8udmFsdWVUeXBlID8/IERFRkFVTFRfRklMVEVSX1ZBTFVFX1RZUEUsXG4gICAgICB2YWx1ZTogY3VycmVudD8udmFsdWUgPz8gRU1QVFlfVkFMVUUsXG4gICAgICB2YWx1ZXNUZXh0OiBjdXJyZW50Py52YWx1ZXM/LmpvaW4oXCIsIFwiKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIGJldHdlZW5TdGFydDogY3VycmVudD8udmFsdWVzPy5bMF0gPz8gRU1QVFlfVkFMVUUsXG4gICAgICBiZXR3ZWVuRW5kOiBjdXJyZW50Py52YWx1ZXM/LlsxXSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIHBhcmFtZXRlck5hbWU6IGN1cnJlbnQ/LnBhcmFtZXRlck5hbWUgPz8gRU1QVFlfVkFMVUUsXG4gICAgICBkb21haW5FeHByZXNzaW9uOiBjdXJyZW50Py5kb21haW5FeHByZXNzaW9uID8/IEVNUFRZX1ZBTFVFLFxuICAgIH07XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgICB0aGlzLmZpbHRlck1vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cbiAgY2xvc2VGaWx0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck1vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZmlsdGVyRWRpdEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlck1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gICAgdGhpcy5maWx0ZXJNb2RhbE1vZGUgPSBcImNvbmRpdGlvblwiO1xuICAgIHRoaXMuZmlsdGVyU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdCA9IHtcbiAgICAgIG1vZGU6IFwiY29uZGl0aW9uXCIsXG4gICAgICBjb2x1bW46IEVNUFRZX1ZBTFVFLFxuICAgICAgb3BlcmF0b3I6IERFRkFVTFRfRklMVEVSX09QRVJBVE9SLFxuICAgICAgY29ubmVjdG9yOiBERUZBVUxUX0ZJTFRFUl9DT05ORUNUT1IsXG4gICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICB2YWx1ZVR5cGU6IERFRkFVTFRfRklMVEVSX1ZBTFVFX1RZUEUsXG4gICAgICB2YWx1ZTogRU1QVFlfVkFMVUUsXG4gICAgICB2YWx1ZXNUZXh0OiBFTVBUWV9WQUxVRSxcbiAgICAgIGJldHdlZW5TdGFydDogRU1QVFlfVkFMVUUsXG4gICAgICBiZXR3ZWVuRW5kOiBFTVBUWV9WQUxVRSxcbiAgICAgIHBhcmFtZXRlck5hbWU6IEVNUFRZX1ZBTFVFLFxuICAgICAgZG9tYWluRXhwcmVzc2lvbjogRU1QVFlfVkFMVUUsXG4gICAgfTtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZEZpbHRlck1vZGVJdGVtcygpO1xuICB9XG4gIHNlbGVjdEZpbHRlckNvbHVtbihjb2x1bW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID1cbiAgICAgIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID09PSBjb2x1bW4gPyBFTVBUWV9WQUxVRSA6IGNvbHVtbjtcbiAgICB0aGlzLnJlc2V0RmlsdGVyRHJhZnRWYWx1ZVN0YXRlKCk7XG4gIH1cbiAgb25GaWx0ZXJNb2RhbFNlbGVjdGVkSWRzQ2hhbmdlKGlkczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0U2VsZWN0ZWRJZCA9IGlkcy5hdCgtMSk7XG4gICAgY29uc3QgbmV4dENvbHVtbiA9XG4gICAgICB0eXBlb2YgbmV4dFNlbGVjdGVkSWQgPT09IFwibnVtYmVyXCJcbiAgICAgICAgPyB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdENvbHVtbihuZXh0U2VsZWN0ZWRJZCkgPz8gRU1QVFlfVkFMVUVcbiAgICAgICAgOiBFTVBUWV9WQUxVRTtcblxuICAgIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID0gbmV4dENvbHVtbjtcbiAgICB0aGlzLnJlc2V0RmlsdGVyRHJhZnRWYWx1ZVN0YXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSByZXNldEZpbHRlckRyYWZ0VmFsdWVTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaXJzdE9wZXJhdG9yID1cbiAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JPcHRpb25zWzBdPy52YWx1ZSA/PyBERUZBVUxUX0ZJTFRFUl9PUEVSQVRPUjtcbiAgICB0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID0gZmlyc3RPcGVyYXRvcjtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZXNUZXh0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5FbmQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSBFTVBUWV9WQUxVRTtcbiAgfVxuICBnb1RvRmlsdGVyTW9kYWxTdGVwKHN0ZXA6IEZpbHRlck1vZGFsU3RlcCk6IHZvaWQge1xuICAgIGlmIChzdGVwID09PSBcImNvbmZpZ3VyZVwiICYmICF0aGlzLmZpbHRlck1vZGFsQ2FuUHJvY2VlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdGVwID09PSBcInJldmlld1wiICYmICF0aGlzLmZpbHRlck1vZGFsQ2FuUmV2aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJNb2RhbFN0ZXAgPSBzdGVwO1xuXG4gICAgaWYgKHN0ZXAgPT09IFwic2VsZWN0XCIpIHtcbiAgICAgIHRoaXMuZmlsdGVyU2VhcmNoID0gRU1QVFlfVkFMVUU7XG4gICAgfVxuICB9XG4gIGFkdmFuY2VGaWx0ZXJNb2RhbFN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVyTW9kYWxTZWxlY3Rpb25TdGVwQWN0aXZlKSB7XG4gICAgICB0aGlzLmdvVG9GaWx0ZXJNb2RhbFN0ZXAoXCJjb25maWd1cmVcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyTW9kYWxDb25maWd1cmF0aW9uU3RlcEFjdGl2ZSkge1xuICAgICAgdGhpcy5nb1RvRmlsdGVyTW9kYWxTdGVwKFwicmV2aWV3XCIpO1xuICAgIH1cbiAgfVxuICBvbkZpbHRlclZhbHVlVHlwZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZXNUZXh0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5FbmQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSBFTVBUWV9WQUxVRTtcbiAgfVxuICBvbkZpbHRlck9wZXJhdG9yQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWUgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlc1RleHQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5TdGFydCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQuYmV0d2VlbkVuZCA9IEVNUFRZX1ZBTFVFO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQucGFyYW1ldGVyTmFtZSA9IEVNUFRZX1ZBTFVFO1xuXG4gICAgaWYgKCF0aGlzLmZpbHRlck5lZWRzVmFsdWUpIHtcbiAgICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID0gREVGQVVMVF9GSUxURVJfVkFMVUVfVFlQRTtcbiAgICB9XG4gIH1cbiAgb25GaWx0ZXJNb2RlQ2hhbmdlKG1vZGU6IEZpbHRlck1vZGFsTW9kZSk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyTW9kYWxNb2RlID0gbW9kZTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0Lm1vZGUgPSBtb2RlO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQuY29sdW1uID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciA9IERFRkFVTFRfRklMVEVSX09QRVJBVE9SO1xuICAgIHRoaXMuZmlsdGVyRHJhZnQudmFsdWVUeXBlID0gREVGQVVMVF9GSUxURVJfVkFMVUVfVFlQRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC52YWx1ZXNUZXh0ID0gRU1QVFlfVkFMVUU7XG4gICAgdGhpcy5maWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5FbmQgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlckRyYWZ0LmRvbWFpbkV4cHJlc3Npb24gPSBFTVBUWV9WQUxVRTtcbiAgICB0aGlzLmZpbHRlck1vZGFsU3RlcCA9IFwic2VsZWN0XCI7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgfVxuICBvbkZpbHRlck1vZGFsVGltZWxpbmVTdGVwU2VsZWN0KGV2ZW50OiBUaW1lbGluZVN0ZXBTZWxlY3RFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5pdGVtLmlkID09PSBcInJldmlld1wiKSB7XG4gICAgICB0aGlzLmdvVG9GaWx0ZXJNb2RhbFN0ZXAoXCJyZXZpZXdcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5nb1RvRmlsdGVyTW9kYWxTdGVwKGV2ZW50Lml0ZW0uaWQgPT09IFwiY29uZmlndXJlXCIgPyBcImNvbmZpZ3VyZVwiIDogXCJzZWxlY3RcIik7XG4gIH1cbiAgc2F2ZUZpbHRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5idWlsZEZpbHRlckZyb21EcmFmdCgpO1xuXG4gICAgaWYgKCFuZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnNdO1xuICAgIGlmICh0aGlzLmZpbHRlckVkaXRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgaXRlbXMucHVzaChuZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNbdGhpcy5maWx0ZXJFZGl0SW5kZXhdID0gbmV4dDtcbiAgICB9XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMgPSBpdGVtcztcbiAgICB0aGlzLmNsb3NlRmlsdGVyTW9kYWwoKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgb25Tb3VyY2VBbGlhc0NoYW5nZShpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzW2luZGV4XTtcbiAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnJlc29sdmVUYWJsZU9wdGlvbihjdXJyZW50LnRhYmxlKTtcbiAgICBjdXJyZW50LmFsaWFzID1cbiAgICAgIHZhbHVlLnRyaW0oKSB8fCAodGFibGUgPyB0aGlzLmJ1aWxkQWxpYXNGb3JUYWJsZSh0YWJsZSkgOiBjdXJyZW50LmFsaWFzKTtcbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCgpO1xuICB9XG4gIHJlbW92ZVNvdXJjZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgcmVtb3ZlSm9pbihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUdyb3VwQnkoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5LnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUZpZWxkKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZVNvcnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIHJlbW92ZUZpbHRlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgY2xlYXJTb3VyY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFySm9pbnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFyR3JvdXBCeSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeSA9IFtdO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBjbGVhckZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmllbGRzID0gW107XG4gICAgdGhpcy5hZnRlckJ1aWxkZXJNdXRhdGlvbigpO1xuICB9XG4gIGNsZWFyU29ydGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZyA9IFtdO1xuICAgIHRoaXMuYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTtcbiAgfVxuICBjbGVhckZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMgPSBbXTtcbiAgICB0aGlzLmFmdGVyQnVpbGRlck11dGF0aW9uKCk7XG4gIH1cbiAgaGFuZGxlU2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNhbml0aXplQnVpbGRlcigpO1xuICAgIHRoaXMuc2F2ZS5lbWl0KGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyh0aGlzLmNvbmZpZykpO1xuICB9XG4gIHByaXZhdGUgYWZ0ZXJCdWlsZGVyTXV0YXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zYW5pdGl6ZUJ1aWxkZXIoKTtcbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlRmxvd0Fycm93UmVmcmVzaCgpO1xuICB9XG4gIHByaXZhdGUgZW1pdENvbmZpZ0NoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZS5lbWl0KGNyZWF0ZUR5bmFtaWNWaWV3QnVpbGRlckNvbmZpZyh0aGlzLmNvbmZpZykpO1xuICB9XG4gIHByaXZhdGUgc2FuaXRpemVCdWlsZGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlc0J5SWQgPSBuZXcgTWFwKFxuICAgICAgKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKS5tYXAoKGl0ZW0pID0+IFtpdGVtLnZhbHVlLCBpdGVtXSlcbiAgICApO1xuICAgIGNvbnN0IHNlbGVjdGVkU291cmNlcyA9IHRoaXMuZGVkdXBsaWNhdGVCeUtleShcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgdGFibGVzQnlJZC5oYXMoaXRlbS50YWJsZSlcbiAgICAgICksXG4gICAgICAoaXRlbSkgPT4gaXRlbS50YWJsZVxuICAgICkubWFwKChpdGVtKSA9PiAoe1xuICAgICAgdGFibGU6IGl0ZW0udGFibGUsXG4gICAgICBhbGlhczpcbiAgICAgICAgaXRlbS5hbGlhcz8udHJpbSgpIHx8XG4gICAgICAgIHRoaXMuYnVpbGRBbGlhc0ZvclRhYmxlKFxuICAgICAgICAgIHRhYmxlc0J5SWQuZ2V0KGl0ZW0udGFibGUpIGFzIER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uXG4gICAgICAgICksXG4gICAgICBzY2hlbWE6IGl0ZW0uc2NoZW1hID8/IHRhYmxlc0J5SWQuZ2V0KGl0ZW0udGFibGUpPy5zY2hlbWEsXG4gICAgICBsYWJlbDpcbiAgICAgICAgaXRlbS5sYWJlbCA/P1xuICAgICAgICB0YWJsZXNCeUlkLmdldChpdGVtLnRhYmxlKT8uZGlzcGxheU5hbWUgPz9cbiAgICAgICAgdGFibGVzQnlJZC5nZXQoaXRlbS50YWJsZSk/LnRleHQsXG4gICAgfSkpO1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzID0gc2VsZWN0ZWRTb3VyY2VzO1xuICAgIGNvbnN0IHNlbGVjdGVkVGFibGVJZHMgPSBuZXcgU2V0KHNlbGVjdGVkU291cmNlcy5tYXAoKGl0ZW0pID0+IGl0ZW0udGFibGUpKTtcbiAgICBjb25zdCBhdmFpbGFibGVDb2x1bW5zID0gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEuY29sdW1ucyA/PyBbXSkuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+IHNlbGVjdGVkVGFibGVJZHMuaGFzKGl0ZW0udGFibGUpXG4gICAgKTtcbiAgICBjb25zdCBhdmFpbGFibGVDb2x1bW5NYXAgPSBuZXcgTWFwKFxuICAgICAgYXZhaWxhYmxlQ29sdW1ucy5tYXAoKGl0ZW0pID0+IFtpdGVtLnZhbHVlLCBpdGVtXSlcbiAgICApO1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5ID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KFxuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGF2YWlsYWJsZUNvbHVtbk1hcC5nZXQoaXRlbSk7XG4gICAgICAgIHJldHVybiAhIWNvbHVtbiAmJiBjb2x1bW4uaXNBZ2dyZWdhdGFibGUgIT09IGZhbHNlO1xuICAgICAgfSksXG4gICAgICAoaXRlbSkgPT4gaXRlbVxuICAgICk7XG4gICAgY29uc3QgZ3JvdXBCeVNldCA9IG5ldyBTZXQodGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWVsZHMgPSB0aGlzLm1lcmdlTGVnYWN5RnVuY3Rpb25zSW50b0ZpZWxkcyhcbiAgICAgIHRoaXMubm9ybWFsaXplZEZpZWxkcyxcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5mdW5jdGlvbnNcbiAgICApO1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHMgPSB0aGlzLmRlZHVwbGljYXRlQnlLZXkoXG4gICAgICBub3JtYWxpemVkRmllbGRzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBhdmFpbGFibGVDb2x1bW5NYXAuZ2V0KGl0ZW0uY29sdW1uKTtcbiAgICAgICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3JvdXBCeVNldC5oYXMoaXRlbS5jb2x1bW4pIHx8ICghIWl0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZSAmJiBjb2x1bW4uaXNBZ2dyZWdhdGFibGUgIT09IGZhbHNlKTtcbiAgICAgIH0pLFxuICAgICAgKGl0ZW0pID0+IGAke2l0ZW0uY29sdW1ufXwke2l0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZSA/PyBFTVBUWV9WQUxVRX1gXG4gICAgKTtcbiAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZnVuY3Rpb25zID0gdGhpcy5leHRyYWN0RnVuY3Rpb25zRnJvbUZpZWxkcyhcbiAgICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5maWVsZHMubWFwKChpdGVtKSA9PiB0aGlzLm5vcm1hbGl6ZUdlbmVyYXRlZEZpZWxkKGl0ZW0pKVxuICAgICk7XG4gICAgY29uc3Qgc29ydEFsbG93ZWQgPSBuZXcgU2V0KFxuICAgICAgdGhpcy5zb3J0U2VsZWN0YWJsZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5pZClcbiAgICApO1xuICAgIHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KFxuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLnNvcnRpbmcuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBzb3J0QWxsb3dlZC5oYXMoXG4gICAgICAgICAgdGhpcy5idWlsZFNvcnRTZWxlY3Rpb25JZChpdGVtLmNvbHVtbiwgaXRlbS5mdW5jdGlvbk5hbWUgPz8gRU1QVFlfVkFMVUUpXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICAoaXRlbSkgPT4gYCR7aXRlbS5jb2x1bW59fCR7aXRlbS5mdW5jdGlvbk5hbWUgPz8gRU1QVFlfVkFMVUV9fCR7aXRlbS5kaXJlY3Rpb259YFxuICAgICk7XG4gICAgaWYgKHNlbGVjdGVkU291cmNlcy5sZW5ndGggPCAyKSB7XG4gICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zID0gdGhpcy5kZWR1cGxpY2F0ZUJ5S2V5KFxuICAgICAgICB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuam9pbnMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gYXZhaWxhYmxlQ29sdW1uTWFwLmdldChpdGVtLnNvdXJjZUNvbHVtbik7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYXZhaWxhYmxlQ29sdW1uTWFwLmdldChpdGVtLnRhcmdldENvbHVtbik7XG4gICAgICAgICAgcmV0dXJuICEhc291cmNlICYmICEhdGFyZ2V0ICYmIHNvdXJjZS50YWJsZSAhPT0gdGFyZ2V0LnRhYmxlO1xuICAgICAgICB9KSxcbiAgICAgICAgKGl0ZW0pID0+IGAke2l0ZW0uc291cmNlQ29sdW1ufXwke2l0ZW0udGFyZ2V0Q29sdW1ufXwke2l0ZW0ub3BlcmF0b3J9YFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMgPSB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVycy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS52YWx1ZVR5cGUgPT09IEZJTFRFUl9NT0RFX0RPTUFJTikge1xuICAgICAgICAgIHJldHVybiAhIWl0ZW0uZG9tYWluRXhwcmVzc2lvbj8udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhdmFpbGFibGVDb2x1bW5NYXAuaGFzKGl0ZW0uY29sdW1uKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVByZXZpZXdDb2x1bW5zKCk6IFByZXZpZXdDb2x1bW5MaWtlW10ge1xuICAgIGNvbnN0IHByZXZpZXdDb2x1bW5zID0gKFxuICAgICAgKHRoaXMuY29uZmlnLnByZXZpZXc/LmNvbHVtbnMgPz8gW10pIGFzIFByZXZpZXdDb2x1bW5MaWtlW11cbiAgICApXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0/LmZpZWxkKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgZmllbGQ6IGl0ZW0uZmllbGQsXG4gICAgICAgIGhlYWRlcjogaXRlbS5oZWFkZXIgPz8gaXRlbS5maWVsZCxcbiAgICAgICAgdHlwZTogaXRlbS50eXBlLFxuICAgICAgfSkpO1xuICAgIGlmIChwcmV2aWV3Q29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBwcmV2aWV3Q29sdW1ucztcbiAgICB9XG4gICAgY29uc3QgZ2VuZXJhdGVkQ29sdW1ucyA9IFtcbiAgICAgIC4uLnRoaXMubm9ybWFsaXplZEZpZWxkcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGZpZWxkOlxuICAgICAgICAgIGl0ZW0uZnVuY3Rpb24/LmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUlxuICAgICAgICAgIGl0ZW0uYWxpYXM/LnRyaW0oKSB8fCAvLyBOT1NPTkFSXG4gICAgICAgICAgaXRlbS5jb2x1bW4sXG4gICAgICAgIGhlYWRlcjpcbiAgICAgICAgICBpdGVtLmZ1bmN0aW9uPy5hbGlhcz8udHJpbSgpIHx8IC8vIE5PU09OQVJcbiAgICAgICAgICBpdGVtLmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUlxuICAgICAgICAgIChpdGVtLmZ1bmN0aW9uXG4gICAgICAgICAgICA/IGAke3RoaXMucmVzb2x2ZUZ1bmN0aW9uTGFiZWwoaXRlbS5mdW5jdGlvbi5mdW5jdGlvbk5hbWUpfSAke3RoaXMucmVzb2x2ZUNvbHVtbkxhYmVsKGl0ZW0uY29sdW1uKX1gXG4gICAgICAgICAgICA6IHRoaXMucmVzb2x2ZUNvbHVtbkxhYmVsKGl0ZW0uY29sdW1uKSksXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgfSkpLFxuICAgIF07XG4gICAgcmV0dXJuIHRoaXMuZGVkdXBsaWNhdGVCeUtleShnZW5lcmF0ZWRDb2x1bW5zLCAoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZFRhYmxlU2VsZWN0aW9uUm93cyhcbiAgICBzZWxlY3RlZElkczogc3RyaW5nW10sXG4gICAgc2VhcmNoOiBzdHJpbmdcbiAgKTogU2VsZWN0aW9uUm93W10ge1xuICAgIHJldHVybiAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS50YWJsZXMgPz8gW10pXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlVGFibGVEaXNwbGF5UGFydHMoaXRlbS52YWx1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgbmFtZTogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgICBkYkxhYmVsOiBwYXJ0cy5kYkxhYmVsLFxuICAgICAgICAgIHRhYmxlTGFiZWw6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgICAgcGF0aFR5cGU6IFwidGFibGVcIiBhcyBjb25zdCxcbiAgICAgICAgICBwcmVmaXg6IHBhcnRzLmRiTGFiZWwsXG4gICAgICAgICAgbWV0YTogaXRlbS5kZXNjcmlwdGlvbiB8fCBpdGVtLmRpc3BsYXlOYW1lIHx8IEVNUFRZX1ZBTFVFLCAvLyBOT1NPTkFSXG4gICAgICAgICAgbm90ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5jbHVkZXMoaXRlbS52YWx1ZSksXG4gICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIHRoaXMubWF0Y2hlc1NlYXJjaChbaXRlbS5wcmVmaXggPz8gRU1QVFlfVkFMVUUsIGl0ZW0ubmFtZSwgaXRlbS5tZXRhLCBpdGVtLm5vdGUgPz8gRU1QVFlfVkFMVUVdLCBzZWFyY2gpXG4gICAgICApO1xuICB9XG4gIHByaXZhdGUgYnVpbGRDb2x1bW5TZWxlY3Rpb25Sb3dzKFxuICAgIGl0ZW1zOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSxcbiAgICBzZWxlY3RlZElkczogc3RyaW5nW10sXG4gICAgc2VhcmNoOiBzdHJpbmcsXG4gICAgbXVsdGlwbGUgPSB0cnVlXG4gICk6IFNlbGVjdGlvblJvd1tdIHtcbiAgICByZXR1cm4gaXRlbXNcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgcGFydHMgPSB0aGlzLnJlc29sdmVDb2x1bW5QYXJ0cyhpdGVtLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogaXRlbS52YWx1ZSxcbiAgICAgICAgICBuYW1lOiBwYXJ0cy5maWVsZExhYmVsLFxuICAgICAgICAgIGRiTGFiZWw6IHBhcnRzLmRiTGFiZWwsXG4gICAgICAgICAgdGFibGVMYWJlbDogcGFydHMudGFibGVMYWJlbCxcbiAgICAgICAgICBwYXRoVHlwZTogXCJjb2x1bW5cIiBhcyBjb25zdCxcbiAgICAgICAgICBwcmVmaXg6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgICAgbWV0YTogaXRlbS5kYXRhVHlwZSxcbiAgICAgICAgICBub3RlOiBpdGVtLmZ1bGxOYW1lLFxuICAgICAgICAgIHNlbGVjdGVkOiBtdWx0aXBsZVxuICAgICAgICAgICAgPyBzZWxlY3RlZElkcy5pbmNsdWRlcyhpdGVtLnZhbHVlKVxuICAgICAgICAgICAgOiBzZWxlY3RlZElkc1swXSA9PT0gaXRlbS52YWx1ZSxcbiAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgdGhpcy5tYXRjaGVzU2VhcmNoKFtpdGVtLnByZWZpeCA/PyBFTVBUWV9WQUxVRSwgaXRlbS5uYW1lLCBpdGVtLm1ldGEsIGl0ZW0ubm90ZSA/PyBFTVBUWV9WQUxVRV0sIHNlYXJjaClcbiAgICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZENvbHVtblBpY2tsaXN0SXRlbXMoXG4gICAgaXRlbXM6IER5bmFtaWNWaWV3QnVpbGRlckNvbHVtbk9wdGlvbltdXG4gICk6IENvbHVtblBpY2tsaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBwaWNrbGlzdElkID0gdGhpcy5yZXNvbHZlQ29sdW1uUGlja2xpc3RJZChpdGVtLnZhbHVlKTtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlQ29sdW1uUGFydHMoaXRlbS52YWx1ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwaWNrbGlzdElkID8/IDAsXG4gICAgICAgIHRpdGxlOiBgJHtwYXJ0cy50YWJsZUxhYmVsfS4ke3BhcnRzLmZpZWxkTGFiZWx9YCxcbiAgICAgICAgdGl0bGVQcmVmaXg6IHBhcnRzLnRhYmxlTGFiZWwsXG4gICAgICAgIHRpdGxlU3VmZml4OiBwYXJ0cy5maWVsZExhYmVsLFxuICAgICAgICB0aXRsZVByZWZpeENvbG9yOiBWSVNVQUxfU1FMX1RBQkxFX0NPTE9SLFxuICAgICAgICB0aXRsZVN1ZmZpeENvbG9yOiBWSVNVQUxfU1FMX0ZJRUxEX0NPTE9SLFxuICAgICAgICBiYWRnZTogaXRlbS5kYXRhVHlwZSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgICAgYmFkZ2VDb2xvcjogUElDS0xJU1RfREFUQV9UWVBFX0JBREdFX0NPTE9SLFxuICAgICAgICBjb2x1bW46IGl0ZW0udmFsdWUsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgYnVpbGRUYWJsZVBpY2tsaXN0SXRlbXMoXG4gICAgaXRlbXM6IER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uW11cbiAgKTogVGFibGVQaWNrbGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5yZXNvbHZlVGFibGVEaXNwbGF5UGFydHMoaXRlbS52YWx1ZSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpbmRleCArIDEsXG4gICAgICAgIHRpdGxlOiBgJHtwYXJ0cy5kYkxhYmVsfS4ke3BhcnRzLnRhYmxlTGFiZWx9YCxcbiAgICAgICAgdGl0bGVQcmVmaXg6IHBhcnRzLmRiTGFiZWwsXG4gICAgICAgIHRpdGxlU3VmZml4OiBwYXJ0cy50YWJsZUxhYmVsLFxuICAgICAgICB0aXRsZVByZWZpeENvbG9yOiBWSVNVQUxfU1FMX1RBQkxFX0NPTE9SLFxuICAgICAgICB0aXRsZVN1ZmZpeENvbG9yOiBWSVNVQUxfU1FMX0ZJRUxEX0NPTE9SLFxuICAgICAgICBiYWRnZTpcbiAgICAgICAgICBpdGVtLmRpc3BsYXlOYW1lICYmIGl0ZW0uZGlzcGxheU5hbWUgIT09IHBhcnRzLnRhYmxlTGFiZWxcbiAgICAgICAgICAgID8gaXRlbS5kaXNwbGF5TmFtZVxuICAgICAgICAgICAgOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgYmFkZ2VDb2xvcjogUElDS0xJU1RfREFUQV9UWVBFX0JBREdFX0NPTE9SLFxuICAgICAgICB0YWJsZTogaXRlbS52YWx1ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlQ29sdW1uc0Zyb21QaWNrbGlzdElkcyhpZHM6IG51bWJlcltdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBpZHNcbiAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLnJlc29sdmVDb2x1bW5QaWNrbGlzdENvbHVtbihpZCkpXG4gICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBzdHJpbmcgPT4gISFpdGVtKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVMYXN0Q29sdW1uRnJvbVBpY2tsaXN0SWRzKGlkczogbnVtYmVyW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5yZXNvbHZlQ29sdW1uc0Zyb21QaWNrbGlzdElkcyhpZHMpO1xuICAgIHJldHVybiBjb2x1bW5zLmF0KC0xKSA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVRhYmxlUGlja2xpc3RJZCh0YWJsZVZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgICBjb25zdCBpdGVtSW5kZXggPSAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS50YWJsZXMgPz8gW10pLmZpbmRJbmRleChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0YWJsZVZhbHVlXG4gICAgKTtcblxuICAgIHJldHVybiBpdGVtSW5kZXggPj0gMCA/IGl0ZW1JbmRleCArIDEgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVRhYmxlUGlja2xpc3RUYWJsZShpZDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlbSA9ICh0aGlzLmNvbmZpZy5hdmFpbGFibGVEYXRhLnRhYmxlcyA/PyBbXSkuZmluZChcbiAgICAgIChfZW50cnksIGluZGV4KSA9PiBpbmRleCArIDEgPT09IGlkXG4gICAgKTtcblxuICAgIHJldHVybiBpdGVtPy52YWx1ZSA/PyBudWxsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZVRhYmxlc0Zyb21QaWNrbGlzdElkcyhpZHM6IG51bWJlcltdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBpZHNcbiAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLnJlc29sdmVUYWJsZVBpY2tsaXN0VGFibGUoaWQpKVxuICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+ICEhaXRlbSk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlQ29sdW1uUGlja2xpc3RJZChjb2x1bW46IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuYXZhaWxhYmxlQ29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gY29sdW1uXG4gICAgKTtcblxuICAgIHJldHVybiBpdGVtSW5kZXggPj0gMCA/IGl0ZW1JbmRleCArIDEgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtblBpY2tsaXN0Q29sdW1uKGlkOiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5hdmFpbGFibGVDb2x1bW5zW2lkIC0gMV07XG4gICAgcmV0dXJuIGl0ZW0/LnZhbHVlID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBtYXRjaGVzU2VhcmNoKHZhbHVlczogc3RyaW5nW10sIHNlYXJjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IHRoaXMubm9ybWFsaXplKHNlYXJjaCk7XG4gICAgaWYgKCFub3JtYWxpemVkU2VhcmNoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcy5zb21lKCh2YWx1ZSkgPT5cbiAgICAgIHRoaXMubm9ybWFsaXplKHZhbHVlKS5pbmNsdWRlcyhub3JtYWxpemVkU2VhcmNoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBub3JtYWxpemUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh2YWx1ZSA/PyBcIlwiKVxuICAgICAgLm5vcm1hbGl6ZShcIk5GRFwiKVxuICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnRyaW0oKTtcbiAgfVxuICBwcml2YXRlIHRvZ2dsZU11bHRpcGxlVmFsdWUodmFsdWVzOiBzdHJpbmdbXSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgPyB2YWx1ZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSB2YWx1ZSlcbiAgICAgIDogWy4uLnZhbHVlcywgdmFsdWVdO1xuICB9XG4gIHByaXZhdGUgZmlsdGVyRnVuY3Rpb25TZWxlY3RhYmxlQ29sdW1ucyhcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZ1xuICApOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25bXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEJ5ID0gbmV3IFNldCh0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZ3JvdXBCeSk7XG4gICAgY29uc3QgYWxsID0gdGhpcy5hdmFpbGFibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiAhc2VsZWN0ZWRHcm91cEJ5LmhhcyhpdGVtLnZhbHVlKVxuICAgICk7XG4gICAgaWYgKGZ1bmN0aW9uTmFtZSA9PT0gXCJjb3VudFwiKSB7XG4gICAgICByZXR1cm4gYWxsO1xuICAgIH1cbiAgICBpZiAoW1wic3VtXCIsIFwiYXZnXCIsIFwibWluXCIsIFwibWF4XCJdLmluY2x1ZGVzKGZ1bmN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuaXNOdW1lcmljVHlwZShpdGVtLmRhdGFUeXBlKSk7XG4gICAgfVxuICAgIHJldHVybiBhbGw7XG4gIH1cbiAgcHJpdmF0ZSBmaWx0ZXJPcGVyYXRvcnNGb3JDb2x1bW4oXG4gICAgY29sdW1uOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb25cbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRhVHlwZSA9IChjb2x1bW4uZGF0YVR5cGUgPz8gRU1QVFlfVkFMVUUpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAobm9ybWFsaXplZERhdGFUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIFtcIkVRVUFMXCIsIFwiTk9UX0VRVUFMXCIsIFwiRU1QVFlcIiwgXCJOT1RfRU1QVFlcIl07XG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZWREYXRhVHlwZSA9PT0gXCJkYXRldGltZVwiIHx8IG5vcm1hbGl6ZWREYXRhVHlwZSA9PT0gXCJ0aW1lXCIgfHwgbm9ybWFsaXplZERhdGFUeXBlID09PSBcInRpbWVzdGFtcFwiKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcIkVRVUFMXCIsXG4gICAgICAgIFwiTk9UX0VRVUFMXCIsXG4gICAgICAgIFwiR1JFQVRFUl9USEFOXCIsXG4gICAgICAgIFwiR1JFQVRFUl9USEFOX09SX0VRVUFMXCIsXG4gICAgICAgIFwiTEVTU19USEFOXCIsXG4gICAgICAgIFwiTEVTU19USEFOX09SX0VRVUFMXCIsXG4gICAgICAgIFwiQkVUV0VFTlwiLFxuICAgICAgICBcIkVNUFRZXCIsXG4gICAgICAgIFwiTk9UX0VNUFRZXCIsXG4gICAgICBdO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuaXNOdW1lcmljVHlwZShjb2x1bW4uZGF0YVR5cGUpIHx8XG4gICAgICBub3JtYWxpemVkRGF0YVR5cGUgPT09IFwiZGF0ZVwiXG4gICAgKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcIkVRVUFMXCIsXG4gICAgICAgIFwiTk9UX0VRVUFMXCIsXG4gICAgICAgIFwiR1JFQVRFUl9USEFOXCIsXG4gICAgICAgIFwiR1JFQVRFUl9USEFOX09SX0VRVUFMXCIsXG4gICAgICAgIFwiTEVTU19USEFOXCIsXG4gICAgICAgIFwiTEVTU19USEFOX09SX0VRVUFMXCIsXG4gICAgICAgIFwiQkVUV0VFTlwiLFxuICAgICAgICBcIklOXCIsXG4gICAgICAgIFwiRU1QVFlcIixcbiAgICAgICAgXCJOT1RfRU1QVFlcIixcbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICBcIkVRVUFMXCIsXG4gICAgICBcIk5PVF9FUVVBTFwiLFxuICAgICAgXCJDT05UQUlOU1wiLFxuICAgICAgXCJET0VTX05PVF9DT05UQUlOXCIsXG4gICAgICBcIlNUQVJUU19XSVRIXCIsXG4gICAgICBcIkVORFNfV0lUSFwiLFxuICAgICAgXCJJTlwiLFxuICAgICAgXCJFTVBUWVwiLFxuICAgICAgXCJOT1RfRU1QVFlcIixcbiAgICBdO1xuICB9XG4gIHByaXZhdGUgaXNOdW1lcmljVHlwZSh2YWx1ZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBbXG4gICAgICBcIm51bWJlclwiLFxuICAgICAgXCJpbnRlZ2VyXCIsXG4gICAgICBcImRlY2ltYWxcIixcbiAgICAgIFwiZmxvYXRcIixcbiAgICAgIFwiZG91YmxlXCIsXG4gICAgICBcImxvbmdcIixcbiAgICAgIFwic2hvcnRcIixcbiAgICBdLmluY2x1ZGVzKCh2YWx1ZSA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBwcml2YXRlIGlzRGF0ZVR5cGUodmFsdWU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gW1wiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwidGltZXN0YW1wXCIsIFwidGltZVwiXS5pbmNsdWRlcyhcbiAgICAgICh2YWx1ZSA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZU9wdGlvbihcbiAgICB2YWx1ZTogc3RyaW5nXG4gICk6IER5bmFtaWNWaWV3QnVpbGRlclRhYmxlT3B0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmF2YWlsYWJsZURhdGEudGFibGVzID8/IFtdKS5maW5kKFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVDb2x1bW5PcHRpb24oXG4gICAgdmFsdWU6IHN0cmluZ1xuICApOiBEeW5hbWljVmlld0J1aWxkZXJDb2x1bW5PcHRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAodGhpcy5jb25maWcuYXZhaWxhYmxlRGF0YS5jb2x1bW5zID8/IFtdKS5maW5kKFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZUxhYmVsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVUYWJsZU9wdGlvbih2YWx1ZSk/LnRleHQgPz8gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlVGFibGVEaXNwbGF5UGFydHModmFsdWU6IHN0cmluZyk6IFRhYmxlRGlzcGxheVBhcnRzIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucmVzb2x2ZVRhYmxlT3B0aW9uKHZhbHVlKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICBjb25zdCByYXdQYXJ0cyA9IHZhbHVlLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYkxhYmVsOiByYXdQYXJ0cy5sZW5ndGggPiAxID8gcmF3UGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oXCIuXCIpIDogXCJkYlwiLFxuICAgICAgICB0YWJsZUxhYmVsOiByYXdQYXJ0cy5hdCgtMSkgPz8gdmFsdWUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGJMYWJlbDogdGFibGUuc2NoZW1hIHx8IFwiZGJcIiwgLy8gTk9TT05BUlxuICAgICAgdGFibGVMYWJlbDogdGFibGUudmFsdWUsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVUYWJsZVBhdGgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnJlc29sdmVUYWJsZURpc3BsYXlQYXJ0cyh2YWx1ZSk7XG4gICAgcmV0dXJuIHBhcnRzLmRiTGFiZWwgPyBgJHtwYXJ0cy5kYkxhYmVsfS4ke3BhcnRzLnRhYmxlTGFiZWx9YCA6IHBhcnRzLnRhYmxlTGFiZWw7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlQ29sdW1uUGFydHMoIC8vIE5PU09OQVIgLSBjb21wbGV4aXR5OiBleHRyYWN0aW9uIHdvdWxkIHJpc2sgYmVoYXZpb3IgY2hhbmdlXG4gICAgdmFsdWU6IHN0cmluZyB8IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkXG4gICk6IENvbHVtbkRpc3BsYXlQYXJ0cyB7XG4gICAgY29uc3QgY29sdW1uVmFsdWUgPVxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS5jb2x1bW4gPz8gRU1QVFlfVkFMVUU7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKGNvbHVtblZhbHVlKTtcbiAgICBpZiAoIWNvbHVtbikge1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSBgJHtjb2x1bW5WYWx1ZX1gLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYkxhYmVsOiBmYWxsYmFjay5sZW5ndGggPj0gTUlOX1BBUlRTX0ZPUl9EQiA/IGZhbGxiYWNrLnNsaWNlKDAsIERCX1BBUlRTX09GRlNFVCkuam9pbihcIi5cIikgOiBFTVBUWV9WQUxVRSxcbiAgICAgICAgdGFibGVMYWJlbDogZmFsbGJhY2subGVuZ3RoID49IE1JTl9QQVJUU19GT1JfVEFCTEUgPyBmYWxsYmFja1tmYWxsYmFjay5sZW5ndGggLSBNSU5fUEFSVFNfRk9SX1RBQkxFXSA6IGNvbHVtblZhbHVlLFxuICAgICAgICBmaWVsZExhYmVsOiBmYWxsYmFjay5hdCgtMSkgPz8gY29sdW1uVmFsdWUsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IChjb2x1bW4uZnVsbE5hbWUgPz8gY29sdW1uVmFsdWUpLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRiTGFiZWw6IHBhcnRzLmxlbmd0aCA+PSBNSU5fUEFSVFNfRk9SX0RCID8gcGFydHMuc2xpY2UoMCwgREJfUEFSVFNfT0ZGU0VUKS5qb2luKFwiLlwiKSA6IEVNUFRZX1ZBTFVFLFxuICAgICAgdGFibGVMYWJlbDogcGFydHMubGVuZ3RoID49IE1JTl9QQVJUU19GT1JfVEFCTEUgPyBwYXJ0c1twYXJ0cy5sZW5ndGggLSBNSU5fUEFSVFNfRk9SX1RBQkxFXSA6IHRoaXMucmVzb2x2ZVRhYmxlUGF0aChjb2x1bW4udGFibGUpLFxuICAgICAgZmllbGRMYWJlbDogcGFydHMuYXQoLTEpID8/IGNvbHVtbi52YWx1ZSxcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtbkxhYmVsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVTb3J0RHJhZnRMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnJlc29sdmVDb2x1bW5QYXRoKHRoaXMuc29ydERyYWZ0LmNvbHVtbik7XG4gICAgaWYgKCF0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5yZXNvbHZlRnVuY3Rpb25MYWJlbCh0aGlzLnNvcnREcmFmdC5mdW5jdGlvbk5hbWUpfSgke2Jhc2V9KWA7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZFNvcnRTZWxlY3Rpb25JZChcbiAgICBjb2x1bW46IHN0cmluZyxcbiAgICBmdW5jdGlvbk5hbWUgPSBFTVBUWV9WQUxVRVxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjb2x1bW59Ojoke2Z1bmN0aW9uTmFtZSB8fCBFTVBUWV9TT1JUX0ZVTkNUSU9OfWA7XG4gIH1cbiAgcHJpdmF0ZSBwYXJzZVNvcnRTZWxlY3Rpb25JZChcbiAgICBzZWxlY3Rpb25JZDogc3RyaW5nXG4gICk6IHsgY29sdW1uOiBzdHJpbmc7IGZ1bmN0aW9uTmFtZTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IFtjb2x1bW4sIGZ1bmN0aW9uTmFtZSA9IEVNUFRZX1NPUlRfRlVOQ1RJT05dID0gc2VsZWN0aW9uSWQuc3BsaXQoXCI6OlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uLFxuICAgICAgZnVuY3Rpb25OYW1lOlxuICAgICAgICBmdW5jdGlvbk5hbWUgPT09IEVNUFRZX1NPUlRfRlVOQ1RJT04gPyBFTVBUWV9WQUxVRSA6IGZ1bmN0aW9uTmFtZSxcbiAgICB9O1xuICB9XG4gIHJlc29sdmVDb2x1bW5QYXRoKHZhbHVlOiBzdHJpbmcgfCBEeW5hbWljVmlld0J1aWxkZXJGaWVsZCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uVmFsdWUgPVxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS5jb2x1bW4gPz8gRU1QVFlfVkFMVUU7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKGNvbHVtblZhbHVlKTtcbiAgICBpZiAoIWNvbHVtbikge1xuICAgICAgcmV0dXJuIGNvbHVtblZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IChjb2x1bW4uZnVsbE5hbWUgPz8gY29sdW1uVmFsdWUpLnNwbGl0KFwiLlwiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+PSBNSU5fUEFSVFNfRk9SX1RBQkxFID8gcGFydHMuc2xpY2UoREJfUEFSVFNfT0ZGU0VUKS5qb2luKFwiLlwiKSA6IGNvbHVtbi5mdWxsTmFtZTtcbiAgfVxuICBwcml2YXRlIG5vcm1hbGl6ZUdlbmVyYXRlZEZpZWxkKFxuICAgIHZhbHVlOiBzdHJpbmcgfCBEeW5hbWljVmlld0J1aWxkZXJGaWVsZFxuICApOiBEeW5hbWljVmlld0J1aWxkZXJGaWVsZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHsgY29sdW1uOiB2YWx1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uOiB2YWx1ZS5jb2x1bW4sXG4gICAgICBhbGlhczogdmFsdWUuYWxpYXM/LnRyaW0oKSA/PyBFTVBUWV9WQUxVRSxcbiAgICAgIHdpZHRoOiB2YWx1ZS53aWR0aD8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgZnVuY3Rpb246IHZhbHVlLmZ1bmN0aW9uXG4gICAgICAgID8ge1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogdmFsdWUuZnVuY3Rpb24uZnVuY3Rpb25OYW1lPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgICAgYWxpYXM6IHZhbHVlLmZ1bmN0aW9uLmFsaWFzPy50cmltKCkgPz8gRU1QVFlfVkFMVUUsXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkRmllbGRFbnRyaWVzKCk6IEFycmF5PFxuICAgIER5bmFtaWNWaWV3QnVpbGRlckZpZWxkICYgeyBzb3VyY2VJbmRleDogbnVtYmVyIH1cbiAgPiB7XG4gICAgY29uc3QgZW50cmllcyA9IHRoaXMubm9ybWFsaXplZEZpZWxkcy5tYXAoKGl0ZW0sIHNvdXJjZUluZGV4KSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIHNvdXJjZUluZGV4LFxuICAgIH0pKTtcbiAgICBjb25zdCBwcmV2aWV3SW5kZXhlcyA9IHRoaXMuZ2V0RmllbGRQcmV2aWV3U291cmNlSW5kZXhlcygpO1xuICAgIHJldHVybiBwcmV2aWV3SW5kZXhlcy5tYXAoKGluZGV4KSA9PiBlbnRyaWVzW2luZGV4XSkuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG4gIHByaXZhdGUgZ2V0RmllbGRQcmV2aWV3U291cmNlSW5kZXhlcygpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgYmFzZUluZGV4ZXMgPSB0aGlzLm5vcm1hbGl6ZWRGaWVsZHMubWFwKChfLCBpbmRleCkgPT4gaW5kZXgpO1xuICAgIGlmICh0aGlzLmRyYWdnaW5nRmllbGRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGJhc2VJbmRleGVzO1xuICAgIH1cbiAgICBjb25zdCByZW1haW5pbmdJbmRleGVzID0gYmFzZUluZGV4ZXMuZmlsdGVyKFxuICAgICAgKGluZGV4KSA9PiBpbmRleCAhPT0gdGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXhcbiAgICApO1xuICAgIGNvbnN0IGluc2VydGlvbkluZGV4ID1cbiAgICAgIHRoaXMuZHJhZ1ByZXZpZXdJbmRleCA9PT0gbnVsbFxuICAgICAgICA/IGJhc2VJbmRleGVzLmluZGV4T2YodGhpcy5kcmFnZ2luZ0ZpZWxkSW5kZXgpXG4gICAgICAgIDogTWF0aC5taW4odGhpcy5kcmFnUHJldmlld0luZGV4LCByZW1haW5pbmdJbmRleGVzLmxlbmd0aCk7XG4gICAgcmVtYWluaW5nSW5kZXhlcy5zcGxpY2UoaW5zZXJ0aW9uSW5kZXgsIDAsIHRoaXMuZHJhZ2dpbmdGaWVsZEluZGV4KTtcbiAgICByZXR1cm4gcmVtYWluaW5nSW5kZXhlcztcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGdW5jdGlvbkxhYmVsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVPcHRpb25MYWJlbCh2YWx1ZSwgdGhpcy5mdW5jdGlvbk9wdGlvbnMpO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUpvaW5PcGVyYXRvckxhYmVsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVPcHRpb25MYWJlbCh2YWx1ZSwgdGhpcy5qb2luT3BlcmF0b3JPcHRpb25zKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVKb2luT3BlcmF0b3JPcHRpb25UZXh0KG9wdGlvbjogRHluYW1pY1ZpZXdCdWlsZGVyT3B0aW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBmYWxsYmFjayA9IEpPSU5fT1BFUkFUT1JfTEFCRUxTW29wdGlvbi52YWx1ZV07XG4gICAgY29uc3QgaGFzUmVhZGFibGVUZXh0ID0gL1tBLVphLXrDgC3Dv10vLnRlc3Qob3B0aW9uLnRleHQpO1xuXG4gICAgaWYgKCFmYWxsYmFjayB8fCBoYXNSZWFkYWJsZVRleHQpIHtcbiAgICAgIHJldHVybiBvcHRpb24udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LiR7ZmFsbGJhY2sua2V5fWAsXG4gICAgICBmYWxsYmFjay5mYWxsYmFja1xuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmlsdGVyT3BlcmF0b3JMYWJlbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXhcbiAgICAgIH0uZmlsdGVycy5vcGVyYXRvcnMuJHt2YWx1ZS50b0xvd2VyQ2FzZSgpfWAsXG4gICAgICB0aGlzLmh1bWFuaXplS2V5KHZhbHVlKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlT3B0aW9uTGFiZWwoXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBEeW5hbWljVmlld0J1aWxkZXJPcHRpb25bXVxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBvcHRpb25zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKT8udGV4dCA/PyB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJEaXNwbGF5VmFsdWUoZmlsdGVyOiBEeW5hbWljVmlld0J1aWxkZXJGaWx0ZXIpOiBzdHJpbmcgeyAvLyBOT1NPTkFSIC0gY29tcGxleGl0eTogZXh0cmFjdGlvbiB3b3VsZCByaXNrIGJlaGF2aW9yIGNoYW5nZVxuICAgIGlmIChmaWx0ZXIudmFsdWVUeXBlID09PSBGSUxURVJfTU9ERV9ET01BSU4pIHtcbiAgICAgIHJldHVybiBmaWx0ZXIuZG9tYWluRXhwcmVzc2lvbiA/PyBFTVBUWV9WQUxVRTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiBgOiR7ZmlsdGVyLnBhcmFtZXRlck5hbWUgPz8gRU1QVFlfVkFMVUV9YDtcbiAgICB9XG4gICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gXCJJTlwiKSB7XG4gICAgICByZXR1cm4gKGZpbHRlci52YWx1ZXMgPz8gW10pLmpvaW4oXCIsIFwiKTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gXCJCRVRXRUVOXCIpIHtcbiAgICAgIHJldHVybiBgJHtmaWx0ZXIudmFsdWVzPy5bMF0gPz8gRU1QVFlfVkFMVUV9IC0gJHtmaWx0ZXIudmFsdWVzPy5bMV0gPz8gRU1QVFlfVkFMVUVcbiAgICAgICAgfWA7XG4gICAgfVxuICAgIGlmIChbXCJFTVBUWVwiLCBcIk5PVF9FTVBUWVwiXS5pbmNsdWRlcyhmaWx0ZXIub3BlcmF0b3IpKSB7XG4gICAgICByZXR1cm4gXCItXCI7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXIudmFsdWUgPz8gRU1QVFlfVkFMVUU7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEdlbmVyYXRlZFNxbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNvdXJjZXMgPSB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc291cmNlcztcbiAgICBpZiAoIXNvdXJjZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gRU1QVFlfVkFMVUU7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdFBhcnRzID0gdGhpcy5ub3JtYWxpemVkRmllbGRzXG4gICAgICAubWFwKChmaWVsZCkgPT4gdGhpcy5yZXNvbHZlRmllbGRTcWwoZmllbGQpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCBzcWwgPSBbXG4gICAgICBcIlNFTEVDVFwiLFxuICAgICAgYCAgJHsoc2VsZWN0UGFydHMubGVuZ3RoID8gc2VsZWN0UGFydHMgOiBbXCIqXCJdKS5qb2luKFwiLFxcbiAgXCIpfWAsXG4gICAgICBgRlJPTSAke3RoaXMucmVzb2x2ZVNvdXJjZVNxbChzb3VyY2VzWzBdKX1gLFxuICAgICAgLi4udGhpcy5jb25maWcuZ2VuZXJhdGVkLmpvaW5zLm1hcCgoaXRlbSkgPT4gdGhpcy5yZXNvbHZlSm9pblNxbChpdGVtKSksXG4gICAgICAuLi50aGlzLmJ1aWxkV2hlcmVTcWwoKSxcbiAgICAgIC4uLnRoaXMuYnVpbGRHcm91cEJ5U3FsKCksXG4gICAgICAuLi50aGlzLmJ1aWxkT3JkZXJCeVNxbCgpLFxuICAgIF07XG4gICAgcmV0dXJuIHNxbC5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHByaXZhdGUgYnVpbGRXaGVyZVNxbCgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbnMgPSB0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuZmlsdGVyc1xuICAgICAgLm1hcCgoZmlsdGVyLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjb25uZWN0b3IgPSBpbmRleCA9PT0gMCA/IFwiV0hFUkVcIiA6IGZpbHRlci5jb25uZWN0b3I7XG4gICAgICAgIHJldHVybiBgICAke2Nvbm5lY3Rvcn0gJHt0aGlzLnJlc29sdmVGaWx0ZXJTcWwoZmlsdGVyKX1gO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmVuZHNXaXRoKEVNUFRZX1ZBTFVFKSk7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25zLmxlbmd0aCA/IGV4cHJlc3Npb25zIDogW107XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEdyb3VwQnlTcWwoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5jb25maWcuZ2VuZXJhdGVkLmdyb3VwQnkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICBcIkdST1VQIEJZXCIsXG4gICAgICBgICAke3RoaXMuY29uZmlnLmdlbmVyYXRlZC5ncm91cEJ5XG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHRoaXMucmVzb2x2ZUNvbHVtblNxbChpdGVtKSlcbiAgICAgICAgLmpvaW4oXCIsXFxuICBcIil9YCxcbiAgICBdO1xuICB9XG4gIHByaXZhdGUgYnVpbGRPcmRlckJ5U3FsKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3J0aW5nLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgXCJPUkRFUiBCWVwiLFxuICAgICAgYCAgJHt0aGlzLmNvbmZpZy5nZW5lcmF0ZWQuc29ydGluZ1xuICAgICAgICAubWFwKChpdGVtKSA9PiBgJHt0aGlzLnJlc29sdmVTb3J0U3FsKGl0ZW0pfSAke2l0ZW0uZGlyZWN0aW9ufWApXG4gICAgICAgIC5qb2luKFwiLFxcbiAgXCIpfWAsXG4gICAgXTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVTb3VyY2VTcWwoc291cmNlOiBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbiB8IHtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIGFsaWFzOiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhYmxlID0gXCJ0YWJsZVwiIGluIHNvdXJjZSA/IHRoaXMucmVzb2x2ZVRhYmxlT3B0aW9uKHNvdXJjZS50YWJsZSkgOiBzb3VyY2U7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgcmV0dXJuIEVNUFRZX1ZBTFVFO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2VBbGlhcyA9IFwidGFibGVcIiBpbiBzb3VyY2UgPyBzb3VyY2UuYWxpYXMgOiBFTVBUWV9WQUxVRTtcbiAgICBjb25zdCBmdWxsTmFtZSA9IHRhYmxlLnNjaGVtYSA/IGAke3RhYmxlLnNjaGVtYX0uJHt0YWJsZS52YWx1ZX1gIDogdGFibGUudmFsdWU7XG4gICAgcmV0dXJuIHNvdXJjZUFsaWFzID8gYCR7ZnVsbE5hbWV9ICR7c291cmNlQWxpYXN9YCA6IGZ1bGxOYW1lO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUpvaW5TcWwoaXRlbTogRHluYW1pY1ZpZXdCdWlsZGVySm9pbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBKT0lOICR7dGhpcy5yZXNvbHZlSm9pbmVkVGFibGVTcWwoXG4gICAgICBpdGVtXG4gICAgKX0gT04gJHt0aGlzLnJlc29sdmVDb2x1bW5TcWwoaXRlbS5zb3VyY2VDb2x1bW4pfSAke3RoaXMucmVzb2x2ZUpvaW5PcGVyYXRvclNxbChcbiAgICAgIGl0ZW0ub3BlcmF0b3JcbiAgICApfSAke3RoaXMucmVzb2x2ZUNvbHVtblNxbChpdGVtLnRhcmdldENvbHVtbil9YDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVKb2luZWRUYWJsZVNxbChpdGVtOiBEeW5hbWljVmlld0J1aWxkZXJKb2luKTogc3RyaW5nIHtcbiAgICBjb25zdCB0YXJnZXRDb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24oaXRlbS50YXJnZXRDb2x1bW4pO1xuICAgIGlmICghdGFyZ2V0Q29sdW1uKSB7XG4gICAgICByZXR1cm4gRU1QVFlfVkFMVUU7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLmZpbmQoXG4gICAgICAoZW50cnkpID0+IGVudHJ5LnRhYmxlID09PSB0YXJnZXRDb2x1bW4udGFibGVcbiAgICApO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICByZXR1cm4gRU1QVFlfVkFMVUU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc29sdmVTb3VyY2VTcWwoc291cmNlKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVDb2x1bW5TcWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKHZhbHVlKTtcbiAgICBpZiAoIWNvbHVtbikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBhbGlhcyA9IHRoaXMuY29uZmlnLmdlbmVyYXRlZC5zb3VyY2VzLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS50YWJsZSA9PT0gY29sdW1uLnRhYmxlXG4gICAgKT8uYWxpYXM7XG4gICAgY29uc3QgZmllbGROYW1lID0gY29sdW1uLmZ1bGxOYW1lLnNwbGl0KFwiLlwiKS5wb3AoKSA/PyBjb2x1bW4udmFsdWU7XG4gICAgcmV0dXJuIGFsaWFzID8gYCR7YWxpYXN9LiR7ZmllbGROYW1lfWAgOiBjb2x1bW4uZnVsbE5hbWU7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlRmllbGRTcWwoZmllbGQ6IHN0cmluZyB8IER5bmFtaWNWaWV3QnVpbGRlckZpZWxkKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkRmllbGQgPSB0aGlzLm5vcm1hbGl6ZUdlbmVyYXRlZEZpZWxkKGZpZWxkKTtcbiAgICBjb25zdCBmaWVsZFNxbCA9IHRoaXMucmVzb2x2ZUNvbHVtblNxbChub3JtYWxpemVkRmllbGQuY29sdW1uKTtcbiAgICBpZiAobm9ybWFsaXplZEZpZWxkLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVGdW5jdGlvblNxbCh7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogbm9ybWFsaXplZEZpZWxkLmZ1bmN0aW9uLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgY29sdW1uOiBub3JtYWxpemVkRmllbGQuY29sdW1uLFxuICAgICAgICBhbGlhczpcbiAgICAgICAgICBub3JtYWxpemVkRmllbGQuZnVuY3Rpb24uYWxpYXM/LnRyaW0oKSB8fCAvLyBOT1NPTkFSXG4gICAgICAgICAgbm9ybWFsaXplZEZpZWxkLmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUlxuICAgICAgICAgIEVNUFRZX1ZBTFVFLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGFsaWFzID0gbm9ybWFsaXplZEZpZWxkLmFsaWFzPy50cmltKCk7XG4gICAgcmV0dXJuIGFsaWFzID8gYCR7ZmllbGRTcWx9IEFTICR7YWxpYXN9YCA6IGZpZWxkU3FsO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUZ1bmN0aW9uU3FsKGl0ZW06IER5bmFtaWNWaWV3QnVpbGRlckZ1bmN0aW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkRnVuY3Rpb24gPSBpdGVtLmZ1bmN0aW9uTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gdGhpcy5yZXNvbHZlQ29sdW1uU3FsKGl0ZW0uY29sdW1uKTtcbiAgICBjb25zdCBhbGlhcyA9IGl0ZW0uYWxpYXM/LnRyaW0oKTtcbiAgICByZXR1cm4gYWxpYXNcbiAgICAgID8gYCR7bm9ybWFsaXplZEZ1bmN0aW9ufSgke2FyZ3VtZW50fSkgQVMgJHthbGlhc31gXG4gICAgICA6IGAke25vcm1hbGl6ZWRGdW5jdGlvbn0oJHthcmd1bWVudH0pYDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVTb3J0U3FsKGl0ZW06IER5bmFtaWNWaWV3QnVpbGRlclNvcnQpOiBzdHJpbmcge1xuICAgIGlmICghaXRlbS5mdW5jdGlvbk5hbWU/LnRyaW0oKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbHVtblNxbChpdGVtLmNvbHVtbik7XG4gICAgfVxuICAgIHJldHVybiBgJHtpdGVtLmZ1bmN0aW9uTmFtZS50cmltKCkudG9VcHBlckNhc2UoKX0oJHt0aGlzLnJlc29sdmVDb2x1bW5TcWwoXG4gICAgICBpdGVtLmNvbHVtblxuICAgICl9KWA7XG4gIH1cbiAgcHJpdmF0ZSByZXNvbHZlSm9pbk9wZXJhdG9yU3FsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB7XG4gICAgICAgIEVRVUFMUzogXCI9XCIsXG4gICAgICAgIE5PVF9FUVVBTFM6IFwiPD5cIixcbiAgICAgIH1bdmFsdWVdID8/IHZhbHVlXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJTcWwoZmlsdGVyOiBEeW5hbWljVmlld0J1aWxkZXJGaWx0ZXIpOiBzdHJpbmcgeyAvLyBOT1NPTkFSIC0gY29tcGxleGl0eTogZXh0cmFjdGlvbiB3b3VsZCByaXNrIGJlaGF2aW9yIGNoYW5nZVxuICAgIGlmIChmaWx0ZXIudmFsdWVUeXBlID09PSBGSUxURVJfTU9ERV9ET01BSU4pIHtcbiAgICAgIHJldHVybiBgKCR7ZmlsdGVyLmRvbWFpbkV4cHJlc3Npb24gPz8gRU1QVFlfVkFMVUV9KWA7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5yZXNvbHZlQ29sdW1uU3FsKGZpbHRlci5jb2x1bW4pO1xuICAgIGlmICghZmllbGQpIHtcbiAgICAgIHJldHVybiBFTVBUWV9WQUxVRTtcbiAgICB9XG4gICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gXCJFTVBUWVwiKSB7XG4gICAgICByZXR1cm4gYCR7ZmllbGR9IElTIE5VTExgO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyLm9wZXJhdG9yID09PSBcIk5PVF9FTVBUWVwiKSB7XG4gICAgICByZXR1cm4gYCR7ZmllbGR9IElTIE5PVCBOVUxMYDtcbiAgICB9XG4gICAgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gXCJJTlwiKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSAoZmlsdGVyLnZhbHVlcyA/PyBbXSkubWFwKChpdGVtKSA9PlxuICAgICAgICB0aGlzLnJlc29sdmVGaWx0ZXJWYWx1ZVNxbChmaWx0ZXIuY29sdW1uLCBmaWx0ZXIub3BlcmF0b3IsIGl0ZW0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIGAke2ZpZWxkfSBJTiAoJHt2YWx1ZXMuam9pbihcIiwgXCIpfSlgO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyLm9wZXJhdG9yID09PSBcIkJFVFdFRU5cIikge1xuICAgICAgcmV0dXJuIGAke2ZpZWxkfSBCRVRXRUVOICR7dGhpcy5yZXNvbHZlRmlsdGVyVmFsdWVTcWwoXG4gICAgICAgIGZpbHRlci5jb2x1bW4sXG4gICAgICAgIGZpbHRlci5vcGVyYXRvcixcbiAgICAgICAgZmlsdGVyLnZhbHVlcz8uWzBdXG4gICAgICApfSBBTkQgJHt0aGlzLnJlc29sdmVGaWx0ZXJWYWx1ZVNxbChcbiAgICAgICAgZmlsdGVyLmNvbHVtbixcbiAgICAgICAgZmlsdGVyLm9wZXJhdG9yLFxuICAgICAgICBmaWx0ZXIudmFsdWVzPy5bMV1cbiAgICAgICl9YDtcbiAgICB9XG4gICAgaWYgKGZpbHRlci52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiBgJHtmaWVsZH0gJHt0aGlzLnJlc29sdmVGaWx0ZXJPcGVyYXRvclNxbChcbiAgICAgICAgZmlsdGVyLm9wZXJhdG9yXG4gICAgICApfSA6JHtmaWx0ZXIucGFyYW1ldGVyTmFtZSA/PyBFTVBUWV9WQUxVRX1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7ZmllbGR9ICR7dGhpcy5yZXNvbHZlRmlsdGVyT3BlcmF0b3JTcWwoXG4gICAgICBmaWx0ZXIub3BlcmF0b3JcbiAgICApfSAke3RoaXMucmVzb2x2ZUZpbHRlclZhbHVlU3FsKGZpbHRlci5jb2x1bW4sIGZpbHRlci5vcGVyYXRvciwgZmlsdGVyLnZhbHVlKX1gO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZUZpbHRlck9wZXJhdG9yU3FsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB7XG4gICAgICAgIEVRVUFMOiBcIj1cIixcbiAgICAgICAgTk9UX0VRVUFMOiBcIjw+XCIsXG4gICAgICAgIEdSRUFURVI6IFwiPlwiLFxuICAgICAgICBHUkVBVEVSX1RIQU46IFwiPlwiLFxuICAgICAgICBHUkVBVEVSX09SX0VRVUFMOiBcIj49XCIsXG4gICAgICAgIEdSRUFURVJfVEhBTl9PUl9FUVVBTDogXCI+PVwiLFxuICAgICAgICBMRVNTOiBcIjxcIixcbiAgICAgICAgTEVTU19USEFOOiBcIjxcIixcbiAgICAgICAgTEVTU19PUl9FUVVBTDogXCI8PVwiLFxuICAgICAgICBMRVNTX1RIQU5fT1JfRVFVQUw6IFwiPD1cIixcbiAgICAgICAgQ09OVEFJTlM6IFwiTElLRVwiLFxuICAgICAgICBET0VTX05PVF9DT05UQUlOOiBcIk5PVCBMSUtFXCIsXG4gICAgICAgIFNUQVJUU19XSVRIOiBcIkxJS0VcIixcbiAgICAgICAgRU5EU19XSVRIOiBcIkxJS0VcIixcbiAgICAgIH1bdmFsdWVdID8/IHZhbHVlXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJWYWx1ZVNxbChcbiAgICBjb2x1bW5WYWx1ZTogc3RyaW5nLFxuICAgIG9wZXJhdG9yOiBzdHJpbmcsXG4gICAgdmFsdWU6IHVua25vd25cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSA/PyBFTVBUWV9WQUxVRSk7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5yZXNvbHZlQ29sdW1uT3B0aW9uKGNvbHVtblZhbHVlKTtcbiAgICBpZiAoY29sdW1uPy5kYXRhVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBzdHJpbmdWYWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIiA/IFwiVFJVRVwiIDogXCJGQUxTRVwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc051bWVyaWNUeXBlKGNvbHVtbj8uZGF0YVR5cGUpICYmIHN0cmluZ1ZhbHVlKSB7XG4gICAgICByZXR1cm4gc3RyaW5nVmFsdWU7XG4gICAgfVxuICAgIGlmIChbXCJDT05UQUlOU1wiLCBcIkRPRVNfTk9UX0NPTlRBSU5cIiwgXCJTVEFSVFNfV0lUSFwiLCBcIkVORFNfV0lUSFwiXS5pbmNsdWRlcyhcbiAgICAgIG9wZXJhdG9yXG4gICAgKSkge1xuICAgICAgcmV0dXJuIHRoaXMucXVvdGVTcWxWYWx1ZSh0aGlzLmRlY29yYXRlTGlrZVZhbHVlKG9wZXJhdG9yLCBzdHJpbmdWYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5xdW90ZVNxbFZhbHVlKHN0cmluZ1ZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGRlY29yYXRlTGlrZVZhbHVlKG9wZXJhdG9yOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChvcGVyYXRvciA9PT0gXCJTVEFSVFNfV0lUSFwiKSB7XG4gICAgICByZXR1cm4gYCR7dmFsdWV9JWA7XG4gICAgfVxuICAgIGlmIChvcGVyYXRvciA9PT0gXCJFTkRTX1dJVEhcIikge1xuICAgICAgcmV0dXJuIGAlJHt2YWx1ZX1gO1xuICAgIH1cbiAgICBpZiAob3BlcmF0b3IgPT09IFwiQ09OVEFJTlNcIiB8fCBvcGVyYXRvciA9PT0gXCJET0VTX05PVF9DT05UQUlOXCIpIHtcbiAgICAgIHJldHVybiBgJSR7dmFsdWV9JWA7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIHF1b3RlU3FsVmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XG4gIH1cbiAgcHJpdmF0ZSBzeW5jTGF5b3V0TW9kZUl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMubGF5b3V0TW9kZUl0ZW1zWzBdLmxhYmVsID0gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgYCR7dGhpcy5jb25maWcudHJhbnNsYXRpb25QcmVmaXh9LmxheW91dE1vZGVzLnN0YWNrZWRgLFxuICAgICAgXCJCbG9jb3NcIlxuICAgICk7XG4gICAgdGhpcy5sYXlvdXRNb2RlSXRlbXNbMV0ubGFiZWwgPSB0aGlzLmluc3RhbnRXaXRoRmFsbGJhY2soXG4gICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0ubGF5b3V0TW9kZXMuc3BsaXRgLFxuICAgICAgXCJMaXN0YVwiXG4gICAgKTtcbiAgICB0aGlzLnN5bmNTZWxlY3RlZExheW91dE1vZGVJdGVtcygpO1xuICB9XG4gIHByaXZhdGUgc3luY0ZpbHRlck1vZGVJdGVtcygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck1vZGVJdGVtc1swXS5sYWJlbCA9IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLm1vZGVzLmNvbmRpdGlvbmAsXG4gICAgICBcIkZpbHRyb1wiXG4gICAgKTtcbiAgICB0aGlzLmZpbHRlck1vZGVJdGVtc1sxXS5sYWJlbCA9IHRoaXMuaW5zdGFudFdpdGhGYWxsYmFjayhcbiAgICAgIGAke3RoaXMuY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4fS5maWx0ZXJzLmRvbWFpbkxhYmVsYCxcbiAgICAgIFwiRXhwcmVzc2FvIGRlIGRvbWluaW9cIlxuICAgICk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRGaWx0ZXJNb2RlSXRlbXMoKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTb3J0RGlyZWN0aW9uSXRlbXMoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbXMuc3BsaWNlKFxuICAgICAgMCxcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLnRoaXMuc29ydERpcmVjdGlvbk9wdGlvbnMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBsYWJlbDogaXRlbS50ZXh0LFxuICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgIH0pKVxuICAgICk7XG4gICAgdGhpcy5zeW5jU2VsZWN0ZWRTb3J0RGlyZWN0aW9uSXRlbXMoKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTZWxlY3RlZExheW91dE1vZGVJdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMubGF5b3V0TW9kZUl0ZW1zLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5sYXlvdXRNb2RlXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkTGF5b3V0TW9kZUl0ZW1zLnNwbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLnNlbGVjdGVkTGF5b3V0TW9kZUl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLihzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgc3luY1NlbGVjdGVkRmlsdGVyTW9kZUl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5maWx0ZXJNb2RlSXRlbXMuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0aGlzLmZpbHRlck1vZGFsTW9kZVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlck1vZGVJdGVtcy5zcGxpY2UoXG4gICAgICAwLFxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlck1vZGVJdGVtcy5sZW5ndGgsXG4gICAgICAuLi4oc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW10pXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHN5bmNTZWxlY3RlZFNvcnREaXJlY3Rpb25JdGVtcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc29ydERpcmVjdGlvbkl0ZW1zLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS52YWx1ZSA9PT0gdGhpcy5zb3J0RHJhZnQuZGlyZWN0aW9uXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zLnNwbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLnNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zLmxlbmd0aCxcbiAgICAgIC4uLihzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0IGZpbHRlclNlcXVlbmNlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJFZGl0SW5kZXggPz8gdGhpcy5jb25maWcuZ2VuZXJhdGVkLmZpbHRlcnMubGVuZ3RoO1xuICB9XG4gIHByaXZhdGUgcGFyc2VNdWx0aVZhbHVlVGV4dCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS50cmltKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG4gIHByaXZhdGUgYnVpbGRBbGlhc0ZvclRhYmxlKHRhYmxlOiBEeW5hbWljVmlld0J1aWxkZXJUYWJsZU9wdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3Qgd29yZHMgPSB0YWJsZS50ZXh0XG4gICAgICAuc3BsaXQoL1tcXHNfLi1dKy8pXG4gICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKHdvcmRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybiB3b3Jkc1xuICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtWzBdPy50b0xvd2VyQ2FzZSgpID8/IEVNUFRZX1ZBTFVFKVxuICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuICh0YWJsZS52YWx1ZS5zcGxpdChcIi5cIikucG9wKCkgPz8gdGFibGUudmFsdWUpXG4gICAgICAuc2xpY2UoMCwgQUxJQVNfTUFYX0xFTkdUSClcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHByaXZhdGUgcmVzb2x2ZURlZmF1bHRTb3VyY2VBbGlhcyh0YWJsZVZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5yZXNvbHZlVGFibGVPcHRpb24odGFibGVWYWx1ZSk7XG4gICAgcmV0dXJuIHRhYmxlID8gdGhpcy5idWlsZEFsaWFzRm9yVGFibGUodGFibGUpIDogRU1QVFlfVkFMVUU7XG4gIH1cbiAgcHJpdmF0ZSBoYXNDdXN0b21BbGlhcyh0YWJsZVZhbHVlOiBzdHJpbmcsIGFsaWFzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMucmVzb2x2ZVRhYmxlT3B0aW9uKHRhYmxlVmFsdWUpO1xuICAgIGlmICghdGFibGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICEhYWxpYXMudHJpbSgpICYmIGFsaWFzLnRyaW0oKSAhPT0gdGhpcy5idWlsZEFsaWFzRm9yVGFibGUodGFibGUpO1xuICB9XG4gIG9uRmllbGRGdW5jdGlvbk5hbWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uQWxpYXMgPSBFTVBUWV9WQUxVRTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW4gPSB0aGlzLnJlc29sdmVDb2x1bW5PcHRpb24odGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuY29sdW1uKTtcbiAgICBpZiAoXG4gICAgICBzZWxlY3RlZENvbHVtbiAmJlxuICAgICAgIXRoaXMuZmlsdGVyRnVuY3Rpb25TZWxlY3RhYmxlQ29sdW1ucyh0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWUpXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpXG4gICAgICAgIC5pbmNsdWRlcyhzZWxlY3RlZENvbHVtbi52YWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZSA9IEVNUFRZX1ZBTFVFO1xuICAgICAgdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25BbGlhcyA9IEVNUFRZX1ZBTFVFO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uQWxpYXMudHJpbSgpKSB7XG4gICAgICB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbkFsaWFzID0gdGhpcy5idWlsZEZpZWxkRnVuY3Rpb25BbGlhcygpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGJ1aWxkRnVuY3Rpb25BbGlhcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmVzb2x2ZUNvbHVtbk9wdGlvbih0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5jb2x1bW4pO1xuICAgIGNvbnN0IGJhc2UgPSBjb2x1bW4/LnRleHQgPz8gdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuY29sdW1uID8/IEVNUFRZX1ZBTFVFO1xuICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMuc2x1Z2lmeShiYXNlKTtcbiAgICByZXR1cm4gc3VmZml4XG4gICAgICA/IGAke3RoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZX1fJHtzdWZmaXh9YFxuICAgICAgOiB0aGlzLmZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWU7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEZpZWxkRnVuY3Rpb25BbGlhcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkRnVuY3Rpb25BbGlhcygpO1xuICB9XG4gIHByaXZhdGUgYnVpbGRGaWVsZEZ1bmN0aW9uRHJhZnQoKTogRHluYW1pY1ZpZXdCdWlsZGVyRmllbGRGdW5jdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHRoaXMuZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uTmFtZS50cmltKCk7XG4gICAgaWYgKCFmdW5jdGlvbk5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgYWxpYXM6IChcbiAgICAgICAgdGhpcy5maWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25BbGlhcyB8fCB0aGlzLmJ1aWxkRmllbGRGdW5jdGlvbkFsaWFzKClcbiAgICAgICkudHJpbSgpLFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBwYXRjaEZpZWxkTW9kYWxEcmFmdChcbiAgICBjb2x1bW46IHN0cmluZyxcbiAgICBwYXRjaDogUGFydGlhbDxEeW5hbWljVmlld0J1aWxkZXJGaWVsZD5cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5maWVsZE1vZGFsRHJhZnRzID0gdGhpcy5maWVsZE1vZGFsRHJhZnRzLm1hcCgoaXRlbSkgPT5cbiAgICAgIGl0ZW0uY29sdW1uID09PSBjb2x1bW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAuLi5wYXRjaCxcbiAgICAgICAgfVxuICAgICAgICA6IGl0ZW1cbiAgICApO1xuICB9XG4gIHByaXZhdGUgbWVyZ2VMZWdhY3lGdW5jdGlvbnNJbnRvRmllbGRzKFxuICAgIGZpZWxkczogRHluYW1pY1ZpZXdCdWlsZGVyRmllbGRbXSxcbiAgICBmdW5jdGlvbnM6IER5bmFtaWNWaWV3QnVpbGRlckZ1bmN0aW9uW11cbiAgKTogRHluYW1pY1ZpZXdCdWlsZGVyRmllbGRbXSB7XG4gICAgY29uc3QgZmllbGRCeUNvbHVtbiA9IG5ldyBNYXAoZmllbGRzLm1hcCgoaXRlbSkgPT4gW2l0ZW0uY29sdW1uLCB7IC4uLml0ZW0gfV0pKTtcblxuICAgIGZ1bmN0aW9ucy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZmllbGRCeUNvbHVtbi5nZXQoaXRlbS5jb2x1bW4pID8/IHsgY29sdW1uOiBpdGVtLmNvbHVtbiB9O1xuICAgICAgaWYgKCFjdXJyZW50LmZ1bmN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnQuZnVuY3Rpb24gPSB7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBpdGVtLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICBhbGlhczogaXRlbS5hbGlhcyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZpZWxkQnlDb2x1bW4uc2V0KGl0ZW0uY29sdW1uLCBjdXJyZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGZpZWxkQnlDb2x1bW4udmFsdWVzKCkpO1xuICB9XG4gIHByaXZhdGUgZXh0cmFjdEZ1bmN0aW9uc0Zyb21GaWVsZHMoXG4gICAgZmllbGRzOiBEeW5hbWljVmlld0J1aWxkZXJGaWVsZFtdXG4gICk6IER5bmFtaWNWaWV3QnVpbGRlckZ1bmN0aW9uW10ge1xuICAgIHJldHVybiBmaWVsZHNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbS5mdW5jdGlvbj8uZnVuY3Rpb25OYW1lPy50cmltKCkpXG4gICAgICAubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBmdW5jdGlvbk5hbWU6IGl0ZW0uZnVuY3Rpb24/LmZ1bmN0aW9uTmFtZT8udHJpbSgpID8/IEVNUFRZX1ZBTFVFLFxuICAgICAgICBjb2x1bW46IGl0ZW0uY29sdW1uLFxuICAgICAgICBhbGlhczpcbiAgICAgICAgICBpdGVtLmZ1bmN0aW9uPy5hbGlhcz8udHJpbSgpIHx8IC8vIE5PU09OQVIgLSBlbXB0eSBzdHJpbmcgZmFsbGJhY2sgaXMgaW50ZW50aW9uYWxcbiAgICAgICAgICBpdGVtLmFsaWFzPy50cmltKCkgfHwgLy8gTk9TT05BUiAtIGVtcHR5IHN0cmluZyBmYWxsYmFjayBpcyBpbnRlbnRpb25hbFxuICAgICAgICAgIHRoaXMuc2x1Z2lmeShgJHtpdGVtLmZ1bmN0aW9uPy5mdW5jdGlvbk5hbWUgPz8gRU1QVFlfVkFMVUV9XyR7aXRlbS5jb2x1bW59YCksXG4gICAgICB9KSk7XG4gIH1cbiAgcHJpdmF0ZSBzbHVnaWZ5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZSh2YWx1ZSkucmVwbGFjZSgvW15hLXowLTldKy9nLCBcIl9cIik7XG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBsZXQgZW5kID0gbm9ybWFsaXplZC5sZW5ndGg7XG5cbiAgICB3aGlsZSAoc3RhcnQgPCBlbmQgJiYgbm9ybWFsaXplZC5jaGFyQXQoc3RhcnQpID09PSBcIl9cIikge1xuICAgICAgc3RhcnQgKz0gMTtcbiAgICB9XG5cbiAgICB3aGlsZSAoZW5kID4gc3RhcnQgJiYgbm9ybWFsaXplZC5jaGFyQXQoZW5kIC0gMSkgPT09IFwiX1wiKSB7XG4gICAgICBlbmQgLT0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZC5zbGljZShzdGFydCwgZW5kKTtcbiAgfVxuICBwcml2YXRlIGRlZHVwbGljYXRlQnlLZXk8VD4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBrZXlSZXNvbHZlcjogKGl0ZW06IFQpID0+IHN0cmluZ1xuICApOiBUW10ge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUPigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IG1hcC5zZXQoa2V5UmVzb2x2ZXIoaXRlbSksIGl0ZW0pKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShtYXAudmFsdWVzKCkpO1xuICB9XG4gIHByaXZhdGUgaHVtYW5pemVLZXkodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnNwbGl0KFwiX1wiKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGl0ZW0uc2xpY2UoMSkpXG4gICAgICAuam9pbihcIiBcIik7XG4gIH1cbiAgcHJpdmF0ZSBpbnN0YW50V2l0aEZhbGxiYWNrKGtleTogc3RyaW5nLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChrZXkpO1xuICAgIHJldHVybiB0cmFuc2xhdGVkICYmIHRyYW5zbGF0ZWQgIT09IGtleSA/IHRyYW5zbGF0ZWQgOiBmYWxsYmFjaztcbiAgfVxuICBwcml2YXRlIGJ1aWxkRmlsdGVyRnJvbURyYWZ0KCk6IER5bmFtaWNWaWV3QnVpbGRlckZpbHRlciB8IG51bGwgeyAvLyBOT1NPTkFSIC0gY29tcGxleGl0eTogZXh0cmFjdGlvbiB3b3VsZCByaXNrIGJlaGF2aW9yIGNoYW5nZVxuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICBjb25zdCBkb21haW5FeHByZXNzaW9uID0gdGhpcy5maWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uLnRyaW0oKTtcblxuICAgICAgaWYgKCFkb21haW5FeHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2x1bW46IEVNUFRZX1ZBTFVFLFxuICAgICAgICBvcGVyYXRvcjogRU1QVFlfVkFMVUUsXG4gICAgICAgIGNvbm5lY3RvcjogdGhpcy5maWx0ZXJEcmFmdC5jb25uZWN0b3IsXG4gICAgICAgIG9wdGlvbmFsOiB0aGlzLmZpbHRlckRyYWZ0Lm9wdGlvbmFsLFxuICAgICAgICB2YWx1ZVR5cGU6IEZJTFRFUl9NT0RFX0RPTUFJTixcbiAgICAgICAgZG9tYWluRXhwcmVzc2lvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbiB8fCAhdGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dDogRHluYW1pY1ZpZXdCdWlsZGVyRmlsdGVyID0ge1xuICAgICAgY29sdW1uOiB0aGlzLmZpbHRlckRyYWZ0LmNvbHVtbixcbiAgICAgIG9wZXJhdG9yOiB0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yLFxuICAgICAgY29ubmVjdG9yOiB0aGlzLmZpbHRlckRyYWZ0LmNvbm5lY3RvcixcbiAgICAgIG9wdGlvbmFsOiB0aGlzLmZpbHRlckRyYWZ0Lm9wdGlvbmFsLFxuICAgICAgdmFsdWVUeXBlOiB0aGlzLmZpbHRlck5lZWRzVmFsdWUgPyB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlVHlwZSA6IERFRkFVTFRfRklMVEVSX1ZBTFVFX1RZUEUsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5maWx0ZXJOZWVkc1ZhbHVlKSB7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSB0aGlzLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUudHJpbSgpO1xuXG4gICAgICBpZiAoIXBhcmFtZXRlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5leHQucGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC5vcGVyYXRvciA9PT0gXCJJTlwiKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnBhcnNlTXVsdGlWYWx1ZVRleHQodGhpcy5maWx0ZXJEcmFmdC52YWx1ZXNUZXh0KTtcblxuICAgICAgaWYgKCF2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBuZXh0LnZhbHVlcyA9IHZhbHVlcztcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckRyYWZ0Lm9wZXJhdG9yID09PSBcIkJFVFdFRU5cIikge1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5TdGFydC50cmltKCk7XG4gICAgICBjb25zdCBlbmQgPSB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5FbmQudHJpbSgpO1xuXG4gICAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5leHQudmFsdWVzID0gW3N0YXJ0LCBlbmRdO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmZpbHRlckRyYWZ0LnZhbHVlLnRyaW0oKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG5leHQudmFsdWUgPSB2YWx1ZTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJEcmFmdFNxbFByZXZpZXcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5idWlsZEZpbHRlckZyb21EcmFmdCgpO1xuXG4gICAgaWYgKCFuZXh0KSB7XG4gICAgICByZXR1cm4gRU1QVFlfVkFMVUU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUZpbHRlclNxbChuZXh0KTtcbiAgfVxuICBwcml2YXRlIHJlc29sdmVGaWx0ZXJEcmFmdERpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmZpbHRlck1vZGFsTW9kZSA9PT0gRklMVEVSX01PREVfRE9NQUlOKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uLnRyaW0oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJEcmFmdC52YWx1ZVR5cGUgPT09IFwicGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWVcbiAgICAgICAgPyBgOiR7dGhpcy5maWx0ZXJEcmFmdC5wYXJhbWV0ZXJOYW1lfWBcbiAgICAgICAgOiBFTVBUWV9WQUxVRTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiSU5cIikge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyRHJhZnQudmFsdWVzVGV4dDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyRHJhZnQub3BlcmF0b3IgPT09IFwiQkVUV0VFTlwiKSB7XG4gICAgICByZXR1cm4gW3RoaXMuZmlsdGVyRHJhZnQuYmV0d2VlblN0YXJ0LCB0aGlzLmZpbHRlckRyYWZ0LmJldHdlZW5FbmRdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oXCIgLSBcIik7XG4gICAgfVxuICAgIGlmICghdGhpcy5maWx0ZXJOZWVkc1ZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0YW50V2l0aEZhbGxiYWNrKFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy50cmFuc2xhdGlvblByZWZpeH0uc3RhdGVzLm9wdGlvbmFsYCxcbiAgICAgICAgXCJTZW0gdmFsb3JcIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRHJhZnQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBzY2hlZHVsZUZsb3dBcnJvd1JlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVmcmVzaEZsb3dBcnJvd3NGcmFtZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5yZWZyZXNoRmxvd0Fycm93c0ZyYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVmcmVzaEZsb3dBcnJvd3NUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoRmxvd0Fycm93c1RpbWVvdXQpO1xuICAgICAgdGhpcy5yZWZyZXNoRmxvd0Fycm93c1RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hGbG93QXJyb3dzRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoRmxvd0Fycm93c0ZyYW1lID0gbnVsbDtcbiAgICAgIHRoaXMucmVmcmVzaEZsb3dBcnJvd3MoKTtcbiAgICAgIHRoaXMucmVmcmVzaEZsb3dBcnJvd3NUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVmcmVzaEZsb3dBcnJvd3NUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWZyZXNoRmxvd0Fycm93cygpO1xuICAgICAgfSwgRkxPV19BUlJPV1NfUkVGUkVTSF9ERUxBWV9NUyk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSByZWZyZXNoRmxvd0Fycm93cygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hNZWFzdXJlZFByZXZpZXdIZWlnaHQoKTtcbiAgICBjb25zdCBuZXh0QXJyb3dzID0gdGhpcy5idWlsZEZsb3dBcnJvd3MoKTtcbiAgICB0aGlzLmZsb3dBcnJvd3MgPSBuZXh0QXJyb3dzO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgcHJpdmF0ZSByZWZyZXNoTWVhc3VyZWRQcmV2aWV3SGVpZ2h0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNlY3Rpb25zSGVpZ2h0ID0gdGhpcy5zZWN0aW9uc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgPz8gMDtcbiAgICB0aGlzLm1lYXN1cmVkU3BsaXRQcmV2aWV3SGVpZ2h0ID1cbiAgICAgIHNlY3Rpb25zSGVpZ2h0ID4gMCA/IGAke3NlY3Rpb25zSGVpZ2h0fXB4YCA6IFwiMjRyZW1cIjtcbiAgfVxuICBwcml2YXRlIGJ1aWxkRmxvd0Fycm93cygpOiBCdWlsZGVyRmxvd0Fycm93W10ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2VjdGlvbnNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSB0aGlzLmJ1aWxkZXJTZWN0aW9ucz8udG9BcnJheSgpID8/IFtdO1xuICAgIGlmICghY29udGFpbmVyIHx8IHNlY3Rpb25zLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc2VjdGlvbk1hcCA9IG5ldyBNYXA8QnVpbGRlclNlY3Rpb25JZCwgSFRNTEVsZW1lbnQ+KCk7XG4gICAgc2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvblJlZikgPT4ge1xuICAgICAgY29uc3Qgc2VjdGlvbklkID0gc2VjdGlvblJlZi5uYXRpdmVFbGVtZW50LmRhdGFzZXRbXG4gICAgICAgIFwic2VjdGlvbklkXCJcbiAgICAgIF0gYXMgQnVpbGRlclNlY3Rpb25JZCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChzZWN0aW9uSWQpIHtcbiAgICAgICAgc2VjdGlvbk1hcC5zZXQoc2VjdGlvbklkLCBzZWN0aW9uUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHRoaXMuc2VjdGlvbk9yZGVyXG4gICAgICAuc2xpY2UoMCwgLTEpXG4gICAgICAubWFwKChzZWN0aW9uSWQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzZWN0aW9uTWFwLmdldChzZWN0aW9uSWQpO1xuICAgICAgICBjb25zdCBuZXh0ID0gc2VjdGlvbk1hcC5nZXQodGhpcy5zZWN0aW9uT3JkZXJbaW5kZXggKyAxXSk7XG4gICAgICAgIGlmICghY3VycmVudCB8fCAhbmV4dCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZWN0ID0gY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgbmV4dFJlY3QgPSBuZXh0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBpc1NhbWVSb3cgPSBNYXRoLmFicyhjdXJyZW50UmVjdC50b3AgLSBuZXh0UmVjdC50b3ApIDwgMTY7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxHYXAgPSBNYXRoLm1heChGTE9XX0FSUk9XX01JTl9HQVAsIG5leHRSZWN0LmxlZnQgLSBjdXJyZW50UmVjdC5yaWdodCk7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsR2FwID0gTWF0aC5tYXgoRkxPV19BUlJPV19NSU5fR0FQLCBuZXh0UmVjdC50b3AgLSBjdXJyZW50UmVjdC5ib3R0b20pO1xuICAgICAgICBjb25zdCBvdmVybGFwTGVmdCA9IE1hdGgubWF4KGN1cnJlbnRSZWN0LmxlZnQsIG5leHRSZWN0LmxlZnQpO1xuICAgICAgICBjb25zdCBvdmVybGFwUmlnaHQgPSBNYXRoLm1pbihjdXJyZW50UmVjdC5yaWdodCwgbmV4dFJlY3QucmlnaHQpO1xuICAgICAgICBjb25zdCBvdmVybGFwVG9wID0gTWF0aC5tYXgoY3VycmVudFJlY3QudG9wLCBuZXh0UmVjdC50b3ApO1xuICAgICAgICBjb25zdCBvdmVybGFwQm90dG9tID0gTWF0aC5taW4oY3VycmVudFJlY3QuYm90dG9tLCBuZXh0UmVjdC5ib3R0b20pO1xuICAgICAgICBjb25zdCBuZXh0Q2VudGVyWCA9IG5leHRSZWN0LmxlZnQgKyBuZXh0UmVjdC53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IHNhbWVSb3dUb3AgPVxuICAgICAgICAgIG92ZXJsYXBUb3AgPCBvdmVybGFwQm90dG9tXG4gICAgICAgICAgICA/IG92ZXJsYXBUb3AgKyAob3ZlcmxhcEJvdHRvbSAtIG92ZXJsYXBUb3ApIC8gMlxuICAgICAgICAgICAgOiAoY3VycmVudFJlY3QudG9wICtcbiAgICAgICAgICAgICAgY3VycmVudFJlY3QuaGVpZ2h0IC8gMiArXG4gICAgICAgICAgICAgIChuZXh0UmVjdC50b3AgKyBuZXh0UmVjdC5oZWlnaHQgLyAyKSkgL1xuICAgICAgICAgICAgMjtcbiAgICAgICAgY29uc3QgZG93bkxlZnQgPVxuICAgICAgICAgIG92ZXJsYXBMZWZ0IDwgb3ZlcmxhcFJpZ2h0XG4gICAgICAgICAgICA/IG92ZXJsYXBMZWZ0ICsgKG92ZXJsYXBSaWdodCAtIG92ZXJsYXBMZWZ0KSAvIDJcbiAgICAgICAgICAgIDogKGN1cnJlbnRSZWN0LmxlZnQgKyBjdXJyZW50UmVjdC53aWR0aCAvIDIgKyBuZXh0Q2VudGVyWCkgLyAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiBgJHtzZWN0aW9uSWR9LSR7dGhpcy5zZWN0aW9uT3JkZXJbaW5kZXggKyAxXX1gLFxuICAgICAgICAgIGRpcmVjdGlvbjogaXNTYW1lUm93ID8gXCJyaWdodFwiIDogXCJkb3duXCIsXG4gICAgICAgICAgbGVmdDogaXNTYW1lUm93XG4gICAgICAgICAgICA/IGN1cnJlbnRSZWN0LnJpZ2h0IC0gY29udGFpbmVyUmVjdC5sZWZ0IC0gRkxPV19BUlJPV19JTlNFVCArIGhvcml6b250YWxHYXAgLyAyXG4gICAgICAgICAgICA6IGRvd25MZWZ0IC0gY29udGFpbmVyUmVjdC5sZWZ0LFxuICAgICAgICAgIHRvcDogaXNTYW1lUm93XG4gICAgICAgICAgICA/IHNhbWVSb3dUb3AgLSBjb250YWluZXJSZWN0LnRvcFxuICAgICAgICAgICAgOiBjdXJyZW50UmVjdC5ib3R0b20gLSBjb250YWluZXJSZWN0LnRvcCAtIEZMT1dfQVJST1dfSU5TRVQgKyB2ZXJ0aWNhbEdhcCAvIDIsXG4gICAgICAgIH0gc2F0aXNmaWVzIEJ1aWxkZXJGbG93QXJyb3c7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgQnVpbGRlckZsb3dBcnJvdyA9PiAhIWl0ZW0pO1xuICB9XG59XG5cbmV4cG9ydCB7IFZpc3VhbFNxbEVkaXRvckNvbXBvbmVudCBhcyBEeW5hbWljVmlld0J1aWxkZXJDb21wb25lbnQgfTtcbiIsIjxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlclwiIFthdHRyLmFyaWEtYnVzeV09XCJsb2FkaW5nXCI+XG4gIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fdG9vbGJhclwiPlxuICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fdG9vbGJhci1jb3B5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3RpdGxlXCI+XG4gICAgICAgIHt7IGNvbmZpZy5tZXRhZGF0YS50aXRsZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N1YnRpdGxlXCI+XG4gICAgICAgIHt7IGNvbmZpZy5tZXRhZGF0YS5kZXNjcmlwdGlvbiB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX190b29sYmFyLWFjdGlvbnNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Rvb2xiYXItbGFiZWxcIj5cbiAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmxheW91dE1vZGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNkYy1zZWxlY3QtYnV0dG9uXG4gICAgICAgIFtpdGVtc109XCJsYXlvdXRNb2RlSXRlbXNcIlxuICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZExheW91dE1vZGVJdGVtc1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTGF5b3V0TW9kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L3NkYy1zZWxlY3QtYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy10b2dnbGVcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUHJldmlldygpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cInByZXZpZXdWaXNpYmxlXCJcbiAgICAgICAgW3RpdGxlXT1cInByZXZpZXdUb2dnbGVMYWJlbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldmlld1RvZ2dsZUxhYmVsXCJcbiAgICAgICAgPlxuICAgICAgICA8aVxuICAgICAgICAgIFtjbGFzc109XCJwcmV2aWV3VmlzaWJsZSA/ICdmYXMgZmEtZXllLXNsYXNoJyA6ICdmYXMgZmEtZXllJ1wiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAge3sgcHJldmlld1RvZ2dsZUxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgQGlmIChzZWxlY3Rpb25Nb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJzZWxlY3Rpb25Nb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKHNlbGVjdGlvbk1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTZWxlY3Rpb25Nb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwic2VsZWN0aW9uTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLnNlbGVjdGlvbi53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zZWxlY3Rpb24uaGVpZ2h0XCJcbiAgICAgIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiXG4gICAgICBbZm9vdGVyQnV0dG9uc109XCJbXVwiXG4gICAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbC0tZnVsbFxuICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZmxvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2VcIlxuICAgICAgICA+XG4gICAgICAgIEBpZiAoc2VsZWN0aW9uTW9kYWxNb2RlID09PSAndGFibGVzJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtaW5saW5lLXN1cmZhY2VcIj5cbiAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICBbbGFiZWxdPVwibW9kYWxTZWFyY2hMYWJlbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtb2RhbFNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0aW9uTW9kYWxTZWFyY2hcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3Rpb25Nb2RhbFNlYXJjaCA9ICRldmVudFwiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkLS1zZWN0aW9uXG4gICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZS1ib2R5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXRhYmxlXG4gICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS0tY2hvb3NlclxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tdGFibGUtLWZsdWlkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1oZWFkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tY29sXCI+XG4gICAgICAgICAgICAgICAgICB7eyBtb2RhbE5hbWVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNvbFwiPlxuICAgICAgICAgICAgICAgICAge3sgbW9kYWxUeXBlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jb2wgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jb2wtLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAge3sgbW9kYWxTZWxlY3RMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBzZWxlY3Rpb25Nb2RhbFJvd3M7IHRyYWNrIHRyYWNrQnlJZCgkaW5kZXgsIHJvdykpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXJvdy0tc2VsZWN0ZWRdPVwicm93LnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCInYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInJvdy5kaXNhYmxlZCA/IC0xIDogMFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJyb3cuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInJvdy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb25Nb2RhbFJvdyhyb3cuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25TZWxlY3RhYmxlUm93S2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cudGFibGVMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXBhdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cucGF0aFR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5kYkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZGJcIj57eyByb3cuZGJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3cuZGJMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLXNlcGFyYXRvclwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IHJvdy50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tdGFibGUtbGFiZWxcIj57eyByb3cudGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tc2VwYXJhdG9yXCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tYWNjZW50XCI+e3sgcm93Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJvdy5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tY2VsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNlbGwtLW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyByb3cubWV0YSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvdy5ub3RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tbm90ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3cubm90ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWNlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1jZWxsLS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1tYXJrZXItLXNlbGVjdGVkXT1cInJvdy5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2tcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlLWJvZHlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgICBbaXRlbXNdPVwic2VsZWN0aW9uTW9kYWxQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cInNlbGVjdGlvbk1vZGFsU2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICAgIGlkS2V5PVwiaWRcIlxuICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4S2V5PVwidGl0bGVTdWZmaXhcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgICAgYmFkZ2VLZXk9XCJiYWRnZVwiXG4gICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuc2VhcmNoUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU2VsZWN0aW9uTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGZvb3RlciBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jYW5jZWwnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcHJpb3JpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZVNlbGVjdGlvbk1vZGFsKClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNsb3NlU2VsZWN0aW9uTW9kYWwoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY29uZmlybVNlbGVjdGlvbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAoY2xpY2spPVwiY29uZmlybVNlbGVjdGlvbk1vZGFsKClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbmZpcm1TZWxlY3Rpb25Nb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2RjLW1vZGFsPlxuICB9XG5cbiAgQGlmIChzb3VyY2VNb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJzb3VyY2VNb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKHNvdXJjZU1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTb3VyY2VNb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwic291cmNlTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLnNvdXJjZS53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zb3VyY2UuaGVpZ2h0XCJcbiAgICAgIFttYXhpbWl6YWJsZV09XCJmYWxzZVwiXG4gICAgICBbZm9vdGVyQnV0dG9uc109XCJbXVwiXG4gICAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1tb2RhbFwiPlxuICAgICAgICA8c2RjLXRpbWVsaW5lXG4gICAgICAgICAgW2l0ZW1zXT1cInNvdXJjZU1vZGFsVGltZWxpbmVJdGVtc1wiXG4gICAgICAgICAgW2FjdGl2ZUluZGV4XT1cInNvdXJjZU1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUgPyAxIDogMFwiXG4gICAgICAgICAgW2ludGVyYWN0aXZlXT1cInRydWVcIlxuICAgICAgICAgIFtzaG93RGVzY3JpcHRpb25zXT1cImZhbHNlXCJcbiAgICAgICAgICBbYXJpYUxhYmVsXT1cInNvdXJjZU1vZGFsVGltZWxpbmVBcmlhTGFiZWxcIlxuICAgICAgICAgIChzdGVwU2VsZWN0KT1cIm9uU291cmNlTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3NkYy10aW1lbGluZT5cbiAgICAgICAgQGlmIChzb3VyY2VNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc2hlbGwtLWZ1bGxcbiAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1mbG93IGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlLWJvZHlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwic291cmNlTW9kYWxQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRJZHNdPVwic291cmNlTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgICBbc2hvd1BhZ2luYXRvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dJdGVtSWNvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU291cmNlTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvc2RjLXBpY2tsaXN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtY29uZmlnLXNoZWxsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1saXN0LXNoZWxsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvdXJjZS1jb25maWctbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc291cmNlTW9kYWxDb25maWd1cmVkSXRlbXM7IHRyYWNrIHRyYWNrQnlJZCgkaW5kZXgsIGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvdXJjZS1jb25maWctcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc291cmNlLWNvbmZpZy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IGl0ZW0uZGJMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1zZXBhcmF0b3JcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWFjY2VudFwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc291cmNlLWNvbmZpZy1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmFsaWFzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpdGVtLmFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU291cmNlTW9kYWxBbGlhc0NoYW5nZShpdGVtLnRhYmxlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBmb290ZXIgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2FuY2VsJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2VTb3VyY2VNb2RhbCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZVNvdXJjZU1vZGFsKClcIlxuICAgICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgICBAaWYgKHNvdXJjZU1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSAmJiBzb3VyY2VNb2RhbENhblByb2NlZWQpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMubmV4dFN0ZXAnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWR2YW5jZVNvdXJjZU1vZGFsU3RlcCgpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFkdmFuY2VTb3VyY2VNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNvdXJjZU1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc291cmNlTW9kYWxDYW5Qcm9jZWVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zZGMtbW9kYWw+XG4gIH1cblxuICBAaWYgKGpvaW5Nb2RhbFZpc2libGUpIHtcbiAgICA8c2RjLW1vZGFsXG4gICAgICBbdmlzaWJsZV09XCJqb2luTW9kYWxWaXNpYmxlXCJcbiAgICAgICh2aXNpYmxlQ2hhbmdlKT1cIiRldmVudCA/IChqb2luTW9kYWxWaXNpYmxlID0gdHJ1ZSkgOiBjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgIFtoZWFkZXJdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuY2FyZHMuam9pbnMudGl0bGUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLmpvaW4ud2lkdGhcIlxuICAgICAgW2hlaWdodF09XCJtb2RhbERpbWVuc2lvbnMuam9pbi5oZWlnaHRcIlxuICAgICAgW21heGltaXphYmxlXT1cImZhbHNlXCJcbiAgICAgIFtmb290ZXJCdXR0b25zXT1cIltdXCJcbiAgICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc2hlbGwgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2pvaW4tbW9kYWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19qb2luLW1vZGFsLXRvcFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeSBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LWxhYmVsXCI+XG4gICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5sZWZ0JykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlXG4gICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWUtLXBhdGhcIlxuICAgICAgICAgICAgICA+e3sgam9pblNvdXJjZVN1bW1hcnkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQtLWNvbXBhY3RcbiAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMub3BlcmF0b3InXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiam9pbkRyYWZ0Lm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiam9pbkRyYWZ0Lm9wZXJhdG9yID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiam9pbk9wZXJhdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICAgIFthcHBlbmRUb109XCJvdmVybGF5QXBwZW5kVGFyZ2V0XCJcbiAgICAgICAgICAgICAgW3pJbmRleF09XCJvdmVybGF5WkluZGV4XCJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgID48L3NkYy1jb21ib2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnkgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMucmlnaHQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZS0tcGF0aFwiXG4gICAgICAgICAgICAgID57eyBqb2luVGFyZ2V0U3VtbWFyeSB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLS1maXRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXIgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMubGVmdCcpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImpvaW5Tb3VyY2VQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImpvaW5Tb3VyY2VTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgaWRLZXk9XCJpZFwiXG4gICAgICAgICAgICAgIHRpdGxlS2V5PVwidGl0bGVcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgdGl0bGVTdWZmaXhLZXk9XCJ0aXRsZVN1ZmZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlUHJlZml4Q29sb3JLZXk9XCJ0aXRsZVByZWZpeENvbG9yXCJcbiAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICBiYWRnZUtleT1cImJhZGdlXCJcbiAgICAgICAgICAgICAgYmFkZ2VDb2xvcktleT1cImJhZGdlQ29sb3JcIlxuICAgICAgICAgICAgICBbc2hvd1BhZ2luYXRvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtzaG93SXRlbUljb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd1NlbGVjdGlvbkNvdW50ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFttYXhWaXNpYmxlU2VsZWN0ZWRJdGVtc109XCIxXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgIChzZWxlY3RlZElkc0NoYW5nZSk9XCJvbkpvaW5Tb3VyY2VTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXIgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMucmlnaHQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c2RjLXBpY2tsaXN0XG4gICAgICAgICAgICAgIFtpdGVtc109XCJqb2luVGFyZ2V0UGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJqb2luVGFyZ2V0U2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICAgIGlkS2V5PVwiaWRcIlxuICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4S2V5PVwidGl0bGVTdWZmaXhcIlxuICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgICAgYmFkZ2VLZXk9XCJiYWRnZVwiXG4gICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbbWF4VmlzaWJsZVNlbGVjdGVkSXRlbXNdPVwiMVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5zZWFyY2hQbGFjZWhvbGRlcidcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25Kb2luVGFyZ2V0U2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9zZGMtcGlja2xpc3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGZvb3RlciBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jYW5jZWwnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgcHJpb3JpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZUpvaW5Nb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zYXZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUpvaW5cIlxuICAgICAgICAgIChjbGljayk9XCJzYXZlSm9pbigpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlSm9pbigpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2RjLW1vZGFsPlxuICB9XG5cbiAgQGlmIChzb3J0TW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwic29ydE1vZGFsVmlzaWJsZVwiXG4gICAgICAodmlzaWJsZUNoYW5nZSk9XCIkZXZlbnQgPyAoc29ydE1vZGFsVmlzaWJsZSA9IHRydWUpIDogY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cInNvcnRNb2RhbFRpdGxlXCJcbiAgICAgIFt3aWR0aF09XCJtb2RhbERpbWVuc2lvbnMuc29ydC53aWR0aFwiXG4gICAgICBbaGVpZ2h0XT1cIm1vZGFsRGltZW5zaW9ucy5zb3J0LmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fc29ydC1tb2RhbFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGRcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tZnVsbFxuICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NvcnQtZGlyZWN0aW9uLWZpZWxkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmRpcmVjdGlvbicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNkYy1zZWxlY3QtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zb3J0LWRpcmVjdGlvblwiXG4gICAgICAgICAgICBbaXRlbXNdPVwic29ydERpcmVjdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzb2Z0XCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkU29ydERpcmVjdGlvbkl0ZW1zXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU29ydERpcmVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9zZGMtc2VsZWN0LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1jYXJkLS1zZWN0aW9uXG4gICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGlja2VyIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXItLXN0cmV0Y2hcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWxlY3Rpb24tZmxvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fcGlja2xpc3Qtc2hlbGxcbiAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdGFnZS1ib2R5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgW2l0ZW1zXT1cInNvcnRQaWNrbGlzdEl0ZW1zXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJzb3J0U2VsZWN0ZWRQaWNrbGlzdElkc1wiXG4gICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgIHRpdGxlS2V5PVwidGl0bGVcIlxuICAgICAgICAgICAgdGl0bGVQcmVmaXhLZXk9XCJ0aXRsZVByZWZpeFwiXG4gICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgIHRpdGxlUHJlZml4Q29sb3JLZXk9XCJ0aXRsZVByZWZpeENvbG9yXCJcbiAgICAgICAgICAgIHRpdGxlU3VmZml4Q29sb3JLZXk9XCJ0aXRsZVN1ZmZpeENvbG9yXCJcbiAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgYmFkZ2VDb2xvcktleT1cImJhZGdlQ29sb3JcIlxuICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3Nob3dJdGVtSWNvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbc2hvd1NlbGVjdGlvbkNvdW50ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2F1dG9SZXNpemVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW21heFZpc2libGVTZWxlY3RlZEl0ZW1zXT1cIjFcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAoc2VsZWN0ZWRJZHNDaGFuZ2UpPVwib25Tb3J0U2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvc2RjLXBpY2tsaXN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBmb290ZXIgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2FuY2VsJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VTb3J0TW9kYWwoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblNhdmVTb3J0XCJcbiAgICAgICAgICAoY2xpY2spPVwic2F2ZVNvcnQoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZVNvcnQoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NkYy1tb2RhbD5cbiAgfVxuXG4gIEBpZiAoZmlsdGVyTW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwiZmlsdGVyTW9kYWxWaXNpYmxlXCJcbiAgICAgICh2aXNpYmxlQ2hhbmdlKT1cIiRldmVudCA/IChmaWx0ZXJNb2RhbFZpc2libGUgPSB0cnVlKSA6IGNsb3NlRmlsdGVyTW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cImZpbHRlck1vZGFsVGl0bGVcIlxuICAgICAgW3dpZHRoXT1cIm1vZGFsRGltZW5zaW9ucy5maWx0ZXIud2lkdGhcIlxuICAgICAgW2hlaWdodF09XCJtb2RhbERpbWVuc2lvbnMuZmlsdGVyLmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW1vZGFsXCI+XG4gICAgICAgIDxzZGMtdGltZWxpbmVcbiAgICAgICAgICBbaXRlbXNdPVwiZmlsdGVyTW9kYWxUaW1lbGluZUl0ZW1zXCJcbiAgICAgICAgICBbYWN0aXZlSW5kZXhdPVwiZmlsdGVyTW9kYWxSZXZpZXdTdGVwQWN0aXZlID8gMiA6IChmaWx0ZXJNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlID8gMSA6IDApXCJcbiAgICAgICAgICBbaW50ZXJhY3RpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dEZXNjcmlwdGlvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgIFthcmlhTGFiZWxdPVwiZmlsdGVyTW9kYWxUaW1lbGluZUFyaWFMYWJlbFwiXG4gICAgICAgICAgKHN0ZXBTZWxlY3QpPVwib25GaWx0ZXJNb2RhbFRpbWVsaW5lU3RlcFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgPjwvc2RjLXRpbWVsaW5lPlxuICAgICAgICBAaWYgKGZpbHRlck1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXN0ZXBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItYmFzZS1zZWxlY3RvclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5maWx0ZXIuc3RlcHMuc2VsZWN0LnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWx0ZXJzLnRvb2x0aXBzLm1vZGUnXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItbW9kZS1yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1tb2RlLWNvcHlcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1vZGFscy5maWx0ZXIudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItbW9kZS1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICAgIDxzZGMtc2VsZWN0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpbHRlck1vZGVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic29mdFwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZEZpbHRlck1vZGVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlck1vZGVDaGFuZ2UoJGV2ZW50WzBdPy52YWx1ZSB8fCAnY29uZGl0aW9uJylcIlxuICAgICAgICAgICAgICAgID48L3NkYy1zZWxlY3QtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChmaWx0ZXJNb2RhbE1vZGUgPT09ICdjb25kaXRpb24nKSB7XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXJcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1waWNrZXItLWZpbHRlclxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBpY2tlci0tc3RyZXRjaFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1mbG93XG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2UtYm9keVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3BpY2tsaXN0LXNoZWxsXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzZGMtcGlja2xpc3RcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpbHRlck1vZGFsUGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZElkc109XCJmaWx0ZXJNb2RhbFNlbGVjdGVkUGlja2xpc3RJZHNcIlxuICAgICAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVLZXk9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlUHJlZml4S2V5PVwidGl0bGVQcmVmaXhcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVQcmVmaXhDb2xvcktleT1cInRpdGxlUHJlZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeENvbG9yS2V5PVwidGl0bGVTdWZmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICBiYWRnZUNvbG9yS2V5PVwiYmFkZ2VDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvUmVzaXplXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0l0ZW1JY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWxlY3Rpb25Db3VudGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW21heFZpc2libGVTZWxlY3RlZEl0ZW1zXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuc2VhcmNoUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uRmlsdGVyTW9kYWxTZWxlY3RlZElkc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgID48L3NkYy1waWNrbGlzdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItZG9tYWluLWludHJvXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1wYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWx0ZXJzLmRvbWFpbkxhYmVsJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNkYy1pbmZvLXNpZ25cbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZmlsdGVyRG9tYWluRXhwcmVzc2lvblRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWRvbWFpbi1ncmlkXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1kb21haW4taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZG9tYWluRXhwcmVzc2lvbicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJEb21haW5FeHByZXNzaW9uVG9vbHRpcCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItZG9tYWluLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmNvbm5lY3RvcicpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJDb25uZWN0b3JUb29sdGlwIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICBAaWYgKGZpbHRlck1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXN0ZXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeSBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS0tZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLmZpbHRlci5zdGVwcy5jb25maWd1cmUudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZS0tcGF0aFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyQ29uZmlndXJhdGlvblN1bW1hcnlMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0ZpbHRlck1vZGFsU3RlcCgnc2VsZWN0JylcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgZmlsdGVyQmFja1RvU2VsZWN0aW9uTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoZmlsdGVyTW9kYWxNb2RlID09PSAnY29uZGl0aW9uJykge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZC0tc3RyZXRjaFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWNvbmZpZy1jYXJkXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWNvbmZpZy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXBhbmVsLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuZmlsdGVyLnN0ZXBzLmNvbmZpZ3VyZS50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNkYy1pbmZvLXNpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmlsdGVycy50b29sdGlwcy5jb25maWd1cmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLS1maWx0ZXItY29udHJvbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNvbWJvYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuY29ubmVjdG9yJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5jb25uZWN0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyRHJhZnQuY29ubmVjdG9yID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpbHRlckNvbm5lY3Rvck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIm92ZXJsYXlBcHBlbmRUYXJnZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJvdmVybGF5WkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWx0ZXJDb25uZWN0b3JEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5mb1Rvb2x0aXBdPVwiZmlsdGVyQ29ubmVjdG9yVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jb21ib2JveD5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNvbWJvYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMub3BlcmF0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0Lm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wZXJhdG9yID0gJGV2ZW50OyBvbkZpbHRlck9wZXJhdG9yQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyT3BlcmF0b3JPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCJvdmVybGF5QXBwZW5kVGFyZ2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWx0ZXJEcmFmdC5jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZm9Ub29sdGlwXT1cImZpbHRlck9wZXJhdG9yVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtY29tYm9ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZVR5cGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0LnZhbHVlVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC52YWx1ZVR5cGUgPSAkZXZlbnQ7IG9uRmlsdGVyVmFsdWVUeXBlQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwidmFsdWVUeXBlT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cIm92ZXJsYXlaSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlclZhbHVlVHlwZURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmZvVG9vbHRpcF09XCJmaWx0ZXJWYWx1ZVR5cGVUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW9wdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLnN0YXRlcy5vcHRpb25hbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5vcHRpb25hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wdGlvbmFsID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtaW5mby1zaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImZpbHRlck9wdGlvbmFsVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLXNlY3Rpb24tLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQtLXNpbmdsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0ZpbHRlckJvb2xlYW5Db21ib2JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMudmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC52YWx1ZSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImJvb2xlYW5WYWx1ZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtY29tYm9ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0ZpbHRlclZhbHVlVGV4dGJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy10ZXh0Ym94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0LnZhbHVlID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dGaWx0ZXJWYWx1ZXNUZXh0Ym94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnZhbHVlcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC52YWx1ZXNUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyRHJhZnQudmFsdWVzVGV4dCA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93RmlsdGVyQmV0d2VlbklucHV0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19iZXR3ZWVuIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtdGV4dGJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy52YWx1ZVN0YXJ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQuYmV0d2VlblN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuU3RhcnQgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMudmFsdWVFbmQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuRW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5iZXR3ZWVuRW5kID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dGaWx0ZXJQYXJhbWV0ZXJUZXh0Ym94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnBhcmFtZXRlck5hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyRHJhZnQucGFyYW1ldGVyTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0LnBhcmFtZXRlck5hbWUgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRib3g+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQtLXN0cmV0Y2hcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmRcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctY2FyZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWdyaWQtLWZpbHRlci1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzZGMtY29tYm9ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5jb25uZWN0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckRyYWZ0LmNvbm5lY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5jb25uZWN0b3IgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmlsdGVyQ29ubmVjdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cIm92ZXJsYXlaSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlckNvbm5lY3RvckRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmZvVG9vbHRpcF09XCJmaWx0ZXJDb25uZWN0b3JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLWNvbWJvYm94PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLW9wdGlvbmFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLnN0YXRlcy5vcHRpb25hbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5vcHRpb25hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckRyYWZ0Lm9wdGlvbmFsID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZGMtaW5mby1zaWduXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImZpbHRlck9wdGlvbmFsVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1jb25maWctc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLXNlY3Rpb24tLWRvbWFpblwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5kb21haW5FeHByZXNzaW9uJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZmlsdGVyRG9tYWluRXhwcmVzc2lvblRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1kb21haW4taGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckRvbWFpbkV4cHJlc3Npb25Ub29sdGlwIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIicnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJEcmFmdC5kb21haW5FeHByZXNzaW9uID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItc3RlcFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci10b29sYmFyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5IGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LS1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tb2RhbHMuZmlsdGVyLnN0ZXBzLnJldmlldy50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS12YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlLS1wYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJDb25maWd1cmF0aW9uU3VtbWFyeUxhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvRmlsdGVyTW9kYWxTdGVwKCdjb25maWd1cmUnKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJCYWNrVG9Db25maWd1cmF0aW9uTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1maWVsZFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkLS1zdHJldGNoXG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZFxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItY29uZmlnLWNhcmRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1yZXZpZXctZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBmaWx0ZXJSZXZpZXdJdGVtczsgdHJhY2sgdHJhY2tCeUlkKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpbHRlci1yZXZpZXctaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zdW1tYXJ5LXZhbHVlLS1wYXRoXT1cIml0ZW0uZW1waGFzaXplID09PSAncGF0aCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19maWx0ZXItcmV2aWV3LWNvZGVdPVwiaXRlbS5lbXBoYXNpemUgPT09ICdjb2RlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmlsdGVyLXJldmlldy1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLnNxbFByZXZpZXcnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c2RjLXRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlclJldmlld1ByZXZpZXdMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjZcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZm9vdGVyIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZvb3RlclwiPlxuICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBwcmlvcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsb3NlRmlsdGVyTW9kYWwoKVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xvc2VGaWx0ZXJNb2RhbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbFNlbGVjdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cImZpbHRlck1vZGFsQ29uZmlndXJlQWN0aW9uTGFiZWxcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWx0ZXJNb2RhbENhblByb2NlZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWx0ZXJNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhZHZhbmNlRmlsdGVyTW9kYWxTdGVwKClcIlxuICAgICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbENvbmZpZ3VyYXRpb25TdGVwQWN0aXZlKSB7XG4gICAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJmaWx0ZXJNb2RhbFJldmlld0FjdGlvbkxhYmVsXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZmlsdGVyTW9kYWxDYW5SZXZpZXdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWx0ZXJNb2RhbFN0ZXAoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhZHZhbmNlRmlsdGVyTW9kYWxTdGVwKClcIlxuICAgICAgICAgID48L3NkYy1idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmaWx0ZXJNb2RhbFJldmlld1N0ZXBBY3RpdmUpIHtcbiAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUZpbHRlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2F2ZUZpbHRlcigpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVGaWx0ZXIoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zZGMtbW9kYWw+XG4gIH1cblxuICBAaWYgKGZpZWxkTW9kYWxWaXNpYmxlKSB7XG4gICAgPHNkYy1tb2RhbFxuICAgICAgW3Zpc2libGVdPVwiZmllbGRNb2RhbFZpc2libGVcIlxuICAgICAgKHZpc2libGVDaGFuZ2UpPVwiJGV2ZW50ID8gKGZpZWxkTW9kYWxWaXNpYmxlID0gdHJ1ZSkgOiBjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICBbaGVhZGVyXT1cImZpZWxkTW9kYWxUaXRsZVwiXG4gICAgICBbd2lkdGhdPVwibW9kYWxEaW1lbnNpb25zLmZpZWxkLndpZHRoXCJcbiAgICAgIFtoZWlnaHRdPVwibW9kYWxEaW1lbnNpb25zLmZpZWxkLmhlaWdodFwiXG4gICAgICBbbWF4aW1pemFibGVdPVwiZmFsc2VcIlxuICAgICAgW2Zvb3RlckJ1dHRvbnNdPVwiW11cIlxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtbW9kYWxcIj5cbiAgICAgICAgPHNkYy10aW1lbGluZVxuICAgICAgICAgIFtpdGVtc109XCJmaWVsZE1vZGFsVGltZWxpbmVJdGVtc1wiXG4gICAgICAgICAgW2FjdGl2ZUluZGV4XT1cImZpZWxkTW9kYWxDb25maWd1cmF0aW9uU3RlcEFjdGl2ZSA/IDEgOiAwXCJcbiAgICAgICAgICBbaW50ZXJhY3RpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dEZXNjcmlwdGlvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgIFthcmlhTGFiZWxdPVwiZmllbGRNb2RhbFRpbWVsaW5lQXJpYUxhYmVsXCJcbiAgICAgICAgICAoc3RlcFNlbGVjdCk9XCJvbkZpZWxkTW9kYWxUaW1lbGluZVN0ZXBTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgID48L3NkYy10aW1lbGluZT5cbiAgICAgICAgQGlmIChmaWVsZE1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXNoZWxsIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1zaGVsbC0tZnVsbFxuICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWZsb3cgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLXN0YWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtY2FyZC0tc2VjdGlvblxuICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19waWNrbGlzdC1zaGVsbCBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtc3RhZ2UtYm9keVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNkYy1waWNrbGlzdFxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZE1vZGFsUGlja2xpc3RJdGVtc1wiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzXT1cImZpZWxkTW9kYWxTZWxlY3RlZFBpY2tsaXN0SWRzXCJcbiAgICAgICAgICAgICAgICBpZEtleT1cImlkXCJcbiAgICAgICAgICAgICAgICB0aXRsZUtleT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeEtleT1cInRpdGxlUHJlZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVN1ZmZpeEtleT1cInRpdGxlU3VmZml4XCJcbiAgICAgICAgICAgICAgICB0aXRsZVByZWZpeENvbG9yS2V5PVwidGl0bGVQcmVmaXhDb2xvclwiXG4gICAgICAgICAgICAgICAgdGl0bGVTdWZmaXhDb2xvcktleT1cInRpdGxlU3VmZml4Q29sb3JcIlxuICAgICAgICAgICAgICAgIGJhZGdlS2V5PVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgIGJhZGdlQ29sb3JLZXk9XCJiYWRnZUNvbG9yXCJcbiAgICAgICAgICAgICAgICBbYXV0b1Jlc2l6ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dQYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtzaG93SXRlbUljb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtzaG93U2VsZWN0aW9uQ291bnRlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcubW9kYWxzLnNlYXJjaFBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uRmllbGRNb2RhbFNlbGVjdGVkSWRzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9zZGMtcGlja2xpc3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZmllbGQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZpZWxkLS1zdHJldGNoXG4gICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctc2hlbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdG9vbGJhclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1zdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAge3sgZmllbGRNb2RhbENvbmZpZ3VyZWRJdGVtcy5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5maWVsZHMudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgQGlmIChmaWVsZE1vZGFsSGFzU2VsZWN0YWJsZUNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQW5vdGhlckZpZWxkRnJvbU1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQgZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWNhcmQtLXNlY3Rpb25cbiAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtbGlzdC1zaGVsbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctbGlzdFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZmllbGRNb2RhbENvbmZpZ3VyZWRJdGVtczsgdHJhY2sgdHJhY2tCeUlkKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZmllbGQtY29uZmlnLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi10YWJsZS1sYWJlbFwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlbGVjdGlvbi1zZXBhcmF0b3JcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VsZWN0aW9uLWFjY2VudFwiPnt7IGl0ZW0uZmllbGRMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25OYW1lICYmICFpc0ZpZWxkRnVuY3Rpb25FZGl0aW5nKGl0ZW0uY29sdW1uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctZnVuY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1vcGVyYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5mdW5jdGlvbkFsaWFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25BbGlhcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghaXNGaWVsZEZ1bmN0aW9uRWRpdGluZyhpdGVtLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1jb250cm9sc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy10ZXh0Ym94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmZpZWxkcy5hbGlhcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJpdGVtLmFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZE1vZGFsQWxpYXNDaGFuZ2UoaXRlbS5jb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWxhYmVsLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMud2lkdGgnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5tZXNzYWdlcy5maWVsZFdpZHRoSW5mbydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy1pbmZvLXNpZ24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIml0ZW0ud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRNb2RhbFdpZHRoQ2hhbmdlKGl0ZW0uY29sdW1uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMTYwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2RjLXRleHRib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0YXJ0RmllbGRGdW5jdGlvbkVkaXQoaXRlbS5jb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmZ1bmN0aW9uTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY29uZmlndXJlRmllbGQnKSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZnVuY3Rpb25OYW1lJykgfCB0cmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWVsZE1vZGFsRHJhZnQoaXRlbS5jb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1jb25maWctY29udHJvbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ZpZWxkLWNvbmZpZy1jb250cm9scy0tZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5maWVsZHMuZnVuY3Rpb25OYW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkRnVuY3Rpb25EcmFmdE5hbWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpZWxkTW9kYWxGdW5jdGlvbk9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwib3ZlcmxheUFwcGVuZFRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwib3ZlcmxheVpJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zZGMtY29tYm9ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuZmllbGRzLmFsaWFzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpZWxkRnVuY3Rpb25EcmFmdC5mdW5jdGlvbkFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmllbGRGdW5jdGlvbkRyYWZ0LmZ1bmN0aW9uQWxpYXMgPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaWVsZEZ1bmN0aW9uRHJhZnQuZnVuY3Rpb25OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24tLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEZpZWxkRnVuY3Rpb25FZGl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2F2ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNhdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRmllbGRGdW5jdGlvbkVkaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZm9vdGVyIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX21vZGFsLWZvb3RlciBkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLWdyb3VwIGR5bmFtaWMtdmlldy1idWlsZGVyX19tb2RhbC1mb290ZXItZ3JvdXAtLXN0YXJ0XCI+XG4gICAgICAgICAgQGlmIChmaWVsZE1vZGFsU2VsZWN0aW9uU3RlcEFjdGl2ZSAmJiBmaWVsZE1vZGFsQ2FuU2VsZWN0QWxsKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsRmllbGRNb2RhbENvbHVtbnMoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RBbGxDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fbW9kYWwtZm9vdGVyLWdyb3VwXCI+XG4gICAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNhbmNlbCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbG9zZUZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgICBAaWYgKGZpZWxkTW9kYWxTZWxlY3Rpb25TdGVwQWN0aXZlICYmIGZpZWxkTW9kYWxDYW5Qcm9jZWVkKSB7XG4gICAgICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgICAgICBbbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5uZXh0U3RlcCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFkdmFuY2VGaWVsZE1vZGFsU3RlcCgpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWR2YW5jZUZpZWxkTW9kYWxTdGVwKClcIlxuICAgICAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChmaWVsZE1vZGFsQ29uZmlndXJhdGlvblN0ZXBBY3RpdmUpIHtcbiAgICAgICAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgICAgICAgIFtsYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNhdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2F2ZUZpZWxkTW9kYWxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUZpZWxkKClcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlRmllbGQoKVwiXG4gICAgICAgICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NkYy1tb2RhbD5cbiAgfVxuXG4gIDxkaXZcbiAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX193b3Jrc3BhY2VcIlxuICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fd29ya3NwYWNlLS1zdGFja2VkXT1cImxheW91dE1vZGUgPT09ICdzdGFja2VkJ1wiXG4gICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX193b3Jrc3BhY2UtLXNwbGl0XT1cImxheW91dE1vZGUgPT09ICdzcGxpdCdcIlxuICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fd29ya3NwYWNlLS1wcmV2aWV3LWhpZGRlbl09XCIhcHJldmlld1Zpc2libGVcIlxuICAgID5cbiAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2J1aWxkZXItYXJlYVwiPlxuICAgICAgPGRpdlxuICAgICAgICAjc2VjdGlvbnNDb250YWluZXJcbiAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbnNcIlxuICAgICAgICBbY2xhc3MuZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb25zLS1zdGFja2VkXT1cImxheW91dE1vZGUgPT09ICdzdGFja2VkJ1wiXG4gICAgICAgIFtjbGFzcy5keW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbnMtLXNwbGl0XT1cImxheW91dE1vZGUgPT09ICdzcGxpdCdcIlxuICAgICAgICA+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwidGFibGVzXCJcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1sYWJlbFwiPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5zb3VyY2VzLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2VsZWN0VGFibGVzJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU291cmNlTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmsgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhY2FuT3BlblNvdXJjZUNvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUFsaWFzZXMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUFsaWFzZXMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3VyY2VDb25maWd1cmF0aW9uTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFzb3VyY2VJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNsZWFyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTb3VyY2VzKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaC1hbHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmICghc291cmNlSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19lbXB0eS1yb3dcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3VyY2VNb2RhbCgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdFRhYmxlcycpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChzb3VyY2VJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2sgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrLS13cmFwXCI+XG4gICAgICAgICAgICAgIEBmb3IgKHNvdXJjZSBvZiBzb3VyY2VJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIHNvdXJjZSk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93IGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctLXNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kYlwiPnt7IHNvdXJjZS5kYkxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kb3RcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc291cmNlLnRhYmxlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzb3VyY2UuYWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctbWV0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQWxpYXMge3sgc291cmNlLmFsaWFzIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVNvdXJjZShpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tcm93XCI+XG4gICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICNidWlsZGVyU2VjdGlvblxuICAgICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiam9pbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbiBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi0tZmx1aWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuY2FyZHMuam9pbnMudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWNhbkNvbmZpZ3VyZUpvaW5zXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZEpvaW4nKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSm9pbk1vZGFsKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAham9pbkl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckpvaW5zKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghY2FuQ29uZmlndXJlSm9pbnMpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19pbmZvLXJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLm1lc3NhZ2VzLmpvaW5SZXF1aXJlc1R3b1RhYmxlcycpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChjYW5Db25maWd1cmVKb2lucyAmJiAham9pbkl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkSm9pbicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkpvaW5Nb2RhbCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRKb2luJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGpvaW5JdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGpvaW5JdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS5zb3VyY2VUYWJsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1kb3RcIj4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWZpZWxkXCI+e3sgaXRlbS5zb3VyY2VGaWVsZCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fam9pbi1vcGVyYXRvclwiPnt7IGl0ZW0ub3BlcmF0b3IgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fam9pbi1hcnJvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbG9uZy1hcnJvdy1hbHQtcmlnaHRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1wYXRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctdGFibGVcIj57eyBpdGVtLnRhcmdldFRhYmxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLnRhcmdldEZpZWxkIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmVkaXQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSm9pbk1vZGFsKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19pY29uLWFjdGlvbi0tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSm9pbihpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgICBkYXRhLXNlY3Rpb24taWQ9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tLWNvbXBhY3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmNhcmRzLmdyb3VwQnkudGl0bGUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWdyb3VwQnlTZWxlY3RhYmxlQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuc2VsZWN0Q29sdW1ucycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3Rpb25Nb2RhbCgnZ3JvdXBCeScpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWdyb3VwQnlJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJHcm91cEJ5KClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghZ3JvdXBCeUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3Rpb25Nb2RhbCgnZ3JvdXBCeScpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGdyb3VwQnlJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGdyb3VwQnlJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVHcm91cEJ5KGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgI2J1aWxkZXJTZWN0aW9uXG4gICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiZmllbGRzXCJcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLWhlYWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmNhcmRzLmZpZWxkcy50aXRsZScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c2RjLWluZm8tc2lnblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2hpbnRcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidWb2PDqiBwb2RlIG9yZGVuYXIgYSBzZXF1w6puY2lhIGRvcyBjYW1wb3MgYXJyYXN0YW5kbyBlIHNvbHRhbmRvLidcIlxuICAgICAgICAgICAgICA+PC9zZGMtaW5mby1zaWduPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmtcbiAgICAgICAgICAgICAgICAgIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0tcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhZmllbGRTZWxlY3RhYmxlQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdENvbHVtbnMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnNlbGVjdENvbHVtbnMnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWVsZE1vZGFsKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rIGR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluay0taWNvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWNhbk9wZW5GaWVsZENvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNvbmZpZ3VyZUZpZWxkJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jb25maWd1cmVGaWVsZCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkQ29uZmlndXJhdGlvbk1vZGFsKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmsgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seSB8fCAhZmllbGRJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmNsZWFyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWVsZHMoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoLWFsdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKCFmaWVsZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZpZWxkTW9kYWwoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5zZWxlY3RDb2x1bW5zJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGZpZWxkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrIGR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjay0td3JhcFwiPlxuICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZpZWxkSXRlbXM7IHRyYWNrIHRyYWNrQnlJZChpLCBpdGVtKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBAaWYgKGlzRmllbGREcm9wSW5kaWNhdG9yVmlzaWJsZShpKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1kcm9wLWluZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3JvdyBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LS1kcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctLWRyYWctb3JpZ2luXT1cImRyYWdnaW5nRmllbGRJbmRleCA9PT0gaXRlbS5zb3VyY2VJbmRleFwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cIiFpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25GaWVsZERyYWdTdGFydChpdGVtLnNvdXJjZUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ292ZXIpPVwib25GaWVsZERyYWdPdmVyKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgKGRyb3ApPVwib25GaWVsZERyb3AoKVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ2VuZCk9XCJvbkZpZWxkRHJhZ0VuZCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW9yZGVyXCI+e3sgaXRlbS5vcmRlckxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy10YWJsZVwiPnt7IGl0ZW0udGFibGVMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZG90XCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmFsaWFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFsaWFzIHt7IGl0ZW0uYWxpYXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1ldGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ud2lkdGggfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwIGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcC0tb3BlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25BbGlhcykge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmZ1bmN0aW9uQWxpYXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5yZW1vdmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmllbGQoaXRlbS5zb3VyY2VJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGlzRmllbGREcm9wSW5kaWNhdG9yQXRFbmRWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19maWVsZC1kcm9wLWluZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLXJvd1wiPlxuICAgICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgICAjYnVpbGRlclNlY3Rpb25cbiAgICAgICAgICAgIGRhdGEtc2VjdGlvbi1pZD1cInNvcnRpbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbiBkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi0tY29tcGFjdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24taGVhZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5zb3J0aW5nLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFzb3J0U2VsZWN0YWJsZUl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRTb3J0JykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZFNvcnQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNvcnRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIXNvcnRJdGVtcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuY2xlYXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTb3J0aW5nKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2gtYWx0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmICghc29ydEl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fZW1wdHktcm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkU29ydCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkU29ydCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNvcnRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRTb3J0JykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNvcnRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjayBkeW5hbWljLXZpZXctYnVpbGRlcl9fc3RhY2stLXdyYXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHNvcnRJdGVtczsgdHJhY2sgdHJhY2tCeUlkKGksIGl0ZW0pOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3dcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LW1haW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uZnVuY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLW9wZXJhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZnVuY3Rpb25MYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctcGF0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWRvdFwiPi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZmllbGRcIj57eyBpdGVtLmZpZWxkTGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwIGR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcC0tb3BlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZGlyZWN0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5lZGl0JykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Tb3J0TW9kYWwoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVTb3J0KGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICNidWlsZGVyU2VjdGlvblxuICAgICAgICAgICAgZGF0YS1zZWN0aW9uLWlkPVwiZmlsdGVyc1wiXG4gICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uIGR5bmFtaWMtdmlldy1idWlsZGVyX19zZWN0aW9uLS1mbHVpZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24taGVhZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5jYXJkcy5maWx0ZXJzLnRpdGxlJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fc2VjdGlvbi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGlua1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLXByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX2FjdGlvbi1saW5rLS1pY29uXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5IHx8ICFhdmFpbGFibGVDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5hZGRGaWx0ZXInKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWx0ZXJNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19hY3Rpb24tbGluayBkeW5hbWljLXZpZXctYnVpbGRlcl9fYWN0aW9uLWxpbmstLWljb25cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHkgfHwgIWZpbHRlckl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbmZpZy50cmFuc2xhdGlvblByZWZpeCArICcuYWN0aW9ucy5jbGVhcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaC1hbHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKCFmaWx0ZXJJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2VtcHR5LXJvd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmFkZEZpbHRlcicpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyTW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IChjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuYWRkRmlsdGVyJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGZpbHRlckl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3N0YWNrIGR5bmFtaWMtdmlldy1idWlsZGVyX19zdGFjay0td3JhcFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZmlsdGVySXRlbXM7IHRyYWNrIHRyYWNrQnlJZChpLCBpdGVtKTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmICghaXRlbS5pc0RvbWFpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXBhdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LXRhYmxlXCI+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctZG90XCI+Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWZpZWxkXCI+e3sgaXRlbS5maWVsZExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLW9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGl0ZW0ub3BlcmF0b3JMYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1kb21haW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgaXRlbS50YWJsZUxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19yb3ctY2hpcCBkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAtLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnN1YnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5vcHRpb25hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWNoaXAgZHluYW1pYy12aWV3LWJ1aWxkZXJfX3Jvdy1jaGlwLS1vcHRpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5zdGF0ZXMub3B0aW9uYWwnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLmVkaXQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMuZWRpdCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyTW9kYWwoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9faWNvbi1hY3Rpb24gZHluYW1pYy12aWV3LWJ1aWxkZXJfX2ljb24tYWN0aW9uLS1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihjb25maWcudHJhbnNsYXRpb25QcmVmaXggKyAnLmFjdGlvbnMucmVtb3ZlJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoY29uZmlnLnRyYW5zbGF0aW9uUHJlZml4ICsgJy5hY3Rpb25zLnJlbW92ZScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBmb3IgKGFycm93IG9mIGZsb3dBcnJvd3M7IHRyYWNrIHRyYWNrQnlBcnJvdygkaW5kZXgsIGFycm93KSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX2Zsb3ctYXJyb3dcIlxuICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19mbG93LWFycm93LS1yaWdodF09XCJhcnJvdy5kaXJlY3Rpb24gPT09ICdyaWdodCdcIlxuICAgICAgICAgICAgW2NsYXNzLmR5bmFtaWMtdmlldy1idWlsZGVyX19mbG93LWFycm93LS1kb3duXT1cImFycm93LmRpcmVjdGlvbiA9PT0gJ2Rvd24nXCJcbiAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImFycm93LmxlZnRcIlxuICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJhcnJvdy50b3BcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIFtjbGFzc109XCJhcnJvdy5kaXJlY3Rpb24gPT09ICdyaWdodCdcbiAgICAgICAgICAgICAgICA/ICdmYXMgZmEtYW5nbGUtZG91YmxlLXJpZ2h0J1xuICAgICAgICAgICAgICAgIDogJ2ZhcyBmYS1hbmdsZS1kb3VibGUtZG93bidcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKHByZXZpZXdWaXNpYmxlKSB7XG4gICAgICA8YXNpZGUgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy1hcmVhXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImR5bmFtaWMtdmlldy1idWlsZGVyX19wcmV2aWV3XCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cInNxbFByZXZpZXdQYW5lbEhlaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXZpZXctYnVpbGRlcl9fcHJldmlldy10aXRsZVwiPlNRTCBQcmV2aWV3PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3ByZXZpZXctc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgQ29uc3VsdGEgZ2VyYWRhIGF1dG9tYXRpY2FtZW50ZSBhIHBhcnRpciBkYSBjb25maWd1cmFjYW8gYXR1YWwuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHluYW1pYy12aWV3LWJ1aWxkZXJfX3ByZXZpZXctYm9keVwiPlxuICAgICAgICAgICAgPHNkYy1jb2RlLWVkaXRvclxuICAgICAgICAgICAgICBbc3FsXT1cInNxbFByZXZpZXdcIlxuICAgICAgICAgICAgICBsYW5ndWFnZT1cInNxbFwiXG4gICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Nob3dDb3B5XT1cInRydWVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cInNxbFByZXZpZXdIZWlnaHRcIlxuICAgICAgICAgICAgPjwvc2RjLWNvZGUtZWRpdG9yPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXNpZGU+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19