@smartbit4all/ng-client 6.0.35 → 7.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 (1007) hide show
  1. package/MIGRATION-7.0.md +1722 -0
  2. package/README.md +199 -386
  3. package/WIDGETS.md +206 -0
  4. package/fesm2022/smartbit4all-ng-client.mjs +15013 -17559
  5. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  6. package/package.json +15 -18
  7. package/smartbit4all-ng-client-7.0.1.tgz +0 -0
  8. package/types/smartbit4all-ng-client.d.ts +10350 -0
  9. package/esm2022/lib/component-factory-service/component-factory-service.module.mjs +0 -17
  10. package/esm2022/lib/component-factory-service/component-factory-service.service.mjs +0 -35
  11. package/esm2022/lib/component-factory-service/projects.mjs +0 -6
  12. package/esm2022/lib/session/api/api/api.mjs +0 -4
  13. package/esm2022/lib/session/api/api/session.service.mjs +0 -306
  14. package/esm2022/lib/session/api/configuration.mjs +0 -91
  15. package/esm2022/lib/session/api/encoder.mjs +0 -19
  16. package/esm2022/lib/session/api/index.mjs +0 -3
  17. package/esm2022/lib/session/api/model/accountInfo.mjs +0 -13
  18. package/esm2022/lib/session/api/model/apiError.mjs +0 -13
  19. package/esm2022/lib/session/api/model/authenticationProviderData.mjs +0 -13
  20. package/esm2022/lib/session/api/model/getAuthenticationProvidersResponse.mjs +0 -2
  21. package/esm2022/lib/session/api/model/models.mjs +0 -9
  22. package/esm2022/lib/session/api/model/refreshSessionRequest.mjs +0 -13
  23. package/esm2022/lib/session/api/model/session.mjs +0 -2
  24. package/esm2022/lib/session/api/model/sessionInfoData.mjs +0 -2
  25. package/esm2022/lib/session/api/model/userActivityLog.mjs +0 -13
  26. package/esm2022/lib/session/api/param.mjs +0 -2
  27. package/esm2022/lib/session/api/variables.mjs +0 -9
  28. package/esm2022/lib/session/cookie-service/smart-cookie.service.mjs +0 -225
  29. package/esm2022/lib/session/projects.mjs +0 -12
  30. package/esm2022/lib/session/smart-backend-bootstrap.config.mjs +0 -2
  31. package/esm2022/lib/session/smart-backend-bootstrap.service.mjs +0 -217
  32. package/esm2022/lib/session/smart-default-error-ui.service.mjs +0 -134
  33. package/esm2022/lib/session/smart-error-catching.interceptor.mjs +0 -109
  34. package/esm2022/lib/session/smart-header-maintainer.interceptor.mjs +0 -44
  35. package/esm2022/lib/session/smart-session-handler.service.mjs +0 -7
  36. package/esm2022/lib/session/smart-session.module.mjs +0 -58
  37. package/esm2022/lib/session/smart-session.service.mjs +0 -309
  38. package/esm2022/lib/session/smart-timer/smart-session-timer.component.mjs +0 -59
  39. package/esm2022/lib/shared/projects.mjs +0 -4
  40. package/esm2022/lib/shared/shared.module.mjs +0 -19
  41. package/esm2022/lib/shared/smart-tooltip.directive.mjs +0 -58
  42. package/esm2022/lib/shared/smarttable.date-pipe.mjs +0 -43
  43. package/esm2022/lib/smart-client/projects.mjs +0 -4
  44. package/esm2022/lib/smart-client/smart-component-api-client.mjs +0 -935
  45. package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +0 -79
  46. package/esm2022/lib/smart-client/smart.component.mjs +0 -88
  47. package/esm2022/lib/smart-client/smart.service.mjs +0 -71
  48. package/esm2022/lib/smart-component-layout/api/api/api.mjs +0 -4
  49. package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +0 -133
  50. package/esm2022/lib/smart-component-layout/api/api.module.mjs +0 -40
  51. package/esm2022/lib/smart-component-layout/api/configuration.mjs +0 -91
  52. package/esm2022/lib/smart-component-layout/api/encoder.mjs +0 -19
  53. package/esm2022/lib/smart-component-layout/api/index.mjs +0 -7
  54. package/esm2022/lib/smart-component-layout/api/model/componentType.mjs +0 -18
  55. package/esm2022/lib/smart-component-layout/api/model/componentWidgetType.mjs +0 -22
  56. package/esm2022/lib/smart-component-layout/api/model/layoutDefinitionDescriptor.mjs +0 -2
  57. package/esm2022/lib/smart-component-layout/api/model/layoutDirection.mjs +0 -17
  58. package/esm2022/lib/smart-component-layout/api/model/models.mjs +0 -10
  59. package/esm2022/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +0 -2
  60. package/esm2022/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +0 -2
  61. package/esm2022/lib/smart-component-layout/api/model/toolbarAlignment.mjs +0 -17
  62. package/esm2022/lib/smart-component-layout/api/model/toolbarDirection.mjs +0 -17
  63. package/esm2022/lib/smart-component-layout/api/model/toolbarProperties.mjs +0 -2
  64. package/esm2022/lib/smart-component-layout/api/param.mjs +0 -2
  65. package/esm2022/lib/smart-component-layout/api/variables.mjs +0 -9
  66. package/esm2022/lib/smart-component-layout/projects.mjs +0 -8
  67. package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +0 -169
  68. package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +0 -438
  69. package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +0 -57
  70. package/esm2022/lib/smart-diagram/api/api/api.mjs +0 -4
  71. package/esm2022/lib/smart-diagram/api/api/diagramService.service.mjs +0 -141
  72. package/esm2022/lib/smart-diagram/api/api.module.mjs +0 -40
  73. package/esm2022/lib/smart-diagram/api/configuration.mjs +0 -91
  74. package/esm2022/lib/smart-diagram/api/encoder.mjs +0 -19
  75. package/esm2022/lib/smart-diagram/api/index.mjs +0 -7
  76. package/esm2022/lib/smart-diagram/api/model/diagramColor.mjs +0 -13
  77. package/esm2022/lib/smart-diagram/api/model/diagramDataContainer.mjs +0 -2
  78. package/esm2022/lib/smart-diagram/api/model/diagramDataItem.mjs +0 -13
  79. package/esm2022/lib/smart-diagram/api/model/diagramDataSet.mjs +0 -2
  80. package/esm2022/lib/smart-diagram/api/model/diagramDescriptor.mjs +0 -2
  81. package/esm2022/lib/smart-diagram/api/model/diagramModel.mjs +0 -2
  82. package/esm2022/lib/smart-diagram/api/model/diagramShape.mjs +0 -2
  83. package/esm2022/lib/smart-diagram/api/model/drawTime.mjs +0 -18
  84. package/esm2022/lib/smart-diagram/api/model/labelText.mjs +0 -2
  85. package/esm2022/lib/smart-diagram/api/model/models.mjs +0 -10
  86. package/esm2022/lib/smart-diagram/api/param.mjs +0 -2
  87. package/esm2022/lib/smart-diagram/api/variables.mjs +0 -9
  88. package/esm2022/lib/smart-diagram/component/default-smart-diagram-options.provider.mjs +0 -312
  89. package/esm2022/lib/smart-diagram/component/smart-diagram.component.mjs +0 -359
  90. package/esm2022/lib/smart-diagram/component/smart-diagram.module.mjs +0 -40
  91. package/esm2022/lib/smart-diagram/component/smart-diagram.util.mjs +0 -10
  92. package/esm2022/lib/smart-diagram/projects.mjs +0 -5
  93. package/esm2022/lib/smart-dialog/projects.mjs +0 -8
  94. package/esm2022/lib/smart-dialog/smartdialog.component.mjs +0 -54
  95. package/esm2022/lib/smart-dialog/smartdialog.model.mjs +0 -16
  96. package/esm2022/lib/smart-dialog/smartdialog.module.mjs +0 -46
  97. package/esm2022/lib/smart-dialog/smartdialog.service.mjs +0 -86
  98. package/esm2022/lib/smart-expandable-section/expandable-section.component.mjs +0 -101
  99. package/esm2022/lib/smart-expandable-section/expandable-section.model.mjs +0 -12
  100. package/esm2022/lib/smart-expandable-section/projects.mjs +0 -8
  101. package/esm2022/lib/smart-expandable-section/smart-expandable-section.module.mjs +0 -57
  102. package/esm2022/lib/smart-expandable-section/smart-expandable-section.service.mjs +0 -14
  103. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +0 -17
  104. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +0 -2
  105. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +0 -8
  106. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +0 -2
  107. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionData.mjs +0 -2
  108. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +0 -20
  109. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionField.mjs +0 -2
  110. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +0 -2
  111. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +0 -28
  112. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionList.mjs +0 -2
  113. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +0 -2
  114. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +0 -32
  115. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +0 -18
  116. package/esm2022/lib/smart-filter/api/filter/model/model.mjs +0 -16
  117. package/esm2022/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +0 -2
  118. package/esm2022/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +0 -13
  119. package/esm2022/lib/smart-filter/api/value/model/value.mjs +0 -13
  120. package/esm2022/lib/smart-filter/projects.mjs +0 -9
  121. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +0 -14
  122. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +0 -166
  123. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +0 -45
  124. package/esm2022/lib/smart-filter/smart-filter/smart-filter.component.mjs +0 -36
  125. package/esm2022/lib/smart-filter/smart-filter/smart-filter.service.mjs +0 -31
  126. package/esm2022/lib/smart-filter/smart-filter.model.mjs +0 -13
  127. package/esm2022/lib/smart-filter/smart-filter.module.mjs +0 -33
  128. package/esm2022/lib/smart-filter-editor/api/api/api.mjs +0 -4
  129. package/esm2022/lib/smart-filter-editor/api/api/filter.service.mjs +0 -198
  130. package/esm2022/lib/smart-filter-editor/api/api.module.mjs +0 -40
  131. package/esm2022/lib/smart-filter-editor/api/configuration.mjs +0 -91
  132. package/esm2022/lib/smart-filter-editor/api/encoder.mjs +0 -19
  133. package/esm2022/lib/smart-filter-editor/api/index.mjs +0 -7
  134. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +0 -17
  135. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilder.mjs +0 -2
  136. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +0 -13
  137. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +0 -2
  138. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +0 -8
  139. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +0 -2
  140. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +0 -7
  141. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionData.mjs +0 -2
  142. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +0 -20
  143. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionField.mjs +0 -2
  144. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +0 -2
  145. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +0 -2
  146. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +0 -28
  147. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionList.mjs +0 -2
  148. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +0 -2
  149. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +0 -32
  150. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOrderBy.mjs +0 -19
  151. package/esm2022/lib/smart-filter-editor/api/model/models.mjs +0 -20
  152. package/esm2022/lib/smart-filter-editor/api/model/searchPageConfig.mjs +0 -2
  153. package/esm2022/lib/smart-filter-editor/api/model/smartFilterType.mjs +0 -17
  154. package/esm2022/lib/smart-filter-editor/api/param.mjs +0 -2
  155. package/esm2022/lib/smart-filter-editor/api/variables.mjs +0 -9
  156. package/esm2022/lib/smart-filter-editor/filter-utils.mjs +0 -3
  157. package/esm2022/lib/smart-filter-editor/filterExpressionBuilderApiActions.mjs +0 -15
  158. package/esm2022/lib/smart-filter-editor/project.mjs +0 -11
  159. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/advanced-relation-button/advanced-relation-button.component.mjs +0 -27
  160. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/advanced-smart-filter-expression-item/advanced-smart-filter-expression-item.component.mjs +0 -32
  161. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/expression-editor-dialog/expression-editor-dialog.component.mjs +0 -29
  162. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/expression-editor-dialog/expression-editor-dialog.service.mjs +0 -50
  163. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +0 -72
  164. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +0 -52
  165. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +0 -329
  166. package/esm2022/lib/smart-filter-editor/smart-filter-editor.model.mjs +0 -2
  167. package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +0 -84
  168. package/esm2022/lib/smart-filter-editor/smart-filter-editor.service.mjs +0 -78
  169. package/esm2022/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +0 -24
  170. package/esm2022/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +0 -57
  171. package/esm2022/lib/smart-form/api/api/api.mjs +0 -4
  172. package/esm2022/lib/smart-form/api/api/default.service.mjs +0 -133
  173. package/esm2022/lib/smart-form/api/api.module.mjs +0 -40
  174. package/esm2022/lib/smart-form/api/configuration.mjs +0 -91
  175. package/esm2022/lib/smart-form/api/encoder.mjs +0 -19
  176. package/esm2022/lib/smart-form/api/index.mjs +0 -7
  177. package/esm2022/lib/smart-form/api/model/dateFieldProperties.mjs +0 -13
  178. package/esm2022/lib/smart-form/api/model/divProperties.mjs +0 -2
  179. package/esm2022/lib/smart-form/api/model/fileUploaderProperties.mjs +0 -2
  180. package/esm2022/lib/smart-form/api/model/imageProperties.mjs +0 -2
  181. package/esm2022/lib/smart-form/api/model/models.mjs +0 -20
  182. package/esm2022/lib/smart-form/api/model/multiFileUploaderProperties.mjs +0 -2
  183. package/esm2022/lib/smart-form/api/model/propertyMapping.mjs +0 -13
  184. package/esm2022/lib/smart-form/api/model/recordingUploaderProperties.mjs +0 -7
  185. package/esm2022/lib/smart-form/api/model/selectionDefinition.mjs +0 -14
  186. package/esm2022/lib/smart-form/api/model/smartFormInputMode.mjs +0 -22
  187. package/esm2022/lib/smart-form/api/model/smartFormWidgetDirection.mjs +0 -17
  188. package/esm2022/lib/smart-form/api/model/smartFormWidgetType.mjs +0 -49
  189. package/esm2022/lib/smart-form/api/model/smartLayoutDefinition.mjs +0 -2
  190. package/esm2022/lib/smart-form/api/model/smartMatrixModel.mjs +0 -2
  191. package/esm2022/lib/smart-form/api/model/smartWidgetDefinition.mjs +0 -2
  192. package/esm2022/lib/smart-form/api/model/smartWidgetHint.mjs +0 -18
  193. package/esm2022/lib/smart-form/api/model/sortDefinition.mjs +0 -13
  194. package/esm2022/lib/smart-form/api/model/textBoxProperties.mjs +0 -13
  195. package/esm2022/lib/smart-form/api/model/textFieldProperties.mjs +0 -13
  196. package/esm2022/lib/smart-form/api/model/valueChangeMode.mjs +0 -21
  197. package/esm2022/lib/smart-form/api/param.mjs +0 -2
  198. package/esm2022/lib/smart-form/api/variables.mjs +0 -9
  199. package/esm2022/lib/smart-form/highlightMacthingString-pipe.mjs +0 -20
  200. package/esm2022/lib/smart-form/projects.mjs +0 -18
  201. package/esm2022/lib/smart-form/services/smartform.layout-definition.service.mjs +0 -754
  202. package/esm2022/lib/smart-form/services/smartform.service.mjs +0 -683
  203. package/esm2022/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +0 -15
  204. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +0 -193
  205. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +0 -2
  206. package/esm2022/lib/smart-form/smartform.component.mjs +0 -190
  207. package/esm2022/lib/smart-form/smartform.form-model.mjs +0 -2
  208. package/esm2022/lib/smart-form/smartform.model.mjs +0 -38
  209. package/esm2022/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.mjs +0 -179
  210. package/esm2022/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +0 -83
  211. package/esm2022/lib/smart-form/widgets/components/smart-multi-file-editor/smart-multi-file-editor.component.mjs +0 -170
  212. package/esm2022/lib/smart-form/widgets/components/smart-voice-recorder/smart-voice-recorder.component.mjs +0 -151
  213. package/esm2022/lib/smart-form/widgets/directives/comparable-dropdown.directive.mjs +0 -35
  214. package/esm2022/lib/smart-form/widgets/directives/comparable-multiselect.directive.mjs +0 -79
  215. package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +0 -1050
  216. package/esm2022/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +0 -78
  217. package/esm2022/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +0 -31
  218. package/esm2022/lib/smart-generic-pages/acl-editing-view/acl-editing-view.component.mjs +0 -98
  219. package/esm2022/lib/smart-generic-pages/api/platform/acl/model/aCL.mjs +0 -2
  220. package/esm2022/lib/smart-generic-pages/api/platform/acl/model/aCLEntry.mjs +0 -18
  221. package/esm2022/lib/smart-generic-pages/api/platform/acl/model/objectValidationSeverity.mjs +0 -19
  222. package/esm2022/lib/smart-generic-pages/api/platform/acl/model/subject.mjs +0 -13
  223. package/esm2022/lib/smart-generic-pages/api/platform/api-default/objectHistoryRangeData.mjs +0 -2
  224. package/esm2022/lib/smart-generic-pages/api/platform/searchpage/model/searchPageModel.mjs +0 -2
  225. package/esm2022/lib/smart-generic-pages/api/platform/subjectselector/model/subjectSelectorPageModel.mjs +0 -13
  226. package/esm2022/lib/smart-generic-pages/api/platform/validation/model/validationItem.mjs +0 -2
  227. package/esm2022/lib/smart-generic-pages/api/platform/validation/model/validationResultPageModel.mjs +0 -2
  228. package/esm2022/lib/smart-generic-pages/generic-page/generic-page.component.mjs +0 -54
  229. package/esm2022/lib/smart-generic-pages/invalid-smartlink/invalid-smartlink.component.mjs +0 -40
  230. package/esm2022/lib/smart-generic-pages/no-permission-page/no-permission-page.component.mjs +0 -40
  231. package/esm2022/lib/smart-generic-pages/projects.mjs +0 -13
  232. package/esm2022/lib/smart-generic-pages/search-page/search-page.component.mjs +0 -81
  233. package/esm2022/lib/smart-generic-pages/smart-generic-pages.module.mjs +0 -116
  234. package/esm2022/lib/smart-generic-pages/subject-selector/subject-selector.component.mjs +0 -78
  235. package/esm2022/lib/smart-generic-pages/validation-result-page/validation-result-page.component.mjs +0 -93
  236. package/esm2022/lib/smart-grid/api/grid-api/api/api.mjs +0 -4
  237. package/esm2022/lib/smart-grid/api/grid-api/api/grid.service.mjs +0 -514
  238. package/esm2022/lib/smart-grid/api/grid-api/api.module.mjs +0 -40
  239. package/esm2022/lib/smart-grid/api/grid-api/configuration.mjs +0 -91
  240. package/esm2022/lib/smart-grid/api/grid-api/encoder.mjs +0 -19
  241. package/esm2022/lib/smart-grid/api/grid-api/index.mjs +0 -7
  242. package/esm2022/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +0 -17
  243. package/esm2022/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +0 -2
  244. package/esm2022/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +0 -20
  245. package/esm2022/lib/smart-grid/api/grid-api/model/gridExportDescriptor.mjs +0 -2
  246. package/esm2022/lib/smart-grid/api/grid-api/model/gridModel.mjs +0 -2
  247. package/esm2022/lib/smart-grid/api/grid-api/model/gridPage.mjs +0 -2
  248. package/esm2022/lib/smart-grid/api/grid-api/model/gridRow.mjs +0 -2
  249. package/esm2022/lib/smart-grid/api/grid-api/model/gridRowLayoutDescriptor.mjs +0 -2
  250. package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionChange.mjs +0 -13
  251. package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +0 -18
  252. package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +0 -17
  253. package/esm2022/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +0 -2
  254. package/esm2022/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +0 -2
  255. package/esm2022/lib/smart-grid/api/grid-api/model/gridView.mjs +0 -2
  256. package/esm2022/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +0 -8
  257. package/esm2022/lib/smart-grid/api/grid-api/model/models.mjs +0 -16
  258. package/esm2022/lib/smart-grid/api/grid-api/param.mjs +0 -2
  259. package/esm2022/lib/smart-grid/api/grid-api/variables.mjs +0 -9
  260. package/esm2022/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +0 -20
  261. package/esm2022/lib/smart-grid/components/generic-component/expanded-row-renderer.component.mjs +0 -47
  262. package/esm2022/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +0 -92
  263. package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +0 -200
  264. package/esm2022/lib/smart-grid/models/model.mjs +0 -29
  265. package/esm2022/lib/smart-grid/projects.mjs +0 -9
  266. package/esm2022/lib/smart-grid/smart-grid-toolbar-util.mjs +0 -76
  267. package/esm2022/lib/smart-grid/smart-grid.component.mjs +0 -1074
  268. package/esm2022/lib/smart-grid/smart-grid.module.mjs +0 -103
  269. package/esm2022/lib/smart-grid/smart-grid.service.mjs +0 -92
  270. package/esm2022/lib/smart-icon/projects.mjs +0 -9
  271. package/esm2022/lib/smart-icon/smart-icon/smart-icon.component.mjs +0 -95
  272. package/esm2022/lib/smart-icon/smart-icon/ui-badge/ui-badge.component.mjs +0 -33
  273. package/esm2022/lib/smart-icon/smart-icon/ui-badge/ui-badge.directive.mjs +0 -37
  274. package/esm2022/lib/smart-icon/smart-icon.module.mjs +0 -26
  275. package/esm2022/lib/smart-icon/smart-icon.service.mjs +0 -93
  276. package/esm2022/lib/smart-map/abstract-map.mjs +0 -112
  277. package/esm2022/lib/smart-map/api/api/api.mjs +0 -4
  278. package/esm2022/lib/smart-map/api/api/geoMap.service.mjs +0 -312
  279. package/esm2022/lib/smart-map/api/api.module.mjs +0 -40
  280. package/esm2022/lib/smart-map/api/configuration.mjs +0 -91
  281. package/esm2022/lib/smart-map/api/encoder.mjs +0 -19
  282. package/esm2022/lib/smart-map/api/index.mjs +0 -7
  283. package/esm2022/lib/smart-map/api/model/gPSPosition.mjs +0 -13
  284. package/esm2022/lib/smart-map/api/model/gPSRoute.mjs +0 -2
  285. package/esm2022/lib/smart-map/api/model/geoMapChange.mjs +0 -2
  286. package/esm2022/lib/smart-map/api/model/geoMapDataLoadingMode.mjs +0 -17
  287. package/esm2022/lib/smart-map/api/model/geoMapDataSourceDescriptor.mjs +0 -2
  288. package/esm2022/lib/smart-map/api/model/geoMapDataSourceType.mjs +0 -19
  289. package/esm2022/lib/smart-map/api/model/geoMapEditingSession.mjs +0 -2
  290. package/esm2022/lib/smart-map/api/model/geoMapInteraction.mjs +0 -2
  291. package/esm2022/lib/smart-map/api/model/geoMapItem.mjs +0 -2
  292. package/esm2022/lib/smart-map/api/model/geoMapItemKind.mjs +0 -18
  293. package/esm2022/lib/smart-map/api/model/geoMapLayer.mjs +0 -2
  294. package/esm2022/lib/smart-map/api/model/geoMapLayerChange.mjs +0 -2
  295. package/esm2022/lib/smart-map/api/model/geoMapLayerDescriptor.mjs +0 -2
  296. package/esm2022/lib/smart-map/api/model/geoMapModel.mjs +0 -2
  297. package/esm2022/lib/smart-map/api/model/geoMapOperationMode.mjs +0 -17
  298. package/esm2022/lib/smart-map/api/model/geoMapSelectionMode.mjs +0 -18
  299. package/esm2022/lib/smart-map/api/model/geoMapServerModel.mjs +0 -2
  300. package/esm2022/lib/smart-map/api/model/geoMapTextType.mjs +0 -17
  301. package/esm2022/lib/smart-map/api/model/geoMapViewState.mjs +0 -2
  302. package/esm2022/lib/smart-map/api/model/geoMapViewport.mjs +0 -2
  303. package/esm2022/lib/smart-map/api/model/models.mjs +0 -21
  304. package/esm2022/lib/smart-map/api/param.mjs +0 -2
  305. package/esm2022/lib/smart-map/api/variables.mjs +0 -9
  306. package/esm2022/lib/smart-map/api-default/api-default.mjs +0 -2
  307. package/esm2022/lib/smart-map/impl/google-map.mjs +0 -224
  308. package/esm2022/lib/smart-map/impl/leaflet-map.mjs +0 -422
  309. package/esm2022/lib/smart-map/projects.mjs +0 -9
  310. package/esm2022/lib/smart-map/smart-map.component.mjs +0 -222
  311. package/esm2022/lib/smart-map/smart-map.module.mjs +0 -22
  312. package/esm2022/lib/smart-map/smart-map.types.mjs +0 -2
  313. package/esm2022/lib/smart-navbar/projects.mjs +0 -8
  314. package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +0 -61
  315. package/esm2022/lib/smart-navbar/smart-navbar.model.mjs +0 -6
  316. package/esm2022/lib/smart-navbar/smart-navbar.module.mjs +0 -63
  317. package/esm2022/lib/smart-navbar/smart-navbar.service.mjs +0 -14
  318. package/esm2022/lib/smart-navigation/projects.mjs +0 -6
  319. package/esm2022/lib/smart-navigation/smart-navigation.interface.mjs +0 -2
  320. package/esm2022/lib/smart-navigation/smart-navigation.module.mjs +0 -18
  321. package/esm2022/lib/smart-navigation/smart-navigation.service.mjs +0 -27
  322. package/esm2022/lib/smart-ng-client.module.mjs +0 -131
  323. package/esm2022/lib/smart-ng-client.service.mjs +0 -19
  324. package/esm2022/lib/smart-subject/projects.mjs +0 -5
  325. package/esm2022/lib/smart-subject/smart-subject.mjs +0 -21
  326. package/esm2022/lib/smart-tab-group/projects.mjs +0 -5
  327. package/esm2022/lib/smart-tab-group/smart-tab-group.module.mjs +0 -22
  328. package/esm2022/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +0 -43
  329. package/esm2022/lib/smart-table/components/loading/loading.component.mjs +0 -15
  330. package/esm2022/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +0 -52
  331. package/esm2022/lib/smart-table/projects.mjs +0 -8
  332. package/esm2022/lib/smart-table/smarttable.component.mjs +0 -98
  333. package/esm2022/lib/smart-table/smarttable.model.mjs +0 -177
  334. package/esm2022/lib/smart-table/smarttable.module.mjs +0 -109
  335. package/esm2022/lib/smart-table/smarttable.service.mjs +0 -14
  336. package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +0 -40
  337. package/esm2022/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +0 -23
  338. package/esm2022/lib/smart-table/tables/table.mjs +0 -614
  339. package/esm2022/lib/smart-tree/projects.mjs +0 -9
  340. package/esm2022/lib/smart-tree/smarttree-generic.service.mjs +0 -292
  341. package/esm2022/lib/smart-tree/smarttree.component.mjs +0 -188
  342. package/esm2022/lib/smart-tree/smarttree.model.mjs +0 -7
  343. package/esm2022/lib/smart-tree/smarttree.module.mjs +0 -64
  344. package/esm2022/lib/smart-tree/smarttree.node.model.mjs +0 -6
  345. package/esm2022/lib/smart-tree/smarttree.service.interface.mjs +0 -2
  346. package/esm2022/lib/smart-tree/smarttree.service.mjs +0 -47
  347. package/esm2022/lib/smart-tree/tree-api/api/tree.service.mjs +0 -1190
  348. package/esm2022/lib/smart-tree/tree-api/configuration.mjs +0 -91
  349. package/esm2022/lib/smart-tree/tree-api/encoder.mjs +0 -19
  350. package/esm2022/lib/smart-tree/tree-api/param.mjs +0 -2
  351. package/esm2022/lib/smart-tree/tree-api/variables.mjs +0 -9
  352. package/esm2022/lib/smart-validation/named-validator.service.mjs +0 -115
  353. package/esm2022/lib/smart-validation/projects.mjs +0 -4
  354. package/esm2022/lib/smart-validation/smart-validation.module.mjs +0 -24
  355. package/esm2022/lib/smart-validation/smart-validation.types.mjs +0 -4
  356. package/esm2022/lib/theme/theme.service.mjs +0 -48
  357. package/esm2022/lib/view-context/api/api/api.mjs +0 -4
  358. package/esm2022/lib/view-context/api/api/view.service.mjs +0 -1113
  359. package/esm2022/lib/view-context/api/api-default/binaryContentData.mjs +0 -2
  360. package/esm2022/lib/view-context/api/api-default/binaryData.mjs +0 -2
  361. package/esm2022/lib/view-context/api/api-default/invocationError.mjs +0 -2
  362. package/esm2022/lib/view-context/api/api-default/invocationRequest.mjs +0 -2
  363. package/esm2022/lib/view-context/api/api-default/invocationRun.mjs +0 -2
  364. package/esm2022/lib/view-context/api/api.module.mjs +0 -40
  365. package/esm2022/lib/view-context/api/configuration.mjs +0 -91
  366. package/esm2022/lib/view-context/api/encoder.mjs +0 -19
  367. package/esm2022/lib/view-context/api/index.mjs +0 -7
  368. package/esm2022/lib/view-context/api/model/backgroundProcessInfo.mjs +0 -2
  369. package/esm2022/lib/view-context/api/model/badgeDescriptor.mjs +0 -13
  370. package/esm2022/lib/view-context/api/model/clipboardData.mjs +0 -13
  371. package/esm2022/lib/view-context/api/model/closeResult.mjs +0 -18
  372. package/esm2022/lib/view-context/api/model/componentConstraint.mjs +0 -2
  373. package/esm2022/lib/view-context/api/model/componentModel.mjs +0 -2
  374. package/esm2022/lib/view-context/api/model/componentModelChange.mjs +0 -13
  375. package/esm2022/lib/view-context/api/model/dataChange.mjs +0 -2
  376. package/esm2022/lib/view-context/api/model/dataChangeEvent.mjs +0 -2
  377. package/esm2022/lib/view-context/api/model/dataChangeKind.mjs +0 -21
  378. package/esm2022/lib/view-context/api/model/deviceInfo.mjs +0 -13
  379. package/esm2022/lib/view-context/api/model/downloadedFile.mjs +0 -13
  380. package/esm2022/lib/view-context/api/model/iconPosition.mjs +0 -20
  381. package/esm2022/lib/view-context/api/model/imageResource.mjs +0 -8
  382. package/esm2022/lib/view-context/api/model/link.mjs +0 -20
  383. package/esm2022/lib/view-context/api/model/menuDescriptor.mjs +0 -2
  384. package/esm2022/lib/view-context/api/model/menuOpenDirection.mjs +0 -23
  385. package/esm2022/lib/view-context/api/model/menuTriggerType.mjs +0 -17
  386. package/esm2022/lib/view-context/api/model/messageData.mjs +0 -2
  387. package/esm2022/lib/view-context/api/model/messageOption.mjs +0 -2
  388. package/esm2022/lib/view-context/api/model/messageOptionType.mjs +0 -18
  389. package/esm2022/lib/view-context/api/model/messageResult.mjs +0 -2
  390. package/esm2022/lib/view-context/api/model/messageTextType.mjs +0 -17
  391. package/esm2022/lib/view-context/api/model/messageType.mjs +0 -19
  392. package/esm2022/lib/view-context/api/model/models.mjs +0 -71
  393. package/esm2022/lib/view-context/api/model/multiComboBoxElement.mjs +0 -13
  394. package/esm2022/lib/view-context/api/model/multiComboBoxModel.mjs +0 -2
  395. package/esm2022/lib/view-context/api/model/namedValidator.mjs +0 -19
  396. package/esm2022/lib/view-context/api/model/openPendingData.mjs +0 -2
  397. package/esm2022/lib/view-context/api/model/publishedViewData.mjs +0 -13
  398. package/esm2022/lib/view-context/api/model/serverRequestExecutionStat.mjs +0 -2
  399. package/esm2022/lib/view-context/api/model/serverRequestTrack.mjs +0 -2
  400. package/esm2022/lib/view-context/api/model/serverRequestType.mjs +0 -24
  401. package/esm2022/lib/view-context/api/model/shellProperty.mjs +0 -13
  402. package/esm2022/lib/view-context/api/model/smartLinkData.mjs +0 -2
  403. package/esm2022/lib/view-context/api/model/smartLinkMigrationStatus.mjs +0 -8
  404. package/esm2022/lib/view-context/api/model/statisticRecord.mjs +0 -13
  405. package/esm2022/lib/view-context/api/model/style.mjs +0 -13
  406. package/esm2022/lib/view-context/api/model/themeDefinition.mjs +0 -2
  407. package/esm2022/lib/view-context/api/model/themeDescriptor.mjs +0 -2
  408. package/esm2022/lib/view-context/api/model/themeShellDescriptor.mjs +0 -2
  409. package/esm2022/lib/view-context/api/model/uiAction.mjs +0 -2
  410. package/esm2022/lib/view-context/api/model/uiActionButtonDescriptor.mjs +0 -2
  411. package/esm2022/lib/view-context/api/model/uiActionButtonType.mjs +0 -27
  412. package/esm2022/lib/view-context/api/model/uiActionConstraint.mjs +0 -13
  413. package/esm2022/lib/view-context/api/model/uiActionDefinition.mjs +0 -2
  414. package/esm2022/lib/view-context/api/model/uiActionDefinitionEntry.mjs +0 -2
  415. package/esm2022/lib/view-context/api/model/uiActionDescriptor.mjs +0 -2
  416. package/esm2022/lib/view-context/api/model/uiActionDialogDescriptor.mjs +0 -2
  417. package/esm2022/lib/view-context/api/model/uiActionFeedbackType.mjs +0 -20
  418. package/esm2022/lib/view-context/api/model/uiActionInputType.mjs +0 -21
  419. package/esm2022/lib/view-context/api/model/uiActionRequest.mjs +0 -13
  420. package/esm2022/lib/view-context/api/model/uiActionSchedule.mjs +0 -13
  421. package/esm2022/lib/view-context/api/model/uiActionTooltip.mjs +0 -22
  422. package/esm2022/lib/view-context/api/model/uiActionUploadDescriptor.mjs +0 -2
  423. package/esm2022/lib/view-context/api/model/uploadWidgetType.mjs +0 -18
  424. package/esm2022/lib/view-context/api/model/uploadedFile.mjs +0 -2
  425. package/esm2022/lib/view-context/api/model/valueSet.mjs +0 -2
  426. package/esm2022/lib/view-context/api/model/view.mjs +0 -2
  427. package/esm2022/lib/view-context/api/model/viewApiError.mjs +0 -13
  428. package/esm2022/lib/view-context/api/model/viewConstraint.mjs +0 -2
  429. package/esm2022/lib/view-context/api/model/viewContext.mjs +0 -2
  430. package/esm2022/lib/view-context/api/model/viewContextChange.mjs +0 -2
  431. package/esm2022/lib/view-context/api/model/viewContextData.mjs +0 -2
  432. package/esm2022/lib/view-context/api/model/viewContextUpdate.mjs +0 -2
  433. package/esm2022/lib/view-context/api/model/viewData.mjs +0 -2
  434. package/esm2022/lib/view-context/api/model/viewEventHandler.mjs +0 -8
  435. package/esm2022/lib/view-context/api/model/viewPlaceholder.mjs +0 -13
  436. package/esm2022/lib/view-context/api/model/viewState.mjs +0 -22
  437. package/esm2022/lib/view-context/api/model/viewStateUpdate.mjs +0 -2
  438. package/esm2022/lib/view-context/api/model/viewType.mjs +0 -18
  439. package/esm2022/lib/view-context/api/param.mjs +0 -2
  440. package/esm2022/lib/view-context/api/variables.mjs +0 -9
  441. package/esm2022/lib/view-context/default-view-components.token.mjs +0 -9
  442. package/esm2022/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +0 -20
  443. package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +0 -93
  444. package/esm2022/lib/view-context/projects.mjs +0 -30
  445. package/esm2022/lib/view-context/property-definition-data.mjs +0 -2
  446. package/esm2022/lib/view-context/reuse-router-slot.token.mjs +0 -4
  447. package/esm2022/lib/view-context/smart-embedded-slot.directive.mjs +0 -57
  448. package/esm2022/lib/view-context/smart-ui-action/components/menu/click/menu.component.mjs +0 -254
  449. package/esm2022/lib/view-context/smart-ui-action/components/menu/hover/hover-menu.component.mjs +0 -256
  450. package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.constants.mjs +0 -62
  451. package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.service.mjs +0 -29
  452. package/esm2022/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +0 -30
  453. package/esm2022/lib/view-context/smart-ui-action/components/theme-selector/theme-selector.component.mjs +0 -35
  454. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/photo-capture-widget/photo-capture-widget.component.mjs +0 -198
  455. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/prime-file-uploader/prime-file-uploader.component.mjs +0 -95
  456. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.component.mjs +0 -134
  457. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.utils.mjs +0 -12
  458. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/voice-record-widget/voice-record-widget.component.mjs +0 -256
  459. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +0 -77
  460. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +0 -54
  461. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-dialog-button/ui-action-dialog-button.component.mjs +0 -60
  462. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +0 -106
  463. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +0 -60
  464. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +0 -132
  465. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +0 -58
  466. package/esm2022/lib/view-context/smart-ui-action/file-editor-toolbar/file-editor-toolbar.component.mjs +0 -35
  467. package/esm2022/lib/view-context/smart-ui-action/ui-action-button/button-icon-placeholder.mjs +0 -7
  468. package/esm2022/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.mjs +0 -258
  469. package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +0 -349
  470. package/esm2022/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +0 -185
  471. package/esm2022/lib/view-context/smart-ui-action/ui-action.model.mjs +0 -7
  472. package/esm2022/lib/view-context/smart-ui-action/ui-action.service.mjs +0 -250
  473. package/esm2022/lib/view-context/smart-view-context-dialog.service.mjs +0 -77
  474. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +0 -35
  475. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +0 -74
  476. package/esm2022/lib/view-context/smart-view-context.interceptor.mjs +0 -63
  477. package/esm2022/lib/view-context/smart-view-context.model.mjs +0 -2
  478. package/esm2022/lib/view-context/smart-view-context.module.mjs +0 -405
  479. package/esm2022/lib/view-context/smart-view-context.service.mjs +0 -1079
  480. package/esm2022/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +0 -41
  481. package/esm2022/lib/view-context/utility/componentLibrary.mjs +0 -9
  482. package/esm2022/lib/view-context/utility/smart-object-utility.mjs +0 -44
  483. package/esm2022/lib/view-context/utility/smart-style-utility.mjs +0 -68
  484. package/esm2022/lib/view-context/value-api/api/api.mjs +0 -4
  485. package/esm2022/lib/view-context/value-api/api/value.service.mjs +0 -138
  486. package/esm2022/lib/view-context/value-api/api.module.mjs +0 -40
  487. package/esm2022/lib/view-context/value-api/configuration.mjs +0 -91
  488. package/esm2022/lib/view-context/value-api/encoder.mjs +0 -19
  489. package/esm2022/lib/view-context/value-api/index.mjs +0 -7
  490. package/esm2022/lib/view-context/value-api/model/genericValue.mjs +0 -13
  491. package/esm2022/lib/view-context/value-api/model/models.mjs +0 -11
  492. package/esm2022/lib/view-context/value-api/model/value.mjs +0 -13
  493. package/esm2022/lib/view-context/value-api/model/valueSetData.mjs +0 -2
  494. package/esm2022/lib/view-context/value-api/model/valueSetDefinition.mjs +0 -2
  495. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionData.mjs +0 -2
  496. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +0 -13
  497. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +0 -24
  498. package/esm2022/lib/view-context/value-api/model/valueSetExpression.mjs +0 -2
  499. package/esm2022/lib/view-context/value-api/model/valueSetOperand.mjs +0 -2
  500. package/esm2022/lib/view-context/value-api/model/valueSetOperation.mjs +0 -19
  501. package/esm2022/lib/view-context/value-api/param.mjs +0 -2
  502. package/esm2022/lib/view-context/value-api/variables.mjs +0 -9
  503. package/esm2022/lib/view-context/view-handler-resolution.mjs +0 -21
  504. package/esm2022/lib/view-context/view-op.mjs +0 -41
  505. package/esm2022/lib/view-context/view-slot-resolution.mjs +0 -28
  506. package/esm2022/projects.mjs +0 -31
  507. package/esm2022/smartbit4all-ng-client.mjs +0 -5
  508. package/index.d.ts +0 -5
  509. package/lib/component-factory-service/component-factory-service.module.d.ts +0 -6
  510. package/lib/component-factory-service/component-factory-service.service.d.ts +0 -13
  511. package/lib/component-factory-service/projects.d.ts +0 -2
  512. package/lib/session/api/api/api.d.ts +0 -3
  513. package/lib/session/api/api/session.service.d.ts +0 -107
  514. package/lib/session/api/configuration.d.ts +0 -104
  515. package/lib/session/api/encoder.d.ts +0 -11
  516. package/lib/session/api/index.d.ts +0 -2
  517. package/lib/session/api/model/accountInfo.d.ts +0 -24
  518. package/lib/session/api/model/apiError.d.ts +0 -15
  519. package/lib/session/api/model/authenticationProviderData.d.ts +0 -17
  520. package/lib/session/api/model/getAuthenticationProvidersResponse.d.ts +0 -15
  521. package/lib/session/api/model/models.d.ts +0 -8
  522. package/lib/session/api/model/refreshSessionRequest.d.ts +0 -14
  523. package/lib/session/api/model/session.d.ts +0 -32
  524. package/lib/session/api/model/sessionInfoData.d.ts +0 -26
  525. package/lib/session/api/model/userActivityLog.d.ts +0 -33
  526. package/lib/session/api/param.d.ts +0 -37
  527. package/lib/session/api/variables.d.ts +0 -8
  528. package/lib/session/cookie-service/smart-cookie.service.d.ts +0 -129
  529. package/lib/session/projects.d.ts +0 -8
  530. package/lib/session/smart-backend-bootstrap.config.d.ts +0 -73
  531. package/lib/session/smart-backend-bootstrap.service.d.ts +0 -57
  532. package/lib/session/smart-default-error-ui.service.d.ts +0 -90
  533. package/lib/session/smart-error-catching.interceptor.d.ts +0 -21
  534. package/lib/session/smart-header-maintainer.interceptor.d.ts +0 -11
  535. package/lib/session/smart-session-handler.service.d.ts +0 -22
  536. package/lib/session/smart-session.module.d.ts +0 -12
  537. package/lib/session/smart-session.service.d.ts +0 -88
  538. package/lib/session/smart-timer/smart-session-timer.component.d.ts +0 -19
  539. package/lib/shared/projects.d.ts +0 -3
  540. package/lib/shared/shared.module.d.ts +0 -9
  541. package/lib/shared/smart-tooltip.directive.d.ts +0 -16
  542. package/lib/shared/smarttable.date-pipe.d.ts +0 -18
  543. package/lib/smart-client/projects.d.ts +0 -3
  544. package/lib/smart-client/smart-component-api-client.d.ts +0 -143
  545. package/lib/smart-client/smart-file-uploader/smart-file-uploader.component.d.ts +0 -25
  546. package/lib/smart-client/smart.component.d.ts +0 -35
  547. package/lib/smart-client/smart.service.d.ts +0 -29
  548. package/lib/smart-component-layout/api/api/api.d.ts +0 -3
  549. package/lib/smart-component-layout/api/api/default.service.d.ts +0 -33
  550. package/lib/smart-component-layout/api/api.module.d.ts +0 -11
  551. package/lib/smart-component-layout/api/configuration.d.ts +0 -104
  552. package/lib/smart-component-layout/api/encoder.d.ts +0 -11
  553. package/lib/smart-component-layout/api/index.d.ts +0 -6
  554. package/lib/smart-component-layout/api/model/componentType.d.ts +0 -16
  555. package/lib/smart-component-layout/api/model/componentWidgetType.d.ts +0 -20
  556. package/lib/smart-component-layout/api/model/layoutDefinitionDescriptor.d.ts +0 -19
  557. package/lib/smart-component-layout/api/model/layoutDirection.d.ts +0 -15
  558. package/lib/smart-component-layout/api/model/models.d.ts +0 -9
  559. package/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.d.ts +0 -32
  560. package/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.d.ts +0 -26
  561. package/lib/smart-component-layout/api/model/toolbarAlignment.d.ts +0 -15
  562. package/lib/smart-component-layout/api/model/toolbarDirection.d.ts +0 -15
  563. package/lib/smart-component-layout/api/model/toolbarProperties.d.ts +0 -18
  564. package/lib/smart-component-layout/api/param.d.ts +0 -37
  565. package/lib/smart-component-layout/api/variables.d.ts +0 -8
  566. package/lib/smart-component-layout/projects.d.ts +0 -4
  567. package/lib/smart-component-layout/smart-component-layout-utility.d.ts +0 -25
  568. package/lib/smart-component-layout/smart-component-layout.component.d.ts +0 -93
  569. package/lib/smart-component-layout/smart-component-layout.module.d.ts +0 -17
  570. package/lib/smart-diagram/api/api/api.d.ts +0 -3
  571. package/lib/smart-diagram/api/api/diagramService.service.d.ts +0 -36
  572. package/lib/smart-diagram/api/api.module.d.ts +0 -11
  573. package/lib/smart-diagram/api/configuration.d.ts +0 -104
  574. package/lib/smart-diagram/api/encoder.d.ts +0 -11
  575. package/lib/smart-diagram/api/index.d.ts +0 -6
  576. package/lib/smart-diagram/api/model/diagramColor.d.ts +0 -17
  577. package/lib/smart-diagram/api/model/diagramDataContainer.d.ts +0 -19
  578. package/lib/smart-diagram/api/model/diagramDataItem.d.ts +0 -25
  579. package/lib/smart-diagram/api/model/diagramDataSet.d.ts +0 -22
  580. package/lib/smart-diagram/api/model/diagramDescriptor.d.ts +0 -57
  581. package/lib/smart-diagram/api/model/diagramModel.d.ts +0 -19
  582. package/lib/smart-diagram/api/model/diagramShape.d.ts +0 -30
  583. package/lib/smart-diagram/api/model/drawTime.d.ts +0 -18
  584. package/lib/smart-diagram/api/model/labelText.d.ts +0 -21
  585. package/lib/smart-diagram/api/model/models.d.ts +0 -9
  586. package/lib/smart-diagram/api/param.d.ts +0 -37
  587. package/lib/smart-diagram/api/variables.d.ts +0 -8
  588. package/lib/smart-diagram/component/default-smart-diagram-options.provider.d.ts +0 -33
  589. package/lib/smart-diagram/component/smart-diagram.component.d.ts +0 -43
  590. package/lib/smart-diagram/component/smart-diagram.module.d.ts +0 -11
  591. package/lib/smart-diagram/component/smart-diagram.util.d.ts +0 -1
  592. package/lib/smart-diagram/projects.d.ts +0 -4
  593. package/lib/smart-dialog/projects.d.ts +0 -4
  594. package/lib/smart-dialog/smartdialog.component.d.ts +0 -19
  595. package/lib/smart-dialog/smartdialog.model.d.ts +0 -68
  596. package/lib/smart-dialog/smartdialog.module.d.ts +0 -14
  597. package/lib/smart-dialog/smartdialog.service.d.ts +0 -28
  598. package/lib/smart-expandable-section/expandable-section.component.d.ts +0 -30
  599. package/lib/smart-expandable-section/expandable-section.model.d.ts +0 -43
  600. package/lib/smart-expandable-section/projects.d.ts +0 -4
  601. package/lib/smart-expandable-section/smart-expandable-section.module.d.ts +0 -17
  602. package/lib/smart-expandable-section/smart-expandable-section.service.d.ts +0 -6
  603. package/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.d.ts +0 -15
  604. package/lib/smart-filter/api/filter/model/filterExpressionBuilderField.d.ts +0 -27
  605. package/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.d.ts +0 -36
  606. package/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.d.ts +0 -27
  607. package/lib/smart-filter/api/filter/model/filterExpressionData.d.ts +0 -27
  608. package/lib/smart-filter/api/filter/model/filterExpressionDataType.d.ts +0 -18
  609. package/lib/smart-filter/api/filter/model/filterExpressionField.d.ts +0 -44
  610. package/lib/smart-filter/api/filter/model/filterExpressionFieldList.d.ts +0 -21
  611. package/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.d.ts +0 -26
  612. package/lib/smart-filter/api/filter/model/filterExpressionList.d.ts +0 -18
  613. package/lib/smart-filter/api/filter/model/filterExpressionOperandData.d.ts +0 -25
  614. package/lib/smart-filter/api/filter/model/filterExpressionOperation.d.ts +0 -30
  615. package/lib/smart-filter/api/filter/model/filterExpressionOrderBy.d.ts +0 -25
  616. package/lib/smart-filter/api/filter/model/model.d.ts +0 -15
  617. package/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.d.ts +0 -19
  618. package/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.d.ts +0 -18
  619. package/lib/smart-filter/api/value/model/value.d.ts +0 -29
  620. package/lib/smart-filter/projects.d.ts +0 -5
  621. package/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.d.ts +0 -8
  622. package/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.d.ts +0 -31
  623. package/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.d.ts +0 -18
  624. package/lib/smart-filter/smart-filter/smart-filter.component.d.ts +0 -15
  625. package/lib/smart-filter/smart-filter/smart-filter.service.d.ts +0 -16
  626. package/lib/smart-filter/smart-filter.model.d.ts +0 -25
  627. package/lib/smart-filter/smart-filter.module.d.ts +0 -15
  628. package/lib/smart-filter-editor/api/api/api.d.ts +0 -3
  629. package/lib/smart-filter-editor/api/api/filter.service.d.ts +0 -57
  630. package/lib/smart-filter-editor/api/api.module.d.ts +0 -11
  631. package/lib/smart-filter-editor/api/configuration.d.ts +0 -104
  632. package/lib/smart-filter-editor/api/encoder.d.ts +0 -11
  633. package/lib/smart-filter-editor/api/index.d.ts +0 -6
  634. package/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.d.ts +0 -15
  635. package/lib/smart-filter-editor/api/model/filterExpressionBuilder.d.ts +0 -16
  636. package/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.d.ts +0 -16
  637. package/lib/smart-filter-editor/api/model/filterExpressionBuilderField.d.ts +0 -27
  638. package/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.d.ts +0 -36
  639. package/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.d.ts +0 -27
  640. package/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.d.ts +0 -38
  641. package/lib/smart-filter-editor/api/model/filterExpressionData.d.ts +0 -27
  642. package/lib/smart-filter-editor/api/model/filterExpressionDataType.d.ts +0 -18
  643. package/lib/smart-filter-editor/api/model/filterExpressionField.d.ts +0 -44
  644. package/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.d.ts +0 -17
  645. package/lib/smart-filter-editor/api/model/filterExpressionFieldList.d.ts +0 -23
  646. package/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.d.ts +0 -26
  647. package/lib/smart-filter-editor/api/model/filterExpressionList.d.ts +0 -18
  648. package/lib/smart-filter-editor/api/model/filterExpressionOperandData.d.ts +0 -25
  649. package/lib/smart-filter-editor/api/model/filterExpressionOperation.d.ts +0 -30
  650. package/lib/smart-filter-editor/api/model/filterExpressionOrderBy.d.ts +0 -28
  651. package/lib/smart-filter-editor/api/model/models.d.ts +0 -19
  652. package/lib/smart-filter-editor/api/model/searchPageConfig.d.ts +0 -73
  653. package/lib/smart-filter-editor/api/model/smartFilterType.d.ts +0 -15
  654. package/lib/smart-filter-editor/api/param.d.ts +0 -37
  655. package/lib/smart-filter-editor/api/variables.d.ts +0 -8
  656. package/lib/smart-filter-editor/filter-utils.d.ts +0 -2
  657. package/lib/smart-filter-editor/filterExpressionBuilderApiActions.d.ts +0 -13
  658. package/lib/smart-filter-editor/project.d.ts +0 -10
  659. package/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/advanced-relation-button/advanced-relation-button.component.d.ts +0 -11
  660. package/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/advanced-smart-filter-expression-item/advanced-smart-filter-expression-item.component.d.ts +0 -11
  661. package/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/expression-editor-dialog/expression-editor-dialog.component.d.ts +0 -14
  662. package/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/expression-editor-dialog/expression-editor-dialog.service.d.ts +0 -21
  663. package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.d.ts +0 -19
  664. package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.d.ts +0 -20
  665. package/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.d.ts +0 -50
  666. package/lib/smart-filter-editor/smart-filter-editor.model.d.ts +0 -4
  667. package/lib/smart-filter-editor/smart-filter-editor.module.d.ts +0 -21
  668. package/lib/smart-filter-editor/smart-filter-editor.service.d.ts +0 -51
  669. package/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.d.ts +0 -9
  670. package/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.d.ts +0 -21
  671. package/lib/smart-form/api/api/api.d.ts +0 -3
  672. package/lib/smart-form/api/api/default.service.d.ts +0 -33
  673. package/lib/smart-form/api/api.module.d.ts +0 -11
  674. package/lib/smart-form/api/configuration.d.ts +0 -104
  675. package/lib/smart-form/api/encoder.d.ts +0 -11
  676. package/lib/smart-form/api/index.d.ts +0 -6
  677. package/lib/smart-form/api/model/dateFieldProperties.d.ts +0 -15
  678. package/lib/smart-form/api/model/divProperties.d.ts +0 -15
  679. package/lib/smart-form/api/model/fileUploaderProperties.d.ts +0 -20
  680. package/lib/smart-form/api/model/imageProperties.d.ts +0 -15
  681. package/lib/smart-form/api/model/models.d.ts +0 -19
  682. package/lib/smart-form/api/model/multiFileUploaderProperties.d.ts +0 -19
  683. package/lib/smart-form/api/model/propertyMapping.d.ts +0 -24
  684. package/lib/smart-form/api/model/recordingUploaderProperties.d.ts +0 -20
  685. package/lib/smart-form/api/model/selectionDefinition.d.ts +0 -58
  686. package/lib/smart-form/api/model/smartFormInputMode.d.ts +0 -20
  687. package/lib/smart-form/api/model/smartFormWidgetDirection.d.ts +0 -15
  688. package/lib/smart-form/api/model/smartFormWidgetType.d.ts +0 -47
  689. package/lib/smart-form/api/model/smartLayoutDefinition.d.ts +0 -15
  690. package/lib/smart-form/api/model/smartMatrixModel.d.ts +0 -29
  691. package/lib/smart-form/api/model/smartWidgetDefinition.d.ts +0 -125
  692. package/lib/smart-form/api/model/smartWidgetHint.d.ts +0 -19
  693. package/lib/smart-form/api/model/sortDefinition.d.ts +0 -15
  694. package/lib/smart-form/api/model/textBoxProperties.d.ts +0 -15
  695. package/lib/smart-form/api/model/textFieldProperties.d.ts +0 -14
  696. package/lib/smart-form/api/model/valueChangeMode.d.ts +0 -19
  697. package/lib/smart-form/api/param.d.ts +0 -37
  698. package/lib/smart-form/api/variables.d.ts +0 -8
  699. package/lib/smart-form/highlightMacthingString-pipe.d.ts +0 -7
  700. package/lib/smart-form/projects.d.ts +0 -14
  701. package/lib/smart-form/services/smartform.layout-definition.service.d.ts +0 -50
  702. package/lib/smart-form/services/smartform.service.d.ts +0 -52
  703. package/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.d.ts +0 -8
  704. package/lib/smart-form/smartfileuploader/smartfileuploader.component.d.ts +0 -38
  705. package/lib/smart-form/smartfileuploader/smartfileuploader.model.d.ts +0 -7
  706. package/lib/smart-form/smartform.component.d.ts +0 -43
  707. package/lib/smart-form/smartform.form-model.d.ts +0 -864
  708. package/lib/smart-form/smartform.model.d.ts +0 -126
  709. package/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.d.ts +0 -54
  710. package/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.d.ts +0 -29
  711. package/lib/smart-form/widgets/components/smart-multi-file-editor/smart-multi-file-editor.component.d.ts +0 -57
  712. package/lib/smart-form/widgets/components/smart-voice-recorder/smart-voice-recorder.component.d.ts +0 -50
  713. package/lib/smart-form/widgets/directives/comparable-dropdown.directive.d.ts +0 -10
  714. package/lib/smart-form/widgets/directives/comparable-multiselect.directive.d.ts +0 -10
  715. package/lib/smart-form/widgets/smartformwidget/smartformwidget.component.d.ts +0 -173
  716. package/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.d.ts +0 -24
  717. package/lib/smart-form/widgets/smartformwidget/trackCaps.directive.d.ts +0 -9
  718. package/lib/smart-generic-pages/acl-editing-view/acl-editing-view.component.d.ts +0 -21
  719. package/lib/smart-generic-pages/api/platform/acl/model/aCL.d.ts +0 -18
  720. package/lib/smart-generic-pages/api/platform/acl/model/aCLEntry.d.ts +0 -54
  721. package/lib/smart-generic-pages/api/platform/acl/model/objectValidationSeverity.d.ts +0 -19
  722. package/lib/smart-generic-pages/api/platform/acl/model/subject.d.ts +0 -24
  723. package/lib/smart-generic-pages/api/platform/api-default/objectHistoryRangeData.d.ts +0 -2
  724. package/lib/smart-generic-pages/api/platform/searchpage/model/searchPageModel.d.ts +0 -27
  725. package/lib/smart-generic-pages/api/platform/subjectselector/model/subjectSelectorPageModel.d.ts +0 -14
  726. package/lib/smart-generic-pages/api/platform/validation/model/validationItem.d.ts +0 -17
  727. package/lib/smart-generic-pages/api/platform/validation/model/validationResultPageModel.d.ts +0 -18
  728. package/lib/smart-generic-pages/generic-page/generic-page.component.d.ts +0 -12
  729. package/lib/smart-generic-pages/invalid-smartlink/invalid-smartlink.component.d.ts +0 -11
  730. package/lib/smart-generic-pages/no-permission-page/no-permission-page.component.d.ts +0 -11
  731. package/lib/smart-generic-pages/projects.d.ts +0 -9
  732. package/lib/smart-generic-pages/search-page/search-page.component.d.ts +0 -25
  733. package/lib/smart-generic-pages/smart-generic-pages.module.d.ts +0 -19
  734. package/lib/smart-generic-pages/subject-selector/subject-selector.component.d.ts +0 -17
  735. package/lib/smart-generic-pages/validation-result-page/validation-result-page.component.d.ts +0 -25
  736. package/lib/smart-grid/api/grid-api/api/api.d.ts +0 -3
  737. package/lib/smart-grid/api/grid-api/api/grid.service.d.ts +0 -182
  738. package/lib/smart-grid/api/grid-api/api.module.d.ts +0 -11
  739. package/lib/smart-grid/api/grid-api/configuration.d.ts +0 -104
  740. package/lib/smart-grid/api/grid-api/encoder.d.ts +0 -11
  741. package/lib/smart-grid/api/grid-api/index.d.ts +0 -6
  742. package/lib/smart-grid/api/grid-api/model/gridColumnContentType.d.ts +0 -15
  743. package/lib/smart-grid/api/grid-api/model/gridColumnMeta.d.ts +0 -34
  744. package/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.d.ts +0 -44
  745. package/lib/smart-grid/api/grid-api/model/gridExportDescriptor.d.ts +0 -19
  746. package/lib/smart-grid/api/grid-api/model/gridModel.d.ts +0 -36
  747. package/lib/smart-grid/api/grid-api/model/gridPage.d.ts +0 -26
  748. package/lib/smart-grid/api/grid-api/model/gridRow.d.ts +0 -47
  749. package/lib/smart-grid/api/grid-api/model/gridRowLayoutDescriptor.d.ts +0 -20
  750. package/lib/smart-grid/api/grid-api/model/gridSelectionChange.d.ts +0 -24
  751. package/lib/smart-grid/api/grid-api/model/gridSelectionMode.d.ts +0 -16
  752. package/lib/smart-grid/api/grid-api/model/gridSelectionType.d.ts +0 -15
  753. package/lib/smart-grid/api/grid-api/model/gridServerModel.d.ts +0 -22
  754. package/lib/smart-grid/api/grid-api/model/gridUpdateData.d.ts +0 -20
  755. package/lib/smart-grid/api/grid-api/model/gridView.d.ts +0 -21
  756. package/lib/smart-grid/api/grid-api/model/gridViewDescriptor.d.ts +0 -39
  757. package/lib/smart-grid/api/grid-api/model/models.d.ts +0 -15
  758. package/lib/smart-grid/api/grid-api/param.d.ts +0 -37
  759. package/lib/smart-grid/api/grid-api/variables.d.ts +0 -8
  760. package/lib/smart-grid/components/expandable-grid/expandable-grid.component.d.ts +0 -10
  761. package/lib/smart-grid/components/generic-component/expanded-row-renderer.component.d.ts +0 -21
  762. package/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.d.ts +0 -26
  763. package/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.d.ts +0 -47
  764. package/lib/smart-grid/models/model.d.ts +0 -73
  765. package/lib/smart-grid/projects.d.ts +0 -5
  766. package/lib/smart-grid/smart-grid-toolbar-util.d.ts +0 -12
  767. package/lib/smart-grid/smart-grid.component.d.ts +0 -157
  768. package/lib/smart-grid/smart-grid.module.d.ts +0 -29
  769. package/lib/smart-grid/smart-grid.service.d.ts +0 -26
  770. package/lib/smart-icon/projects.d.ts +0 -5
  771. package/lib/smart-icon/smart-icon/smart-icon.component.d.ts +0 -34
  772. package/lib/smart-icon/smart-icon/ui-badge/ui-badge.component.d.ts +0 -10
  773. package/lib/smart-icon/smart-icon/ui-badge/ui-badge.directive.d.ts +0 -14
  774. package/lib/smart-icon/smart-icon.module.d.ts +0 -14
  775. package/lib/smart-icon/smart-icon.service.d.ts +0 -29
  776. package/lib/smart-map/abstract-map.d.ts +0 -37
  777. package/lib/smart-map/api/api/api.d.ts +0 -3
  778. package/lib/smart-map/api/api/geoMap.service.d.ts +0 -101
  779. package/lib/smart-map/api/api.module.d.ts +0 -11
  780. package/lib/smart-map/api/configuration.d.ts +0 -104
  781. package/lib/smart-map/api/encoder.d.ts +0 -11
  782. package/lib/smart-map/api/index.d.ts +0 -6
  783. package/lib/smart-map/api/model/gPSPosition.d.ts +0 -32
  784. package/lib/smart-map/api/model/gPSRoute.d.ts +0 -21
  785. package/lib/smart-map/api/model/geoMapChange.d.ts +0 -21
  786. package/lib/smart-map/api/model/geoMapDataLoadingMode.d.ts +0 -15
  787. package/lib/smart-map/api/model/geoMapDataSourceDescriptor.d.ts +0 -52
  788. package/lib/smart-map/api/model/geoMapDataSourceType.d.ts +0 -17
  789. package/lib/smart-map/api/model/geoMapEditingSession.d.ts +0 -17
  790. package/lib/smart-map/api/model/geoMapInteraction.d.ts +0 -24
  791. package/lib/smart-map/api/model/geoMapItem.d.ts +0 -41
  792. package/lib/smart-map/api/model/geoMapItemKind.d.ts +0 -16
  793. package/lib/smart-map/api/model/geoMapLayer.d.ts +0 -19
  794. package/lib/smart-map/api/model/geoMapLayerChange.d.ts +0 -20
  795. package/lib/smart-map/api/model/geoMapLayerDescriptor.d.ts +0 -28
  796. package/lib/smart-map/api/model/geoMapModel.d.ts +0 -26
  797. package/lib/smart-map/api/model/geoMapOperationMode.d.ts +0 -15
  798. package/lib/smart-map/api/model/geoMapSelectionMode.d.ts +0 -16
  799. package/lib/smart-map/api/model/geoMapServerModel.d.ts +0 -25
  800. package/lib/smart-map/api/model/geoMapTextType.d.ts +0 -15
  801. package/lib/smart-map/api/model/geoMapViewState.d.ts +0 -27
  802. package/lib/smart-map/api/model/geoMapViewport.d.ts +0 -20
  803. package/lib/smart-map/api/model/models.d.ts +0 -20
  804. package/lib/smart-map/api/param.d.ts +0 -37
  805. package/lib/smart-map/api/variables.d.ts +0 -8
  806. package/lib/smart-map/api-default/api-default.d.ts +0 -2
  807. package/lib/smart-map/impl/google-map.d.ts +0 -23
  808. package/lib/smart-map/impl/leaflet-map.d.ts +0 -22
  809. package/lib/smart-map/projects.d.ts +0 -8
  810. package/lib/smart-map/smart-map.component.d.ts +0 -39
  811. package/lib/smart-map/smart-map.module.d.ts +0 -11
  812. package/lib/smart-map/smart-map.types.d.ts +0 -34
  813. package/lib/smart-navbar/projects.d.ts +0 -4
  814. package/lib/smart-navbar/smart-navbar.component.d.ts +0 -20
  815. package/lib/smart-navbar/smart-navbar.model.d.ts +0 -48
  816. package/lib/smart-navbar/smart-navbar.module.d.ts +0 -18
  817. package/lib/smart-navbar/smart-navbar.service.d.ts +0 -6
  818. package/lib/smart-navigation/projects.d.ts +0 -2
  819. package/lib/smart-navigation/smart-navigation.interface.d.ts +0 -5
  820. package/lib/smart-navigation/smart-navigation.module.d.ts +0 -6
  821. package/lib/smart-navigation/smart-navigation.service.d.ts +0 -12
  822. package/lib/smart-ng-client.module.d.ts +0 -25
  823. package/lib/smart-ng-client.service.d.ts +0 -10
  824. package/lib/smart-subject/projects.d.ts +0 -1
  825. package/lib/smart-subject/smart-subject.d.ts +0 -6
  826. package/lib/smart-tab-group/projects.d.ts +0 -1
  827. package/lib/smart-tab-group/smart-tab-group.module.d.ts +0 -10
  828. package/lib/smart-table/components/default-actions-popup/default-actions-popup.component.d.ts +0 -19
  829. package/lib/smart-table/components/loading/loading.component.d.ts +0 -8
  830. package/lib/smart-table/directives/mat-context-menu-trigger-for.directive.d.ts +0 -10
  831. package/lib/smart-table/projects.d.ts +0 -4
  832. package/lib/smart-table/smarttable.component.d.ts +0 -34
  833. package/lib/smart-table/smarttable.model.d.ts +0 -202
  834. package/lib/smart-table/smarttable.module.d.ts +0 -29
  835. package/lib/smart-table/smarttable.service.d.ts +0 -6
  836. package/lib/smart-table/tables/material-table/material-table.component.d.ts +0 -8
  837. package/lib/smart-table/tables/mobile-table/mobile-table.component.d.ts +0 -8
  838. package/lib/smart-table/tables/table.d.ts +0 -98
  839. package/lib/smart-tree/projects.d.ts +0 -5
  840. package/lib/smart-tree/smarttree-generic.service.d.ts +0 -48
  841. package/lib/smart-tree/smarttree.component.d.ts +0 -43
  842. package/lib/smart-tree/smarttree.model.d.ts +0 -42
  843. package/lib/smart-tree/smarttree.module.d.ts +0 -16
  844. package/lib/smart-tree/smarttree.node.model.d.ts +0 -13
  845. package/lib/smart-tree/smarttree.service.d.ts +0 -25
  846. package/lib/smart-tree/smarttree.service.interface.d.ts +0 -43
  847. package/lib/smart-tree/tree-api/api/tree.service.d.ts +0 -336
  848. package/lib/smart-tree/tree-api/configuration.d.ts +0 -104
  849. package/lib/smart-tree/tree-api/encoder.d.ts +0 -11
  850. package/lib/smart-tree/tree-api/param.d.ts +0 -37
  851. package/lib/smart-tree/tree-api/variables.d.ts +0 -8
  852. package/lib/smart-validation/named-validator.service.d.ts +0 -17
  853. package/lib/smart-validation/projects.d.ts +0 -3
  854. package/lib/smart-validation/smart-validation.module.d.ts +0 -8
  855. package/lib/smart-validation/smart-validation.types.d.ts +0 -12
  856. package/lib/theme/theme.service.d.ts +0 -17
  857. package/lib/view-context/api/api/api.d.ts +0 -3
  858. package/lib/view-context/api/api/view.service.d.ts +0 -426
  859. package/lib/view-context/api/api-default/binaryContentData.d.ts +0 -2
  860. package/lib/view-context/api/api-default/binaryData.d.ts +0 -2
  861. package/lib/view-context/api/api-default/invocationError.d.ts +0 -2
  862. package/lib/view-context/api/api-default/invocationRequest.d.ts +0 -2
  863. package/lib/view-context/api/api-default/invocationRun.d.ts +0 -2
  864. package/lib/view-context/api/api.module.d.ts +0 -11
  865. package/lib/view-context/api/configuration.d.ts +0 -104
  866. package/lib/view-context/api/encoder.d.ts +0 -11
  867. package/lib/view-context/api/index.d.ts +0 -6
  868. package/lib/view-context/api/model/backgroundProcessInfo.d.ts +0 -25
  869. package/lib/view-context/api/model/badgeDescriptor.d.ts +0 -15
  870. package/lib/view-context/api/model/clipboardData.d.ts +0 -20
  871. package/lib/view-context/api/model/closeResult.d.ts +0 -16
  872. package/lib/view-context/api/model/componentConstraint.d.ts +0 -31
  873. package/lib/view-context/api/model/componentModel.d.ts +0 -47
  874. package/lib/view-context/api/model/componentModelChange.d.ts +0 -29
  875. package/lib/view-context/api/model/dataChange.d.ts +0 -25
  876. package/lib/view-context/api/model/dataChangeEvent.d.ts +0 -31
  877. package/lib/view-context/api/model/dataChangeKind.d.ts +0 -19
  878. package/lib/view-context/api/model/deviceInfo.d.ts +0 -43
  879. package/lib/view-context/api/model/downloadedFile.d.ts +0 -19
  880. package/lib/view-context/api/model/iconPosition.d.ts +0 -18
  881. package/lib/view-context/api/model/imageResource.d.ts +0 -28
  882. package/lib/view-context/api/model/link.d.ts +0 -35
  883. package/lib/view-context/api/model/menuDescriptor.d.ts +0 -17
  884. package/lib/view-context/api/model/menuOpenDirection.d.ts +0 -21
  885. package/lib/view-context/api/model/menuTriggerType.d.ts +0 -15
  886. package/lib/view-context/api/model/messageData.d.ts +0 -29
  887. package/lib/view-context/api/model/messageOption.d.ts +0 -20
  888. package/lib/view-context/api/model/messageOptionType.d.ts +0 -16
  889. package/lib/view-context/api/model/messageResult.d.ts +0 -16
  890. package/lib/view-context/api/model/messageTextType.d.ts +0 -15
  891. package/lib/view-context/api/model/messageType.d.ts +0 -17
  892. package/lib/view-context/api/model/models.d.ts +0 -70
  893. package/lib/view-context/api/model/multiComboBoxElement.d.ts +0 -16
  894. package/lib/view-context/api/model/multiComboBoxModel.d.ts +0 -16
  895. package/lib/view-context/api/model/namedValidator.d.ts +0 -27
  896. package/lib/view-context/api/model/openPendingData.d.ts +0 -29
  897. package/lib/view-context/api/model/publishedViewData.d.ts +0 -14
  898. package/lib/view-context/api/model/serverRequestExecutionStat.d.ts +0 -40
  899. package/lib/view-context/api/model/serverRequestTrack.d.ts +0 -60
  900. package/lib/view-context/api/model/serverRequestType.d.ts +0 -22
  901. package/lib/view-context/api/model/shellProperty.d.ts +0 -15
  902. package/lib/view-context/api/model/smartLinkData.d.ts +0 -29
  903. package/lib/view-context/api/model/smartLinkMigrationStatus.d.ts +0 -39
  904. package/lib/view-context/api/model/statisticRecord.d.ts +0 -36
  905. package/lib/view-context/api/model/style.d.ts +0 -21
  906. package/lib/view-context/api/model/themeDefinition.d.ts +0 -22
  907. package/lib/view-context/api/model/themeDescriptor.d.ts +0 -16
  908. package/lib/view-context/api/model/themeShellDescriptor.d.ts +0 -17
  909. package/lib/view-context/api/model/uiAction.d.ts +0 -68
  910. package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +0 -25
  911. package/lib/view-context/api/model/uiActionButtonType.d.ts +0 -25
  912. package/lib/view-context/api/model/uiActionConstraint.d.ts +0 -22
  913. package/lib/view-context/api/model/uiActionDefinition.d.ts +0 -19
  914. package/lib/view-context/api/model/uiActionDefinitionEntry.d.ts +0 -18
  915. package/lib/view-context/api/model/uiActionDescriptor.d.ts +0 -44
  916. package/lib/view-context/api/model/uiActionDialogDescriptor.d.ts +0 -23
  917. package/lib/view-context/api/model/uiActionFeedbackType.d.ts +0 -18
  918. package/lib/view-context/api/model/uiActionInputType.d.ts +0 -19
  919. package/lib/view-context/api/model/uiActionRequest.d.ts +0 -31
  920. package/lib/view-context/api/model/uiActionSchedule.d.ts +0 -14
  921. package/lib/view-context/api/model/uiActionTooltip.d.ts +0 -25
  922. package/lib/view-context/api/model/uiActionUploadDescriptor.d.ts +0 -27
  923. package/lib/view-context/api/model/uploadWidgetType.d.ts +0 -16
  924. package/lib/view-context/api/model/uploadedFile.d.ts +0 -20
  925. package/lib/view-context/api/model/valueSet.d.ts +0 -20
  926. package/lib/view-context/api/model/view.d.ts +0 -88
  927. package/lib/view-context/api/model/viewApiError.d.ts +0 -18
  928. package/lib/view-context/api/model/viewConstraint.d.ts +0 -18
  929. package/lib/view-context/api/model/viewContext.d.ts +0 -33
  930. package/lib/view-context/api/model/viewContextChange.d.ts +0 -24
  931. package/lib/view-context/api/model/viewContextData.d.ts +0 -25
  932. package/lib/view-context/api/model/viewContextUpdate.d.ts +0 -24
  933. package/lib/view-context/api/model/viewData.d.ts +0 -28
  934. package/lib/view-context/api/model/viewEventHandler.d.ts +0 -36
  935. package/lib/view-context/api/model/viewPlaceholder.d.ts +0 -22
  936. package/lib/view-context/api/model/viewState.d.ts +0 -20
  937. package/lib/view-context/api/model/viewStateUpdate.d.ts +0 -22
  938. package/lib/view-context/api/model/viewType.d.ts +0 -16
  939. package/lib/view-context/api/param.d.ts +0 -37
  940. package/lib/view-context/api/variables.d.ts +0 -8
  941. package/lib/view-context/default-view-components.token.d.ts +0 -18
  942. package/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.d.ts +0 -9
  943. package/lib/view-context/message-dialog/message-dialog.component.d.ts +0 -27
  944. package/lib/view-context/projects.d.ts +0 -26
  945. package/lib/view-context/property-definition-data.d.ts +0 -5
  946. package/lib/view-context/reuse-router-slot.token.d.ts +0 -3
  947. package/lib/view-context/smart-embedded-slot.directive.d.ts +0 -20
  948. package/lib/view-context/smart-ui-action/components/menu/click/menu.component.d.ts +0 -49
  949. package/lib/view-context/smart-ui-action/components/menu/hover/hover-menu.component.d.ts +0 -50
  950. package/lib/view-context/smart-ui-action/components/menu/menu.constants.d.ts +0 -7
  951. package/lib/view-context/smart-ui-action/components/menu/menu.service.d.ts +0 -11
  952. package/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.d.ts +0 -13
  953. package/lib/view-context/smart-ui-action/components/theme-selector/theme-selector.component.d.ts +0 -16
  954. package/lib/view-context/smart-ui-action/components/upload-widget/photo-capture-widget/photo-capture-widget.component.d.ts +0 -30
  955. package/lib/view-context/smart-ui-action/components/upload-widget/prime-file-uploader/prime-file-uploader.component.d.ts +0 -32
  956. package/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.component.d.ts +0 -40
  957. package/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.utils.d.ts +0 -3
  958. package/lib/view-context/smart-ui-action/components/upload-widget/voice-record-widget/voice-record-widget.component.d.ts +0 -43
  959. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.d.ts +0 -29
  960. package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +0 -21
  961. package/lib/view-context/smart-ui-action/dialogs/ui-action-dialog-button/ui-action-dialog-button.component.d.ts +0 -15
  962. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.d.ts +0 -36
  963. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.d.ts +0 -26
  964. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +0 -31
  965. package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +0 -28
  966. package/lib/view-context/smart-ui-action/file-editor-toolbar/file-editor-toolbar.component.d.ts +0 -13
  967. package/lib/view-context/smart-ui-action/ui-action-button/button-icon-placeholder.d.ts +0 -5
  968. package/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.d.ts +0 -55
  969. package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +0 -73
  970. package/lib/view-context/smart-ui-action/ui-action.descriptor.service.d.ts +0 -23
  971. package/lib/view-context/smart-ui-action/ui-action.model.d.ts +0 -43
  972. package/lib/view-context/smart-ui-action/ui-action.service.d.ts +0 -42
  973. package/lib/view-context/smart-view-context-dialog.service.d.ts +0 -21
  974. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.d.ts +0 -15
  975. package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +0 -21
  976. package/lib/view-context/smart-view-context.interceptor.d.ts +0 -17
  977. package/lib/view-context/smart-view-context.model.d.ts +0 -37
  978. package/lib/view-context/smart-view-context.module.d.ts +0 -86
  979. package/lib/view-context/smart-view-context.service.d.ts +0 -172
  980. package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +0 -16
  981. package/lib/view-context/utility/componentLibrary.d.ts +0 -6
  982. package/lib/view-context/utility/smart-object-utility.d.ts +0 -5
  983. package/lib/view-context/utility/smart-style-utility.d.ts +0 -12
  984. package/lib/view-context/value-api/api/api.d.ts +0 -3
  985. package/lib/view-context/value-api/api/value.service.d.ts +0 -35
  986. package/lib/view-context/value-api/api.module.d.ts +0 -11
  987. package/lib/view-context/value-api/configuration.d.ts +0 -104
  988. package/lib/view-context/value-api/encoder.d.ts +0 -11
  989. package/lib/view-context/value-api/index.d.ts +0 -6
  990. package/lib/view-context/value-api/model/genericValue.d.ts +0 -33
  991. package/lib/view-context/value-api/model/models.d.ts +0 -10
  992. package/lib/view-context/value-api/model/value.d.ts +0 -29
  993. package/lib/view-context/value-api/model/valueSetData.d.ts +0 -41
  994. package/lib/view-context/value-api/model/valueSetDefinition.d.ts +0 -16
  995. package/lib/view-context/value-api/model/valueSetDefinitionData.d.ts +0 -53
  996. package/lib/view-context/value-api/model/valueSetDefinitionIdentifier.d.ts +0 -21
  997. package/lib/view-context/value-api/model/valueSetDefinitionKind.d.ts +0 -22
  998. package/lib/view-context/value-api/model/valueSetExpression.d.ts +0 -18
  999. package/lib/view-context/value-api/model/valueSetOperand.d.ts +0 -25
  1000. package/lib/view-context/value-api/model/valueSetOperation.d.ts +0 -17
  1001. package/lib/view-context/value-api/param.d.ts +0 -37
  1002. package/lib/view-context/value-api/variables.d.ts +0 -8
  1003. package/lib/view-context/view-handler-resolution.d.ts +0 -11
  1004. package/lib/view-context/view-op.d.ts +0 -18
  1005. package/lib/view-context/view-slot-resolution.d.ts +0 -27
  1006. package/projects.d.ts +0 -27
  1007. package/smartbit4all-ng-client-6.0.35.tgz +0 -0
@@ -1,683 +0,0 @@
1
- import { Injectable, Optional } from '@angular/core';
2
- import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
3
- import { SelectionDefinitionTypeEnum, SmartFormWidgetType } from '../api';
4
- import { ComponentLibrary } from '../../view-context/utility/componentLibrary';
5
- import { SmartWidgetSettings } from '../widgets/smartformwidget/smartformwidget.component';
6
- import moment from 'moment';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../smart-validation/named-validator.service";
9
- export class SmartFormService {
10
- constructor(validatorProvider) {
11
- this.validatorProvider = validatorProvider;
12
- this.emptyKey = 'e#m%p@t*y';
13
- this.componentLibrary = ComponentLibrary;
14
- this.group = {};
15
- this.regexRegexChars = new RegExp(/[\.\-\[\]\/\{\}\(\)\+\^\$\\\|]/g);
16
- this.regexAsteriskInTheMiddle = new RegExp(/([^\*])\*([^\*])/g);
17
- this.regexAsteriskInTheEnd = new RegExp(/([^\*])\*$/g);
18
- this.regexAsteriskInTheBeginning = new RegExp(/^\*([^\*])/g);
19
- this.regexAsteriskOnly = new RegExp(/^\*$/g);
20
- this.regexDoubleAsteriskWithDot = new RegExp(/\*\*\\\./g);
21
- this.regexDoubleAsterisk = new RegExp(/\*\*/g);
22
- this.regexQuestionMark = new RegExp(/\?/g);
23
- this.regexByPattern = new Map();
24
- }
25
- getSmartFormWidgetByKey(key) {
26
- return this.findSmartFormWidgetByKey(this.smartForm?.widgets, key);
27
- }
28
- collectKeysFromSmartForm(widgets, keys) {
29
- widgets.forEach((w) => {
30
- if (w.type !== SmartFormWidgetType.CONTAINER &&
31
- w.type !== SmartFormWidgetType.LABEL &&
32
- w.type !== SmartFormWidgetType.CHECK_BOX_2 &&
33
- w.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
34
- keys.push(w.key);
35
- }
36
- if (w.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
37
- w.type === SmartFormWidgetType.SELECT ||
38
- w.type === SmartFormWidgetType.SELECT_MULTIPLE ||
39
- w.type === SmartFormWidgetType.RADIO_BUTTON ||
40
- w.type === SmartFormWidgetType.CONTAINER) {
41
- if (w.valueList?.length) {
42
- keys = this.collectKeysFromSmartForm(w.valueList, keys);
43
- }
44
- }
45
- else if (w.type === SmartFormWidgetType.CHECK_BOX_2) {
46
- if (w.valueList?.length) {
47
- let childrenKeys = this.collectKeysFromSmartForm(w.valueList, []);
48
- childrenKeys = childrenKeys
49
- .filter((key) => key !== w.key)
50
- .flatMap((key) => `${w.key}.${key}`);
51
- keys.push(...childrenKeys);
52
- }
53
- }
54
- });
55
- return keys;
56
- }
57
- findSmartFormWidgetByKey(widgets, key) {
58
- let widgetFoundByKey;
59
- for (let w of widgets) {
60
- if (w.key === key) {
61
- return w;
62
- }
63
- else if (w.type === SmartFormWidgetType.CONTAINER && w.valueList?.length) {
64
- widgetFoundByKey = this.findSmartFormWidgetByKey(w.valueList, key);
65
- if (widgetFoundByKey) {
66
- return widgetFoundByKey;
67
- }
68
- }
69
- }
70
- return widgetFoundByKey;
71
- }
72
- getValueDeeply(model, key) {
73
- let splittedKey = key.split('.');
74
- let value;
75
- splittedKey.forEach((k) => {
76
- if (!value) {
77
- value = model[k];
78
- }
79
- else {
80
- if (value[k] === undefined ||
81
- value[k] === null ||
82
- (!value && typeof value[k] !== 'boolean')) {
83
- value = '';
84
- return value;
85
- }
86
- else {
87
- value = value[k];
88
- }
89
- }
90
- });
91
- return value;
92
- }
93
- setValueDeeply(model, key, value) {
94
- let splittedKeys = key.split('.');
95
- let deepModel = [model];
96
- let tempModel;
97
- for (let index = 0; index < splittedKeys.length; index++) {
98
- tempModel = deepModel[index];
99
- if (typeof tempModel[splittedKeys[index]] !== 'string' &&
100
- typeof tempModel[splittedKeys[index]] !== 'boolean' &&
101
- typeof tempModel[splittedKeys[index]] !== 'number' &&
102
- tempModel[splittedKeys[index]] !== undefined) {
103
- deepModel.push(tempModel[splittedKeys[index]]);
104
- }
105
- if (index === splittedKeys.length - 1) {
106
- let oldValue = tempModel[splittedKeys[index]];
107
- // if (value === '' && (oldValue === null || oldValue === undefined) then don't change value.
108
- if (value !== '' || (oldValue !== null && oldValue !== undefined)) {
109
- tempModel[splittedKeys[index]] = value;
110
- }
111
- break;
112
- }
113
- }
114
- }
115
- getPropertyNamesDeeply(element) {
116
- let properties = Object.keys(element);
117
- properties.forEach((property) => {
118
- if (typeof element[property] === 'string' ||
119
- typeof element[property] === 'boolean' ||
120
- typeof element[property] === 'number' ||
121
- element[property] === undefined ||
122
- element[property] === null ||
123
- !element[property] ||
124
- !element) {
125
- return;
126
- }
127
- let innerProperties = this.getPropertyNamesDeeply(element[property]);
128
- innerProperties = innerProperties.map((innerProperty) => `${property}.${innerProperty}`);
129
- properties.push(...innerProperties);
130
- });
131
- return properties;
132
- }
133
- setValuesFromModel(widgets, compLib) {
134
- const smartForm = this.smartForm;
135
- const data = smartForm.componentModel?.data;
136
- if (!data) {
137
- return;
138
- }
139
- if (!widgets) {
140
- widgets = smartForm.widgets;
141
- }
142
- const keys = this.collectKeysFromSmartForm(widgets, []);
143
- let widget;
144
- for (const key of this.getPropertyNamesDeeply(data)) {
145
- if (keys.includes(key)) {
146
- widget = this.findSmartFormWidgetByKey(widgets, key);
147
- if (widget) {
148
- let value = this.getValueDeeply(data, key);
149
- if (typeof value === 'boolean' &&
150
- widget.type !== SmartFormWidgetType.TOGGLE &&
151
- widget.type !== SmartFormWidgetType.CHECK_BOX) {
152
- value = `${value}`;
153
- }
154
- if (compLib === this.componentLibrary.PRIMENG) {
155
- if (widget.type === SmartFormWidgetType.DATE_PICKER ||
156
- widget.type === SmartFormWidgetType.DATE_TIME_PICKER) {
157
- if (value) {
158
- widget.value = new Date(value);
159
- }
160
- }
161
- }
162
- if (widget.type !== SmartFormWidgetType.INDICATOR &&
163
- widget.type !== SmartFormWidgetType.LABEL &&
164
- widget.type !== SmartFormWidgetType.CONTAINER &&
165
- widget.type !== SmartFormWidgetType.DIVIDER &&
166
- widget.type !== SmartFormWidgetType.BUTTON &&
167
- widget.type !== SmartFormWidgetType.COMPONENT &&
168
- widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
169
- widget.value = value;
170
- if (widget.showLabel === undefined && smartForm.showLabel) {
171
- widget.showLabel = true;
172
- }
173
- }
174
- this.copyFromValueSetToValuesList(widget, smartForm.componentModel.valueSets);
175
- }
176
- else {
177
- // In case of CheckBox2
178
- let splittedKeys = key.split('.');
179
- splittedKeys.splice(splittedKeys.length - 1, 1);
180
- widget = this.findSmartFormWidgetByKey(widgets, splittedKeys.join('.'));
181
- if (widget && widget.type === SmartFormWidgetType.CHECK_BOX_2) {
182
- this.copyFromValueSetToValuesList(widget, smartForm.componentModel.valueSets);
183
- if (widget.valueList) {
184
- widget.valueList = widget.valueList.map((item) => {
185
- let value = this.getValueDeeply(data, `${widget?.key}.${item.key}`);
186
- item.value = value;
187
- return item;
188
- });
189
- }
190
- }
191
- }
192
- }
193
- }
194
- }
195
- copyFromValueSetToValuesList(widget, valueSets) {
196
- if (widget.type === SmartFormWidgetType.SELECT ||
197
- widget.type === SmartFormWidgetType.SELECT_MULTIPLE ||
198
- widget.type === SmartFormWidgetType.RADIO_BUTTON ||
199
- widget.type === SmartFormWidgetType.CHECK_BOX_2 ||
200
- widget.type === SmartFormWidgetType.TEXT_FIELD) {
201
- if (widget.selection && valueSets) {
202
- let valueSet = valueSets[widget.selection.valueSetName];
203
- if (!valueSet) {
204
- console.warn('valueSet not found', widget.selection.valueSetName);
205
- }
206
- else {
207
- let valueSetData = valueSet.valueSetData;
208
- let values = valueSetData.values;
209
- let selectionDefinition = widget.selection;
210
- let displayProperty = selectionDefinition?.displayProperty ?? 'displayValue';
211
- // check is displayProperty exists, fallback for common display properties
212
- if (!this.checkProperty(values, displayProperty)) {
213
- displayProperty = 'name'; // GenericValue.name
214
- if (!this.checkProperty(values, displayProperty)) {
215
- displayProperty = 'displayValue'; // Value.displayValue
216
- }
217
- }
218
- if (widget.selection.type === SelectionDefinitionTypeEnum.PROPERTY &&
219
- !widget.selection.mapping.length) {
220
- let keyProperty = selectionDefinition?.keyProperty ?? valueSetData?.keyProperty ?? 'objectUri';
221
- if (!this.checkProperty(values, keyProperty)) {
222
- keyProperty = 'uri'; // GenericValue.uri
223
- if (!this.checkProperty(values, keyProperty)) {
224
- keyProperty = 'objectUri'; // Value.objectUri
225
- }
226
- }
227
- widget.valueList = values.map((value) => {
228
- return {
229
- key: value[keyProperty],
230
- label: value[displayProperty],
231
- type: SmartFormWidgetType.ITEM,
232
- value: value[keyProperty],
233
- };
234
- });
235
- this.addEmptyItemToValueList(widget, widget.selection.emptyLabel);
236
- }
237
- else if (widget.selection.type === SelectionDefinitionTypeEnum.OBJECT &&
238
- !widget.selection.mapping.length) {
239
- widget.valueList = values.map((value, index) => {
240
- return {
241
- key: `${index}`,
242
- label: value[displayProperty],
243
- type: SmartFormWidgetType.ITEM,
244
- value: value,
245
- };
246
- });
247
- this.addEmptyItemToValueList(widget);
248
- }
249
- }
250
- }
251
- }
252
- }
253
- checkProperty(values, property) {
254
- if (!values?.length) {
255
- // no sample data, assume existance
256
- return true;
257
- }
258
- return property in values[0];
259
- }
260
- toFormGroup(compLib) {
261
- this.createFormControls(this.smartForm.widgets, compLib);
262
- if (this.formGroup) {
263
- this.formGroup.controls = this.group;
264
- }
265
- else {
266
- this.formGroup = new UntypedFormGroup(this.group);
267
- }
268
- if (this.smartForm.validators && this.smartForm.validators.length) {
269
- this.formGroup.setValidators(this.smartForm.validators.map((validator) => {
270
- return validator.validator;
271
- }));
272
- }
273
- return this.formGroup;
274
- }
275
- createFormControls(widgets, compLib, parentKey) {
276
- widgets.map((widget) => {
277
- if (widget.type !== SmartFormWidgetType.INDICATOR &&
278
- widget.type !== SmartFormWidgetType.LABEL &&
279
- widget.type !== SmartFormWidgetType.CONTAINER &&
280
- widget.type !== SmartFormWidgetType.IMAGE &&
281
- widget.type !== SmartFormWidgetType.SVG &&
282
- widget.type !== SmartFormWidgetType.DIV &&
283
- widget.type !== SmartFormWidgetType.DIVIDER &&
284
- widget.type !== SmartFormWidgetType.BUTTON &&
285
- widget.type !== SmartFormWidgetType.CHECK_BOX_2 &&
286
- widget.type !== SmartFormWidgetType.ITEM &&
287
- widget.type !== SmartFormWidgetType.COMPONENT &&
288
- widget.type !== SmartFormWidgetType.MATRIX &&
289
- widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
290
- if (compLib === this.componentLibrary.PRIMENG) {
291
- if (widget.type === SmartFormWidgetType.DATE_PICKER ||
292
- widget.type === SmartFormWidgetType.DATE_TIME_PICKER) {
293
- if (widget.value) {
294
- widget.value = new Date(widget.value);
295
- }
296
- }
297
- }
298
- this.createFormControl(`${widget.key}`, widget.value, widget.isDisabled, widget.validators);
299
- if (widget.type === SmartFormWidgetType.DATE_TIME_PICKER &&
300
- compLib !== ComponentLibrary.PRIMENG) {
301
- this.createFormControl(`${widget.key}-time`, extractTime(widget), widget.isDisabled, widget.validators);
302
- }
303
- }
304
- if (widget.type === SmartFormWidgetType.MATRIX) {
305
- if (widget.isMultiple) {
306
- let dataKeys = Object.keys(widget.value.data);
307
- let itemKeys = widget.value.columns.map((value) => value.code);
308
- dataKeys.forEach((key) => {
309
- itemKeys.forEach((item) => {
310
- this.createFormControl(`${widget.key}.data.${key}.${item}`, widget.value.data[key][item], undefined, // TODO really we don't pass widget.isDisabled?
311
- widget.validators);
312
- });
313
- });
314
- }
315
- else {
316
- Object.keys(widget.value.data).map((key) => {
317
- this.createFormControl(`${widget.key}.${key}`, widget.isMultiple ? widget.value.data[key] : widget.value.data[key][0], widget.isDisabled, widget.validators);
318
- });
319
- }
320
- }
321
- if (widget.type === SmartFormWidgetType.ITEM && parentKey) {
322
- this.createFormControl(`${parentKey}.${widget.key}`, widget.value, widget.isDisabled, undefined);
323
- }
324
- if (widget.type === SmartFormWidgetType.CONTAINER && widget.valueList?.length) {
325
- this.createFormControls(widget.valueList, compLib);
326
- }
327
- if (widget.type === SmartFormWidgetType.CHECK_BOX_2 && widget.valueList?.length) {
328
- this.createFormControls(widget.valueList, compLib, widget.key);
329
- }
330
- });
331
- }
332
- isValidatorInList(validator, list) {
333
- return list !== undefined && list.length > 0 && list.some((v) => v === validator);
334
- }
335
- createFormControl(key, value, isDisabled, validators) {
336
- let formControl = this.group[key];
337
- if (!formControl) {
338
- formControl = new UntypedFormControl();
339
- this.group[key] = formControl;
340
- }
341
- formControl.setValue(value || '', { emitEvent: false });
342
- formControl.clearValidators();
343
- validators?.map((validator) => {
344
- formControl.addValidators(validator.validator);
345
- });
346
- if (isDisabled !== undefined) {
347
- if (isDisabled) {
348
- formControl.disable({ emitEvent: false });
349
- }
350
- else {
351
- formControl.enable({ emitEvent: false });
352
- }
353
- }
354
- return formControl;
355
- }
356
- copyValueFromFormToWidgetBeans(widgets, group) {
357
- widgets.forEach((widget) => {
358
- if (widget.type === SmartFormWidgetType.CONTAINER && widget.valueList?.length) {
359
- this.copyValueFromFormToWidgetBeans(widget.valueList, group);
360
- }
361
- else if (widget.type === SmartFormWidgetType.MATRIX) {
362
- if (widget.isMultiple) {
363
- let dataKeys = Object.keys(widget.value.data);
364
- let itemKeys = widget.value.columns.map((value) => value.code);
365
- dataKeys.forEach((key) => {
366
- itemKeys.forEach((item) => {
367
- widget.value.data[key][item] = [
368
- group.controls[`${widget.key}.data.${key}.${item}`].value,
369
- ];
370
- });
371
- });
372
- let datakeys = Object.keys(widget.value.data);
373
- //Map checkbox key - boolean value to string key array
374
- let valueKeys = widget.value.columns.map((value) => value.code);
375
- datakeys.forEach((key) => {
376
- let newData = [];
377
- valueKeys.forEach((valueKey) => {
378
- let value = widget.value.data[key][valueKey];
379
- if (value[0]) {
380
- newData.push(valueKey);
381
- }
382
- });
383
- widget.value.data[key] = newData;
384
- });
385
- }
386
- else {
387
- Object.keys(widget.value.data).map((key) => {
388
- widget.value.data[key] = [group.controls[`${widget.key}.${key}`].value];
389
- });
390
- }
391
- }
392
- else if (widget.type !== SmartFormWidgetType.INDICATOR &&
393
- widget.type !== SmartFormWidgetType.LABEL &&
394
- widget.type !== SmartFormWidgetType.CONTAINER &&
395
- widget.type !== SmartFormWidgetType.IMAGE &&
396
- widget.type !== SmartFormWidgetType.SVG &&
397
- widget.type !== SmartFormWidgetType.DIV &&
398
- widget.type !== SmartFormWidgetType.BUTTON &&
399
- widget.type !== SmartFormWidgetType.DIVIDER &&
400
- widget.type !== SmartFormWidgetType.CHECK_BOX_2 &&
401
- widget.type !== SmartFormWidgetType.COMPONENT &&
402
- widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
403
- widget.value = group.controls[widget.key].value;
404
- }
405
- });
406
- }
407
- toSmartForm(group) {
408
- if (this.smartForm) {
409
- this.copyValueFromFormToWidgetBeans(this.smartForm.widgets, group);
410
- const data = this.smartForm.componentModel?.data;
411
- if (data) {
412
- for (const key of this.getPropertyNamesDeeply(data)) {
413
- if (group.controls[key]) {
414
- this.setValueDeeply(data, key, group.controls[key].value);
415
- }
416
- }
417
- }
418
- }
419
- return this.smartForm;
420
- }
421
- getModel(group) {
422
- if (!this.smartForm?.componentModel) {
423
- return {};
424
- }
425
- let originalModel = this.smartForm.componentModel.data;
426
- let copyOfModel = { ...originalModel };
427
- // copyOfModel should be the current model
428
- this.smartForm.componentModel.data = copyOfModel;
429
- // copy value from FormGroup into model
430
- this.toSmartForm(group);
431
- let newModel = this.smartForm.componentModel.data;
432
- this.smartForm.componentModel.data = originalModel;
433
- return newModel;
434
- }
435
- applyComponentConstraints(widgets, constraints) {
436
- widgets.forEach((widget) => {
437
- let widgetConstraints = constraints?.filter(
438
- //(constraint: SmartFormComponentConstraint) => constraint.dataName === widget.key
439
- (constraint) => this.antPathMatcher(constraint.dataName, widget.key));
440
- if (widgetConstraints && widgetConstraints.length) {
441
- widgetConstraints.forEach((constraint) => {
442
- if (constraint.visible === undefined) {
443
- if (widget.isVisible === undefined) {
444
- widget.isVisible = true;
445
- }
446
- }
447
- else {
448
- widget.isVisible = constraint.visible;
449
- }
450
- if (widget.type !== SmartFormWidgetType.INDICATOR &&
451
- widget.type !== SmartFormWidgetType.LABEL &&
452
- widget.type !== SmartFormWidgetType.CONTAINER &&
453
- widget.type !== SmartFormWidgetType.IMAGE &&
454
- widget.type !== SmartFormWidgetType.SVG &&
455
- widget.type !== SmartFormWidgetType.DIV &&
456
- widget.type !== SmartFormWidgetType.DIVIDER &&
457
- widget.type !== SmartFormWidgetType.BUTTON &&
458
- widget.type !== SmartFormWidgetType.COMPONENT &&
459
- widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
460
- let validators = widget.validators ?? [];
461
- let requiredIndex = validators.findIndex((v) => v.validator === Validators.required);
462
- let wasMandatory = requiredIndex >= 0;
463
- let tobeMandatory = false;
464
- if (constraint.mandatory === undefined) {
465
- // not specified on server, use client state
466
- // if widget is not visible, client should default to not mandatory
467
- tobeMandatory = widget.isVisible && wasMandatory;
468
- }
469
- else {
470
- tobeMandatory = constraint.mandatory;
471
- }
472
- if (!wasMandatory && tobeMandatory) {
473
- // add required validator
474
- widget.validators = [
475
- ...validators,
476
- {
477
- validator: Validators.required,
478
- isCustom: false,
479
- errorMessage: '',
480
- name: 'required',
481
- },
482
- ];
483
- // remove empty item
484
- this.removeEmptyItemFromValueList(widget);
485
- }
486
- if (wasMandatory && !tobeMandatory) {
487
- // remove required validator
488
- widget.validators?.splice(requiredIndex, 1);
489
- // add empty item
490
- let emptyLabel = '';
491
- if ('selection' in widget) {
492
- emptyLabel = widget.selection?.emptyLabel ?? '';
493
- }
494
- this.addEmptyItemToValueList(widget, emptyLabel);
495
- }
496
- if (constraint.enabled === undefined || constraint.enabled === null) {
497
- if (widget.isDisabled === undefined) {
498
- widget.isDisabled = false;
499
- }
500
- }
501
- else {
502
- widget.isDisabled = !constraint.enabled;
503
- if (widget.type == SmartFormWidgetType.RICH_TEXT) {
504
- widget.isReadonly = !constraint.enabled;
505
- }
506
- }
507
- this.validatorProvider?.applyConstraint(widget, constraint);
508
- }
509
- });
510
- }
511
- if (widget.type === SmartFormWidgetType.CONTAINER &&
512
- widget.valueList &&
513
- widget.valueList.length) {
514
- this.applyComponentConstraints(widget.valueList, constraints);
515
- }
516
- });
517
- }
518
- antPathMatcher(pattern, path) {
519
- if (!pattern || !path) {
520
- // empty pattern or path -> not evaluated, true or false?
521
- return false;
522
- }
523
- let regex = this.regexByPattern.get(pattern);
524
- if (regex === undefined) {
525
- // escape regex characters except for ?, *, **
526
- let regexPattern = pattern.replace(this.regexRegexChars, '\\$&');
527
- // replace ant-style wildcards with regex equivalents
528
- // replace * with a pattern that matches any character except for '.'
529
- regexPattern = regexPattern.replace(this.regexAsteriskInTheMiddle, '$1[^.]*$2'); // not* * not*
530
- regexPattern = regexPattern.replace(this.regexAsteriskInTheEnd, '$1[^.]*'); // not* * EOL
531
- regexPattern = regexPattern.replace(this.regexAsteriskInTheBeginning, '[^.]*$1'); // BOL * not*
532
- regexPattern = regexPattern.replace(this.regexAsteriskOnly, '[^.]*'); // BOL * EOL
533
- // replace ** with a pattern that matches any character including '.'
534
- regexPattern = regexPattern.replace(this.regexDoubleAsteriskWithDot, '.*'); // **.
535
- regexPattern = regexPattern.replace(this.regexDoubleAsterisk, '.*'); // **
536
- // replace ? with a single character matcher
537
- regexPattern = regexPattern.replace(this.regexQuestionMark, '.');
538
- // create a RegExp object
539
- regex = new RegExp('^' + regexPattern + '$');
540
- this.regexByPattern.set(pattern, regex);
541
- }
542
- // test the path against the generated regex
543
- return regex.test(path);
544
- }
545
- applyConstraints(widgets) {
546
- if (this.smartForm.componentModel?.constraints &&
547
- this.smartForm.componentModel?.constraints.length) {
548
- if (!widgets) {
549
- widgets = this.smartForm.widgets;
550
- }
551
- this.applyComponentConstraints(widgets, this.smartForm.componentModel?.constraints);
552
- }
553
- }
554
- addEmptyItemToValueList(widget, emptyLabel) {
555
- if (widget.type == SmartFormWidgetType.SELECT) {
556
- const containsEmptyKey = widget.valueList.some((v) => v.key === this.emptyKey);
557
- if (!containsEmptyKey) {
558
- widget.valueList?.unshift({
559
- key: this.emptyKey,
560
- label: emptyLabel ?? '',
561
- type: SmartFormWidgetType.ITEM,
562
- value: '', // this should be undefined, but FormControl cannot be null, from v14 it will
563
- });
564
- }
565
- }
566
- }
567
- removeEmptyItemFromValueList(widget) {
568
- if ('valueList' in widget) {
569
- if (widget.valueList?.length) {
570
- let firstItem = widget.valueList[0];
571
- if (firstItem?.key === this.emptyKey) {
572
- widget.valueList.shift();
573
- }
574
- }
575
- }
576
- }
577
- filterWidgetsByVisibility(widgets) {
578
- return widgets.filter((widget) => widget.isVisible === undefined ? true : widget.isVisible);
579
- }
580
- async getTranslationOfKey(key) {
581
- try {
582
- return await this.smartForm.translateService.get(key).toPromise();
583
- }
584
- catch (err) {
585
- return Promise.resolve(key);
586
- }
587
- }
588
- async translateWidgets(widgets) {
589
- Promise.all(widgets.map(async (widget) => {
590
- if (widget.type === SmartFormWidgetType.YOUTUBE_PLAYER)
591
- return;
592
- if (widget.type !== SmartFormWidgetType.CONTAINER) {
593
- if (!widget.originalLabel) {
594
- widget.originalLabel = `${widget.label}`;
595
- }
596
- // Label
597
- widget.label = await this.getTranslationOfKey(widget.originalLabel);
598
- // Placeholder
599
- if ((widget.type === SmartFormWidgetType.TEXT_FIELD ||
600
- widget.type === SmartFormWidgetType.TEXT_FIELD_NUMBER ||
601
- widget.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
602
- widget.type === SmartFormWidgetType.RICH_TEXT ||
603
- widget.type === SmartFormWidgetType.TEXT_BOX) &&
604
- widget.placeholder) {
605
- if (!widget.originalPlaceholder) {
606
- widget.originalPlaceholder = `${widget.placeholder}`;
607
- }
608
- widget.placeholder = await this.getTranslationOfKey(widget.originalPlaceholder);
609
- }
610
- // Validators
611
- if (widget.type !== SmartFormWidgetType.INDICATOR &&
612
- widget.type !== SmartFormWidgetType.LABEL &&
613
- widget.type !== SmartFormWidgetType.IMAGE &&
614
- widget.type !== SmartFormWidgetType.SVG &&
615
- widget.type !== SmartFormWidgetType.DIV &&
616
- widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
617
- widget.type !== SmartFormWidgetType.MULTI_FILE_UPLOADER &&
618
- widget.type !== SmartFormWidgetType.DIVIDER &&
619
- widget.type !== SmartFormWidgetType.BUTTON &&
620
- widget.type !== SmartFormWidgetType.COMPONENT &&
621
- widget.validators) {
622
- widget.validators = await Promise.all(widget.validators.map(async (validator) => {
623
- if (!validator.originalErrorMessage) {
624
- validator.originalErrorMessage = `${validator.errorMessage}`;
625
- }
626
- validator.errorMessage = await this.getTranslationOfKey(validator.originalErrorMessage);
627
- return validator;
628
- }));
629
- }
630
- // Indicator
631
- if (widget.type === SmartFormWidgetType.INDICATOR && widget.indicator) {
632
- if (!widget.indicator.originalIndicatorStatusLabels) {
633
- widget.indicator.originalIndicatorStatusLabels =
634
- widget.indicator.indicatorStatusLabels.map((label) => label);
635
- }
636
- widget.indicator.indicatorStatusLabels = await Promise.all(widget.indicator.indicatorStatusLabels.map(async (label, index) => await this.getTranslationOfKey(widget.indicator.originalIndicatorStatusLabels[index])));
637
- }
638
- if ((widget.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
639
- widget.type === SmartFormWidgetType.SELECT ||
640
- widget.type === SmartFormWidgetType.SELECT_MULTIPLE ||
641
- widget.type === SmartFormWidgetType.CHECK_BOX_2 ||
642
- widget.type === SmartFormWidgetType.RADIO_BUTTON) &&
643
- widget.valueList) {
644
- this.translateWidgetItems(widget.valueList);
645
- }
646
- }
647
- else {
648
- this.translateWidgets(widget.valueList);
649
- }
650
- }));
651
- }
652
- async translateWidgetItems(widgets) {
653
- Promise.all(widgets.map(async (widget) => {
654
- if (!widget.originalLabel) {
655
- widget.originalLabel = `${widget.label}`;
656
- }
657
- // Label
658
- widget.label = await this.getTranslationOfKey(widget.originalLabel);
659
- }));
660
- }
661
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFormService, deps: [{ token: i1.NamedValidatorService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
662
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFormService }); }
663
- }
664
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFormService, decorators: [{
665
- type: Injectable
666
- }], ctorParameters: () => [{ type: i1.NamedValidatorService, decorators: [{
667
- type: Optional
668
- }] }] });
669
- export function extractTime(widgetInstance) {
670
- let time;
671
- if (widgetInstance.value) {
672
- let date = new Date(widgetInstance.value);
673
- let hour = SmartWidgetSettings.useUtc ? date.getUTCHours() : date.getHours();
674
- let min = SmartWidgetSettings.useUtc ? date.getUTCMinutes() : date.getMinutes();
675
- time = String(hour).padStart(2, '0') + ':' + String(min).padStart(2, '0');
676
- widgetInstance.value = moment(date);
677
- }
678
- else {
679
- time = '';
680
- }
681
- return time;
682
- }
683
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NlcnZpY2VzL3NtYXJ0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFTMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFLL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDM0YsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7QUFHNUIsTUFBTSxPQUFPLGdCQUFnQjtJQVMzQixZQUFnQyxpQkFBeUM7UUFBekMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF3QjtRQVJ4RCxhQUFRLEdBQVcsV0FBVyxDQUFDO1FBQ2hELHFCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3BDLFVBQUssR0FBUSxFQUFFLENBQUM7UUFpbUJDLG9CQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNoRSw2QkFBd0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNELDBCQUFxQixHQUFHLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELGdDQUEyQixHQUFHLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELHNCQUFpQixHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLCtCQUEwQixHQUFH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QUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7OzBCQVVJLFFBQVE7O0FBNHhCdkIsTUFBTSxVQUFVLFdBQVcsQ0FBQyxjQUF3QztJQUNsRSxJQUFJLElBQUksQ0FBQztJQUNULElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdFLElBQUksR0FBRyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEYsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRSxjQUFjLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksR0FBRyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25EZWZpbml0aW9uVHlwZUVudW0sIFNtYXJ0Rm9ybVdpZGdldFR5cGUgfSBmcm9tICcuLi9hcGknO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0RGF0ZVRpbWVQaWNrZXIsXHJcbiAgU21hcnRGb3JtV2lkZ2V0LFxyXG4gIFNtYXJ0SXRlbSxcclxuICBTbWFydEl0ZW1zLFxyXG4gIFNtYXJ0U2VsZWN0LFxyXG59IGZyb20gJy4uL3NtYXJ0Zm9ybS5mb3JtLW1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRGb3JtLCBTbWFydEZvcm1Db21wb25lbnRDb25zdHJhaW50LCBTbWFydFZhbGlkYXRvciwgVmFsdWUgfSBmcm9tICcuLi9zbWFydGZvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRMaWJyYXJ5IH0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7XHJcbiAgTmFtZWRWYWxpZGF0b3JTZXJ2aWNlLFxyXG4gIFZhbGlkYXRlZFdpZGdldCxcclxufSBmcm9tICcuLi8uLi9zbWFydC12YWxpZGF0aW9uL25hbWVkLXZhbGlkYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU21hcnRXaWRnZXRTZXR0aW5ncyB9IGZyb20gJy4uL3dpZGdldHMvc21hcnRmb3Jtd2lkZ2V0L3NtYXJ0Zm9ybXdpZGdldC5jb21wb25lbnQnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTbWFydEZvcm1TZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVtcHR5S2V5OiBzdHJpbmcgPSAnZSNtJXBAdCp5JztcclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuICBncm91cDogYW55ID0ge307XHJcblxyXG4gIGZvcm1Hcm91cD86IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIHNtYXJ0Rm9ybT86IFNtYXJ0Rm9ybTtcclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSB2YWxpZGF0b3JQcm92aWRlcj86IE5hbWVkVmFsaWRhdG9yU2VydmljZSkge31cclxuXHJcbiAgZ2V0U21hcnRGb3JtV2lkZ2V0QnlLZXkoa2V5OiBzdHJpbmcpOiBTbWFydEZvcm1XaWRnZXQ8YW55PiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kU21hcnRGb3JtV2lkZ2V0QnlLZXkodGhpcy5zbWFydEZvcm0/LndpZGdldHMhLCBrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0oXHJcbiAgICB3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdIHwgU21hcnRJdGVtczxhbnk+W10sXHJcbiAgICBrZXlzOiBzdHJpbmdbXVxyXG4gICk6IHN0cmluZ1tdIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgodykgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICApIHtcclxuICAgICAgICBrZXlzLnB1c2gody5rZXkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QgfHxcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUX01VTFRJUExFIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTiB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKHcudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIGtleXMgPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybSh3LnZhbHVlTGlzdCwga2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMikge1xyXG4gICAgICAgIGlmICh3LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZXQgY2hpbGRyZW5LZXlzID0gdGhpcy5jb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0ody52YWx1ZUxpc3QsIFtdKTtcclxuICAgICAgICAgIGNoaWxkcmVuS2V5cyA9IGNoaWxkcmVuS2V5c1xyXG4gICAgICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5ICE9PSB3LmtleSlcclxuICAgICAgICAgICAgLmZsYXRNYXAoKGtleTogc3RyaW5nKSA9PiBgJHt3LmtleX0uJHtrZXl9YCk7XHJcblxyXG4gICAgICAgICAga2V5cy5wdXNoKC4uLmNoaWxkcmVuS2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ga2V5cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGtleTogc3RyaW5nXHJcbiAgKTogU21hcnRGb3JtV2lkZ2V0PGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHdpZGdldEZvdW5kQnlLZXk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGZvciAobGV0IHcgb2Ygd2lkZ2V0cykge1xyXG4gICAgICBpZiAody5rZXkgPT09IGtleSkge1xyXG4gICAgICAgIHJldHVybiB3O1xyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiYgdy52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHdpZGdldEZvdW5kQnlLZXkgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3LnZhbHVlTGlzdCwga2V5KTtcclxuICAgICAgICBpZiAod2lkZ2V0Rm91bmRCeUtleSkge1xyXG4gICAgICAgICAgcmV0dXJuIHdpZGdldEZvdW5kQnlLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lkZ2V0Rm91bmRCeUtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5ID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICBsZXQgdmFsdWU6IGFueTtcclxuXHJcbiAgICBzcGxpdHRlZEtleS5mb3JFYWNoKChrOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHZhbHVlID0gbW9kZWxba107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IG51bGwgfHxcclxuICAgICAgICAgICghdmFsdWUgJiYgdHlwZW9mIHZhbHVlW2tdICE9PSAnYm9vbGVhbicpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2tdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZURlZXBseShtb2RlbDogYW55LCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5cyA9IGtleS5zcGxpdCgnLicpO1xyXG5cclxuICAgIGxldCBkZWVwTW9kZWw6IGFueVtdID0gW21vZGVsXTtcclxuICAgIGxldCB0ZW1wTW9kZWw6IGFueTtcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3BsaXR0ZWRLZXlzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICB0ZW1wTW9kZWwgPSBkZWVwTW9kZWxbaW5kZXhdO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ2Jvb2xlYW4nICYmXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ251bWJlcicgJiZcclxuICAgICAgICB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICBkZWVwTW9kZWwucHVzaCh0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5kZXggPT09IHNwbGl0dGVkS2V5cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgbGV0IG9sZFZhbHVlID0gdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dO1xyXG4gICAgICAgIC8vIGlmICh2YWx1ZSA9PT0gJycgJiYgKG9sZFZhbHVlID09PSBudWxsIHx8IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIHRoZW4gZG9uJ3QgY2hhbmdlIHZhbHVlLlxyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycgfHwgKG9sZFZhbHVlICE9PSBudWxsICYmIG9sZFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByb3BlcnR5TmFtZXNEZWVwbHkoZWxlbWVudDogYW55KTogc3RyaW5nW10ge1xyXG4gICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhlbGVtZW50KTtcclxuICAgIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiBlbGVtZW50W3Byb3BlcnR5XSA9PT0gJ3N0cmluZycgfHxcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdib29sZWFuJyB8fFxyXG4gICAgICAgIHR5cGVvZiBlbGVtZW50W3Byb3BlcnR5XSA9PT0gJ251bWJlcicgfHxcclxuICAgICAgICBlbGVtZW50W3Byb3BlcnR5XSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgZWxlbWVudFtwcm9wZXJ0eV0gPT09IG51bGwgfHxcclxuICAgICAgICAhZWxlbWVudFtwcm9wZXJ0eV0gfHxcclxuICAgICAgICAhZWxlbWVudFxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGlubmVyUHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lc0RlZXBseShlbGVtZW50W3Byb3BlcnR5XSk7XHJcbiAgICAgIGlubmVyUHJvcGVydGllcyA9IGlubmVyUHJvcGVydGllcy5tYXAoXHJcbiAgICAgICAgKGlubmVyUHJvcGVydHk6IHN0cmluZykgPT4gYCR7cHJvcGVydHl9LiR7aW5uZXJQcm9wZXJ0eX1gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBwcm9wZXJ0aWVzLnB1c2goLi4uaW5uZXJQcm9wZXJ0aWVzKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZXNGcm9tTW9kZWwod2lkZ2V0cz86IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10sIGNvbXBMaWI/OiBDb21wb25lbnRMaWJyYXJ5KTogdm9pZCB7XHJcbiAgICBjb25zdCBzbWFydEZvcm0gPSB0aGlzLnNtYXJ0Rm9ybSE7XHJcbiAgICBjb25zdCBkYXRhID0gc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsPy5kYXRhO1xyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXdpZGdldHMpIHtcclxuICAgICAgd2lkZ2V0cyA9IHNtYXJ0Rm9ybS53aWRnZXRzO1xyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybSh3aWRnZXRzLCBbXSk7XHJcblxyXG4gICAgbGV0IHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZGF0YSkpIHtcclxuICAgICAgaWYgKGtleXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgIHdpZGdldCA9IHRoaXMuZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KHdpZGdldHMsIGtleSk7XHJcbiAgICAgICAgaWYgKHdpZGdldCkge1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5UT0dHTEUgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBgJHt2YWx1ZX1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbXBMaWIgPT09IHRoaXMuY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1BJQ0tFUiB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXQudmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LnNob3dMYWJlbCA9PT0gdW5kZWZpbmVkICYmIHNtYXJ0Rm9ybS5zaG93TGFiZWwpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuc2hvd0xhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY29weUZyb21WYWx1ZVNldFRvVmFsdWVzTGlzdCh3aWRnZXQsIHNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC52YWx1ZVNldHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBJbiBjYXNlIG9mIENoZWNrQm94MlxyXG4gICAgICAgICAgbGV0IHNwbGl0dGVkS2V5cyA9IGtleS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgc3BsaXR0ZWRLZXlzLnNwbGljZShzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSwgMSk7XHJcbiAgICAgICAgICB3aWRnZXQgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3aWRnZXRzLCBzcGxpdHRlZEtleXMuam9pbignLicpKTtcclxuICAgICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3B5RnJvbVZhbHVlU2V0VG9WYWx1ZXNMaXN0KHdpZGdldCwgc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsLnZhbHVlU2V0cyk7XHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQudmFsdWVMaXN0KSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdCA9IHdpZGdldC52YWx1ZUxpc3QubWFwKChpdGVtOiBTbWFydEl0ZW08YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBgJHt3aWRnZXQ/LmtleX0uJHtpdGVtLmtleX1gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvcHlGcm9tVmFsdWVTZXRUb1ZhbHVlc0xpc3Qod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PiwgdmFsdWVTZXRzOiBhbnkpIHtcclxuICAgIGlmIChcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUIHx8XHJcbiAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVF9NVUxUSVBMRSB8fFxyXG4gICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SQURJT19CVVRUT04gfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh3aWRnZXQuc2VsZWN0aW9uICYmIHZhbHVlU2V0cykge1xyXG4gICAgICAgIGxldCB2YWx1ZVNldCA9IHZhbHVlU2V0c1t3aWRnZXQuc2VsZWN0aW9uLnZhbHVlU2V0TmFtZV07XHJcbiAgICAgICAgaWYgKCF2YWx1ZVNldCkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCd2YWx1ZVNldCBub3QgZm91bmQnLCB3aWRnZXQuc2VsZWN0aW9uLnZhbHVlU2V0TmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB2YWx1ZVNldERhdGEgPSB2YWx1ZVNldC52YWx1ZVNldERhdGE7XHJcbiAgICAgICAgICBsZXQgdmFsdWVzID0gdmFsdWVTZXREYXRhLnZhbHVlcztcclxuXHJcbiAgICAgICAgICBsZXQgc2VsZWN0aW9uRGVmaW5pdGlvbiA9ICh3aWRnZXQgYXMgU21hcnRTZWxlY3Q8YW55Pikuc2VsZWN0aW9uO1xyXG4gICAgICAgICAgbGV0IGRpc3BsYXlQcm9wZXJ0eSA9IHNlbGVjdGlvbkRlZmluaXRpb24/LmRpc3BsYXlQcm9wZXJ0eSA/PyAnZGlzcGxheVZhbHVlJztcclxuXHJcbiAgICAgICAgICAvLyBjaGVjayBpcyBkaXNwbGF5UHJvcGVydHkgZXhpc3RzLCBmYWxsYmFjayBmb3IgY29tbW9uIGRpc3BsYXkgcHJvcGVydGllc1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBkaXNwbGF5UHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eSA9ICduYW1lJzsgLy8gR2VuZXJpY1ZhbHVlLm5hbWVcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBkaXNwbGF5UHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheVByb3BlcnR5ID0gJ2Rpc3BsYXlWYWx1ZSc7IC8vIFZhbHVlLmRpc3BsYXlWYWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC5zZWxlY3Rpb24udHlwZSA9PT0gU2VsZWN0aW9uRGVmaW5pdGlvblR5cGVFbnVtLlBST1BFUlRZICYmXHJcbiAgICAgICAgICAgICF3aWRnZXQuc2VsZWN0aW9uLm1hcHBpbmcubGVuZ3RoXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IGtleVByb3BlcnR5ID1cclxuICAgICAgICAgICAgICBzZWxlY3Rpb25EZWZpbml0aW9uPy5rZXlQcm9wZXJ0eSA/PyB2YWx1ZVNldERhdGE/LmtleVByb3BlcnR5ID8/ICdvYmplY3RVcmknO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBrZXlQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgICBrZXlQcm9wZXJ0eSA9ICd1cmknOyAvLyBHZW5lcmljVmFsdWUudXJpXHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBrZXlQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgICAgIGtleVByb3BlcnR5ID0gJ29iamVjdFVyaSc7IC8vIFZhbHVlLm9iamVjdFVyaVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gdmFsdWVzLm1hcCgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IHZhbHVlW2tleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVtkaXNwbGF5UHJvcGVydHldLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlW2tleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQsIHdpZGdldC5zZWxlY3Rpb24uZW1wdHlMYWJlbCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQuc2VsZWN0aW9uLnR5cGUgPT09IFNlbGVjdGlvbkRlZmluaXRpb25UeXBlRW51bS5PQkpFQ1QgJiZcclxuICAgICAgICAgICAgIXdpZGdldC5zZWxlY3Rpb24ubWFwcGluZy5sZW5ndGhcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gdmFsdWVzLm1hcCgodmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IGAke2luZGV4fWAsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVbZGlzcGxheVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1Byb3BlcnR5KHZhbHVlczogb2JqZWN0W10sIHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWVzPy5sZW5ndGgpIHtcclxuICAgICAgLy8gbm8gc2FtcGxlIGRhdGEsIGFzc3VtZSBleGlzdGFuY2VcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcGVydHkgaW4gdmFsdWVzWzBdO1xyXG4gIH1cclxuXHJcbiAgdG9Gb3JtR3JvdXAoY29tcExpYj86IENvbXBvbmVudExpYnJhcnkpOiBVbnR5cGVkRm9ybUdyb3VwIHtcclxuICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHRoaXMuc21hcnRGb3JtIS53aWRnZXRzLCBjb21wTGliISk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzID0gdGhpcy5ncm91cDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAodGhpcy5ncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzICYmIHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5zZXRWYWxpZGF0b3JzKFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzLm1hcCgodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtQ29udHJvbHMoXHJcbiAgICB3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdIHwgU21hcnRJdGVtPGFueT5bXSxcclxuICAgIGNvbXBMaWI6IENvbXBvbmVudExpYnJhcnksXHJcbiAgICBwYXJlbnRLZXk/OiBzdHJpbmdcclxuICApOiB2b2lkIHtcclxuICAgIHdpZGdldHMubWFwKCh3aWRnZXQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVYgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKGNvbXBMaWIhID09PSB0aGlzLmNvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1BJQ0tFUiB8fFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1RJTUVfUElDS0VSXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKHdpZGdldC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHdpZGdldC52YWx1ZSA9IG5ldyBEYXRlKHdpZGdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChgJHt3aWRnZXQua2V5fWAsIHdpZGdldC52YWx1ZSwgd2lkZ2V0LmlzRGlzYWJsZWQsIHdpZGdldC52YWxpZGF0b3JzKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1RJTUVfUElDS0VSICYmXHJcbiAgICAgICAgICBjb21wTGliICE9PSBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkdcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgIGAke3dpZGdldC5rZXl9LXRpbWVgLFxyXG4gICAgICAgICAgICBleHRyYWN0VGltZSh3aWRnZXQpLFxyXG4gICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWAsXHJcbiAgICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCAvLyBUT0RPIHJlYWxseSB3ZSBkb24ndCBwYXNzIHdpZGdldC5pc0Rpc2FibGVkP1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSkubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIGAke3dpZGdldC5rZXl9LiR7a2V5fWAsXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmlzTXVsdGlwbGUgPyB3aWRnZXQudmFsdWUuZGF0YVtrZXldIDogd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVswXSxcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmIHBhcmVudEtleSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICBgJHtwYXJlbnRLZXl9LiR7d2lkZ2V0LmtleX1gLFxyXG4gICAgICAgICAgd2lkZ2V0LnZhbHVlLFxyXG4gICAgICAgICAgd2lkZ2V0LmlzRGlzYWJsZWQsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmIHdpZGdldC52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHdpZGdldC52YWx1ZUxpc3QsIGNvbXBMaWIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh3aWRnZXQudmFsdWVMaXN0LCBjb21wTGliLCB3aWRnZXQua2V5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkYXRvckluTGlzdCh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yLCBsaXN0PzogU21hcnRWYWxpZGF0b3JbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGxpc3QgIT09IHVuZGVmaW5lZCAmJiBsaXN0Lmxlbmd0aCA+IDAgJiYgbGlzdC5zb21lKCh2KSA9PiB2ID09PSB2YWxpZGF0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQ29udHJvbChcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgdmFsdWU/OiBzdHJpbmcsXHJcbiAgICBpc0Rpc2FibGVkPzogYm9vbGVhbixcclxuICAgIHZhbGlkYXRvcnM/OiBTbWFydFZhbGlkYXRvcltdXHJcbiAgKTogVW50eXBlZEZvcm1Db250cm9sIHtcclxuICAgIGxldCBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sID0gdGhpcy5ncm91cFtrZXldO1xyXG4gICAgaWYgKCFmb3JtQ29udHJvbCkge1xyXG4gICAgICBmb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgICAgdGhpcy5ncm91cFtrZXldID0gZm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcbiAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSB8fCAnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgZm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB2YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgZm9ybUNvbnRyb2wuYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3IudmFsaWRhdG9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpc0Rpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyhcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10sXHJcbiAgICBncm91cDogVW50eXBlZEZvcm1Hcm91cFxyXG4gICk6IHZvaWQge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHtcclxuICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyh3aWRnZXQudmFsdWVMaXN0LCBncm91cCk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dID0gW1xyXG4gICAgICAgICAgICAgICAgZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWBdLnZhbHVlLFxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGRhdGFrZXlzID0gT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgLy9NYXAgY2hlY2tib3gga2V5IC0gYm9vbGVhbiB2YWx1ZSB0byBzdHJpbmcga2V5IGFycmF5XHJcbiAgICAgICAgICBsZXQgdmFsdWVLZXlzID0gd2lkZ2V0LnZhbHVlLmNvbHVtbnMubWFwKCh2YWx1ZTogVmFsdWUpID0+IHZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgZGF0YWtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgbGV0IG5ld0RhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIHZhbHVlS2V5cy5mb3JFYWNoKCh2YWx1ZUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVt2YWx1ZUtleV07XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdEYXRhLnB1c2godmFsdWVLZXkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBuZXdEYXRhO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHdpZGdldC52YWx1ZS5kYXRhKS5tYXAoKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBbZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uJHtrZXl9YF0udmFsdWVdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVYgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICApIHtcclxuICAgICAgICB3aWRnZXQudmFsdWUgPSBncm91cC5jb250cm9sc1t3aWRnZXQua2V5XS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b1NtYXJ0Rm9ybShncm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFNtYXJ0Rm9ybSB7XHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm0pIHtcclxuICAgICAgdGhpcy5jb3B5VmFsdWVGcm9tRm9ybVRvV2lkZ2V0QmVhbnModGhpcy5zbWFydEZvcm0ud2lkZ2V0cywgZ3JvdXApO1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWw/LmRhdGE7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5nZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGRhdGEpKSB7XHJcbiAgICAgICAgICBpZiAoZ3JvdXAuY29udHJvbHNba2V5XSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlRGVlcGx5KGRhdGEsIGtleSwgZ3JvdXAuY29udHJvbHNba2V5XS52YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zbWFydEZvcm0hO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0Rm9ybT8uY29tcG9uZW50TW9kZWwpIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgbGV0IG9yaWdpbmFsTW9kZWwgPSB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhO1xyXG4gICAgbGV0IGNvcHlPZk1vZGVsID0geyAuLi5vcmlnaW5hbE1vZGVsIH07XHJcblxyXG4gICAgLy8gY29weU9mTW9kZWwgc2hvdWxkIGJlIHRoZSBjdXJyZW50IG1vZGVsXHJcbiAgICB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhID0gY29weU9mTW9kZWw7XHJcbiAgICAvLyBjb3B5IHZhbHVlIGZyb20gRm9ybUdyb3VwIGludG8gbW9kZWxcclxuICAgIHRoaXMudG9TbWFydEZvcm0oZ3JvdXApO1xyXG5cclxuICAgIGxldCBuZXdNb2RlbCA9IHRoaXMuc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsLmRhdGE7XHJcbiAgICB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhID0gb3JpZ2luYWxNb2RlbDtcclxuXHJcbiAgICByZXR1cm4gbmV3TW9kZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q29tcG9uZW50Q29uc3RyYWludHMoXHJcbiAgICB3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdLFxyXG4gICAgY29uc3RyYWludHM6IFNtYXJ0Rm9ybUNvbXBvbmVudENvbnN0cmFpbnRbXVxyXG4gICkge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSA9PiB7XHJcbiAgICAgIGxldCB3aWRnZXRDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzPy5maWx0ZXIoXHJcbiAgICAgICAgLy8oY29uc3RyYWludDogU21hcnRGb3JtQ29tcG9uZW50Q29uc3RyYWludCkgPT4gY29uc3RyYWludC5kYXRhTmFtZSA9PT0gd2lkZ2V0LmtleVxyXG4gICAgICAgIChjb25zdHJhaW50KSA9PiB0aGlzLmFudFBhdGhNYXRjaGVyKGNvbnN0cmFpbnQuZGF0YU5hbWUsIHdpZGdldC5rZXkpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAod2lkZ2V0Q29uc3RyYWludHMgJiYgd2lkZ2V0Q29uc3RyYWludHMubGVuZ3RoKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29uc3RyYWludHMuZm9yRWFjaCgoY29uc3RyYWludCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnN0cmFpbnQudmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQuaXNWaXNpYmxlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2lkZ2V0LmlzVmlzaWJsZSA9IGNvbnN0cmFpbnQudmlzaWJsZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTUFHRSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzID0gd2lkZ2V0LnZhbGlkYXRvcnMgPz8gW107XHJcbiAgICAgICAgICAgIGxldCByZXF1aXJlZEluZGV4ID0gdmFsaWRhdG9ycy5maW5kSW5kZXgoKHYpID0+IHYudmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgbGV0IHdhc01hbmRhdG9yeSA9IHJlcXVpcmVkSW5kZXggPj0gMDtcclxuICAgICAgICAgICAgbGV0IHRvYmVNYW5kYXRvcnkgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQubWFuZGF0b3J5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAvLyBub3Qgc3BlY2lmaWVkIG9uIHNlcnZlciwgdXNlIGNsaWVudCBzdGF0ZVxyXG4gICAgICAgICAgICAgIC8vIGlmIHdpZGdldCBpcyBub3QgdmlzaWJsZSwgY2xpZW50IHNob3VsZCBkZWZhdWx0IHRvIG5vdCBtYW5kYXRvcnlcclxuICAgICAgICAgICAgICB0b2JlTWFuZGF0b3J5ID0gd2lkZ2V0LmlzVmlzaWJsZSAmJiB3YXNNYW5kYXRvcnk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdG9iZU1hbmRhdG9yeSA9IGNvbnN0cmFpbnQubWFuZGF0b3J5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghd2FzTWFuZGF0b3J5ICYmIHRvYmVNYW5kYXRvcnkpIHtcclxuICAgICAgICAgICAgICAvLyBhZGQgcmVxdWlyZWQgdmFsaWRhdG9yXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAuLi52YWxpZGF0b3JzLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogJ3JlcXVpcmVkJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAvLyByZW1vdmUgZW1wdHkgaXRlbVxyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlJdGVtRnJvbVZhbHVlTGlzdCh3aWRnZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh3YXNNYW5kYXRvcnkgJiYgIXRvYmVNYW5kYXRvcnkpIHtcclxuICAgICAgICAgICAgICAvLyByZW1vdmUgcmVxdWlyZWQgdmFsaWRhdG9yXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnM/LnNwbGljZShyZXF1aXJlZEluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAvLyBhZGQgZW1wdHkgaXRlbVxyXG4gICAgICAgICAgICAgIGxldCBlbXB0eUxhYmVsID0gJyc7XHJcbiAgICAgICAgICAgICAgaWYgKCdzZWxlY3Rpb24nIGluIHdpZGdldCkge1xyXG4gICAgICAgICAgICAgICAgZW1wdHlMYWJlbCA9IHdpZGdldC5zZWxlY3Rpb24/LmVtcHR5TGFiZWwgPz8gJyc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuYWRkRW1wdHlJdGVtVG9WYWx1ZUxpc3Qod2lkZ2V0LCBlbXB0eUxhYmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29uc3RyYWludC5lbmFibGVkID09PSB1bmRlZmluZWQgfHwgY29uc3RyYWludC5lbmFibGVkID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHdpZGdldC5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHdpZGdldC5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHdpZGdldC5pc0Rpc2FibGVkID0gIWNvbnN0cmFpbnQuZW5hYmxlZDtcclxuICAgICAgICAgICAgICBpZiAod2lkZ2V0LnR5cGUgPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SSUNIX1RFWFQpIHtcclxuICAgICAgICAgICAgICAgIHdpZGdldC5pc1JlYWRvbmx5ID0gIWNvbnN0cmFpbnQuZW5hYmxlZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0b3JQcm92aWRlcj8uYXBwbHlDb25zdHJhaW50KHdpZGdldCBhcyBWYWxpZGF0ZWRXaWRnZXQ8YW55PiwgY29uc3RyYWludCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgIHdpZGdldC52YWx1ZUxpc3QgJiZcclxuICAgICAgICB3aWRnZXQudmFsdWVMaXN0Lmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmFwcGx5Q29tcG9uZW50Q29uc3RyYWludHMod2lkZ2V0LnZhbHVlTGlzdCwgY29uc3RyYWludHMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhSZWdleENoYXJzID0gbmV3IFJlZ0V4cCgvW1xcLlxcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcK1xcXlxcJFxcXFxcXHxdL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza0luVGhlTWlkZGxlID0gbmV3IFJlZ0V4cCgvKFteXFwqXSlcXCooW15cXCpdKS9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4QXN0ZXJpc2tJblRoZUVuZCA9IG5ldyBSZWdFeHAoLyhbXlxcKl0pXFwqJC9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4QXN0ZXJpc2tJblRoZUJlZ2lubmluZyA9IG5ldyBSZWdFeHAoL15cXCooW15cXCpdKS9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4QXN0ZXJpc2tPbmx5ID0gbmV3IFJlZ0V4cCgvXlxcKiQvZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleERvdWJsZUFzdGVyaXNrV2l0aERvdCA9IG5ldyBSZWdFeHAoL1xcKlxcKlxcXFxcXC4vZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleERvdWJsZUFzdGVyaXNrID0gbmV3IFJlZ0V4cCgvXFwqXFwqL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhRdWVzdGlvbk1hcmsgPSBuZXcgUmVnRXhwKC9cXD8vZyk7XHJcbiAgcHJpdmF0ZSByZWdleEJ5UGF0dGVybjogTWFwPHN0cmluZywgUmVnRXhwPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgYW50UGF0aE1hdGNoZXIocGF0dGVybj86IHN0cmluZywgcGF0aD86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFwYXR0ZXJuIHx8ICFwYXRoKSB7XHJcbiAgICAgIC8vIGVtcHR5IHBhdHRlcm4gb3IgcGF0aCAtPiBub3QgZXZhbHVhdGVkLCB0cnVlIG9yIGZhbHNlP1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgcmVnZXggPSB0aGlzLnJlZ2V4QnlQYXR0ZXJuLmdldChwYXR0ZXJuKTtcclxuICAgIGlmIChyZWdleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIGVzY2FwZSByZWdleCBjaGFyYWN0ZXJzIGV4Y2VwdCBmb3IgPywgKiwgKipcclxuICAgICAgbGV0IHJlZ2V4UGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4UmVnZXhDaGFycywgJ1xcXFwkJicpO1xyXG5cclxuICAgICAgLy8gcmVwbGFjZSBhbnQtc3R5bGUgd2lsZGNhcmRzIHdpdGggcmVnZXggZXF1aXZhbGVudHNcclxuXHJcbiAgICAgIC8vIHJlcGxhY2UgKiB3aXRoIGEgcGF0dGVybiB0aGF0IG1hdGNoZXMgYW55IGNoYXJhY3RlciBleGNlcHQgZm9yICcuJ1xyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4QXN0ZXJpc2tJblRoZU1pZGRsZSwgJyQxW14uXSokMicpOyAvLyBub3QqICogbm90KlxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4QXN0ZXJpc2tJblRoZUVuZCwgJyQxW14uXSonKTsgLy8gbm90KiAqIEVPTFxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4QXN0ZXJpc2tJblRoZUJlZ2lubmluZywgJ1teLl0qJDEnKTsgLy8gQk9MICogbm90KlxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4QXN0ZXJpc2tPbmx5LCAnW14uXSonKTsgLy8gQk9MICogRU9MXHJcblxyXG4gICAgICAvLyByZXBsYWNlICoqIHdpdGggYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGluY2x1ZGluZyAnLidcclxuICAgICAgcmVnZXhQYXR0ZXJuID0gcmVnZXhQYXR0ZXJuLnJlcGxhY2UodGhpcy5yZWdleERvdWJsZUFzdGVyaXNrV2l0aERvdCwgJy4qJyk7IC8vICoqLlxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4RG91YmxlQXN0ZXJpc2ssICcuKicpOyAvLyAqKlxyXG5cclxuICAgICAgLy8gcmVwbGFjZSA/IHdpdGggYSBzaW5nbGUgY2hhcmFjdGVyIG1hdGNoZXJcclxuICAgICAgcmVnZXhQYXR0ZXJuID0gcmVnZXhQYXR0ZXJuLnJlcGxhY2UodGhpcy5yZWdleFF1ZXN0aW9uTWFyaywgJy4nKTtcclxuXHJcbiAgICAgIC8vIGNyZWF0ZSBhIFJlZ0V4cCBvYmplY3RcclxuICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKCdeJyArIHJlZ2V4UGF0dGVybiArICckJyk7XHJcbiAgICAgIHRoaXMucmVnZXhCeVBhdHRlcm4uc2V0KHBhdHRlcm4sIHJlZ2V4KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0ZXN0IHRoZSBwYXRoIGFnYWluc3QgdGhlIGdlbmVyYXRlZCByZWdleFxyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QocGF0aCk7XHJcbiAgfVxyXG5cclxuICBhcHBseUNvbnN0cmFpbnRzKHdpZGdldHM/OiBTbWFydEZvcm1XaWRnZXQ8YW55PltdKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc21hcnRGb3JtIS5jb21wb25lbnRNb2RlbD8uY29uc3RyYWludHMgJiZcclxuICAgICAgdGhpcy5zbWFydEZvcm0hLmNvbXBvbmVudE1vZGVsPy5jb25zdHJhaW50cy5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICBpZiAoIXdpZGdldHMpIHtcclxuICAgICAgICB3aWRnZXRzID0gdGhpcy5zbWFydEZvcm0hLndpZGdldHM7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKHdpZGdldHMsIHRoaXMuc21hcnRGb3JtIS5jb21wb25lbnRNb2RlbD8uY29uc3RyYWludHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkRW1wdHlJdGVtVG9WYWx1ZUxpc3Qod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PiwgZW1wdHlMYWJlbD86IHN0cmluZykge1xyXG4gICAgaWYgKHdpZGdldC50eXBlID09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRhaW5zRW1wdHlLZXkgPSB3aWRnZXQudmFsdWVMaXN0LnNvbWUoKHYpID0+IHYua2V5ID09PSB0aGlzLmVtcHR5S2V5KTtcclxuICAgICAgaWYgKCFjb250YWluc0VtcHR5S2V5KSB7XHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdD8udW5zaGlmdCh7XHJcbiAgICAgICAgICBrZXk6IHRoaXMuZW1wdHlLZXksXHJcbiAgICAgICAgICBsYWJlbDogZW1wdHlMYWJlbCA/PyAnJyxcclxuICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgIHZhbHVlOiAnJywgLy8gdGhpcyBzaG91bGQgYmUgdW5kZWZpbmVkLCBidXQgRm9ybUNvbnRyb2wgY2Fubm90IGJlIG51bGwsIGZyb20gdjE0IGl0IHdpbGxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRW1wdHlJdGVtRnJvbVZhbHVlTGlzdCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSB7XHJcbiAgICBpZiAoJ3ZhbHVlTGlzdCcgaW4gd2lkZ2V0KSB7XHJcbiAgICAgIGlmICh3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgZmlyc3RJdGVtID0gd2lkZ2V0LnZhbHVlTGlzdFswXTtcclxuICAgICAgICBpZiAoZmlyc3RJdGVtPy5rZXkgPT09IHRoaXMuZW1wdHlLZXkpIHtcclxuICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3Quc2hpZnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlcldpZGdldHNCeVZpc2liaWxpdHkod2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10ge1xyXG4gICAgcmV0dXJuIHdpZGdldHMuZmlsdGVyKCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSA9PlxyXG4gICAgICB3aWRnZXQuaXNWaXNpYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogd2lkZ2V0LmlzVmlzaWJsZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0VHJhbnNsYXRpb25PZktleShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zbWFydEZvcm0hLnRyYW5zbGF0ZVNlcnZpY2UhLmdldChrZXkpLnRvUHJvbWlzZSgpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHRyYW5zbGF0ZVdpZGdldHMod2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHdpZGdldHMubWFwKGFzeW5jICh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSA9PiB7XHJcbiAgICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUikge1xyXG4gICAgICAgICAgaWYgKCF3aWRnZXQub3JpZ2luYWxMYWJlbCkge1xyXG4gICAgICAgICAgICB3aWRnZXQub3JpZ2luYWxMYWJlbCA9IGAke3dpZGdldC5sYWJlbH1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gIExhYmVsXHJcbiAgICAgICAgICB3aWRnZXQubGFiZWwgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsTGFiZWwpO1xyXG5cclxuICAgICAgICAgIC8vIFBsYWNlaG9sZGVyXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9OVU1CRVIgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUklDSF9URVhUIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9CT1gpICYmXHJcbiAgICAgICAgICAgIHdpZGdldC5wbGFjZWhvbGRlclxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghd2lkZ2V0Lm9yaWdpbmFsUGxhY2Vob2xkZXIpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQub3JpZ2luYWxQbGFjZWhvbGRlciA9IGAke3dpZGdldC5wbGFjZWhvbGRlcn1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldC5wbGFjZWhvbGRlciA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleSh3aWRnZXQub3JpZ2luYWxQbGFjZWhvbGRlcik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gVmFsaWRhdG9yc1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU1ZHICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJViAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLk1VTFRJX0ZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9ycy5tYXAoYXN5bmMgKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdG9yLm9yaWdpbmFsRXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZSA9IGAke3ZhbGlkYXRvci5lcnJvck1lc3NhZ2V9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvci5lcnJvck1lc3NhZ2UgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkoXHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3I7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEluZGljYXRvclxyXG4gICAgICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJiB3aWRnZXQuaW5kaWNhdG9yKSB7XHJcbiAgICAgICAgICAgIGlmICghd2lkZ2V0LmluZGljYXRvci5vcmlnaW5hbEluZGljYXRvclN0YXR1c0xhYmVscykge1xyXG4gICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3Iub3JpZ2luYWxJbmRpY2F0b3JTdGF0dXNMYWJlbHMgPVxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMubWFwKChsYWJlbDogc3RyaW5nKSA9PiBsYWJlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yLmluZGljYXRvclN0YXR1c0xhYmVscy5tYXAoXHJcbiAgICAgICAgICAgICAgICBhc3luYyAobGFiZWw6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IhLm9yaWdpbmFsSW5kaWNhdG9yU3RhdHVzTGFiZWxzIVtpbmRleF1cclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUX01VTFRJUExFIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SQURJT19CVVRUT04pICYmXHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3RcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVdpZGdldEl0ZW1zKHdpZGdldC52YWx1ZUxpc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVdpZGdldHMod2lkZ2V0LnZhbHVlTGlzdCEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB0cmFuc2xhdGVXaWRnZXRJdGVtcyh3aWRnZXRzOiBTbWFydEl0ZW1zPGFueT5bXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHdpZGdldHMubWFwKGFzeW5jICh3aWRnZXQ6IFNtYXJ0SXRlbXM8YW55PikgPT4ge1xyXG4gICAgICAgIGlmICghd2lkZ2V0Lm9yaWdpbmFsTGFiZWwpIHtcclxuICAgICAgICAgIHdpZGdldC5vcmlnaW5hbExhYmVsID0gYCR7d2lkZ2V0LmxhYmVsfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vICBMYWJlbFxyXG4gICAgICAgIHdpZGdldC5sYWJlbCA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleSh3aWRnZXQub3JpZ2luYWxMYWJlbCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RUaW1lKHdpZGdldEluc3RhbmNlOiBTbWFydERhdGVUaW1lUGlja2VyPGFueT4pIHtcclxuICBsZXQgdGltZTtcclxuICBpZiAod2lkZ2V0SW5zdGFuY2UudmFsdWUpIHtcclxuICAgIGxldCBkYXRlID0gbmV3IERhdGUod2lkZ2V0SW5zdGFuY2UudmFsdWUpO1xyXG4gICAgbGV0IGhvdXIgPSBTbWFydFdpZGdldFNldHRpbmdzLnVzZVV0YyA/IGRhdGUuZ2V0VVRDSG91cnMoKSA6IGRhdGUuZ2V0SG91cnMoKTtcclxuICAgIGxldCBtaW4gPSBTbWFydFdpZGdldFNldHRpbmdzLnVzZVV0YyA/IGRhdGUuZ2V0VVRDTWludXRlcygpIDogZGF0ZS5nZXRNaW51dGVzKCk7XHJcbiAgICB0aW1lID0gU3RyaW5nKGhvdXIpLnBhZFN0YXJ0KDIsICcwJykgKyAnOicgKyBTdHJpbmcobWluKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgd2lkZ2V0SW5zdGFuY2UudmFsdWUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRpbWUgPSAnJztcclxuICB9XHJcbiAgcmV0dXJuIHRpbWU7XHJcbn1cclxuIl19