@smartbit4all/ng-client 4.4.1 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (369) hide show
  1. package/README.md +386 -386
  2. package/esm2022/lib/component-factory-service/component-factory-service.module.mjs +1 -1
  3. package/esm2022/lib/component-factory-service/component-factory-service.service.mjs +1 -1
  4. package/esm2022/lib/component-factory-service/projects.mjs +1 -1
  5. package/esm2022/lib/session/api/api/api.mjs +1 -1
  6. package/esm2022/lib/session/api/index.mjs +1 -1
  7. package/esm2022/lib/session/api/model/models.mjs +1 -1
  8. package/esm2022/lib/session/api/model/session.mjs +1 -1
  9. package/esm2022/lib/session/api/model/sessionInfoData.mjs +1 -1
  10. package/esm2022/lib/session/cookie-service/smart-cookie.service.mjs +1 -1
  11. package/esm2022/lib/session/projects.mjs +1 -1
  12. package/esm2022/lib/session/smart-error-catching.interceptor.mjs +10 -5
  13. package/esm2022/lib/session/smart-header-maintainer.interceptor.mjs +1 -1
  14. package/esm2022/lib/session/smart-session-handler.service.mjs +2 -1
  15. package/esm2022/lib/session/smart-session.module.mjs +1 -1
  16. package/esm2022/lib/session/smart-session.service.mjs +1 -1
  17. package/esm2022/lib/session/smart-timer/smart-session-timer.component.mjs +3 -3
  18. package/esm2022/lib/session/smart-timer/smart-session-timer.service.mjs +1 -1
  19. package/esm2022/lib/shared/projects.mjs +1 -1
  20. package/esm2022/lib/shared/shared.module.mjs +1 -1
  21. package/esm2022/lib/shared/smart-tooltip.directive.mjs +1 -1
  22. package/esm2022/lib/shared/smarttable.date-pipe.mjs +1 -1
  23. package/esm2022/lib/smart-client/projects.mjs +1 -1
  24. package/esm2022/lib/smart-client/smart-authentication.service.mjs +1 -1
  25. package/esm2022/lib/smart-client/smart-component-api-client.mjs +1 -1
  26. package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +3 -3
  27. package/esm2022/lib/smart-client/smart.component.mjs +1 -1
  28. package/esm2022/lib/smart-client/smart.service.mjs +1 -1
  29. package/esm2022/lib/smart-component-layout/api/api/api.mjs +1 -1
  30. package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +1 -1
  31. package/esm2022/lib/smart-component-layout/api/api.module.mjs +1 -1
  32. package/esm2022/lib/smart-component-layout/api/configuration.mjs +1 -1
  33. package/esm2022/lib/smart-component-layout/api/encoder.mjs +1 -1
  34. package/esm2022/lib/smart-component-layout/api/index.mjs +1 -1
  35. package/esm2022/lib/smart-component-layout/api/model/componentType.mjs +1 -1
  36. package/esm2022/lib/smart-component-layout/api/model/componentWidgetType.mjs +1 -1
  37. package/esm2022/lib/smart-component-layout/api/model/layoutDefinitionDescriptor.mjs +1 -1
  38. package/esm2022/lib/smart-component-layout/api/model/layoutDirection.mjs +1 -1
  39. package/esm2022/lib/smart-component-layout/api/model/models.mjs +1 -1
  40. package/esm2022/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +1 -1
  41. package/esm2022/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +1 -1
  42. package/esm2022/lib/smart-component-layout/api/model/toolbarDirection.mjs +1 -1
  43. package/esm2022/lib/smart-component-layout/api/model/toolbarProperties.mjs +1 -1
  44. package/esm2022/lib/smart-component-layout/api/param.mjs +1 -1
  45. package/esm2022/lib/smart-component-layout/api/variables.mjs +1 -1
  46. package/esm2022/lib/smart-component-layout/projects.mjs +1 -1
  47. package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +1 -1
  48. package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +3 -3
  49. package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +1 -1
  50. package/esm2022/lib/smart-diagram/api/api/api.mjs +1 -1
  51. package/esm2022/lib/smart-diagram/api/api/diagramService.service.mjs +1 -1
  52. package/esm2022/lib/smart-diagram/api/api.module.mjs +1 -1
  53. package/esm2022/lib/smart-diagram/api/configuration.mjs +1 -1
  54. package/esm2022/lib/smart-diagram/api/encoder.mjs +1 -1
  55. package/esm2022/lib/smart-diagram/api/index.mjs +1 -1
  56. package/esm2022/lib/smart-diagram/api/model/diagramColor.mjs +1 -1
  57. package/esm2022/lib/smart-diagram/api/model/diagramDataContainer.mjs +1 -1
  58. package/esm2022/lib/smart-diagram/api/model/diagramDataItem.mjs +1 -1
  59. package/esm2022/lib/smart-diagram/api/model/diagramDataSet.mjs +1 -1
  60. package/esm2022/lib/smart-diagram/api/model/diagramDescriptor.mjs +1 -1
  61. package/esm2022/lib/smart-diagram/api/model/diagramModel.mjs +1 -1
  62. package/esm2022/lib/smart-diagram/api/model/diagramShape.mjs +1 -1
  63. package/esm2022/lib/smart-diagram/api/model/drawTime.mjs +1 -1
  64. package/esm2022/lib/smart-diagram/api/model/labelText.mjs +1 -1
  65. package/esm2022/lib/smart-diagram/api/model/models.mjs +1 -1
  66. package/esm2022/lib/smart-diagram/api/param.mjs +1 -1
  67. package/esm2022/lib/smart-diagram/api/variables.mjs +1 -1
  68. package/esm2022/lib/smart-diagram/component/default-smart-diagram-options.provider.mjs +1 -1
  69. package/esm2022/lib/smart-diagram/component/smart-diagram.component.mjs +22 -22
  70. package/esm2022/lib/smart-diagram/component/smart-diagram.module.mjs +1 -1
  71. package/esm2022/lib/smart-diagram/component/smart-diagram.util.mjs +1 -1
  72. package/esm2022/lib/smart-diagram/projects.mjs +1 -1
  73. package/esm2022/lib/smart-dialog/projects.mjs +1 -1
  74. package/esm2022/lib/smart-dialog/smartdialog.component.mjs +3 -3
  75. package/esm2022/lib/smart-dialog/smartdialog.model.mjs +1 -1
  76. package/esm2022/lib/smart-dialog/smartdialog.module.mjs +1 -1
  77. package/esm2022/lib/smart-dialog/smartdialog.service.mjs +1 -1
  78. package/esm2022/lib/smart-expandable-section/expandable-section.component.mjs +3 -3
  79. package/esm2022/lib/smart-expandable-section/expandable-section.model.mjs +1 -1
  80. package/esm2022/lib/smart-expandable-section/projects.mjs +1 -1
  81. package/esm2022/lib/smart-expandable-section/smart-expandable-section.module.mjs +1 -1
  82. package/esm2022/lib/smart-expandable-section/smart-expandable-section.service.mjs +1 -1
  83. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +1 -1
  84. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +1 -1
  85. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +1 -1
  86. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +1 -1
  87. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionData.mjs +1 -1
  88. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +1 -1
  89. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionField.mjs +1 -1
  90. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +1 -1
  91. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +1 -1
  92. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionList.mjs +1 -1
  93. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +1 -1
  94. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +1 -1
  95. package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +1 -1
  96. package/esm2022/lib/smart-filter/api/filter/model/model.mjs +1 -1
  97. package/esm2022/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +1 -1
  98. package/esm2022/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +1 -1
  99. package/esm2022/lib/smart-filter/api/value/model/value.mjs +1 -1
  100. package/esm2022/lib/smart-filter/projects.mjs +1 -1
  101. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +1 -1
  102. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +3 -3
  103. package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +3 -3
  104. package/esm2022/lib/smart-filter/smart-filter/smart-filter.component.mjs +3 -3
  105. package/esm2022/lib/smart-filter/smart-filter/smart-filter.service.mjs +1 -1
  106. package/esm2022/lib/smart-filter/smart-filter.model.mjs +1 -1
  107. package/esm2022/lib/smart-filter/smart-filter.module.mjs +1 -1
  108. package/esm2022/lib/smart-filter-editor/api/api/filter.service.mjs +1 -1
  109. package/esm2022/lib/smart-filter-editor/api/configuration.mjs +1 -1
  110. package/esm2022/lib/smart-filter-editor/api/encoder.mjs +1 -1
  111. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +1 -1
  112. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +1 -1
  113. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +1 -1
  114. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +1 -1
  115. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +1 -1
  116. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +1 -1
  117. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionData.mjs +1 -1
  118. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +1 -1
  119. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionField.mjs +1 -1
  120. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +1 -1
  121. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +1 -1
  122. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +1 -1
  123. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionList.mjs +1 -1
  124. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +1 -1
  125. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +1 -1
  126. package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOrderBy.mjs +1 -1
  127. package/esm2022/lib/smart-filter-editor/api/model/smartFilterType.mjs +1 -1
  128. package/esm2022/lib/smart-filter-editor/api/param.mjs +1 -1
  129. package/esm2022/lib/smart-filter-editor/api/variables.mjs +1 -1
  130. package/esm2022/lib/smart-filter-editor/filterExpressionBuilderApiActions.mjs +1 -1
  131. package/esm2022/lib/smart-filter-editor/project.mjs +1 -1
  132. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +3 -3
  133. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +3 -3
  134. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +3 -3
  135. package/esm2022/lib/smart-filter-editor/smart-filter-editor.model.mjs +1 -1
  136. package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +1 -1
  137. package/esm2022/lib/smart-filter-editor/smart-filter-editor.service.mjs +1 -1
  138. package/esm2022/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +3 -3
  139. package/esm2022/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +3 -3
  140. package/esm2022/lib/smart-form/api/model/dateFieldProperties.mjs +1 -1
  141. package/esm2022/lib/smart-form/api/model/models.mjs +1 -1
  142. package/esm2022/lib/smart-form/api/model/multiFileUploaderProperties.mjs +1 -1
  143. package/esm2022/lib/smart-form/api/model/selectionDefinition.mjs +1 -1
  144. package/esm2022/lib/smart-form/api/model/smartFormWidgetType.mjs +1 -1
  145. package/esm2022/lib/smart-form/api/model/smartWidgetDefinition.mjs +1 -1
  146. package/esm2022/lib/smart-form/api/model/textBoxProperties.mjs +1 -1
  147. package/esm2022/lib/smart-form/api/model/valueChangeMode.mjs +1 -1
  148. package/esm2022/lib/smart-form/highlightMacthingString-pipe.mjs +1 -1
  149. package/esm2022/lib/smart-form/projects.mjs +1 -1
  150. package/esm2022/lib/smart-form/services/smartform.layout-definition.service.mjs +1 -1
  151. package/esm2022/lib/smart-form/services/smartform.service.mjs +1 -1
  152. package/esm2022/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +3 -3
  153. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +3 -3
  154. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +1 -1
  155. package/esm2022/lib/smart-form/smartform.component.mjs +3 -3
  156. package/esm2022/lib/smart-form/smartform.form-model.mjs +1 -1
  157. package/esm2022/lib/smart-form/smartform.model.mjs +1 -1
  158. package/esm2022/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.mjs +3 -3
  159. package/esm2022/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +3 -3
  160. package/esm2022/lib/smart-form/widgets/components/smart-multi-file-editor/smart-multi-file-editor.component.mjs +3 -3
  161. package/esm2022/lib/smart-form/widgets/directives/comparable-dropdown.directive.mjs +1 -1
  162. package/esm2022/lib/smart-form/widgets/directives/comparable-multiselect.directive.mjs +1 -1
  163. package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +3 -3
  164. package/esm2022/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +3 -3
  165. package/esm2022/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +1 -1
  166. package/esm2022/lib/smart-grid/api/grid-api/api/api.mjs +1 -1
  167. package/esm2022/lib/smart-grid/api/grid-api/api/grid.service.mjs +1 -1
  168. package/esm2022/lib/smart-grid/api/grid-api/api.module.mjs +1 -1
  169. package/esm2022/lib/smart-grid/api/grid-api/configuration.mjs +1 -1
  170. package/esm2022/lib/smart-grid/api/grid-api/encoder.mjs +1 -1
  171. package/esm2022/lib/smart-grid/api/grid-api/index.mjs +1 -1
  172. package/esm2022/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +1 -1
  173. package/esm2022/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +1 -1
  174. package/esm2022/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +1 -1
  175. package/esm2022/lib/smart-grid/api/grid-api/model/gridExportDescriptor.mjs +1 -1
  176. package/esm2022/lib/smart-grid/api/grid-api/model/gridModel.mjs +1 -1
  177. package/esm2022/lib/smart-grid/api/grid-api/model/gridPage.mjs +1 -1
  178. package/esm2022/lib/smart-grid/api/grid-api/model/gridRow.mjs +1 -1
  179. package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionChange.mjs +1 -1
  180. package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +1 -1
  181. package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +1 -1
  182. package/esm2022/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +1 -1
  183. package/esm2022/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +1 -1
  184. package/esm2022/lib/smart-grid/api/grid-api/model/gridView.mjs +1 -1
  185. package/esm2022/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +1 -1
  186. package/esm2022/lib/smart-grid/api/grid-api/model/models.mjs +1 -1
  187. package/esm2022/lib/smart-grid/api/grid-api/param.mjs +1 -1
  188. package/esm2022/lib/smart-grid/api/grid-api/variables.mjs +1 -1
  189. package/esm2022/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +3 -3
  190. package/esm2022/lib/smart-grid/components/generic-component/expanded-row-renderer.component.mjs +3 -3
  191. package/esm2022/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +3 -3
  192. package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +3 -3
  193. package/esm2022/lib/smart-grid/models/model.mjs +1 -1
  194. package/esm2022/lib/smart-grid/projects.mjs +1 -1
  195. package/esm2022/lib/smart-grid/smart-grid-toolbar-util.mjs +1 -1
  196. package/esm2022/lib/smart-grid/smart-grid.component.mjs +3 -3
  197. package/esm2022/lib/smart-grid/smart-grid.module.mjs +1 -1
  198. package/esm2022/lib/smart-grid/smart-grid.service.mjs +1 -1
  199. package/esm2022/lib/smart-icon/projects.mjs +1 -1
  200. package/esm2022/lib/smart-icon/smart-icon/smart-icon.component.mjs +3 -3
  201. package/esm2022/lib/smart-icon/smart-icon/ui-badge/ui-badge.component.mjs +3 -3
  202. package/esm2022/lib/smart-icon/smart-icon/ui-badge/ui-badge.directive.mjs +1 -1
  203. package/esm2022/lib/smart-icon/smart-icon.module.mjs +1 -1
  204. package/esm2022/lib/smart-icon/smart-icon.service.mjs +1 -1
  205. package/esm2022/lib/smart-map/abstract-map.mjs +1 -1
  206. package/esm2022/lib/smart-map/api/api/api.mjs +1 -1
  207. package/esm2022/lib/smart-map/api/api/geoMap.service.mjs +1 -1
  208. package/esm2022/lib/smart-map/api/api.module.mjs +1 -1
  209. package/esm2022/lib/smart-map/api/configuration.mjs +1 -1
  210. package/esm2022/lib/smart-map/api/encoder.mjs +1 -1
  211. package/esm2022/lib/smart-map/api/index.mjs +1 -1
  212. package/esm2022/lib/smart-map/api/model/gPSPosition.mjs +1 -1
  213. package/esm2022/lib/smart-map/api/model/gPSRoute.mjs +1 -1
  214. package/esm2022/lib/smart-map/api/model/geoMapChange.mjs +1 -1
  215. package/esm2022/lib/smart-map/api/model/geoMapDataLoadingMode.mjs +1 -1
  216. package/esm2022/lib/smart-map/api/model/geoMapDataSourceDescriptor.mjs +1 -1
  217. package/esm2022/lib/smart-map/api/model/geoMapDataSourceType.mjs +1 -1
  218. package/esm2022/lib/smart-map/api/model/geoMapEditingSession.mjs +1 -1
  219. package/esm2022/lib/smart-map/api/model/geoMapInteraction.mjs +1 -1
  220. package/esm2022/lib/smart-map/api/model/geoMapItem.mjs +1 -1
  221. package/esm2022/lib/smart-map/api/model/geoMapItemKind.mjs +1 -1
  222. package/esm2022/lib/smart-map/api/model/geoMapLayer.mjs +1 -1
  223. package/esm2022/lib/smart-map/api/model/geoMapLayerChange.mjs +1 -1
  224. package/esm2022/lib/smart-map/api/model/geoMapLayerDescriptor.mjs +1 -1
  225. package/esm2022/lib/smart-map/api/model/geoMapModel.mjs +1 -1
  226. package/esm2022/lib/smart-map/api/model/geoMapOperationMode.mjs +1 -1
  227. package/esm2022/lib/smart-map/api/model/geoMapSelectionMode.mjs +1 -1
  228. package/esm2022/lib/smart-map/api/model/geoMapServerModel.mjs +1 -1
  229. package/esm2022/lib/smart-map/api/model/geoMapTextType.mjs +1 -1
  230. package/esm2022/lib/smart-map/api/model/geoMapViewState.mjs +1 -1
  231. package/esm2022/lib/smart-map/api/model/geoMapViewport.mjs +1 -1
  232. package/esm2022/lib/smart-map/api/model/models.mjs +1 -1
  233. package/esm2022/lib/smart-map/api/param.mjs +1 -1
  234. package/esm2022/lib/smart-map/api/variables.mjs +1 -1
  235. package/esm2022/lib/smart-map/api-default/api-default.mjs +1 -1
  236. package/esm2022/lib/smart-map/impl/google-map.mjs +1 -1
  237. package/esm2022/lib/smart-map/impl/leaflet-map.mjs +1 -1
  238. package/esm2022/lib/smart-map/projects.mjs +1 -1
  239. package/esm2022/lib/smart-map/smart-map.component.mjs +3 -3
  240. package/esm2022/lib/smart-map/smart-map.module.mjs +1 -1
  241. package/esm2022/lib/smart-map/smart-map.types.mjs +1 -1
  242. package/esm2022/lib/smart-navbar/projects.mjs +1 -1
  243. package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +3 -3
  244. package/esm2022/lib/smart-navbar/smart-navbar.model.mjs +1 -1
  245. package/esm2022/lib/smart-navbar/smart-navbar.module.mjs +1 -1
  246. package/esm2022/lib/smart-navbar/smart-navbar.service.mjs +1 -1
  247. package/esm2022/lib/smart-navigation/projects.mjs +1 -1
  248. package/esm2022/lib/smart-navigation/smart-navigation.interface.mjs +1 -1
  249. package/esm2022/lib/smart-navigation/smart-navigation.module.mjs +1 -1
  250. package/esm2022/lib/smart-navigation/smart-navigation.service.mjs +1 -1
  251. package/esm2022/lib/smart-ng-client.module.mjs +1 -1
  252. package/esm2022/lib/smart-ng-client.service.mjs +1 -1
  253. package/esm2022/lib/smart-subject/projects.mjs +1 -1
  254. package/esm2022/lib/smart-subject/smart-subject.mjs +1 -1
  255. package/esm2022/lib/smart-tab-group/projects.mjs +1 -1
  256. package/esm2022/lib/smart-tab-group/smart-tab-group.component.mjs +3 -3
  257. package/esm2022/lib/smart-tab-group/smart-tab-group.module.mjs +1 -1
  258. package/esm2022/lib/smart-tab-group/smart-tab-group.service.mjs +1 -1
  259. package/esm2022/lib/smart-tab-group/tab-content/tab-content.component.mjs +3 -3
  260. package/esm2022/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +3 -3
  261. package/esm2022/lib/smart-tab-group/tabTile.model.mjs +1 -1
  262. package/esm2022/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +3 -3
  263. package/esm2022/lib/smart-table/components/loading/loading.component.mjs +3 -3
  264. package/esm2022/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +1 -1
  265. package/esm2022/lib/smart-table/projects.mjs +1 -1
  266. package/esm2022/lib/smart-table/smarttable.component.mjs +3 -3
  267. package/esm2022/lib/smart-table/smarttable.model.mjs +1 -1
  268. package/esm2022/lib/smart-table/smarttable.module.mjs +1 -1
  269. package/esm2022/lib/smart-table/smarttable.service.mjs +1 -1
  270. package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +3 -3
  271. package/esm2022/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +3 -3
  272. package/esm2022/lib/smart-table/tables/table.mjs +1 -1
  273. package/esm2022/lib/smart-tree/projects.mjs +1 -1
  274. package/esm2022/lib/smart-tree/smarttree-generic.service.mjs +1 -1
  275. package/esm2022/lib/smart-tree/smarttree.component.mjs +3 -3
  276. package/esm2022/lib/smart-tree/smarttree.model.mjs +1 -1
  277. package/esm2022/lib/smart-tree/smarttree.module.mjs +1 -1
  278. package/esm2022/lib/smart-tree/smarttree.node.model.mjs +1 -1
  279. package/esm2022/lib/smart-tree/smarttree.service.interface.mjs +1 -1
  280. package/esm2022/lib/smart-tree/smarttree.service.mjs +1 -1
  281. package/esm2022/lib/smart-tree/tree-api/api/tree.service.mjs +1 -1
  282. package/esm2022/lib/smart-tree/tree-api/configuration.mjs +1 -1
  283. package/esm2022/lib/smart-tree/tree-api/encoder.mjs +1 -1
  284. package/esm2022/lib/smart-tree/tree-api/param.mjs +1 -1
  285. package/esm2022/lib/smart-tree/tree-api/variables.mjs +1 -1
  286. package/esm2022/lib/smart-validation/named-validator.service.mjs +1 -1
  287. package/esm2022/lib/smart-validation/projects.mjs +1 -1
  288. package/esm2022/lib/smart-validation/smart-validation.module.mjs +1 -1
  289. package/esm2022/lib/smart-validation/smart-validation.types.mjs +1 -1
  290. package/esm2022/lib/view-context/api/api/view.service.mjs +1 -1
  291. package/esm2022/lib/view-context/api/api-default/binaryData.mjs +1 -1
  292. package/esm2022/lib/view-context/api/api-default/invocationError.mjs +1 -1
  293. package/esm2022/lib/view-context/api/api-default/invocationRequest.mjs +1 -1
  294. package/esm2022/lib/view-context/api/api-default/invocationRun.mjs +1 -1
  295. package/esm2022/lib/view-context/api/model/models.mjs +1 -1
  296. package/esm2022/lib/view-context/api/model/smartLinkData.mjs +1 -1
  297. package/esm2022/lib/view-context/api/model/uiAction.mjs +1 -1
  298. package/esm2022/lib/view-context/api/model/uiActionDefinition.mjs +1 -1
  299. package/esm2022/lib/view-context/api/model/uiActionDefinitionEntry.mjs +1 -1
  300. package/esm2022/lib/view-context/api/model/uiActionSchedule.mjs +1 -1
  301. package/esm2022/lib/view-context/api/model/view.mjs +1 -1
  302. package/esm2022/lib/view-context/api/model/viewData.mjs +1 -1
  303. package/esm2022/lib/view-context/api/model/viewEventHandler.mjs +1 -1
  304. package/esm2022/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +3 -3
  305. package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +3 -3
  306. package/esm2022/lib/view-context/projects.mjs +1 -1
  307. package/esm2022/lib/view-context/property-definition-data.mjs +1 -1
  308. package/esm2022/lib/view-context/smart-embedded-slot.directive.mjs +1 -1
  309. package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.component.mjs +3 -3
  310. package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.constants.mjs +1 -1
  311. package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.service.mjs +1 -1
  312. package/esm2022/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +3 -3
  313. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/photo-capture-widget/photo-capture-widget.component.mjs +3 -3
  314. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/prime-file-uploader/prime-file-uploader.component.mjs +3 -3
  315. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.component.mjs +3 -3
  316. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.utils.mjs +1 -1
  317. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/voice-record-widget/voice-record-widget.component.mjs +3 -3
  318. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +3 -3
  319. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +1 -1
  320. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-dialog-button/ui-action-dialog-button.component.mjs +3 -3
  321. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +3 -3
  322. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +1 -1
  323. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +3 -3
  324. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +1 -1
  325. package/esm2022/lib/view-context/smart-ui-action/file-editor-toolbar/file-editor-toolbar.component.mjs +3 -3
  326. package/esm2022/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.mjs +3 -3
  327. package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +3 -3
  328. package/esm2022/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +1 -1
  329. package/esm2022/lib/view-context/smart-ui-action/ui-action.model.mjs +1 -1
  330. package/esm2022/lib/view-context/smart-ui-action/ui-action.service.mjs +1 -1
  331. package/esm2022/lib/view-context/smart-view-context-dialog.service.mjs +1 -1
  332. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +3 -3
  333. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +1 -1
  334. package/esm2022/lib/view-context/smart-view-context.interceptor.mjs +1 -1
  335. package/esm2022/lib/view-context/smart-view-context.model.mjs +1 -1
  336. package/esm2022/lib/view-context/smart-view-context.module.mjs +1 -1
  337. package/esm2022/lib/view-context/smart-view-context.service.mjs +36 -1
  338. package/esm2022/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +1 -1
  339. package/esm2022/lib/view-context/utility/componentLibrary.mjs +1 -1
  340. package/esm2022/lib/view-context/utility/smart-object-utility.mjs +1 -1
  341. package/esm2022/lib/view-context/utility/smart-style-utility.mjs +1 -1
  342. package/esm2022/lib/view-context/value-api/api/api.mjs +1 -1
  343. package/esm2022/lib/view-context/value-api/api/value.service.mjs +1 -1
  344. package/esm2022/lib/view-context/value-api/api.module.mjs +1 -1
  345. package/esm2022/lib/view-context/value-api/configuration.mjs +1 -1
  346. package/esm2022/lib/view-context/value-api/encoder.mjs +1 -1
  347. package/esm2022/lib/view-context/value-api/index.mjs +1 -1
  348. package/esm2022/lib/view-context/value-api/model/genericValue.mjs +1 -1
  349. package/esm2022/lib/view-context/value-api/model/models.mjs +1 -1
  350. package/esm2022/lib/view-context/value-api/model/value.mjs +1 -1
  351. package/esm2022/lib/view-context/value-api/model/valueSetData.mjs +1 -1
  352. package/esm2022/lib/view-context/value-api/model/valueSetDefinition.mjs +1 -1
  353. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionData.mjs +1 -1
  354. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +1 -1
  355. package/esm2022/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +1 -1
  356. package/esm2022/lib/view-context/value-api/model/valueSetExpression.mjs +1 -1
  357. package/esm2022/lib/view-context/value-api/model/valueSetOperand.mjs +1 -1
  358. package/esm2022/lib/view-context/value-api/model/valueSetOperation.mjs +1 -1
  359. package/esm2022/lib/view-context/value-api/param.mjs +1 -1
  360. package/esm2022/lib/view-context/value-api/variables.mjs +1 -1
  361. package/esm2022/projects.mjs +1 -1
  362. package/fesm2022/smartbit4all-ng-client.mjs +175 -135
  363. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  364. package/lib/session/smart-error-catching.interceptor.d.ts +3 -1
  365. package/lib/session/smart-session-handler.service.d.ts +2 -1
  366. package/lib/view-context/smart-view-context.service.d.ts +3 -0
  367. package/package.json +1 -1
  368. package/smartbit4all-ng-client-4.5.0.tgz +0 -0
  369. package/smartbit4all-ng-client-4.4.1.tgz +0 -0
@@ -570,4 +570,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
570
570
  }], smartTable: [{
571
571
  type: Input
572
572
  }] } });
573
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC10YWJsZS90YWJsZXMvdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUdMLG9CQUFvQixFQUVwQiw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7O0FBSXZGLE1BQU0sT0FBTyxLQUFLO0lBMkJoQixZQUFzQixTQUFrQztRQUFsQyxjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQTFCakQsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBYWhELGNBQVMsR0FBRyxjQUFjLENBQUM7UUFDM0IseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsY0FBUyxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBS3JELHVEQUF1RDtRQUN2RCxvQkFBZSxH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Q1gsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxFQUE4QixDQUMvQixDQUFDO1FBQ0osSUFBSSxXQUFXLEdBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU5RSxPQUFPLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSyxDQUFDLENBQUUsQ0FBQztJQUMzRSxDQUFDOytHQXJyQlUsS0FBSzttR0FBTCxLQUFLLGtUQUVGLGNBQWMsc0dBQ1UsZ0JBQWdCLDhEQUl4Qyw0QkFBNEIsZ0RBVGhDLEVBQUU7OzRGQUVELEtBQUs7a0JBSGpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7NEZBRytCLFFBQVE7c0JBQXJDLFlBQVk7dUJBQUMsY0FBYztnQkFFNUIsS0FBSztzQkFESixZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFLeEQsMkJBQTJCO3NCQUQxQixZQUFZO3VCQUFDLDRCQUE0QjtnQkFHcEIsWUFBWTtzQkFBakMsU0FBUzt1QkFBQyxTQUFTO2dCQUNRLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFFakIsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBJbWFnZVJlc291cmNlLCBVaUFjdGlvbiwgVWlBY3Rpb25Ub29sdGlwIH0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L2FwaS9tb2RlbC9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTbWFydFN0eWxlVXRpbGl0eSB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC91dGlsaXR5L3NtYXJ0LXN0eWxlLXV0aWxpdHknO1xyXG5pbXBvcnQgeyBEZWZhdWx0QWN0aW9uc1BvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9kZWZhdWx0LWFjdGlvbnMtcG9wdXAvZGVmYXVsdC1hY3Rpb25zLXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0VGFibGUsXHJcbiAgU21hcnRUYWJsZUJ1dHRvbixcclxuICBTbWFydFRhYmxlQnV0dG9uVHlwZSxcclxuICBTbWFydFRhYmxlSGVhZGVyLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUsXHJcbiAgU21hcnRUYWJsZU9wdGlvbkJ1dHRvbkRpcmVjdGlvbixcclxuICBTbWFydFRhYmxlT3JkZXIsXHJcbiAgU21hcnRUYWJsZVR5cGUsXHJcbn0gZnJvbSAnLi4vc21hcnR0YWJsZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0T2JqZWN0VXRpbGl0eSB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC91dGlsaXR5L3NtYXJ0LW9iamVjdC11dGlsaXR5JztcclxuaW1wb3J0IHsgU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsIH0gZnJvbSAnLi4vLi4vc21hcnQtZ3JpZC9zbWFydC1ncmlkLXRvb2xiYXItdXRpbCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlOiAnJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHB1YmxpYyBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBWaWV3Q2hpbGRyZW4oTWF0TWVudVRyaWdnZXIpIHRyaWdnZXJzITogUXVlcnlMaXN0PE1hdE1lbnVUcmlnZ2VyPjtcclxuICBAVmlld0NoaWxkcmVuKCdleHBhbmRlZEFyZWEnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcclxuICB2Y1JlZj86IFZpZXdDb250YWluZXJSZWZbXTtcclxuICBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8YW55PjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihEZWZhdWx0QWN0aW9uc1BvcHVwQ29tcG9uZW50KVxyXG4gIGRlZmF1bHRBY3Rpb25NZW51Q29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxEZWZhdWx0QWN0aW9uc1BvcHVwQ29tcG9uZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbXlUYWJsZScpIG15VGFibGVDaGlsZCE6IE1hdFRhYmxlPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnaGVhZGVyVG9vbGJhcicpIGhlYWRlclRvb2xiYXIhOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpIHNtYXJ0VGFibGUhOiBTbWFydFRhYmxlPGFueT47XHJcbiAgdGFibGVUeXBlID0gU21hcnRUYWJsZVR5cGU7XHJcbiAgc21hcnRUYWJsZUJ1dHRvblR5cGUgPSBTbWFydFRhYmxlQnV0dG9uVHlwZTtcclxuICBoaWdobGlnaHRlZFJvd3M6IGFueVtdID0gW107XHJcbiAgc29ydEV2ZW50OiBTdWJqZWN0PFNtYXJ0VGFibGVIZWFkZXI+ID0gbmV3IFN1YmplY3QoKTtcclxuICBleHBhbmRlZEVsZW1lbnQ6IGFueSB8IG51bGw7XHJcblxyXG4gIGVsZW1lbnQ/OiBhbnk7XHJcblxyXG4gIC8vIENlbGxzIHRvIFVpQWN0aW9uIG1vZGVscywgdXNlZCBmb3IgdG9vbGJhcnMgaW4gY2VsbHNcclxuICBjZWxsVG9BY3Rpb25NYXA6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2ZTZXJ2aWNlOiBDb21wb25lbnRGYWN0b3J5U2VydmljZSkge31cclxuXHJcbiAgcHVibGljIGFzeW5jVHJhbnNsYXRpb25SZXN1bHQgPSAodHJhbnNsYXRvcjogYW55LCBwYXJhbTogc3RyaW5nKSA9PiB0cmFuc2xhdG9yKHBhcmFtKTtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IEFDVElPTl9TRVBFUkFUT1IgPSAnX2FjdGlvblNlcGFyYXRvcl8nO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuc29ydGFibGUpIHRoaXMuc29ydEV2ZW50ID0gbmV3IFN1YmplY3QoKTtcclxuICAgIHRoaXMuY3JlYXRlQ2VsbFRvQWN0aW9uTWFwKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVPblJvd0NsaWNrKGVsZW1lbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS50YWJsZVR5cGUgPT09IFNtYXJ0VGFibGVUeXBlLklOSEVSSVRFRCkge1xyXG4gICAgICB0aGlzLm9uUm93Q2xpY2soZWxlbWVudCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS50YWJsZVR5cGUgPT09IFNtYXJ0VGFibGVUeXBlLkNIRUNLX0JPWCkge1xyXG4gICAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrICYmICF0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljaykge1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxyXG4gICAgICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XHJcbiAgICAgICAgICAgID8gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcclxuICAgICAgICAgICAgOiBlbGVtZW50XHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Sb3dDbGljayhlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0VGFibGUudGFibGVUeXBlID09PSBTbWFydFRhYmxlVHlwZS5ST1dfU0VMRUNUKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxyXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxyXG4gICAgICAgICAgPyB0aGlzLnNtYXJ0VGFibGUuZ2V0VmFsdWVEZWVwbHkoZWxlbWVudCwgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5KVxyXG4gICAgICAgICAgOiBlbGVtZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTbWFydFRhYmxlKHNtYXJ0VGFibGU6IFNtYXJ0VGFibGU8YW55Pik6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydFRhYmxlID0gc21hcnRUYWJsZTtcclxuICAgIHRoaXMucmVuZGVyUm93cygpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyUm93cygpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlYXRlQ2VsbFRvQWN0aW9uTWFwKCk7XHJcbiAgICB0aGlzLm15VGFibGVDaGlsZC5yZW5kZXJSb3dzKCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDZWxsVG9BY3Rpb25NYXAoKSB7XHJcbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zbWFydFRhYmxlLmdldFNlcnZpY2VUb1VzZSgpO1xyXG4gICAgY29uc3QgZ3JpZElkID0gdGhpcy5zbWFydFRhYmxlLmdldEdyaWRJZCgpO1xyXG5cclxuICAgIGlmIChzZXJ2aWNlICYmIGdyaWRJZCkge1xyXG4gICAgICB0aGlzLmNlbGxUb0FjdGlvbk1hcCA9IFNtYXJ0R3JpZFRvb2xiYXJBY3Rpb25zVXRpbC5jYWxjdWxhdGVDZWxsVG9BY3Rpb25NYXAoXHJcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLnRhYmxlUm93cyxcclxuICAgICAgICBzZXJ2aWNlLFxyXG4gICAgICAgIGdyaWRJZFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlT25Sb3dEb3VibGVDbGljayhldmVudDogYW55LCBlbGVtZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbnMgJiYgdGhpcy5zbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5vcGVuRGVmYXVsdEFjdGlvbnNNZW51KGV2ZW50LCBlbGVtZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUudGFibGVUeXBlID09PSBTbWFydFRhYmxlVHlwZS5JTkhFUklURUQpIHtcclxuICAgICAgICB0aGlzLm9uUm93RG91YmxlQ2xpY2soZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuQ0hFQ0tfQk9YKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUm93RG91YmxlQ2xpY2soZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0eXBlKCk6IHR5cGVvZiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlIHtcclxuICAgIHJldHVybiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlO1xyXG4gIH1cclxuXHJcbiAgc29ydEJ1dHRvbkNsaWNrZWQoZXZlbnQ6IGFueSwgaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuc29ydEV2ZW50Lm5leHQoaGVhZGVyKTtcclxuICB9XHJcblxyXG4gIGN1c3RvbUJ1dHRvbkNsaWNrZWQoXHJcbiAgICBldmVudDogYW55LFxyXG4gICAgYnV0dG9uOiBTbWFydFRhYmxlQnV0dG9uLFxyXG4gICAgZWxlbWVudDogYW55LFxyXG4gICAgYnRuPzogYW55LFxyXG4gICAgY2xvc2U/OiBib29sZWFuXHJcbiAgKSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmIChidG4/LmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYnV0dG9uLnR5cGUgPT09IFNtYXJ0VGFibGVCdXR0b25UeXBlLk1FTlUgJiYgYnRuID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoIWJ1dHRvbi5jYWxsYmFjaykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJ1dHRvbiB3aXRoIG5hbWUgJHtidXR0b24ubGFiZWwgfHwgYnV0dG9uLmljb259IGRvZXMgbm90IGhhdmUgYSBjYWxsYmFjayFgKTtcclxuICAgIH1cclxuICAgIGJ1dHRvbi5jYWxsYmFjayhidXR0b24uYXJncywgZWxlbWVudCwgYnRuKTtcclxuICAgIGlmIChjbG9zZSkge1xyXG4gICAgICBsZXQgb3Blbk1lbnVzID0gdGhpcy50cmlnZ2Vycy5maWx0ZXIoXHJcbiAgICAgICAgKG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikgPT4gbWF0TWVudVRyaWdnZXIubWVudU9wZW5cclxuICAgICAgKTtcclxuICAgICAgb3Blbk1lbnVzLmZvckVhY2goKG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikgPT4ge1xyXG4gICAgICAgIG1hdE1lbnVUcmlnZ2VyLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzU29ydGFibGUoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNTb3J0YWJsZVRhYmxlID0gdGhpcy5zbWFydFRhYmxlLnNvcnRhYmxlO1xyXG4gICAgaWYgKGlzU29ydGFibGVUYWJsZSkge1xyXG4gICAgICByZXR1cm4gaGVhZGVyLmlzU29ydGFibGUgIT09IHVuZGVmaW5lZCA/IGhlYWRlci5pc1NvcnRhYmxlIDogdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldFNvcnRJY29uKGhlYWRlcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCB0YWJsZUhlYWRlciA9IHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmluZChcclxuICAgICAgKHRhYmxlSGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiB0YWJsZUhlYWRlci5wcm9wZXJ0eU5hbWUgPT09IGhlYWRlclxyXG4gICAgKTtcclxuICAgIGlmICh0YWJsZUhlYWRlciAmJiB0YWJsZUhlYWRlci5vcmRlcikge1xyXG4gICAgICByZXR1cm4gdGFibGVIZWFkZXIub3JkZXIgPT09IFNtYXJ0VGFibGVPcmRlci5BU0NcclxuICAgICAgICA/ICh0aGlzLnNtYXJ0VGFibGUuc29ydEljb25Bc2MgPz8gJ2tleWJvYXJkX2Fycm93X2Rvd24nKVxyXG4gICAgICAgIDogKHRoaXMuc21hcnRUYWJsZS5zb3J0SWNvbkRlc2MgPz8gJ2tleWJvYXJkX2Fycm93X3VwJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBoYXNTb3J0TnVtSWNvbihoZWFkZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHRhYmxlSGVhZGVyID0gdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maW5kKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gaGVhZGVyXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRhYmxlSGVhZGVyPy5vcmRlck51bWJlciAhPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBnZXRTb3J0TnVtSWNvbihoZWFkZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGFibGVIZWFkZXIgPSB0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXHJcbiAgICAgICh0YWJsZUhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gdGFibGVIZWFkZXIucHJvcGVydHlOYW1lID09PSBoZWFkZXJcclxuICAgICk7XHJcbiAgICBpZiAodGFibGVIZWFkZXIgJiYgdGFibGVIZWFkZXIub3JkZXJOdW1iZXIpIHtcclxuICAgICAgcmV0dXJuIGBmaWx0ZXJfJHt0YWJsZUhlYWRlci5vcmRlck51bWJlcn1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG9vbFRpcChlbGVtZW50OiBhbnksIGhlYWRlckluZGV4OiBudW1iZXIpOiBVaUFjdGlvblRvb2x0aXAgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXN0b21UYWJsZUhlYWRlcnMgcHJvcGVydHkgaXMgbWlzc2luZycpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIHByb3BlcnRpZXNgKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcyEuaWNvbnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b21UYWJsZUhlYWRlciB3aXRoIGluZGV4ICR7aGVhZGVySW5kZXh9IGRvZXMgbm90IGhhdmUgaWNvbnMgZGVmaW5lZGApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0b29sVGlwQ29sdW1uID1cclxuICAgICAgdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzPy50b29sVGlwQ29sdW1uO1xyXG4gICAgcmV0dXJuIHRvb2xUaXBDb2x1bW4gPyB0aGlzLmdldFZhbHVlKGVsZW1lbnQsIHRvb2xUaXBDb2x1bW4pIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0SWNvbih2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiwgaGVhZGVySW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N1c3RvbVRhYmxlSGVhZGVycyBwcm9wZXJ0eSBpcyBtaXNzaW5nJyk7XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b21UYWJsZUhlYWRlciB3aXRoIGluZGV4ICR7aGVhZGVySW5kZXh9IGRvZXMgbm90IGhhdmUgcHJvcGVydGllc2ApO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzIS5pY29ucykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbVRhYmxlSGVhZGVyIHdpdGggaW5kZXggJHtoZWFkZXJJbmRleH0gZG9lcyBub3QgaGF2ZSBpY29ucyBkZWZpbmVkYCk7XHJcbiAgICB9XHJcbiAgICBsZXQgY3VzdG9tVGFibGVIZWFkZXJJY29ucyA9XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcyEuaWNvbnM7XHJcblxyXG4gICAgbGV0IGljb246IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VzdG9tVGFibGVIZWFkZXJJY29ucyEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMhW2ldO1xyXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlTnVsbCAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZU51bGwgPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQmlnZ2VyVGhhbk51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJpZ2dlclRoYW5OdW1iZXIgPCB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVTbWFsbGVyVGhhbk51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZVNtYWxsZXJUaGFuTnVtYmVyID4gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aE51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhOdW1iZXIgPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoU3RyaW5nICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aFN0cmluZyA9PT0gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCb29sZWFuICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQm9vbGVhbiA9PT0gdmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpY29uO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3IodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sIGhlYWRlckluZGV4OiBudW1iZXIpOiBUaGVtZVBhbGV0dGUge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXN0b21UYWJsZUhlYWRlcnMgcHJvcGVydHkgaXMgbWlzc2luZycpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIHByb3BlcnRpZXNgKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcyEuaWNvbnMpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b21UYWJsZUhlYWRlciB3aXRoIGluZGV4ICR7aGVhZGVySW5kZXh9IGRvZXMgbm90IGhhdmUgaWNvbnMgZGVmaW5lZGApO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMgPVxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zO1xyXG5cclxuICAgIGxldCBjb2xvcjogVGhlbWVQYWxldHRlID0gJ3ByaW1hcnknO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3VzdG9tVGFibGVIZWFkZXJJY29ucyEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMhW2ldO1xyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCaWdnZXJUaGFuTnVtYmVyICYmXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQmlnZ2VyVGhhbk51bWJlciA8IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlU21hbGxlclRoYW5OdW1iZXIgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVTbWFsbGVyVGhhbk51bWJlciA+IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aE51bWJlciAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhOdW1iZXIgPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhTdHJpbmcgJiZcclxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoU3RyaW5nID09PSB2YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQm9vbGVhbiAmJlxyXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJvb2xlYW4gPT09IHZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2xvcjtcclxuICB9XHJcblxyXG4gIHRhYmxlT3B0aW9uQnV0dG9uRGlyZWN0aW9uKCk6IHR5cGVvZiBTbWFydFRhYmxlT3B0aW9uQnV0dG9uRGlyZWN0aW9uIHtcclxuICAgIHJldHVybiBTbWFydFRhYmxlT3B0aW9uQnV0dG9uRGlyZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuc21hcnRUYWJsZS50YWJsZVJvd3MubGVuZ3RoO1xyXG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNlbGVjdHMgYWxsIHJvd3MgaWYgdGhleSBhcmUgbm90IGFsbCBzZWxlY3RlZDsgb3RoZXJ3aXNlIGNsZWFyIHNlbGVjdGlvbi4gKi9cclxuICB0b2dnbGVBbGxSb3dzKCkge1xyXG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLmNsZWFyKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLm1heE51bU9mU2VsZWN0YWJsZVJvd3MpIHtcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuY2xlYXIoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24oZmFsc2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSkge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5zZWxlY3QoXHJcbiAgICAgICAgLi4udGhpcy5zbWFydFRhYmxlLnRhYmxlUm93cy5tYXAoKHJvdzogYW55KSA9PlxyXG4gICAgICAgICAgdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KHJvdywgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5ISlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5zZWxlY3QoLi4udGhpcy5zbWFydFRhYmxlLnRhYmxlUm93cyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbih0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBUaGUgbGFiZWwgZm9yIHRoZSBjaGVja2JveCBvbiB0aGUgcGFzc2VkIHJvdyAqL1xyXG4gIGNoZWNrYm94TGFiZWwocm93PzogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghcm93KSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLmlzQWxsU2VsZWN0ZWQoKSA/ICdkZXNlbGVjdCcgOiAnc2VsZWN0J30gYWxsYDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHt0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uIS5pc1NlbGVjdGVkKHJvdykgPyAnZGVzZWxlY3QnIDogJ3NlbGVjdCd9IHJvdyAke1xyXG4gICAgICByb3cucG9zaXRpb24gKyAxXHJcbiAgICB9YDtcclxuICB9XHJcblxyXG4gIGlzSGlnaGxpZ2h0ZWQocm93OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuaGlnaGxpZ2h0UHJvcGVydHkpIHtcclxuICAgICAgaWYgKHJvd1snZGF0YSddW3RoaXMuc21hcnRUYWJsZS5oaWdobGlnaHRQcm9wZXJ0eV0pIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5oaWdobGlnaHRlZFJvd3MgfHwgIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZFJvd3MuaW5jbHVkZXMocm93KTtcclxuICB9XHJcblxyXG4gIGdldFJvd0NsYXNzZXMocm93OiBhbnkpIHtcclxuICAgIGxldCBjbGFzc2VzVG9BZGQ6IHN0cmluZ1tdID0gW107XHJcbiAgICBsZXQgY2xhc3Nlc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY2xhc3Nlc1RvQWRkLnB1c2godGhpcy5pc0hpZ2hsaWdodGVkKHJvdykgPyB0aGlzLnNtYXJ0VGFibGUuaGlnaGxpZ2h0Q2xhc3MhIDogJ3Vuc2VsZWN0ZWQnKTtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuaG92ZXIpIHtcclxuICAgICAgY2xhc3Nlc1RvQWRkLnB1c2goJ3NtYXJ0VGFibGVSb3dIb3ZlcicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2xhc3Nlc1RvUmVtb3ZlLnB1c2goJ3NtYXJ0VGFibGVSb3dIb3ZlcicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZChyb3cpKSB7XHJcbiAgICAgIGNsYXNzZXNUb0FkZC5wdXNoKCdzZWxlY3RlZCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2xhc3Nlc1RvUmVtb3ZlLnB1c2goJ3NlbGVjdGVkJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdDbGFzc2VzKHJvdy5zdHlsZSwgY2xhc3Nlc1RvQWRkLCBjbGFzc2VzVG9SZW1vdmUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um93U3R5bGVzKHJvdzogYW55KTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfSB7XHJcbiAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdTdHlsZXMocm93LnN0eWxlKTtcclxuICB9XHJcblxyXG4gIGdldENvbHVtbkNsYXNzZXMoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSB7XHJcbiAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdDbGFzc2VzKGhlYWRlci5zdHlsZSk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW5TdHlsZXMoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSB7XHJcbiAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdTdHlsZXMoaGVhZGVyLnN0eWxlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9DYW1lbENhc2UoY3NzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNzcy5yZXBsYWNlKC8tKFthLXpdKS9nLCBmdW5jdGlvbiAoZykge1xyXG4gICAgICByZXR1cm4gZ1sxXS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblJvd0NsaWNrKHJvdzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmhpZ2hsaWdodE9uUm93Q2xpY2spIHtcclxuICAgICAgaWYgKHRoaXMuaXNIaWdobGlnaHRlZChyb3cpKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5oaWdobGlnaHRlZFJvd3MuaW5kZXhPZihyb3csIDApO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzIHx8ICF0aGlzLmhpZ2hsaWdodGVkUm93cy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnB1c2gocm93KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodGVkUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuZXhwYW5kYWJsZSAmJiAhdGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgdGhpcy5vblRvZ2dsZShyb3cpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vblJvd0NsaWNrKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5vblJvd0NsaWNrKHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uUm93RG91YmxlQ2xpY2socm93OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuaGlnaGxpZ2h0T25Sb3dDbGljaykge1xyXG4gICAgICBpZiAodGhpcy5pc0hpZ2hsaWdodGVkKHJvdykpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmhpZ2hsaWdodGVkUm93cy5pbmRleE9mKHJvdywgMCk7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5oaWdobGlnaHRlZFJvd3MgfHwgIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzID0gW107XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MucHVzaChyb3cpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLnB1c2gocm93KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblRvZ2dsZShlbGVtZW50OiBhbnksIGV2ZW50PzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5yb3dFeHBhbmRlcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ1NtYXJ0VGFibGVSb3dFeHBhbmRlciBub3QgZm91bmQhLiBQbGVhc2UgcHJvdmlkZSBhIFNtYXJ0VGFibGVSb3dFeHBhbmRlciBpbXBsZW1lbnRhdGlvbi4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb2xkSW5kZXggPSB0aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLmZpbmRJbmRleChcclxuICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQgPT09IHRoaXMuZXhwYW5kZWRFbGVtZW50XHJcbiAgICApO1xyXG4gICAgaWYgKG9sZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICBsZXQgcmVmID0gdGhpcy52Y1JlZiEuZmlsdGVyKChlbGVtZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IGluZGV4ID09PSBvbGRJbmRleCk7XHJcbiAgICAgIHJlZlswXS5jbGVhcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRlZEVsZW1lbnQgPSB0aGlzLmV4cGFuZGVkRWxlbWVudCA9PT0gZWxlbWVudCA/IG51bGwgOiBlbGVtZW50O1xyXG5cclxuICAgIGxldCBuZXdJbmRleCA9IHRoaXMuc21hcnRUYWJsZS50YWJsZVJvd3MuZmluZEluZGV4KFxyXG4gICAgICAoZWxlbWVudCkgPT4gZWxlbWVudCA9PT0gdGhpcy5leHBhbmRlZEVsZW1lbnRcclxuICAgICk7XHJcblxyXG4gICAgbGV0IHJvd0RhdGFSZXNwb25zZTtcclxuXHJcbiAgICBpZiAobmV3SW5kZXggIT09IC0xKSB7XHJcbiAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuYXN5bmNPbkV4cGFuZCkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jZlNlcnZpY2UuY3JlYXRlQ29tcG9uZW50KFxyXG4gICAgICAgICAgdGhpcy52Y1JlZj8uZmlsdGVyKChlbGVtZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IGluZGV4ID09PSBuZXdJbmRleClbMF0hLFxyXG4gICAgICAgICAgTG9hZGluZ0NvbXBvbmVudCxcclxuICAgICAgICAgIG5ldyBNYXA8c3RyaW5nLCBhbnk+KClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByb3dEYXRhUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNtYXJ0VGFibGUucm93RXhwYW5kZXI/LmV4cGFuZEFzeW5jKG5ld0luZGV4KTtcclxuXHJcbiAgICAgICAgbGV0IHJlZiA9IHRoaXMudmNSZWYhLmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gbmV3SW5kZXgpWzBdITtcclxuICAgICAgICByZWYuY2xlYXIoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNmU2VydmljZS5jcmVhdGVDb21wb25lbnQoXHJcbiAgICAgICAgdGhpcy52Y1JlZj8uZmlsdGVyKChlbGVtZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IGluZGV4ID09PSBuZXdJbmRleClbMF0hLFxyXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5leHBhbmRlZENvbXBvbmVudCxcclxuICAgICAgICBuZXcgTWFwPHN0cmluZywgYW55PihbWydyb3dEYXRhJywgcm93RGF0YVJlc3BvbnNlXV0pXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3Rpb24oZWxlbWVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5tYXhOdW1PZlNlbGVjdGFibGVSb3dzICYmXHJcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5zbWFydFRhYmxlLm1heE51bU9mU2VsZWN0YWJsZVJvd3NcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uPy50b2dnbGUoZWxlbWVudCk7XHJcbiAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5uZXh0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vblNlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUub25TZWxlY3Rpb24oZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93TWVudUJ1dHRvbihlbGVtZW50OiBhbnksIGJ1dHRvbjogU21hcnRUYWJsZUJ1dHRvbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGhlYWRlcnM6IHN0cmluZ1tdID0gdGhpcy5zbWFydFRhYmxlLnRhYmxlSGVhZGVycy5tYXAoKGhlYWRlcikgPT5cclxuICAgICAgdGhpcy5vcmlnaW5hbFByb3BlcnR5KGhlYWRlcilcclxuICAgICk7XHJcbiAgICBsZXQgc2hvd01lbnUgPSBTbWFydEdyaWRUb29sYmFyQWN0aW9uc1V0aWwuc2hvd01lbnUoZWxlbWVudCwgaGVhZGVycyk7XHJcblxyXG4gICAgaWYgKCFzaG93TWVudSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJ1dHRvbi5tZW51SXRlbUJ1dHRvbnMpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKGJ1dHRvbi5tZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgbGVuZ3RoID0gdGhpcy5nZXRWYWx1ZShlbGVtZW50LCBidXR0b24ubWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lISkubGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiBsZW5ndGggPiAwO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsdWUoZWxlbWVudDogYW55LCBoZWFkZXI6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gU21hcnRPYmplY3RVdGlsaXR5LmdldFZhbHVlQnlQYXRoKGVsZW1lbnQsIGhlYWRlcik7XHJcbiAgfVxyXG5cclxuICBzaG93QnV0dG9uKGJ1dHRvbjogU21hcnRUYWJsZUJ1dHRvbiwgZWxlbWVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoYnV0dG9uLnNob3dCdXR0b25JZikge1xyXG4gICAgICByZXR1cm4gYnV0dG9uLnNob3dCdXR0b25JZihlbGVtZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZChlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuaXNSb3dEaXNhYmxlZFByb3BlcnR5TmFtZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHRoaXMuc21hcnRUYWJsZS5pc1Jvd0Rpc2FibGVkUHJvcGVydHlOYW1lKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLnNlbGVjdGFibGVQcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShcclxuICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3RhYmxlUHJvcGVydHlOYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBzZWxlY3RhYmxlID09PSB1bmRlZmluZWQgfHwgc2VsZWN0YWJsZSA9PT0gbnVsbCA/IGZhbHNlIDogIXNlbGVjdGFibGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc1NlbGVjdGVkKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbj8uaXNTZWxlY3RlZChcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHlcclxuICAgICAgICAgID8gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcclxuICAgICAgICAgIDogZWxlbWVudFxyXG4gICAgICApID8/IGZhbHNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb3JpZ2luYWxQcm9wZXJ0eShoZWFkZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoaGVhZGVyLnN0YXJ0c1dpdGgoJ2RhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIGhlYWRlci5zdWJzdHJpbmcoJ2RhdGEuJy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhlYWRlcjtcclxuICB9XHJcblxyXG4gIGlzSW1hZ2VSZXNvdXJjZShlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWVsZW1lbnQuaWNvbnMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IHByb3BlcnR5ID0gdGhpcy5vcmlnaW5hbFByb3BlcnR5KGhlYWRlcik7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZWxlbWVudC5pY29ucykuc29tZSgoa2V5KSA9PiBrZXkgPT09IHByb3BlcnR5KTtcclxuICB9XHJcblxyXG4gIGdldEltYWdlUmVzb3VyY2VJY29ucyhlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogSW1hZ2VSZXNvdXJjZVtdIHtcclxuICAgIGlmIChlbGVtZW50Py5pY29ucykge1xyXG4gICAgICBsZXQgaWNvbkNvZGVzID0gZWxlbWVudD8uaWNvbnNbdGhpcy5vcmlnaW5hbFByb3BlcnR5KGhlYWRlcildO1xyXG4gICAgICByZXR1cm4gaWNvbkNvZGVzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VSZXNvdXJjZUljb24oZWxlbWVudDogYW55LCBoZWFkZXI6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5pY29uc1t0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKV0uaWRlbnRpZmllcjtcclxuICB9XHJcblxyXG4gIGdldEltYWdlUmVzb3VyY2VDb2xvcihlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBlbGVtZW50Lmljb25zW3RoaXMub3JpZ2luYWxQcm9wZXJ0eShoZWFkZXIpXS5jb2xvciA/PyAncHJpbWFyeSc7XHJcbiAgfVxyXG5cclxuICBnZXRJbWFnZVJlc291cmNlU3R5bGUocmVzb3VyY2U6IEltYWdlUmVzb3VyY2UpOiBhbnkge1xyXG4gICAgcmV0dXJuIHJlc291cmNlLnN0eWxlID8gcmVzb3VyY2Uuc3R5bGUgOiB7fTtcclxuICB9XHJcblxyXG4gIG9wZW5EZWZhdWx0QWN0aW9uc01lbnUoZXZlbnQ6IGFueSwgcm93OiBhbnkpIHtcclxuICAgIGxldCBhY3Rpb25Db2Rlc0Zyb21Sb3cgPSByb3c/LmFjdGlvbnM/Lm1hcCgoYWN0aW9uOiBVaUFjdGlvbikgPT4gYWN0aW9uLmNvZGUpO1xyXG4gICAgaWYgKCFhY3Rpb25Db2Rlc0Zyb21Sb3cpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpbHRlcmVkQWN0aW9ucyA9IHRoaXMuc21hcnRUYWJsZS5kZWZhdWx0QWN0aW9ucz8uZmlsdGVyKChhY3Rpb246IFNtYXJ0VGFibGVCdXR0b24pID0+XHJcbiAgICAgIGFjdGlvbkNvZGVzRnJvbVJvdy5pbmNsdWRlcyhhY3Rpb24uY29kZSEpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChmaWx0ZXJlZEFjdGlvbnMgJiYgZmlsdGVyZWRBY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKGZpbHRlcmVkQWN0aW9ucy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgICAgIHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKHJvdyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGVmYXVsdEFjdGlvbk1lbnVDb21wb25lbnRzXHJcbiAgICAgICAgLnRvQXJyYXkoKVxyXG4gICAgICAgIC5maW5kKChjb21wOiBEZWZhdWx0QWN0aW9uc1BvcHVwQ29tcG9uZW50KSA9PiBjb21wLnJvdy5pZCA9PT0gcm93LmlkKVxyXG4gICAgICAgID8ub3BlbkRlZmF1bHRBY3Rpb25zTWVudShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0QWN0aW9uc0ZvclJvdyhlbGVtZW50OiBhbnkpOiBNYXA8U21hcnRUYWJsZUJ1dHRvbiwgVWlBY3Rpb24+IHwgdW5kZWZpbmVkIHtcclxuICAgIGlmIChlbGVtZW50Py5hY3Rpb25zKSB7XHJcbiAgICAgIGNvbnN0IGFjdGlvbkNvZGVzRnJvbVJvdyA9IG5ldyBNYXA8c3RyaW5nLCBVaUFjdGlvbj4oXHJcbiAgICAgICAgZWxlbWVudD8uYWN0aW9ucz8ubWFwKChhY3Rpb246IFVpQWN0aW9uKSA9PiBbYWN0aW9uLmNvZGUsIGFjdGlvbl0pXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBuZXcgTWFwPFNtYXJ0VGFibGVCdXR0b24sIFVpQWN0aW9uPihcclxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbnNcclxuICAgICAgICAgID8uZmlsdGVyKChhY3Rpb246IFNtYXJ0VGFibGVCdXR0b24pID0+IGFjdGlvbkNvZGVzRnJvbVJvdy5oYXMoYWN0aW9uLmNvZGUhKSlcclxuICAgICAgICAgIC5tYXAoKGFjdGlvbjogU21hcnRUYWJsZUJ1dHRvbikgPT4gW2FjdGlvbiwgYWN0aW9uQ29kZXNGcm9tUm93LmdldChhY3Rpb24uY29kZSEpIV0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLSBUb29sYmFyIC0tLS1cclxuICBnZXRSb3dDb2x1bW5BY3Rpb24ocm93OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYW55W10ge1xyXG4gICAgcmV0dXJuIFNtYXJ0R3JpZFRvb2xiYXJBY3Rpb25zVXRpbC5nZXRBY3Rpb25Nb2RlbHNGcm9tTWFwKFxyXG4gICAgICB0aGlzLmNlbGxUb0FjdGlvbk1hcCxcclxuICAgICAgcm93LFxyXG4gICAgICB0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNob3dDZWxsVG9vbGJhcihyb3c6IGFueSwgY29sdW1uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsLnNob3dUb29sYmFyKHJvdywgdGhpcy5vcmlnaW5hbFByb3BlcnR5KGNvbHVtbk5hbWUpKTtcclxuICB9XHJcblxyXG4gIGdldE1lbnVCdXR0b25zKHJvdzogYW55LCBidXR0b246IFNtYXJ0VGFibGVCdXR0b24pOiBTbWFydFRhYmxlQnV0dG9uW10ge1xyXG4gICAgbGV0IGNvbHVtbkFjdGlvbnMgPSByb3cuY29sdW1uQWN0aW9ucyA/PyB7fTtcclxuXHJcbiAgICAvLyBGaWx0ZXIgZm9yIGNvbHVtbkFjdGlvbnMgdGhhdCBhcmUgaW4gYSBjb2x1bW5BY3Rpb24sIGJ1dCB0aGUgY29sdW1uIGlzIG5vdCBpbiB0aGUgaGVhZGVyc1xyXG4gICAgbGV0IGZpbHRlcmVkQWN0aW9uQ29sdW1ucyA9IE9iamVjdC5rZXlzKGNvbHVtbkFjdGlvbnMpXHJcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4gdGhpcy5zbWFydFRhYmxlLnRhYmxlSGVhZGVycy5pbmNsdWRlcygnZGF0YS4nICsga2V5KSlcclxuICAgICAgLnJlZHVjZShcclxuICAgICAgICAoYWNjLCBrZXkpID0+IHtcclxuICAgICAgICAgIGFjY1trZXldID0gY29sdW1uQWN0aW9uc1trZXldO1xyXG4gICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICB9LFxyXG4gICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxyXG4gICAgICApO1xyXG5cclxuICAgIGxldCBjb2x1bW5Db2Rlczogc3RyaW5nW10gPSBPYmplY3QudmFsdWVzKGZpbHRlcmVkQWN0aW9uQ29sdW1ucykuZmxhdCgpO1xyXG4gICAgcmV0dXJuIChidXR0b24ubWVudUl0ZW1CdXR0b25zIHx8IFtdKS5maWx0ZXIoKGJ0bikgPT4gIWNvbHVtbkNvZGVzLmluY2x1ZGVzKGJ0bi5jb2RlISkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lKGVsZW1lbnQ6IGFueSwgYnV0dG9uOiBTbWFydFRhYmxlQnV0dG9uKTogYW55W10ge1xyXG4gICAgbGV0IGJ1dHRvbnM6IFNtYXJ0VGFibGVCdXR0b25bXSA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwgYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZSEpO1xyXG4gICAgbGV0IGdyaWRSb3c6IGFueSA9IGVsZW1lbnQ7XHJcblxyXG4gICAgbGV0IGNvbHVtbkFjdGlvbnMgPSBncmlkUm93LmNvbHVtbkFjdGlvbnMgPz8ge307XHJcblxyXG4gICAgLy8gRmlsdGVyIGZvciBjb2x1bW5BY3Rpb25zIHRoYXQgYXJlIGluIGEgY29sdW1uQWN0aW9uLCBidXQgdGhlIGNvbHVtbiBpcyBub3QgaW4gdGhlIGhlYWRlcnNcclxuICAgIGxldCBmaWx0ZXJlZEFjdGlvbkNvbHVtbnMgPSBPYmplY3Qua2V5cyhjb2x1bW5BY3Rpb25zKVxyXG4gICAgICAuZmlsdGVyKChrZXkpID0+IHRoaXMuc21hcnRUYWJsZS50YWJsZUhlYWRlcnMuaW5jbHVkZXMoJ2RhdGEuJyArIGtleSkpXHJcbiAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgKGFjYywga2V5KSA9PiB7XHJcbiAgICAgICAgICBhY2Nba2V5XSA9IGNvbHVtbkFjdGlvbnNba2V5XTtcclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT5cclxuICAgICAgKTtcclxuICAgIGxldCBjb2x1bW5Db2Rlczogc3RyaW5nW10gPSBPYmplY3QudmFsdWVzKGZpbHRlcmVkQWN0aW9uQ29sdW1ucyB8fCB7fSkuZmxhdCgpO1xyXG5cclxuICAgIHJldHVybiBidXR0b25zPy5maWx0ZXIoKGJ1dHRvbikgPT4gIWNvbHVtbkNvZGVzLmluY2x1ZGVzKGJ1dHRvbi5jb2RlISkpITtcclxuICB9XHJcbn1cclxuIl19
573
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC10YWJsZS90YWJsZXMvdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBSUwsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUdMLG9CQUFvQixFQUVwQiw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7O0FBSXZGLE1BQU0sT0FBTyxLQUFLO0lBMkJoQixZQUFzQixTQUFrQztRQUFsQyxjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQTFCakQsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBYWhELGNBQVMsR0FBRyxjQUFjLENBQUM7UUFDM0IseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsY0FBUyxHQUE4QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBS3JELHVEQUF1RDtRQUN2RCxvQkFBZSxH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Q1gsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFDRCxFQUE4QixDQUMvQixDQUFDO1FBQ0osSUFBSSxXQUFXLEdBQWEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU5RSxPQUFPLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSyxDQUFDLENBQUUsQ0FBQztJQUMzRSxDQUFDOytHQXJyQlUsS0FBSzttR0FBTCxLQUFLLGtUQUVGLGNBQWMsc0dBQ1UsZ0JBQWdCLDhEQUl4Qyw0QkFBNEIsZ0RBVGhDLEVBQUU7OzRGQUVELEtBQUs7a0JBSGpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7NEZBRytCLFFBQVE7c0JBQXJDLFlBQVk7dUJBQUMsY0FBYztnQkFFNUIsS0FBSztzQkFESixZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFLeEQsMkJBQTJCO3NCQUQxQixZQUFZO3VCQUFDLDRCQUE0QjtnQkFHcEIsWUFBWTtzQkFBakMsU0FBUzt1QkFBQyxTQUFTO2dCQUNRLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFFakIsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xuaW1wb3J0IHsgSW1hZ2VSZXNvdXJjZSwgVWlBY3Rpb24sIFVpQWN0aW9uVG9vbHRpcCB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvbW9kZWxzJztcbmltcG9ydCB7IFNtYXJ0U3R5bGVVdGlsaXR5IH0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L3V0aWxpdHkvc21hcnQtc3R5bGUtdXRpbGl0eSc7XG5pbXBvcnQgeyBEZWZhdWx0QWN0aW9uc1BvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9kZWZhdWx0LWFjdGlvbnMtcG9wdXAvZGVmYXVsdC1hY3Rpb25zLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9sb2FkaW5nL2xvYWRpbmcuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFNtYXJ0VGFibGUsXG4gIFNtYXJ0VGFibGVCdXR0b24sXG4gIFNtYXJ0VGFibGVCdXR0b25UeXBlLFxuICBTbWFydFRhYmxlSGVhZGVyLFxuICBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLFxuICBTbWFydFRhYmxlT3B0aW9uQnV0dG9uRGlyZWN0aW9uLFxuICBTbWFydFRhYmxlT3JkZXIsXG4gIFNtYXJ0VGFibGVUeXBlLFxufSBmcm9tICcuLi9zbWFydHRhYmxlLm1vZGVsJztcbmltcG9ydCB7IFNtYXJ0T2JqZWN0VXRpbGl0eSB9IGZyb20gJy4uLy4uL3ZpZXctY29udGV4dC91dGlsaXR5L3NtYXJ0LW9iamVjdC11dGlsaXR5JztcbmltcG9ydCB7IFNtYXJ0R3JpZFRvb2xiYXJBY3Rpb25zVXRpbCB9IGZyb20gJy4uLy4uL3NtYXJ0LWdyaWQvc21hcnQtZ3JpZC10b29sYmFyLXV0aWwnO1xuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBAVmlld0NoaWxkcmVuKE1hdE1lbnVUcmlnZ2VyKSB0cmlnZ2VycyE6IFF1ZXJ5TGlzdDxNYXRNZW51VHJpZ2dlcj47XG4gIEBWaWV3Q2hpbGRyZW4oJ2V4cGFuZGVkQXJlYScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICB2Y1JlZj86IFZpZXdDb250YWluZXJSZWZbXTtcbiAgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZHJlbihEZWZhdWx0QWN0aW9uc1BvcHVwQ29tcG9uZW50KVxuICBkZWZhdWx0QWN0aW9uTWVudUNvbXBvbmVudHMhOiBRdWVyeUxpc3Q8RGVmYXVsdEFjdGlvbnNQb3B1cENvbXBvbmVudD47XG5cbiAgQFZpZXdDaGlsZCgnbXlUYWJsZScpIG15VGFibGVDaGlsZCE6IE1hdFRhYmxlPGFueT47XG4gIEBWaWV3Q2hpbGQoJ2hlYWRlclRvb2xiYXInKSBoZWFkZXJUb29sYmFyITogYW55O1xuXG4gIEBJbnB1dCgpIHNtYXJ0VGFibGUhOiBTbWFydFRhYmxlPGFueT47XG4gIHRhYmxlVHlwZSA9IFNtYXJ0VGFibGVUeXBlO1xuICBzbWFydFRhYmxlQnV0dG9uVHlwZSA9IFNtYXJ0VGFibGVCdXR0b25UeXBlO1xuICBoaWdobGlnaHRlZFJvd3M6IGFueVtdID0gW107XG4gIHNvcnRFdmVudDogU3ViamVjdDxTbWFydFRhYmxlSGVhZGVyPiA9IG5ldyBTdWJqZWN0KCk7XG4gIGV4cGFuZGVkRWxlbWVudDogYW55IHwgbnVsbDtcblxuICBlbGVtZW50PzogYW55O1xuXG4gIC8vIENlbGxzIHRvIFVpQWN0aW9uIG1vZGVscywgdXNlZCBmb3IgdG9vbGJhcnMgaW4gY2VsbHNcbiAgY2VsbFRvQWN0aW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gPSB7fTtcblxuICBvblNlbGVjdGlvbkNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZlNlcnZpY2U6IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBhc3luY1RyYW5zbGF0aW9uUmVzdWx0ID0gKHRyYW5zbGF0b3I6IGFueSwgcGFyYW06IHN0cmluZykgPT4gdHJhbnNsYXRvcihwYXJhbSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IEFDVElPTl9TRVBFUkFUT1IgPSAnX2FjdGlvblNlcGFyYXRvcl8nO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuc29ydGFibGUpIHRoaXMuc29ydEV2ZW50ID0gbmV3IFN1YmplY3QoKTtcbiAgICB0aGlzLmNyZWF0ZUNlbGxUb0FjdGlvbk1hcCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBoYW5kbGVPblJvd0NsaWNrKGVsZW1lbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUudGFibGVUeXBlID09PSBTbWFydFRhYmxlVHlwZS5JTkhFUklURUQpIHtcbiAgICAgIHRoaXMub25Sb3dDbGljayhlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS50YWJsZVR5cGUgPT09IFNtYXJ0VGFibGVUeXBlLkNIRUNLX0JPWCkge1xuICAgICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljayAmJiAhdGhpcy5zbWFydFRhYmxlLm9uUm93Q2xpY2spIHtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXG4gICAgICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvblByb3BlcnR5XG4gICAgICAgICAgICA/IHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShlbGVtZW50LCB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpXG4gICAgICAgICAgICA6IGVsZW1lbnRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLm9uUm93Q2xpY2spIHtcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuUk9XX1NFTEVDVCkge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxuICAgICAgICAgID8gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcbiAgICAgICAgICA6IGVsZW1lbnRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU21hcnRUYWJsZShzbWFydFRhYmxlOiBTbWFydFRhYmxlPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnNtYXJ0VGFibGUgPSBzbWFydFRhYmxlO1xuICAgIHRoaXMucmVuZGVyUm93cygpO1xuICB9XG5cbiAgcmVuZGVyUm93cygpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZUNlbGxUb0FjdGlvbk1hcCgpO1xuICAgIHRoaXMubXlUYWJsZUNoaWxkLnJlbmRlclJvd3MoKTtcbiAgfVxuXG4gIGNyZWF0ZUNlbGxUb0FjdGlvbk1hcCgpIHtcbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zbWFydFRhYmxlLmdldFNlcnZpY2VUb1VzZSgpO1xuICAgIGNvbnN0IGdyaWRJZCA9IHRoaXMuc21hcnRUYWJsZS5nZXRHcmlkSWQoKTtcblxuICAgIGlmIChzZXJ2aWNlICYmIGdyaWRJZCkge1xuICAgICAgdGhpcy5jZWxsVG9BY3Rpb25NYXAgPSBTbWFydEdyaWRUb29sYmFyQWN0aW9uc1V0aWwuY2FsY3VsYXRlQ2VsbFRvQWN0aW9uTWFwKFxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLFxuICAgICAgICBzZXJ2aWNlLFxuICAgICAgICBncmlkSWRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlT25Sb3dEb3VibGVDbGljayhldmVudDogYW55LCBlbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25zICYmIHRoaXMuc21hcnRUYWJsZS5kZWZhdWx0QWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9wZW5EZWZhdWx0QWN0aW9uc01lbnUoZXZlbnQsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuSU5IRVJJVEVEKSB7XG4gICAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljayhlbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydFRhYmxlLnRhYmxlVHlwZSA9PT0gU21hcnRUYWJsZVR5cGUuQ0hFQ0tfQk9YKSB7XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dEb3VibGVDbGljaykge1xuICAgICAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljayhlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHR5cGUoKTogdHlwZW9mIFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUge1xuICAgIHJldHVybiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlO1xuICB9XG5cbiAgc29ydEJ1dHRvbkNsaWNrZWQoZXZlbnQ6IGFueSwgaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zb3J0RXZlbnQubmV4dChoZWFkZXIpO1xuICB9XG5cbiAgY3VzdG9tQnV0dG9uQ2xpY2tlZChcbiAgICBldmVudDogYW55LFxuICAgIGJ1dHRvbjogU21hcnRUYWJsZUJ1dHRvbixcbiAgICBlbGVtZW50OiBhbnksXG4gICAgYnRuPzogYW55LFxuICAgIGNsb3NlPzogYm9vbGVhblxuICApIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoYnRuPy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChidXR0b24udHlwZSA9PT0gU21hcnRUYWJsZUJ1dHRvblR5cGUuTUVOVSAmJiBidG4gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgaWYgKCFidXR0b24uY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQnV0dG9uIHdpdGggbmFtZSAke2J1dHRvbi5sYWJlbCB8fCBidXR0b24uaWNvbn0gZG9lcyBub3QgaGF2ZSBhIGNhbGxiYWNrIWApO1xuICAgIH1cbiAgICBidXR0b24uY2FsbGJhY2soYnV0dG9uLmFyZ3MsIGVsZW1lbnQsIGJ0bik7XG4gICAgaWYgKGNsb3NlKSB7XG4gICAgICBsZXQgb3Blbk1lbnVzID0gdGhpcy50cmlnZ2Vycy5maWx0ZXIoXG4gICAgICAgIChtYXRNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpID0+IG1hdE1lbnVUcmlnZ2VyLm1lbnVPcGVuXG4gICAgICApO1xuICAgICAgb3Blbk1lbnVzLmZvckVhY2goKG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikgPT4ge1xuICAgICAgICBtYXRNZW51VHJpZ2dlci5jbG9zZU1lbnUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlzU29ydGFibGUoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKTogYm9vbGVhbiB7XG4gICAgbGV0IGlzU29ydGFibGVUYWJsZSA9IHRoaXMuc21hcnRUYWJsZS5zb3J0YWJsZTtcbiAgICBpZiAoaXNTb3J0YWJsZVRhYmxlKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmlzU29ydGFibGUgIT09IHVuZGVmaW5lZCA/IGhlYWRlci5pc1NvcnRhYmxlIDogdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0U29ydEljb24oaGVhZGVyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCB0YWJsZUhlYWRlciA9IHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmluZChcbiAgICAgICh0YWJsZUhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gdGFibGVIZWFkZXIucHJvcGVydHlOYW1lID09PSBoZWFkZXJcbiAgICApO1xuICAgIGlmICh0YWJsZUhlYWRlciAmJiB0YWJsZUhlYWRlci5vcmRlcikge1xuICAgICAgcmV0dXJuIHRhYmxlSGVhZGVyLm9yZGVyID09PSBTbWFydFRhYmxlT3JkZXIuQVNDXG4gICAgICAgID8gKHRoaXMuc21hcnRUYWJsZS5zb3J0SWNvbkFzYyA/PyAna2V5Ym9hcmRfYXJyb3dfZG93bicpXG4gICAgICAgIDogKHRoaXMuc21hcnRUYWJsZS5zb3J0SWNvbkRlc2MgPz8gJ2tleWJvYXJkX2Fycm93X3VwJyk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaGFzU29ydE51bUljb24oaGVhZGVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgdGFibGVIZWFkZXIgPSB0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gaGVhZGVyXG4gICAgKTtcbiAgICByZXR1cm4gdGFibGVIZWFkZXI/Lm9yZGVyTnVtYmVyICE9PSB1bmRlZmluZWQ7XG4gIH1cbiAgZ2V0U29ydE51bUljb24oaGVhZGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB0YWJsZUhlYWRlciA9IHRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmluZChcbiAgICAgICh0YWJsZUhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gdGFibGVIZWFkZXIucHJvcGVydHlOYW1lID09PSBoZWFkZXJcbiAgICApO1xuICAgIGlmICh0YWJsZUhlYWRlciAmJiB0YWJsZUhlYWRlci5vcmRlck51bWJlcikge1xuICAgICAgcmV0dXJuIGBmaWx0ZXJfJHt0YWJsZUhlYWRlci5vcmRlck51bWJlcn1gO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXRUb29sVGlwKGVsZW1lbnQ6IGFueSwgaGVhZGVySW5kZXg6IG51bWJlcik6IFVpQWN0aW9uVG9vbHRpcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tVGFibGVIZWFkZXJzIHByb3BlcnR5IGlzIG1pc3NpbmcnKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIHByb3BlcnRpZXNgKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbVRhYmxlSGVhZGVyIHdpdGggaW5kZXggJHtoZWFkZXJJbmRleH0gZG9lcyBub3QgaGF2ZSBpY29ucyBkZWZpbmVkYCk7XG4gICAgfVxuXG4gICAgbGV0IHRvb2xUaXBDb2x1bW4gPVxuICAgICAgdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzPy50b29sVGlwQ29sdW1uO1xuICAgIHJldHVybiB0b29sVGlwQ29sdW1uID8gdGhpcy5nZXRWYWx1ZShlbGVtZW50LCB0b29sVGlwQ29sdW1uKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEljb24odmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sIGhlYWRlckluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0N1c3RvbVRhYmxlSGVhZGVycyBwcm9wZXJ0eSBpcyBtaXNzaW5nJyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbVRhYmxlSGVhZGVyIHdpdGggaW5kZXggJHtoZWFkZXJJbmRleH0gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0aWVzYCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzIS5pY29ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b21UYWJsZUhlYWRlciB3aXRoIGluZGV4ICR7aGVhZGVySW5kZXh9IGRvZXMgbm90IGhhdmUgaWNvbnMgZGVmaW5lZGApO1xuICAgIH1cbiAgICBsZXQgY3VzdG9tVGFibGVIZWFkZXJJY29ucyA9XG4gICAgICB0aGlzLnNtYXJ0VGFibGUuY3VzdG9tU21hcnRUYWJsZUhlYWRlcnNbaGVhZGVySW5kZXhdLnByb3BlcnRpZXMhLmljb25zO1xuXG4gICAgbGV0IGljb246IHN0cmluZyA9ICcnO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXN0b21UYWJsZUhlYWRlckljb25zIS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMhW2ldO1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlTnVsbCAmJlxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVOdWxsID09PSB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQmlnZ2VyVGhhbk51bWJlciAmJlxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCaWdnZXJUaGFuTnVtYmVyIDwgdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVTbWFsbGVyVGhhbk51bWJlciAmJlxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVTbWFsbGVyVGhhbk51bWJlciA+IHZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIGljb24gPSBjdXN0b21UYWJsZUhlYWRlckljb24uaWNvbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aE51bWJlciAmJlxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoTnVtYmVyID09PSB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUVxdWFsc1dpdGhTdHJpbmcgJiZcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aFN0cmluZyA9PT0gdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5pY29uO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQm9vbGVhbiAmJlxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCb29sZWFuID09PSB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICBpY29uID0gY3VzdG9tVGFibGVIZWFkZXJJY29uLmljb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaWNvbjtcbiAgfVxuXG4gIGdldENvbG9yKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuLCBoZWFkZXJJbmRleDogbnVtYmVyKTogVGhlbWVQYWxldHRlIHtcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVycykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDdXN0b21UYWJsZUhlYWRlcnMgcHJvcGVydHkgaXMgbWlzc2luZycpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b21UYWJsZUhlYWRlciB3aXRoIGluZGV4ICR7aGVhZGVySW5kZXh9IGRvZXMgbm90IGhhdmUgcHJvcGVydGllc2ApO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuc21hcnRUYWJsZS5jdXN0b21TbWFydFRhYmxlSGVhZGVyc1toZWFkZXJJbmRleF0ucHJvcGVydGllcyEuaWNvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VzdG9tVGFibGVIZWFkZXIgd2l0aCBpbmRleCAke2hlYWRlckluZGV4fSBkb2VzIG5vdCBoYXZlIGljb25zIGRlZmluZWRgKTtcbiAgICB9XG4gICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMgPVxuICAgICAgdGhpcy5zbWFydFRhYmxlLmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzW2hlYWRlckluZGV4XS5wcm9wZXJ0aWVzIS5pY29ucztcblxuICAgIGxldCBjb2xvcjogVGhlbWVQYWxldHRlID0gJ3ByaW1hcnknO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXN0b21UYWJsZUhlYWRlckljb25zIS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVySWNvbiA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbnMhW2ldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVCaWdnZXJUaGFuTnVtYmVyICYmXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJpZ2dlclRoYW5OdW1iZXIgPCB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlU21hbGxlclRoYW5OdW1iZXIgJiZcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlU21hbGxlclRoYW5OdW1iZXIgPiB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aE51bWJlciAmJlxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoTnVtYmVyID09PSB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlRXF1YWxzV2l0aFN0cmluZyAmJlxuICAgICAgICAgIGN1c3RvbVRhYmxlSGVhZGVySWNvbi5zaG93SWNvbklmVmFsdWVFcXVhbHNXaXRoU3RyaW5nID09PSB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb2xvciA9IGN1c3RvbVRhYmxlSGVhZGVySWNvbi5jb2xvcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VzdG9tVGFibGVIZWFkZXJJY29uLnNob3dJY29uSWZWYWx1ZUJvb2xlYW4gJiZcbiAgICAgICAgICBjdXN0b21UYWJsZUhlYWRlckljb24uc2hvd0ljb25JZlZhbHVlQm9vbGVhbiA9PT0gdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29sb3IgPSBjdXN0b21UYWJsZUhlYWRlckljb24uY29sb3I7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cblxuICB0YWJsZU9wdGlvbkJ1dHRvbkRpcmVjdGlvbigpOiB0eXBlb2YgU21hcnRUYWJsZU9wdGlvbkJ1dHRvbkRpcmVjdGlvbiB7XG4gICAgcmV0dXJuIFNtYXJ0VGFibGVPcHRpb25CdXR0b25EaXJlY3Rpb247XG4gIH1cblxuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuc2VsZWN0ZWQubGVuZ3RoO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLmxlbmd0aDtcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gIH1cblxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICB0b2dnbGVBbGxSb3dzKCkge1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbiEuY2xlYXIoKTtcblxuICAgICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbikge1xuICAgICAgICB0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLm1heE51bU9mU2VsZWN0YWJsZVJvd3MpIHtcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLmNsZWFyKCk7XG5cbiAgICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25BbGxTZWxlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uUHJvcGVydHkpIHtcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLnNlbGVjdChcbiAgICAgICAgLi4udGhpcy5zbWFydFRhYmxlLnRhYmxlUm93cy5tYXAoKHJvdzogYW55KSA9PlxuICAgICAgICAgIHRoaXMuc21hcnRUYWJsZS5nZXRWYWx1ZURlZXBseShyb3csIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSEpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLnNlbGVjdCguLi50aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vbkFsbFNlbGVjdGlvbikge1xuICAgICAgdGhpcy5zbWFydFRhYmxlLm9uQWxsU2VsZWN0aW9uKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgbGFiZWwgZm9yIHRoZSBjaGVja2JveCBvbiB0aGUgcGFzc2VkIHJvdyAqL1xuICBjaGVja2JveExhYmVsKHJvdz86IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFyb3cpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmlzQWxsU2VsZWN0ZWQoKSA/ICdkZXNlbGVjdCcgOiAnc2VsZWN0J30gYWxsYDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLmlzU2VsZWN0ZWQocm93KSA/ICdkZXNlbGVjdCcgOiAnc2VsZWN0J30gcm93ICR7XG4gICAgICByb3cucG9zaXRpb24gKyAxXG4gICAgfWA7XG4gIH1cblxuICBpc0hpZ2hsaWdodGVkKHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5oaWdobGlnaHRQcm9wZXJ0eSkge1xuICAgICAgaWYgKHJvd1snZGF0YSddW3RoaXMuc21hcnRUYWJsZS5oaWdobGlnaHRQcm9wZXJ0eV0pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhpZ2hsaWdodGVkUm93cyB8fCAhdGhpcy5oaWdobGlnaHRlZFJvd3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodGVkUm93cy5pbmNsdWRlcyhyb3cpO1xuICB9XG5cbiAgZ2V0Um93Q2xhc3Nlcyhyb3c6IGFueSkge1xuICAgIGxldCBjbGFzc2VzVG9BZGQ6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGNsYXNzZXNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgICBjbGFzc2VzVG9BZGQucHVzaCh0aGlzLmlzSGlnaGxpZ2h0ZWQocm93KSA/IHRoaXMuc21hcnRUYWJsZS5oaWdobGlnaHRDbGFzcyEgOiAndW5zZWxlY3RlZCcpO1xuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuaG92ZXIpIHtcbiAgICAgIGNsYXNzZXNUb0FkZC5wdXNoKCdzbWFydFRhYmxlUm93SG92ZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhc3Nlc1RvUmVtb3ZlLnB1c2goJ3NtYXJ0VGFibGVSb3dIb3ZlcicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKHJvdykpIHtcbiAgICAgIGNsYXNzZXNUb0FkZC5wdXNoKCdzZWxlY3RlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGFzc2VzVG9SZW1vdmUucHVzaCgnc2VsZWN0ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nQ2xhc3Nlcyhyb3cuc3R5bGUsIGNsYXNzZXNUb0FkZCwgY2xhc3Nlc1RvUmVtb3ZlKTtcbiAgfVxuXG4gIGdldFJvd1N0eWxlcyhyb3c6IGFueSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH0ge1xuICAgIHJldHVybiBTbWFydFN0eWxlVXRpbGl0eS5nZXROZ1N0eWxlcyhyb3cuc3R5bGUpO1xuICB9XG5cbiAgZ2V0Q29sdW1uQ2xhc3NlcyhoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpIHtcbiAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdDbGFzc2VzKGhlYWRlci5zdHlsZSk7XG4gIH1cblxuICBnZXRDb2x1bW5TdHlsZXMoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSB7XG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKGhlYWRlci5zdHlsZSk7XG4gIH1cblxuICBwcml2YXRlIHRvQ2FtZWxDYXNlKGNzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3NzLnJlcGxhY2UoLy0oW2Etel0pL2csIGZ1bmN0aW9uIChnKSB7XG4gICAgICByZXR1cm4gZ1sxXS50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgb25Sb3dDbGljayhyb3c6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuaGlnaGxpZ2h0T25Sb3dDbGljaykge1xuICAgICAgaWYgKHRoaXMuaXNIaWdobGlnaHRlZChyb3cpKSB7XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmluZGV4T2Yocm93LCAwKTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzIHx8ICF0aGlzLmhpZ2hsaWdodGVkUm93cy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MucHVzaChyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MucHVzaChyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLmV4cGFuZGFibGUgJiYgIXRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKSB7XG4gICAgICB0aGlzLm9uVG9nZ2xlKHJvdyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25Sb3dDbGljaykge1xuICAgICAgdGhpcy5zbWFydFRhYmxlLm9uUm93Q2xpY2socm93KTtcbiAgICB9XG4gIH1cbiAgb25Sb3dEb3VibGVDbGljayhyb3c6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUuaGlnaGxpZ2h0T25Sb3dDbGljaykge1xuICAgICAgaWYgKHRoaXMuaXNIaWdobGlnaHRlZChyb3cpKSB7XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuaGlnaGxpZ2h0ZWRSb3dzLmluZGV4T2Yocm93LCAwKTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaGlnaGxpZ2h0ZWRSb3dzIHx8ICF0aGlzLmhpZ2hsaWdodGVkUm93cy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MucHVzaChyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZFJvd3MucHVzaChyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2spIHtcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25Ub2dnbGUoZWxlbWVudDogYW55LCBldmVudD86IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5zbWFydFRhYmxlLnJvd0V4cGFuZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdTbWFydFRhYmxlUm93RXhwYW5kZXIgbm90IGZvdW5kIS4gUGxlYXNlIHByb3ZpZGUgYSBTbWFydFRhYmxlUm93RXhwYW5kZXIgaW1wbGVtZW50YXRpb24uJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBsZXQgb2xkSW5kZXggPSB0aGlzLnNtYXJ0VGFibGUudGFibGVSb3dzLmZpbmRJbmRleChcbiAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50ID09PSB0aGlzLmV4cGFuZGVkRWxlbWVudFxuICAgICk7XG4gICAgaWYgKG9sZEluZGV4ICE9PSAtMSkge1xuICAgICAgbGV0IHJlZiA9IHRoaXMudmNSZWYhLmZpbHRlcigoZWxlbWVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiBpbmRleCA9PT0gb2xkSW5kZXgpO1xuICAgICAgcmVmWzBdLmNsZWFyKCk7XG4gICAgfVxuICAgIHRoaXMuZXhwYW5kZWRFbGVtZW50ID0gdGhpcy5leHBhbmRlZEVsZW1lbnQgPT09IGVsZW1lbnQgPyBudWxsIDogZWxlbWVudDtcblxuICAgIGxldCBuZXdJbmRleCA9IHRoaXMuc21hcnRUYWJsZS50YWJsZVJvd3MuZmluZEluZGV4KFxuICAgICAgKGVsZW1lbnQpID0+IGVsZW1lbnQgPT09IHRoaXMuZXhwYW5kZWRFbGVtZW50XG4gICAgKTtcblxuICAgIGxldCByb3dEYXRhUmVzcG9uc2U7XG5cbiAgICBpZiAobmV3SW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAodGhpcy5zbWFydFRhYmxlLmFzeW5jT25FeHBhbmQpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNmU2VydmljZS5jcmVhdGVDb21wb25lbnQoXG4gICAgICAgICAgdGhpcy52Y1JlZj8uZmlsdGVyKChlbGVtZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IGluZGV4ID09PSBuZXdJbmRleClbMF0hLFxuICAgICAgICAgIExvYWRpbmdDb21wb25lbnQsXG4gICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oKVxuICAgICAgICApO1xuXG4gICAgICAgIHJvd0RhdGFSZXNwb25zZSA9IGF3YWl0IHRoaXMuc21hcnRUYWJsZS5yb3dFeHBhbmRlcj8uZXhwYW5kQXN5bmMobmV3SW5kZXgpO1xuXG4gICAgICAgIGxldCByZWYgPSB0aGlzLnZjUmVmIS5maWx0ZXIoKGVsZW1lbnQ6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggPT09IG5ld0luZGV4KVswXSE7XG4gICAgICAgIHJlZi5jbGVhcigpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52Y1JlZj8uZmlsdGVyKChlbGVtZW50OiBhbnksIGluZGV4OiBudW1iZXIpID0+IGluZGV4ID09PSBuZXdJbmRleClbMF0hLFxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuZXhwYW5kZWRDb21wb25lbnQsXG4gICAgICAgIG5ldyBNYXA8c3RyaW5nLCBhbnk+KFtbJ3Jvd0RhdGEnLCByb3dEYXRhUmVzcG9uc2VdXSlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzZXRTZWxlY3Rpb24oZWxlbWVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zbWFydFRhYmxlLm1heE51bU9mU2VsZWN0YWJsZVJvd3MgJiZcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24hLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5zbWFydFRhYmxlLm1heE51bU9mU2VsZWN0YWJsZVJvd3NcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zbWFydFRhYmxlLnNlbGVjdGlvbj8udG9nZ2xlKGVsZW1lbnQpO1xuICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkLm5leHQoKTtcblxuICAgIGlmICh0aGlzLnNtYXJ0VGFibGUub25TZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5vblNlbGVjdGlvbihlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBzaG93TWVudUJ1dHRvbihlbGVtZW50OiBhbnksIGJ1dHRvbjogU21hcnRUYWJsZUJ1dHRvbik6IGJvb2xlYW4ge1xuICAgIGxldCBoZWFkZXJzOiBzdHJpbmdbXSA9IHRoaXMuc21hcnRUYWJsZS50YWJsZUhlYWRlcnMubWFwKChoZWFkZXIpID0+XG4gICAgICB0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKVxuICAgICk7XG4gICAgbGV0IHNob3dNZW51ID0gU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsLnNob3dNZW51KGVsZW1lbnQsIGhlYWRlcnMpO1xuXG4gICAgaWYgKCFzaG93TWVudSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChidXR0b24ubWVudUl0ZW1CdXR0b25zKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGJ1dHRvbi5tZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBsZW5ndGggPSB0aGlzLmdldFZhbHVlKGVsZW1lbnQsIGJ1dHRvbi5tZW51SXRlbUJ1dHRvbnNQcm9wZXJ0eU5hbWUhKS5sZW5ndGg7XG4gICAgICAgIHJldHVybiBsZW5ndGggPiAwO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRWYWx1ZShlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gU21hcnRPYmplY3RVdGlsaXR5LmdldFZhbHVlQnlQYXRoKGVsZW1lbnQsIGhlYWRlcik7XG4gIH1cblxuICBzaG93QnV0dG9uKGJ1dHRvbjogU21hcnRUYWJsZUJ1dHRvbiwgZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGJ1dHRvbi5zaG93QnV0dG9uSWYpIHtcbiAgICAgIHJldHVybiBidXR0b24uc2hvd0J1dHRvbklmKGVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc21hcnRUYWJsZS5pc1Jvd0Rpc2FibGVkUHJvcGVydHlOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHRoaXMuc21hcnRUYWJsZS5pc1Jvd0Rpc2FibGVkUHJvcGVydHlOYW1lKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRUYWJsZS5zZWxlY3RhYmxlUHJvcGVydHlOYW1lKSB7XG4gICAgICBjb25zdCBzZWxlY3RhYmxlID0gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICB0aGlzLnNtYXJ0VGFibGUuc2VsZWN0YWJsZVByb3BlcnR5TmFtZVxuICAgICAgKTtcbiAgICAgIHJldHVybiBzZWxlY3RhYmxlID09PSB1bmRlZmluZWQgfHwgc2VsZWN0YWJsZSA9PT0gbnVsbCA/IGZhbHNlIDogIXNlbGVjdGFibGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQoZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24/LmlzU2VsZWN0ZWQoXG4gICAgICAgIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eVxuICAgICAgICAgID8gdGhpcy5zbWFydFRhYmxlLmdldFZhbHVlRGVlcGx5KGVsZW1lbnQsIHRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb25Qcm9wZXJ0eSlcbiAgICAgICAgICA6IGVsZW1lbnRcbiAgICAgICkgPz8gZmFsc2VcbiAgICApO1xuICB9XG5cbiAgb3JpZ2luYWxQcm9wZXJ0eShoZWFkZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGhlYWRlci5zdGFydHNXaXRoKCdkYXRhLicpKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLnN1YnN0cmluZygnZGF0YS4nLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXI7XG4gIH1cblxuICBpc0ltYWdlUmVzb3VyY2UoZWxlbWVudDogYW55LCBoZWFkZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghZWxlbWVudC5pY29ucykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgcHJvcGVydHkgPSB0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZWxlbWVudC5pY29ucykuc29tZSgoa2V5KSA9PiBrZXkgPT09IHByb3BlcnR5KTtcbiAgfVxuXG4gIGdldEltYWdlUmVzb3VyY2VJY29ucyhlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogSW1hZ2VSZXNvdXJjZVtdIHtcbiAgICBpZiAoZWxlbWVudD8uaWNvbnMpIHtcbiAgICAgIGxldCBpY29uQ29kZXMgPSBlbGVtZW50Py5pY29uc1t0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKV07XG4gICAgICByZXR1cm4gaWNvbkNvZGVzO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRJbWFnZVJlc291cmNlSWNvbihlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gZWxlbWVudC5pY29uc1t0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKV0uaWRlbnRpZmllcjtcbiAgfVxuXG4gIGdldEltYWdlUmVzb3VyY2VDb2xvcihlbGVtZW50OiBhbnksIGhlYWRlcjogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gZWxlbWVudC5pY29uc1t0aGlzLm9yaWdpbmFsUHJvcGVydHkoaGVhZGVyKV0uY29sb3IgPz8gJ3ByaW1hcnknO1xuICB9XG5cbiAgZ2V0SW1hZ2VSZXNvdXJjZVN0eWxlKHJlc291cmNlOiBJbWFnZVJlc291cmNlKTogYW55IHtcbiAgICByZXR1cm4gcmVzb3VyY2Uuc3R5bGUgPyByZXNvdXJjZS5zdHlsZSA6IHt9O1xuICB9XG5cbiAgb3BlbkRlZmF1bHRBY3Rpb25zTWVudShldmVudDogYW55LCByb3c6IGFueSkge1xuICAgIGxldCBhY3Rpb25Db2Rlc0Zyb21Sb3cgPSByb3c/LmFjdGlvbnM/Lm1hcCgoYWN0aW9uOiBVaUFjdGlvbikgPT4gYWN0aW9uLmNvZGUpO1xuICAgIGlmICghYWN0aW9uQ29kZXNGcm9tUm93KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmaWx0ZXJlZEFjdGlvbnMgPSB0aGlzLnNtYXJ0VGFibGUuZGVmYXVsdEFjdGlvbnM/LmZpbHRlcigoYWN0aW9uOiBTbWFydFRhYmxlQnV0dG9uKSA9PlxuICAgICAgYWN0aW9uQ29kZXNGcm9tUm93LmluY2x1ZGVzKGFjdGlvbi5jb2RlISlcbiAgICApO1xuXG4gICAgaWYgKGZpbHRlcmVkQWN0aW9ucyAmJiBmaWx0ZXJlZEFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGZpbHRlcmVkQWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKHRoaXMuc21hcnRUYWJsZS5vblJvd0RvdWJsZUNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5zbWFydFRhYmxlLm9uUm93RG91YmxlQ2xpY2socm93KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZGVmYXVsdEFjdGlvbk1lbnVDb21wb25lbnRzXG4gICAgICAgIC50b0FycmF5KClcbiAgICAgICAgLmZpbmQoKGNvbXA6IERlZmF1bHRBY3Rpb25zUG9wdXBDb21wb25lbnQpID0+IGNvbXAucm93LmlkID09PSByb3cuaWQpXG4gICAgICAgID8ub3BlbkRlZmF1bHRBY3Rpb25zTWVudShldmVudCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGVmYXVsdEFjdGlvbnNGb3JSb3coZWxlbWVudDogYW55KTogTWFwPFNtYXJ0VGFibGVCdXR0b24sIFVpQWN0aW9uPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVsZW1lbnQ/LmFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbkNvZGVzRnJvbVJvdyA9IG5ldyBNYXA8c3RyaW5nLCBVaUFjdGlvbj4oXG4gICAgICAgIGVsZW1lbnQ/LmFjdGlvbnM/Lm1hcCgoYWN0aW9uOiBVaUFjdGlvbikgPT4gW2FjdGlvbi5jb2RlLCBhY3Rpb25dKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBuZXcgTWFwPFNtYXJ0VGFibGVCdXR0b24sIFVpQWN0aW9uPihcbiAgICAgICAgdGhpcy5zbWFydFRhYmxlLmRlZmF1bHRBY3Rpb25zXG4gICAgICAgICAgPy5maWx0ZXIoKGFjdGlvbjogU21hcnRUYWJsZUJ1dHRvbikgPT4gYWN0aW9uQ29kZXNGcm9tUm93LmhhcyhhY3Rpb24uY29kZSEpKVxuICAgICAgICAgIC5tYXAoKGFjdGlvbjogU21hcnRUYWJsZUJ1dHRvbikgPT4gW2FjdGlvbiwgYWN0aW9uQ29kZXNGcm9tUm93LmdldChhY3Rpb24uY29kZSEpIV0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gLS0tLSBUb29sYmFyIC0tLS1cbiAgZ2V0Um93Q29sdW1uQWN0aW9uKHJvdzogYW55LCBoZWFkZXI6IHN0cmluZyk6IGFueVtdIHtcbiAgICByZXR1cm4gU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsLmdldEFjdGlvbk1vZGVsc0Zyb21NYXAoXG4gICAgICB0aGlzLmNlbGxUb0FjdGlvbk1hcCxcbiAgICAgIHJvdyxcbiAgICAgIHRoaXMub3JpZ2luYWxQcm9wZXJ0eShoZWFkZXIpXG4gICAgKTtcbiAgfVxuXG4gIHNob3dDZWxsVG9vbGJhcihyb3c6IGFueSwgY29sdW1uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNtYXJ0R3JpZFRvb2xiYXJBY3Rpb25zVXRpbC5zaG93VG9vbGJhcihyb3csIHRoaXMub3JpZ2luYWxQcm9wZXJ0eShjb2x1bW5OYW1lKSk7XG4gIH1cblxuICBnZXRNZW51QnV0dG9ucyhyb3c6IGFueSwgYnV0dG9uOiBTbWFydFRhYmxlQnV0dG9uKTogU21hcnRUYWJsZUJ1dHRvbltdIHtcbiAgICBsZXQgY29sdW1uQWN0aW9ucyA9IHJvdy5jb2x1bW5BY3Rpb25zID8/IHt9O1xuXG4gICAgLy8gRmlsdGVyIGZvciBjb2x1bW5BY3Rpb25zIHRoYXQgYXJlIGluIGEgY29sdW1uQWN0aW9uLCBidXQgdGhlIGNvbHVtbiBpcyBub3QgaW4gdGhlIGhlYWRlcnNcbiAgICBsZXQgZmlsdGVyZWRBY3Rpb25Db2x1bW5zID0gT2JqZWN0LmtleXMoY29sdW1uQWN0aW9ucylcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4gdGhpcy5zbWFydFRhYmxlLnRhYmxlSGVhZGVycy5pbmNsdWRlcygnZGF0YS4nICsga2V5KSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgIGFjY1trZXldID0gY29sdW1uQWN0aW9uc1trZXldO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuICAgICAgKTtcblxuICAgIGxldCBjb2x1bW5Db2Rlczogc3RyaW5nW10gPSBPYmplY3QudmFsdWVzKGZpbHRlcmVkQWN0aW9uQ29sdW1ucykuZmxhdCgpO1xuICAgIHJldHVybiAoYnV0dG9uLm1lbnVJdGVtQnV0dG9ucyB8fCBbXSkuZmlsdGVyKChidG4pID0+ICFjb2x1bW5Db2Rlcy5pbmNsdWRlcyhidG4uY29kZSEpKTtcbiAgfVxuXG4gIGdldE1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZShlbGVtZW50OiBhbnksIGJ1dHRvbjogU21hcnRUYWJsZUJ1dHRvbik6IGFueVtdIHtcbiAgICBsZXQgYnV0dG9uczogU21hcnRUYWJsZUJ1dHRvbltdID0gdGhpcy5nZXRWYWx1ZShlbGVtZW50LCBidXR0b24ubWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lISk7XG4gICAgbGV0IGdyaWRSb3c6IGFueSA9IGVsZW1lbnQ7XG5cbiAgICBsZXQgY29sdW1uQWN0aW9ucyA9IGdyaWRSb3cuY29sdW1uQWN0aW9ucyA/PyB7fTtcblxuICAgIC8vIEZpbHRlciBmb3IgY29sdW1uQWN0aW9ucyB0aGF0IGFyZSBpbiBhIGNvbHVtbkFjdGlvbiwgYnV0IHRoZSBjb2x1bW4gaXMgbm90IGluIHRoZSBoZWFkZXJzXG4gICAgbGV0IGZpbHRlcmVkQWN0aW9uQ29sdW1ucyA9IE9iamVjdC5rZXlzKGNvbHVtbkFjdGlvbnMpXG4gICAgICAuZmlsdGVyKChrZXkpID0+IHRoaXMuc21hcnRUYWJsZS50YWJsZUhlYWRlcnMuaW5jbHVkZXMoJ2RhdGEuJyArIGtleSkpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICBhY2Nba2V5XSA9IGNvbHVtbkFjdGlvbnNba2V5XTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT5cbiAgICAgICk7XG4gICAgbGV0IGNvbHVtbkNvZGVzOiBzdHJpbmdbXSA9IE9iamVjdC52YWx1ZXMoZmlsdGVyZWRBY3Rpb25Db2x1bW5zIHx8IHt9KS5mbGF0KCk7XG5cbiAgICByZXR1cm4gYnV0dG9ucz8uZmlsdGVyKChidXR0b24pID0+ICFjb2x1bW5Db2Rlcy5pbmNsdWRlcyhidXR0b24uY29kZSEpKSE7XG4gIH1cbn1cbiJdfQ==
@@ -6,4 +6,4 @@ export * from './smarttree.component';
6
6
  export * from './smarttree.module';
7
7
  export * from './smarttree.model';
8
8
  export * from './smarttree-generic.service';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC10cmVlL3Byb2plY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHNtYXJ0dHJlZVxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vc21hcnR0cmVlLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0dHJlZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0dHJlZS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0dHJlZS5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc21hcnR0cmVlLWdlbmVyaWMuc2VydmljZSc7XHJcbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC10cmVlL3Byb2plY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBzbWFydHRyZWVcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0dHJlZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc21hcnR0cmVlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0dHJlZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zbWFydHRyZWUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zbWFydHRyZWUtZ2VuZXJpYy5zZXJ2aWNlJztcbiJdfQ==
@@ -286,4 +286,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
286
286
  type: Inject,
287
287
  args: ['treeMenuIcon']
288
288
  }] }] });
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsdUJBQXVCLEVBSXZCLHlCQUF5QixFQUd6QixlQUFlLEdBR2hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBVXhDLE1BQU0sT0FBTyx1QkFDWCxTQUFRLGdCQUFpQztJQWlCekMsWUFDRSxNQUFnQixFQUNjLFFBQWdCLEVBQzVCLE1BQWMsRUFDQSxZQUFxQjtRQUVyRCxLQUFLLEVBQUUsQ0FBQztRQUpzQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBRWQsaUJBQVksR0FBWixZQUFZLENBQVM7UUFsQnZELHlCQUF5QjtRQUN6QixXQUFNLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDdEMsd0JBQW1CLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFbkQsd0JBQW1CLEdBQW9DLElBQUksR0FBRyxFQUFFLENBQUM7UUFpQi9ELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXJCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIs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QyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FDdkUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUMzRixDQUFDO0lBQ0osQ0FBQztJQUVELG1DQUFtQyxDQUNqQyxRQUFrQixFQUNsQixlQUFnQztRQUVoQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzsrR0EvVVUsdUJBQXVCLDBDQW9CeEIsVUFBVSxhQUNWLFFBQVEsYUFDUixjQUFjO21IQXRCYix1QkFBdUIsY0FGdEIsTUFBTTs7NEZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBcUJJLE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uLFxyXG4gIFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3IsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSxcclxuICBVaUFjdGlvbk1vZGVsLFxyXG4gIFVpQWN0aW9uUmVxdWVzdCxcclxuICBVaUFjdGlvblNlcnZpY2UsXHJcbiAgVWlBY3Rpb25TcGVjaWZpY0RlbWFuZFJlc3BvbnNlLFxyXG4gIFVzZVVpQWN0aW9uLFxyXG59IGZyb20gJy4uL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLWFwaS9hcGkvdHJlZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU21hcnRUcmVlTm9kZSwgU21hcnRUcmVlTm9kZUJ1dHRvblR5cGUgfSBmcm9tICcuL3NtYXJ0dHJlZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0dHJlZVNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0dHJlZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICdmYXN0LWVxdWFscyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0dHJlZUNvbmZpZ3VyYXRpb24ge1xyXG4gIHRyZWVpZDogc3RyaW5nO1xyXG4gIHBhZ2VOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydHRyZWVHZW5lcmljU2VydmljZVxyXG4gIGV4dGVuZHMgU21hcnR0cmVlU2VydmljZTxTbWFydFRyZWVOb2RlW10+XHJcbiAgaW1wbGVtZW50cyBVc2VVaUFjdGlvblxyXG57XHJcbiAgLy8gVXNlVWlBY3Rpb24gcHJvcGVydGllc1xyXG4gIHN1Ym1pdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcmVTdWJzY3JpYmVUb0NoYW5nZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHVpQWN0aW9uRGVzY3JpcHRvcnM6IE1hcDxzdHJpbmcsIFVpQWN0aW9uRGVzY3JpcHRvcj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHNlbGVjdGVkTm9kZT86IFNtYXJ0VHJlZU5vZGU7XHJcblxyXG4gIHByb3RlY3RlZCB2aWV3Q29udGV4dCE6IFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlO1xyXG4gIHByaXZhdGUgc2VydmljZSE6IFRyZWVTZXJ2aWNlO1xyXG5cclxuICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UhOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gIHByaXZhdGUgdWlBY3Rpb25TZXJ2aWNlITogVWlBY3Rpb25TZXJ2aWNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGluamVjdDogSW5qZWN0b3IsXHJcbiAgICBASW5qZWN0KCdwYWdlTmFtZScpIHByb3RlY3RlZCBwYWdlTmFtZTogc3RyaW5nLFxyXG4gICAgQEluamVjdCgndHJlZUlkJykgdHJlZUlkOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KCd0cmVlTWVudUljb24nKSBwcml2YXRlIHRyZWVNZW51SWNvbj86IHN0cmluZ1xyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMudHJlZUlkID0gdHJlZUlkO1xyXG5cclxuICAgIGlmICghdGhpcy50cmVlTWVudUljb24pIHtcclxuICAgICAgdGhpcy50cmVlTWVudUljb24gPSBpbmplY3QuZ2V0KCd0cmVlTWVudUljb24nKTtcclxuICAgIH1cclxuICAgIHRoaXMuY29uZmlndXJlVHJlZSh7XHJcbiAgICAgIHBhZ2VOYW1lOiB0aGlzLnBhZ2VOYW1lLFxyXG4gICAgICB0cmVlaWQ6IHRoaXMudHJlZUlkLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGluamVjdC5nZXQoU21hcnRWaWV3Q29udGV4dFNlcnZpY2UpO1xyXG4gICAgdGhpcy5zZXJ2aWNlID0gaW5qZWN0LmdldChUcmVlU2VydmljZSk7XHJcblxyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UpO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0VWlBY3Rpb25Nb2RlbHModWlBY3Rpb25zOiBVaUFjdGlvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gdWlBY3Rpb25zLm1hcCgodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICAgIHVpQWN0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVUcmVlKGNvbmZpZ3VyYXRpb246IFNtYXJ0dHJlZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMudHJlZUlkID0gY29uZmlndXJhdGlvbi50cmVlaWQ7XHJcbiAgICB0aGlzLnBhZ2VOYW1lID0gY29uZmlndXJhdGlvbi5wYWdlTmFtZTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy52aWV3Q29udGV4dC5oYXNWaWV3Q29udGV4dFV1aWQoKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmRvd25sb2FkVHJlZSgpLnRoZW4oKHJvb3ROb2RlczogU21hcnRUcmVlTm9kZVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKCFkZWVwRXF1YWwodGhpcy50cmVlRnJvbUJhY2tlbmQsIHJvb3ROb2RlcykpIHtcclxuICAgICAgICAgIHRoaXMudHJlZUZyb21CYWNrZW5kID0gcm9vdE5vZGVzO1xyXG4gICAgICAgICAgdGhpcy5zeW5jVHJlZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG92ZXJyaWRlIGFzeW5jIGRvd25sb2FkVHJlZSgpOiBQcm9taXNlPFNtYXJ0VHJlZU5vZGVbXT4ge1xyXG4gICAgbGV0IHV1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSEpO1xyXG4gICAgY29uc3Qgcm9vdE5vZGVzID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5nZXRSb290Tm9kZXMyKHV1aWQsIHRoaXMudHJlZUlkISkudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgICBjb25zdCB1aUFjdGlvbnMgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmdldE1haW5BY3Rpb25zMih1dWlkLCB0aGlzLnRyZWVJZCEpLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh1aUFjdGlvbnMpIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3RVaUFjdGlvbk1vZGVscyh1aUFjdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcm9vdE5vZGVzKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdE5vZGVzIGFyZSB1bmRlZmluZWQhJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm9vdE5vZGVzO1xyXG4gIH1cclxuICBvdmVycmlkZSBhc3luYyBkb3dubG9hZENoaWxkcmVuKHBhcmVudE5vZGU6IFNtYXJ0VHJlZU5vZGUpOiBQcm9taXNlPFNtYXJ0VHJlZU5vZGVbXT4ge1xyXG4gICAgbGV0IHV1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSEpO1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmdldENoaWxkcmVuTm9kZXMyKHV1aWQsIHRoaXMudHJlZUlkISwgcGFyZW50Tm9kZS5pZGVudGlmaWVyISkudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgICBpZiAoIWNoaWxkcmVuKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm9kZSB3aXRoIGlkZW50aWZpZXIgJHtwYXJlbnROb2RlLmlkZW50aWZpZXJ9IGRvZXMgbm90IGhhdmUgY2hpbGRyZW4uYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xyXG4gIH1cclxuICBvdmVycmlkZSBhc3luYyBvblRyZWVOb2RlT3Blbih0cmVlTm9kZTogU21hcnRUcmVlTm9kZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHZpZXdVdWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUhKTtcclxuXHJcbiAgICBpZiAodHJlZU5vZGU/LmV4cGFuZGVkKSB7XHJcbiAgICAgIGxldCB0ZW1wVHJlZU5vZGUgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuY29sbGFwc2VOb2RlMih2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCB0cmVlTm9kZS5pZGVudGlmaWVyISkudG9Qcm9taXNlKClcclxuICAgICAgKTtcclxuICAgICAgdHJlZU5vZGUgPSB0ZW1wVHJlZU5vZGUhO1xyXG4gICAgfSBlbHNlIGlmICghdHJlZU5vZGU/LmV4cGFuZGVkKSB7XHJcbiAgICAgIGxldCB0ZW1wVHJlZU5vZGUgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuZXhwYW5kTm9kZTIodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdHJlZU5vZGU/LmlkZW50aWZpZXIhKS50b1Byb21pc2UoKVxyXG4gICAgICApO1xyXG4gICAgICB0cmVlTm9kZSA9IHRlbXBUcmVlTm9kZSE7XHJcbiAgICB9XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMuZGVlcFNlYXJjaFRyZWVOb2RlKHRyZWVOb2RlPy5pZGVudGlmaWVyISwgdGhpcy50cmVlRnJvbUJhY2tlbmQhKTtcclxuXHJcbiAgICBub2RlIS5leHBhbmRlZCA9IHRyZWVOb2RlPy5leHBhbmRlZDtcclxuICAgIG5vZGUhLmNoaWxkcmVuTm9kZXMgPSB0cmVlTm9kZT8uY2hpbGRyZW5Ob2RlcztcclxuICAgIHRoaXMuc3luY1RyZWUoKTtcclxuICB9XHJcbiAgb3ZlcnJpZGUgb25UcmVlTm9kZUNsaWNrKHRyZWVOb2RlOiBTbWFydFRyZWVOb2RlKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdEZvbGRlcih0cmVlTm9kZS5pZGVudGlmaWVyISwgdHJlZU5vZGUpO1xyXG4gIH1cclxuICBhc3luYyBzZWxlY3RGb2xkZXIoZm9sZGVyVXJpOiBzdHJpbmcsIHRyZWVOb2RlPzogU21hcnRUcmVlTm9kZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHZpZXdVdWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUhKTtcclxuXHJcbiAgICBsZXQgdXBkYXRlZFRyZWVOb2RlID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3ROb2RlMih2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCB0cmVlTm9kZSEuaWRlbnRpZmllciEpLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IHVwZGF0ZWRUcmVlTm9kZTtcclxuICAgIGxldCBub2RlID0gdGhpcy5kZWVwU2VhcmNoVHJlZU5vZGUodXBkYXRlZFRyZWVOb2RlPy5pZGVudGlmaWVyISwgdGhpcy50cmVlRnJvbUJhY2tlbmQhKTtcclxuICAgIGlmICghbm9kZSkge1xyXG4gICAgICB0aHJvdyBFcnJvcignVHJlZSBub2RlIGRvZXMgbm90IGV4aXN0Jyk7XHJcbiAgICB9XHJcbiAgICBub2RlLmV4cGFuZGVkID0gdXBkYXRlZFRyZWVOb2RlPy5leHBhbmRlZCE7XHJcbiAgICBub2RlLmNoaWxkcmVuTm9kZXMgPSB1cGRhdGVkVHJlZU5vZGU/LmNoaWxkcmVuTm9kZXMhO1xyXG4gICAgbm9kZS5zZWxlY3RlZCA9IHVwZGF0ZWRUcmVlTm9kZT8uc2VsZWN0ZWQhO1xyXG4gICAgdHJlZU5vZGUgPSB1cGRhdGVkVHJlZU5vZGU7XHJcbiAgICB0aGlzLnN5bmNUcmVlKCk7XHJcbiAgICAvL3RoaXMudmlld0NvbnRleHQuZ2V0QW5kU3luY1ZpZXdDb250ZXh0KHRoaXMudmlld0NvbnRleHQuZ2V0Vmlld0NvbnRleHRVdWlkKCkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlVHJlZU9uVGhlRmx5KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBhc3luYyBzeW5jVHJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLnRyZWVGcm9tQmFja2VuZCA9PT0gbnVsbCB8fCB0aGlzLnRyZWVGcm9tQmFja2VuZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBubyB0cmVlRnJvbUJhY2tlbmQgYXZhaWxhYmxlIScpO1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1RoZXJlIGlzIG5vIHRyZWVGcm9tQmFja2VuZCBhdmFpbGFibGUgaW4gc3luY1RyZWUhJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuY2FjaGVBY3Rpb25EZXNjaXB0b3JzKHRoaXMuZ2V0QWxsTm9kZXModGhpcy50cmVlRnJvbUJhY2tlbmQhKSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VHJlZU1vZGVsKSB7XHJcbiAgICAgIHRoaXMuc21hcnRUcmVlTW9kZWwgPSB7XHJcbiAgICAgICAgcm9vdE5vZGVzOiBbXSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc21hcnRUcmVlTm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSA9IHRoaXMuY3JlYXRlQnV0dG9uc0ZvclRyZWVOb2Rlcyh0aGlzLnRyZWVGcm9tQmFja2VuZCk7XHJcbiAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWwgPSB7XHJcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMudHJlZUlkLFxyXG4gICAgICByb290Tm9kZXM6IFtdLFxyXG4gICAgfTtcclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWxDaGFuZ2VkLm5leHQodGhpcy5zbWFydFRyZWVNb2RlbCk7XHJcblxyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbC5yb290Tm9kZXMgPSBzbWFydFRyZWVOb2RlcztcclxuXHJcbiAgICB0aGlzLmZpbmRTZWxlY3RlZCh0aGlzLnNtYXJ0VHJlZU1vZGVsLnJvb3ROb2Rlcyk7XHJcblxyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbENoYW5nZWQubmV4dCh0aGlzLnNtYXJ0VHJlZU1vZGVsKTtcclxuICB9XHJcblxyXG4gIGRlZXBTZWFyY2hUcmVlTm9kZShpZGVudGlmaWVyOiBzdHJpbmcsIG5vZGVzOiBTbWFydFRyZWVOb2RlW10pOiBTbWFydFRyZWVOb2RlIHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCB0cmVlTm9kZTogU21hcnRUcmVlTm9kZSB8IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub2Rlcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChub2RlLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcclxuICAgICAgICB0cmVlTm9kZSA9IG5vZGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW5Ob2RlcyAmJiBub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdHJlZU5vZGUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZShpZGVudGlmaWVyLCBub2RlLmNoaWxkcmVuTm9kZXMpO1xyXG4gICAgICAgIGlmICh0cmVlTm9kZSkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJlZU5vZGU7XHJcbiAgfVxyXG5cclxuICBmaW5kU2VsZWN0ZWQobm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIG5vZGVzLmZvckVhY2goKG5vZGU6IFNtYXJ0VHJlZU5vZGUpID0+IHtcclxuICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW5Ob2RlcyAmJiBub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFNlbGVjdGVkKG5vZGUuY2hpbGRyZW5Ob2Rlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQnV0dG9uc0ZvclRyZWVOb2Rlcyhub2RlczogU21hcnRUcmVlTm9kZVtdKTogU21hcnRUcmVlTm9kZVtdIHtcclxuICAgIGxldCBpY29uID0gdGhpcy50cmVlTWVudUljb24gPz8gJ21vcmVfdmVydCc7XHJcblxyXG4gICAgbm9kZXMubWFwKChub2RlOiBTbWFydFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgIG5vZGUuYnV0dG9uID0gbm9kZS5hY3Rpb25zPy5sZW5ndGhcclxuICAgICAgICA/IHtcclxuICAgICAgICAgICAgdHlwZTogU21hcnRUcmVlTm9kZUJ1dHRvblR5cGUuTUVOVSxcclxuICAgICAgICAgICAgaWNvbjogaWNvbixcclxuICAgICAgICAgICAgbWVudUl0ZW1CdXR0b25zOiBub2RlLmFjdGlvbnMubWFwKChhY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgICAgIGNvZGU6IGFjdGlvbi5jb2RlLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWxCeUFjdGlvbihhY3Rpb24pLFxyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZG9BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIGFyZ3M6IFthY3Rpb24sIG5vZGUuaWRlbnRpZmllcl0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgIG5vZGUuaWNvbiA9ICdGb2xkZXJzJztcclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW5Ob2Rlcykge1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW5Ob2RlcyA9IHRoaXMuY3JlYXRlQnV0dG9uc0ZvclRyZWVOb2Rlcyhub2RlLmNoaWxkcmVuTm9kZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2RlcztcclxuICB9XHJcblxyXG4gIGFzeW5jIGRvQWN0aW9uKGFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdWlBY3Rpb246IFVpQWN0aW9uID0gYXJnc1swXTtcclxuICAgIGxldCBub2RlVXVpZDogc3RyaW5nID0gYXJnc1sxXTtcclxuXHJcbiAgICBpZiAodWlBY3Rpb24ucGFyYW1zKSB7XHJcbiAgICAgIHVpQWN0aW9uLnBhcmFtc1snbm9kZVV1aWQnXSA9IG5vZGVVdWlkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdWlBY3Rpb24ucGFyYW1zID0ge1xyXG4gICAgICAgIG5vZGVVdWlkOiBub2RlVXVpZCxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdWlBY3Rpb25Nb2RlbDogVWlBY3Rpb25Nb2RlbCA9IHtcclxuICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICB1aUFjdGlvbixcclxuICAgIH07XHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZS5leGVjdXRlKHVpQWN0aW9uLCB1aUFjdGlvbk1vZGVsKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxOb2Rlcyhub2RlczogU21hcnRUcmVlTm9kZVtdKTogU21hcnRUcmVlTm9kZVtdIHtcclxuICAgIHJldHVybiBub2Rlcy5mbGF0TWFwKChuKSA9PiBbbiwgLi4udGhpcy5nZXRBbGxOb2RlcyhuLmNoaWxkcmVuTm9kZXMpXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYXN5bmMgY2FjaGVBY3Rpb25EZXNjaXB0b3JzKG5vZGVzOiBTbWFydFRyZWVOb2RlW10pIHtcclxuICAgIGxldCBuZXdVaUFjdGlvbnMgPSBuZXcgU2V0PFVpQWN0aW9uPigpO1xyXG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBub2RlLmFjdGlvbnNcclxuICAgICAgICA/LmZpbHRlcigodWlBY3Rpb246IFVpQWN0aW9uKSA9PiAhdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISkpXHJcbiAgICAgICAgLmZvckVhY2goKGFjdGlvbikgPT4gbmV3VWlBY3Rpb25zLmFkZChhY3Rpb24pKTtcclxuICAgIH0pO1xyXG4gICAgZm9yIChsZXQgYWN0aW9uIG9mIG5ld1VpQWN0aW9ucykge1xyXG4gICAgICBpZiAoIXRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQoYWN0aW9uLmNvZGUhKSkge1xyXG4gICAgICAgIGxldCBkZXNjcmlwdG9yID0gYXdhaXQgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLmdldEFjdGlvbkRlc2NyaXB0b3IoYWN0aW9uKTtcclxuICAgICAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuc2V0KGFjdGlvbi5jb2RlISwgZGVzY3JpcHRvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZ2V0TGFiZWxCeUFjdGlvbihhY3Rpb246IFVpQWN0aW9uKTogc3RyaW5nIHtcclxuICAgIGxldCBkZXNjID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldChhY3Rpb24uY29kZSEpO1xyXG4gICAgcmV0dXJuIGRlc2MhLnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBVc2VVaUFjdGlvblxyXG4gIGdldEFkZGl0aW9uYWxQYXJhbXModWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zIHtcclxuICAgIGlmICh1aUFjdGlvbi5wYXJhbXMgJiYgdWlBY3Rpb24ucGFyYW1zWydub2RlVXVpZCddKSB7XHJcbiAgICAgIGxldCBub2RlVXVpZCA9IHVpQWN0aW9uLnBhcmFtcyFbJ25vZGVVdWlkJ107XHJcblxyXG4gICAgICBsZXQgbm9kZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgICAgaWYgKHVpQWN0aW9uLmNvZGUgPT09ICdSRU5BTUUnKSB7XHJcbiAgICAgICAgbm9kZU5hbWUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZShub2RlVXVpZCwgdGhpcy50cmVlRnJvbUJhY2tlbmQhKT8uY2FwdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmb3JUZXh0QXJlYTogJycsXHJcbiAgICAgICAgZm9yVGV4dEZpZWxkOiBub2RlTmFtZSA/IG5vZGVOYW1lIDogJycsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZm9yVGV4dEFyZWE6ICcnLFxyXG4gICAgICBmb3JUZXh0RmllbGQ6ICcnLFxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0TW9kZWwoKSB7XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICBhc3luYyBwZXJmb3JtVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh1aUFjdGlvblJlcXVlc3QucGFyYW1zWydub2RlVXVpZCddKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybU5vZGVVaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybU1haW5VaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0KTtcclxuICAgIH1cclxuXHJcbiAgICAvL2F3YWl0IHRoaXMudmlld0NvbnRleHQuZ2V0QW5kU3luY1ZpZXdDb250ZXh0KCk7XHJcblxyXG4gICAgdGhpcy5zeW5jVHJlZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGVyZm9ybU5vZGVVaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IG5vZGVJZCA9IHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ25vZGVVdWlkJ107XHJcbiAgICBkZWxldGUgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snbm9kZVV1aWQnXTtcclxuXHJcbiAgICBsZXQgdmlld1V1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSk7XHJcblxyXG4gICAgdGhpcy50cmVlRnJvbUJhY2tlbmQgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnBlcmZvcm1BY3Rpb24yKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIG5vZGVJZCwgdWlBY3Rpb25SZXF1ZXN0KS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgYXN5bmMgcGVyZm9ybU1haW5VaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IHZpZXdVdWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUpO1xyXG5cclxuICAgIHRoaXMudHJlZUZyb21CYWNrZW5kID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5wZXJmb3JtTWFpbkFjdGlvbjIodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdWlBY3Rpb25SZXF1ZXN0KS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5KFxyXG4gICAgdWlBY3Rpb246IFVpQWN0aW9uLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcclxuICApOiBQcm9taXNlPFVpQWN0aW9uU3BlY2lmaWNEZW1hbmRSZXNwb25zZT4ge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uXHJcbn1cclxuIl19
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsdUJBQXVCLEVBSXZCLHlCQUF5QixFQUd6QixlQUFlLEdBR2hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBVXhDLE1BQU0sT0FBTyx1QkFDWCxTQUFRLGdCQUFpQztJQWlCekMsWUFDRSxNQUFnQixFQUNjLFFBQWdCLEVBQzVCLE1BQWMsRUFDQSxZQUFxQjtRQUVyRCxLQUFLLEVBQUUsQ0FBQztRQUpzQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBRWQsaUJBQVksR0FBWixZQUFZLENBQVM7UUFsQnZELHlCQUF5QjtRQUN6QixXQUFNLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDdEMsd0JBQW1CLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFbkQsd0JBQW1CLEdBQW9DLElBQUksR0FBRyxFQUFFLENBQUM7UUFpQi9ELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXJCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIs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QyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FDdkUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUMzRixDQUFDO0lBQ0osQ0FBQztJQUVELG1DQUFtQyxDQUNqQyxRQUFrQixFQUNsQixlQUFnQztRQUVoQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzsrR0EvVVUsdUJBQXVCLDBDQW9CeEIsVUFBVSxhQUNWLFFBQVEsYUFDUixjQUFjO21IQXRCYix1QkFBdUIsY0FGdEIsTUFBTTs7NEZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBcUJJLE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU21hcnRWaWV3Q29udGV4dFNlcnZpY2UsXG4gIFVpQWN0aW9uLFxuICBVaUFjdGlvbkFkZGl0aW9uYWxQYXJhbXMsXG4gIFVpQWN0aW9uRGVzY3JpcHRvcixcbiAgVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSxcbiAgVWlBY3Rpb25Nb2RlbCxcbiAgVWlBY3Rpb25SZXF1ZXN0LFxuICBVaUFjdGlvblNlcnZpY2UsXG4gIFVpQWN0aW9uU3BlY2lmaWNEZW1hbmRSZXNwb25zZSxcbiAgVXNlVWlBY3Rpb24sXG59IGZyb20gJy4uL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS1hcGkvYXBpL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBTbWFydFRyZWVOb2RlLCBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZSB9IGZyb20gJy4vc21hcnR0cmVlLm1vZGVsJztcbmltcG9ydCB7IFNtYXJ0dHJlZVNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0dHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJ2Zhc3QtZXF1YWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBTbWFydHRyZWVDb25maWd1cmF0aW9uIHtcbiAgdHJlZWlkOiBzdHJpbmc7XG4gIHBhZ2VOYW1lOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTbWFydHRyZWVHZW5lcmljU2VydmljZVxuICBleHRlbmRzIFNtYXJ0dHJlZVNlcnZpY2U8U21hcnRUcmVlTm9kZVtdPlxuICBpbXBsZW1lbnRzIFVzZVVpQWN0aW9uXG57XG4gIC8vIFVzZVVpQWN0aW9uIHByb3BlcnRpZXNcbiAgc3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgcmVTdWJzY3JpYmVUb0NoYW5nZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgdWlBY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiA9IG5ldyBNYXAoKTtcblxuICBzZWxlY3RlZE5vZGU/OiBTbWFydFRyZWVOb2RlO1xuXG4gIHByb3RlY3RlZCB2aWV3Q29udGV4dCE6IFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlO1xuICBwcml2YXRlIHNlcnZpY2UhOiBUcmVlU2VydmljZTtcblxuICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UhOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xuICBwcml2YXRlIHVpQWN0aW9uU2VydmljZSE6IFVpQWN0aW9uU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3Q6IEluamVjdG9yLFxuICAgIEBJbmplY3QoJ3BhZ2VOYW1lJykgcHJvdGVjdGVkIHBhZ2VOYW1lOiBzdHJpbmcsXG4gICAgQEluamVjdCgndHJlZUlkJykgdHJlZUlkOiBzdHJpbmcsXG4gICAgQEluamVjdCgndHJlZU1lbnVJY29uJykgcHJpdmF0ZSB0cmVlTWVudUljb24/OiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRyZWVJZCA9IHRyZWVJZDtcblxuICAgIGlmICghdGhpcy50cmVlTWVudUljb24pIHtcbiAgICAgIHRoaXMudHJlZU1lbnVJY29uID0gaW5qZWN0LmdldCgndHJlZU1lbnVJY29uJyk7XG4gICAgfVxuICAgIHRoaXMuY29uZmlndXJlVHJlZSh7XG4gICAgICBwYWdlTmFtZTogdGhpcy5wYWdlTmFtZSxcbiAgICAgIHRyZWVpZDogdGhpcy50cmVlSWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gaW5qZWN0LmdldChTbWFydFZpZXdDb250ZXh0U2VydmljZSk7XG4gICAgdGhpcy5zZXJ2aWNlID0gaW5qZWN0LmdldChUcmVlU2VydmljZSk7XG5cbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25TZXJ2aWNlKTtcbiAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UpO1xuXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RVaUFjdGlvbk1vZGVscyh1aUFjdGlvbnM6IFVpQWN0aW9uW10pOiB2b2lkIHtcbiAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gdWlBY3Rpb25zLm1hcCgodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMsXG4gICAgICAgIHVpQWN0aW9uLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbmZpZ3VyZVRyZWUoY29uZmlndXJhdGlvbjogU21hcnR0cmVlQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMudHJlZUlkID0gY29uZmlndXJhdGlvbi50cmVlaWQ7XG4gICAgdGhpcy5wYWdlTmFtZSA9IGNvbmZpZ3VyYXRpb24ucGFnZU5hbWU7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnZpZXdDb250ZXh0Lmhhc1ZpZXdDb250ZXh0VXVpZCgpKSB7XG4gICAgICBhd2FpdCB0aGlzLmRvd25sb2FkVHJlZSgpLnRoZW4oKHJvb3ROb2RlczogU21hcnRUcmVlTm9kZVtdKSA9PiB7XG4gICAgICAgIGlmICghZGVlcEVxdWFsKHRoaXMudHJlZUZyb21CYWNrZW5kLCByb290Tm9kZXMpKSB7XG4gICAgICAgICAgdGhpcy50cmVlRnJvbUJhY2tlbmQgPSByb290Tm9kZXM7XG4gICAgICAgICAgdGhpcy5zeW5jVHJlZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgb3ZlcnJpZGUgYXN5bmMgZG93bmxvYWRUcmVlKCk6IFByb21pc2U8U21hcnRUcmVlTm9kZVtdPiB7XG4gICAgbGV0IHV1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSEpO1xuICAgIGNvbnN0IHJvb3ROb2RlcyA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmdldFJvb3ROb2RlczIodXVpZCwgdGhpcy50cmVlSWQhKS50b1Byb21pc2UoKVxuICAgICk7XG4gICAgY29uc3QgdWlBY3Rpb25zID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0TWFpbkFjdGlvbnMyKHV1aWQsIHRoaXMudHJlZUlkISkudG9Qcm9taXNlKClcbiAgICApO1xuXG4gICAgaWYgKHVpQWN0aW9ucykge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RVaUFjdGlvbk1vZGVscyh1aUFjdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICghcm9vdE5vZGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3ROb2RlcyBhcmUgdW5kZWZpbmVkIScpO1xuICAgIH1cbiAgICByZXR1cm4gcm9vdE5vZGVzO1xuICB9XG4gIG92ZXJyaWRlIGFzeW5jIGRvd25sb2FkQ2hpbGRyZW4ocGFyZW50Tm9kZTogU21hcnRUcmVlTm9kZSk6IFByb21pc2U8U21hcnRUcmVlTm9kZVtdPiB7XG4gICAgbGV0IHV1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSEpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0Q2hpbGRyZW5Ob2RlczIodXVpZCwgdGhpcy50cmVlSWQhLCBwYXJlbnROb2RlLmlkZW50aWZpZXIhKS50b1Byb21pc2UoKVxuICAgICk7XG4gICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb2RlIHdpdGggaWRlbnRpZmllciAke3BhcmVudE5vZGUuaWRlbnRpZmllcn0gZG9lcyBub3QgaGF2ZSBjaGlsZHJlbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgb3ZlcnJpZGUgYXN5bmMgb25UcmVlTm9kZU9wZW4odHJlZU5vZGU6IFNtYXJ0VHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgdmlld1V1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSEpO1xuXG4gICAgaWYgKHRyZWVOb2RlPy5leHBhbmRlZCkge1xuICAgICAgbGV0IHRlbXBUcmVlTm9kZSA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuY29sbGFwc2VOb2RlMih2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCB0cmVlTm9kZS5pZGVudGlmaWVyISkudG9Qcm9taXNlKClcbiAgICAgICk7XG4gICAgICB0cmVlTm9kZSA9IHRlbXBUcmVlTm9kZSE7XG4gICAgfSBlbHNlIGlmICghdHJlZU5vZGU/LmV4cGFuZGVkKSB7XG4gICAgICBsZXQgdGVtcFRyZWVOb2RlID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXG4gICAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5leHBhbmROb2RlMih2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCB0cmVlTm9kZT8uaWRlbnRpZmllciEpLnRvUHJvbWlzZSgpXG4gICAgICApO1xuICAgICAgdHJlZU5vZGUgPSB0ZW1wVHJlZU5vZGUhO1xuICAgIH1cbiAgICBsZXQgbm9kZSA9IHRoaXMuZGVlcFNlYXJjaFRyZWVOb2RlKHRyZWVOb2RlPy5pZGVudGlmaWVyISwgdGhpcy50cmVlRnJvbUJhY2tlbmQhKTtcblxuICAgIG5vZGUhLmV4cGFuZGVkID0gdHJlZU5vZGU/LmV4cGFuZGVkO1xuICAgIG5vZGUhLmNoaWxkcmVuTm9kZXMgPSB0cmVlTm9kZT8uY2hpbGRyZW5Ob2RlcztcbiAgICB0aGlzLnN5bmNUcmVlKCk7XG4gIH1cbiAgb3ZlcnJpZGUgb25UcmVlTm9kZUNsaWNrKHRyZWVOb2RlOiBTbWFydFRyZWVOb2RlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RGb2xkZXIodHJlZU5vZGUuaWRlbnRpZmllciEsIHRyZWVOb2RlKTtcbiAgfVxuICBhc3luYyBzZWxlY3RGb2xkZXIoZm9sZGVyVXJpOiBzdHJpbmcsIHRyZWVOb2RlPzogU21hcnRUcmVlTm9kZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XG5cbiAgICBsZXQgdXBkYXRlZFRyZWVOb2RlID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2Uuc2VsZWN0Tm9kZTIodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdHJlZU5vZGUhLmlkZW50aWZpZXIhKS50b1Byb21pc2UoKVxuICAgICk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IHVwZGF0ZWRUcmVlTm9kZTtcbiAgICBsZXQgbm9kZSA9IHRoaXMuZGVlcFNlYXJjaFRyZWVOb2RlKHVwZGF0ZWRUcmVlTm9kZT8uaWRlbnRpZmllciEsIHRoaXMudHJlZUZyb21CYWNrZW5kISk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICB0aHJvdyBFcnJvcignVHJlZSBub2RlIGRvZXMgbm90IGV4aXN0Jyk7XG4gICAgfVxuICAgIG5vZGUuZXhwYW5kZWQgPSB1cGRhdGVkVHJlZU5vZGU/LmV4cGFuZGVkITtcbiAgICBub2RlLmNoaWxkcmVuTm9kZXMgPSB1cGRhdGVkVHJlZU5vZGU/LmNoaWxkcmVuTm9kZXMhO1xuICAgIG5vZGUuc2VsZWN0ZWQgPSB1cGRhdGVkVHJlZU5vZGU/LnNlbGVjdGVkITtcbiAgICB0cmVlTm9kZSA9IHVwZGF0ZWRUcmVlTm9kZTtcbiAgICB0aGlzLnN5bmNUcmVlKCk7XG4gICAgLy90aGlzLnZpZXdDb250ZXh0LmdldEFuZFN5bmNWaWV3Q29udGV4dCh0aGlzLnZpZXdDb250ZXh0LmdldFZpZXdDb250ZXh0VXVpZCgpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVRyZWVPblRoZUZseSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHN5bmNUcmVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnRyZWVGcm9tQmFja2VuZCA9PT0gbnVsbCB8fCB0aGlzLnRyZWVGcm9tQmFja2VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvL3Rocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gdHJlZUZyb21CYWNrZW5kIGF2YWlsYWJsZSEnKTtcbiAgICAgIGNvbnNvbGUud2FybignVGhlcmUgaXMgbm8gdHJlZUZyb21CYWNrZW5kIGF2YWlsYWJsZSBpbiBzeW5jVHJlZSEnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5jYWNoZUFjdGlvbkRlc2NpcHRvcnModGhpcy5nZXRBbGxOb2Rlcyh0aGlzLnRyZWVGcm9tQmFja2VuZCEpKTtcblxuICAgIGlmICghdGhpcy5zbWFydFRyZWVNb2RlbCkge1xuICAgICAgdGhpcy5zbWFydFRyZWVNb2RlbCA9IHtcbiAgICAgICAgcm9vdE5vZGVzOiBbXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHNtYXJ0VHJlZU5vZGVzOiBTbWFydFRyZWVOb2RlW10gPSB0aGlzLmNyZWF0ZUJ1dHRvbnNGb3JUcmVlTm9kZXModGhpcy50cmVlRnJvbUJhY2tlbmQpO1xuICAgIHRoaXMuc21hcnRUcmVlTW9kZWwgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsID0ge1xuICAgICAgaWRlbnRpZmllcjogdGhpcy50cmVlSWQsXG4gICAgICByb290Tm9kZXM6IFtdLFxuICAgIH07XG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbENoYW5nZWQubmV4dCh0aGlzLnNtYXJ0VHJlZU1vZGVsKTtcblxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWwucm9vdE5vZGVzID0gc21hcnRUcmVlTm9kZXM7XG5cbiAgICB0aGlzLmZpbmRTZWxlY3RlZCh0aGlzLnNtYXJ0VHJlZU1vZGVsLnJvb3ROb2Rlcyk7XG5cbiAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsQ2hhbmdlZC5uZXh0KHRoaXMuc21hcnRUcmVlTW9kZWwpO1xuICB9XG5cbiAgZGVlcFNlYXJjaFRyZWVOb2RlKGlkZW50aWZpZXI6IHN0cmluZywgbm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSk6IFNtYXJ0VHJlZU5vZGUgfCB1bmRlZmluZWQge1xuICAgIGxldCB0cmVlTm9kZTogU21hcnRUcmVlTm9kZSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm9kZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbaW5kZXhdO1xuXG4gICAgICBpZiAobm9kZS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICAgIHRyZWVOb2RlID0gbm9kZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbk5vZGVzICYmIG5vZGUuY2hpbGRyZW5Ob2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgdHJlZU5vZGUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZShpZGVudGlmaWVyLCBub2RlLmNoaWxkcmVuTm9kZXMpO1xuICAgICAgICBpZiAodHJlZU5vZGUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJlZU5vZGU7XG4gIH1cblxuICBmaW5kU2VsZWN0ZWQobm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSk6IHZvaWQge1xuICAgIHJldHVybiBub2Rlcy5mb3JFYWNoKChub2RlOiBTbWFydFRyZWVOb2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZHJlbk5vZGVzICYmIG5vZGUuY2hpbGRyZW5Ob2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFNlbGVjdGVkKG5vZGUuY2hpbGRyZW5Ob2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVCdXR0b25zRm9yVHJlZU5vZGVzKG5vZGVzOiBTbWFydFRyZWVOb2RlW10pOiBTbWFydFRyZWVOb2RlW10ge1xuICAgIGxldCBpY29uID0gdGhpcy50cmVlTWVudUljb24gPz8gJ21vcmVfdmVydCc7XG5cbiAgICBub2Rlcy5tYXAoKG5vZGU6IFNtYXJ0VHJlZU5vZGUpID0+IHtcbiAgICAgIG5vZGUuYnV0dG9uID0gbm9kZS5hY3Rpb25zPy5sZW5ndGhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0eXBlOiBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZS5NRU5VLFxuICAgICAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgICAgIG1lbnVJdGVtQnV0dG9uczogbm9kZS5hY3Rpb25zLm1hcCgoYWN0aW9uOiBVaUFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlLk5PUk1BTCxcbiAgICAgICAgICAgICAgICBjb2RlOiBhY3Rpb24uY29kZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbEJ5QWN0aW9uKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZG9BY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBhcmdzOiBbYWN0aW9uLCBub2RlLmlkZW50aWZpZXJdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIG5vZGUuaWNvbiA9ICdGb2xkZXJzJztcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuTm9kZXMpIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbk5vZGVzID0gdGhpcy5jcmVhdGVCdXR0b25zRm9yVHJlZU5vZGVzKG5vZGUuY2hpbGRyZW5Ob2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgYXN5bmMgZG9BY3Rpb24oYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgdWlBY3Rpb246IFVpQWN0aW9uID0gYXJnc1swXTtcbiAgICBsZXQgbm9kZVV1aWQ6IHN0cmluZyA9IGFyZ3NbMV07XG5cbiAgICBpZiAodWlBY3Rpb24ucGFyYW1zKSB7XG4gICAgICB1aUFjdGlvbi5wYXJhbXNbJ25vZGVVdWlkJ10gPSBub2RlVXVpZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdWlBY3Rpb24ucGFyYW1zID0ge1xuICAgICAgICBub2RlVXVpZDogbm9kZVV1aWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCB1aUFjdGlvbk1vZGVsOiBVaUFjdGlvbk1vZGVsID0ge1xuICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxuICAgICAgdWlBY3Rpb24sXG4gICAgfTtcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZS5leGVjdXRlKHVpQWN0aW9uLCB1aUFjdGlvbk1vZGVsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBbGxOb2Rlcyhub2RlczogU21hcnRUcmVlTm9kZVtdKTogU21hcnRUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbm9kZXMuZmxhdE1hcCgobikgPT4gW24sIC4uLnRoaXMuZ2V0QWxsTm9kZXMobi5jaGlsZHJlbk5vZGVzKV0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhY2hlQWN0aW9uRGVzY2lwdG9ycyhub2RlczogU21hcnRUcmVlTm9kZVtdKSB7XG4gICAgbGV0IG5ld1VpQWN0aW9ucyA9IG5ldyBTZXQ8VWlBY3Rpb24+KCk7XG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgbm9kZS5hY3Rpb25zXG4gICAgICAgID8uZmlsdGVyKCh1aUFjdGlvbjogVWlBY3Rpb24pID0+ICF0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKSlcbiAgICAgICAgLmZvckVhY2goKGFjdGlvbikgPT4gbmV3VWlBY3Rpb25zLmFkZChhY3Rpb24pKTtcbiAgICB9KTtcbiAgICBmb3IgKGxldCBhY3Rpb24gb2YgbmV3VWlBY3Rpb25zKSB7XG4gICAgICBpZiAoIXRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQoYWN0aW9uLmNvZGUhKSkge1xuICAgICAgICBsZXQgZGVzY3JpcHRvciA9IGF3YWl0IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5nZXRBY3Rpb25EZXNjcmlwdG9yKGFjdGlvbik7XG4gICAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5zZXQoYWN0aW9uLmNvZGUhLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0TGFiZWxCeUFjdGlvbihhY3Rpb246IFVpQWN0aW9uKTogc3RyaW5nIHtcbiAgICBsZXQgZGVzYyA9IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQoYWN0aW9uLmNvZGUhKTtcbiAgICByZXR1cm4gZGVzYyEudGl0bGU7XG4gIH1cblxuICAvLyAjcmVnaW9uIFVzZVVpQWN0aW9uXG4gIGdldEFkZGl0aW9uYWxQYXJhbXModWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zIHtcbiAgICBpZiAodWlBY3Rpb24ucGFyYW1zICYmIHVpQWN0aW9uLnBhcmFtc1snbm9kZVV1aWQnXSkge1xuICAgICAgbGV0IG5vZGVVdWlkID0gdWlBY3Rpb24ucGFyYW1zIVsnbm9kZVV1aWQnXTtcblxuICAgICAgbGV0IG5vZGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodWlBY3Rpb24uY29kZSA9PT0gJ1JFTkFNRScpIHtcbiAgICAgICAgbm9kZU5hbWUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZShub2RlVXVpZCwgdGhpcy50cmVlRnJvbUJhY2tlbmQhKT8uY2FwdGlvbjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9yVGV4dEFyZWE6ICcnLFxuICAgICAgICBmb3JUZXh0RmllbGQ6IG5vZGVOYW1lID8gbm9kZU5hbWUgOiAnJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZvclRleHRBcmVhOiAnJyxcbiAgICAgIGZvclRleHRGaWVsZDogJycsXG4gICAgfTtcbiAgfVxuICBnZXRNb2RlbCgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBwZXJmb3JtVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAodWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snbm9kZVV1aWQnXSkge1xuICAgICAgYXdhaXQgdGhpcy5wZXJmb3JtTm9kZVVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnBlcmZvcm1NYWluVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdCk7XG4gICAgfVxuXG4gICAgLy9hd2FpdCB0aGlzLnZpZXdDb250ZXh0LmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xuXG4gICAgdGhpcy5zeW5jVHJlZSgpO1xuICB9XG5cbiAgYXN5bmMgcGVyZm9ybU5vZGVVaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCBub2RlSWQgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydub2RlVXVpZCddO1xuICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydub2RlVXVpZCddO1xuXG4gICAgbGV0IHZpZXdVdWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUpO1xuXG4gICAgdGhpcy50cmVlRnJvbUJhY2tlbmQgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5wZXJmb3JtQWN0aW9uMih2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdCkudG9Qcm9taXNlKClcbiAgICApO1xuICB9XG4gIGFzeW5jIHBlcmZvcm1NYWluVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxhbnk+IHtcbiAgICBsZXQgdmlld1V1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSk7XG5cbiAgICB0aGlzLnRyZWVGcm9tQmFja2VuZCA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxuICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnBlcmZvcm1NYWluQWN0aW9uMih2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCB1aUFjdGlvblJlcXVlc3QpLnRvUHJvbWlzZSgpXG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5KFxuICAgIHVpQWN0aW9uOiBVaUFjdGlvbixcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxuICApOiBQcm9taXNlPFVpQWN0aW9uU3BlY2lmaWNEZW1hbmRSZXNwb25zZT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG59XG4iXX0=