igniteui-angular 16.0.0-beta.2 → 16.0.0-beta.3

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 (348) hide show
  1. package/esm2022/lib/accordion/accordion.component.mjs +4 -4
  2. package/esm2022/lib/accordion/accordion.module.mjs +5 -5
  3. package/esm2022/lib/action-strip/action-strip.component.mjs +7 -7
  4. package/esm2022/lib/action-strip/action-strip.module.mjs +5 -5
  5. package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +4 -4
  6. package/esm2022/lib/action-strip/grid-actions/grid-actions-base.directive.mjs +4 -4
  7. package/esm2022/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +4 -4
  8. package/esm2022/lib/action-strip/grid-actions/grid-pinning-actions.component.mjs +4 -4
  9. package/esm2022/lib/avatar/avatar.component.mjs +4 -4
  10. package/esm2022/lib/avatar/avatar.module.mjs +5 -5
  11. package/esm2022/lib/badge/badge.component.mjs +4 -4
  12. package/esm2022/lib/badge/badge.module.mjs +5 -5
  13. package/esm2022/lib/banner/banner.component.mjs +4 -4
  14. package/esm2022/lib/banner/banner.directives.mjs +4 -4
  15. package/esm2022/lib/banner/banner.module.mjs +5 -5
  16. package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +4 -4
  17. package/esm2022/lib/buttonGroup/buttongroup.module.mjs +5 -5
  18. package/esm2022/lib/calendar/calendar-base.mjs +4 -4
  19. package/esm2022/lib/calendar/calendar.component.mjs +4 -4
  20. package/esm2022/lib/calendar/calendar.directives.mjs +16 -16
  21. package/esm2022/lib/calendar/calendar.module.mjs +5 -5
  22. package/esm2022/lib/calendar/days-view/day-item.component.mjs +4 -4
  23. package/esm2022/lib/calendar/days-view/days-view.component.mjs +4 -4
  24. package/esm2022/lib/calendar/days-view/daysview-navigation.service.mjs +4 -4
  25. package/esm2022/lib/calendar/month-picker/month-picker-base.mjs +4 -4
  26. package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +4 -4
  27. package/esm2022/lib/calendar/months-view/months-view.component.mjs +4 -4
  28. package/esm2022/lib/calendar/months-view.pipe.mjs +7 -7
  29. package/esm2022/lib/calendar/years-view/years-view.component.mjs +7 -7
  30. package/esm2022/lib/card/card.component.mjs +28 -28
  31. package/esm2022/lib/card/card.module.mjs +5 -5
  32. package/esm2022/lib/carousel/carousel.component.mjs +7 -7
  33. package/esm2022/lib/carousel/carousel.directives.mjs +10 -10
  34. package/esm2022/lib/carousel/carousel.module.mjs +5 -5
  35. package/esm2022/lib/carousel/slide.component.mjs +4 -4
  36. package/esm2022/lib/checkbox/checkbox.component.mjs +4 -4
  37. package/esm2022/lib/checkbox/checkbox.module.mjs +5 -5
  38. package/esm2022/lib/chips/chip.component.mjs +4 -4
  39. package/esm2022/lib/chips/chips-area.component.mjs +4 -4
  40. package/esm2022/lib/chips/chips.module.mjs +5 -5
  41. package/esm2022/lib/combo/combo-add-item.component.mjs +4 -4
  42. package/esm2022/lib/combo/combo-dropdown.component.mjs +4 -4
  43. package/esm2022/lib/combo/combo-item.component.mjs +4 -4
  44. package/esm2022/lib/combo/combo.api.mjs +4 -4
  45. package/esm2022/lib/combo/combo.common.mjs +4 -4
  46. package/esm2022/lib/combo/combo.component.mjs +4 -4
  47. package/esm2022/lib/combo/combo.directives.mjs +25 -25
  48. package/esm2022/lib/combo/combo.module.mjs +5 -5
  49. package/esm2022/lib/combo/combo.pipes.mjs +7 -7
  50. package/esm2022/lib/core/density.mjs +4 -4
  51. package/esm2022/lib/core/navigation/directives.mjs +7 -7
  52. package/esm2022/lib/core/navigation/nav.service.mjs +4 -4
  53. package/esm2022/lib/core/selection.mjs +4 -4
  54. package/esm2022/lib/core/touch.mjs +4 -4
  55. package/esm2022/lib/core/utils.mjs +4 -4
  56. package/esm2022/lib/date-common/calendar-container/calendar-container.component.mjs +4 -4
  57. package/esm2022/lib/date-common/picker-base.directive.mjs +4 -4
  58. package/esm2022/lib/date-common/picker-icons.common.mjs +10 -10
  59. package/esm2022/lib/date-picker/date-picker.component.mjs +4 -4
  60. package/esm2022/lib/date-picker/date-picker.module.mjs +5 -5
  61. package/esm2022/lib/date-range-picker/date-range-picker-inputs.common.mjs +16 -16
  62. package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +4 -4
  63. package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +5 -5
  64. package/esm2022/lib/dialog/dialog.component.mjs +4 -4
  65. package/esm2022/lib/dialog/dialog.directives.mjs +7 -7
  66. package/esm2022/lib/dialog/dialog.module.mjs +5 -5
  67. package/esm2022/lib/directives/autocomplete/autocomplete.directive.mjs +4 -4
  68. package/esm2022/lib/directives/autocomplete/autocomplete.module.mjs +5 -5
  69. package/esm2022/lib/directives/button/button.directive.mjs +4 -4
  70. package/esm2022/lib/directives/button/button.module.mjs +5 -5
  71. package/esm2022/lib/directives/date-time-editor/date-time-editor.directive.mjs +4 -4
  72. package/esm2022/lib/directives/date-time-editor/date-time-editor.module.mjs +5 -5
  73. package/esm2022/lib/directives/divider/divider.directive.mjs +4 -4
  74. package/esm2022/lib/directives/divider/divider.module.mjs +5 -5
  75. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +13 -13
  76. package/esm2022/lib/directives/drag-drop/drag-drop.module.mjs +5 -5
  77. package/esm2022/lib/directives/filter/filter.directive.mjs +7 -7
  78. package/esm2022/lib/directives/filter/filter.module.mjs +5 -5
  79. package/esm2022/lib/directives/focus/focus.directive.mjs +4 -4
  80. package/esm2022/lib/directives/focus/focus.module.mjs +5 -5
  81. package/esm2022/lib/directives/focus-trap/focus-trap.directive.mjs +4 -4
  82. package/esm2022/lib/directives/focus-trap/focus-trap.module.mjs +5 -5
  83. package/esm2022/lib/directives/for-of/base.helper.component.mjs +4 -4
  84. package/esm2022/lib/directives/for-of/display.container.mjs +4 -4
  85. package/esm2022/lib/directives/for-of/for_of.directive.mjs +7 -7
  86. package/esm2022/lib/directives/for-of/for_of.module.mjs +5 -5
  87. package/esm2022/lib/directives/for-of/for_of.sync.service.mjs +7 -7
  88. package/esm2022/lib/directives/for-of/horizontal.virtual.helper.component.mjs +4 -4
  89. package/esm2022/lib/directives/for-of/virtual.helper.component.mjs +4 -4
  90. package/esm2022/lib/directives/form-control/form-control.directive.mjs +4 -4
  91. package/esm2022/lib/directives/form-control/form-control.module.mjs +5 -5
  92. package/esm2022/lib/directives/hint/hint.directive.mjs +4 -4
  93. package/esm2022/lib/directives/input/input.directive.mjs +4 -4
  94. package/esm2022/lib/directives/label/label.directive.mjs +4 -4
  95. package/esm2022/lib/directives/layout/layout.directive.mjs +7 -7
  96. package/esm2022/lib/directives/layout/layout.module.mjs +5 -5
  97. package/esm2022/lib/directives/mask/mask-parsing.service.mjs +4 -4
  98. package/esm2022/lib/directives/mask/mask.directive.mjs +4 -4
  99. package/esm2022/lib/directives/mask/mask.module.mjs +5 -5
  100. package/esm2022/lib/directives/notification/notifications.directive.mjs +4 -4
  101. package/esm2022/lib/directives/prefix/prefix.directive.mjs +4 -4
  102. package/esm2022/lib/directives/radio/radio-group.directive.mjs +4 -4
  103. package/esm2022/lib/directives/radio/radio-group.module.mjs +5 -5
  104. package/esm2022/lib/directives/ripple/ripple.directive.mjs +4 -4
  105. package/esm2022/lib/directives/ripple/ripple.module.mjs +5 -5
  106. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +4 -4
  107. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.module.mjs +5 -5
  108. package/esm2022/lib/directives/suffix/suffix.directive.mjs +4 -4
  109. package/esm2022/lib/directives/template-outlet/template_outlet.directive.mjs +4 -4
  110. package/esm2022/lib/directives/text-highlight/text-highlight.directive.mjs +4 -4
  111. package/esm2022/lib/directives/text-highlight/text-highlight.module.mjs +5 -5
  112. package/esm2022/lib/directives/text-selection/text-selection.directive.mjs +4 -4
  113. package/esm2022/lib/directives/text-selection/text-selection.module.mjs +5 -5
  114. package/esm2022/lib/directives/toggle/toggle.directive.mjs +10 -10
  115. package/esm2022/lib/directives/toggle/toggle.module.mjs +5 -5
  116. package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +4 -4
  117. package/esm2022/lib/directives/tooltip/tooltip.component.mjs +4 -4
  118. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +4 -4
  119. package/esm2022/lib/directives/tooltip/tooltip.module.mjs +5 -5
  120. package/esm2022/lib/drop-down/drop-down-group.component.mjs +4 -4
  121. package/esm2022/lib/drop-down/drop-down-item.base.mjs +4 -4
  122. package/esm2022/lib/drop-down/drop-down-item.component.mjs +4 -4
  123. package/esm2022/lib/drop-down/drop-down-navigation.directive.mjs +4 -4
  124. package/esm2022/lib/drop-down/drop-down.base.mjs +4 -4
  125. package/esm2022/lib/drop-down/drop-down.component.mjs +4 -4
  126. package/esm2022/lib/drop-down/drop-down.module.mjs +5 -5
  127. package/esm2022/lib/expansion-panel/expansion-panel-body.component.mjs +4 -4
  128. package/esm2022/lib/expansion-panel/expansion-panel-header.component.mjs +4 -4
  129. package/esm2022/lib/expansion-panel/expansion-panel.common.mjs +4 -4
  130. package/esm2022/lib/expansion-panel/expansion-panel.component.mjs +4 -4
  131. package/esm2022/lib/expansion-panel/expansion-panel.directives.mjs +10 -10
  132. package/esm2022/lib/expansion-panel/expansion-panel.module.mjs +5 -5
  133. package/esm2022/lib/expansion-panel/toggle-animation-component.mjs +4 -4
  134. package/esm2022/lib/grids/api.service.mjs +4 -4
  135. package/esm2022/lib/grids/cell.component.mjs +4 -4
  136. package/esm2022/lib/grids/column-actions/column-actions-base.directive.mjs +4 -4
  137. package/esm2022/lib/grids/column-actions/column-actions.component.mjs +13 -13
  138. package/esm2022/lib/grids/column-actions/column-hiding.directive.mjs +4 -4
  139. package/esm2022/lib/grids/column-actions/column-pinning.directive.mjs +4 -4
  140. package/esm2022/lib/grids/column-actions/public_api.mjs +13 -0
  141. package/esm2022/lib/grids/columns/column-group.component.mjs +4 -4
  142. package/esm2022/lib/grids/columns/column-layout.component.mjs +4 -4
  143. package/esm2022/lib/grids/columns/column.component.mjs +4 -4
  144. package/esm2022/lib/grids/columns/templates.directive.mjs +25 -25
  145. package/esm2022/lib/grids/columns/validators.directive.mjs +22 -22
  146. package/esm2022/lib/grids/common/crud.service.mjs +4 -4
  147. package/esm2022/lib/grids/common/pipes.mjs +55 -55
  148. package/esm2022/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +4 -4
  149. package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +4 -4
  150. package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +4 -4
  151. package/esm2022/lib/grids/filtering/excel-style/base-filtering.component.mjs +4 -4
  152. package/esm2022/lib/grids/filtering/excel-style/excel-style-clear-filters.component.mjs +4 -4
  153. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +4 -4
  154. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +4 -4
  155. package/esm2022/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +4 -4
  156. package/esm2022/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +4 -4
  157. package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +10 -10
  158. package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +4 -4
  159. package/esm2022/lib/grids/filtering/excel-style/excel-style-hiding.component.mjs +4 -4
  160. package/esm2022/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +4 -4
  161. package/esm2022/lib/grids/filtering/excel-style/excel-style-pinning.component.mjs +4 -4
  162. package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +7 -7
  163. package/esm2022/lib/grids/filtering/excel-style/excel-style-selecting.component.mjs +4 -4
  164. package/esm2022/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +4 -4
  165. package/esm2022/lib/grids/filtering/grid-filtering.service.mjs +4 -4
  166. package/esm2022/lib/grids/grid/expandable-cell.component.mjs +4 -4
  167. package/esm2022/lib/grids/grid/grid-api.service.mjs +4 -4
  168. package/esm2022/lib/grids/grid/grid-row.component.mjs +4 -4
  169. package/esm2022/lib/grids/grid/grid-validation.service.mjs +4 -4
  170. package/esm2022/lib/grids/grid/grid.component.mjs +4 -4
  171. package/esm2022/lib/grids/grid/grid.details.pipe.mjs +4 -4
  172. package/esm2022/lib/grids/grid/grid.directives.mjs +34 -34
  173. package/esm2022/lib/grids/grid/grid.module.mjs +27 -24
  174. package/esm2022/lib/grids/grid/grid.pipes.mjs +13 -13
  175. package/esm2022/lib/grids/grid/grid.summary.pipe.mjs +4 -4
  176. package/esm2022/lib/grids/grid/groupby-row.component.mjs +4 -4
  177. package/esm2022/lib/grids/grid-base.directive.mjs +4 -4
  178. package/esm2022/lib/grids/grid-footer/grid-footer.component.mjs +4 -4
  179. package/esm2022/lib/grids/grid-mrl-navigation.service.mjs +4 -4
  180. package/esm2022/lib/grids/grid-navigation.service.mjs +4 -4
  181. package/esm2022/lib/grids/grid.common.mjs +4 -4
  182. package/esm2022/lib/grids/grid.rowEdit.directive.mjs +16 -16
  183. package/esm2022/lib/grids/grouping/grid-group-by-area.component.mjs +4 -4
  184. package/esm2022/lib/grids/grouping/group-by-area.directive.mjs +7 -7
  185. package/esm2022/lib/grids/grouping/tree-grid-group-by-area.component.mjs +4 -4
  186. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +4 -4
  187. package/esm2022/lib/grids/headers/grid-header-row.component.mjs +4 -4
  188. package/esm2022/lib/grids/headers/grid-header.component.mjs +4 -4
  189. package/esm2022/lib/grids/headers/pipes.mjs +10 -10
  190. package/esm2022/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +4 -4
  191. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +4 -4
  192. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +4 -4
  193. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +4 -4
  194. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +7 -7
  195. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +27 -24
  196. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.pipes.mjs +7 -7
  197. package/esm2022/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +4 -4
  198. package/esm2022/lib/grids/hierarchical-grid/row-island-api.service.mjs +4 -4
  199. package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +4 -4
  200. package/esm2022/lib/grids/moving/moving.drag.directive.mjs +4 -4
  201. package/esm2022/lib/grids/moving/moving.drop.directive.mjs +4 -4
  202. package/esm2022/lib/grids/moving/moving.service.mjs +4 -4
  203. package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +4 -4
  204. package/esm2022/lib/grids/pivot-grid/pivot-filtering.service.mjs +4 -4
  205. package/esm2022/lib/grids/pivot-grid/pivot-grid-navigation.service.mjs +4 -4
  206. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +4 -4
  207. package/esm2022/lib/grids/pivot-grid/pivot-grid.directives.mjs +4 -4
  208. package/esm2022/lib/grids/pivot-grid/pivot-grid.module.mjs +27 -24
  209. package/esm2022/lib/grids/pivot-grid/pivot-grid.pipes.mjs +31 -31
  210. package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +4 -4
  211. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +4 -4
  212. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +4 -4
  213. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header.component.mjs +4 -4
  214. package/esm2022/lib/grids/pivot-grid/pivot-row.component.mjs +4 -4
  215. package/esm2022/lib/grids/public_api.mjs +5 -2
  216. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +4 -4
  217. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizer.component.mjs +4 -4
  218. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizing.service.mjs +4 -4
  219. package/esm2022/lib/grids/resizing/resize-handle.directive.mjs +4 -4
  220. package/esm2022/lib/grids/resizing/resizer.component.mjs +4 -4
  221. package/esm2022/lib/grids/resizing/resizer.directive.mjs +4 -4
  222. package/esm2022/lib/grids/resizing/resizing.service.mjs +4 -4
  223. package/esm2022/lib/grids/row-drag.directive.mjs +10 -10
  224. package/esm2022/lib/grids/row.directive.mjs +4 -4
  225. package/esm2022/lib/grids/selection/drag-select.directive.mjs +4 -4
  226. package/esm2022/lib/grids/selection/row-selectors.mjs +10 -10
  227. package/esm2022/lib/grids/selection/selection.service.mjs +4 -4
  228. package/esm2022/lib/grids/state.directive.mjs +4 -4
  229. package/esm2022/lib/grids/summaries/grid-root-summary.pipe.mjs +4 -4
  230. package/esm2022/lib/grids/summaries/grid-summary.service.mjs +4 -4
  231. package/esm2022/lib/grids/summaries/summary-cell.component.mjs +4 -4
  232. package/esm2022/lib/grids/summaries/summary-row.component.mjs +4 -4
  233. package/esm2022/lib/grids/toolbar/common.mjs +16 -16
  234. package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +4 -4
  235. package/esm2022/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +4 -4
  236. package/esm2022/lib/grids/toolbar/grid-toolbar-hiding.component.mjs +4 -4
  237. package/esm2022/lib/grids/toolbar/grid-toolbar-pinning.component.mjs +4 -4
  238. package/esm2022/lib/grids/toolbar/grid-toolbar.base.mjs +7 -7
  239. package/esm2022/lib/grids/toolbar/grid-toolbar.component.mjs +4 -4
  240. package/esm2022/lib/grids/tree-grid/public_api.mjs +4 -1
  241. package/esm2022/lib/grids/tree-grid/tree-cell.component.mjs +4 -4
  242. package/esm2022/lib/grids/tree-grid/tree-grid-api.service.mjs +4 -4
  243. package/esm2022/lib/grids/tree-grid/tree-grid-row.component.mjs +4 -4
  244. package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +4 -4
  245. package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +4 -4
  246. package/esm2022/lib/grids/tree-grid/tree-grid.directives.mjs +4 -4
  247. package/esm2022/lib/grids/tree-grid/tree-grid.filtering.pipe.mjs +4 -4
  248. package/esm2022/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +4 -4
  249. package/esm2022/lib/grids/tree-grid/tree-grid.module.mjs +43 -39
  250. package/esm2022/lib/grids/tree-grid/tree-grid.pipes.mjs +22 -22
  251. package/esm2022/lib/grids/tree-grid/tree-grid.summary.pipe.mjs +4 -4
  252. package/esm2022/lib/icon/icon.component.mjs +4 -4
  253. package/esm2022/lib/icon/icon.module.mjs +5 -5
  254. package/esm2022/lib/icon/icon.service.mjs +4 -4
  255. package/esm2022/lib/input-group/input-group.component.mjs +4 -4
  256. package/esm2022/lib/input-group/input-group.module.mjs +5 -5
  257. package/esm2022/lib/list/list-item.component.mjs +4 -4
  258. package/esm2022/lib/list/list.common.mjs +16 -16
  259. package/esm2022/lib/list/list.component.mjs +19 -19
  260. package/esm2022/lib/list/list.module.mjs +5 -5
  261. package/esm2022/lib/navbar/navbar.component.mjs +10 -10
  262. package/esm2022/lib/navbar/navbar.module.mjs +5 -5
  263. package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +4 -4
  264. package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +10 -10
  265. package/esm2022/lib/navigation-drawer/navigation-drawer.module.mjs +5 -5
  266. package/esm2022/lib/paginator/paginator-interfaces.mjs +4 -4
  267. package/esm2022/lib/paginator/paginator.component.mjs +13 -13
  268. package/esm2022/lib/paginator/paginator.module.mjs +5 -5
  269. package/esm2022/lib/progressbar/progressbar.common.mjs +7 -7
  270. package/esm2022/lib/progressbar/progressbar.component.mjs +10 -10
  271. package/esm2022/lib/progressbar/progressbar.module.mjs +5 -5
  272. package/esm2022/lib/query-builder/query-builder-header.component.mjs +4 -4
  273. package/esm2022/lib/query-builder/query-builder.component.mjs +7 -7
  274. package/esm2022/lib/query-builder/query-builder.module.mjs +5 -5
  275. package/esm2022/lib/radio/radio.component.mjs +4 -4
  276. package/esm2022/lib/select/select-group.component.mjs +4 -4
  277. package/esm2022/lib/select/select-item.component.mjs +4 -4
  278. package/esm2022/lib/select/select-navigation.directive.mjs +4 -4
  279. package/esm2022/lib/select/select.component.mjs +13 -13
  280. package/esm2022/lib/select/select.module.mjs +5 -5
  281. package/esm2022/lib/services/animation/angular-animation-service.mjs +4 -4
  282. package/esm2022/lib/services/csv/csv-exporter.mjs +4 -4
  283. package/esm2022/lib/services/direction/directionality.mjs +4 -4
  284. package/esm2022/lib/services/excel/excel-exporter.mjs +4 -4
  285. package/esm2022/lib/services/overlay/overlay.mjs +4 -4
  286. package/esm2022/lib/services/transaction/transaction-factory.service.mjs +7 -7
  287. package/esm2022/lib/simple-combo/simple-combo.component.mjs +4 -4
  288. package/esm2022/lib/simple-combo/simple-combo.module.mjs +5 -5
  289. package/esm2022/lib/slider/label/thumb-label.component.mjs +4 -4
  290. package/esm2022/lib/slider/slider.common.mjs +10 -10
  291. package/esm2022/lib/slider/slider.component.mjs +4 -4
  292. package/esm2022/lib/slider/slider.module.mjs +5 -5
  293. package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +4 -4
  294. package/esm2022/lib/slider/ticks/tick.pipe.mjs +4 -4
  295. package/esm2022/lib/slider/ticks/ticks.component.mjs +4 -4
  296. package/esm2022/lib/snackbar/snackbar.component.mjs +4 -4
  297. package/esm2022/lib/snackbar/snackbar.module.mjs +5 -5
  298. package/esm2022/lib/splitter/splitter-pane/splitter-pane.component.mjs +4 -4
  299. package/esm2022/lib/splitter/splitter.component.mjs +7 -7
  300. package/esm2022/lib/splitter/splitter.module.mjs +5 -5
  301. package/esm2022/lib/stepper/step/step.component.mjs +4 -4
  302. package/esm2022/lib/stepper/stepper.component.mjs +4 -4
  303. package/esm2022/lib/stepper/stepper.directive.mjs +22 -22
  304. package/esm2022/lib/stepper/stepper.module.mjs +5 -5
  305. package/esm2022/lib/stepper/stepper.service.mjs +4 -4
  306. package/esm2022/lib/switch/switch.component.mjs +4 -4
  307. package/esm2022/lib/switch/switch.module.mjs +5 -5
  308. package/esm2022/lib/tabs/bottom-nav/bottom-nav-content.component.mjs +4 -4
  309. package/esm2022/lib/tabs/bottom-nav/bottom-nav-header.component.mjs +4 -4
  310. package/esm2022/lib/tabs/bottom-nav/bottom-nav-item.component.mjs +4 -4
  311. package/esm2022/lib/tabs/bottom-nav/bottom-nav.component.mjs +4 -4
  312. package/esm2022/lib/tabs/bottom-nav/bottom-nav.directives.mjs +7 -7
  313. package/esm2022/lib/tabs/bottom-nav/bottom-nav.module.mjs +5 -5
  314. package/esm2022/lib/tabs/tab-content.directive.mjs +4 -4
  315. package/esm2022/lib/tabs/tab-header.directive.mjs +4 -4
  316. package/esm2022/lib/tabs/tab-item.directive.mjs +4 -4
  317. package/esm2022/lib/tabs/tabs/tab-content.component.mjs +4 -4
  318. package/esm2022/lib/tabs/tabs/tab-header.component.mjs +4 -4
  319. package/esm2022/lib/tabs/tabs/tab-item.component.mjs +4 -4
  320. package/esm2022/lib/tabs/tabs/tabs.component.mjs +4 -4
  321. package/esm2022/lib/tabs/tabs/tabs.directives.mjs +7 -7
  322. package/esm2022/lib/tabs/tabs/tabs.module.mjs +5 -5
  323. package/esm2022/lib/tabs/tabs.directive.mjs +4 -4
  324. package/esm2022/lib/time-picker/time-picker.component.mjs +4 -4
  325. package/esm2022/lib/time-picker/time-picker.directives.mjs +7 -7
  326. package/esm2022/lib/time-picker/time-picker.module.mjs +5 -5
  327. package/esm2022/lib/time-picker/time-picker.pipes.mjs +7 -7
  328. package/esm2022/lib/toast/toast.component.mjs +4 -4
  329. package/esm2022/lib/toast/toast.module.mjs +5 -5
  330. package/esm2022/lib/tree/tree-navigation.service.mjs +4 -4
  331. package/esm2022/lib/tree/tree-node/tree-node.component.mjs +7 -7
  332. package/esm2022/lib/tree/tree-selection.service.mjs +4 -4
  333. package/esm2022/lib/tree/tree.component.mjs +10 -10
  334. package/esm2022/lib/tree/tree.module.mjs +5 -5
  335. package/esm2022/lib/tree/tree.service.mjs +4 -4
  336. package/fesm2022/igniteui-angular.mjs +2330 -2321
  337. package/fesm2022/igniteui-angular.mjs.map +1 -1
  338. package/lib/grids/column-actions/public_api.d.ts +7 -0
  339. package/lib/grids/grid/grid.module.d.ts +23 -20
  340. package/lib/grids/grid/public_api.d.ts +1 -1
  341. package/lib/grids/hierarchical-grid/hierarchical-grid.module.d.ts +23 -20
  342. package/lib/grids/hierarchical-grid/public_api.d.ts +1 -1
  343. package/lib/grids/pivot-grid/pivot-grid.module.d.ts +23 -20
  344. package/lib/grids/pivot-grid/public_api.d.ts +1 -1
  345. package/lib/grids/public_api.d.ts +2 -1
  346. package/lib/grids/tree-grid/public_api.d.ts +3 -1
  347. package/lib/grids/tree-grid/tree-grid.module.d.ts +39 -35
  348. package/package.json +6 -6
@@ -733,10 +733,10 @@ export class IgxGridNavigationService {
733
733
  isAddKey(key) {
734
734
  return ROW_ADD_KEYS.has(key);
735
735
  }
736
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxGridNavigationService, deps: [{ token: i1.PlatformUtil }], target: i0.ɵɵFactoryTarget.Injectable }); }
737
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxGridNavigationService }); }
736
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxGridNavigationService, deps: [{ token: i1.PlatformUtil }], target: i0.ɵɵFactoryTarget.Injectable }); }
737
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxGridNavigationService }); }
738
738
  }
739
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxGridNavigationService, decorators: [{
739
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxGridNavigationService, decorators: [{
740
740
  type: Injectable
741
741
  }], ctorParameters: function () { return [{ type: i1.PlatformUtil }]; } });
742
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUNILGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXlCLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXRGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFjdkUsY0FBYztBQUVkLE1BQU0sT0FBTyx3QkFBd0I7SUFNakMsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxVQUFVLENBQUMsS0FBa0I7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQXNCLFFBQXNCO1FBQXRCLGFBQVEsR0FBUixRQUFRLENBQWM7UUFackMsZ0JBQVcsR0FBZ0IsRUFBaUIsQ0FBQztRQUM3QyxtQkFBYyxHQUFnQixFQUFpQixDQUFDO1FBQzdDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztJQVVZLENBQUM7SUFFMUMsZ0JBQWdCLENBQUMsS0FBb0I7UUFDeEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFD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QUFDLENBQUM7SUFDOUgsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjLEVBQUUsTUFBYztRQUMvQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RyxDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVc7UUFDM0IsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQVc7UUFDeEIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7bUhBcHdCUSx3QkFBd0I7dUhBQXhCLHdCQUF3Qjs7Z0dBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICBOQVZJR0FUSU9OX0tFWVMsXG4gICAgUk9XX0NPTExBUFNFX0tFWVMsXG4gICAgUk9XX0VYUEFORF9LRVlTLFxuICAgIFNVUFBPUlRFRF9LRVlTLFxuICAgIEhPUklaT05UQUxfTkFWX0tFWVMsXG4gICAgSEVBREVSX0tFWVMsXG4gICAgUk9XX0FERF9LRVlTLFxuICAgIFBsYXRmb3JtVXRpbFxufSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSwgR3JpZFNlbGVjdGlvbk1vZGUsIEZpbHRlck1vZGUgfSBmcm9tICcuL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBJQWN0aXZlTm9kZUNoYW5nZUV2ZW50QXJncyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hHcmlkR3JvdXBCeVJvd0NvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC9ncm91cGJ5LXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSU11bHRpUm93TGF5b3V0Tm9kZSB9IGZyb20gJy4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkdyb3Vwc0NhY2hlIHtcbiAgICBsZXZlbDogbnVtYmVyO1xuICAgIHZpc2libGVJbmRleDogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZlTm9kZSB7XG4gICAgZ3JpZElEPzogc3RyaW5nO1xuICAgIHJvdzogbnVtYmVyO1xuICAgIGNvbHVtbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBtY2hDYWNoZT86IENvbHVtbkdyb3Vwc0NhY2hlO1xuICAgIGxheW91dD86IElNdWx0aVJvd0xheW91dE5vZGU7XG59XG5cbi8qKiBAaGlkZGVuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZE5hdmlnYXRpb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ3JpZDogR3JpZFR5cGU7XG4gICAgcHVibGljIF9hY3RpdmVOb2RlOiBJQWN0aXZlTm9kZSA9IHt9IGFzIElBY3RpdmVOb2RlO1xuICAgIHB1YmxpYyBsYXN0QWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUgPSB7fSBhcyBJQWN0aXZlTm9kZTtcbiAgICBwcm90ZWN0ZWQgcGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBhY3RpdmVOb2RlKHZhbHVlOiBJQWN0aXZlTm9kZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmVOb2RlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHsgfVxuXG4gICAgcHVibGljIGhhbmRsZU5hdmlnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCAmJiBOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQucmVwZWF0ICYmIFNVUFBPUlRFRF9LRVlTLmhhcyhrZXkpIHx8IChrZXkgPT09ICd0YWInICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQucmVwZWF0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwYXRjaEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSB8fCAhKFNVUFBPUlRFRF9LRVlTLmhhcyhrZXkpIHx8IChrZXkgPT09ICd0YWInICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsKSkgJiZcbiAgICAgICAgICAgICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93RWRpdGluZ0Jsb2NrZWQgJiYgIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hpZnQgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkgJiYgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmlzRGF0YVJvdyh0aGlzLmFjdGl2ZU5vZGUucm93KSA/ICdkYXRhQ2VsbCcgOlxuICAgICAgICAgICAgdGhpcy5pc0RhdGFSb3codGhpcy5hY3RpdmVOb2RlLnJvdywgdHJ1ZSkgPyAnc3VtbWFyeUNlbGwnIDogJ2dyb3VwUm93JztcbiAgICAgICAgaWYgKHRoaXMuZW1pdEtleURvd24odHlwZSwgdGhpcy5hY3RpdmVOb2RlLnJvdywgZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBbHQoa2V5LCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFsnICcsICdzcGFjZWJhcicsICdzcGFjZSddLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmtleWJvYXJkU3RhdGVPbktleWRvd24odGhpcy5hY3RpdmVOb2RlLCBzaGlmdCwgc2hpZnQgJiYga2V5ID09PSAndGFiJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE5leHRQb3NpdGlvbih0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBrZXksIHNoaWZ0LCBjdHJsLCBldmVudCk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlSW5Cb2R5KHBvc2l0aW9uLnJvd0luZGV4LCBwb3NpdGlvbi5jb2xJbmRleCwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIG9iai50YXJnZXQuYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN1bW1hcnlOYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsTmF2KGV2ZW50LCBldmVudC5rZXkudG9Mb3dlckNhc2UoKSwgdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCwgJ3N1bW1hcnlDZWxsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGVhZGVyTmF2aWdhdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFIRUFERVJfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gZXZlbnQuc2hpZnRLZXk7XG4gICAgICAgIGNvbnN0IGFsdCA9IGV2ZW50LmFsdEtleTtcblxuICAgICAgICB0aGlzLnBlcmZvcm1IZWFkZXJLZXlDb21iaW5hdGlvbih0aGlzLmN1cnJlbnRBY3RpdmVDb2x1bW4sIGtleSwgc2hpZnQsIGN0cmwsIGFsdCwgZXZlbnQpO1xuICAgICAgICBpZiAoc2hpZnQgfHwgYWx0IHx8IChjdHJsICYmIChrZXkuaW5jbHVkZXMoJ2Rvd24nKSB8fCBrZXkuaW5jbHVkZXMoJ2Rvd24nKSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNDb2x1bW5Hcm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTUNIZWFkZXJOYXYoa2V5LCBjdHJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbE5hdihldmVudCwga2V5LCAtMSwgJ2hlYWRlckNlbGwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c1Rib2R5KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGdyaWRSb3dzID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnRvdGFsSXRlbUNvdW50ID8/IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIGlmIChncmlkUm93cyA8IDEpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgIU9iamVjdC5rZXlzKHRoaXMuYWN0aXZlTm9kZSkubGVuZ3RoIHx8IHRoaXMuYWN0aXZlTm9kZS5yb3cgPCAwIHx8IHRoaXMuYWN0aXZlTm9kZS5yb3cgPiBncmlkUm93cyAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0xhc3RBY3RpdmVOb2RlID0gT2JqZWN0LmtleXModGhpcy5sYXN0QWN0aXZlTm9kZSkubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ2xlYXJTZWxlY3Rpb24gPSBoYXNMYXN0QWN0aXZlTm9kZSAmJiAodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cgPCAwIHx8IHRoaXMubGFzdEFjdGl2ZU5vZGUucm93ID4gZ3JpZFJvd3MgLSAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA+PSAwICYmIHRoaXMubGFzdEFjdGl2ZU5vZGUucm93IDwgZ3JpZFJvd3MgP1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RWaXNpYmxlTm9kZSh0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdykgOiB0aGlzLmZpcnN0VmlzaWJsZU5vZGUoKSk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2xlYXJTZWxlY3Rpb24gfHwgKHRoaXMuZ3JpZC5jZWxsU2VsZWN0aW9uICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5tdWx0aXBsZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2xlYXJDZWxsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8odGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmoudGFyZ2V0Py5hY3RpdmF0ZShldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzTGFzdEFjdGl2ZU5vZGUgJiYgIXRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkKHRoaXMubGFzdEFjdGl2ZU5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiB0aGlzLmFjdGl2ZU5vZGUucm93LCByb3dFbmQ6IHRoaXMuYWN0aXZlTm9kZS5yb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblN0YXJ0OiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBjb2x1bW5FbmQ6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW5cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3RSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c0ZpcnN0Q2VsbChoZWFkZXIgPSB0cnVlKSB7XG4gICAgICAgIGlmICgoaGVhZGVyIHx8IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGgpICYmIHRoaXMuYWN0aXZlTm9kZSAmJlxuICAgICAgICAgICAgKHRoaXMuYWN0aXZlTm9kZS5yb3cgPT09IC0xIHx8IHRoaXMuYWN0aXZlTm9kZS5yb3cgPT09IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAoIWhlYWRlciAmJiAhdGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaG91bGRTY3JvbGxJbnRvVmlldyA9IHRoaXMubGFzdEFjdGl2ZU5vZGUgJiYgKGhlYWRlciAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyAhPT0gLTEpIHx8XG4gICAgICAgICAgICAoIWhlYWRlciAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyAhPT0gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh0aGlzLmZpcnN0VmlzaWJsZU5vZGUoaGVhZGVyID8gLTEgOiB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoKSk7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGxJbnRvVmlldykge1xuICAgICAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc0NvbHVtbkZ1bGx5VmlzaWJsZShjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChjb2x1bW5JbmRleCA8IDAgfHwgdGhpcy5pc0NvbHVtblBpbm5lZChjb2x1bW5JbmRleCwgdGhpcy5mb3JPZkRpcigpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldENvbHVtblVucGlubmVkSW5kZXgoY29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4ICsgMSkgLSB0aGlzLmZvck9mRGlyKCkuZ2V0Q29sdW1uU2Nyb2xsTGVmdChpbmRleCk7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlDb250YWluZXJXaWR0aCA8IHdpZHRoICYmIHRoaXMuZGlzcGxheUNvbnRhaW5lclNjcm9sbExlZnQgPT09IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheUNvbnRhaW5lcldpZHRoID49IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4ICsgMSkgLSB0aGlzLmRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0ICYmXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0IDw9IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkUGVyZm9ybUhvcml6b250YWxTY3JvbGwodmlzaWJsZUNvbEluZGV4OiBudW1iZXIsIHJvd0luZGV4ID0gLTEpIHtcbiAgICAgICAgaWYgKHZpc2libGVDb2xJbmRleCA8IDAgfHwgdmlzaWJsZUNvbEluZGV4ID4gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IHJvd0luZGV4ID4gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0NvbHVtbkZ1bGx5VmlzaWJsZSh2aXNpYmxlQ29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleF07XG4gICAgICAgIHJldHVybiByb3cuZXhwcmVzc2lvbiB8fCByb3cuZGV0YWlsc0RhdGEgPyBmYWxzZSA6ICF0aGlzLmlzQ29sdW1uRnVsbHlWaXNpYmxlKHZpc2libGVDb2xJbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbCh0YXJnZXRSb3dJbmRleDogbnVtYmVyLCBfdmlzaWJsZUNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZEJ5Vmlld0luZGV4KHRhcmdldFJvd0luZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcm9sbFJvd0luZGV4ID0gdGhpcy5ncmlkLmhhc1Bpbm5lZFJlY29yZHMgJiYgdGhpcy5ncmlkLmlzUm93UGlubmluZ1RvVG9wID9cbiAgICAgICAgICAgIHRhcmdldFJvd0luZGV4IC0gdGhpcy5ncmlkLnBpbm5lZERhdGFWaWV3Lmxlbmd0aCA6IHRhcmdldFJvd0luZGV4O1xuICAgICAgICBjb25zdCB0YXJnZXRSb3cgPSB0aGlzLmdldFJvd0VsZW1lbnRCeUluZGV4KHRhcmdldFJvd0luZGV4KTtcbiAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmdldFNpemVBdChzY3JvbGxSb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuZ3JpZC5jYWxjSGVpZ2h0ID8gTWF0aC5jZWlsKHRoaXMuZ3JpZC5jYWxjSGVpZ2h0KSA6IDA7XG4gICAgICAgIGNvbnN0IGVuZFRvcE9mZnNldCA9IHRhcmdldFJvdyA/IHRhcmdldFJvdy5vZmZzZXRUb3AgKyByb3dIZWlnaHQgKyB0aGlzLmNvbnRhaW5lclRvcE9mZnNldCA6IGNvbnRhaW5lckhlaWdodCArIHJvd0hlaWdodDtcbiAgICAgICAgLy8gdGhpcyBpcyB3b3JrYXJvdW5kOiBlbmRUb3BPZmZzZXQgLSBjb250YWluZXJIZWlnaHQgPiA1IGFuZCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aDogY29udGFpbmVySGVpZ2h0IDwgZW5kVG9wT2Zmc2V0XG4gICAgICAgIC8vIHdoZW4gdGhlIHBhZ2UgaXMgem9vbWVkIHRoZSBncmlkIGRvZXMgbm90IHNjcm9sbCB0aGUgcm93IGNvbXBsZXRlbHkgaW4gdGhlIHZpZXdcbiAgICAgICAgcmV0dXJuICF0YXJnZXRSb3cgfHwgdGFyZ2V0Um93Lm9mZnNldFRvcCA8IE1hdGguYWJzKHRoaXMuY29udGFpbmVyVG9wT2Zmc2V0KVxuICAgICAgICAgICAgfHwgY29udGFpbmVySGVpZ2h0ICYmIGVuZFRvcE9mZnNldCAtIGNvbnRhaW5lckhlaWdodCA+IDU7XG4gICAgfVxuXG4gICAgcHVibGljIHBlcmZvcm1WZXJ0aWNhbFNjcm9sbFRvQ2VsbChyb3dJbmRleDogbnVtYmVyLCB2aXNpYmxlQ29sSW5kZXggPSAtMSwgY2I/OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgLy8gT25seSBmb3IgdG9wIHBpbm5pbmcgd2UgbmVlZCB0byBzdWJ0cmFjdCBwaW5uZWQgY291bnQgYmVjYXVzZSB2aXJ0dWFsaXphdGlvbiBpbmRleGluZyBkb2Vzbid0IGNvdW50IHBpbm5lZCByb3dzLlxuICAgICAgICBjb25zdCBzY3JvbGxSb3dJbmRleCA9IHRoaXMuZ3JpZC5oYXNQaW5uZWRSZWNvcmRzICYmIHRoaXMuZ3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCA/XG4gICAgICAgICAgICByb3dJbmRleCAtIHRoaXMuZ3JpZC5waW5uZWREYXRhVmlldy5sZW5ndGggOiByb3dJbmRleDtcbiAgICAgICAgdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvKHNjcm9sbFJvd0luZGV4KTtcbiAgICAgICAgdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmNodW5rTG9hZFxuICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsVG9DZWxsKHZpc2libGVDb2x1bW5JbmRleDogbnVtYmVyLCBjYj86ICgpID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dMaXN0IDwgMSAmJiB0aGlzLmdyaWQuc3VtbWFyaWVzUm93TGlzdC5sZW5ndGggPCAxICYmIHRoaXMuZ3JpZC5oYXNDb2x1bW5Hcm91cHMpIHtcbiAgICAgICAgICAgIGxldCBjb2x1bW4gPSB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlWaXNpYmxlSW5kZXgodmlzaWJsZUNvbHVtbkluZGV4KTtcbiAgICAgICAgICAgIHdoaWxlIChjb2x1bW4ucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gY29sdW1uLnBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5JbmRleCA9IHRoaXMuZm9yT2ZEaXIoKS5pZ3hGb3JPZi5pbmRleE9mKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsKHZpc2libGVDb2x1bW5JbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ncmlkLnBhcmVudFZpcnREaXIuY2h1bmtMb2FkXG4gICAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvck9mRGlyKCkuc2Nyb2xsVG8odGhpcy5nZXRDb2x1bW5VbnBpbm5lZEluZGV4KHZpc2libGVDb2x1bW5JbmRleCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0RhdGFSb3cocm93SW5kZXg6IG51bWJlciwgaW5jbHVkZVN1bW1hcnkgPSBmYWxzZSkge1xuICAgICAgICBsZXQgY3VyUm93OiBhbnk7XG5cbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMCB8fCByb3dJbmRleCA+IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBjdXJSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbcm93SW5kZXggLSB0aGlzLmdyaWQudmlydHVhbGl6YXRpb25TdGF0ZS5zdGFydEluZGV4XTtcbiAgICAgICAgICAgIGlmICghY3VyUm93KSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgZGF0YSBpcyByZW1vdGUsIHJlY29yZCBtaWdodCBub3QgYmUgaW4gdGhlIHZpZXcgeWV0LlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuaXNSZW1vdGUgJiYgcm93SW5kZXggPj0gMCAmJiByb3dJbmRleCA8PSAodGhpcy5ncmlkIGFzIGFueSkudG90YWxJdGVtQ291bnQgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VyUm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VyUm93ICYmICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKGN1clJvdykgJiYgIXRoaXMuZ3JpZC5pc0RldGFpbFJlY29yZChjdXJSb3cpXG4gICAgICAgICAgICAmJiAhY3VyUm93LmNoaWxkR3JpZHNEYXRhICYmIChpbmNsdWRlU3VtbWFyeSB8fCAhY3VyUm93LnN1bW1hcmllcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzR3JvdXBSb3cocm93SW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IHJvd0luZGV4ID4gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbcm93SW5kZXhdO1xuICAgICAgICByZXR1cm4gY3VyUm93ICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQoY3VyUm93KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWN0aXZlTm9kZShhY3RpdmVOb2RlOiBJQWN0aXZlTm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmVOb2RlQ2hhbmdlZChhY3RpdmVOb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IGFjdGl2ZU5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuYWN0aXZlTm9kZSwgYWN0aXZlTm9kZSk7XG5cbiAgICAgICAgY29uc3QgY3VyclJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1thY3RpdmVOb2RlLnJvd107XG4gICAgICAgIGNvbnN0IHR5cGU6IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSA9IGFjdGl2ZU5vZGUucm93IDwgMCA/ICdoZWFkZXJDZWxsJyA6XG4gICAgICAgICAgICB0aGlzLmlzRGF0YVJvdyhhY3RpdmVOb2RlLnJvdykgPyAnZGF0YUNlbGwnIDpcbiAgICAgICAgICAgICAgICBjdXJyUm93ICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQoY3VyclJvdykgPyAnZ3JvdXBSb3cnIDpcbiAgICAgICAgICAgICAgICAgICAgY3VyclJvdyAmJiB0aGlzLmdyaWQuaXNEZXRhaWxSZWNvcmQoY3VyclJvdykgPyAnbWFzdGVyRGV0YWlsUm93JyA6ICdzdW1tYXJ5Q2VsbCc7XG5cbiAgICAgICAgY29uc3QgYXJnczogSUFjdGl2ZU5vZGVDaGFuZ2VFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3c6IHRoaXMuYWN0aXZlTm9kZS5yb3csXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sXG4gICAgICAgICAgICBsZXZlbDogdGhpcy5hY3RpdmVOb2RlLmxldmVsLFxuICAgICAgICAgICAgdGFnOiB0eXBlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ncmlkLmFjdGl2ZU5vZGVDaGFuZ2UuZW1pdChhcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmVOb2RlQ2hhbmdlZChhY3RpdmVOb2RlOiBJQWN0aXZlTm9kZSkge1xuICAgICAgICBsZXQgaXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNoZWNrSW5uZXJQcm9wID0gKGFjaXZlTm9kZTogQ29sdW1uR3JvdXBzQ2FjaGUgfCBJTXVsdGlSb3dMYXlvdXROb2RlLCBwcm9wKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWFjaXZlTm9kZSkge1xuICAgICAgICAgICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFjaXZlTm9kZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlTm9kZVtwcm9wXVtwcm9wTmFtZV0gIT09IGFjaXZlTm9kZVtwcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYWN0aXZlTm9kZSk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgcHJvcHMpIHtcbiAgICAgICAgICAgIGlmICghIXRoaXMuYWN0aXZlTm9kZVtwcm9wTmFtZV0gJiYgdHlwZW9mIHRoaXMuYWN0aXZlTm9kZVtwcm9wTmFtZV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tJbm5lclByb3AoYWN0aXZlTm9kZVtwcm9wTmFtZV0sIHByb3BOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVOb2RlW3Byb3BOYW1lXSAhPT0gYWN0aXZlTm9kZVtwcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzQ2hhbmdlZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0TmV4dFBvc2l0aW9uKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIGtleTogc3RyaW5nLCBzaGlmdDogYm9vbGVhbiwgY3RybDogYm9vbGVhbiwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCwgdHJ1ZSkgJiYgKGtleS5pbmRleE9mKCdkb3duJykgPCAwIHx8IGtleS5pbmRleE9mKCd1cCcpIDwgMCkgJiYgY3RybCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcm93SW5kZXgsIGNvbEluZGV4IH07XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BhZ2Vkb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ3BhZ2V1cCc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAncGFnZWRvd24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxOZXh0UGFnZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxQcmV2UGFnZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0Q2VsbCA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5jaHVua0xvYWRcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0Q2VsbCAmJiB0aGlzLmdyaWQucm93TGlzdC5tYXAociA9PiByLmluZGV4KS5pbmRleE9mKGVkaXRDZWxsLnJvd0luZGV4KSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGFiJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVkaXRpbmcoc2hpZnQsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kTGFzdERhdGFSb3dJbmRleCgpIDogdGhpcy5hY3RpdmVOb2RlLnJvdztcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IHRoaXMubGFzdENvbHVtbkluZGV4O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9tZSc6XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kRmlyc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3c7XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3dsZWZ0JzpcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gY3RybCA/IDAgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93cmlnaHQnOlxuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gY3RybCA/IHRoaXMubGFzdENvbHVtbkluZGV4IDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiArIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICAgICAgICBpZiAoY3RybCAmJiAhdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpIHx8ICh0aGlzLmdyaWQucm93RWRpdGFibGUgJiYgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICE9PSB1bmRlZmluZWQgPyB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIDogMDtcbiAgICAgICAgICAgICAgICByb3dJbmRleCA9IGN0cmwgPyB0aGlzLmZpbmRGaXJzdERhdGFSb3dJbmRleCgpIDogdGhpcy5hY3RpdmVOb2RlLnJvdyAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICAgICAgaWYgKChjdHJsICYmICF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCkpIHx8ICh0aGlzLmdyaWQucm93RWRpdGFibGUgJiYgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICE9PSB1bmRlZmluZWQgPyB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIDogMDtcbiAgICAgICAgICAgICAgICByb3dJbmRleCA9IGN0cmwgPyB0aGlzLmZpbmRMYXN0RGF0YVJvd0luZGV4KCkgOiB0aGlzLmFjdGl2ZU5vZGUucm93ICsgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VudGVyJzpcbiAgICAgICAgICAgIGNhc2UgJ2YyJzpcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2NlbGxfYnlfdmlzaWJsZV9pbmRleCh0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSB8fCAhY2VsbC5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyRWRpdE1vZGUoY2VsbCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICAgIGNhc2UgJ2VzYyc6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5pc0luQ29tcG9zaXRpb25Nb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlIHx8IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRFZGl0KGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzRWRnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlYmFyJzpcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICBjb25zdCByb3dPYmogPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2J5X2luZGV4KHRoaXMuYWN0aXZlTm9kZS5yb3cpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaXNSb3dTZWxlY3RhYmxlICYmIHJvd09iaikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGFSb3cocm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93T2JqLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3cocm93T2JqLmtleSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dCeUlkKHJvd09iai5rZXksIGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNHcm91cFJvdyhyb3dJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICgocm93T2JqIGFzIGFueSkgYXMgSWd4R3JpZEdyb3VwQnlSb3dDb21wb25lbnQpLm9uR3JvdXBTZWxlY3RvckNsaWNrKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHJvd0luZGV4LCBjb2xJbmRleCB9O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBob3Jpem9udGFsTmF2KGV2ZW50OiBLZXlib2FyZEV2ZW50LCBrZXk6IHN0cmluZywgcm93SW5kZXg6IG51bWJlciwgdGFnOiBHcmlkS2V5ZG93blRhcmdldFR5cGUpIHtcbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGlmICghSE9SSVpPTlRBTF9OQVZfS0VZUy5oYXMoZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlLnJvdyA9IHJvd0luZGV4O1xuICAgICAgICBpZiAocm93SW5kZXggPiAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbWl0S2V5RG93bignc3VtbWFyeUNlbGwnLCB0aGlzLmFjdGl2ZU5vZGUucm93LCBldmVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdBY3RpdmVOb2RlID0ge1xuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLFxuICAgICAgICAgICAgbWNoQ2FjaGU6IHtcbiAgICAgICAgICAgICAgICBsZXZlbDogdGhpcy5hY3RpdmVOb2RlLmxldmVsLFxuICAgICAgICAgICAgICAgIHZpc2libGVJbmRleDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtblxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICgoa2V5LmluY2x1ZGVzKCdsZWZ0JykgfHwga2V5ID09PSAnaG9tZScpICYmIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gPiAwKSB7XG4gICAgICAgICAgICBuZXdBY3RpdmVOb2RlLmNvbHVtbiA9IGN0cmwgfHwga2V5ID09PSAnaG9tZScgPyAwIDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChrZXkuaW5jbHVkZXMoJ3JpZ2h0JykgfHwga2V5ID09PSAnZW5kJykgJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA8IHRoaXMubGFzdENvbHVtbkluZGV4KSB7XG4gICAgICAgICAgICBuZXdBY3RpdmVOb2RlLmNvbHVtbiA9IGN0cmwgfHwga2V5ID09PSAnZW5kJyA/IHRoaXMubGFzdENvbHVtbkluZGV4IDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFnID09PSAnaGVhZGVyQ2VsbCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeVZpc2libGVJbmRleChuZXdBY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgICAgICBuZXdBY3RpdmVOb2RlLm1jaENhY2hlLmxldmVsID0gY29sdW1uLmxldmVsO1xuICAgICAgICAgICAgbmV3QWN0aXZlTm9kZS5tY2hDYWNoZS52aXNpYmxlSW5kZXggPSBjb2x1bW4udmlzaWJsZUluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRBY3RpdmVOb2RlKHsgcm93OiB0aGlzLmFjdGl2ZU5vZGUucm93LCBjb2x1bW46IG5ld0FjdGl2ZU5vZGUuY29sdW1uLCBtY2hDYWNoZTogbmV3QWN0aXZlTm9kZS5tY2hDYWNoZSB9KTtcbiAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxhc3RDb2x1bW5JbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuZ3JpZC52aXNpYmxlQ29sdW1ucy5tYXAoY29sID0+IGNvbC52aXNpYmxlSW5kZXgpKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBkaXNwbGF5Q29udGFpbmVyV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuZ3JpZC5wYXJlbnRWaXJ0RGlyLmRjLmluc3RhbmNlLl92aWV3Q29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZGlzcGxheUNvbnRhaW5lclNjcm9sbExlZnQoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5ncmlkLmhlYWRlckNvbnRhaW5lci5zY3JvbGxQb3NpdGlvbik7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgY29udGFpbmVyVG9wT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmRjLmluc3RhbmNlLl92aWV3Q29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS50b3AsIDEwKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q29sdW1uVW5waW5uZWRJbmRleCh2aXNpYmxlQ29sdW1uSW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWQudW5waW5uZWRDb2x1bW5zLmZpbmQoKGNvbCkgPT4gIWNvbC5jb2x1bW5Hcm91cCAmJiBjb2wudmlzaWJsZUluZGV4ID09PSB2aXNpYmxlQ29sdW1uSW5kZXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnBpbm5lZENvbHVtbnMubGVuZ3RoID8gdGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucy5maWx0ZXIoKGMpID0+ICFjLmNvbHVtbkdyb3VwKS5pbmRleE9mKGNvbHVtbikgOlxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtbkluZGV4O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmb3JPZkRpcigpOiBJZ3hGb3JPZkRpcmVjdGl2ZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZm9yT2ZEaXIgPSB0aGlzLmdyaWQuZGF0YVJvd0xpc3QubGVuZ3RoID4gMCA/IHRoaXMuZ3JpZC5kYXRhUm93TGlzdC5maXJzdC52aXJ0RGlyUm93IDogdGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QubGVuZ3RoID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0LmZpcnN0LnZpcnREaXJSb3cgOiB0aGlzLmdyaWQuaGVhZGVyQ29udGFpbmVyO1xuICAgICAgICByZXR1cm4gZm9yT2ZEaXIgYXMgSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlQWx0KGtleTogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyB0b2RvIFRPRE8gUk9XXG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfYnlfaW5kZXgodGhpcy5hY3RpdmVOb2RlLnJvdyk7XG5cbiAgICAgICAgaWYgKCEodGhpcy5pc1RvZ2dsZUtleShrZXkpIHx8IHRoaXMuaXNBZGRLZXkoa2V5KSkgfHwgIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQWRkS2V5KGtleSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZ3JpZCBtdXN0IGJlIGluIHJvdyBlZGl0IG1vZGUgdG8gcGVyZm9ybSByb3cgYWRkaW5nIScpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIHJvdy50cmVlUm93ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJBZGRSb3dNb2RlKHJvdywgdHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJBZGRSb3dNb2RlKHJvdywgZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghcm93LmV4cGFuZGVkICYmIFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgaWYgKHJvdy5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gdXNlIGV4cGFuZGVkIHJvdy5leHBhbmRlZCA9ICFyb3cuZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgKHJvdyBhcyBhbnkpLnRvZ2dsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyb3cua2V5LCB0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocm93LmV4cGFuZGVkICYmIFJPV19DT0xMQVBTRV9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBpZiAocm93LmtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyB1c2UgZXhwYW5kZWQgcm93LmV4cGFuZGVkID0gIXJvdy5leHBhbmRlZDtcbiAgICAgICAgICAgICAgICAocm93IGFzIGFueSkudG9nZ2xlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJvdy5rZXksIGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRWRpdGluZyhzaGlmdDogYm9vbGVhbiwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHNoaWZ0ID8gdGhpcy5ncmlkLmdldFByZXZpb3VzQ2VsbCh0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBjb2wgPT4gY29sLmVkaXRhYmxlKSA6XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ2V0TmV4dENlbGwodGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwgY29sID0+IGNvbC5lZGl0YWJsZSk7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0luRWRpdE1vZGUgJiYgdGhpcy5pc0FjdGl2ZU5vZGUobmV4dC5yb3dJbmRleCwgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kRWRpdCh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICgodGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0luRWRpdE1vZGUgJiYgdGhpcy5ncmlkLnJvd0VkaXRUYWJzLmxlbmd0aCkgJiZcbiAgICAgICAgICAgICh0aGlzLmFjdGl2ZU5vZGUucm93ICE9PSBuZXh0LnJvd0luZGV4IHx8IHRoaXMuaXNBY3RpdmVOb2RlKG5leHQucm93SW5kZXgsIG5leHQudmlzaWJsZUNvbHVtbkluZGV4KSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudXBkYXRlQ2VsbCh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRUYWJzLmxhc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0VGFicy5maXJzdC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSAmJiAhdGhpcy5ncmlkLnJvd0VkaXRUYWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHNoaWZ0ICYmIG5leHQucm93SW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5yb3cgJiYgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBuZXh0LnZpc2libGVDb2x1bW5JbmRleCA9IHRoaXMuZ3JpZC5sYXN0RWRpdGFibGVDb2x1bW5JbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNoaWZ0ICYmIG5leHQucm93SW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5yb3cgJiYgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBuZXh0LnZpc2libGVDb2x1bW5JbmRleCA9IHRoaXMuZ3JpZC5maXJzdEVkaXRhYmxlQ29sdW1uSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5leHQucm93SW5kZXggPSB0aGlzLmFjdGl2ZU5vZGUucm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUluQm9keShuZXh0LnJvd0luZGV4LCBuZXh0LnZpc2libGVDb2x1bW5JbmRleCwgKG9iaikgPT4ge1xuICAgICAgICAgICAgb2JqLnRhcmdldC5hY3RpdmF0ZShldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG5hdmlnYXRlSW5Cb2R5KHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiOiAoYXJnOiBhbnkpID0+IHZvaWQgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkUG9zaXRpb24ocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCkgfHwgdGhpcy5pc0FjdGl2ZU5vZGUocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGVUbyhyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4LCBjYik7XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgZW1pdEtleURvd24odHlwZTogR3JpZEtleWRvd25UYXJnZXRUeXBlLCByb3dJbmRleCwgZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QudG9BcnJheSgpLmNvbmNhdCh0aGlzLmdyaWQucm93TGlzdC50b0FycmF5KCkpLmZpbmQociA9PiByLmluZGV4ID09PSByb3dJbmRleCk7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXQgPSB0eXBlID09PSAnZ3JvdXBSb3cnID8gcm93IDpcbiAgICAgICAgICAgIHR5cGUgPT09ICdkYXRhQ2VsbCcgPyByb3cuY2VsbHM/LmZpbmQoYyA9PiBjLnZpc2libGVDb2x1bW5JbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbikgOlxuICAgICAgICAgICAgICAgIHJvdy5zdW1tYXJ5Q2VsbHM/LmZpbmQoYyA9PiBjLnZpc2libGVDb2x1bW5JbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgIGNvbnN0IGtleWRvd25BcmdzID0geyB0YXJnZXRUeXBlOiB0eXBlLCBldmVudCwgY2FuY2VsOiBmYWxzZSwgdGFyZ2V0IH07XG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkS2V5ZG93bi5lbWl0KGtleWRvd25BcmdzKTtcbiAgICAgICAgaWYgKGtleWRvd25BcmdzLmNhbmNlbCAmJiB0eXBlID09PSAnZGF0YUNlbGwnKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uua2V5Ym9hcmRTdGF0ZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGtleWRvd25BcmdzLmNhbmNlbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc0NvbHVtblBpbm5lZChjb2x1bW5JbmRleDogbnVtYmVyLCBmb3JPZkRpcjogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55Pik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsID0gZm9yT2ZEaXIuZ2V0U2Nyb2xsKCk7XG4gICAgICAgIHJldHVybiAoIWhvcml6b250YWxTY3JvbGwuY2xpZW50V2lkdGggfHwgdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KGNvbHVtbkluZGV4KT8ucGlubmVkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZmluZEZpcnN0RGF0YVJvd0luZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmluZEluZGV4KHJlYyA9PiAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyZWMpICYmICF0aGlzLmdyaWQuaXNEZXRhaWxSZWNvcmQocmVjKSAmJiAhcmVjLnN1bW1hcmllcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRMYXN0RGF0YVJvd0luZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICgodGhpcy5ncmlkIGFzIGFueSkudG90YWxJdGVtQ291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5ncmlkIGFzIGFueSkudG90YWxJdGVtQ291bnQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpID0gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhUm93KGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Um93RWxlbWVudEJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNEZXRhaWxzKSB7XG4gICAgICAgICAgICBjb25zdCBkZXRhaWwgPSB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBbZGV0YWlsPVwidHJ1ZVwiXVtkYXRhLXJvd2luZGV4PVwiJHtpbmRleH1cIl1gKTtcbiAgICAgICAgICAgIGlmIChkZXRhaWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGV0YWlsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93TGlzdC50b0FycmF5KCkuY29uY2F0KHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0LnRvQXJyYXkoKSkuZmluZChyID0+IHIuaW5kZXggPT09IGluZGV4KT8ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNWYWxpZFBvc2l0aW9uKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50ID8/IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIGlmIChyb3dJbmRleCA8IDAgfHwgY29sSW5kZXggPCAwIHx8IGxlbmd0aCAtIDEgPCByb3dJbmRleCB8fCB0aGlzLmxhc3RDb2x1bW5JbmRleCA8IGNvbEluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gIT09IGNvbEluZGV4ICYmICF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCwgdHJ1ZSkgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBwZXJmb3JtSGVhZGVyS2V5Q29tYmluYXRpb24oY29sdW1uLCBrZXksIHNoaWZ0LCBjdHJsLCBhbHQsIGV2ZW50KSB7XG4gICAgICAgIGxldCBkaXJlY3Rpb24gPSB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmZpbmQoZXhwciA9PiBleHByLmZpZWxkTmFtZSA9PT0gY29sdW1uLmZpZWxkKT8uZGlyO1xuICAgICAgICBpZiAoY3RybCAmJiBrZXkuaW5jbHVkZXMoJ3VwJykgJiYgY29sdW1uLnNvcnRhYmxlICYmICFjb2x1bW4uY29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gU29ydGluZ0RpcmVjdGlvbi5Bc2MgPyBTb3J0aW5nRGlyZWN0aW9uLk5vbmUgOiBTb3J0aW5nRGlyZWN0aW9uLkFzYztcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zb3J0KHsgZmllbGROYW1lOiBjb2x1bW4uZmllbGQsIGRpcjogZGlyZWN0aW9uLCBpZ25vcmVDYXNlOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3RybCAmJiBrZXkuaW5jbHVkZXMoJ2Rvd24nKSAmJiBjb2x1bW4uc29ydGFibGUgJiYgIWNvbHVtbi5jb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBTb3J0aW5nRGlyZWN0aW9uLkRlc2MgPyBTb3J0aW5nRGlyZWN0aW9uLk5vbmUgOiBTb3J0aW5nRGlyZWN0aW9uLkRlc2M7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc29ydCh7IGZpZWxkTmFtZTogY29sdW1uLmZpZWxkLCBkaXI6IGRpcmVjdGlvbiwgaWdub3JlQ2FzZTogZmFsc2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoaWZ0ICYmIGFsdCAmJiB0aGlzLmlzVG9nZ2xlS2V5KGtleSkgJiYgIWNvbHVtbi5jb2x1bW5Hcm91cCAmJiBjb2x1bW4uZ3JvdXBhYmxlKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgU29ydGluZ0RpcmVjdGlvbi5Bc2M7XG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdyaWdodCcpKSB7XG4gICAgICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLmdyb3VwQnkoe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgZGlyOiBkaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IGNvbHVtbi5zb3J0aW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGNvbHVtbi5zb3J0U3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nQ29tcGFyZXI6IGNvbHVtbi5ncm91cGluZ0NvbXBhcmVyLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAodGhpcy5ncmlkIGFzIGFueSkuY2xlYXJHcm91cGluZyhjb2x1bW4uZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA9IGtleS5pbmNsdWRlcygncmlnaHQnKSAmJiAodGhpcy5ncmlkIGFzIGFueSkuaGlkZUdyb3VwZWRDb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGVJbmRleCA9PT0gdGhpcy5sYXN0Q29sdW1uSW5kZXggPyB0aGlzLmxhc3RDb2x1bW5JbmRleCAtIDEgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbHQgJiYgKFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KSB8fCBST1dfQ09MTEFQU0VfS0VZUy5oYXMoa2V5KSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTUNIRXhwYW5kQ29sbGFwc2Uoa2V5LCBjb2x1bW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChbJyAnLCAnc3BhY2ViYXInLCAnc3BhY2UnXS5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNvbHVtblNlbGVjdGlvbihjb2x1bW4sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWx0ICYmIChrZXkgPT09ICdsJyB8fCBrZXkgPT09ICfCrCcpICYmIHRoaXMuZ3JpZC5hbGxvd0FkdmFuY2VkRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQub3BlbkFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0cmwgJiYgc2hpZnQgJiYga2V5ID09PSAnbCcgJiYgdGhpcy5ncmlkLmFsbG93RmlsdGVyaW5nICYmICFjb2x1bW4uY29sdW1uR3JvdXAgJiYgY29sdW1uLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZmlsdGVyTW9kZSA9PT0gRmlsdGVyTW9kZS5leGNlbFN0eWxlRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyRWwgPSB0aGlzLmdyaWQuaGVhZGVyR3JvdXBzLmZpbmQoZyA9PiBnLmFjdGl2ZSkubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS50b2dnbGVGaWx0ZXJEcm9wZG93bihoZWFkZXJFbCwgY29sdW1uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbChjb2x1bW4udmlzaWJsZUluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJlZENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5pc0ZpbHRlclJvd1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaXJzdFZpc2libGVOb2RlKHJvd0luZGV4Pykge1xuICAgICAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMubGFzdEFjdGl2ZU5vZGUuY29sdW1uICE9PSB1bmRlZmluZWQgPyB0aGlzLmxhc3RBY3RpdmVOb2RlLmNvbHVtbiA6XG4gICAgICAgICAgICB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuc29ydCgoYzEsIGMyKSA9PiBjMS52aXNpYmxlSW5kZXggLSBjMi52aXNpYmxlSW5kZXgpXG4gICAgICAgICAgICAgICAgLmZpbmQoYyA9PiB0aGlzLmlzQ29sdW1uRnVsbHlWaXNpYmxlKGMudmlzaWJsZUluZGV4KSk/LnZpc2libGVJbmRleDtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLmZpbmQoKGNvbCkgPT4gIWNvbC5jb2x1bW5MYXlvdXQgJiYgY29sLnZpc2libGVJbmRleCA9PT0gY29sSW5kZXgpO1xuICAgICAgICBjb25zdCByb3dJbmQgPSByb3dJbmRleCA/IHJvd0luZGV4IDogdGhpcy5ncmlkLnJvd0xpc3QuZmluZChyID0+ICF0aGlzLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbChyLmluZGV4LCBjb2xJbmRleCkpPy5pbmRleDtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgICAgIHJvdzogcm93SW5kID8/IDAsXG4gICAgICAgICAgICBjb2x1bW46IGNvbHVtbj8udmlzaWJsZUluZGV4ID8/IDAsIGxldmVsOiBjb2x1bW4/LmxldmVsID8/IDAsXG4gICAgICAgICAgICBtY2hDYWNoZTogY29sdW1uID8geyBsZXZlbDogY29sdW1uLmxldmVsLCB2aXNpYmxlSW5kZXg6IGNvbHVtbi52aXNpYmxlSW5kZXggfSA6IHt9IGFzIENvbHVtbkdyb3Vwc0NhY2hlLFxuICAgICAgICAgICAgbGF5b3V0OiBjb2x1bW4gJiYgY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8ge1xuICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiBjb2x1bW4ucm93U3RhcnQsIGNvbFN0YXJ0OiBjb2x1bW4uY29sU3RhcnQsXG4gICAgICAgICAgICAgICAgcm93RW5kOiBjb2x1bW4ucm93RW5kLCBjb2xFbmQ6IGNvbHVtbi5jb2xFbmQsIGNvbHVtblZpc2libGVJbmRleDogY29sdW1uLnZpc2libGVJbmRleFxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVNQ0hlYWRlck5hdihrZXk6IHN0cmluZywgY3RybDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBuZXdIZWFkZXJOb2RlOiBDb2x1bW5Hcm91cHNDYWNoZSA9IHtcbiAgICAgICAgICAgIHZpc2libGVJbmRleDogdGhpcy5hY3RpdmVOb2RlLm1jaENhY2hlLnZpc2libGVJbmRleCxcbiAgICAgICAgICAgIGxldmVsOiB0aGlzLmFjdGl2ZU5vZGUubWNoQ2FjaGUubGV2ZWxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0aXZlQ29sID0gdGhpcy5jdXJyZW50QWN0aXZlQ29sdW1uO1xuICAgICAgICBjb25zdCBsYXN0R3JvdXBJbmRleCA9IE1hdGgubWF4KC4uLiB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuXG4gICAgICAgICAgICBmaWx0ZXIoYyA9PiBjLmxldmVsIDw9IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCkubWFwKGNvbCA9PiBjb2wudmlzaWJsZUluZGV4KSk7XG4gICAgICAgIGxldCBuZXh0Q29sID0gYWN0aXZlQ29sO1xuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygnbGVmdCcpIHx8IGtleSA9PT0gJ2hvbWUnKSAmJiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjdHJsIHx8IGtleSA9PT0gJ2hvbWUnID8gMCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gLSAxO1xuICAgICAgICAgICAgbmV4dENvbCA9IHRoaXMuZ2V0TmV4dENvbHVtbk1DSChpbmRleCk7XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleCA9IG5leHRDb2wudmlzaWJsZUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmICgoa2V5LmluY2x1ZGVzKCdyaWdodCcpIHx8IGtleSA9PT0gJ2VuZCcpICYmIGFjdGl2ZUNvbC52aXNpYmxlSW5kZXggPCBsYXN0R3JvdXBJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFZJbmRleCA9IGFjdGl2ZUNvbC5jaGlsZHJlbiA/IE1hdGgubWF4KC4uLmFjdGl2ZUNvbC5hbGxDaGlsZHJlbi5tYXAoYyA9PiBjLnZpc2libGVJbmRleCkpICsgMSA6XG4gICAgICAgICAgICAgICAgYWN0aXZlQ29sLnZpc2libGVJbmRleCArIDE7XG4gICAgICAgICAgICBuZXh0Q29sID0gY3RybCB8fCBrZXkgPT09ICdlbmQnID8gdGhpcy5nZXROZXh0Q29sdW1uTUNIKHRoaXMubGFzdENvbHVtbkluZGV4KSA6IHRoaXMuZ2V0TmV4dENvbHVtbk1DSChuZXh0VkluZGV4KTtcbiAgICAgICAgICAgIG5ld0hlYWRlck5vZGUudmlzaWJsZUluZGV4ID0gbmV4dENvbC52aXNpYmxlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdHJsICYmIGtleS5pbmNsdWRlcygndXAnKSAmJiB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICBuZXh0Q29sID0gYWN0aXZlQ29sLnBhcmVudDtcbiAgICAgICAgICAgIG5ld0hlYWRlck5vZGUubGV2ZWwgPSBuZXh0Q29sLmxldmVsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3RybCAmJiBrZXkuaW5jbHVkZXMoJ2Rvd24nKSAmJiBhY3RpdmVDb2wuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIG5leHRDb2wgPSBhY3RpdmVDb2wuY2hpbGRyZW4uZmluZChjID0+IGMudmlzaWJsZUluZGV4ID09PSBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleCkgfHxcbiAgICAgICAgICAgICAgICBhY3RpdmVDb2wuY2hpbGRyZW4udG9BcnJheSgpLnNvcnQoKGEsIGIpID0+IGIudmlzaWJsZUluZGV4IC0gYS52aXNpYmxlSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlSW5kZXggPCBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleClbMF07XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLmxldmVsID0gbmV4dENvbC5sZXZlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh7XG4gICAgICAgICAgICByb3c6IHRoaXMuYWN0aXZlTm9kZS5yb3csXG4gICAgICAgICAgICBjb2x1bW46IG5leHRDb2wudmlzaWJsZUluZGV4LFxuICAgICAgICAgICAgbGV2ZWw6IG5leHRDb2wubGV2ZWwsXG4gICAgICAgICAgICBtY2hDYWNoZTogbmV3SGVhZGVyTm9kZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbChuZXh0Q29sLnZpc2libGVJbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVNQ0hFeHBhbmRDb2xsYXBzZShrZXksIGNvbHVtbikge1xuICAgICAgICBpZiAoIWNvbHVtbi5jaGlsZHJlbiB8fCAhY29sdW1uLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb2x1bW4uZXhwYW5kZWQgJiYgUk9XX0VYUEFORF9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBjb2x1bW4uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5leHBhbmRlZCAmJiBST1dfQ09MTEFQU0VfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgY29sdW1uLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNvbHVtblNlbGVjdGlvbihjb2x1bW4sIGV2ZW50KSB7XG4gICAgICAgIGlmICghY29sdW1uLnNlbGVjdGFibGUgfHwgdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsZWFyU2VsZWN0aW9uID0gdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuc2luZ2xlO1xuICAgICAgICBjb25zdCBjb2x1bW5zVG9TZWxlY3QgPSAhY29sdW1uLmNoaWxkcmVuID8gW2NvbHVtbi5maWVsZF0gOlxuICAgICAgICAgICAgY29sdW1uLmFsbENoaWxkcmVuLmZpbHRlcihjID0+ICFjLmhpZGRlbiAmJiBjLnNlbGVjdGFibGUgJiYgIWMuY29sdW1uR3JvdXApLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICBpZiAoY29sdW1uLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdENvbHVtbnMoY29sdW1uc1RvU2VsZWN0LCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RDb2x1bW5zKGNvbHVtbnNUb1NlbGVjdCwgY2xlYXJTZWxlY3Rpb24sIGZhbHNlLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5leHRDb2x1bW5NQ0godmlzaWJsZUluZGV4KSB7XG4gICAgICAgIGxldCBjb2wgPSB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlWaXNpYmxlSW5kZXgodmlzaWJsZUluZGV4KTtcbiAgICAgICAgbGV0IHBhcmVudCA9IGNvbC5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChwYXJlbnQgJiYgY29sLmxldmVsID4gdGhpcy5hY3RpdmVOb2RlLm1jaENhY2hlLmxldmVsKSB7XG4gICAgICAgICAgICBjb2wgPSBjb2wucGFyZW50O1xuICAgICAgICAgICAgcGFyZW50ID0gY29sLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGN1cnJlbnRBY3RpdmVDb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuZmluZChjID0+IGMudmlzaWJsZUluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICYmIGMubGV2ZWwgPT09IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGl2ZU5vZGUockluZGV4OiBudW1iZXIsIGNJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU5vZGUgPyB0aGlzLmFjdGl2ZU5vZGUucm93ID09PSBySW5kZXggJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA9PT0gY0luZGV4IDogZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1RvZ2dsZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gUk9XX0NPTExBUFNFX0tFWVMuaGFzKGtleSkgfHwgUk9XX0VYUEFORF9LRVlTLmhhcyhrZXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBZGRLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFJPV19BRERfS0VZUy5oYXMoa2V5KTtcbiAgICB9XG59XG4iXX0=
742
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUNILGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXlCLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXRGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFjdkUsY0FBYztBQUVkLE1BQU0sT0FBTyx3QkFBd0I7SUFNakMsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxVQUFVLENBQUMsS0FBa0I7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQXNCLFFBQXNCO1FBQXRCLGFBQVEsR0FBUixRQUFRLENBQWM7UUFackMsZ0JBQVcsR0FBZ0IsRUFBaUIsQ0FBQztRQUM3QyxtQkFBYyxHQUFnQixFQUFpQixDQUFDO1FBQzdDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztJQVVZLENBQUM7SUFFMUMsZ0JBQWdCLENBQUMsS0FBb0I7UUFDeEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFD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QUFDLENBQUM7SUFDOUgsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjLEVBQUUsTUFBYztRQUMvQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RyxDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVc7UUFDM0IsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQVc7UUFDeEIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OEdBcHdCUSx3QkFBd0I7a0hBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICBOQVZJR0FUSU9OX0tFWVMsXG4gICAgUk9XX0NPTExBUFNFX0tFWVMsXG4gICAgUk9XX0VYUEFORF9LRVlTLFxuICAgIFNVUFBPUlRFRF9LRVlTLFxuICAgIEhPUklaT05UQUxfTkFWX0tFWVMsXG4gICAgSEVBREVSX0tFWVMsXG4gICAgUk9XX0FERF9LRVlTLFxuICAgIFBsYXRmb3JtVXRpbFxufSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSwgR3JpZFNlbGVjdGlvbk1vZGUsIEZpbHRlck1vZGUgfSBmcm9tICcuL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBJQWN0aXZlTm9kZUNoYW5nZUV2ZW50QXJncyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hHcmlkR3JvdXBCeVJvd0NvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC9ncm91cGJ5LXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSU11bHRpUm93TGF5b3V0Tm9kZSB9IGZyb20gJy4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkdyb3Vwc0NhY2hlIHtcbiAgICBsZXZlbDogbnVtYmVyO1xuICAgIHZpc2libGVJbmRleDogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZlTm9kZSB7XG4gICAgZ3JpZElEPzogc3RyaW5nO1xuICAgIHJvdzogbnVtYmVyO1xuICAgIGNvbHVtbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBtY2hDYWNoZT86IENvbHVtbkdyb3Vwc0NhY2hlO1xuICAgIGxheW91dD86IElNdWx0aVJvd0xheW91dE5vZGU7XG59XG5cbi8qKiBAaGlkZGVuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZE5hdmlnYXRpb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ3JpZDogR3JpZFR5cGU7XG4gICAgcHVibGljIF9hY3RpdmVOb2RlOiBJQWN0aXZlTm9kZSA9IHt9IGFzIElBY3RpdmVOb2RlO1xuICAgIHB1YmxpYyBsYXN0QWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUgPSB7fSBhcyBJQWN0aXZlTm9kZTtcbiAgICBwcm90ZWN0ZWQgcGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBhY3RpdmVOb2RlKHZhbHVlOiBJQWN0aXZlTm9kZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmVOb2RlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHsgfVxuXG4gICAgcHVibGljIGhhbmRsZU5hdmlnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCAmJiBOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQucmVwZWF0ICYmIFNVUFBPUlRFRF9LRVlTLmhhcyhrZXkpIHx8IChrZXkgPT09ICd0YWInICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQucmVwZWF0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwYXRjaEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSB8fCAhKFNVUFBPUlRFRF9LRVlTLmhhcyhrZXkpIHx8IChrZXkgPT09ICd0YWInICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsKSkgJiZcbiAgICAgICAgICAgICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93RWRpdGluZ0Jsb2NrZWQgJiYgIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hpZnQgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkgJiYgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmlzRGF0YVJvdyh0aGlzLmFjdGl2ZU5vZGUucm93KSA/ICdkYXRhQ2VsbCcgOlxuICAgICAgICAgICAgdGhpcy5pc0RhdGFSb3codGhpcy5hY3RpdmVOb2RlLnJvdywgdHJ1ZSkgPyAnc3VtbWFyeUNlbGwnIDogJ2dyb3VwUm93JztcbiAgICAgICAgaWYgKHRoaXMuZW1pdEtleURvd24odHlwZSwgdGhpcy5hY3RpdmVOb2RlLnJvdywgZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBbHQoa2V5LCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFsnICcsICdzcGFjZWJhcicsICdzcGFjZSddLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmtleWJvYXJkU3RhdGVPbktleWRvd24odGhpcy5hY3RpdmVOb2RlLCBzaGlmdCwgc2hpZnQgJiYga2V5ID09PSAndGFiJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE5leHRQb3NpdGlvbih0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBrZXksIHNoaWZ0LCBjdHJsLCBldmVudCk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlSW5Cb2R5KHBvc2l0aW9uLnJvd0luZGV4LCBwb3NpdGlvbi5jb2xJbmRleCwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIG9iai50YXJnZXQuYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN1bW1hcnlOYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsTmF2KGV2ZW50LCBldmVudC5rZXkudG9Mb3dlckNhc2UoKSwgdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCwgJ3N1bW1hcnlDZWxsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGVhZGVyTmF2aWdhdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFIRUFERVJfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gZXZlbnQuc2hpZnRLZXk7XG4gICAgICAgIGNvbnN0IGFsdCA9IGV2ZW50LmFsdEtleTtcblxuICAgICAgICB0aGlzLnBlcmZvcm1IZWFkZXJLZXlDb21iaW5hdGlvbih0aGlzLmN1cnJlbnRBY3RpdmVDb2x1bW4sIGtleSwgc2hpZnQsIGN0cmwsIGFsdCwgZXZlbnQpO1xuICAgICAgICBpZiAoc2hpZnQgfHwgYWx0IHx8IChjdHJsICYmIChrZXkuaW5jbHVkZXMoJ2Rvd24nKSB8fCBrZXkuaW5jbHVkZXMoJ2Rvd24nKSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNDb2x1bW5Hcm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTUNIZWFkZXJOYXYoa2V5LCBjdHJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbE5hdihldmVudCwga2V5LCAtMSwgJ2hlYWRlckNlbGwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c1Rib2R5KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGdyaWRSb3dzID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnRvdGFsSXRlbUNvdW50ID8/IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIGlmIChncmlkUm93cyA8IDEpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgIU9iamVjdC5rZXlzKHRoaXMuYWN0aXZlTm9kZSkubGVuZ3RoIHx8IHRoaXMuYWN0aXZlTm9kZS5yb3cgPCAwIHx8IHRoaXMuYWN0aXZlTm9kZS5yb3cgPiBncmlkUm93cyAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0xhc3RBY3RpdmVOb2RlID0gT2JqZWN0LmtleXModGhpcy5sYXN0QWN0aXZlTm9kZSkubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ2xlYXJTZWxlY3Rpb24gPSBoYXNMYXN0QWN0aXZlTm9kZSAmJiAodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cgPCAwIHx8IHRoaXMubGFzdEFjdGl2ZU5vZGUucm93ID4gZ3JpZFJvd3MgLSAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA+PSAwICYmIHRoaXMubGFzdEFjdGl2ZU5vZGUucm93IDwgZ3JpZFJvd3MgP1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RWaXNpYmxlTm9kZSh0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdykgOiB0aGlzLmZpcnN0VmlzaWJsZU5vZGUoKSk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2xlYXJTZWxlY3Rpb24gfHwgKHRoaXMuZ3JpZC5jZWxsU2VsZWN0aW9uICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5tdWx0aXBsZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2xlYXJDZWxsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8odGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmoudGFyZ2V0Py5hY3RpdmF0ZShldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzTGFzdEFjdGl2ZU5vZGUgJiYgIXRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkKHRoaXMubGFzdEFjdGl2ZU5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiB0aGlzLmFjdGl2ZU5vZGUucm93LCByb3dFbmQ6IHRoaXMuYWN0aXZlTm9kZS5yb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblN0YXJ0OiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBjb2x1bW5FbmQ6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW5cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3RSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c0ZpcnN0Q2VsbChoZWFkZXIgPSB0cnVlKSB7XG4gICAgICAgIGlmICgoaGVhZGVyIHx8IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGgpICYmIHRoaXMuYWN0aXZlTm9kZSAmJlxuICAgICAgICAgICAgKHRoaXMuYWN0aXZlTm9kZS5yb3cgPT09IC0xIHx8IHRoaXMuYWN0aXZlTm9kZS5yb3cgPT09IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAoIWhlYWRlciAmJiAhdGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaG91bGRTY3JvbGxJbnRvVmlldyA9IHRoaXMubGFzdEFjdGl2ZU5vZGUgJiYgKGhlYWRlciAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyAhPT0gLTEpIHx8XG4gICAgICAgICAgICAoIWhlYWRlciAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyAhPT0gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh0aGlzLmZpcnN0VmlzaWJsZU5vZGUoaGVhZGVyID8gLTEgOiB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoKSk7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGxJbnRvVmlldykge1xuICAgICAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc0NvbHVtbkZ1bGx5VmlzaWJsZShjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChjb2x1bW5JbmRleCA8IDAgfHwgdGhpcy5pc0NvbHVtblBpbm5lZChjb2x1bW5JbmRleCwgdGhpcy5mb3JPZkRpcigpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldENvbHVtblVucGlubmVkSW5kZXgoY29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4ICsgMSkgLSB0aGlzLmZvck9mRGlyKCkuZ2V0Q29sdW1uU2Nyb2xsTGVmdChpbmRleCk7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlDb250YWluZXJXaWR0aCA8IHdpZHRoICYmIHRoaXMuZGlzcGxheUNvbnRhaW5lclNjcm9sbExlZnQgPT09IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheUNvbnRhaW5lcldpZHRoID49IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4ICsgMSkgLSB0aGlzLmRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0ICYmXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0IDw9IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkUGVyZm9ybUhvcml6b250YWxTY3JvbGwodmlzaWJsZUNvbEluZGV4OiBudW1iZXIsIHJvd0luZGV4ID0gLTEpIHtcbiAgICAgICAgaWYgKHZpc2libGVDb2xJbmRleCA8IDAgfHwgdmlzaWJsZUNvbEluZGV4ID4gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IHJvd0luZGV4ID4gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0NvbHVtbkZ1bGx5VmlzaWJsZSh2aXNpYmxlQ29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleF07XG4gICAgICAgIHJldHVybiByb3cuZXhwcmVzc2lvbiB8fCByb3cuZGV0YWlsc0RhdGEgPyBmYWxzZSA6ICF0aGlzLmlzQ29sdW1uRnVsbHlWaXNpYmxlKHZpc2libGVDb2xJbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbCh0YXJnZXRSb3dJbmRleDogbnVtYmVyLCBfdmlzaWJsZUNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5pc1JlY29yZFBpbm5lZEJ5Vmlld0luZGV4KHRhcmdldFJvd0luZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcm9sbFJvd0luZGV4ID0gdGhpcy5ncmlkLmhhc1Bpbm5lZFJlY29yZHMgJiYgdGhpcy5ncmlkLmlzUm93UGlubmluZ1RvVG9wID9cbiAgICAgICAgICAgIHRhcmdldFJvd0luZGV4IC0gdGhpcy5ncmlkLnBpbm5lZERhdGFWaWV3Lmxlbmd0aCA6IHRhcmdldFJvd0luZGV4O1xuICAgICAgICBjb25zdCB0YXJnZXRSb3cgPSB0aGlzLmdldFJvd0VsZW1lbnRCeUluZGV4KHRhcmdldFJvd0luZGV4KTtcbiAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmdldFNpemVBdChzY3JvbGxSb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuZ3JpZC5jYWxjSGVpZ2h0ID8gTWF0aC5jZWlsKHRoaXMuZ3JpZC5jYWxjSGVpZ2h0KSA6IDA7XG4gICAgICAgIGNvbnN0IGVuZFRvcE9mZnNldCA9IHRhcmdldFJvdyA/IHRhcmdldFJvdy5vZmZzZXRUb3AgKyByb3dIZWlnaHQgKyB0aGlzLmNvbnRhaW5lclRvcE9mZnNldCA6IGNvbnRhaW5lckhlaWdodCArIHJvd0hlaWdodDtcbiAgICAgICAgLy8gdGhpcyBpcyB3b3JrYXJvdW5kOiBlbmRUb3BPZmZzZXQgLSBjb250YWluZXJIZWlnaHQgPiA1IGFuZCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aDogY29udGFpbmVySGVpZ2h0IDwgZW5kVG9wT2Zmc2V0XG4gICAgICAgIC8vIHdoZW4gdGhlIHBhZ2UgaXMgem9vbWVkIHRoZSBncmlkIGRvZXMgbm90IHNjcm9sbCB0aGUgcm93IGNvbXBsZXRlbHkgaW4gdGhlIHZpZXdcbiAgICAgICAgcmV0dXJuICF0YXJnZXRSb3cgfHwgdGFyZ2V0Um93Lm9mZnNldFRvcCA8IE1hdGguYWJzKHRoaXMuY29udGFpbmVyVG9wT2Zmc2V0KVxuICAgICAgICAgICAgfHwgY29udGFpbmVySGVpZ2h0ICYmIGVuZFRvcE9mZnNldCAtIGNvbnRhaW5lckhlaWdodCA+IDU7XG4gICAgfVxuXG4gICAgcHVibGljIHBlcmZvcm1WZXJ0aWNhbFNjcm9sbFRvQ2VsbChyb3dJbmRleDogbnVtYmVyLCB2aXNpYmxlQ29sSW5kZXggPSAtMSwgY2I/OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgLy8gT25seSBmb3IgdG9wIHBpbm5pbmcgd2UgbmVlZCB0byBzdWJ0cmFjdCBwaW5uZWQgY291bnQgYmVjYXVzZSB2aXJ0dWFsaXphdGlvbiBpbmRleGluZyBkb2Vzbid0IGNvdW50IHBpbm5lZCByb3dzLlxuICAgICAgICBjb25zdCBzY3JvbGxSb3dJbmRleCA9IHRoaXMuZ3JpZC5oYXNQaW5uZWRSZWNvcmRzICYmIHRoaXMuZ3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCA/XG4gICAgICAgICAgICByb3dJbmRleCAtIHRoaXMuZ3JpZC5waW5uZWREYXRhVmlldy5sZW5ndGggOiByb3dJbmRleDtcbiAgICAgICAgdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvKHNjcm9sbFJvd0luZGV4KTtcbiAgICAgICAgdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmNodW5rTG9hZFxuICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsVG9DZWxsKHZpc2libGVDb2x1bW5JbmRleDogbnVtYmVyLCBjYj86ICgpID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dMaXN0IDwgMSAmJiB0aGlzLmdyaWQuc3VtbWFyaWVzUm93TGlzdC5sZW5ndGggPCAxICYmIHRoaXMuZ3JpZC5oYXNDb2x1bW5Hcm91cHMpIHtcbiAgICAgICAgICAgIGxldCBjb2x1bW4gPSB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlWaXNpYmxlSW5kZXgodmlzaWJsZUNvbHVtbkluZGV4KTtcbiAgICAgICAgICAgIHdoaWxlIChjb2x1bW4ucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gY29sdW1uLnBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5JbmRleCA9IHRoaXMuZm9yT2ZEaXIoKS5pZ3hGb3JPZi5pbmRleE9mKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsKHZpc2libGVDb2x1bW5JbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ncmlkLnBhcmVudFZpcnREaXIuY2h1bmtMb2FkXG4gICAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvck9mRGlyKCkuc2Nyb2xsVG8odGhpcy5nZXRDb2x1bW5VbnBpbm5lZEluZGV4KHZpc2libGVDb2x1bW5JbmRleCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0RhdGFSb3cocm93SW5kZXg6IG51bWJlciwgaW5jbHVkZVN1bW1hcnkgPSBmYWxzZSkge1xuICAgICAgICBsZXQgY3VyUm93OiBhbnk7XG5cbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMCB8fCByb3dJbmRleCA+IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBjdXJSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbcm93SW5kZXggLSB0aGlzLmdyaWQudmlydHVhbGl6YXRpb25TdGF0ZS5zdGFydEluZGV4XTtcbiAgICAgICAgICAgIGlmICghY3VyUm93KSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgZGF0YSBpcyByZW1vdGUsIHJlY29yZCBtaWdodCBub3QgYmUgaW4gdGhlIHZpZXcgeWV0LlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuaXNSZW1vdGUgJiYgcm93SW5kZXggPj0gMCAmJiByb3dJbmRleCA8PSAodGhpcy5ncmlkIGFzIGFueSkudG90YWxJdGVtQ291bnQgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VyUm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VyUm93ICYmICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKGN1clJvdykgJiYgIXRoaXMuZ3JpZC5pc0RldGFpbFJlY29yZChjdXJSb3cpXG4gICAgICAgICAgICAmJiAhY3VyUm93LmNoaWxkR3JpZHNEYXRhICYmIChpbmNsdWRlU3VtbWFyeSB8fCAhY3VyUm93LnN1bW1hcmllcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzR3JvdXBSb3cocm93SW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IHJvd0luZGV4ID4gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbcm93SW5kZXhdO1xuICAgICAgICByZXR1cm4gY3VyUm93ICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQoY3VyUm93KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWN0aXZlTm9kZShhY3RpdmVOb2RlOiBJQWN0aXZlTm9kZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmVOb2RlQ2hhbmdlZChhY3RpdmVOb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IGFjdGl2ZU5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuYWN0aXZlTm9kZSwgYWN0aXZlTm9kZSk7XG5cbiAgICAgICAgY29uc3QgY3VyclJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1thY3RpdmVOb2RlLnJvd107XG4gICAgICAgIGNvbnN0IHR5cGU6IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSA9IGFjdGl2ZU5vZGUucm93IDwgMCA/ICdoZWFkZXJDZWxsJyA6XG4gICAgICAgICAgICB0aGlzLmlzRGF0YVJvdyhhY3RpdmVOb2RlLnJvdykgPyAnZGF0YUNlbGwnIDpcbiAgICAgICAgICAgICAgICBjdXJyUm93ICYmIHRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQoY3VyclJvdykgPyAnZ3JvdXBSb3cnIDpcbiAgICAgICAgICAgICAgICAgICAgY3VyclJvdyAmJiB0aGlzLmdyaWQuaXNEZXRhaWxSZWNvcmQoY3VyclJvdykgPyAnbWFzdGVyRGV0YWlsUm93JyA6ICdzdW1tYXJ5Q2VsbCc7XG5cbiAgICAgICAgY29uc3QgYXJnczogSUFjdGl2ZU5vZGVDaGFuZ2VFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3c6IHRoaXMuYWN0aXZlTm9kZS5yb3csXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sXG4gICAgICAgICAgICBsZXZlbDogdGhpcy5hY3RpdmVOb2RlLmxldmVsLFxuICAgICAgICAgICAgdGFnOiB0eXBlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ncmlkLmFjdGl2ZU5vZGVDaGFuZ2UuZW1pdChhcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmVOb2RlQ2hhbmdlZChhY3RpdmVOb2RlOiBJQWN0aXZlTm9kZSkge1xuICAgICAgICBsZXQgaXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNoZWNrSW5uZXJQcm9wID0gKGFjaXZlTm9kZTogQ29sdW1uR3JvdXBzQ2FjaGUgfCBJTXVsdGlSb3dMYXlvdXROb2RlLCBwcm9wKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWFjaXZlTm9kZSkge1xuICAgICAgICAgICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFjaXZlTm9kZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlTm9kZVtwcm9wXVtwcm9wTmFtZV0gIT09IGFjaXZlTm9kZVtwcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYWN0aXZlTm9kZSk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgcHJvcHMpIHtcbiAgICAgICAgICAgIGlmICghIXRoaXMuYWN0aXZlTm9kZVtwcm9wTmFtZV0gJiYgdHlwZW9mIHRoaXMuYWN0aXZlTm9kZVtwcm9wTmFtZV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tJbm5lclByb3AoYWN0aXZlTm9kZVtwcm9wTmFtZV0sIHByb3BOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVOb2RlW3Byb3BOYW1lXSAhPT0gYWN0aXZlTm9kZVtwcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzQ2hhbmdlZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0TmV4dFBvc2l0aW9uKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIGtleTogc3RyaW5nLCBzaGlmdDogYm9vbGVhbiwgY3RybDogYm9vbGVhbiwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCwgdHJ1ZSkgJiYgKGtleS5pbmRleE9mKCdkb3duJykgPCAwIHx8IGtleS5pbmRleE9mKCd1cCcpIDwgMCkgJiYgY3RybCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcm93SW5kZXgsIGNvbEluZGV4IH07XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BhZ2Vkb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ3BhZ2V1cCc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAncGFnZWRvd24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxOZXh0UGFnZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxQcmV2UGFnZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0Q2VsbCA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5jaHVua0xvYWRcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0Q2VsbCAmJiB0aGlzLmdyaWQucm93TGlzdC5tYXAociA9PiByLmluZGV4KS5pbmRleE9mKGVkaXRDZWxsLnJvd0luZGV4KSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGFiJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVkaXRpbmcoc2hpZnQsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kTGFzdERhdGFSb3dJbmRleCgpIDogdGhpcy5hY3RpdmVOb2RlLnJvdztcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IHRoaXMubGFzdENvbHVtbkluZGV4O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9tZSc6XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kRmlyc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3c7XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3dsZWZ0JzpcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gY3RybCA/IDAgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93cmlnaHQnOlxuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gY3RybCA/IHRoaXMubGFzdENvbHVtbkluZGV4IDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiArIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICAgICAgICBpZiAoY3RybCAmJiAhdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpIHx8ICh0aGlzLmdyaWQucm93RWRpdGFibGUgJiYgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICE9PSB1bmRlZmluZWQgPyB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIDogMDtcbiAgICAgICAgICAgICAgICByb3dJbmRleCA9IGN0cmwgPyB0aGlzLmZpbmRGaXJzdERhdGFSb3dJbmRleCgpIDogdGhpcy5hY3RpdmVOb2RlLnJvdyAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICAgICAgaWYgKChjdHJsICYmICF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCkpIHx8ICh0aGlzLmdyaWQucm93RWRpdGFibGUgJiYgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICE9PSB1bmRlZmluZWQgPyB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIDogMDtcbiAgICAgICAgICAgICAgICByb3dJbmRleCA9IGN0cmwgPyB0aGlzLmZpbmRMYXN0RGF0YVJvd0luZGV4KCkgOiB0aGlzLmFjdGl2ZU5vZGUucm93ICsgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VudGVyJzpcbiAgICAgICAgICAgIGNhc2UgJ2YyJzpcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2NlbGxfYnlfdmlzaWJsZV9pbmRleCh0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSB8fCAhY2VsbC5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyRWRpdE1vZGUoY2VsbCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICAgIGNhc2UgJ2VzYyc6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5pc0luQ29tcG9zaXRpb25Nb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGxJbkVkaXRNb2RlIHx8IHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRFZGl0KGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzRWRnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlYmFyJzpcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICBjb25zdCByb3dPYmogPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2J5X2luZGV4KHRoaXMuYWN0aXZlTm9kZS5yb3cpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaXNSb3dTZWxlY3RhYmxlICYmIHJvd09iaikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGFSb3cocm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93T2JqLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3cocm93T2JqLmtleSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dCeUlkKHJvd09iai5rZXksIGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNHcm91cFJvdyhyb3dJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICgocm93T2JqIGFzIGFueSkgYXMgSWd4R3JpZEdyb3VwQnlSb3dDb21wb25lbnQpLm9uR3JvdXBTZWxlY3RvckNsaWNrKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHJvd0luZGV4LCBjb2xJbmRleCB9O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBob3Jpem9udGFsTmF2KGV2ZW50OiBLZXlib2FyZEV2ZW50LCBrZXk6IHN0cmluZywgcm93SW5kZXg6IG51bWJlciwgdGFnOiBHcmlkS2V5ZG93blRhcmdldFR5cGUpIHtcbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGlmICghSE9SSVpPTlRBTF9OQVZfS0VZUy5oYXMoZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlLnJvdyA9IHJvd0luZGV4O1xuICAgICAgICBpZiAocm93SW5kZXggPiAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbWl0S2V5RG93bignc3VtbWFyeUNlbGwnLCB0aGlzLmFjdGl2ZU5vZGUucm93LCBldmVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdBY3RpdmVOb2RlID0ge1xuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLFxuICAgICAgICAgICAgbWNoQ2FjaGU6IHtcbiAgICAgICAgICAgICAgICBsZXZlbDogdGhpcy5hY3RpdmVOb2RlLmxldmVsLFxuICAgICAgICAgICAgICAgIHZpc2libGVJbmRleDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtblxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICgoa2V5LmluY2x1ZGVzKCdsZWZ0JykgfHwga2V5ID09PSAnaG9tZScpICYmIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gPiAwKSB7XG4gICAgICAgICAgICBuZXdBY3RpdmVOb2RlLmNvbHVtbiA9IGN0cmwgfHwga2V5ID09PSAnaG9tZScgPyAwIDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChrZXkuaW5jbHVkZXMoJ3JpZ2h0JykgfHwga2V5ID09PSAnZW5kJykgJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA8IHRoaXMubGFzdENvbHVtbkluZGV4KSB7XG4gICAgICAgICAgICBuZXdBY3RpdmVOb2RlLmNvbHVtbiA9IGN0cmwgfHwga2V5ID09PSAnZW5kJyA/IHRoaXMubGFzdENvbHVtbkluZGV4IDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFnID09PSAnaGVhZGVyQ2VsbCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeVZpc2libGVJbmRleChuZXdBY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgICAgICBuZXdBY3RpdmVOb2RlLm1jaENhY2hlLmxldmVsID0gY29sdW1uLmxldmVsO1xuICAgICAgICAgICAgbmV3QWN0aXZlTm9kZS5tY2hDYWNoZS52aXNpYmxlSW5kZXggPSBjb2x1bW4udmlzaWJsZUluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRBY3RpdmVOb2RlKHsgcm93OiB0aGlzLmFjdGl2ZU5vZGUucm93LCBjb2x1bW46IG5ld0FjdGl2ZU5vZGUuY29sdW1uLCBtY2hDYWNoZTogbmV3QWN0aXZlTm9kZS5tY2hDYWNoZSB9KTtcbiAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxhc3RDb2x1bW5JbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuZ3JpZC52aXNpYmxlQ29sdW1ucy5tYXAoY29sID0+IGNvbC52aXNpYmxlSW5kZXgpKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBkaXNwbGF5Q29udGFpbmVyV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuZ3JpZC5wYXJlbnRWaXJ0RGlyLmRjLmluc3RhbmNlLl92aWV3Q29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZGlzcGxheUNvbnRhaW5lclNjcm9sbExlZnQoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5ncmlkLmhlYWRlckNvbnRhaW5lci5zY3JvbGxQb3NpdGlvbik7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgY29udGFpbmVyVG9wT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmRjLmluc3RhbmNlLl92aWV3Q29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS50b3AsIDEwKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q29sdW1uVW5waW5uZWRJbmRleCh2aXNpYmxlQ29sdW1uSW5kZXg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWQudW5waW5uZWRDb2x1bW5zLmZpbmQoKGNvbCkgPT4gIWNvbC5jb2x1bW5Hcm91cCAmJiBjb2wudmlzaWJsZUluZGV4ID09PSB2aXNpYmxlQ29sdW1uSW5kZXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnBpbm5lZENvbHVtbnMubGVuZ3RoID8gdGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucy5maWx0ZXIoKGMpID0+ICFjLmNvbHVtbkdyb3VwKS5pbmRleE9mKGNvbHVtbikgOlxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtbkluZGV4O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmb3JPZkRpcigpOiBJZ3hGb3JPZkRpcmVjdGl2ZTxhbnk+IHtcbiAgICAgICAgY29uc3QgZm9yT2ZEaXIgPSB0aGlzLmdyaWQuZGF0YVJvd0xpc3QubGVuZ3RoID4gMCA/IHRoaXMuZ3JpZC5kYXRhUm93TGlzdC5maXJzdC52aXJ0RGlyUm93IDogdGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QubGVuZ3RoID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0LmZpcnN0LnZpcnREaXJSb3cgOiB0aGlzLmdyaWQuaGVhZGVyQ29udGFpbmVyO1xuICAgICAgICByZXR1cm4gZm9yT2ZEaXIgYXMgSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlQWx0KGtleTogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyB0b2RvIFRPRE8gUk9XXG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfYnlfaW5kZXgodGhpcy5hY3RpdmVOb2RlLnJvdyk7XG5cbiAgICAgICAgaWYgKCEodGhpcy5pc1RvZ2dsZUtleShrZXkpIHx8IHRoaXMuaXNBZGRLZXkoa2V5KSkgfHwgIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQWRkS2V5KGtleSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZ3JpZCBtdXN0IGJlIGluIHJvdyBlZGl0IG1vZGUgdG8gcGVyZm9ybSByb3cgYWRkaW5nIScpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIHJvdy50cmVlUm93ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJBZGRSb3dNb2RlKHJvdywgdHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJBZGRSb3dNb2RlKHJvdywgZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghcm93LmV4cGFuZGVkICYmIFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgaWYgKHJvdy5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gdXNlIGV4cGFuZGVkIHJvdy5leHBhbmRlZCA9ICFyb3cuZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgKHJvdyBhcyBhbnkpLnRvZ2dsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyb3cua2V5LCB0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocm93LmV4cGFuZGVkICYmIFJPV19DT0xMQVBTRV9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBpZiAocm93LmtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyB1c2UgZXhwYW5kZWQgcm93LmV4cGFuZGVkID0gIXJvdy5leHBhbmRlZDtcbiAgICAgICAgICAgICAgICAocm93IGFzIGFueSkudG9nZ2xlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJvdy5rZXksIGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRWRpdGluZyhzaGlmdDogYm9vbGVhbiwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHNoaWZ0ID8gdGhpcy5ncmlkLmdldFByZXZpb3VzQ2VsbCh0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBjb2wgPT4gY29sLmVkaXRhYmxlKSA6XG4gICAgICAgICAgICB0aGlzLmdyaWQuZ2V0TmV4dENlbGwodGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwgY29sID0+IGNvbC5lZGl0YWJsZSk7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0luRWRpdE1vZGUgJiYgdGhpcy5pc0FjdGl2ZU5vZGUobmV4dC5yb3dJbmRleCwgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kRWRpdCh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICgodGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0luRWRpdE1vZGUgJiYgdGhpcy5ncmlkLnJvd0VkaXRUYWJzLmxlbmd0aCkgJiZcbiAgICAgICAgICAgICh0aGlzLmFjdGl2ZU5vZGUucm93ICE9PSBuZXh0LnJvd0luZGV4IHx8IHRoaXMuaXNBY3RpdmVOb2RlKG5leHQucm93SW5kZXgsIG5leHQudmlzaWJsZUNvbHVtbkluZGV4KSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudXBkYXRlQ2VsbCh0cnVlLCBldmVudCk7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRUYWJzLmxhc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0VGFicy5maXJzdC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSAmJiAhdGhpcy5ncmlkLnJvd0VkaXRUYWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHNoaWZ0ICYmIG5leHQucm93SW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5yb3cgJiYgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBuZXh0LnZpc2libGVDb2x1bW5JbmRleCA9IHRoaXMuZ3JpZC5sYXN0RWRpdGFibGVDb2x1bW5JbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNoaWZ0ICYmIG5leHQucm93SW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5yb3cgJiYgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBuZXh0LnZpc2libGVDb2x1bW5JbmRleCA9IHRoaXMuZ3JpZC5maXJzdEVkaXRhYmxlQ29sdW1uSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5leHQucm93SW5kZXggPSB0aGlzLmFjdGl2ZU5vZGUucm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUluQm9keShuZXh0LnJvd0luZGV4LCBuZXh0LnZpc2libGVDb2x1bW5JbmRleCwgKG9iaikgPT4ge1xuICAgICAgICAgICAgb2JqLnRhcmdldC5hY3RpdmF0ZShldmVudCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG5hdmlnYXRlSW5Cb2R5KHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiOiAoYXJnOiBhbnkpID0+IHZvaWQgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkUG9zaXRpb24ocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCkgfHwgdGhpcy5pc0FjdGl2ZU5vZGUocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGVUbyhyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4LCBjYik7XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgZW1pdEtleURvd24odHlwZTogR3JpZEtleWRvd25UYXJnZXRUeXBlLCByb3dJbmRleCwgZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QudG9BcnJheSgpLmNvbmNhdCh0aGlzLmdyaWQucm93TGlzdC50b0FycmF5KCkpLmZpbmQociA9PiByLmluZGV4ID09PSByb3dJbmRleCk7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXQgPSB0eXBlID09PSAnZ3JvdXBSb3cnID8gcm93IDpcbiAgICAgICAgICAgIHR5cGUgPT09ICdkYXRhQ2VsbCcgPyByb3cuY2VsbHM/LmZpbmQoYyA9PiBjLnZpc2libGVDb2x1bW5JbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbikgOlxuICAgICAgICAgICAgICAgIHJvdy5zdW1tYXJ5Q2VsbHM/LmZpbmQoYyA9PiBjLnZpc2libGVDb2x1bW5JbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgIGNvbnN0IGtleWRvd25BcmdzID0geyB0YXJnZXRUeXBlOiB0eXBlLCBldmVudCwgY2FuY2VsOiBmYWxzZSwgdGFyZ2V0IH07XG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkS2V5ZG93bi5lbWl0KGtleWRvd25BcmdzKTtcbiAgICAgICAgaWYgKGtleWRvd25BcmdzLmNhbmNlbCAmJiB0eXBlID09PSAnZGF0YUNlbGwnKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uua2V5Ym9hcmRTdGF0ZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGtleWRvd25BcmdzLmNhbmNlbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc0NvbHVtblBpbm5lZChjb2x1bW5JbmRleDogbnVtYmVyLCBmb3JPZkRpcjogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55Pik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsID0gZm9yT2ZEaXIuZ2V0U2Nyb2xsKCk7XG4gICAgICAgIHJldHVybiAoIWhvcml6b250YWxTY3JvbGwuY2xpZW50V2lkdGggfHwgdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KGNvbHVtbkluZGV4KT8ucGlubmVkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZmluZEZpcnN0RGF0YVJvd0luZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmluZEluZGV4KHJlYyA9PiAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChyZWMpICYmICF0aGlzLmdyaWQuaXNEZXRhaWxSZWNvcmQocmVjKSAmJiAhcmVjLnN1bW1hcmllcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRMYXN0RGF0YVJvd0luZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICgodGhpcy5ncmlkIGFzIGFueSkudG90YWxJdGVtQ291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5ncmlkIGFzIGFueSkudG90YWxJdGVtQ291bnQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpID0gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhUm93KGkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Um93RWxlbWVudEJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNEZXRhaWxzKSB7XG4gICAgICAgICAgICBjb25zdCBkZXRhaWwgPSB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBbZGV0YWlsPVwidHJ1ZVwiXVtkYXRhLXJvd2luZGV4PVwiJHtpbmRleH1cIl1gKTtcbiAgICAgICAgICAgIGlmIChkZXRhaWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGV0YWlsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93TGlzdC50b0FycmF5KCkuY29uY2F0KHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0LnRvQXJyYXkoKSkuZmluZChyID0+IHIuaW5kZXggPT09IGluZGV4KT8ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNWYWxpZFBvc2l0aW9uKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50ID8/IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIGlmIChyb3dJbmRleCA8IDAgfHwgY29sSW5kZXggPCAwIHx8IGxlbmd0aCAtIDEgPCByb3dJbmRleCB8fCB0aGlzLmxhc3RDb2x1bW5JbmRleCA8IGNvbEluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gIT09IGNvbEluZGV4ICYmICF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCwgdHJ1ZSkgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBwZXJmb3JtSGVhZGVyS2V5Q29tYmluYXRpb24oY29sdW1uLCBrZXksIHNoaWZ0LCBjdHJsLCBhbHQsIGV2ZW50KSB7XG4gICAgICAgIGxldCBkaXJlY3Rpb24gPSB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmZpbmQoZXhwciA9PiBleHByLmZpZWxkTmFtZSA9PT0gY29sdW1uLmZpZWxkKT8uZGlyO1xuICAgICAgICBpZiAoY3RybCAmJiBrZXkuaW5jbHVkZXMoJ3VwJykgJiYgY29sdW1uLnNvcnRhYmxlICYmICFjb2x1bW4uY29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gU29ydGluZ0RpcmVjdGlvbi5Bc2MgPyBTb3J0aW5nRGlyZWN0aW9uLk5vbmUgOiBTb3J0aW5nRGlyZWN0aW9uLkFzYztcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zb3J0KHsgZmllbGROYW1lOiBjb2x1bW4uZmllbGQsIGRpcjogZGlyZWN0aW9uLCBpZ25vcmVDYXNlOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3RybCAmJiBrZXkuaW5jbHVkZXMoJ2Rvd24nKSAmJiBjb2x1bW4uc29ydGFibGUgJiYgIWNvbHVtbi5jb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBTb3J0aW5nRGlyZWN0aW9uLkRlc2MgPyBTb3J0aW5nRGlyZWN0aW9uLk5vbmUgOiBTb3J0aW5nRGlyZWN0aW9uLkRlc2M7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc29ydCh7IGZpZWxkTmFtZTogY29sdW1uLmZpZWxkLCBkaXI6IGRpcmVjdGlvbiwgaWdub3JlQ2FzZTogZmFsc2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoaWZ0ICYmIGFsdCAmJiB0aGlzLmlzVG9nZ2xlS2V5KGtleSkgJiYgIWNvbHVtbi5jb2x1bW5Hcm91cCAmJiBjb2x1bW4uZ3JvdXBhYmxlKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgU29ydGluZ0RpcmVjdGlvbi5Bc2M7XG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdyaWdodCcpKSB7XG4gICAgICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLmdyb3VwQnkoe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgZGlyOiBkaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IGNvbHVtbi5zb3J0aW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGNvbHVtbi5zb3J0U3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwaW5nQ29tcGFyZXI6IGNvbHVtbi5ncm91cGluZ0NvbXBhcmVyLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAodGhpcy5ncmlkIGFzIGFueSkuY2xlYXJHcm91cGluZyhjb2x1bW4uZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA9IGtleS5pbmNsdWRlcygncmlnaHQnKSAmJiAodGhpcy5ncmlkIGFzIGFueSkuaGlkZUdyb3VwZWRDb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGVJbmRleCA9PT0gdGhpcy5sYXN0Q29sdW1uSW5kZXggPyB0aGlzLmxhc3RDb2x1bW5JbmRleCAtIDEgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbHQgJiYgKFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KSB8fCBST1dfQ09MTEFQU0VfS0VZUy5oYXMoa2V5KSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTUNIRXhwYW5kQ29sbGFwc2Uoa2V5LCBjb2x1bW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChbJyAnLCAnc3BhY2ViYXInLCAnc3BhY2UnXS5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNvbHVtblNlbGVjdGlvbihjb2x1bW4sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWx0ICYmIChrZXkgPT09ICdsJyB8fCBrZXkgPT09ICfCrCcpICYmIHRoaXMuZ3JpZC5hbGxvd0FkdmFuY2VkRmlsdGVyaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQub3BlbkFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0cmwgJiYgc2hpZnQgJiYga2V5ID09PSAnbCcgJiYgdGhpcy5ncmlkLmFsbG93RmlsdGVyaW5nICYmICFjb2x1bW4uY29sdW1uR3JvdXAgJiYgY29sdW1uLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuZmlsdGVyTW9kZSA9PT0gRmlsdGVyTW9kZS5leGNlbFN0eWxlRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyRWwgPSB0aGlzLmdyaWQuaGVhZGVyR3JvdXBzLmZpbmQoZyA9PiBnLmFjdGl2ZSkubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS50b2dnbGVGaWx0ZXJEcm9wZG93bihoZWFkZXJFbCwgY29sdW1uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbChjb2x1bW4udmlzaWJsZUluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJlZENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyaW5nU2VydmljZS5pc0ZpbHRlclJvd1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaXJzdFZpc2libGVOb2RlKHJvd0luZGV4Pykge1xuICAgICAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMubGFzdEFjdGl2ZU5vZGUuY29sdW1uICE9PSB1bmRlZmluZWQgPyB0aGlzLmxhc3RBY3RpdmVOb2RlLmNvbHVtbiA6XG4gICAgICAgICAgICB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuc29ydCgoYzEsIGMyKSA9PiBjMS52aXNpYmxlSW5kZXggLSBjMi52aXNpYmxlSW5kZXgpXG4gICAgICAgICAgICAgICAgLmZpbmQoYyA9PiB0aGlzLmlzQ29sdW1uRnVsbHlWaXNpYmxlKGMudmlzaWJsZUluZGV4KSk/LnZpc2libGVJbmRleDtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLmZpbmQoKGNvbCkgPT4gIWNvbC5jb2x1bW5MYXlvdXQgJiYgY29sLnZpc2libGVJbmRleCA9PT0gY29sSW5kZXgpO1xuICAgICAgICBjb25zdCByb3dJbmQgPSByb3dJbmRleCA/IHJvd0luZGV4IDogdGhpcy5ncmlkLnJvd0xpc3QuZmluZChyID0+ICF0aGlzLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbChyLmluZGV4LCBjb2xJbmRleCkpPy5pbmRleDtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgICAgICAgIHJvdzogcm93SW5kID8/IDAsXG4gICAgICAgICAgICBjb2x1bW46IGNvbHVtbj8udmlzaWJsZUluZGV4ID8/IDAsIGxldmVsOiBjb2x1bW4/LmxldmVsID8/IDAsXG4gICAgICAgICAgICBtY2hDYWNoZTogY29sdW1uID8geyBsZXZlbDogY29sdW1uLmxldmVsLCB2aXNpYmxlSW5kZXg6IGNvbHVtbi52aXNpYmxlSW5kZXggfSA6IHt9IGFzIENvbHVtbkdyb3Vwc0NhY2hlLFxuICAgICAgICAgICAgbGF5b3V0OiBjb2x1bW4gJiYgY29sdW1uLmNvbHVtbkxheW91dENoaWxkID8ge1xuICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiBjb2x1bW4ucm93U3RhcnQsIGNvbFN0YXJ0OiBjb2x1bW4uY29sU3RhcnQsXG4gICAgICAgICAgICAgICAgcm93RW5kOiBjb2x1bW4ucm93RW5kLCBjb2xFbmQ6IGNvbHVtbi5jb2xFbmQsIGNvbHVtblZpc2libGVJbmRleDogY29sdW1uLnZpc2libGVJbmRleFxuICAgICAgICAgICAgfSA6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVNQ0hlYWRlck5hdihrZXk6IHN0cmluZywgY3RybDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBuZXdIZWFkZXJOb2RlOiBDb2x1bW5Hcm91cHNDYWNoZSA9IHtcbiAgICAgICAgICAgIHZpc2libGVJbmRleDogdGhpcy5hY3RpdmVOb2RlLm1jaENhY2hlLnZpc2libGVJbmRleCxcbiAgICAgICAgICAgIGxldmVsOiB0aGlzLmFjdGl2ZU5vZGUubWNoQ2FjaGUubGV2ZWxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0aXZlQ29sID0gdGhpcy5jdXJyZW50QWN0aXZlQ29sdW1uO1xuICAgICAgICBjb25zdCBsYXN0R3JvdXBJbmRleCA9IE1hdGgubWF4KC4uLiB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuXG4gICAgICAgICAgICBmaWx0ZXIoYyA9PiBjLmxldmVsIDw9IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCkubWFwKGNvbCA9PiBjb2wudmlzaWJsZUluZGV4KSk7XG4gICAgICAgIGxldCBuZXh0Q29sID0gYWN0aXZlQ29sO1xuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygnbGVmdCcpIHx8IGtleSA9PT0gJ2hvbWUnKSAmJiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjdHJsIHx8IGtleSA9PT0gJ2hvbWUnID8gMCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gLSAxO1xuICAgICAgICAgICAgbmV4dENvbCA9IHRoaXMuZ2V0TmV4dENvbHVtbk1DSChpbmRleCk7XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleCA9IG5leHRDb2wudmlzaWJsZUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmICgoa2V5LmluY2x1ZGVzKCdyaWdodCcpIHx8IGtleSA9PT0gJ2VuZCcpICYmIGFjdGl2ZUNvbC52aXNpYmxlSW5kZXggPCBsYXN0R3JvdXBJbmRleCkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFZJbmRleCA9IGFjdGl2ZUNvbC5jaGlsZHJlbiA/IE1hdGgubWF4KC4uLmFjdGl2ZUNvbC5hbGxDaGlsZHJlbi5tYXAoYyA9PiBjLnZpc2libGVJbmRleCkpICsgMSA6XG4gICAgICAgICAgICAgICAgYWN0aXZlQ29sLnZpc2libGVJbmRleCArIDE7XG4gICAgICAgICAgICBuZXh0Q29sID0gY3RybCB8fCBrZXkgPT09ICdlbmQnID8gdGhpcy5nZXROZXh0Q29sdW1uTUNIKHRoaXMubGFzdENvbHVtbkluZGV4KSA6IHRoaXMuZ2V0TmV4dENvbHVtbk1DSChuZXh0VkluZGV4KTtcbiAgICAgICAgICAgIG5ld0hlYWRlck5vZGUudmlzaWJsZUluZGV4ID0gbmV4dENvbC52aXNpYmxlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdHJsICYmIGtleS5pbmNsdWRlcygndXAnKSAmJiB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICBuZXh0Q29sID0gYWN0aXZlQ29sLnBhcmVudDtcbiAgICAgICAgICAgIG5ld0hlYWRlck5vZGUubGV2ZWwgPSBuZXh0Q29sLmxldmVsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3RybCAmJiBrZXkuaW5jbHVkZXMoJ2Rvd24nKSAmJiBhY3RpdmVDb2wuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIG5leHRDb2wgPSBhY3RpdmVDb2wuY2hpbGRyZW4uZmluZChjID0+IGMudmlzaWJsZUluZGV4ID09PSBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleCkgfHxcbiAgICAgICAgICAgICAgICBhY3RpdmVDb2wuY2hpbGRyZW4udG9BcnJheSgpLnNvcnQoKGEsIGIpID0+IGIudmlzaWJsZUluZGV4IC0gYS52aXNpYmxlSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlSW5kZXggPCBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleClbMF07XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLmxldmVsID0gbmV4dENvbC5sZXZlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh7XG4gICAgICAgICAgICByb3c6IHRoaXMuYWN0aXZlTm9kZS5yb3csXG4gICAgICAgICAgICBjb2x1bW46IG5leHRDb2wudmlzaWJsZUluZGV4LFxuICAgICAgICAgICAgbGV2ZWw6IG5leHRDb2wubGV2ZWwsXG4gICAgICAgICAgICBtY2hDYWNoZTogbmV3SGVhZGVyTm9kZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbChuZXh0Q29sLnZpc2libGVJbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVNQ0hFeHBhbmRDb2xsYXBzZShrZXksIGNvbHVtbikge1xuICAgICAgICBpZiAoIWNvbHVtbi5jaGlsZHJlbiB8fCAhY29sdW1uLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb2x1bW4uZXhwYW5kZWQgJiYgUk9XX0VYUEFORF9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBjb2x1bW4uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5leHBhbmRlZCAmJiBST1dfQ09MTEFQU0VfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgY29sdW1uLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNvbHVtblNlbGVjdGlvbihjb2x1bW4sIGV2ZW50KSB7XG4gICAgICAgIGlmICghY29sdW1uLnNlbGVjdGFibGUgfHwgdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsZWFyU2VsZWN0aW9uID0gdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuc2luZ2xlO1xuICAgICAgICBjb25zdCBjb2x1bW5zVG9TZWxlY3QgPSAhY29sdW1uLmNoaWxkcmVuID8gW2NvbHVtbi5maWVsZF0gOlxuICAgICAgICAgICAgY29sdW1uLmFsbENoaWxkcmVuLmZpbHRlcihjID0+ICFjLmhpZGRlbiAmJiBjLnNlbGVjdGFibGUgJiYgIWMuY29sdW1uR3JvdXApLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICBpZiAoY29sdW1uLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdENvbHVtbnMoY29sdW1uc1RvU2VsZWN0LCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RDb2x1bW5zKGNvbHVtbnNUb1NlbGVjdCwgY2xlYXJTZWxlY3Rpb24sIGZhbHNlLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5leHRDb2x1bW5NQ0godmlzaWJsZUluZGV4KSB7XG4gICAgICAgIGxldCBjb2wgPSB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlWaXNpYmxlSW5kZXgodmlzaWJsZUluZGV4KTtcbiAgICAgICAgbGV0IHBhcmVudCA9IGNvbC5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChwYXJlbnQgJiYgY29sLmxldmVsID4gdGhpcy5hY3RpdmVOb2RlLm1jaENhY2hlLmxldmVsKSB7XG4gICAgICAgICAgICBjb2wgPSBjb2wucGFyZW50O1xuICAgICAgICAgICAgcGFyZW50ID0gY29sLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGN1cnJlbnRBY3RpdmVDb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuZmluZChjID0+IGMudmlzaWJsZUluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICYmIGMubGV2ZWwgPT09IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGl2ZU5vZGUockluZGV4OiBudW1iZXIsIGNJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU5vZGUgPyB0aGlzLmFjdGl2ZU5vZGUucm93ID09PSBySW5kZXggJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA9PT0gY0luZGV4IDogZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1RvZ2dsZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gUk9XX0NPTExBUFNFX0tFWVMuaGFzKGtleSkgfHwgUk9XX0VYUEFORF9LRVlTLmhhcyhrZXkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBZGRLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFJPV19BRERfS0VZUy5oYXMoa2V5KTtcbiAgICB9XG59XG4iXX0=
@@ -5,10 +5,10 @@ import { scaleInVerBottom, scaleInVerTop } from '../animations/main';
5
5
  import { IgxForOfSyncService } from '../directives/for-of/for_of.sync.service';
6
6
  import * as i0 from "@angular/core";
7
7
  export class IgxGridBodyDirective {
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxGridBodyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
9
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0-rc.4", type: IgxGridBodyDirective, isStandalone: true, selector: "[igxGridBody]", providers: [IgxForOfSyncService], ngImport: i0 }); }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxGridBodyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
9
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: IgxGridBodyDirective, isStandalone: true, selector: "[igxGridBody]", providers: [IgxForOfSyncService], ngImport: i0 }); }
10
10
  }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxGridBodyDirective, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxGridBodyDirective, decorators: [{
12
12
  type: Directive,
13
13
  args: [{
14
14
  selector: '[igxGridBody]',
@@ -43,4 +43,4 @@ export class RowEditPositionStrategy extends ConnectedPositioningStrategy {
43
43
  super.position(contentElement, { width: targetElement.clientWidth, height: targetElement.clientHeight }, document, initialCall, targetElement);
44
44
  }
45
45
  }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21tb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC5jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQTJCLE1BQU0sK0JBQStCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOztBQVEvRSxNQUFNLE9BQU8sb0JBQW9CO21IQUFwQixvQkFBb0I7dUdBQXBCLG9CQUFvQiw0REFIbEIsQ0FBQyxtQkFBbUIsQ0FBQzs7Z0dBR3ZCLG9CQUFvQjtrQkFMaEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ2hDLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs7QUFXRDs7R0FFRztBQUNILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSw0QkFBNEI7SUFBekU7O1FBQ1csVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLHlCQUFvQixHQUFHLElBQUksQ0FBQztJQXdCdkMsQ0FBQztJQXRCbUIsUUFBUSxDQUFDLGNBQTJCLEVBQUUsSUFBdUMsRUFBRSxRQUFtQixFQUFFLFdBQXFCLEVBQ2pJLE1BQTRCO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYTtRQUN4RCxNQUFNLGFBQWEsR0FBZ0IsTUFBcUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQXFCLENBQUMsQ0FBQyxtQkFBbUI7UUFFcEgsc0VBQXNFO1FBQ3RFLDhGQUE4RjtRQUM5RiwwSEFBMEg7UUFDMUgsMEdBQTBHO1FBQzFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixLQUFLLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU07Z0JBQ3BDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFFckcsK0ZBQStGO1FBQy9GLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUNuSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBRTVFLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxZQUFZLEVBQUUsRUFDM0YsUUFBUSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IFZlcnRpY2FsQWxpZ25tZW50LCBQb3NpdGlvblNldHRpbmdzLCBQb2ludCB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvdXRpbGl0aWVzJztcbmltcG9ydCB7IHNjYWxlSW5WZXJCb3R0b20sIHNjYWxlSW5WZXJUb3AgfSBmcm9tICcuLi9hbmltYXRpb25zL21haW4nO1xuaW1wb3J0IHsgSWd4Rm9yT2ZTeW5jU2VydmljZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5zeW5jLnNlcnZpY2UnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneEdyaWRCb2R5XScsXG4gICAgcHJvdmlkZXJzOiBbSWd4Rm9yT2ZTeW5jU2VydmljZV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQm9keURpcmVjdGl2ZSB7fVxuXG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvd0VkaXRQb3NpdGlvblNldHRpbmdzIGV4dGVuZHMgUG9zaXRpb25TZXR0aW5ncyB7XG4gICAgY29udGFpbmVyPzogSFRNTEVsZW1lbnQ7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgUm93RWRpdFBvc2l0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5IHtcbiAgICBwdWJsaWMgaXNUb3AgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNUb3BJbml0aWFsUG9zaXRpb24gPSBudWxsO1xuICAgIHB1YmxpYyBvdmVycmlkZSBzZXR0aW5nczogUm93RWRpdFBvc2l0aW9uU2V0dGluZ3M7XG4gICAgcHVibGljIG92ZXJyaWRlIHBvc2l0aW9uKGNvbnRlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgc2l6ZTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LCBkb2N1bWVudD86IERvY3VtZW50LCBpbml0aWFsQ2FsbD86IGJvb2xlYW4sXG4gICAgICAgICAgICB0YXJnZXQ/OiBQb2ludCB8IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2V0dGluZ3MuY29udGFpbmVyOyAvLyBncmlkLnRib2R5XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxFbGVtZW50IHx8IHRoaXMuc2V0dGluZ3MudGFyZ2V0IGFzIEhUTUxFbGVtZW50OyAvLyBjdXJyZW50IGdyaWQucm93XG5cbiAgICAgICAgLy8gUG9zaXRpb24gb2YgdGhlIG92ZXJsYXkgZGVwZW5kcyBvbiB0aGUgYXZhaWxhYmxlIHNwYWNlIGluIHRoZSBncmlkLlxuICAgICAgICAvLyBJZiB0aGUgYm90dG9tIHNwYWNlIGlzIG5vdCBlbm91Z2ggdGhlbiB0aGUgdGhlIHJvdyBvdmVybGF5IHdpbGwgc2hvdyBhdCB0aGUgdG9wIG9mIHRoZSByb3cuXG4gICAgICAgIC8vIE9uY2Ugc2hvd24sIGVpdGhlciB0b3Agb3IgYm90dG9tLCB0aGVuIHRoaXMgcG9zaXRpb24gc3RheXMgdW50aWwgdGhlIG92ZXJsYXkgaXMgY2xvc2VkIChpc1RvcEluaXRpYWxQb3NpdGlvbiBwcm9wZXJ0eSksXG4gICAgICAgIC8vIHdoaWNoIG1lYW5zIHRoYXQgd2hlbiBzY3JvbGxpbmcgdGhlbiBvdmVybGF5IG1heSBoaWRlLCB3aGlsZSB0aGUgcm93IGlzIHN0aWxsIHZpc2libGUgKFVYIHJlcXVpcmVtZW50KS5cbiAgICAgICAgdGhpcy5pc1RvcCA9IHRoaXMuaXNUb3BJbml0aWFsUG9zaXRpb24gIT09IG51bGwgP1xuICAgICAgICAgICAgdGhpcy5pc1RvcEluaXRpYWxQb3NpdGlvbiA6XG4gICAgICAgICAgICBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIDxcbiAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSArIGNvbnRlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgICAvLyBTZXQgd2lkdGggb2YgdGhlIHJvdyBlZGl0aW5nIG92ZXJsYXkgdG8gZXF1YWwgcm93IHdpZHRoLCBvdGhlcndpc2UgaXQgZml0cyAxMDAlIG9mIHRoZSBncmlkLlxuICAgICAgICBjb250ZW50RWxlbWVudC5zdHlsZS53aWR0aCA9IHRhcmdldEVsZW1lbnQuY2xpZW50V2lkdGggKyAncHgnO1xuICAgICAgICB0aGlzLnNldHRpbmdzLnZlcnRpY2FsU3RhcnRQb2ludCA9IHRoaXMuc2V0dGluZ3MudmVydGljYWxEaXJlY3Rpb24gPSB0aGlzLmlzVG9wID8gVmVydGljYWxBbGlnbm1lbnQuVG9wIDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tO1xuICAgICAgICB0aGlzLnNldHRpbmdzLm9wZW5BbmltYXRpb24gPSB0aGlzLmlzVG9wID8gc2NhbGVJblZlckJvdHRvbSA6IHNjYWxlSW5WZXJUb3A7XG5cbiAgICAgICAgc3VwZXIucG9zaXRpb24oY29udGVudEVsZW1lbnQsIHsgd2lkdGg6IHRhcmdldEVsZW1lbnQuY2xpZW50V2lkdGgsIGhlaWdodDogdGFyZ2V0RWxlbWVudC5jbGllbnRIZWlnaHQgfSxcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQsIGluaXRpYWxDYWxsLCB0YXJnZXRFbGVtZW50KTtcbiAgICB9XG59XG4iXX0=
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21tb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC5jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQTJCLE1BQU0sK0JBQStCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOztBQVEvRSxNQUFNLE9BQU8sb0JBQW9COzhHQUFwQixvQkFBb0I7a0dBQXBCLG9CQUFvQiw0REFIbEIsQ0FBQyxtQkFBbUIsQ0FBQzs7MkZBR3ZCLG9CQUFvQjtrQkFMaEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ2hDLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs7QUFXRDs7R0FFRztBQUNILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSw0QkFBNEI7SUFBekU7O1FBQ1csVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLHlCQUFvQixHQUFHLElBQUksQ0FBQztJQXdCdkMsQ0FBQztJQXRCbUIsUUFBUSxDQUFDLGNBQTJCLEVBQUUsSUFBdUMsRUFBRSxRQUFtQixFQUFFLFdBQXFCLEVBQ2pJLE1BQTRCO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYTtRQUN4RCxNQUFNLGFBQWEsR0FBZ0IsTUFBcUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQXFCLENBQUMsQ0FBQyxtQkFBbUI7UUFFcEgsc0VBQXNFO1FBQ3RFLDhGQUE4RjtRQUM5RiwwSEFBMEg7UUFDMUgsMEdBQTBHO1FBQzFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixLQUFLLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU07Z0JBQ3BDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFFckcsK0ZBQStGO1FBQy9GLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUNuSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBRTVFLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxZQUFZLEVBQUUsRUFDM0YsUUFBUSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IFZlcnRpY2FsQWxpZ25tZW50LCBQb3NpdGlvblNldHRpbmdzLCBQb2ludCB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvdXRpbGl0aWVzJztcbmltcG9ydCB7IHNjYWxlSW5WZXJCb3R0b20sIHNjYWxlSW5WZXJUb3AgfSBmcm9tICcuLi9hbmltYXRpb25zL21haW4nO1xuaW1wb3J0IHsgSWd4Rm9yT2ZTeW5jU2VydmljZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5zeW5jLnNlcnZpY2UnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneEdyaWRCb2R5XScsXG4gICAgcHJvdmlkZXJzOiBbSWd4Rm9yT2ZTeW5jU2VydmljZV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkQm9keURpcmVjdGl2ZSB7fVxuXG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvd0VkaXRQb3NpdGlvblNldHRpbmdzIGV4dGVuZHMgUG9zaXRpb25TZXR0aW5ncyB7XG4gICAgY29udGFpbmVyPzogSFRNTEVsZW1lbnQ7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgUm93RWRpdFBvc2l0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5IHtcbiAgICBwdWJsaWMgaXNUb3AgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNUb3BJbml0aWFsUG9zaXRpb24gPSBudWxsO1xuICAgIHB1YmxpYyBvdmVycmlkZSBzZXR0aW5nczogUm93RWRpdFBvc2l0aW9uU2V0dGluZ3M7XG4gICAgcHVibGljIG92ZXJyaWRlIHBvc2l0aW9uKGNvbnRlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgc2l6ZTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LCBkb2N1bWVudD86IERvY3VtZW50LCBpbml0aWFsQ2FsbD86IGJvb2xlYW4sXG4gICAgICAgICAgICB0YXJnZXQ/OiBQb2ludCB8IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2V0dGluZ3MuY29udGFpbmVyOyAvLyBncmlkLnRib2R5XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxFbGVtZW50IHx8IHRoaXMuc2V0dGluZ3MudGFyZ2V0IGFzIEhUTUxFbGVtZW50OyAvLyBjdXJyZW50IGdyaWQucm93XG5cbiAgICAgICAgLy8gUG9zaXRpb24gb2YgdGhlIG92ZXJsYXkgZGVwZW5kcyBvbiB0aGUgYXZhaWxhYmxlIHNwYWNlIGluIHRoZSBncmlkLlxuICAgICAgICAvLyBJZiB0aGUgYm90dG9tIHNwYWNlIGlzIG5vdCBlbm91Z2ggdGhlbiB0aGUgdGhlIHJvdyBvdmVybGF5IHdpbGwgc2hvdyBhdCB0aGUgdG9wIG9mIHRoZSByb3cuXG4gICAgICAgIC8vIE9uY2Ugc2hvd24sIGVpdGhlciB0b3Agb3IgYm90dG9tLCB0aGVuIHRoaXMgcG9zaXRpb24gc3RheXMgdW50aWwgdGhlIG92ZXJsYXkgaXMgY2xvc2VkIChpc1RvcEluaXRpYWxQb3NpdGlvbiBwcm9wZXJ0eSksXG4gICAgICAgIC8vIHdoaWNoIG1lYW5zIHRoYXQgd2hlbiBzY3JvbGxpbmcgdGhlbiBvdmVybGF5IG1heSBoaWRlLCB3aGlsZSB0aGUgcm93IGlzIHN0aWxsIHZpc2libGUgKFVYIHJlcXVpcmVtZW50KS5cbiAgICAgICAgdGhpcy5pc1RvcCA9IHRoaXMuaXNUb3BJbml0aWFsUG9zaXRpb24gIT09IG51bGwgP1xuICAgICAgICAgICAgdGhpcy5pc1RvcEluaXRpYWxQb3NpdGlvbiA6XG4gICAgICAgICAgICBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIDxcbiAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSArIGNvbnRlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgICAvLyBTZXQgd2lkdGggb2YgdGhlIHJvdyBlZGl0aW5nIG92ZXJsYXkgdG8gZXF1YWwgcm93IHdpZHRoLCBvdGhlcndpc2UgaXQgZml0cyAxMDAlIG9mIHRoZSBncmlkLlxuICAgICAgICBjb250ZW50RWxlbWVudC5zdHlsZS53aWR0aCA9IHRhcmdldEVsZW1lbnQuY2xpZW50V2lkdGggKyAncHgnO1xuICAgICAgICB0aGlzLnNldHRpbmdzLnZlcnRpY2FsU3RhcnRQb2ludCA9IHRoaXMuc2V0dGluZ3MudmVydGljYWxEaXJlY3Rpb24gPSB0aGlzLmlzVG9wID8gVmVydGljYWxBbGlnbm1lbnQuVG9wIDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tO1xuICAgICAgICB0aGlzLnNldHRpbmdzLm9wZW5BbmltYXRpb24gPSB0aGlzLmlzVG9wID8gc2NhbGVJblZlckJvdHRvbSA6IHNjYWxlSW5WZXJUb3A7XG5cbiAgICAgICAgc3VwZXIucG9zaXRpb24oY29udGVudEVsZW1lbnQsIHsgd2lkdGg6IHRhcmdldEVsZW1lbnQuY2xpZW50V2lkdGgsIGhlaWdodDogdGFyZ2V0RWxlbWVudC5jbGllbnRIZWlnaHQgfSxcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQsIGluaXRpYWxDYWxsLCB0YXJnZXRFbGVtZW50KTtcbiAgICB9XG59XG4iXX0=