@smartbit4all/ng-client 3.3.206 → 4.0.1

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 (844) hide show
  1. package/esm2022/lib/component-factory-service/component-factory-service.module.mjs +17 -0
  2. package/{esm2020 → esm2022}/lib/component-factory-service/component-factory-service.service.mjs +35 -35
  3. package/{esm2020 → esm2022}/lib/component-factory-service/projects.mjs +5 -5
  4. package/{esm2020 → esm2022}/lib/session/api/api/api.mjs +3 -3
  5. package/esm2022/lib/session/api/api/session.service.mjs +306 -0
  6. package/esm2022/lib/session/api/configuration.mjs +91 -0
  7. package/{esm2020 → esm2022}/lib/session/api/encoder.mjs +18 -18
  8. package/{esm2020 → esm2022}/lib/session/api/index.mjs +2 -2
  9. package/{esm2020 → esm2022}/lib/session/api/model/accountInfo.mjs +12 -12
  10. package/{esm2020 → esm2022}/lib/session/api/model/apiError.mjs +12 -12
  11. package/{esm2020 → esm2022}/lib/session/api/model/authenticationProviderData.mjs +12 -12
  12. package/{esm2020 → esm2022}/lib/session/api/model/getAuthenticationProvidersResponse.mjs +1 -1
  13. package/{esm2020 → esm2022}/lib/session/api/model/models.mjs +8 -8
  14. package/{esm2020 → esm2022}/lib/session/api/model/refreshSessionRequest.mjs +12 -12
  15. package/{esm2020 → esm2022}/lib/session/api/model/session.mjs +1 -1
  16. package/esm2022/lib/session/api/model/sessionInfoData.mjs +2 -0
  17. package/{esm2020 → esm2022}/lib/session/api/model/userActivityLog.mjs +12 -12
  18. package/{esm2020 → esm2022}/lib/session/api/param.mjs +1 -1
  19. package/{esm2020 → esm2022}/lib/session/api/variables.mjs +8 -8
  20. package/esm2022/lib/session/cookie-service/smart-cookie.service.mjs +225 -0
  21. package/{esm2020 → esm2022}/lib/session/projects.mjs +9 -9
  22. package/esm2022/lib/session/smart-error-catching.interceptor.mjs +71 -0
  23. package/esm2022/lib/session/smart-header-maintainer.interceptor.mjs +46 -0
  24. package/{esm2020 → esm2022}/lib/session/smart-session-handler.service.mjs +5 -5
  25. package/esm2022/lib/session/smart-session.module.mjs +58 -0
  26. package/esm2022/lib/session/smart-session.service.mjs +225 -0
  27. package/{esm2020 → esm2022}/lib/session/smart-timer/smart-session-timer.component.mjs +35 -35
  28. package/esm2022/lib/session/smart-timer/smart-session-timer.service.mjs +58 -0
  29. package/{esm2020 → esm2022}/lib/shared/projects.mjs +3 -3
  30. package/esm2022/lib/shared/shared.module.mjs +19 -0
  31. package/esm2022/lib/shared/smart-tooltip.directive.mjs +58 -0
  32. package/{esm2020 → esm2022}/lib/shared/smarttable.date-pipe.mjs +43 -43
  33. package/{esm2020 → esm2022}/lib/smart-client/projects.mjs +4 -4
  34. package/{esm2020 → esm2022}/lib/smart-client/smart-authentication.service.mjs +21 -21
  35. package/esm2022/lib/smart-client/smart-component-api-client.mjs +717 -0
  36. package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +53 -0
  37. package/{esm2020 → esm2022}/lib/smart-client/smart.component.mjs +77 -77
  38. package/{esm2020 → esm2022}/lib/smart-client/smart.service.mjs +75 -75
  39. package/{esm2020 → esm2022}/lib/smart-component-layout/api/api/api.mjs +4 -4
  40. package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +133 -0
  41. package/esm2022/lib/smart-component-layout/api/api.module.mjs +40 -0
  42. package/esm2022/lib/smart-component-layout/api/configuration.mjs +91 -0
  43. package/{esm2020 → esm2022}/lib/smart-component-layout/api/encoder.mjs +19 -19
  44. package/{esm2020 → esm2022}/lib/smart-component-layout/api/index.mjs +7 -7
  45. package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/componentType.mjs +18 -18
  46. package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/componentWidgetType.mjs +19 -19
  47. package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/layoutDirection.mjs +17 -17
  48. package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/models.mjs +6 -6
  49. package/esm2022/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +2 -0
  50. package/esm2022/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +2 -0
  51. package/esm2022/lib/smart-component-layout/api/param.mjs +2 -0
  52. package/{esm2020 → esm2022}/lib/smart-component-layout/api/variables.mjs +9 -9
  53. package/{esm2020 → esm2022}/lib/smart-component-layout/projects.mjs +7 -7
  54. package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +94 -0
  55. package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +259 -0
  56. package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +41 -0
  57. package/{esm2020 → esm2022}/lib/smart-dialog/projects.mjs +7 -7
  58. package/esm2022/lib/smart-dialog/smartdialog.component.mjs +54 -0
  59. package/{esm2020 → esm2022}/lib/smart-dialog/smartdialog.model.mjs +15 -15
  60. package/esm2022/lib/smart-dialog/smartdialog.module.mjs +46 -0
  61. package/{esm2020 → esm2022}/lib/smart-dialog/smartdialog.service.mjs +54 -54
  62. package/esm2022/lib/smart-expandable-section/expandable-section.component.mjs +88 -0
  63. package/{esm2020 → esm2022}/lib/smart-expandable-section/expandable-section.model.mjs +11 -11
  64. package/{esm2020 → esm2022}/lib/smart-expandable-section/projects.mjs +7 -7
  65. package/esm2022/lib/smart-expandable-section/smart-expandable-section.module.mjs +49 -0
  66. package/{esm2020 → esm2022}/lib/smart-expandable-section/smart-expandable-section.service.mjs +14 -14
  67. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +17 -17
  68. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +2 -0
  69. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +8 -0
  70. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +2 -0
  71. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionData.mjs +2 -0
  72. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +20 -20
  73. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionField.mjs +1 -1
  74. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +2 -0
  75. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +27 -27
  76. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionList.mjs +2 -0
  77. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +2 -0
  78. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +32 -32
  79. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +18 -18
  80. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/model.mjs +15 -15
  81. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +1 -1
  82. package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +12 -12
  83. package/{esm2020 → esm2022}/lib/smart-filter/api/value/model/value.mjs +12 -12
  84. package/{esm2020 → esm2022}/lib/smart-filter/projects.mjs +8 -8
  85. package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +14 -14
  86. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +165 -0
  87. package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +45 -45
  88. package/esm2022/lib/smart-filter/smart-filter/smart-filter.component.mjs +36 -0
  89. package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/smart-filter.service.mjs +31 -31
  90. package/{esm2020 → esm2022}/lib/smart-filter/smart-filter.model.mjs +12 -12
  91. package/esm2022/lib/smart-filter/smart-filter.module.mjs +33 -0
  92. package/esm2022/lib/smart-filter-editor/api/api/filter.service.mjs +198 -0
  93. package/esm2022/lib/smart-filter-editor/api/configuration.mjs +91 -0
  94. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/encoder.mjs +19 -19
  95. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +17 -17
  96. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +13 -0
  97. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +2 -0
  98. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +8 -0
  99. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +2 -0
  100. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +7 -0
  101. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionData.mjs +2 -0
  102. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +20 -20
  103. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionField.mjs +1 -1
  104. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +2 -0
  105. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +2 -0
  106. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +27 -27
  107. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionList.mjs +2 -0
  108. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +2 -0
  109. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +32 -32
  110. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionOrderBy.mjs +18 -18
  111. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/smartFilterType.mjs +17 -17
  112. package/esm2022/lib/smart-filter-editor/api/param.mjs +2 -0
  113. package/{esm2020 → esm2022}/lib/smart-filter-editor/api/variables.mjs +9 -9
  114. package/{esm2020 → esm2022}/lib/smart-filter-editor/filterExpressionBuilderApiActions.mjs +14 -14
  115. package/{esm2020 → esm2022}/lib/smart-filter-editor/project.mjs +7 -7
  116. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +73 -0
  117. package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +40 -40
  118. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +235 -0
  119. package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-editor.model.mjs +1 -1
  120. package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +69 -0
  121. package/esm2022/lib/smart-filter-editor/smart-filter-editor.service.mjs +47 -0
  122. package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +24 -24
  123. package/esm2022/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +57 -0
  124. package/{esm2020 → esm2022}/lib/smart-form/api/api/api.mjs +3 -3
  125. package/esm2022/lib/smart-form/api/api/default.service.mjs +133 -0
  126. package/esm2022/lib/smart-form/api/api.module.mjs +40 -0
  127. package/esm2022/lib/smart-form/api/configuration.mjs +91 -0
  128. package/{esm2020 → esm2022}/lib/smart-form/api/encoder.mjs +18 -18
  129. package/{esm2020 → esm2022}/lib/smart-form/api/index.mjs +6 -6
  130. package/{esm2020 → esm2022}/lib/smart-form/api/model/models.mjs +10 -10
  131. package/{esm2020 → esm2022}/lib/smart-form/api/model/propertyMapping.mjs +12 -12
  132. package/{esm2020 → esm2022}/lib/smart-form/api/model/selectionDefinition.mjs +6 -6
  133. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormInputMode.mjs +21 -21
  134. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormWidgetDirection.mjs +16 -16
  135. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormWidgetType.mjs +44 -44
  136. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartLayoutDefinition.mjs +1 -1
  137. package/esm2022/lib/smart-form/api/model/smartMatrixModel.mjs +2 -0
  138. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartWidgetDefinition.mjs +1 -1
  139. package/{esm2020 → esm2022}/lib/smart-form/api/model/smartWidgetHint.mjs +17 -17
  140. package/{esm2020 → esm2022}/lib/smart-form/api/model/valueChangeMode.mjs +19 -19
  141. package/{esm2020 → esm2022}/lib/smart-form/api/param.mjs +1 -1
  142. package/{esm2020 → esm2022}/lib/smart-form/api/variables.mjs +8 -8
  143. package/{esm2020 → esm2022}/lib/smart-form/highlightMacthingString-pipe.mjs +20 -20
  144. package/{esm2020 → esm2022}/lib/smart-form/projects.mjs +12 -12
  145. package/esm2022/lib/smart-form/services/smartform.layout-definition.service.mjs +542 -0
  146. package/esm2022/lib/smart-form/services/smartform.service.mjs +640 -0
  147. package/esm2022/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +15 -0
  148. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +78 -0
  149. package/{esm2020 → esm2022}/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +1 -1
  150. package/esm2022/lib/smart-form/smartform.component.mjs +178 -0
  151. package/{esm2020 → esm2022}/lib/smart-form/smartform.form-model.mjs +1 -1
  152. package/{esm2020 → esm2022}/lib/smart-form/smartform.model.mjs +37 -37
  153. package/esm2022/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +84 -0
  154. package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +735 -0
  155. package/esm2022/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +59 -0
  156. package/{esm2020 → esm2022}/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +31 -31
  157. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/api/api.mjs +3 -3
  158. package/esm2022/lib/smart-grid/api/grid-api/api/grid.service.mjs +451 -0
  159. package/esm2022/lib/smart-grid/api/grid-api/api.module.mjs +40 -0
  160. package/esm2022/lib/smart-grid/api/grid-api/configuration.mjs +91 -0
  161. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/encoder.mjs +18 -18
  162. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/index.mjs +6 -6
  163. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +16 -16
  164. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +1 -1
  165. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +19 -19
  166. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridModel.mjs +1 -1
  167. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridPage.mjs +1 -1
  168. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridRow.mjs +1 -1
  169. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionChange.mjs +12 -12
  170. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +17 -17
  171. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +16 -16
  172. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +1 -1
  173. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +1 -1
  174. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridView.mjs +1 -1
  175. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +7 -7
  176. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/models.mjs +13 -13
  177. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/param.mjs +1 -1
  178. package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/variables.mjs +8 -8
  179. package/{esm2020 → esm2022}/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +20 -20
  180. package/esm2022/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +61 -0
  181. package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +182 -0
  182. package/{esm2020 → esm2022}/lib/smart-grid/models/model.mjs +28 -28
  183. package/{esm2020 → esm2022}/lib/smart-grid/projects.mjs +8 -8
  184. package/esm2022/lib/smart-grid/smart-grid.component.mjs +767 -0
  185. package/esm2022/lib/smart-grid/smart-grid.module.mjs +76 -0
  186. package/esm2022/lib/smart-grid/smart-grid.service.mjs +80 -0
  187. package/{esm2020 → esm2022}/lib/smart-icon/projects.mjs +6 -6
  188. package/esm2022/lib/smart-icon/smart-icon/smart-icon.component.mjs +40 -0
  189. package/esm2022/lib/smart-icon/smart-icon.module.mjs +22 -0
  190. package/esm2022/lib/smart-icon/smart-icon.service.mjs +74 -0
  191. package/{esm2020 → esm2022}/lib/smart-navbar/projects.mjs +7 -7
  192. package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +61 -0
  193. package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar.model.mjs +5 -5
  194. package/esm2022/lib/smart-navbar/smart-navbar.module.mjs +63 -0
  195. package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar.service.mjs +14 -14
  196. package/{esm2020 → esm2022}/lib/smart-navigation/projects.mjs +5 -5
  197. package/{esm2020 → esm2022}/lib/smart-navigation/smart-navigation.interface.mjs +1 -1
  198. package/esm2022/lib/smart-navigation/smart-navigation.module.mjs +18 -0
  199. package/esm2022/lib/smart-navigation/smart-navigation.service.mjs +56 -0
  200. package/esm2022/lib/smart-ng-client.module.mjs +126 -0
  201. package/{esm2020 → esm2022}/lib/smart-ng-client.service.mjs +19 -19
  202. package/{esm2020 → esm2022}/lib/smart-subject/projects.mjs +4 -4
  203. package/esm2022/lib/smart-subject/smart-subject.mjs +21 -0
  204. package/{esm2020 → esm2022}/lib/smart-tab-group/projects.mjs +8 -8
  205. package/esm2022/lib/smart-tab-group/smart-tab-group.component.mjs +43 -0
  206. package/esm2022/lib/smart-tab-group/smart-tab-group.module.mjs +25 -0
  207. package/{esm2020 → esm2022}/lib/smart-tab-group/smart-tab-group.service.mjs +14 -14
  208. package/esm2022/lib/smart-tab-group/tab-content/tab-content.component.mjs +31 -0
  209. package/esm2022/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +66 -0
  210. package/{esm2020 → esm2022}/lib/smart-tab-group/tabTile.model.mjs +1 -1
  211. package/esm2022/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +43 -0
  212. package/{esm2020 → esm2022}/lib/smart-table/components/loading/loading.component.mjs +15 -15
  213. package/esm2022/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +52 -0
  214. package/{esm2020 → esm2022}/lib/smart-table/projects.mjs +7 -7
  215. package/esm2022/lib/smart-table/smarttable.component.mjs +98 -0
  216. package/esm2022/lib/smart-table/smarttable.model.mjs +169 -0
  217. package/esm2022/lib/smart-table/smarttable.module.mjs +105 -0
  218. package/{esm2020 → esm2022}/lib/smart-table/smarttable.service.mjs +14 -14
  219. package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +39 -0
  220. package/{esm2020 → esm2022}/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +23 -23
  221. package/esm2022/lib/smart-table/tables/table.mjs +520 -0
  222. package/{esm2020 → esm2022}/lib/smart-tree/projects.mjs +8 -8
  223. package/esm2022/lib/smart-tree/smarttree-generic.service.mjs +288 -0
  224. package/esm2022/lib/smart-tree/smarttree.component.mjs +181 -0
  225. package/{esm2020 → esm2022}/lib/smart-tree/smarttree.model.mjs +6 -6
  226. package/esm2022/lib/smart-tree/smarttree.module.mjs +60 -0
  227. package/{esm2020 → esm2022}/lib/smart-tree/smarttree.node.model.mjs +5 -5
  228. package/{esm2020 → esm2022}/lib/smart-tree/smarttree.service.interface.mjs +1 -1
  229. package/esm2022/lib/smart-tree/smarttree.service.mjs +47 -0
  230. package/esm2022/lib/smart-tree/tree-api/api/tree.service.mjs +1190 -0
  231. package/esm2022/lib/smart-tree/tree-api/configuration.mjs +91 -0
  232. package/{esm2020 → esm2022}/lib/smart-tree/tree-api/encoder.mjs +19 -19
  233. package/esm2022/lib/smart-tree/tree-api/param.mjs +2 -0
  234. package/{esm2020 → esm2022}/lib/smart-tree/tree-api/variables.mjs +9 -9
  235. package/{esm2020 → esm2022}/lib/view-context/api/api/api.mjs +3 -3
  236. package/esm2022/lib/view-context/api/api/view.service.mjs +903 -0
  237. package/esm2022/lib/view-context/api/api.module.mjs +40 -0
  238. package/esm2022/lib/view-context/api/configuration.mjs +91 -0
  239. package/{esm2020 → esm2022}/lib/view-context/api/encoder.mjs +18 -18
  240. package/{esm2020 → esm2022}/lib/view-context/api/index.mjs +6 -6
  241. package/esm2022/lib/view-context/api/model/clipboardData.mjs +13 -0
  242. package/{esm2020 → esm2022}/lib/view-context/api/model/closeResult.mjs +17 -17
  243. package/{esm2020 → esm2022}/lib/view-context/api/model/componentConstraint.mjs +1 -1
  244. package/{esm2020 → esm2022}/lib/view-context/api/model/componentModel.mjs +1 -1
  245. package/{esm2020 → esm2022}/lib/view-context/api/model/componentModelChange.mjs +12 -12
  246. package/{esm2020 → esm2022}/lib/view-context/api/model/dataChange.mjs +1 -1
  247. package/{esm2020 → esm2022}/lib/view-context/api/model/dataChangeEvent.mjs +1 -1
  248. package/{esm2020 → esm2022}/lib/view-context/api/model/dataChangeKind.mjs +20 -20
  249. package/{esm2020 → esm2022}/lib/view-context/api/model/downloadedFile.mjs +12 -12
  250. package/{esm2020 → esm2022}/lib/view-context/api/model/iconPosition.mjs +19 -19
  251. package/{esm2020 → esm2022}/lib/view-context/api/model/imageResource.mjs +7 -7
  252. package/{esm2020 → esm2022}/lib/view-context/api/model/link.mjs +19 -19
  253. package/{esm2020 → esm2022}/lib/view-context/api/model/messageData.mjs +1 -1
  254. package/{esm2020 → esm2022}/lib/view-context/api/model/messageOption.mjs +1 -1
  255. package/{esm2020 → esm2022}/lib/view-context/api/model/messageOptionType.mjs +17 -17
  256. package/{esm2020 → esm2022}/lib/view-context/api/model/messageResult.mjs +1 -1
  257. package/{esm2020 → esm2022}/lib/view-context/api/model/messageTextType.mjs +16 -16
  258. package/{esm2020 → esm2022}/lib/view-context/api/model/messageType.mjs +18 -18
  259. package/{esm2020 → esm2022}/lib/view-context/api/model/models.mjs +52 -52
  260. package/{esm2020 → esm2022}/lib/view-context/api/model/openPendingData.mjs +1 -1
  261. package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestExecutionStat.mjs +1 -1
  262. package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestTrack.mjs +1 -1
  263. package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestType.mjs +23 -23
  264. package/{esm2020 → esm2022}/lib/view-context/api/model/smartLinkData.mjs +1 -1
  265. package/{esm2020 → esm2022}/lib/view-context/api/model/statisticRecord.mjs +12 -12
  266. package/{esm2020 → esm2022}/lib/view-context/api/model/style.mjs +12 -12
  267. package/{esm2020 → esm2022}/lib/view-context/api/model/uiAction.mjs +1 -1
  268. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionButtonDescriptor.mjs +12 -12
  269. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionButtonType.mjs +26 -26
  270. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionConstraint.mjs +12 -12
  271. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionDescriptor.mjs +1 -1
  272. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionDialogDescriptor.mjs +1 -1
  273. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionFeedbackType.mjs +19 -19
  274. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionInputType.mjs +20 -20
  275. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionRequest.mjs +12 -12
  276. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionTooltip.mjs +21 -21
  277. package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionUploadDescriptor.mjs +12 -12
  278. package/{esm2020 → esm2022}/lib/view-context/api/model/uploadedFile.mjs +12 -12
  279. package/{esm2020 → esm2022}/lib/view-context/api/model/valueSet.mjs +1 -1
  280. package/esm2022/lib/view-context/api/model/view.mjs +2 -0
  281. package/{esm2020 → esm2022}/lib/view-context/api/model/viewApiError.mjs +12 -12
  282. package/{esm2020 → esm2022}/lib/view-context/api/model/viewConstraint.mjs +1 -1
  283. package/esm2022/lib/view-context/api/model/viewContext.mjs +2 -0
  284. package/{esm2020 → esm2022}/lib/view-context/api/model/viewContextChange.mjs +1 -1
  285. package/esm2022/lib/view-context/api/model/viewContextData.mjs +2 -0
  286. package/{esm2020 → esm2022}/lib/view-context/api/model/viewContextUpdate.mjs +1 -1
  287. package/{esm2020 → esm2022}/lib/view-context/api/model/viewData.mjs +1 -1
  288. package/{esm2020 → esm2022}/lib/view-context/api/model/viewEventHandler.mjs +17 -17
  289. package/esm2022/lib/view-context/api/model/viewPlaceholder.mjs +13 -0
  290. package/{esm2020 → esm2022}/lib/view-context/api/model/viewState.mjs +21 -21
  291. package/{esm2020 → esm2022}/lib/view-context/api/model/viewStateUpdate.mjs +1 -1
  292. package/{esm2020 → esm2022}/lib/view-context/api/model/viewType.mjs +17 -17
  293. package/{esm2020 → esm2022}/lib/view-context/api/param.mjs +1 -1
  294. package/{esm2020 → esm2022}/lib/view-context/api/variables.mjs +8 -8
  295. package/esm2022/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +20 -0
  296. package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +66 -0
  297. package/{esm2020 → esm2022}/lib/view-context/projects.mjs +16 -16
  298. package/{esm2020 → esm2022}/lib/view-context/property-definition-data.mjs +1 -1
  299. package/esm2022/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +30 -0
  300. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +56 -56
  301. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +48 -48
  302. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +72 -0
  303. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +53 -53
  304. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +126 -0
  305. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +52 -52
  306. package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +146 -0
  307. package/esm2022/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +180 -0
  308. package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/ui-action.model.mjs +6 -6
  309. package/esm2022/lib/view-context/smart-ui-action/ui-action.service.mjs +211 -0
  310. package/esm2022/lib/view-context/smart-view-context-dialog.service.mjs +54 -0
  311. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +29 -0
  312. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +69 -0
  313. package/esm2022/lib/view-context/smart-view-context.interceptor.mjs +39 -0
  314. package/{esm2020 → esm2022}/lib/view-context/smart-view-context.model.mjs +1 -1
  315. package/esm2022/lib/view-context/smart-view-context.module.mjs +221 -0
  316. package/esm2022/lib/view-context/smart-view-context.service.mjs +685 -0
  317. package/esm2022/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +33 -0
  318. package/esm2022/lib/view-context/utility/smart-object-utility.mjs +30 -0
  319. package/esm2022/lib/view-context/utility/smart-style-utility.mjs +68 -0
  320. package/{esm2020 → esm2022}/lib/view-context/value-api/api/api.mjs +4 -4
  321. package/esm2022/lib/view-context/value-api/api/value.service.mjs +138 -0
  322. package/esm2022/lib/view-context/value-api/api.module.mjs +40 -0
  323. package/esm2022/lib/view-context/value-api/configuration.mjs +91 -0
  324. package/{esm2020 → esm2022}/lib/view-context/value-api/encoder.mjs +19 -19
  325. package/{esm2020 → esm2022}/lib/view-context/value-api/index.mjs +7 -7
  326. package/esm2022/lib/view-context/value-api/model/genericValue.mjs +13 -0
  327. package/{esm2020 → esm2022}/lib/view-context/value-api/model/models.mjs +11 -11
  328. package/esm2022/lib/view-context/value-api/model/value.mjs +13 -0
  329. package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetData.mjs +1 -1
  330. package/esm2022/lib/view-context/value-api/model/valueSetDefinition.mjs +2 -0
  331. package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetDefinitionData.mjs +1 -1
  332. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +13 -0
  333. package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +23 -23
  334. package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetExpression.mjs +1 -1
  335. package/esm2022/lib/view-context/value-api/model/valueSetOperand.mjs +2 -0
  336. package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetOperation.mjs +18 -18
  337. package/esm2022/lib/view-context/value-api/param.mjs +2 -0
  338. package/{esm2020 → esm2022}/lib/view-context/value-api/variables.mjs +9 -9
  339. package/{esm2020 → esm2022}/projects.mjs +25 -25
  340. package/{esm2020 → esm2022}/smartbit4all-ng-client.mjs +4 -4
  341. package/{fesm2020 → fesm2022}/smartbit4all-ng-client.mjs +15903 -15913
  342. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -0
  343. package/{smartbit4all-ng-client.d.ts → index.d.ts} +5 -5
  344. package/lib/component-factory-service/component-factory-service.module.d.ts +6 -6
  345. package/lib/component-factory-service/component-factory-service.service.d.ts +13 -13
  346. package/lib/component-factory-service/projects.d.ts +2 -2
  347. package/lib/session/api/api/api.d.ts +3 -3
  348. package/lib/session/api/api/session.service.d.ts +107 -107
  349. package/lib/session/api/configuration.d.ts +104 -104
  350. package/lib/session/api/encoder.d.ts +11 -11
  351. package/lib/session/api/index.d.ts +2 -2
  352. package/lib/session/api/model/accountInfo.d.ts +22 -22
  353. package/lib/session/api/model/apiError.d.ts +15 -15
  354. package/lib/session/api/model/authenticationProviderData.d.ts +17 -17
  355. package/lib/session/api/model/getAuthenticationProvidersResponse.d.ts +15 -15
  356. package/lib/session/api/model/models.d.ts +8 -8
  357. package/lib/session/api/model/refreshSessionRequest.d.ts +14 -14
  358. package/lib/session/api/model/session.d.ts +32 -32
  359. package/lib/session/api/model/sessionInfoData.d.ts +26 -26
  360. package/lib/session/api/model/userActivityLog.d.ts +33 -33
  361. package/lib/session/api/param.d.ts +37 -37
  362. package/lib/session/api/variables.d.ts +8 -8
  363. package/lib/session/cookie-service/smart-cookie.service.d.ts +129 -129
  364. package/lib/session/projects.d.ts +6 -6
  365. package/lib/session/smart-error-catching.interceptor.d.ts +13 -13
  366. package/lib/session/smart-header-maintainer.interceptor.d.ts +11 -11
  367. package/lib/session/smart-session-handler.service.d.ts +11 -11
  368. package/lib/session/smart-session.module.d.ts +12 -12
  369. package/lib/session/smart-session.service.d.ts +54 -54
  370. package/lib/session/smart-timer/smart-session-timer.component.d.ts +14 -14
  371. package/lib/session/smart-timer/smart-session-timer.service.d.ts +21 -21
  372. package/lib/shared/projects.d.ts +3 -3
  373. package/lib/shared/shared.module.d.ts +9 -9
  374. package/lib/shared/smart-tooltip.directive.d.ts +16 -16
  375. package/lib/shared/smarttable.date-pipe.d.ts +18 -18
  376. package/lib/smart-client/projects.d.ts +4 -4
  377. package/lib/smart-client/smart-authentication.service.d.ts +15 -15
  378. package/lib/smart-client/smart-component-api-client.d.ts +111 -111
  379. package/lib/smart-client/smart-file-uploader/smart-file-uploader.component.d.ts +18 -18
  380. package/lib/smart-client/smart.component.d.ts +30 -30
  381. package/lib/smart-client/smart.service.d.ts +30 -30
  382. package/lib/smart-component-layout/api/api/api.d.ts +3 -3
  383. package/lib/smart-component-layout/api/api/default.service.d.ts +33 -33
  384. package/lib/smart-component-layout/api/api.module.d.ts +11 -11
  385. package/lib/smart-component-layout/api/configuration.d.ts +104 -104
  386. package/lib/smart-component-layout/api/encoder.d.ts +11 -11
  387. package/lib/smart-component-layout/api/index.d.ts +6 -6
  388. package/lib/smart-component-layout/api/model/componentType.d.ts +16 -16
  389. package/lib/smart-component-layout/api/model/componentWidgetType.d.ts +17 -17
  390. package/lib/smart-component-layout/api/model/layoutDirection.d.ts +15 -15
  391. package/lib/smart-component-layout/api/model/models.d.ts +5 -5
  392. package/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.d.ts +26 -26
  393. package/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.d.ts +20 -20
  394. package/lib/smart-component-layout/api/param.d.ts +37 -37
  395. package/lib/smart-component-layout/api/variables.d.ts +8 -8
  396. package/lib/smart-component-layout/projects.d.ts +4 -4
  397. package/lib/smart-component-layout/smart-component-layout-utility.d.ts +14 -14
  398. package/lib/smart-component-layout/smart-component-layout.component.d.ts +58 -58
  399. package/lib/smart-component-layout/smart-component-layout.module.d.ts +13 -13
  400. package/lib/smart-dialog/projects.d.ts +4 -4
  401. package/lib/smart-dialog/smartdialog.component.d.ts +19 -19
  402. package/lib/smart-dialog/smartdialog.model.d.ts +67 -67
  403. package/lib/smart-dialog/smartdialog.module.d.ts +14 -14
  404. package/lib/smart-dialog/smartdialog.service.d.ts +23 -23
  405. package/lib/smart-expandable-section/expandable-section.component.d.ts +25 -25
  406. package/lib/smart-expandable-section/expandable-section.model.d.ts +42 -42
  407. package/lib/smart-expandable-section/projects.d.ts +4 -4
  408. package/lib/smart-expandable-section/smart-expandable-section.module.d.ts +15 -15
  409. package/lib/smart-expandable-section/smart-expandable-section.service.d.ts +6 -6
  410. package/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.d.ts +15 -15
  411. package/lib/smart-filter/api/filter/model/filterExpressionBuilderField.d.ts +27 -27
  412. package/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.d.ts +36 -36
  413. package/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.d.ts +27 -27
  414. package/lib/smart-filter/api/filter/model/filterExpressionData.d.ts +27 -27
  415. package/lib/smart-filter/api/filter/model/filterExpressionDataType.d.ts +18 -18
  416. package/lib/smart-filter/api/filter/model/filterExpressionField.d.ts +40 -40
  417. package/lib/smart-filter/api/filter/model/filterExpressionFieldList.d.ts +21 -21
  418. package/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.d.ts +25 -25
  419. package/lib/smart-filter/api/filter/model/filterExpressionList.d.ts +18 -18
  420. package/lib/smart-filter/api/filter/model/filterExpressionOperandData.d.ts +24 -24
  421. package/lib/smart-filter/api/filter/model/filterExpressionOperation.d.ts +30 -30
  422. package/lib/smart-filter/api/filter/model/filterExpressionOrderBy.d.ts +25 -25
  423. package/lib/smart-filter/api/filter/model/model.d.ts +15 -15
  424. package/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.d.ts +19 -19
  425. package/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.d.ts +18 -18
  426. package/lib/smart-filter/api/value/model/value.d.ts +29 -29
  427. package/lib/smart-filter/projects.d.ts +5 -5
  428. package/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.d.ts +8 -8
  429. package/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.d.ts +31 -31
  430. package/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.d.ts +18 -18
  431. package/lib/smart-filter/smart-filter/smart-filter.component.d.ts +15 -15
  432. package/lib/smart-filter/smart-filter/smart-filter.service.d.ts +16 -16
  433. package/lib/smart-filter/smart-filter.model.d.ts +25 -25
  434. package/lib/smart-filter/smart-filter.module.d.ts +15 -15
  435. package/lib/smart-filter-editor/api/api/filter.service.d.ts +57 -57
  436. package/lib/smart-filter-editor/api/configuration.d.ts +104 -104
  437. package/lib/smart-filter-editor/api/encoder.d.ts +11 -11
  438. package/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.d.ts +15 -15
  439. package/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.d.ts +16 -16
  440. package/lib/smart-filter-editor/api/model/filterExpressionBuilderField.d.ts +27 -27
  441. package/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.d.ts +36 -36
  442. package/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.d.ts +27 -27
  443. package/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.d.ts +38 -38
  444. package/lib/smart-filter-editor/api/model/filterExpressionData.d.ts +27 -27
  445. package/lib/smart-filter-editor/api/model/filterExpressionDataType.d.ts +18 -18
  446. package/lib/smart-filter-editor/api/model/filterExpressionField.d.ts +40 -40
  447. package/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.d.ts +17 -17
  448. package/lib/smart-filter-editor/api/model/filterExpressionFieldList.d.ts +21 -21
  449. package/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.d.ts +25 -25
  450. package/lib/smart-filter-editor/api/model/filterExpressionList.d.ts +18 -18
  451. package/lib/smart-filter-editor/api/model/filterExpressionOperandData.d.ts +24 -24
  452. package/lib/smart-filter-editor/api/model/filterExpressionOperation.d.ts +30 -30
  453. package/lib/smart-filter-editor/api/model/filterExpressionOrderBy.d.ts +28 -28
  454. package/lib/smart-filter-editor/api/model/smartFilterType.d.ts +15 -15
  455. package/lib/smart-filter-editor/api/param.d.ts +37 -37
  456. package/lib/smart-filter-editor/api/variables.d.ts +8 -8
  457. package/lib/smart-filter-editor/filterExpressionBuilderApiActions.d.ts +13 -13
  458. package/lib/smart-filter-editor/project.d.ts +7 -7
  459. package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.d.ts +19 -19
  460. package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.d.ts +17 -17
  461. package/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.d.ts +40 -40
  462. package/lib/smart-filter-editor/smart-filter-editor.model.d.ts +4 -4
  463. package/lib/smart-filter-editor/smart-filter-editor.module.d.ts +18 -18
  464. package/lib/smart-filter-editor/smart-filter-editor.service.d.ts +35 -35
  465. package/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.d.ts +9 -9
  466. package/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.d.ts +21 -21
  467. package/lib/smart-form/api/api/api.d.ts +3 -3
  468. package/lib/smart-form/api/api/default.service.d.ts +33 -33
  469. package/lib/smart-form/api/api.module.d.ts +11 -11
  470. package/lib/smart-form/api/configuration.d.ts +104 -104
  471. package/lib/smart-form/api/encoder.d.ts +11 -11
  472. package/lib/smart-form/api/index.d.ts +6 -6
  473. package/lib/smart-form/api/model/models.d.ts +10 -10
  474. package/lib/smart-form/api/model/propertyMapping.d.ts +24 -24
  475. package/lib/smart-form/api/model/selectionDefinition.d.ts +41 -41
  476. package/lib/smart-form/api/model/smartFormInputMode.d.ts +20 -20
  477. package/lib/smart-form/api/model/smartFormWidgetDirection.d.ts +15 -15
  478. package/lib/smart-form/api/model/smartFormWidgetType.d.ts +43 -43
  479. package/lib/smart-form/api/model/smartLayoutDefinition.d.ts +15 -15
  480. package/lib/smart-form/api/model/smartMatrixModel.d.ts +29 -29
  481. package/lib/smart-form/api/model/smartWidgetDefinition.d.ts +106 -106
  482. package/lib/smart-form/api/model/smartWidgetHint.d.ts +19 -19
  483. package/lib/smart-form/api/model/valueChangeMode.d.ts +18 -18
  484. package/lib/smart-form/api/param.d.ts +37 -37
  485. package/lib/smart-form/api/variables.d.ts +8 -8
  486. package/lib/smart-form/highlightMacthingString-pipe.d.ts +7 -7
  487. package/lib/smart-form/projects.d.ts +9 -9
  488. package/lib/smart-form/services/smartform.layout-definition.service.d.ts +45 -45
  489. package/lib/smart-form/services/smartform.service.d.ts +46 -46
  490. package/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.d.ts +8 -8
  491. package/lib/smart-form/smartfileuploader/smartfileuploader.component.d.ts +22 -22
  492. package/lib/smart-form/smartfileuploader/smartfileuploader.model.d.ts +7 -7
  493. package/lib/smart-form/smartform.component.d.ts +40 -40
  494. package/lib/smart-form/smartform.form-model.d.ts +631 -631
  495. package/lib/smart-form/smartform.model.d.ts +120 -120
  496. package/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.d.ts +29 -29
  497. package/lib/smart-form/widgets/smartformwidget/smartformwidget.component.d.ts +132 -132
  498. package/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.d.ts +20 -20
  499. package/lib/smart-form/widgets/smartformwidget/trackCaps.directive.d.ts +9 -9
  500. package/lib/smart-grid/api/grid-api/api/api.d.ts +3 -3
  501. package/lib/smart-grid/api/grid-api/api/grid.service.d.ts +161 -161
  502. package/lib/smart-grid/api/grid-api/api.module.d.ts +11 -11
  503. package/lib/smart-grid/api/grid-api/configuration.d.ts +104 -104
  504. package/lib/smart-grid/api/grid-api/encoder.d.ts +11 -11
  505. package/lib/smart-grid/api/grid-api/index.d.ts +6 -6
  506. package/lib/smart-grid/api/grid-api/model/gridColumnContentType.d.ts +15 -15
  507. package/lib/smart-grid/api/grid-api/model/gridColumnMeta.d.ts +33 -33
  508. package/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.d.ts +40 -40
  509. package/lib/smart-grid/api/grid-api/model/gridModel.d.ts +34 -34
  510. package/lib/smart-grid/api/grid-api/model/gridPage.d.ts +26 -26
  511. package/lib/smart-grid/api/grid-api/model/gridRow.d.ts +39 -39
  512. package/lib/smart-grid/api/grid-api/model/gridSelectionChange.d.ts +18 -18
  513. package/lib/smart-grid/api/grid-api/model/gridSelectionMode.d.ts +16 -16
  514. package/lib/smart-grid/api/grid-api/model/gridSelectionType.d.ts +15 -15
  515. package/lib/smart-grid/api/grid-api/model/gridServerModel.d.ts +22 -22
  516. package/lib/smart-grid/api/grid-api/model/gridUpdateData.d.ts +20 -20
  517. package/lib/smart-grid/api/grid-api/model/gridView.d.ts +21 -21
  518. package/lib/smart-grid/api/grid-api/model/gridViewDescriptor.d.ts +37 -37
  519. package/lib/smart-grid/api/grid-api/model/models.d.ts +13 -13
  520. package/lib/smart-grid/api/grid-api/param.d.ts +37 -37
  521. package/lib/smart-grid/api/grid-api/variables.d.ts +8 -8
  522. package/lib/smart-grid/components/expandable-grid/expandable-grid.component.d.ts +10 -10
  523. package/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.d.ts +23 -23
  524. package/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.d.ts +46 -46
  525. package/lib/smart-grid/models/model.d.ts +71 -71
  526. package/lib/smart-grid/projects.d.ts +5 -5
  527. package/lib/smart-grid/smart-grid.component.d.ts +103 -103
  528. package/lib/smart-grid/smart-grid.module.d.ts +22 -22
  529. package/lib/smart-grid/smart-grid.service.d.ts +23 -23
  530. package/lib/smart-icon/projects.d.ts +3 -3
  531. package/lib/smart-icon/smart-icon/smart-icon.component.d.ts +16 -16
  532. package/lib/smart-icon/smart-icon.module.d.ts +10 -10
  533. package/lib/smart-icon/smart-icon.service.d.ts +28 -28
  534. package/lib/smart-navbar/projects.d.ts +4 -4
  535. package/lib/smart-navbar/smart-navbar.component.d.ts +20 -20
  536. package/lib/smart-navbar/smart-navbar.model.d.ts +48 -48
  537. package/lib/smart-navbar/smart-navbar.module.d.ts +18 -18
  538. package/lib/smart-navbar/smart-navbar.service.d.ts +6 -6
  539. package/lib/smart-navigation/projects.d.ts +2 -2
  540. package/lib/smart-navigation/smart-navigation.interface.d.ts +11 -11
  541. package/lib/smart-navigation/smart-navigation.module.d.ts +6 -6
  542. package/lib/smart-navigation/smart-navigation.service.d.ts +18 -18
  543. package/lib/smart-ng-client.module.d.ts +24 -24
  544. package/lib/smart-ng-client.service.d.ts +10 -10
  545. package/lib/smart-subject/projects.d.ts +1 -1
  546. package/lib/smart-subject/smart-subject.d.ts +6 -6
  547. package/lib/smart-tab-group/projects.d.ts +5 -5
  548. package/lib/smart-tab-group/smart-tab-group.component.d.ts +21 -21
  549. package/lib/smart-tab-group/smart-tab-group.module.d.ts +13 -13
  550. package/lib/smart-tab-group/smart-tab-group.service.d.ts +6 -6
  551. package/lib/smart-tab-group/tab-content/tab-content.component.d.ts +14 -14
  552. package/lib/smart-tab-group/tab-group-simplified/tab-group.component.d.ts +29 -29
  553. package/lib/smart-tab-group/tabTile.model.d.ts +8 -8
  554. package/lib/smart-table/components/default-actions-popup/default-actions-popup.component.d.ts +19 -19
  555. package/lib/smart-table/components/loading/loading.component.d.ts +8 -8
  556. package/lib/smart-table/directives/mat-context-menu-trigger-for.directive.d.ts +10 -10
  557. package/lib/smart-table/projects.d.ts +4 -4
  558. package/lib/smart-table/smarttable.component.d.ts +34 -34
  559. package/lib/smart-table/smarttable.model.d.ts +198 -198
  560. package/lib/smart-table/smarttable.module.d.ts +28 -28
  561. package/lib/smart-table/smarttable.service.d.ts +6 -6
  562. package/lib/smart-table/tables/material-table/material-table.component.d.ts +8 -8
  563. package/lib/smart-table/tables/mobile-table/mobile-table.component.d.ts +8 -8
  564. package/lib/smart-table/tables/table.d.ts +85 -85
  565. package/lib/smart-tree/projects.d.ts +5 -5
  566. package/lib/smart-tree/smarttree-generic.service.d.ts +49 -49
  567. package/lib/smart-tree/smarttree.component.d.ts +42 -42
  568. package/lib/smart-tree/smarttree.model.d.ts +41 -41
  569. package/lib/smart-tree/smarttree.module.d.ts +15 -15
  570. package/lib/smart-tree/smarttree.node.model.d.ts +13 -13
  571. package/lib/smart-tree/smarttree.service.d.ts +24 -24
  572. package/lib/smart-tree/smarttree.service.interface.d.ts +43 -43
  573. package/lib/smart-tree/tree-api/api/tree.service.d.ts +336 -336
  574. package/lib/smart-tree/tree-api/configuration.d.ts +104 -104
  575. package/lib/smart-tree/tree-api/encoder.d.ts +11 -11
  576. package/lib/smart-tree/tree-api/param.d.ts +37 -37
  577. package/lib/smart-tree/tree-api/variables.d.ts +8 -8
  578. package/lib/view-context/api/api/api.d.ts +3 -3
  579. package/lib/view-context/api/api/view.service.d.ts +331 -331
  580. package/lib/view-context/api/api.module.d.ts +11 -11
  581. package/lib/view-context/api/configuration.d.ts +104 -104
  582. package/lib/view-context/api/encoder.d.ts +11 -11
  583. package/lib/view-context/api/index.d.ts +6 -6
  584. package/lib/view-context/api/model/clipboardData.d.ts +20 -20
  585. package/lib/view-context/api/model/closeResult.d.ts +16 -16
  586. package/lib/view-context/api/model/componentConstraint.d.ts +25 -25
  587. package/lib/view-context/api/model/componentModel.d.ts +42 -42
  588. package/lib/view-context/api/model/componentModelChange.d.ts +29 -29
  589. package/lib/view-context/api/model/dataChange.d.ts +25 -25
  590. package/lib/view-context/api/model/dataChangeEvent.d.ts +31 -31
  591. package/lib/view-context/api/model/dataChangeKind.d.ts +19 -19
  592. package/lib/view-context/api/model/downloadedFile.d.ts +19 -19
  593. package/lib/view-context/api/model/iconPosition.d.ts +18 -18
  594. package/lib/view-context/api/model/imageResource.d.ts +26 -26
  595. package/lib/view-context/api/model/link.d.ts +35 -35
  596. package/lib/view-context/api/model/messageData.d.ts +29 -29
  597. package/lib/view-context/api/model/messageOption.d.ts +18 -18
  598. package/lib/view-context/api/model/messageOptionType.d.ts +16 -16
  599. package/lib/view-context/api/model/messageResult.d.ts +16 -16
  600. package/lib/view-context/api/model/messageTextType.d.ts +15 -15
  601. package/lib/view-context/api/model/messageType.d.ts +17 -17
  602. package/lib/view-context/api/model/models.d.ts +51 -51
  603. package/lib/view-context/api/model/openPendingData.d.ts +29 -29
  604. package/lib/view-context/api/model/serverRequestExecutionStat.d.ts +40 -40
  605. package/lib/view-context/api/model/serverRequestTrack.d.ts +60 -60
  606. package/lib/view-context/api/model/serverRequestType.d.ts +22 -22
  607. package/lib/view-context/api/model/smartLinkData.d.ts +21 -21
  608. package/lib/view-context/api/model/statisticRecord.d.ts +36 -36
  609. package/lib/view-context/api/model/style.d.ts +21 -21
  610. package/lib/view-context/api/model/uiAction.d.ts +48 -48
  611. package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +18 -18
  612. package/lib/view-context/api/model/uiActionButtonType.d.ts +25 -25
  613. package/lib/view-context/api/model/uiActionConstraint.d.ts +22 -22
  614. package/lib/view-context/api/model/uiActionDescriptor.d.ts +36 -36
  615. package/lib/view-context/api/model/uiActionDialogDescriptor.d.ts +23 -23
  616. package/lib/view-context/api/model/uiActionFeedbackType.d.ts +18 -18
  617. package/lib/view-context/api/model/uiActionInputType.d.ts +19 -19
  618. package/lib/view-context/api/model/uiActionRequest.d.ts +28 -28
  619. package/lib/view-context/api/model/uiActionTooltip.d.ts +25 -25
  620. package/lib/view-context/api/model/uiActionUploadDescriptor.d.ts +23 -23
  621. package/lib/view-context/api/model/uploadedFile.d.ts +19 -19
  622. package/lib/view-context/api/model/valueSet.d.ts +20 -20
  623. package/lib/view-context/api/model/view.d.ts +80 -80
  624. package/lib/view-context/api/model/viewApiError.d.ts +18 -18
  625. package/lib/view-context/api/model/viewConstraint.d.ts +18 -18
  626. package/lib/view-context/api/model/viewContext.d.ts +30 -30
  627. package/lib/view-context/api/model/viewContextChange.d.ts +24 -24
  628. package/lib/view-context/api/model/viewContextData.d.ts +25 -25
  629. package/lib/view-context/api/model/viewContextUpdate.d.ts +22 -22
  630. package/lib/view-context/api/model/viewData.d.ts +25 -25
  631. package/lib/view-context/api/model/viewEventHandler.d.ts +30 -30
  632. package/lib/view-context/api/model/viewPlaceholder.d.ts +21 -21
  633. package/lib/view-context/api/model/viewState.d.ts +20 -20
  634. package/lib/view-context/api/model/viewStateUpdate.d.ts +22 -22
  635. package/lib/view-context/api/model/viewType.d.ts +16 -16
  636. package/lib/view-context/api/param.d.ts +37 -37
  637. package/lib/view-context/api/variables.d.ts +8 -8
  638. package/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.d.ts +9 -9
  639. package/lib/view-context/message-dialog/message-dialog.component.d.ts +18 -18
  640. package/lib/view-context/projects.d.ts +13 -13
  641. package/lib/view-context/property-definition-data.d.ts +5 -5
  642. package/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.d.ts +13 -13
  643. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.d.ts +25 -25
  644. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +18 -18
  645. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.d.ts +30 -30
  646. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.d.ts +22 -22
  647. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +29 -29
  648. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +25 -25
  649. package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +36 -36
  650. package/lib/view-context/smart-ui-action/ui-action.descriptor.service.d.ts +23 -23
  651. package/lib/view-context/smart-ui-action/ui-action.model.d.ts +43 -43
  652. package/lib/view-context/smart-ui-action/ui-action.service.d.ts +39 -39
  653. package/lib/view-context/smart-view-context-dialog.service.d.ts +16 -16
  654. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.d.ts +13 -13
  655. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +19 -19
  656. package/lib/view-context/smart-view-context.interceptor.d.ts +13 -13
  657. package/lib/view-context/smart-view-context.model.d.ts +31 -31
  658. package/lib/view-context/smart-view-context.module.d.ts +46 -47
  659. package/lib/view-context/smart-view-context.service.d.ts +119 -119
  660. package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +14 -14
  661. package/lib/view-context/utility/smart-object-utility.d.ts +4 -4
  662. package/lib/view-context/utility/smart-style-utility.d.ts +12 -12
  663. package/lib/view-context/value-api/api/api.d.ts +3 -3
  664. package/lib/view-context/value-api/api/value.service.d.ts +35 -35
  665. package/lib/view-context/value-api/api.module.d.ts +11 -11
  666. package/lib/view-context/value-api/configuration.d.ts +104 -104
  667. package/lib/view-context/value-api/encoder.d.ts +11 -11
  668. package/lib/view-context/value-api/index.d.ts +6 -6
  669. package/lib/view-context/value-api/model/genericValue.d.ts +33 -33
  670. package/lib/view-context/value-api/model/models.d.ts +10 -10
  671. package/lib/view-context/value-api/model/value.d.ts +29 -29
  672. package/lib/view-context/value-api/model/valueSetData.d.ts +41 -41
  673. package/lib/view-context/value-api/model/valueSetDefinition.d.ts +16 -16
  674. package/lib/view-context/value-api/model/valueSetDefinitionData.d.ts +53 -53
  675. package/lib/view-context/value-api/model/valueSetDefinitionIdentifier.d.ts +21 -21
  676. package/lib/view-context/value-api/model/valueSetDefinitionKind.d.ts +22 -22
  677. package/lib/view-context/value-api/model/valueSetExpression.d.ts +18 -18
  678. package/lib/view-context/value-api/model/valueSetOperand.d.ts +25 -25
  679. package/lib/view-context/value-api/model/valueSetOperation.d.ts +17 -17
  680. package/lib/view-context/value-api/param.d.ts +37 -37
  681. package/lib/view-context/value-api/variables.d.ts +8 -8
  682. package/package.json +14 -20
  683. package/projects.d.ts +22 -22
  684. package/smartbit4all-ng-client-4.0.1.tgz +0 -0
  685. package/esm2020/lib/component-factory-service/component-factory-service.module.mjs +0 -17
  686. package/esm2020/lib/session/api/api/session.service.mjs +0 -306
  687. package/esm2020/lib/session/api/configuration.mjs +0 -91
  688. package/esm2020/lib/session/api/model/sessionInfoData.mjs +0 -2
  689. package/esm2020/lib/session/cookie-service/smart-cookie.service.mjs +0 -225
  690. package/esm2020/lib/session/smart-error-catching.interceptor.mjs +0 -71
  691. package/esm2020/lib/session/smart-header-maintainer.interceptor.mjs +0 -46
  692. package/esm2020/lib/session/smart-session.module.mjs +0 -58
  693. package/esm2020/lib/session/smart-session.service.mjs +0 -225
  694. package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +0 -58
  695. package/esm2020/lib/shared/shared.module.mjs +0 -19
  696. package/esm2020/lib/shared/smart-tooltip.directive.mjs +0 -58
  697. package/esm2020/lib/smart-client/smart-component-api-client.mjs +0 -717
  698. package/esm2020/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +0 -53
  699. package/esm2020/lib/smart-component-layout/api/api/default.service.mjs +0 -133
  700. package/esm2020/lib/smart-component-layout/api/api.module.mjs +0 -40
  701. package/esm2020/lib/smart-component-layout/api/configuration.mjs +0 -91
  702. package/esm2020/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +0 -2
  703. package/esm2020/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +0 -2
  704. package/esm2020/lib/smart-component-layout/api/param.mjs +0 -2
  705. package/esm2020/lib/smart-component-layout/smart-component-layout-utility.mjs +0 -94
  706. package/esm2020/lib/smart-component-layout/smart-component-layout.component.mjs +0 -259
  707. package/esm2020/lib/smart-component-layout/smart-component-layout.module.mjs +0 -43
  708. package/esm2020/lib/smart-dialog/smartdialog.component.mjs +0 -54
  709. package/esm2020/lib/smart-dialog/smartdialog.module.mjs +0 -48
  710. package/esm2020/lib/smart-expandable-section/expandable-section.component.mjs +0 -88
  711. package/esm2020/lib/smart-expandable-section/smart-expandable-section.module.mjs +0 -51
  712. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +0 -2
  713. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +0 -8
  714. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +0 -2
  715. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionData.mjs +0 -2
  716. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +0 -2
  717. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionList.mjs +0 -2
  718. package/esm2020/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +0 -2
  719. package/esm2020/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +0 -165
  720. package/esm2020/lib/smart-filter/smart-filter/smart-filter.component.mjs +0 -36
  721. package/esm2020/lib/smart-filter/smart-filter.module.mjs +0 -33
  722. package/esm2020/lib/smart-filter-editor/api/api/filter.service.mjs +0 -198
  723. package/esm2020/lib/smart-filter-editor/api/configuration.mjs +0 -91
  724. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +0 -13
  725. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +0 -2
  726. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +0 -8
  727. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +0 -2
  728. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +0 -7
  729. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionData.mjs +0 -2
  730. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +0 -2
  731. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +0 -2
  732. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionList.mjs +0 -2
  733. package/esm2020/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +0 -2
  734. package/esm2020/lib/smart-filter-editor/api/param.mjs +0 -2
  735. package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +0 -73
  736. package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +0 -235
  737. package/esm2020/lib/smart-filter-editor/smart-filter-editor.module.mjs +0 -71
  738. package/esm2020/lib/smart-filter-editor/smart-filter-editor.service.mjs +0 -47
  739. package/esm2020/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +0 -57
  740. package/esm2020/lib/smart-form/api/api/default.service.mjs +0 -133
  741. package/esm2020/lib/smart-form/api/api.module.mjs +0 -40
  742. package/esm2020/lib/smart-form/api/configuration.mjs +0 -91
  743. package/esm2020/lib/smart-form/api/model/smartMatrixModel.mjs +0 -2
  744. package/esm2020/lib/smart-form/services/smartform.layout-definition.service.mjs +0 -542
  745. package/esm2020/lib/smart-form/services/smartform.service.mjs +0 -640
  746. package/esm2020/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +0 -14
  747. package/esm2020/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +0 -78
  748. package/esm2020/lib/smart-form/smartform.component.mjs +0 -178
  749. package/esm2020/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +0 -84
  750. package/esm2020/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +0 -736
  751. package/esm2020/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +0 -59
  752. package/esm2020/lib/smart-grid/api/grid-api/api/grid.service.mjs +0 -451
  753. package/esm2020/lib/smart-grid/api/grid-api/api.module.mjs +0 -40
  754. package/esm2020/lib/smart-grid/api/grid-api/configuration.mjs +0 -91
  755. package/esm2020/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +0 -61
  756. package/esm2020/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +0 -182
  757. package/esm2020/lib/smart-grid/smart-grid.component.mjs +0 -767
  758. package/esm2020/lib/smart-grid/smart-grid.module.mjs +0 -78
  759. package/esm2020/lib/smart-grid/smart-grid.service.mjs +0 -80
  760. package/esm2020/lib/smart-icon/smart-icon/smart-icon.component.mjs +0 -40
  761. package/esm2020/lib/smart-icon/smart-icon.module.mjs +0 -22
  762. package/esm2020/lib/smart-icon/smart-icon.service.mjs +0 -74
  763. package/esm2020/lib/smart-navbar/smart-navbar.component.mjs +0 -61
  764. package/esm2020/lib/smart-navbar/smart-navbar.module.mjs +0 -65
  765. package/esm2020/lib/smart-navigation/smart-navigation.module.mjs +0 -18
  766. package/esm2020/lib/smart-navigation/smart-navigation.service.mjs +0 -56
  767. package/esm2020/lib/smart-ng-client.module.mjs +0 -128
  768. package/esm2020/lib/smart-subject/smart-subject.mjs +0 -21
  769. package/esm2020/lib/smart-tab-group/smart-tab-group.component.mjs +0 -43
  770. package/esm2020/lib/smart-tab-group/smart-tab-group.module.mjs +0 -25
  771. package/esm2020/lib/smart-tab-group/tab-content/tab-content.component.mjs +0 -31
  772. package/esm2020/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +0 -66
  773. package/esm2020/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +0 -43
  774. package/esm2020/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +0 -52
  775. package/esm2020/lib/smart-table/smarttable.component.mjs +0 -98
  776. package/esm2020/lib/smart-table/smarttable.model.mjs +0 -169
  777. package/esm2020/lib/smart-table/smarttable.module.mjs +0 -107
  778. package/esm2020/lib/smart-table/tables/material-table/material-table.component.mjs +0 -39
  779. package/esm2020/lib/smart-table/tables/table.mjs +0 -520
  780. package/esm2020/lib/smart-tree/smarttree-generic.service.mjs +0 -288
  781. package/esm2020/lib/smart-tree/smarttree.component.mjs +0 -181
  782. package/esm2020/lib/smart-tree/smarttree.module.mjs +0 -62
  783. package/esm2020/lib/smart-tree/smarttree.service.mjs +0 -47
  784. package/esm2020/lib/smart-tree/tree-api/api/tree.service.mjs +0 -1190
  785. package/esm2020/lib/smart-tree/tree-api/configuration.mjs +0 -91
  786. package/esm2020/lib/smart-tree/tree-api/param.mjs +0 -2
  787. package/esm2020/lib/view-context/api/api/view.service.mjs +0 -903
  788. package/esm2020/lib/view-context/api/api.module.mjs +0 -40
  789. package/esm2020/lib/view-context/api/configuration.mjs +0 -91
  790. package/esm2020/lib/view-context/api/model/clipboardData.mjs +0 -13
  791. package/esm2020/lib/view-context/api/model/view.mjs +0 -2
  792. package/esm2020/lib/view-context/api/model/viewContext.mjs +0 -2
  793. package/esm2020/lib/view-context/api/model/viewContextData.mjs +0 -2
  794. package/esm2020/lib/view-context/api/model/viewPlaceholder.mjs +0 -13
  795. package/esm2020/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +0 -19
  796. package/esm2020/lib/view-context/message-dialog/message-dialog.component.mjs +0 -66
  797. package/esm2020/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +0 -30
  798. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +0 -72
  799. package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +0 -126
  800. package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +0 -146
  801. package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +0 -180
  802. package/esm2020/lib/view-context/smart-ui-action/ui-action.service.mjs +0 -211
  803. package/esm2020/lib/view-context/smart-view-context-dialog.service.mjs +0 -54
  804. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +0 -29
  805. package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +0 -69
  806. package/esm2020/lib/view-context/smart-view-context.interceptor.mjs +0 -39
  807. package/esm2020/lib/view-context/smart-view-context.module.mjs +0 -222
  808. package/esm2020/lib/view-context/smart-view-context.service.mjs +0 -685
  809. package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +0 -33
  810. package/esm2020/lib/view-context/utility/smart-object-utility.mjs +0 -30
  811. package/esm2020/lib/view-context/utility/smart-style-utility.mjs +0 -68
  812. package/esm2020/lib/view-context/value-api/api/value.service.mjs +0 -138
  813. package/esm2020/lib/view-context/value-api/api.module.mjs +0 -40
  814. package/esm2020/lib/view-context/value-api/configuration.mjs +0 -91
  815. package/esm2020/lib/view-context/value-api/model/genericValue.mjs +0 -13
  816. package/esm2020/lib/view-context/value-api/model/value.mjs +0 -13
  817. package/esm2020/lib/view-context/value-api/model/valueSetDefinition.mjs +0 -2
  818. package/esm2020/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +0 -13
  819. package/esm2020/lib/view-context/value-api/model/valueSetOperand.mjs +0 -2
  820. package/esm2020/lib/view-context/value-api/param.mjs +0 -2
  821. package/fesm2015/smartbit4all-ng-client.mjs +0 -16437
  822. package/fesm2015/smartbit4all-ng-client.mjs.map +0 -1
  823. package/fesm2020/smartbit4all-ng-client.mjs.map +0 -1
  824. package/smartbit4all-ng-client-3.3.206.tgz +0 -0
  825. package/src/lib/component-factory-service/README.md +0 -99
  826. package/src/lib/session/api/README.md +0 -226
  827. package/src/lib/smart-component-layout/README.md +0 -31
  828. package/src/lib/smart-component-layout/api/README.md +0 -226
  829. package/src/lib/smart-dialog/README.md +0 -197
  830. package/src/lib/smart-expandable-section/README.md +0 -249
  831. package/src/lib/smart-filter/README.md +0 -101
  832. package/src/lib/smart-filter-editor/api/README.md +0 -226
  833. package/src/lib/smart-form/README.md +0 -1178
  834. package/src/lib/smart-form/api/README.md +0 -226
  835. package/src/lib/smart-grid/README.md +0 -24
  836. package/src/lib/smart-grid/api/grid-api/README.md +0 -226
  837. package/src/lib/smart-icon/README.md +0 -116
  838. package/src/lib/smart-navbar/README.md +0 -119
  839. package/src/lib/smart-navigation/README.md +0 -141
  840. package/src/lib/smart-tab-group/README.md +0 -155
  841. package/src/lib/smart-table/README.md +0 -667
  842. package/src/lib/smart-tree/tree-api/README.md +0 -226
  843. package/src/lib/view-context/api/README.md +0 -226
  844. package/src/lib/view-context/value-api/README.md +0 -226
@@ -0,0 +1,903 @@
1
+ /**
2
+ * View API
3
+ * View API
4
+ *
5
+ * The version of the OpenAPI document: 1.0.0
6
+ * Contact: info@it4all.hu
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+ /* tslint:disable:no-unused-variable member-ordering */
13
+ import { Inject, Injectable, Optional } from '@angular/core';
14
+ import { HttpHeaders, HttpParams, HttpContext } from '@angular/common/http';
15
+ import { CustomHttpParameterCodec } from '../encoder';
16
+ // @ts-ignore
17
+ import { BASE_PATH, COLLECTION_FORMATS } from '../variables';
18
+ import { Configuration } from '../configuration';
19
+ import * as i0 from "@angular/core";
20
+ import * as i1 from "@angular/common/http";
21
+ import * as i2 from "../configuration";
22
+ export class ViewService {
23
+ constructor(httpClient, basePath, configuration) {
24
+ this.httpClient = httpClient;
25
+ this.basePath = 'http://localhost';
26
+ this.defaultHeaders = new HttpHeaders();
27
+ this.configuration = new Configuration();
28
+ if (configuration) {
29
+ this.configuration = configuration;
30
+ }
31
+ if (typeof this.configuration.basePath !== 'string') {
32
+ if (Array.isArray(basePath) && basePath.length > 0) {
33
+ basePath = basePath[0];
34
+ }
35
+ if (typeof basePath !== 'string') {
36
+ basePath = this.basePath;
37
+ }
38
+ this.configuration.basePath = basePath;
39
+ }
40
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
41
+ }
42
+ /**
43
+ * @param consumes string[] mime-types
44
+ * @return true: consumes contains 'multipart/form-data', false: otherwise
45
+ */
46
+ canConsumeForm(consumes) {
47
+ const form = 'multipart/form-data';
48
+ for (const consume of consumes) {
49
+ if (form === consume) {
50
+ return true;
51
+ }
52
+ }
53
+ return false;
54
+ }
55
+ // @ts-ignore
56
+ addToHttpParams(httpParams, value, key) {
57
+ if (typeof value === "object" && value instanceof Date === false) {
58
+ httpParams = this.addToHttpParamsRecursive(httpParams, value);
59
+ }
60
+ else {
61
+ httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
62
+ }
63
+ return httpParams;
64
+ }
65
+ addToHttpParamsRecursive(httpParams, value, key) {
66
+ if (value == null) {
67
+ return httpParams;
68
+ }
69
+ if (typeof value === "object") {
70
+ if (Array.isArray(value)) {
71
+ value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
72
+ }
73
+ else if (value instanceof Date) {
74
+ if (key != null) {
75
+ httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
76
+ }
77
+ else {
78
+ throw Error("key may not be null if value is Date");
79
+ }
80
+ }
81
+ else {
82
+ Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
83
+ }
84
+ }
85
+ else if (key != null) {
86
+ httpParams = httpParams.append(key, value);
87
+ }
88
+ else {
89
+ throw Error("key may not be null if value is not object or array");
90
+ }
91
+ return httpParams;
92
+ }
93
+ createViewContext(observe = 'body', reportProgress = false, options) {
94
+ let localVarHeaders = this.defaultHeaders;
95
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
96
+ if (localVarHttpHeaderAcceptSelected === undefined) {
97
+ // to determine the Accept header
98
+ const httpHeaderAccepts = [
99
+ 'application/json'
100
+ ];
101
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
102
+ }
103
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
104
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
105
+ }
106
+ let localVarHttpContext = options && options.context;
107
+ if (localVarHttpContext === undefined) {
108
+ localVarHttpContext = new HttpContext();
109
+ }
110
+ let responseType_ = 'json';
111
+ if (localVarHttpHeaderAcceptSelected) {
112
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
113
+ responseType_ = 'text';
114
+ }
115
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
116
+ responseType_ = 'json';
117
+ }
118
+ else {
119
+ responseType_ = 'blob';
120
+ }
121
+ }
122
+ let localVarPath = `/context`;
123
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
124
+ context: localVarHttpContext,
125
+ responseType: responseType_,
126
+ withCredentials: this.configuration.withCredentials,
127
+ headers: localVarHeaders,
128
+ observe: observe,
129
+ reportProgress: reportProgress
130
+ });
131
+ }
132
+ dataChanged(uuid, dataChange, observe = 'body', reportProgress = false, options) {
133
+ if (uuid === null || uuid === undefined) {
134
+ throw new Error('Required parameter uuid was null or undefined when calling dataChanged.');
135
+ }
136
+ if (dataChange === null || dataChange === undefined) {
137
+ throw new Error('Required parameter dataChange was null or undefined when calling dataChanged.');
138
+ }
139
+ let localVarHeaders = this.defaultHeaders;
140
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
141
+ if (localVarHttpHeaderAcceptSelected === undefined) {
142
+ // to determine the Accept header
143
+ const httpHeaderAccepts = [
144
+ 'application/json'
145
+ ];
146
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
147
+ }
148
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
149
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
150
+ }
151
+ let localVarHttpContext = options && options.context;
152
+ if (localVarHttpContext === undefined) {
153
+ localVarHttpContext = new HttpContext();
154
+ }
155
+ // to determine the Content-Type header
156
+ const consumes = [
157
+ 'application/json'
158
+ ];
159
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
160
+ if (httpContentTypeSelected !== undefined) {
161
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
162
+ }
163
+ let responseType_ = 'json';
164
+ if (localVarHttpHeaderAcceptSelected) {
165
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
166
+ responseType_ = 'text';
167
+ }
168
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
169
+ responseType_ = 'json';
170
+ }
171
+ else {
172
+ responseType_ = 'blob';
173
+ }
174
+ }
175
+ let localVarPath = `/component/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/data`;
176
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
177
+ context: localVarHttpContext,
178
+ body: dataChange,
179
+ responseType: responseType_,
180
+ withCredentials: this.configuration.withCredentials,
181
+ headers: localVarHeaders,
182
+ observe: observe,
183
+ reportProgress: reportProgress
184
+ });
185
+ }
186
+ downloadItem(uuid, item, observe = 'body', reportProgress = false, options) {
187
+ if (uuid === null || uuid === undefined) {
188
+ throw new Error('Required parameter uuid was null or undefined when calling downloadItem.');
189
+ }
190
+ if (item === null || item === undefined) {
191
+ throw new Error('Required parameter item was null or undefined when calling downloadItem.');
192
+ }
193
+ let localVarHeaders = this.defaultHeaders;
194
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
195
+ if (localVarHttpHeaderAcceptSelected === undefined) {
196
+ // to determine the Accept header
197
+ const httpHeaderAccepts = [
198
+ 'application/octet-stream'
199
+ ];
200
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
201
+ }
202
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
203
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
204
+ }
205
+ let localVarHttpContext = options && options.context;
206
+ if (localVarHttpContext === undefined) {
207
+ localVarHttpContext = new HttpContext();
208
+ }
209
+ let localVarPath = `/component/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/download/${this.configuration.encodeParam({ name: "item", value: item, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
210
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
211
+ context: localVarHttpContext,
212
+ responseType: "blob",
213
+ withCredentials: this.configuration.withCredentials,
214
+ headers: localVarHeaders,
215
+ observe: observe,
216
+ reportProgress: reportProgress
217
+ });
218
+ }
219
+ downloadItemDeprecated(uuid, item, observe = 'body', reportProgress = false, options) {
220
+ if (uuid === null || uuid === undefined) {
221
+ throw new Error('Required parameter uuid was null or undefined when calling downloadItemDeprecated.');
222
+ }
223
+ if (item === null || item === undefined) {
224
+ throw new Error('Required parameter item was null or undefined when calling downloadItemDeprecated.');
225
+ }
226
+ let localVarHeaders = this.defaultHeaders;
227
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
228
+ if (localVarHttpHeaderAcceptSelected === undefined) {
229
+ // to determine the Accept header
230
+ const httpHeaderAccepts = [
231
+ 'application/octet-stream'
232
+ ];
233
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
234
+ }
235
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
236
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
237
+ }
238
+ let localVarHttpContext = options && options.context;
239
+ if (localVarHttpContext === undefined) {
240
+ localVarHttpContext = new HttpContext();
241
+ }
242
+ let localVarPath = `/view/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/download/${this.configuration.encodeParam({ name: "item", value: item, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
243
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
244
+ context: localVarHttpContext,
245
+ responseType: "blob",
246
+ withCredentials: this.configuration.withCredentials,
247
+ headers: localVarHeaders,
248
+ observe: observe,
249
+ reportProgress: reportProgress
250
+ });
251
+ }
252
+ getComponentModel(uuid, observe = 'body', reportProgress = false, options) {
253
+ if (uuid === null || uuid === undefined) {
254
+ throw new Error('Required parameter uuid was null or undefined when calling getComponentModel.');
255
+ }
256
+ let localVarHeaders = this.defaultHeaders;
257
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
258
+ if (localVarHttpHeaderAcceptSelected === undefined) {
259
+ // to determine the Accept header
260
+ const httpHeaderAccepts = [
261
+ 'application/json'
262
+ ];
263
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
264
+ }
265
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
266
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
267
+ }
268
+ let localVarHttpContext = options && options.context;
269
+ if (localVarHttpContext === undefined) {
270
+ localVarHttpContext = new HttpContext();
271
+ }
272
+ let responseType_ = 'json';
273
+ if (localVarHttpHeaderAcceptSelected) {
274
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
275
+ responseType_ = 'text';
276
+ }
277
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
278
+ responseType_ = 'json';
279
+ }
280
+ else {
281
+ responseType_ = 'blob';
282
+ }
283
+ }
284
+ let localVarPath = `/component/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}`;
285
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
286
+ context: localVarHttpContext,
287
+ responseType: responseType_,
288
+ withCredentials: this.configuration.withCredentials,
289
+ headers: localVarHeaders,
290
+ observe: observe,
291
+ reportProgress: reportProgress
292
+ });
293
+ }
294
+ getComponentModel2(uuid, observe = 'body', reportProgress = false, options) {
295
+ if (uuid === null || uuid === undefined) {
296
+ throw new Error('Required parameter uuid was null or undefined when calling getComponentModel2.');
297
+ }
298
+ let localVarHeaders = this.defaultHeaders;
299
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
300
+ if (localVarHttpHeaderAcceptSelected === undefined) {
301
+ // to determine the Accept header
302
+ const httpHeaderAccepts = [
303
+ 'application/json'
304
+ ];
305
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
306
+ }
307
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
308
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
309
+ }
310
+ let localVarHttpContext = options && options.context;
311
+ if (localVarHttpContext === undefined) {
312
+ localVarHttpContext = new HttpContext();
313
+ }
314
+ let responseType_ = 'json';
315
+ if (localVarHttpHeaderAcceptSelected) {
316
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
317
+ responseType_ = 'text';
318
+ }
319
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
320
+ responseType_ = 'json';
321
+ }
322
+ else {
323
+ responseType_ = 'blob';
324
+ }
325
+ }
326
+ let localVarPath = `/component/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/load`;
327
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
328
+ context: localVarHttpContext,
329
+ responseType: responseType_,
330
+ withCredentials: this.configuration.withCredentials,
331
+ headers: localVarHeaders,
332
+ observe: observe,
333
+ reportProgress: reportProgress
334
+ });
335
+ }
336
+ getViewConstraint(uuid, observe = 'body', reportProgress = false, options) {
337
+ if (uuid === null || uuid === undefined) {
338
+ throw new Error('Required parameter uuid was null or undefined when calling getViewConstraint.');
339
+ }
340
+ let localVarHeaders = this.defaultHeaders;
341
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
342
+ if (localVarHttpHeaderAcceptSelected === undefined) {
343
+ // to determine the Accept header
344
+ const httpHeaderAccepts = [
345
+ 'application/json'
346
+ ];
347
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
348
+ }
349
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
350
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
351
+ }
352
+ let localVarHttpContext = options && options.context;
353
+ if (localVarHttpContext === undefined) {
354
+ localVarHttpContext = new HttpContext();
355
+ }
356
+ let responseType_ = 'json';
357
+ if (localVarHttpHeaderAcceptSelected) {
358
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
359
+ responseType_ = 'text';
360
+ }
361
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
362
+ responseType_ = 'json';
363
+ }
364
+ else {
365
+ responseType_ = 'blob';
366
+ }
367
+ }
368
+ let localVarPath = `/view/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/constraint`;
369
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
370
+ context: localVarHttpContext,
371
+ responseType: responseType_,
372
+ withCredentials: this.configuration.withCredentials,
373
+ headers: localVarHeaders,
374
+ observe: observe,
375
+ reportProgress: reportProgress
376
+ });
377
+ }
378
+ getViewContext(uuid, observe = 'body', reportProgress = false, options) {
379
+ if (uuid === null || uuid === undefined) {
380
+ throw new Error('Required parameter uuid was null or undefined when calling getViewContext.');
381
+ }
382
+ let localVarHeaders = this.defaultHeaders;
383
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
384
+ if (localVarHttpHeaderAcceptSelected === undefined) {
385
+ // to determine the Accept header
386
+ const httpHeaderAccepts = [
387
+ 'application/json'
388
+ ];
389
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
390
+ }
391
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
392
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
393
+ }
394
+ let localVarHttpContext = options && options.context;
395
+ if (localVarHttpContext === undefined) {
396
+ localVarHttpContext = new HttpContext();
397
+ }
398
+ let responseType_ = 'json';
399
+ if (localVarHttpHeaderAcceptSelected) {
400
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
401
+ responseType_ = 'text';
402
+ }
403
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
404
+ responseType_ = 'json';
405
+ }
406
+ else {
407
+ responseType_ = 'blob';
408
+ }
409
+ }
410
+ let localVarPath = `/context/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}`;
411
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
412
+ context: localVarHttpContext,
413
+ responseType: responseType_,
414
+ withCredentials: this.configuration.withCredentials,
415
+ headers: localVarHeaders,
416
+ observe: observe,
417
+ reportProgress: reportProgress
418
+ });
419
+ }
420
+ message(viewUuid, messageUuid, messageResult, observe = 'body', reportProgress = false, options) {
421
+ if (viewUuid === null || viewUuid === undefined) {
422
+ throw new Error('Required parameter viewUuid was null or undefined when calling message.');
423
+ }
424
+ if (messageUuid === null || messageUuid === undefined) {
425
+ throw new Error('Required parameter messageUuid was null or undefined when calling message.');
426
+ }
427
+ if (messageResult === null || messageResult === undefined) {
428
+ throw new Error('Required parameter messageResult was null or undefined when calling message.');
429
+ }
430
+ let localVarHeaders = this.defaultHeaders;
431
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
432
+ if (localVarHttpHeaderAcceptSelected === undefined) {
433
+ // to determine the Accept header
434
+ const httpHeaderAccepts = [
435
+ 'application/json'
436
+ ];
437
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
438
+ }
439
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
440
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
441
+ }
442
+ let localVarHttpContext = options && options.context;
443
+ if (localVarHttpContext === undefined) {
444
+ localVarHttpContext = new HttpContext();
445
+ }
446
+ // to determine the Content-Type header
447
+ const consumes = [
448
+ 'application/json'
449
+ ];
450
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
451
+ if (httpContentTypeSelected !== undefined) {
452
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
453
+ }
454
+ let responseType_ = 'json';
455
+ if (localVarHttpHeaderAcceptSelected) {
456
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
457
+ responseType_ = 'text';
458
+ }
459
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
460
+ responseType_ = 'json';
461
+ }
462
+ else {
463
+ responseType_ = 'blob';
464
+ }
465
+ }
466
+ let localVarPath = `/message/${this.configuration.encodeParam({ name: "viewUuid", value: viewUuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "messageUuid", value: messageUuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}`;
467
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
468
+ context: localVarHttpContext,
469
+ body: messageResult,
470
+ responseType: responseType_,
471
+ withCredentials: this.configuration.withCredentials,
472
+ headers: localVarHeaders,
473
+ observe: observe,
474
+ reportProgress: reportProgress
475
+ });
476
+ }
477
+ performAction(uuid, body, observe = 'body', reportProgress = false, options) {
478
+ if (uuid === null || uuid === undefined) {
479
+ throw new Error('Required parameter uuid was null or undefined when calling performAction.');
480
+ }
481
+ if (body === null || body === undefined) {
482
+ throw new Error('Required parameter body was null or undefined when calling performAction.');
483
+ }
484
+ let localVarHeaders = this.defaultHeaders;
485
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
486
+ if (localVarHttpHeaderAcceptSelected === undefined) {
487
+ // to determine the Accept header
488
+ const httpHeaderAccepts = [
489
+ 'application/json'
490
+ ];
491
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
492
+ }
493
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
494
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
495
+ }
496
+ let localVarHttpContext = options && options.context;
497
+ if (localVarHttpContext === undefined) {
498
+ localVarHttpContext = new HttpContext();
499
+ }
500
+ // to determine the Content-Type header
501
+ const consumes = [
502
+ 'application/json'
503
+ ];
504
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
505
+ if (httpContentTypeSelected !== undefined) {
506
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
507
+ }
508
+ let responseType_ = 'json';
509
+ if (localVarHttpHeaderAcceptSelected) {
510
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
511
+ responseType_ = 'text';
512
+ }
513
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
514
+ responseType_ = 'json';
515
+ }
516
+ else {
517
+ responseType_ = 'blob';
518
+ }
519
+ }
520
+ let localVarPath = `/component/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/action`;
521
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
522
+ context: localVarHttpContext,
523
+ body: body,
524
+ responseType: responseType_,
525
+ withCredentials: this.configuration.withCredentials,
526
+ headers: localVarHeaders,
527
+ observe: observe,
528
+ reportProgress: reportProgress
529
+ });
530
+ }
531
+ performWidgetAction(uuid, widgetId, nodeId, body, observe = 'body', reportProgress = false, options) {
532
+ if (uuid === null || uuid === undefined) {
533
+ throw new Error('Required parameter uuid was null or undefined when calling performWidgetAction.');
534
+ }
535
+ if (widgetId === null || widgetId === undefined) {
536
+ throw new Error('Required parameter widgetId was null or undefined when calling performWidgetAction.');
537
+ }
538
+ if (nodeId === null || nodeId === undefined) {
539
+ throw new Error('Required parameter nodeId was null or undefined when calling performWidgetAction.');
540
+ }
541
+ if (body === null || body === undefined) {
542
+ throw new Error('Required parameter body was null or undefined when calling performWidgetAction.');
543
+ }
544
+ let localVarHeaders = this.defaultHeaders;
545
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
546
+ if (localVarHttpHeaderAcceptSelected === undefined) {
547
+ // to determine the Accept header
548
+ const httpHeaderAccepts = [
549
+ 'application/json'
550
+ ];
551
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
552
+ }
553
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
554
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
555
+ }
556
+ let localVarHttpContext = options && options.context;
557
+ if (localVarHttpContext === undefined) {
558
+ localVarHttpContext = new HttpContext();
559
+ }
560
+ // to determine the Content-Type header
561
+ const consumes = [
562
+ 'application/json'
563
+ ];
564
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
565
+ if (httpContentTypeSelected !== undefined) {
566
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
567
+ }
568
+ let responseType_ = 'json';
569
+ if (localVarHttpHeaderAcceptSelected) {
570
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
571
+ responseType_ = 'text';
572
+ }
573
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
574
+ responseType_ = 'json';
575
+ }
576
+ else {
577
+ responseType_ = 'blob';
578
+ }
579
+ }
580
+ let localVarPath = `/component/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "widgetId", value: widgetId, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "nodeId", value: nodeId, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/action`;
581
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
582
+ context: localVarHttpContext,
583
+ body: body,
584
+ responseType: responseType_,
585
+ withCredentials: this.configuration.withCredentials,
586
+ headers: localVarHeaders,
587
+ observe: observe,
588
+ reportProgress: reportProgress
589
+ });
590
+ }
591
+ performWidgetMainAction(uuid, widgetId, body, observe = 'body', reportProgress = false, options) {
592
+ if (uuid === null || uuid === undefined) {
593
+ throw new Error('Required parameter uuid was null or undefined when calling performWidgetMainAction.');
594
+ }
595
+ if (widgetId === null || widgetId === undefined) {
596
+ throw new Error('Required parameter widgetId was null or undefined when calling performWidgetMainAction.');
597
+ }
598
+ if (body === null || body === undefined) {
599
+ throw new Error('Required parameter body was null or undefined when calling performWidgetMainAction.');
600
+ }
601
+ let localVarHeaders = this.defaultHeaders;
602
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
603
+ if (localVarHttpHeaderAcceptSelected === undefined) {
604
+ // to determine the Accept header
605
+ const httpHeaderAccepts = [
606
+ 'application/json'
607
+ ];
608
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
609
+ }
610
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
611
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
612
+ }
613
+ let localVarHttpContext = options && options.context;
614
+ if (localVarHttpContext === undefined) {
615
+ localVarHttpContext = new HttpContext();
616
+ }
617
+ // to determine the Content-Type header
618
+ const consumes = [
619
+ 'application/json'
620
+ ];
621
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
622
+ if (httpContentTypeSelected !== undefined) {
623
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
624
+ }
625
+ let responseType_ = 'json';
626
+ if (localVarHttpHeaderAcceptSelected) {
627
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
628
+ responseType_ = 'text';
629
+ }
630
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
631
+ responseType_ = 'json';
632
+ }
633
+ else {
634
+ responseType_ = 'blob';
635
+ }
636
+ }
637
+ let localVarPath = `/component/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "widgetId", value: widgetId, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/action`;
638
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
639
+ context: localVarHttpContext,
640
+ body: body,
641
+ responseType: responseType_,
642
+ withCredentials: this.configuration.withCredentials,
643
+ headers: localVarHeaders,
644
+ observe: observe,
645
+ reportProgress: reportProgress
646
+ });
647
+ }
648
+ showPublishedView(channel, uuid, observe = 'body', reportProgress = false, options) {
649
+ if (channel === null || channel === undefined) {
650
+ throw new Error('Required parameter channel was null or undefined when calling showPublishedView.');
651
+ }
652
+ if (uuid === null || uuid === undefined) {
653
+ throw new Error('Required parameter uuid was null or undefined when calling showPublishedView.');
654
+ }
655
+ let localVarHeaders = this.defaultHeaders;
656
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
657
+ if (localVarHttpHeaderAcceptSelected === undefined) {
658
+ // to determine the Accept header
659
+ const httpHeaderAccepts = [];
660
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
661
+ }
662
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
663
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
664
+ }
665
+ let localVarHttpContext = options && options.context;
666
+ if (localVarHttpContext === undefined) {
667
+ localVarHttpContext = new HttpContext();
668
+ }
669
+ let responseType_ = 'json';
670
+ if (localVarHttpHeaderAcceptSelected) {
671
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
672
+ responseType_ = 'text';
673
+ }
674
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
675
+ responseType_ = 'json';
676
+ }
677
+ else {
678
+ responseType_ = 'blob';
679
+ }
680
+ }
681
+ let localVarPath = `/smartlink/${this.configuration.encodeParam({ name: "channel", value: channel, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}`;
682
+ return this.httpClient.request('put', `${this.configuration.basePath}${localVarPath}`, {
683
+ context: localVarHttpContext,
684
+ responseType: responseType_,
685
+ withCredentials: this.configuration.withCredentials,
686
+ headers: localVarHeaders,
687
+ observe: observe,
688
+ reportProgress: reportProgress
689
+ });
690
+ }
691
+ updateViewContext(viewContextUpdate, observe = 'body', reportProgress = false, options) {
692
+ if (viewContextUpdate === null || viewContextUpdate === undefined) {
693
+ throw new Error('Required parameter viewContextUpdate was null or undefined when calling updateViewContext.');
694
+ }
695
+ let localVarHeaders = this.defaultHeaders;
696
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
697
+ if (localVarHttpHeaderAcceptSelected === undefined) {
698
+ // to determine the Accept header
699
+ const httpHeaderAccepts = [
700
+ 'application/json'
701
+ ];
702
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
703
+ }
704
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
705
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
706
+ }
707
+ let localVarHttpContext = options && options.context;
708
+ if (localVarHttpContext === undefined) {
709
+ localVarHttpContext = new HttpContext();
710
+ }
711
+ // to determine the Content-Type header
712
+ const consumes = [
713
+ 'application/json'
714
+ ];
715
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
716
+ if (httpContentTypeSelected !== undefined) {
717
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
718
+ }
719
+ let responseType_ = 'json';
720
+ if (localVarHttpHeaderAcceptSelected) {
721
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
722
+ responseType_ = 'text';
723
+ }
724
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
725
+ responseType_ = 'json';
726
+ }
727
+ else {
728
+ responseType_ = 'blob';
729
+ }
730
+ }
731
+ let localVarPath = `/context`;
732
+ return this.httpClient.request('put', `${this.configuration.basePath}${localVarPath}`, {
733
+ context: localVarHttpContext,
734
+ body: viewContextUpdate,
735
+ responseType: responseType_,
736
+ withCredentials: this.configuration.withCredentials,
737
+ headers: localVarHeaders,
738
+ observe: observe,
739
+ reportProgress: reportProgress
740
+ });
741
+ }
742
+ uploadAction(uuid, uiActionRequest, param, content, observe = 'body', reportProgress = false, options) {
743
+ if (uuid === null || uuid === undefined) {
744
+ throw new Error('Required parameter uuid was null or undefined when calling uploadAction.');
745
+ }
746
+ let localVarHeaders = this.defaultHeaders;
747
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
748
+ if (localVarHttpHeaderAcceptSelected === undefined) {
749
+ // to determine the Accept header
750
+ const httpHeaderAccepts = [
751
+ 'application/json'
752
+ ];
753
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
754
+ }
755
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
756
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
757
+ }
758
+ let localVarHttpContext = options && options.context;
759
+ if (localVarHttpContext === undefined) {
760
+ localVarHttpContext = new HttpContext();
761
+ }
762
+ // to determine the Content-Type header
763
+ const consumes = [
764
+ 'multipart/form-data'
765
+ ];
766
+ const canConsumeForm = this.canConsumeForm(consumes);
767
+ let localVarFormParams;
768
+ let localVarUseForm = false;
769
+ let localVarConvertFormParamsToString = false;
770
+ // use FormData to transmit files using content-type "multipart/form-data"
771
+ // see https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data
772
+ localVarUseForm = canConsumeForm;
773
+ if (localVarUseForm) {
774
+ localVarFormParams = new FormData();
775
+ }
776
+ else {
777
+ localVarFormParams = new HttpParams({ encoder: this.encoder });
778
+ }
779
+ if (uiActionRequest !== undefined) {
780
+ localVarFormParams = localVarFormParams.append('uiActionRequest', uiActionRequest) || localVarFormParams;
781
+ }
782
+ if (param !== undefined) {
783
+ localVarFormParams = localVarFormParams.append('param', param) || localVarFormParams;
784
+ }
785
+ if (content !== undefined) {
786
+ localVarFormParams = localVarFormParams.append('content', content) || localVarFormParams;
787
+ }
788
+ let responseType_ = 'json';
789
+ if (localVarHttpHeaderAcceptSelected) {
790
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
791
+ responseType_ = 'text';
792
+ }
793
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
794
+ responseType_ = 'json';
795
+ }
796
+ else {
797
+ responseType_ = 'blob';
798
+ }
799
+ }
800
+ let localVarPath = `/component/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/upload`;
801
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
802
+ context: localVarHttpContext,
803
+ body: localVarConvertFormParamsToString ? localVarFormParams.toString() : localVarFormParams,
804
+ responseType: responseType_,
805
+ withCredentials: this.configuration.withCredentials,
806
+ headers: localVarHeaders,
807
+ observe: observe,
808
+ reportProgress: reportProgress
809
+ });
810
+ }
811
+ uploadMultipleAction(uuid, uiActionRequest, param, contents, observe = 'body', reportProgress = false, options) {
812
+ if (uuid === null || uuid === undefined) {
813
+ throw new Error('Required parameter uuid was null or undefined when calling uploadMultipleAction.');
814
+ }
815
+ let localVarHeaders = this.defaultHeaders;
816
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
817
+ if (localVarHttpHeaderAcceptSelected === undefined) {
818
+ // to determine the Accept header
819
+ const httpHeaderAccepts = [
820
+ 'application/json'
821
+ ];
822
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
823
+ }
824
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
825
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
826
+ }
827
+ let localVarHttpContext = options && options.context;
828
+ if (localVarHttpContext === undefined) {
829
+ localVarHttpContext = new HttpContext();
830
+ }
831
+ // to determine the Content-Type header
832
+ const consumes = [
833
+ 'multipart/form-data'
834
+ ];
835
+ const canConsumeForm = this.canConsumeForm(consumes);
836
+ let localVarFormParams;
837
+ let localVarUseForm = false;
838
+ let localVarConvertFormParamsToString = false;
839
+ // use FormData to transmit files using content-type "multipart/form-data"
840
+ // see https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data
841
+ localVarUseForm = canConsumeForm;
842
+ if (localVarUseForm) {
843
+ localVarFormParams = new FormData();
844
+ }
845
+ else {
846
+ localVarFormParams = new HttpParams({ encoder: this.encoder });
847
+ }
848
+ if (uiActionRequest !== undefined) {
849
+ localVarFormParams = localVarFormParams.append('uiActionRequest', uiActionRequest) || localVarFormParams;
850
+ }
851
+ if (param !== undefined) {
852
+ localVarFormParams = localVarFormParams.append('param', param) || localVarFormParams;
853
+ }
854
+ if (contents) {
855
+ if (localVarUseForm) {
856
+ contents.forEach((element) => {
857
+ localVarFormParams = localVarFormParams.append('contents', element) || localVarFormParams;
858
+ });
859
+ }
860
+ else {
861
+ localVarFormParams = localVarFormParams.append('contents', [...contents].join(COLLECTION_FORMATS['csv'])) || localVarFormParams;
862
+ }
863
+ }
864
+ let responseType_ = 'json';
865
+ if (localVarHttpHeaderAcceptSelected) {
866
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
867
+ responseType_ = 'text';
868
+ }
869
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
870
+ responseType_ = 'json';
871
+ }
872
+ else {
873
+ responseType_ = 'blob';
874
+ }
875
+ }
876
+ let localVarPath = `/component/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/uploadMultiple`;
877
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
878
+ context: localVarHttpContext,
879
+ body: localVarConvertFormParamsToString ? localVarFormParams.toString() : localVarFormParams,
880
+ responseType: responseType_,
881
+ withCredentials: this.configuration.withCredentials,
882
+ headers: localVarHeaders,
883
+ observe: observe,
884
+ reportProgress: reportProgress
885
+ });
886
+ }
887
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ViewService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
888
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ViewService, providedIn: 'root' }); }
889
+ }
890
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ViewService, decorators: [{
891
+ type: Injectable,
892
+ args: [{
893
+ providedIn: 'root'
894
+ }]
895
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
896
+ type: Optional
897
+ }, {
898
+ type: Inject,
899
+ args: [BASE_PATH]
900
+ }] }, { type: i2.Configuration, decorators: [{
901
+ type: Optional
902
+ }] }] });
903
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L2FwaS9hcGkvdmlldy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFDSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFDVSxXQUFXLEVBQ3hELE1BQVksc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQStCLFlBQVksQ0FBQztBQW9CL0UsYUFBYTtBQUNiLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBMEIsY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBMEMsa0JBQWtCLENBQUM7Ozs7QUFPckYsTUFBTSxPQUFPLFdBQVc7SUFPcEIsWUFBc0IsVUFBc0IsRUFBZ0MsUUFBeUIsRUFBYyxhQUE0QjtRQUF6SCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBTGxDLGFBQVEsR0FBRyxrQkFBa0IsQ0FBQztRQUNqQyxtQkFBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbkMsa0JBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBSXZDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDdkMsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztn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RUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDbk0sT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBb0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLEVBQ3JHO1lBQ0ksT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixJQUFJLEVBQUUsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7WUFDNUYsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixjQUFjLEVBQUUsY0FBYztTQUNqQyxDQUNKLENBQUM7SUFDTixDQUFDOzhHQTVuQ1EsV0FBVyw0Q0FPNkMsU0FBUztrSEFQakUsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFRa0QsUUFBUTs7MEJBQUcsTUFBTTsyQkFBQyxTQUFTOzswQkFBOEIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVmlldyBBUElcbiAqIFZpZXcgQVBJXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMC4wXG4gKiBDb250YWN0OiBpbmZvQGl0NGFsbC5odVxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyxcbiAgICAgICAgIEh0dHBSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwUGFyYW1ldGVyQ29kZWMsIEh0dHBDb250ZXh0IFxuICAgICAgICB9ICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyB9ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQ29tcG9uZW50TW9kZWwgfSBmcm9tICcuLi9tb2RlbC9jb21wb25lbnRNb2RlbCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBEYXRhQ2hhbmdlIH0gZnJvbSAnLi4vbW9kZWwvZGF0YUNoYW5nZSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBNZXNzYWdlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWwvbWVzc2FnZVJlc3VsdCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBVaUFjdGlvblJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC91aUFjdGlvblJlcXVlc3QnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVmlld0NvbnN0cmFpbnQgfSBmcm9tICcuLi9tb2RlbC92aWV3Q29uc3RyYWludCc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBWaWV3Q29udGV4dENoYW5nZSB9IGZyb20gJy4uL21vZGVsL3ZpZXdDb250ZXh0Q2hhbmdlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFZpZXdDb250ZXh0RGF0YSB9IGZyb20gJy4uL21vZGVsL3ZpZXdDb250ZXh0RGF0YSc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBWaWV3Q29udGV4dFVwZGF0ZSB9IGZyb20gJy4uL21vZGVsL3ZpZXdDb250ZXh0VXBkYXRlJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMgfSAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBWaWV3U2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cDovL2xvY2FsaG9zdCc7XG4gICAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIHB1YmxpYyBlbmNvZGVyOiBIdHRwUGFyYW1ldGVyQ29kZWM7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZ3xzdHJpbmdbXSwgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJhc2VQYXRoKSAmJiBiYXNlUGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYmFzZVBhdGggPSBiYXNlUGF0aFswXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGNvbnN1bWVzIHN0cmluZ1tdIG1pbWUtdHlwZXNcbiAgICAgKiBAcmV0dXJuIHRydWU6IGNvbnN1bWVzIGNvbnRhaW5zICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgZmFsc2U6IG90aGVyd2lzZVxuICAgICAqL1xuICAgIHByaXZhdGUgY2FuQ29uc3VtZUZvcm0oY29uc3VtZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc7XG4gICAgICAgIGZvciAoY29uc3QgY29uc3VtZSBvZiBjb25zdW1lcykge1xuICAgICAgICAgICAgaWYgKGZvcm0gPT09IGNvbnN1bWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsIHZhbHVlOiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU/OiBhbnksIGtleT86IHN0cmluZyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55W10pLmZvckVhY2goIGVsZW0gPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIGVsZW0sIGtleSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgKHZhbHVlIGFzIERhdGUpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDEwKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgRGF0ZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKCBrID0+IGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgICAgICAgaHR0cFBhcmFtcywgdmFsdWVba10sIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIG5vdCBvYmplY3Qgb3IgYXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBWaWV3Q29udGV4dFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVWaWV3Q29udGV4dChvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8Vmlld0NvbnRleHREYXRhPjtcbiAgICBwdWJsaWMgY3JlYXRlVmlld0NvbnRleHQob2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8Vmlld0NvbnRleHREYXRhPj47XG4gICAgcHVibGljIGNyZWF0ZVZpZXdDb250ZXh0KG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxWaWV3Q29udGV4dERhdGE+PjtcbiAgICBwdWJsaWMgY3JlYXRlVmlld0NvbnRleHQob2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvY29udGV4dGA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxWaWV3Q29udGV4dERhdGE+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm90aWZpY2F0aW9uIG9mIGEgZGF0YSBjaGFuZ2UgZXZlbnQuLiBcbiAgICAgKiBAcGFyYW0gdXVpZCBcbiAgICAgKiBAcGFyYW0gZGF0YUNoYW5nZSBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0YUNoYW5nZWQodXVpZDogc3RyaW5nLCBkYXRhQ2hhbmdlOiBEYXRhQ2hhbmdlLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8Vmlld0NvbnRleHRDaGFuZ2U+O1xuICAgIHB1YmxpYyBkYXRhQ2hhbmdlZCh1dWlkOiBzdHJpbmcsIGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2UsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFZpZXdDb250ZXh0Q2hhbmdlPj47XG4gICAgcHVibGljIGRhdGFDaGFuZ2VkKHV1aWQ6IHN0cmluZywgZGF0YUNoYW5nZTogRGF0YUNoYW5nZSwgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFZpZXdDb250ZXh0Q2hhbmdlPj47XG4gICAgcHVibGljIGRhdGFDaGFuZ2VkKHV1aWQ6IHN0cmluZywgZGF0YUNoYW5nZTogRGF0YUNoYW5nZSwgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAodXVpZCA9PT0gbnVsbCB8fCB1dWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHV1aWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkYXRhQ2hhbmdlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YUNoYW5nZSA9PT0gbnVsbCB8fCBkYXRhQ2hhbmdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGRhdGFDaGFuZ2Ugd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkYXRhQ2hhbmdlZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2NvbXBvbmVudC8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJ1dWlkXCIsIHZhbHVlOiB1dWlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9L2RhdGFgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8Vmlld0NvbnRleHRDaGFuZ2U+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBkYXRhQ2hhbmdlLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gdXVpZCBcbiAgICAgKiBAcGFyYW0gaXRlbSBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZG93bmxvYWRJdGVtKHV1aWQ6IHN0cmluZywgaXRlbTogc3RyaW5nLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxCbG9iPjtcbiAgICBwdWJsaWMgZG93bmxvYWRJdGVtKHV1aWQ6IHN0cmluZywgaXRlbTogc3RyaW5nLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEJsb2I+PjtcbiAgICBwdWJsaWMgZG93bmxvYWRJdGVtKHV1aWQ6IHN0cmluZywgaXRlbTogc3RyaW5nLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxCbG9iPj47XG4gICAgcHVibGljIGRvd25sb2FkSXRlbSh1dWlkOiBzdHJpbmcsIGl0ZW06IHN0cmluZywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICh1dWlkID09PSBudWxsIHx8IHV1aWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdXVpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGRvd25sb2FkSXRlbS4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGl0ZW0gd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkb3dubG9hZEl0ZW0uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9jb21wb25lbnQvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwidXVpZFwiLCB2YWx1ZTogdXVpZCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiBcInV1aWRcIn0pfS9kb3dubG9hZC8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJpdGVtXCIsIHZhbHVlOiBpdGVtLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdCgnZ2V0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYmxvYlwiLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gdXVpZCBcbiAgICAgKiBAcGFyYW0gaXRlbSBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZG93bmxvYWRJdGVtRGVwcmVjYXRlZCh1dWlkOiBzdHJpbmcsIGl0ZW06IHN0cmluZywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8QmxvYj47XG4gICAgcHVibGljIGRvd25sb2FkSXRlbURlcHJlY2F0ZWQodXVpZDogc3RyaW5nLCBpdGVtOiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QmxvYj4+O1xuICAgIHB1YmxpYyBkb3dubG9hZEl0ZW1EZXByZWNhdGVkKHV1aWQ6IHN0cmluZywgaXRlbTogc3RyaW5nLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxCbG9iPj47XG4gICAgcHVibGljIGRvd25sb2FkSXRlbURlcHJlY2F0ZWQodXVpZDogc3RyaW5nLCBpdGVtOiBzdHJpbmcsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAodXVpZCA9PT0gbnVsbCB8fCB1dWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHV1aWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBkb3dubG9hZEl0ZW1EZXByZWNhdGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgaXRlbSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGRvd25sb2FkSXRlbURlcHJlY2F0ZWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC92aWV3LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInV1aWRcIiwgdmFsdWU6IHV1aWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vZG93bmxvYWQvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwiaXRlbVwiLCB2YWx1ZTogaXRlbSwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3QoJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBjb21wb25lbnRcXCYjMzk7cyBtb2RlbC5cbiAgICAgKiBAcGFyYW0gdXVpZCBDb21wb25lbnRcXCYjMzk7cyB1bmlxdWUgaWRlbnRpZmllci5cbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29tcG9uZW50TW9kZWwodXVpZDogc3RyaW5nLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8Q29tcG9uZW50TW9kZWw+O1xuICAgIHB1YmxpYyBnZXRDb21wb25lbnRNb2RlbCh1dWlkOiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPENvbXBvbmVudE1vZGVsPj47XG4gICAgcHVibGljIGdldENvbXBvbmVudE1vZGVsKHV1aWQ6IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PENvbXBvbmVudE1vZGVsPj47XG4gICAgcHVibGljIGdldENvbXBvbmVudE1vZGVsKHV1aWQ6IHN0cmluZywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAodXVpZCA9PT0gbnVsbCB8fCB1dWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHV1aWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRDb21wb25lbnRNb2RlbC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvY29tcG9uZW50LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInV1aWRcIiwgdmFsdWU6IHV1aWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8Q29tcG9uZW50TW9kZWw+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGNvbXBvbmVudFxcJiMzOTtzIG1vZGVsIGluIGEgVmlld0NvbnRleHRDaGFuZ2UuXG4gICAgICogQHBhcmFtIHV1aWQgQ29tcG9uZW50XFwmIzM5O3MgdW5pcXVlIGlkZW50aWZpZXIuXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbXBvbmVudE1vZGVsMih1dWlkOiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxWaWV3Q29udGV4dENoYW5nZT47XG4gICAgcHVibGljIGdldENvbXBvbmVudE1vZGVsMih1dWlkOiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFZpZXdDb250ZXh0Q2hhbmdlPj47XG4gICAgcHVibGljIGdldENvbXBvbmVudE1vZGVsMih1dWlkOiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxWaWV3Q29udGV4dENoYW5nZT4+O1xuICAgIHB1YmxpYyBnZXRDb21wb25lbnRNb2RlbDIodXVpZDogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICh1dWlkID09PSBudWxsIHx8IHV1aWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdXVpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldENvbXBvbmVudE1vZGVsMi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvY29tcG9uZW50LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInV1aWRcIiwgdmFsdWU6IHV1aWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vbG9hZGA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxWaWV3Q29udGV4dENoYW5nZT4oJ2dldCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZpZXcgY29uc3RyYWludCBvYmplY3QgYmVsb25ncyB0byB0aGUgZ2l2ZW4gdmlld1xuICAgICAqIEBwYXJhbSB1dWlkIFZpZXdcXCYjMzk7cyB1bmlxdWUgaWRlbnRpZmllci5cbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Vmlld0NvbnN0cmFpbnQodXVpZDogc3RyaW5nLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8Vmlld0NvbnN0cmFpbnQ+O1xuICAgIHB1YmxpYyBnZXRWaWV3Q29uc3RyYWludCh1dWlkOiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFZpZXdDb25zdHJhaW50Pj47XG4gICAgcHVibGljIGdldFZpZXdDb25zdHJhaW50KHV1aWQ6IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFZpZXdDb25zdHJhaW50Pj47XG4gICAgcHVibGljIGdldFZpZXdDb25zdHJhaW50KHV1aWQ6IHN0cmluZywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAodXVpZCA9PT0gbnVsbCB8fCB1dWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHV1aWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRWaWV3Q29uc3RyYWludC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvdmlldy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJ1dWlkXCIsIHZhbHVlOiB1dWlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9L2NvbnN0cmFpbnRgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8Vmlld0NvbnN0cmFpbnQ+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBleGlzdGluZyBzZXNzaW9uIGluZm9cbiAgICAgKiBAcGFyYW0gdXVpZCBWaWV3Q29udGV4dFxcJiMzOTtzIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWaWV3Q29udGV4dCh1dWlkOiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxWaWV3Q29udGV4dERhdGE+O1xuICAgIHB1YmxpYyBnZXRWaWV3Q29udGV4dCh1dWlkOiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFZpZXdDb250ZXh0RGF0YT4+O1xuICAgIHB1YmxpYyBnZXRWaWV3Q29udGV4dCh1dWlkOiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxWaWV3Q29udGV4dERhdGE+PjtcbiAgICBwdWJsaWMgZ2V0Vmlld0NvbnRleHQodXVpZDogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICh1dWlkID09PSBudWxsIHx8IHV1aWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdXVpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFZpZXdDb250ZXh0LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9jb250ZXh0LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInV1aWRcIiwgdmFsdWU6IHV1aWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8Vmlld0NvbnRleHREYXRhPignZ2V0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIHZpZXdVdWlkIFZpZXcgVVVJRC5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZVV1aWQgTWVzc2FnZSBVVUlELlxuICAgICAqIEBwYXJhbSBtZXNzYWdlUmVzdWx0IFxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBtZXNzYWdlKHZpZXdVdWlkOiBzdHJpbmcsIG1lc3NhZ2VVdWlkOiBzdHJpbmcsIG1lc3NhZ2VSZXN1bHQ6IE1lc3NhZ2VSZXN1bHQsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxWaWV3Q29udGV4dENoYW5nZT47XG4gICAgcHVibGljIG1lc3NhZ2Uodmlld1V1aWQ6IHN0cmluZywgbWVzc2FnZVV1aWQ6IHN0cmluZywgbWVzc2FnZVJlc3VsdDogTWVzc2FnZVJlc3VsdCwgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8Vmlld0NvbnRleHRDaGFuZ2U+PjtcbiAgICBwdWJsaWMgbWVzc2FnZSh2aWV3VXVpZDogc3RyaW5nLCBtZXNzYWdlVXVpZDogc3RyaW5nLCBtZXNzYWdlUmVzdWx0OiBNZXNzYWdlUmVzdWx0LCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8Vmlld0NvbnRleHRDaGFuZ2U+PjtcbiAgICBwdWJsaWMgbWVzc2FnZSh2aWV3VXVpZDogc3RyaW5nLCBtZXNzYWdlVXVpZDogc3RyaW5nLCBtZXNzYWdlUmVzdWx0OiBNZXNzYWdlUmVzdWx0LCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICh2aWV3VXVpZCA9PT0gbnVsbCB8fCB2aWV3VXVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB2aWV3VXVpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIG1lc3NhZ2UuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2VVdWlkID09PSBudWxsIHx8IG1lc3NhZ2VVdWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIG1lc3NhZ2VVdWlkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgbWVzc2FnZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzc2FnZVJlc3VsdCA9PT0gbnVsbCB8fCBtZXNzYWdlUmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIG1lc3NhZ2VSZXN1bHQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBtZXNzYWdlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvbWVzc2FnZS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJ2aWV3VXVpZFwiLCB2YWx1ZTogdmlld1V1aWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwibWVzc2FnZVV1aWRcIiwgdmFsdWU6IG1lc3NhZ2VVdWlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFZpZXdDb250ZXh0Q2hhbmdlPigncG9zdCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogbWVzc2FnZVJlc3VsdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBnZW5lcmljIFVJIGFjdGlvbi4gXG4gICAgICogQHBhcmFtIHV1aWQgXG4gICAgICogQHBhcmFtIGJvZHkgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHBlcmZvcm1BY3Rpb24odXVpZDogc3RyaW5nLCBib2R5OiBVaUFjdGlvblJlcXVlc3QsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxWaWV3Q29udGV4dENoYW5nZT47XG4gICAgcHVibGljIHBlcmZvcm1BY3Rpb24odXVpZDogc3RyaW5nLCBib2R5OiBVaUFjdGlvblJlcXVlc3QsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFZpZXdDb250ZXh0Q2hhbmdlPj47XG4gICAgcHVibGljIHBlcmZvcm1BY3Rpb24odXVpZDogc3RyaW5nLCBib2R5OiBVaUFjdGlvblJlcXVlc3QsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxWaWV3Q29udGV4dENoYW5nZT4+O1xuICAgIHB1YmxpYyBwZXJmb3JtQWN0aW9uKHV1aWQ6IHN0cmluZywgYm9keTogVWlBY3Rpb25SZXF1ZXN0LCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICh1dWlkID09PSBudWxsIHx8IHV1aWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdXVpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHBlcmZvcm1BY3Rpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBib2R5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcGVyZm9ybUFjdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2NvbXBvbmVudC8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJ1dWlkXCIsIHZhbHVlOiB1dWlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9L2FjdGlvbmA7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxWaWV3Q29udGV4dENoYW5nZT4oJ3Bvc3QnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgd2lkZ2V0IFVJIGFjdGlvbi4gXG4gICAgICogQHBhcmFtIHV1aWQgXG4gICAgICogQHBhcmFtIHdpZGdldElkIFxuICAgICAqIEBwYXJhbSBub2RlSWQgXG4gICAgICogQHBhcmFtIGJvZHkgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHBlcmZvcm1XaWRnZXRBY3Rpb24odXVpZDogc3RyaW5nLCB3aWRnZXRJZDogc3RyaW5nLCBub2RlSWQ6IHN0cmluZywgYm9keTogVWlBY3Rpb25SZXF1ZXN0LCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8Vmlld0NvbnRleHRDaGFuZ2U+O1xuICAgIHB1YmxpYyBwZXJmb3JtV2lkZ2V0QWN0aW9uKHV1aWQ6IHN0cmluZywgd2lkZ2V0SWQ6IHN0cmluZywgbm9kZUlkOiBzdHJpbmcsIGJvZHk6IFVpQWN0aW9uUmVxdWVzdCwgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8Vmlld0NvbnRleHRDaGFuZ2U+PjtcbiAgICBwdWJsaWMgcGVyZm9ybVdpZGdldEFjdGlvbih1dWlkOiBzdHJpbmcsIHdpZGdldElkOiBzdHJpbmcsIG5vZGVJZDogc3RyaW5nLCBib2R5OiBVaUFjdGlvblJlcXVlc3QsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxWaWV3Q29udGV4dENoYW5nZT4+O1xuICAgIHB1YmxpYyBwZXJmb3JtV2lkZ2V0QWN0aW9uKHV1aWQ6IHN0cmluZywgd2lkZ2V0SWQ6IHN0cmluZywgbm9kZUlkOiBzdHJpbmcsIGJvZHk6IFVpQWN0aW9uUmVxdWVzdCwgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAodXVpZCA9PT0gbnVsbCB8fCB1dWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHV1aWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBwZXJmb3JtV2lkZ2V0QWN0aW9uLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aWRnZXRJZCA9PT0gbnVsbCB8fCB3aWRnZXRJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB3aWRnZXRJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHBlcmZvcm1XaWRnZXRBY3Rpb24uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGVJZCA9PT0gbnVsbCB8fCBub2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgbm9kZUlkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgcGVyZm9ybVdpZGdldEFjdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGJvZHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBwZXJmb3JtV2lkZ2V0QWN0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0FjY2VwdCcsIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvY29tcG9uZW50LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInV1aWRcIiwgdmFsdWU6IHV1aWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oe25hbWU6IFwid2lkZ2V0SWRcIiwgdmFsdWU6IHdpZGdldElkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJub2RlSWRcIiwgdmFsdWU6IG5vZGVJZCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vYWN0aW9uYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFZpZXdDb250ZXh0Q2hhbmdlPigncG9zdCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSB3aWRnZXQgVUkgYWN0aW9uLiBcbiAgICAgKiBAcGFyYW0gdXVpZCBcbiAgICAgKiBAcGFyYW0gd2lkZ2V0SWQgXG4gICAgICogQHBhcmFtIGJvZHkgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHBlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHV1aWQ6IHN0cmluZywgd2lkZ2V0SWQ6IHN0cmluZywgYm9keTogVWlBY3Rpb25SZXF1ZXN0LCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8Vmlld0NvbnRleHRDaGFuZ2U+O1xuICAgIHB1YmxpYyBwZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbih1dWlkOiBzdHJpbmcsIHdpZGdldElkOiBzdHJpbmcsIGJvZHk6IFVpQWN0aW9uUmVxdWVzdCwgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8Vmlld0NvbnRleHRDaGFuZ2U+PjtcbiAgICBwdWJsaWMgcGVyZm9ybVdpZGdldE1haW5BY3Rpb24odXVpZDogc3RyaW5nLCB3aWRnZXRJZDogc3RyaW5nLCBib2R5OiBVaUFjdGlvblJlcXVlc3QsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxWaWV3Q29udGV4dENoYW5nZT4+O1xuICAgIHB1YmxpYyBwZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbih1dWlkOiBzdHJpbmcsIHdpZGdldElkOiBzdHJpbmcsIGJvZHk6IFVpQWN0aW9uUmVxdWVzdCwgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAodXVpZCA9PT0gbnVsbCB8fCB1dWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHV1aWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBwZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2lkZ2V0SWQgPT09IG51bGwgfHwgd2lkZ2V0SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgd2lkZ2V0SWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBwZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keSA9PT0gbnVsbCB8fCBib2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGJvZHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBwZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2NvbXBvbmVudC8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJ1dWlkXCIsIHZhbHVlOiB1dWlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcIndpZGdldElkXCIsIHZhbHVlOiB3aWRnZXRJZCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcInN0cmluZ1wiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWR9KX0vYWN0aW9uYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFZpZXdDb250ZXh0Q2hhbmdlPigncG9zdCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGNoYW5uZWwgU21hcnRsaW5rXFwmIzM5O3MgY2hhbm5lbC5cbiAgICAgKiBAcGFyYW0gdXVpZCBTbWFydGxpbmtcXCYjMzk7cyB1bmlxdWUgaWRlbnRpZmllclxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93UHVibGlzaGVkVmlldyhjaGFubmVsOiBzdHJpbmcsIHV1aWQ6IHN0cmluZywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiB1bmRlZmluZWQsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHVibGljIHNob3dQdWJsaXNoZWRWaWV3KGNoYW5uZWw6IHN0cmluZywgdXVpZDogc3RyaW5nLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiB1bmRlZmluZWQsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PjtcbiAgICBwdWJsaWMgc2hvd1B1Ymxpc2hlZFZpZXcoY2hhbm5lbDogc3RyaW5nLCB1dWlkOiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiB1bmRlZmluZWQsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PjtcbiAgICBwdWJsaWMgc2hvd1B1Ymxpc2hlZFZpZXcoY2hhbm5lbDogc3RyaW5nLCB1dWlkOiBzdHJpbmcsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogdW5kZWZpbmVkLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYgKGNoYW5uZWwgPT09IG51bGwgfHwgY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBjaGFubmVsIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgc2hvd1B1Ymxpc2hlZFZpZXcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHV1aWQgPT09IG51bGwgfHwgdXVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB1dWlkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgc2hvd1B1Ymxpc2hlZFZpZXcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IHJlc3BvbnNlVHlwZV86ICd0ZXh0JyB8ICdqc29uJyB8ICdibG9iJyA9ICdqc29uJztcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aCgndGV4dCcpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdqc29uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlXyA9ICdibG9iJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclBhdGggPSBgL3NtYXJ0bGluay8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJjaGFubmVsXCIsIHZhbHVlOiBjaGFubmVsLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZH0pfS8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7bmFtZTogXCJ1dWlkXCIsIHZhbHVlOiB1dWlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwic3RyaW5nXCIsIGRhdGFGb3JtYXQ6IFwidXVpZFwifSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PGFueT4oJ3B1dCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgVmlld0NvbnRleHRcbiAgICAgKiBAcGFyYW0gdmlld0NvbnRleHRVcGRhdGUgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVZpZXdDb250ZXh0KHZpZXdDb250ZXh0VXBkYXRlOiBWaWV3Q29udGV4dFVwZGF0ZSwgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPFZpZXdDb250ZXh0RGF0YT47XG4gICAgcHVibGljIHVwZGF0ZVZpZXdDb250ZXh0KHZpZXdDb250ZXh0VXBkYXRlOiBWaWV3Q29udGV4dFVwZGF0ZSwgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8Vmlld0NvbnRleHREYXRhPj47XG4gICAgcHVibGljIHVwZGF0ZVZpZXdDb250ZXh0KHZpZXdDb250ZXh0VXBkYXRlOiBWaWV3Q29udGV4dFVwZGF0ZSwgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFZpZXdDb250ZXh0RGF0YT4+O1xuICAgIHB1YmxpYyB1cGRhdGVWaWV3Q29udGV4dCh2aWV3Q29udGV4dFVwZGF0ZTogVmlld0NvbnRleHRVcGRhdGUsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYgKHZpZXdDb250ZXh0VXBkYXRlID09PSBudWxsIHx8IHZpZXdDb250ZXh0VXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHZpZXdDb250ZXh0VXBkYXRlIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdXBkYXRlVmlld0NvbnRleHQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZVR5cGVfOiAndGV4dCcgfCAnanNvbicgfCAnYmxvYicgPSAnanNvbic7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAndGV4dCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnanNvbic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZV8gPSAnYmxvYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9jb250ZXh0YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFZpZXdDb250ZXh0RGF0YT4oJ3B1dCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogdmlld0NvbnRleHRVcGRhdGUsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGFuIHVwbG9hZCBVSSBhY3Rpb24uIFxuICAgICAqIEBwYXJhbSB1dWlkIFxuICAgICAqIEBwYXJhbSB1aUFjdGlvblJlcXVlc3QgU3RyaW5naWZ5LWQgVWlBY3Rpb25SZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBwYXJhbSBQYXJhbWV0ZXIgbmFtZSB0byB1c2Ugd2hlbiBjb252ZXJ0aW5nIHVwbG9hZGVkIGZpbGUgdG8gQmluYXJ5RGF0YS5cbiAgICAgKiBAcGFyYW0gY29udGVudCBcbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBsb2FkQWN0aW9uKHV1aWQ6IHN0cmluZywgdWlBY3Rpb25SZXF1ZXN0Pzogc3RyaW5nLCBwYXJhbT86IHN0cmluZywgY29udGVudD86IEJsb2IsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxWaWV3Q29udGV4dENoYW5nZT47XG4gICAgcHVibGljIHVwbG9hZEFjdGlvbih1dWlkOiBzdHJpbmcsIHVpQWN0aW9uUmVxdWVzdD86IHN0cmluZywgcGFyYW0/OiBzdHJpbmcsIGNvbnRlbnQ/OiBCbG9iLCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxWaWV3Q29udGV4dENoYW5nZT4+O1xuICAgIHB1YmxpYyB1cGxvYWRBY3Rpb24odXVpZDogc3RyaW5nLCB1aUFjdGlvblJlcXVlc3Q/OiBzdHJpbmcsIHBhcmFtPzogc3RyaW5nLCBjb250ZW50PzogQmxvYiwgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFZpZXdDb250ZXh0Q2hhbmdlPj47XG4gICAgcHVibGljIHVwbG9hZEFjdGlvbih1dWlkOiBzdHJpbmcsIHVpQWN0aW9uUmVxdWVzdD86IHN0cmluZywgcGFyYW0/OiBzdHJpbmcsIGNvbnRlbnQ/OiBCbG9iLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGlmICh1dWlkID09PSBudWxsIHx8IHV1aWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgdXVpZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHVwbG9hZEFjdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KCdBY2NlcHQnLCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGNhbkNvbnN1bWVGb3JtID0gdGhpcy5jYW5Db25zdW1lRm9ybShjb25zdW1lcyk7XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyRm9ybVBhcmFtczogeyBhcHBlbmQocGFyYW06IHN0cmluZywgdmFsdWU6IGFueSk6IGFueTsgfTtcbiAgICAgICAgbGV0IGxvY2FsVmFyVXNlRm9ybSA9IGZhbHNlO1xuICAgICAgICBsZXQgbG9jYWxWYXJDb252ZXJ0Rm9ybVBhcmFtc1RvU3RyaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIHVzZSBGb3JtRGF0YSB0byB0cmFuc21pdCBmaWxlcyB1c2luZyBjb250ZW50LXR5cGUgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCJcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwMDc5NjkvYXBwbGljYXRpb24teC13d3ctZm9ybS11cmxlbmNvZGVkLW9yLW11bHRpcGFydC1mb3JtLWRhdGFcbiAgICAgICAgbG9jYWxWYXJVc2VGb3JtID0gY2FuQ29uc3VtZUZvcm07XG4gICAgICAgIGlmIChsb2NhbFZhclVzZUZvcm0pIHtcbiAgICAgICAgICAgIGxvY2FsVmFyRm9ybVBhcmFtcyA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9jYWxWYXJGb3JtUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IHRoaXMuZW5jb2Rlcn0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVpQWN0aW9uUmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhckZvcm1QYXJhbXMgPSBsb2NhbFZhckZvcm1QYXJhbXMuYXBwZW5kKCd1aUFjdGlvblJlcXVlc3QnLCA8YW55PnVpQWN0aW9uUmVxdWVzdCkgYXMgYW55IHx8IGxvY2FsVmFyRm9ybVBhcmFtcztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJGb3JtUGFyYW1zID0gbG9jYWxWYXJGb3JtUGFyYW1zLmFwcGVuZCgncGFyYW0nLCA8YW55PnBhcmFtKSBhcyBhbnkgfHwgbG9jYWxWYXJGb3JtUGFyYW1zO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyRm9ybVBhcmFtcyA9IGxvY2FsVmFyRm9ybVBhcmFtcy5hcHBlbmQoJ2NvbnRlbnQnLCA8YW55PmNvbnRlbnQpIGFzIGFueSB8fCBsb2NhbFZhckZvcm1QYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvY29tcG9uZW50LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInV1aWRcIiwgdmFsdWU6IHV1aWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vdXBsb2FkYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PFZpZXdDb250ZXh0Q2hhbmdlPigncG9zdCcsIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgICAgICAgICAgYm9keTogbG9jYWxWYXJDb252ZXJ0Rm9ybVBhcmFtc1RvU3RyaW5nID8gbG9jYWxWYXJGb3JtUGFyYW1zLnRvU3RyaW5nKCkgOiBsb2NhbFZhckZvcm1QYXJhbXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgZ2VuZXJpYyBVSSBhY3Rpb24uIFxuICAgICAqIEBwYXJhbSB1dWlkIFxuICAgICAqIEBwYXJhbSB1aUFjdGlvblJlcXVlc3QgU3RyaW5naWZ5LWQgVWlBY3Rpb25SZXF1ZXN0LlxuICAgICAqIEBwYXJhbSBwYXJhbSBQYXJhbWV0ZXIgbmFtZSB0byB1c2Ugd2hlbiBjb252ZXJ0aW5nIHVwbG9hZGVkIGZpbGUgdG8gQmluYXJ5RGF0YS5cbiAgICAgKiBAcGFyYW0gY29udGVudHMgXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIHVwbG9hZE11bHRpcGxlQWN0aW9uKHV1aWQ6IHN0cmluZywgdWlBY3Rpb25SZXF1ZXN0Pzogc3RyaW5nLCBwYXJhbT86IHN0cmluZywgY29udGVudHM/OiBBcnJheTxCbG9iPiwgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPFZpZXdDb250ZXh0Q2hhbmdlPjtcbiAgICBwdWJsaWMgdXBsb2FkTXVsdGlwbGVBY3Rpb24odXVpZDogc3RyaW5nLCB1aUFjdGlvblJlcXVlc3Q/OiBzdHJpbmcsIHBhcmFtPzogc3RyaW5nLCBjb250ZW50cz86IEFycmF5PEJsb2I+LCBvYnNlcnZlPzogJ3Jlc3BvbnNlJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxWaWV3Q29udGV4dENoYW5nZT4+O1xuICAgIHB1YmxpYyB1cGxvYWRNdWx0aXBsZUFjdGlvbih1dWlkOiBzdHJpbmcsIHVpQWN0aW9uUmVxdWVzdD86IHN0cmluZywgcGFyYW0/OiBzdHJpbmcsIGNvbnRlbnRzPzogQXJyYXk8QmxvYj4sIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dH0pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxWaWV3Q29udGV4dENoYW5nZT4+O1xuICAgIHB1YmxpYyB1cGxvYWRNdWx0aXBsZUFjdGlvbih1dWlkOiBzdHJpbmcsIHVpQWN0aW9uUmVxdWVzdD86IHN0cmluZywgcGFyYW0/OiBzdHJpbmcsIGNvbnRlbnRzPzogQXJyYXk8QmxvYj4sIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHR9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYgKHV1aWQgPT09IG51bGwgfHwgdXVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciB1dWlkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdXBsb2FkTXVsdGlwbGVBY3Rpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBjYW5Db25zdW1lRm9ybSA9IHRoaXMuY2FuQ29uc3VtZUZvcm0oY29uc3VtZXMpO1xuXG4gICAgICAgIGxldCBsb2NhbFZhckZvcm1QYXJhbXM6IHsgYXBwZW5kKHBhcmFtOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7IH07XG4gICAgICAgIGxldCBsb2NhbFZhclVzZUZvcm0gPSBmYWxzZTtcbiAgICAgICAgbGV0IGxvY2FsVmFyQ29udmVydEZvcm1QYXJhbXNUb1N0cmluZyA9IGZhbHNlO1xuICAgICAgICAvLyB1c2UgRm9ybURhdGEgdG8gdHJhbnNtaXQgZmlsZXMgdXNpbmcgY29udGVudC10eXBlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiXG4gICAgICAgIC8vIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MDA3OTY5L2FwcGxpY2F0aW9uLXgtd3d3LWZvcm0tdXJsZW5jb2RlZC1vci1tdWx0aXBhcnQtZm9ybS1kYXRhXG4gICAgICAgIGxvY2FsVmFyVXNlRm9ybSA9IGNhbkNvbnN1bWVGb3JtO1xuICAgICAgICBpZiAobG9jYWxWYXJVc2VGb3JtKSB7XG4gICAgICAgICAgICBsb2NhbFZhckZvcm1QYXJhbXMgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvY2FsVmFyRm9ybVBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiB0aGlzLmVuY29kZXJ9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1aUFjdGlvblJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJGb3JtUGFyYW1zID0gbG9jYWxWYXJGb3JtUGFyYW1zLmFwcGVuZCgndWlBY3Rpb25SZXF1ZXN0JywgPGFueT51aUFjdGlvblJlcXVlc3QpIGFzIGFueSB8fCBsb2NhbFZhckZvcm1QYXJhbXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFyRm9ybVBhcmFtcyA9IGxvY2FsVmFyRm9ybVBhcmFtcy5hcHBlbmQoJ3BhcmFtJywgPGFueT5wYXJhbSkgYXMgYW55IHx8IGxvY2FsVmFyRm9ybVBhcmFtcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGVudHMpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhclVzZUZvcm0pIHtcbiAgICAgICAgICAgICAgICBjb250ZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsVmFyRm9ybVBhcmFtcyA9IGxvY2FsVmFyRm9ybVBhcmFtcy5hcHBlbmQoJ2NvbnRlbnRzJywgPGFueT5lbGVtZW50KSBhcyBhbnkgfHwgbG9jYWxWYXJGb3JtUGFyYW1zO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9jYWxWYXJGb3JtUGFyYW1zID0gbG9jYWxWYXJGb3JtUGFyYW1zLmFwcGVuZCgnY29udGVudHMnLCBbLi4uY29udGVudHNdLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTWydjc3YnXSkpIGFzIGFueSB8fCBsb2NhbFZhckZvcm1QYXJhbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvY29tcG9uZW50LyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHtuYW1lOiBcInV1aWRcIiwgdmFsdWU6IHV1aWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJzdHJpbmdcIiwgZGF0YUZvcm1hdDogXCJ1dWlkXCJ9KX0vdXBsb2FkTXVsdGlwbGVgO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8Vmlld0NvbnRleHRDaGFuZ2U+KCdwb3N0JywgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgICAgICAgICBib2R5OiBsb2NhbFZhckNvbnZlcnRGb3JtUGFyYW1zVG9TdHJpbmcgPyBsb2NhbFZhckZvcm1QYXJhbXMudG9TdHJpbmcoKSA6IGxvY2FsVmFyRm9ybVBhcmFtcyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=