@fundamental-ngx/core 0.42.0-rc.8 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/alert/alert.component.d.ts +5 -4
  2. package/alert/alert.module.d.ts +2 -1
  3. package/avatar/avatar.component.d.ts +2 -4
  4. package/avatar-group/directives/avatar-group-focusable-avatar.directive.d.ts +2 -6
  5. package/avatar-group/directives/avatar-group-overflow-button.directive.d.ts +2 -4
  6. package/bar/bar.component.d.ts +2 -4
  7. package/busy-indicator/busy-indicator-extended/busy-indicator-extended.directive.d.ts +2 -4
  8. package/button/button.component.d.ts +2 -6
  9. package/card/card-content.component.d.ts +2 -4
  10. package/card/card-counter.directive.d.ts +2 -4
  11. package/card/card-header.component.d.ts +2 -4
  12. package/card/card-loader.component.d.ts +2 -4
  13. package/card/card-second-subtitle.directive.d.ts +2 -4
  14. package/card/card-subtitle.directive.d.ts +2 -4
  15. package/card/card-title.directive.d.ts +2 -4
  16. package/card/card.component.d.ts +3 -5
  17. package/card/kpi/card-kpi-analytics-content.directive.d.ts +2 -4
  18. package/card/kpi/card-kpi-analytics-label.directive.d.ts +2 -4
  19. package/card/kpi/card-kpi-analytics.directive.d.ts +2 -4
  20. package/card/kpi/card-kpi-header.component.d.ts +2 -4
  21. package/card/kpi/card-kpi-scale-icon.directive.d.ts +2 -4
  22. package/card/kpi/card-kpi-scale-text.directive.d.ts +2 -4
  23. package/card/kpi/card-kpi-value.directive.d.ts +2 -4
  24. package/combobox/combobox.module.d.ts +2 -1
  25. package/dialog/base/dialog-base.class.d.ts +2 -2
  26. package/dialog/dialog-body/dialog-body.component.d.ts +2 -4
  27. package/dialog/dialog-container/dialog-container.component.d.ts +0 -2
  28. package/dialog/dialog-service/dialog.service.d.ts +4 -0
  29. package/dialog/dialog.component.d.ts +0 -2
  30. package/dynamic-page/dynamic-page-content/dynamic-page-content.component.d.ts +4 -6
  31. package/dynamic-page/dynamic-page-header/actions/dynamic-page-layout-actions.component.d.ts +2 -4
  32. package/dynamic-side-content/dynamic-side-content.component.d.ts +3 -5
  33. package/esm2020/alert/alert.component.mjs +7 -19
  34. package/esm2020/alert/alert.module.mjs +5 -4
  35. package/esm2020/avatar/avatar.component.mjs +6 -10
  36. package/esm2020/avatar-group/directives/avatar-group-focusable-avatar.directive.mjs +4 -12
  37. package/esm2020/avatar-group/directives/avatar-group-overflow-body.directive.mjs +2 -2
  38. package/esm2020/avatar-group/directives/avatar-group-overflow-button.directive.mjs +3 -7
  39. package/esm2020/bar/bar.component.mjs +3 -7
  40. package/esm2020/breadcrumb/breadcrumb-item.component.mjs +2 -2
  41. package/esm2020/breadcrumb/breadcrumb.component.mjs +2 -2
  42. package/esm2020/busy-indicator/busy-indicator-extended/busy-indicator-extended.directive.mjs +4 -8
  43. package/esm2020/button/button.component.mjs +3 -9
  44. package/esm2020/card/card-content.component.mjs +3 -7
  45. package/esm2020/card/card-counter.directive.mjs +3 -7
  46. package/esm2020/card/card-header.component.mjs +4 -8
  47. package/esm2020/card/card-loader.component.mjs +3 -7
  48. package/esm2020/card/card-second-subtitle.directive.mjs +3 -7
  49. package/esm2020/card/card-subtitle.directive.mjs +3 -7
  50. package/esm2020/card/card-title.directive.mjs +3 -7
  51. package/esm2020/card/card.component.mjs +3 -7
  52. package/esm2020/card/kpi/card-kpi-analytics-content.directive.mjs +3 -7
  53. package/esm2020/card/kpi/card-kpi-analytics-label.directive.mjs +3 -7
  54. package/esm2020/card/kpi/card-kpi-analytics.directive.mjs +3 -7
  55. package/esm2020/card/kpi/card-kpi-header.component.mjs +3 -7
  56. package/esm2020/card/kpi/card-kpi-scale-icon.directive.mjs +3 -7
  57. package/esm2020/card/kpi/card-kpi-scale-text.directive.mjs +3 -7
  58. package/esm2020/card/kpi/card-kpi-value.directive.mjs +3 -7
  59. package/esm2020/checkbox/checkbox/checkbox.component.mjs +5 -5
  60. package/esm2020/combobox/combobox.component.mjs +5 -4
  61. package/esm2020/combobox/combobox.module.mjs +8 -4
  62. package/esm2020/content-density/services/content-density-observer.service.mjs +3 -3
  63. package/esm2020/datetime-picker/datetime-picker.component.mjs +7 -4
  64. package/esm2020/dialog/base/dialog-base.class.mjs +4 -4
  65. package/esm2020/dialog/dialog-body/dialog-body.component.mjs +3 -7
  66. package/esm2020/dialog/dialog-container/dialog-container.component.mjs +1 -5
  67. package/esm2020/dialog/dialog-service/dialog.service.mjs +10 -2
  68. package/esm2020/dialog/dialog.component.mjs +3 -7
  69. package/esm2020/dynamic-page/dynamic-page-content/dynamic-page-content.component.mjs +4 -8
  70. package/esm2020/dynamic-page/dynamic-page-header/actions/dynamic-page-layout-actions.component.mjs +5 -9
  71. package/esm2020/dynamic-side-content/dynamic-side-content.component.mjs +3 -7
  72. package/esm2020/facets/content/facet-content.component.mjs +4 -8
  73. package/esm2020/facets/facet/facet.component.mjs +13 -19
  74. package/esm2020/feed-input/directives/feed-input-avatar.directive.mjs +3 -7
  75. package/esm2020/feed-list-item/components/item/feed-list-item.component.mjs +3 -7
  76. package/esm2020/feed-list-item/components/list/feed-list.component.mjs +3 -7
  77. package/esm2020/form/form-control/form-control.component.mjs +3 -7
  78. package/esm2020/form/form-group/form-group.component.mjs +3 -7
  79. package/esm2020/form/form-message/form-message.component.mjs +3 -7
  80. package/esm2020/grid-list/components/grid-list-item/grid-list-item.component.mjs +3 -3
  81. package/esm2020/icon/icon.component.mjs +3 -7
  82. package/esm2020/illustrated-message/illustrated-message.component.mjs +3 -7
  83. package/esm2020/info-label/info-label.component.mjs +3 -7
  84. package/esm2020/inline-help/inline-help.directive.mjs +26 -15
  85. package/esm2020/input-group/input-group-directives.mjs +6 -14
  86. package/esm2020/input-group/input-group.component.mjs +2 -2
  87. package/esm2020/layout-grid/directives/layout-grid-col.directive.mjs +3 -7
  88. package/esm2020/layout-grid/layout-grid.component.mjs +3 -7
  89. package/esm2020/layout-panel/layout-panel-footer/layout-panel-footer.component.mjs +3 -7
  90. package/esm2020/link/link.component.mjs +9 -13
  91. package/esm2020/list/directives/list-icon.directive.mjs +3 -7
  92. package/esm2020/list/directives/list-navigation-item-text.directive.mjs +3 -7
  93. package/esm2020/list/list-message.directive.mjs +3 -7
  94. package/esm2020/menu/menu-mobile/menu-mobile.component.mjs +2 -2
  95. package/esm2020/message-box/message-box-container/message-box-container.component.mjs +1 -5
  96. package/esm2020/message-box/message-box.component.mjs +1 -5
  97. package/esm2020/message-page/message-page.component.mjs +3 -7
  98. package/esm2020/message-strip/alert/default-config.mjs +11 -0
  99. package/esm2020/message-strip/alert/index.mjs +6 -0
  100. package/esm2020/message-strip/alert/message-strip-alert/message-strip-alert.component.mjs +68 -0
  101. package/esm2020/message-strip/alert/message-strip-alert-container/message-strip-alert-container.component.mjs +57 -0
  102. package/esm2020/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.mjs +65 -0
  103. package/esm2020/message-strip/alert/message-strip-alert.position.mjs +2 -0
  104. package/esm2020/message-strip/alert/message-strip-alert.ref.mjs +3 -0
  105. package/esm2020/message-strip/alert/message-strip-alert.service.mjs +195 -0
  106. package/esm2020/message-strip/alert/message-strip-configuration-type.mjs +2 -0
  107. package/esm2020/message-strip/alert/open-message-strip-alert.config.mjs +2 -0
  108. package/esm2020/message-strip/alert/tokens.mjs +14 -0
  109. package/esm2020/message-strip/auto-dismiss-message-strip.directive.mjs +98 -0
  110. package/esm2020/message-strip/fundamental-ngx-core-message-strip.mjs +2 -2
  111. package/esm2020/message-strip/index.mjs +6 -0
  112. package/esm2020/message-strip/message-strip-type.mjs +2 -0
  113. package/esm2020/message-strip/message-strip.component.mjs +16 -20
  114. package/esm2020/message-strip/message-strip.module.mjs +6 -9
  115. package/esm2020/multi-combobox/multi-combobox.component.mjs +6 -6
  116. package/esm2020/multi-input/multi-input.component.mjs +33 -19
  117. package/esm2020/notification/directives/notification-indicator.directive.mjs +3 -7
  118. package/esm2020/notification/notification-group/notification-group.component.mjs +3 -7
  119. package/esm2020/notification/notification-utils/notification-group-base.mjs +2 -2
  120. package/esm2020/object-marker/object-marker.component.mjs +3 -7
  121. package/esm2020/object-number/object-number.component.mjs +3 -7
  122. package/esm2020/object-status/object-status.component.mjs +3 -7
  123. package/esm2020/panel/panel.component.mjs +3 -7
  124. package/esm2020/product-switch/product-switch-body/product-switch-body.component.mjs +1 -1
  125. package/esm2020/radio/radio-button/radio-button.component.mjs +2 -2
  126. package/esm2020/rating-indicator/components/rating-indicator.component.mjs +3 -7
  127. package/esm2020/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.mjs +4 -8
  128. package/esm2020/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.mjs +3 -7
  129. package/esm2020/segmented-button/segmented-button.component.mjs +4 -4
  130. package/esm2020/select/select.component.mjs +3 -3
  131. package/esm2020/slider/slider.component.mjs +3 -7
  132. package/esm2020/status-indicator/status-indicator.component.mjs +4 -8
  133. package/esm2020/table/directives/table-cell.directive.mjs +31 -26
  134. package/esm2020/table/directives/table-icon.directive.mjs +3 -9
  135. package/esm2020/table/directives/table-row.directive.mjs +34 -19
  136. package/esm2020/table/table-wrapper.component.mjs +2 -2
  137. package/esm2020/table/table.component.mjs +1 -1
  138. package/esm2020/tabs/tab-item/tab-item.directive.mjs +3 -7
  139. package/esm2020/tabs/tab-nav/tab-nav.component.mjs +3 -9
  140. package/esm2020/tabs/tab-utils/tab-directives.mjs +3 -9
  141. package/esm2020/tile/directives/numeric-content.directives.mjs +14 -34
  142. package/esm2020/tile/directives/tile.directives.mjs +9 -21
  143. package/esm2020/tile/tile.component.mjs +2 -2
  144. package/esm2020/token/token-input.directive.mjs +3 -7
  145. package/esm2020/token/tokenizer.component.mjs +20 -22
  146. package/esm2020/toolbar/toolbar.component.mjs +2 -2
  147. package/esm2020/tree/components/tree-item/tree-item.component.mjs +1 -1
  148. package/esm2020/tree/models/base-tree-item.class.mjs +2 -6
  149. package/esm2020/tree/tree.component.mjs +3 -7
  150. package/esm2020/upload-collection/upload-collection-item.directive.mjs +2 -2
  151. package/esm2020/wizard/wizard.component.mjs +2 -2
  152. package/facets/content/facet-content.component.d.ts +2 -4
  153. package/facets/facet/facet.component.d.ts +2 -6
  154. package/feed-input/directives/feed-input-avatar.directive.d.ts +2 -4
  155. package/feed-list-item/components/item/feed-list-item.component.d.ts +2 -4
  156. package/feed-list-item/components/list/feed-list.component.d.ts +2 -4
  157. package/fesm2015/fundamental-ngx-core-alert.mjs +48 -58
  158. package/fesm2015/fundamental-ngx-core-alert.mjs.map +1 -1
  159. package/fesm2015/fundamental-ngx-core-avatar-group.mjs +6 -18
  160. package/fesm2015/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  161. package/fesm2015/fundamental-ngx-core-avatar.mjs +5 -9
  162. package/fesm2015/fundamental-ngx-core-avatar.mjs.map +1 -1
  163. package/fesm2015/fundamental-ngx-core-bar.mjs +2 -6
  164. package/fesm2015/fundamental-ngx-core-bar.mjs.map +1 -1
  165. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +2 -2
  166. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  167. package/fesm2015/fundamental-ngx-core-busy-indicator.mjs +3 -7
  168. package/fesm2015/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  169. package/fesm2015/fundamental-ngx-core-button.mjs +2 -8
  170. package/fesm2015/fundamental-ngx-core-button.mjs.map +1 -1
  171. package/fesm2015/fundamental-ngx-core-card.mjs +31 -91
  172. package/fesm2015/fundamental-ngx-core-card.mjs.map +1 -1
  173. package/fesm2015/fundamental-ngx-core-checkbox.mjs +4 -4
  174. package/fesm2015/fundamental-ngx-core-checkbox.mjs.map +1 -1
  175. package/fesm2015/fundamental-ngx-core-combobox.mjs +10 -5
  176. package/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
  177. package/fesm2015/fundamental-ngx-core-content-density.mjs +2 -2
  178. package/fesm2015/fundamental-ngx-core-content-density.mjs.map +1 -1
  179. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs +6 -3
  180. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  181. package/fesm2015/fundamental-ngx-core-dialog.mjs +16 -21
  182. package/fesm2015/fundamental-ngx-core-dialog.mjs.map +1 -1
  183. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs +7 -15
  184. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  185. package/fesm2015/fundamental-ngx-core-dynamic-side-content.mjs +2 -6
  186. package/fesm2015/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
  187. package/fesm2015/fundamental-ngx-core-facets.mjs +15 -25
  188. package/fesm2015/fundamental-ngx-core-facets.mjs.map +1 -1
  189. package/fesm2015/fundamental-ngx-core-feed-input.mjs +2 -6
  190. package/fesm2015/fundamental-ngx-core-feed-input.mjs.map +1 -1
  191. package/fesm2015/fundamental-ngx-core-feed-list-item.mjs +4 -12
  192. package/fesm2015/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  193. package/fesm2015/fundamental-ngx-core-form.mjs +6 -18
  194. package/fesm2015/fundamental-ngx-core-form.mjs.map +1 -1
  195. package/fesm2015/fundamental-ngx-core-grid-list.mjs +2 -2
  196. package/fesm2015/fundamental-ngx-core-grid-list.mjs.map +1 -1
  197. package/fesm2015/fundamental-ngx-core-icon.mjs +2 -6
  198. package/fesm2015/fundamental-ngx-core-icon.mjs.map +1 -1
  199. package/fesm2015/fundamental-ngx-core-illustrated-message.mjs +2 -6
  200. package/fesm2015/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
  201. package/fesm2015/fundamental-ngx-core-info-label.mjs +2 -6
  202. package/fesm2015/fundamental-ngx-core-info-label.mjs.map +1 -1
  203. package/fesm2015/fundamental-ngx-core-inline-help.mjs +24 -13
  204. package/fesm2015/fundamental-ngx-core-inline-help.mjs.map +1 -1
  205. package/fesm2015/fundamental-ngx-core-input-group.mjs +6 -14
  206. package/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
  207. package/fesm2015/fundamental-ngx-core-layout-grid.mjs +4 -12
  208. package/fesm2015/fundamental-ngx-core-layout-grid.mjs.map +1 -1
  209. package/fesm2015/fundamental-ngx-core-layout-panel.mjs +2 -6
  210. package/fesm2015/fundamental-ngx-core-layout-panel.mjs.map +1 -1
  211. package/fesm2015/fundamental-ngx-core-link.mjs +8 -12
  212. package/fesm2015/fundamental-ngx-core-link.mjs.map +1 -1
  213. package/fesm2015/fundamental-ngx-core-list.mjs +6 -18
  214. package/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  215. package/fesm2015/fundamental-ngx-core-menu.mjs +1 -1
  216. package/fesm2015/fundamental-ngx-core-menu.mjs.map +1 -1
  217. package/fesm2015/fundamental-ngx-core-message-box.mjs +0 -8
  218. package/fesm2015/fundamental-ngx-core-message-box.mjs.map +1 -1
  219. package/fesm2015/fundamental-ngx-core-message-page.mjs +2 -6
  220. package/fesm2015/fundamental-ngx-core-message-page.mjs.map +1 -1
  221. package/fesm2015/fundamental-ngx-core-message-strip.mjs +488 -28
  222. package/fesm2015/fundamental-ngx-core-message-strip.mjs.map +1 -1
  223. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs +5 -5
  224. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  225. package/fesm2015/fundamental-ngx-core-multi-input.mjs +33 -17
  226. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  227. package/fesm2015/fundamental-ngx-core-notification.mjs +5 -13
  228. package/fesm2015/fundamental-ngx-core-notification.mjs.map +1 -1
  229. package/fesm2015/fundamental-ngx-core-object-marker.mjs +2 -6
  230. package/fesm2015/fundamental-ngx-core-object-marker.mjs.map +1 -1
  231. package/fesm2015/fundamental-ngx-core-object-number.mjs +2 -6
  232. package/fesm2015/fundamental-ngx-core-object-number.mjs.map +1 -1
  233. package/fesm2015/fundamental-ngx-core-object-status.mjs +2 -6
  234. package/fesm2015/fundamental-ngx-core-object-status.mjs.map +1 -1
  235. package/fesm2015/fundamental-ngx-core-panel.mjs +2 -6
  236. package/fesm2015/fundamental-ngx-core-panel.mjs.map +1 -1
  237. package/fesm2015/fundamental-ngx-core-product-switch.mjs +1 -1
  238. package/fesm2015/fundamental-ngx-core-product-switch.mjs.map +1 -1
  239. package/fesm2015/fundamental-ngx-core-radio.mjs +1 -1
  240. package/fesm2015/fundamental-ngx-core-radio.mjs.map +1 -1
  241. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs +2 -6
  242. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  243. package/fesm2015/fundamental-ngx-core-resizable-card-layout.mjs +5 -13
  244. package/fesm2015/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
  245. package/fesm2015/fundamental-ngx-core-segmented-button.mjs +3 -3
  246. package/fesm2015/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  247. package/fesm2015/fundamental-ngx-core-select.mjs +2 -2
  248. package/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
  249. package/fesm2015/fundamental-ngx-core-slider.mjs +2 -6
  250. package/fesm2015/fundamental-ngx-core-slider.mjs.map +1 -1
  251. package/fesm2015/fundamental-ngx-core-status-indicator.mjs +3 -7
  252. package/fesm2015/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  253. package/fesm2015/fundamental-ngx-core-table.mjs +64 -48
  254. package/fesm2015/fundamental-ngx-core-table.mjs.map +1 -1
  255. package/fesm2015/fundamental-ngx-core-tabs.mjs +6 -22
  256. package/fesm2015/fundamental-ngx-core-tabs.mjs.map +1 -1
  257. package/fesm2015/fundamental-ngx-core-tile.mjs +22 -54
  258. package/fesm2015/fundamental-ngx-core-tile.mjs.map +1 -1
  259. package/fesm2015/fundamental-ngx-core-token.mjs +22 -28
  260. package/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  261. package/fesm2015/fundamental-ngx-core-toolbar.mjs +1 -1
  262. package/fesm2015/fundamental-ngx-core-toolbar.mjs.map +1 -1
  263. package/fesm2015/fundamental-ngx-core-tree.mjs +3 -11
  264. package/fesm2015/fundamental-ngx-core-tree.mjs.map +1 -1
  265. package/fesm2015/fundamental-ngx-core-upload-collection.mjs +1 -1
  266. package/fesm2015/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  267. package/fesm2015/fundamental-ngx-core-wizard.mjs +1 -1
  268. package/fesm2015/fundamental-ngx-core-wizard.mjs.map +1 -1
  269. package/fesm2020/fundamental-ngx-core-alert.mjs +48 -58
  270. package/fesm2020/fundamental-ngx-core-alert.mjs.map +1 -1
  271. package/fesm2020/fundamental-ngx-core-avatar-group.mjs +6 -18
  272. package/fesm2020/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  273. package/fesm2020/fundamental-ngx-core-avatar.mjs +5 -9
  274. package/fesm2020/fundamental-ngx-core-avatar.mjs.map +1 -1
  275. package/fesm2020/fundamental-ngx-core-bar.mjs +2 -6
  276. package/fesm2020/fundamental-ngx-core-bar.mjs.map +1 -1
  277. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +2 -2
  278. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  279. package/fesm2020/fundamental-ngx-core-busy-indicator.mjs +3 -7
  280. package/fesm2020/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  281. package/fesm2020/fundamental-ngx-core-button.mjs +2 -8
  282. package/fesm2020/fundamental-ngx-core-button.mjs.map +1 -1
  283. package/fesm2020/fundamental-ngx-core-card.mjs +31 -91
  284. package/fesm2020/fundamental-ngx-core-card.mjs.map +1 -1
  285. package/fesm2020/fundamental-ngx-core-checkbox.mjs +4 -4
  286. package/fesm2020/fundamental-ngx-core-checkbox.mjs.map +1 -1
  287. package/fesm2020/fundamental-ngx-core-combobox.mjs +10 -5
  288. package/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
  289. package/fesm2020/fundamental-ngx-core-content-density.mjs +2 -2
  290. package/fesm2020/fundamental-ngx-core-content-density.mjs.map +1 -1
  291. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs +6 -3
  292. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  293. package/fesm2020/fundamental-ngx-core-dialog.mjs +16 -21
  294. package/fesm2020/fundamental-ngx-core-dialog.mjs.map +1 -1
  295. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs +7 -15
  296. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  297. package/fesm2020/fundamental-ngx-core-dynamic-side-content.mjs +2 -6
  298. package/fesm2020/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
  299. package/fesm2020/fundamental-ngx-core-facets.mjs +15 -25
  300. package/fesm2020/fundamental-ngx-core-facets.mjs.map +1 -1
  301. package/fesm2020/fundamental-ngx-core-feed-input.mjs +2 -6
  302. package/fesm2020/fundamental-ngx-core-feed-input.mjs.map +1 -1
  303. package/fesm2020/fundamental-ngx-core-feed-list-item.mjs +4 -12
  304. package/fesm2020/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  305. package/fesm2020/fundamental-ngx-core-form.mjs +6 -18
  306. package/fesm2020/fundamental-ngx-core-form.mjs.map +1 -1
  307. package/fesm2020/fundamental-ngx-core-grid-list.mjs +2 -2
  308. package/fesm2020/fundamental-ngx-core-grid-list.mjs.map +1 -1
  309. package/fesm2020/fundamental-ngx-core-icon.mjs +2 -6
  310. package/fesm2020/fundamental-ngx-core-icon.mjs.map +1 -1
  311. package/fesm2020/fundamental-ngx-core-illustrated-message.mjs +2 -6
  312. package/fesm2020/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
  313. package/fesm2020/fundamental-ngx-core-info-label.mjs +2 -6
  314. package/fesm2020/fundamental-ngx-core-info-label.mjs.map +1 -1
  315. package/fesm2020/fundamental-ngx-core-inline-help.mjs +24 -13
  316. package/fesm2020/fundamental-ngx-core-inline-help.mjs.map +1 -1
  317. package/fesm2020/fundamental-ngx-core-input-group.mjs +6 -14
  318. package/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
  319. package/fesm2020/fundamental-ngx-core-layout-grid.mjs +4 -12
  320. package/fesm2020/fundamental-ngx-core-layout-grid.mjs.map +1 -1
  321. package/fesm2020/fundamental-ngx-core-layout-panel.mjs +2 -6
  322. package/fesm2020/fundamental-ngx-core-layout-panel.mjs.map +1 -1
  323. package/fesm2020/fundamental-ngx-core-link.mjs +8 -12
  324. package/fesm2020/fundamental-ngx-core-link.mjs.map +1 -1
  325. package/fesm2020/fundamental-ngx-core-list.mjs +6 -18
  326. package/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  327. package/fesm2020/fundamental-ngx-core-menu.mjs +1 -1
  328. package/fesm2020/fundamental-ngx-core-menu.mjs.map +1 -1
  329. package/fesm2020/fundamental-ngx-core-message-box.mjs +0 -8
  330. package/fesm2020/fundamental-ngx-core-message-box.mjs.map +1 -1
  331. package/fesm2020/fundamental-ngx-core-message-page.mjs +2 -6
  332. package/fesm2020/fundamental-ngx-core-message-page.mjs.map +1 -1
  333. package/fesm2020/fundamental-ngx-core-message-strip.mjs +493 -28
  334. package/fesm2020/fundamental-ngx-core-message-strip.mjs.map +1 -1
  335. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs +5 -5
  336. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  337. package/fesm2020/fundamental-ngx-core-multi-input.mjs +31 -17
  338. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  339. package/fesm2020/fundamental-ngx-core-notification.mjs +5 -13
  340. package/fesm2020/fundamental-ngx-core-notification.mjs.map +1 -1
  341. package/fesm2020/fundamental-ngx-core-object-marker.mjs +2 -6
  342. package/fesm2020/fundamental-ngx-core-object-marker.mjs.map +1 -1
  343. package/fesm2020/fundamental-ngx-core-object-number.mjs +2 -6
  344. package/fesm2020/fundamental-ngx-core-object-number.mjs.map +1 -1
  345. package/fesm2020/fundamental-ngx-core-object-status.mjs +2 -6
  346. package/fesm2020/fundamental-ngx-core-object-status.mjs.map +1 -1
  347. package/fesm2020/fundamental-ngx-core-panel.mjs +2 -6
  348. package/fesm2020/fundamental-ngx-core-panel.mjs.map +1 -1
  349. package/fesm2020/fundamental-ngx-core-product-switch.mjs +1 -1
  350. package/fesm2020/fundamental-ngx-core-product-switch.mjs.map +1 -1
  351. package/fesm2020/fundamental-ngx-core-radio.mjs +1 -1
  352. package/fesm2020/fundamental-ngx-core-radio.mjs.map +1 -1
  353. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs +2 -6
  354. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  355. package/fesm2020/fundamental-ngx-core-resizable-card-layout.mjs +5 -13
  356. package/fesm2020/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
  357. package/fesm2020/fundamental-ngx-core-segmented-button.mjs +3 -3
  358. package/fesm2020/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  359. package/fesm2020/fundamental-ngx-core-select.mjs +2 -2
  360. package/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
  361. package/fesm2020/fundamental-ngx-core-slider.mjs +2 -6
  362. package/fesm2020/fundamental-ngx-core-slider.mjs.map +1 -1
  363. package/fesm2020/fundamental-ngx-core-status-indicator.mjs +3 -7
  364. package/fesm2020/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  365. package/fesm2020/fundamental-ngx-core-table.mjs +64 -48
  366. package/fesm2020/fundamental-ngx-core-table.mjs.map +1 -1
  367. package/fesm2020/fundamental-ngx-core-tabs.mjs +6 -22
  368. package/fesm2020/fundamental-ngx-core-tabs.mjs.map +1 -1
  369. package/fesm2020/fundamental-ngx-core-tile.mjs +22 -54
  370. package/fesm2020/fundamental-ngx-core-tile.mjs.map +1 -1
  371. package/fesm2020/fundamental-ngx-core-token.mjs +21 -27
  372. package/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  373. package/fesm2020/fundamental-ngx-core-toolbar.mjs +1 -1
  374. package/fesm2020/fundamental-ngx-core-toolbar.mjs.map +1 -1
  375. package/fesm2020/fundamental-ngx-core-tree.mjs +3 -11
  376. package/fesm2020/fundamental-ngx-core-tree.mjs.map +1 -1
  377. package/fesm2020/fundamental-ngx-core-upload-collection.mjs +1 -1
  378. package/fesm2020/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  379. package/fesm2020/fundamental-ngx-core-wizard.mjs +1 -1
  380. package/fesm2020/fundamental-ngx-core-wizard.mjs.map +1 -1
  381. package/form/form-control/form-control.component.d.ts +2 -4
  382. package/form/form-group/form-group.component.d.ts +2 -4
  383. package/form/form-message/form-message.component.d.ts +2 -4
  384. package/fundamental-ngx-core-v0.42.0.tgz +0 -0
  385. package/icon/icon.component.d.ts +2 -4
  386. package/illustrated-message/illustrated-message.component.d.ts +2 -4
  387. package/info-label/info-label.component.d.ts +2 -4
  388. package/inline-help/inline-help.directive.d.ts +9 -3
  389. package/input-group/input-group-directives.d.ts +5 -9
  390. package/layout-grid/directives/layout-grid-col.directive.d.ts +2 -4
  391. package/layout-grid/layout-grid.component.d.ts +2 -4
  392. package/layout-panel/layout-panel-footer/layout-panel-footer.component.d.ts +4 -6
  393. package/link/link.component.d.ts +2 -4
  394. package/list/directives/list-icon.directive.d.ts +4 -5
  395. package/list/directives/list-navigation-item-text.directive.d.ts +2 -4
  396. package/list/list-message.directive.d.ts +2 -4
  397. package/message-box/message-box-container/message-box-container.component.d.ts +0 -2
  398. package/message-box/message-box.component.d.ts +0 -2
  399. package/message-page/message-page.component.d.ts +2 -4
  400. package/message-strip/alert/default-config.d.ts +5 -0
  401. package/message-strip/alert/index.d.ts +9 -0
  402. package/message-strip/alert/message-strip-alert/message-strip-alert.component.d.ts +52 -0
  403. package/message-strip/alert/message-strip-alert-container/message-strip-alert-container.component.d.ts +28 -0
  404. package/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.d.ts +36 -0
  405. package/message-strip/alert/message-strip-alert.position.d.ts +3 -0
  406. package/message-strip/alert/message-strip-alert.ref.d.ts +14 -0
  407. package/message-strip/alert/message-strip-alert.service.d.ts +52 -0
  408. package/message-strip/alert/message-strip-configuration-type.d.ts +15 -0
  409. package/message-strip/alert/open-message-strip-alert.config.d.ts +22 -0
  410. package/message-strip/alert/tokens.d.ts +20 -0
  411. package/message-strip/auto-dismiss-message-strip.directive.d.ts +35 -0
  412. package/message-strip/index.d.ts +5 -5
  413. package/message-strip/message-strip-type.d.ts +2 -0
  414. package/message-strip/message-strip.component.d.ts +7 -9
  415. package/message-strip/message-strip.module.d.ts +2 -4
  416. package/multi-combobox/multi-combobox.component.d.ts +1 -1
  417. package/multi-input/multi-input.component.d.ts +10 -6
  418. package/notification/directives/notification-indicator.directive.d.ts +2 -4
  419. package/notification/notification-group/notification-group.component.d.ts +2 -4
  420. package/object-marker/object-marker.component.d.ts +2 -4
  421. package/object-number/object-number.component.d.ts +2 -4
  422. package/object-status/object-status.component.d.ts +2 -4
  423. package/package.json +3 -3
  424. package/panel/panel.component.d.ts +2 -4
  425. package/radio/radio-button/radio-button.component.d.ts +1 -1
  426. package/rating-indicator/components/rating-indicator.component.d.ts +2 -4
  427. package/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.d.ts +2 -4
  428. package/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.d.ts +2 -4
  429. package/schematics/add-dependencies/index.js +4 -4
  430. package/slider/slider.component.d.ts +2 -4
  431. package/status-indicator/status-indicator.component.d.ts +2 -4
  432. package/table/directives/table-cell.directive.d.ts +6 -12
  433. package/table/directives/table-icon.directive.d.ts +2 -6
  434. package/table/directives/table-row.directive.d.ts +10 -10
  435. package/tabs/tab-item/tab-item.directive.d.ts +2 -4
  436. package/tabs/tab-nav/tab-nav.component.d.ts +4 -8
  437. package/tabs/tab-utils/tab-directives.d.ts +2 -6
  438. package/tile/directives/numeric-content.directives.d.ts +10 -20
  439. package/tile/directives/tile.directives.d.ts +6 -12
  440. package/tile/tile.component.d.ts +1 -1
  441. package/token/token-input.directive.d.ts +2 -4
  442. package/token/tokenizer.component.d.ts +2 -4
  443. package/toolbar/toolbar.component.d.ts +1 -1
  444. package/tree/models/base-tree-item.class.d.ts +1 -3
  445. package/tree/tree.component.d.ts +1 -3
  446. package/esm2020/message-strip/public_api.mjs +0 -3
  447. package/fundamental-ngx-core-v0.42.0-rc.8.tgz +0 -0
  448. package/message-strip/public_api.d.ts +0 -2
@@ -1,9 +1,9 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostListener, Injector, Input, Optional, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostListener, Inject, Injector, Input, Optional, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';
3
3
  import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
  import { DOWN_ARROW, ENTER, ESCAPE, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';
5
5
  import { SelectionModel } from '@angular/cdk/collections';
6
- import { BehaviorSubject, combineLatest, Subscription } from 'rxjs';
6
+ import { BehaviorSubject, combineLatest, firstValueFrom, Observable, Subscription } from 'rxjs';
7
7
  import { distinctUntilChanged, first, map, startWith } from 'rxjs/operators';
8
8
  import { PopoverComponent } from '@fundamental-ngx/core/popover';
9
9
  import { MenuKeyboardService } from '@fundamental-ngx/core/menu';
@@ -15,6 +15,7 @@ import { MultiInputMobileComponent } from './multi-input-mobile/multi-input-mobi
15
15
  import { MultiInputMobileModule } from './multi-input-mobile/multi-input-mobile.module';
16
16
  import { MULTI_INPUT_COMPONENT } from './multi-input.interface';
17
17
  import { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
18
+ import { FD_LANGUAGE, TranslationResolver } from '@fundamental-ngx/i18n';
18
19
  import * as i0 from "@angular/core";
19
20
  import * as i1 from "@fundamental-ngx/core/content-density";
20
21
  import * as i2 from "@fundamental-ngx/cdk/utils";
@@ -27,6 +28,7 @@ import * as i8 from "@fundamental-ngx/core/input-group";
27
28
  import * as i9 from "@fundamental-ngx/core/form";
28
29
  import * as i10 from "@fundamental-ngx/core/checkbox";
29
30
  import * as i11 from "@fundamental-ngx/core/link";
31
+ import * as i12 from "rxjs";
30
32
  /**
31
33
  * Input field with multiple selection enabled. Should be used when a user can select between a
32
34
  * limited number of pre-defined options with a filter-enabled context.
@@ -57,16 +59,17 @@ export class MultiInputComponent {
57
59
  if (typeof this.bodyMaxWidth === 'number') {
58
60
  return this.bodyMaxWidth;
59
61
  }
60
- return this._elementRef.nativeElement.getBoundingClientRect().width;
62
+ return this.elementRef.nativeElement.getBoundingClientRect().width;
61
63
  }
62
64
  /** @hidden */
63
- constructor(_contentDensityObserver, _elementRef, _changeDetRef, _dynamicComponentService, _injector, _viewContainerRef, _rtlService, _focusTrapService) {
65
+ constructor(_contentDensityObserver, elementRef, _changeDetRef, _dynamicComponentService, _injector, _viewContainerRef, _language, _rtlService, _focusTrapService) {
64
66
  this._contentDensityObserver = _contentDensityObserver;
65
- this._elementRef = _elementRef;
67
+ this.elementRef = elementRef;
66
68
  this._changeDetRef = _changeDetRef;
67
69
  this._dynamicComponentService = _dynamicComponentService;
68
70
  this._injector = _injector;
69
71
  this._viewContainerRef = _viewContainerRef;
72
+ this._language = _language;
70
73
  this._rtlService = _rtlService;
71
74
  this._focusTrapService = _focusTrapService;
72
75
  /** Placeholder for the input field. */
@@ -183,6 +186,8 @@ export class MultiInputComponent {
183
186
  /** @hidden */
184
187
  this._rangeSelector = new RangeSelector();
185
188
  /** @hidden */
189
+ this._translationResolver = new TranslationResolver();
190
+ /** @hidden */
186
191
  this.onChange = () => { };
187
192
  /** @hidden */
188
193
  this.onTouched = () => { };
@@ -205,6 +210,11 @@ export class MultiInputComponent {
205
210
  this._subscriptions.add(this._getViewModel()
206
211
  .pipe(map((viewModel) => !viewModel.displayedOptions.some((c) => !c.isSelected)))
207
212
  .subscribe((allItemsSelected) => this.allItemsSelectedChange.emit(allItemsSelected)));
213
+ if (!this.ariaLabel) {
214
+ this._subscriptions.add(this._language.subscribe(() => {
215
+ this._getAriaLabel();
216
+ }));
217
+ }
208
218
  }
209
219
  /** @hidden */
210
220
  ngOnChanges(changes) {
@@ -236,7 +246,7 @@ export class MultiInputComponent {
236
246
  buildComponentCssClass() {
237
247
  // TODO: this icon flip may be addressed in styles in the future
238
248
  if (this.glyph === 'value-help' && this._dir === 'rtl') {
239
- const icon = this._elementRef.nativeElement.querySelector('.sap-icon--value-help');
249
+ const icon = this.elementRef.nativeElement.querySelector('.sap-icon--value-help');
240
250
  if (icon) {
241
251
  icon.style.transform = 'scaleX(-1)';
242
252
  }
@@ -244,10 +254,6 @@ export class MultiInputComponent {
244
254
  return ['fd-multi-input', 'fd-multi-input-custom', this.class];
245
255
  }
246
256
  /** @hidden */
247
- elementRef() {
248
- return this._elementRef;
249
- }
250
- /** @hidden */
251
257
  registerOnChange(fn) {
252
258
  this.onChange = fn;
253
259
  }
@@ -259,10 +265,10 @@ export class MultiInputComponent {
259
265
  setDisabledState(isDisabled) {
260
266
  this.disabled = isDisabled;
261
267
  if (isDisabled) {
262
- this._elementRef.nativeElement.style.pointerEvents = 'none';
268
+ this.elementRef.nativeElement.style.pointerEvents = 'none';
263
269
  }
264
270
  else {
265
- this._elementRef.nativeElement.style.pointerEvents = 'auto';
271
+ this.elementRef.nativeElement.style.pointerEvents = 'auto';
266
272
  }
267
273
  this._changeDetRef.detectChanges();
268
274
  }
@@ -341,10 +347,10 @@ export class MultiInputComponent {
341
347
  /** @hidden */
342
348
  _onTokenClick(value, resetSearch, event) {
343
349
  event?.preventDefault(); // prevent this function from being called twice when checkbox updates
344
- this._handleSelect(false, value, resetSearch);
350
+ this._handleSelect(false, value, resetSearch, true);
345
351
  }
346
352
  /** @hidden */
347
- _handleSelect(checked, value, resetSearch = true) {
353
+ _handleSelect(checked, value, resetSearch = true, fromTokenCloseClick = false) {
348
354
  const previousLength = this._selectionModel.selected.length;
349
355
  if (checked) {
350
356
  this._selectionModel.select(value);
@@ -365,7 +371,7 @@ export class MultiInputComponent {
365
371
  this._changeDetRef.detectChanges();
366
372
  }
367
373
  // On Mobile mode changes are propagated only on approve.
368
- this._propagateChange();
374
+ this._propagateChange(fromTokenCloseClick);
369
375
  }
370
376
  /** @hidden */
371
377
  _handleInputKeydown(event) {
@@ -583,12 +589,17 @@ export class MultiInputComponent {
583
589
  }
584
590
  /** @hidden */
585
591
  _focusOut(event) {
586
- if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {
592
+ if (!this.elementRef.nativeElement.contains(event.relatedTarget)) {
587
593
  this.onTouched();
588
594
  }
589
595
  }
596
+ /** @hidden */
597
+ async _getAriaLabel() {
598
+ const lang = await firstValueFrom(this._language);
599
+ this.ariaLabel = this._translationResolver.resolve(lang, 'coreMultiInput.multiInputAriaLabel');
600
+ }
590
601
  }
591
- MultiInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MultiInputComponent, deps: [{ token: i1.ContentDensityObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i2.DynamicComponentService }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i2.RtlService, optional: true }, { token: i2.FocusTrapService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
602
+ MultiInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MultiInputComponent, deps: [{ token: i1.ContentDensityObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i2.DynamicComponentService }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: FD_LANGUAGE }, { token: i2.RtlService, optional: true }, { token: i2.FocusTrapService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
592
603
  MultiInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: MultiInputComponent, selector: "fd-multi-input", inputs: { placeholder: "placeholder", disabled: "disabled", required: "required", compactCollapse: "compactCollapse", maxHeight: "maxHeight", glyph: "glyph", dropdownValues: "dropdownValues", openDropdownOnAddOnClicked: "openDropdownOnAddOnClicked", searchTerm: "searchTerm", inputId: "inputId", highlight: "highlight", selected: "selected", class: "class", filterFn: "filterFn", valueFn: "valueFn", displayFn: "displayFn", newTokenParseFn: "newTokenParseFn", newTokenValidateFn: "newTokenValidateFn", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", fillControlMode: "fillControlMode", state: "state", buttonFocusable: "buttonFocusable", allowNewTokens: "allowNewTokens", mobile: "mobile", showAllButton: "showAllButton", bodyMaxWidth: "bodyMaxWidth", mobileConfig: "mobileConfig", includes: "includes", itemTemplate: "itemTemplate", title: "title", byline: "byline", autoComplete: "autoComplete", open: "open", displayAddonButton: "displayAddonButton" }, outputs: { searchTermChange: "searchTermChange", selectedChange: "selectedChange", openChange: "openChange", addOnButtonClicked: "addOnButtonClicked", allItemsSelectedChange: "allItemsSelectedChange" }, host: { listeners: { "focusout": "_focusOut($event)" } }, providers: [
593
604
  {
594
605
  provide: NG_VALUE_ACCESSOR,
@@ -617,7 +628,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
617
628
  registerFormItemControl(MultiInputComponent),
618
629
  contentDensityObserverProviders()
619
630
  ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"_viewModel$ | async as viewModel\">\n <div class=\"fd-multi-input fd-multi-input-custom\">\n <div class=\"fd-multi-input-field\">\n <ng-container [ngTemplateOutlet]=\"control\" *ngIf=\"mobile\"></ng-container>\n\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n *ngIf=\"!mobile\"\n [isOpen]=\"open\"\n (isOpenChange)=\"openChangeHandle($event)\"\n (input)=\"!open && openChangeHandle(true)\"\n [triggers]=\"[]\"\n [maxWidth]=\"_popoverMaxWidth\"\n [disabled]=\"disabled\"\n [fillControlMode]=\"fillControlMode\"\n class=\"fd-multi-input-popover-custom\"\n >\n <fd-popover-control>\n <form (submit)=\"_onSubmit()\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </form>\n </fd-popover-control>\n\n <fd-popover-body\n [attr.aria-hidden]=\"!open\"\n [class.fd-popover__body--hidden]=\"!viewModel.displayedOptions.length\"\n >\n <ng-container *ngTemplateOutlet=\"list\"></ng-container>\n\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n </div>\n </div>\n\n <ng-template #control>\n <fd-input-group\n class=\"fd-multi-input-input-group-custom\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"displayAddonButton\"\n [disabled]=\"disabled\"\n [isExpanded]=\"open && !mobile && viewModel.displayedOptions.length > 0\"\n [isControl]=\"true\"\n [glyph]=\"displayAddonButton ? glyph : ''\"\n [iconTitle]=\"title\"\n (addOnButtonClicked)=\"_addOnButtonClicked($event)\"\n >\n <fd-tokenizer\n #tokenizer\n [compactCollapse]=\"compactCollapse\"\n [open]=\"open\"\n [tokenizerFocusable]=\"false\"\n (moreClickedEvent)=\"_moreClicked()\"\n class=\"fd-multi-input-tokenizer-custom\"\n tabindex=\"-1\"\n >\n <fd-token\n *ngFor=\"let option of viewModel.selectedOptions; trackBy: valueFn\"\n [disabled]=\"disabled\"\n (onCloseClick)=\"_onTokenClick(option.value, false, $event)\"\n (onRemove)=\"_onTokenClick(option.value, false)\"\n >\n <span [innerHtml]=\"option.label\"></span>\n </fd-token>\n\n <input\n type=\"text\"\n class=\"fd-input fd-tokenizer__input fd-multi-input-tokenizer-input\"\n autocomplete=\"off\"\n fd-form-control\n fd-input-group-input\n fdkAutoComplete\n (onComplete)=\"_handleComplete($event)\"\n #searchInputElement\n [displayFn]=\"displayFn\"\n [inputText]=\"_searchTermCtrl.value || ''\"\n [options]=\"dropdownValues\"\n [enable]=\"autoComplete && !mobile\"\n [placeholder]=\"placeholder\"\n [formControl]=\"_searchTermCtrl\"\n [attr.aria-required]=\"required\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n (keydown)=\"_handleInputKeydown($event)\"\n [attr.id]=\"inputId\"\n (focus)=\"tokenizer._showAllTokens()\"\n (blur)=\"tokenizer._hideTokens()\"\n />\n </fd-tokenizer>\n </fd-input-group>\n </ng-template>\n\n <ng-template #list>\n <ul\n *ngIf=\"viewModel.displayedOptions.length\"\n fd-list\n class=\"fd-multi-input-menu-overflow\"\n [selection]=\"true\"\n [mobileMode]=\"mobile\"\n [style.maxHeight]=\"!mobile ? maxHeight : 'auto'\"\n [byline]=\"byline\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [style.minWidth]=\"'100%'\"\n >\n <li\n *ngFor=\"let option of viewModel.displayedOptions; index as idx; trackBy: valueFn\"\n fd-list-item\n [attr.aria-label]=\"option.label\"\n (click)=\"_onCheckboxClick(option.value, $event, idx, true)\"\n (keyup)=\"_onCheckboxKeyup(option.value, $event, idx)\"\n [selected]=\"option.isSelected\"\n >\n <fd-checkbox (click)=\"_onCheckboxClick(option.value, $event, idx)\" [value]=\"option.isSelected\">\n <!-- TODO -->\n </fd-checkbox>\n\n <ng-container\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ option: option }\"\n ></ng-container>\n </li>\n\n <li\n *ngIf=\"showAllButton && viewModel.displayedOptions.length < dropdownValues.length\"\n fd-list-item\n class=\"fd-multi-input-show-all\"\n (keyDown)=\"_showAllKeyDown($event)\"\n (click)=\"_showAllClicked($event)\"\n >\n <a fd-link tabindex=\"0\">Show All ({{ dropdownValues.length }})</a>\n </li>\n </ul>\n </ng-template>\n\n <ng-template let-option=\"option\" #itemSource>\n <span\n *ngIf=\"!itemTemplate\"\n fd-list-title\n [innerHtml]=\"option.label | highlight : _searchTermCtrl.value || '' : highlight\"\n ></span>\n\n <ng-container *ngIf=\"itemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option.item }\"\n ></ng-container>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [".fd-multi-input-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-input-tokenizer-custom:not([class*=\"--cozy\"]):not([class*=\"--condensed\"]),.is-compact .fd-multi-input-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-input-tokenizer-custom[class*=--compact],.fd-multi-input-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-input-input-group-custom{max-width:100%}.fd-multi-input-custom{display:block}.fd-multi-input-item{cursor:pointer;padding:0}.fd-multi-input-popover-size{overflow:auto;display:block}.fd-multi-input-popover-custom.fd-popover-custom{max-width:100%;display:block}.fd-multi-input-show-all{width:100%;display:flex;justify-content:flex-end;background-color:transparent}.fd-multi-input-show-all .fd-link:active{color:inherit}.fd-multi-input-checkbox{width:100%;cursor:pointer}.fd-multi-input-checkbox .fd-checkbox__label{color:inherit}.fd-multi-input-menu-overflow{max-width:37.5rem}.fd-input.fd-multi-input-tokenizer-input{min-width:4rem;margin-top:0;margin-bottom:0;padding-left:0;background-color:transparent}.fd-list--multi-input{max-width:100%}.fd-popover__body--hidden{display:none}\n"] }]
620
- }], ctorParameters: function () { return [{ type: i1.ContentDensityObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i2.DynamicComponentService }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i2.RtlService, decorators: [{
631
+ }], ctorParameters: function () { return [{ type: i1.ContentDensityObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i2.DynamicComponentService }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i12.Observable, decorators: [{
632
+ type: Inject,
633
+ args: [FD_LANGUAGE]
634
+ }] }, { type: i2.RtlService, decorators: [{
621
635
  type: Optional
622
636
  }] }, { type: i2.FocusTrapService, decorators: [{
623
637
  type: Optional
@@ -723,4 +737,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
723
737
  type: HostListener,
724
738
  args: ['focusout', ['$event']]
725
739
  }] } });
726
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbXVsdGktaW5wdXQvbXVsdGktaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbXVsdGktaW5wdXQvbXVsdGktaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7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ZTtzQkFEZCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBSzNDLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUt4QyxhQUFhO3NCQURaLFNBQVM7dUJBQUMsYUFBYTtnQkFLeEIsa0JBQWtCO3NCQURqQixTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLckQsU0FBUztzQkFEUixTQUFTO3VCQUFDLGtCQUFrQjtnQkF3RzdCLHNCQUFzQixNQWthZCxTQUFTO3NCQURoQixZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIEVTQ0FQRSwgU1BBQ0UsIFRBQiwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaXJzdCwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBNZW51S2V5Ym9hcmRTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21lbnUnO1xuaW1wb3J0IHsgUG9wb3ZlckZpbGxNb2RlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IFRva2VuaXplckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90b2tlbic7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgTGlzdENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7XG4gICAgYXBwbHlDc3NDbGFzcyxcbiAgICBDc3NDbGFzc0J1aWxkZXIsXG4gICAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgRm9jdXNFc2NhcGVEaXJlY3Rpb24sXG4gICAgRm9jdXNUcmFwU2VydmljZSxcbiAgICBLZXlVdGlsLFxuICAgIE51bGxhYmxlLFxuICAgIFJhbmdlU2VsZWN0b3IsXG4gICAgUnRsU2VydmljZSxcbiAgICB1dWlkdjRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5pbXBvcnQgeyBNdWx0aUlucHV0TW9iaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9tdWx0aS1pbnB1dC1tb2JpbGUvbXVsdGktaW5wdXQtbW9iaWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aUlucHV0TW9iaWxlTW9kdWxlIH0gZnJvbSAnLi9tdWx0aS1pbnB1dC1tb2JpbGUvbXVsdGktaW5wdXQtbW9iaWxlLm1vZHVsZSc7XG5pbXBvcnQgeyBNVUxUSV9JTlBVVF9DT01QT05FTlQsIE11bHRpSW5wdXRJbnRlcmZhY2UgfSBmcm9tICcuL211bHRpLWlucHV0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBGb3JtU3RhdGVzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuXG4vKipcbiAqIElucHV0IGZpZWxkIHdpdGggbXVsdGlwbGUgc2VsZWN0aW9uIGVuYWJsZWQuIFNob3VsZCBiZSB1c2VkIHdoZW4gYSB1c2VyIGNhbiBzZWxlY3QgYmV0d2VlbiBhXG4gKiBsaW1pdGVkIG51bWJlciBvZiBwcmUtZGVmaW5lZCBvcHRpb25zIHdpdGggYSBmaWx0ZXItZW5hYmxlZCBjb250ZXh0LlxuICpcbiAqIFN1cHBvcnRzIEFuZ3VsYXIgRm9ybXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtbXVsdGktaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tdWx0aS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbXVsdGktaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNdWx0aUlucHV0Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIE1lbnVLZXlib2FyZFNlcnZpY2UsXG4gICAgICAgIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sKE11bHRpSW5wdXRDb21wb25lbnQpLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKClcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlJbnB1dENvbXBvbmVudFxuICAgIGltcGxlbWVudHNcbiAgICAgICAgTXVsdGlJbnB1dEludGVyZmFjZSxcbiAgICAgICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgICAgIENzc0NsYXNzQnVpbGRlcixcbiAgICAgICAgT25Jbml0LFxuICAgICAgICBPbkNoYW5nZXMsXG4gICAgICAgIEFmdGVyVmlld0luaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIFBsYWNlaG9sZGVyIGZvciB0aGUgaW5wdXQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlciA9ICcnO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGlucHV0IGlzIGRpc2FibGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBJZiBpdCBpcyBtYW5kYXRvcnkgZmllbGQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byB1c2UgY296eSB2aXN1YWxzIGJ1dCBjb21wYWN0IGNvbGxhcHNpbmcgYmVoYXZpb3IuICovXG4gICAgQElucHV0KClcbiAgICBjb21wYWN0Q29sbGFwc2UgPSB0cnVlO1xuXG4gICAgLyoqIE1heCBoZWlnaHQgb2YgdGhlIHBvcG92ZXIuIEFueSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aWxsIGJlIGFjY2Vzc2libGUgdGhyb3VnaCBzY3JvbGxpbmcuICovXG4gICAgQElucHV0KClcbiAgICBtYXhIZWlnaHQgPSAnMzAwcHgnO1xuXG4gICAgLyoqIEljb24gb2YgdGhlIGJ1dHRvbiBvbiB0aGUgcmlnaHQgb2YgdGhlIGlucHV0IGZpZWxkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2x5cGggPSAndmFsdWUtaGVscCc7XG5cbiAgICAvKiogVmFsdWVzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgdW5maWx0ZXJlZCBkcm9wZG93bi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3Bkb3duVmFsdWVzOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gb3BlbiB0aGUgZHJvcGRvd24gd2hlbiB0aGUgYWRkb24gYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQElucHV0KClcbiAgICBvcGVuRHJvcGRvd25PbkFkZE9uQ2xpY2tlZCA9IHRydWU7XG5cbiAgICAvKiogU2VhcmNoIHRlcm0sIG9yIG1vcmUgc3BlY2lmaWNhbGx5IHRoZSB2YWx1ZSBvZiB0aGUgaW5uZXIgaW5wdXQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VhcmNoVGVybSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DdHJsLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHNlYXJjaFRlcm0oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFRlcm1DdHJsLnZhbHVlID8/ICcnO1xuICAgIH1cblxuICAgIC8qKiBJZCBhdHRyaWJ1dGUgZm9yIGlucHV0IGVsZW1lbnQgaW5zaWRlIE11bHRpSW5wdXQgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dElkID0gJyc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgc2VhcmNoIHRlcm0gc2hvdWxkIGJlIGhpZ2hsaWdodGVkIGluIHJlc3VsdHMuICovXG4gICAgQElucHV0KClcbiAgICBoaWdobGlnaHQgPSB0cnVlO1xuXG4gICAgLyoqIFNlbGVjdGVkIGRyb3Bkb3duIGl0ZW1zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbGVjdGVkKHZhbHVlczogYW55W10pIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAgICAgdmFsdWVzPy5mb3JFYWNoKChpdGVtKSA9PiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSkpO1xuICAgIH1cbiAgICBnZXQgc2VsZWN0ZWQoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIHVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEZpbHRlciBmdW5jdGlvbi4gQWNjZXB0cyBhbiBhcnJheSBhbmQgYSBzdHJpbmcgYXMgYXJndW1lbnRzLCBhbmQgb3V0cHV0cyBhbiBhcnJheS5cbiAgICAgKiBBbiBhcnJvdyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlICp0aGlzKiBrZXl3b3JkIGluIHRoZSBjYWxsaW5nIGNvbXBvbmVudC5cbiAgICAgKiBTZWUgbXVsdGkgaW5wdXQgZXhhbXBsZXMgZm9yIGRldGFpbHMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWx0ZXJGbiA9IHRoaXMuX2RlZmF1bHRGaWx0ZXI7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBmdW5jdGlvbi4gQWNjZXB0cyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGVcbiAgICAgKiBpdGVtcyBwYXNzZWQgdG8gZHJvcGRvd25WYWx1ZXMgYXMgYXJndW1lbnQsIGFuZCBvdXRwdXRzIGFueSBwcm9wZXJ0eSwgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyB2YWx1ZS5cbiAgICAgKiBBbiBhcnJvdyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlICp0aGlzKiBrZXl3b3JkIGluIHRoZSBjYWxsaW5nIGNvbXBvbmVudC5cbiAgICAgKiBTZWUgbXVsdGkgaW5wdXQgZXhhbXBsZXMgZm9yIGRldGFpbHMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZUZuID0gdGhpcy5fZGVmYXVsdFZhbHVlRm47XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5IGZ1bmN0aW9uLiBBY2NlcHRzIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZVxuICAgICAqIGl0ZW1zIHBhc3NlZCB0byBkcm9wZG93blZhbHVlcyBhcyBhcmd1bWVudCwgYW5kIG91dHB1dHMgYSBzdHJpbmcuXG4gICAgICogQW4gYXJyb3cgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSAqdGhpcyoga2V5d29yZCBpbiB0aGUgY2FsbGluZyBjb21wb25lbnQuXG4gICAgICogU2VlIG11bHRpIGlucHV0IGV4YW1wbGVzIGZvciBkZXRhaWxzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUZuID0gdGhpcy5fZGVmYXVsdERpc3BsYXk7XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBmdW5jdGlvbi4gVXNlZCBmb3Igc3VibWl0dGluZyBuZXcgdG9rZW5zLiBBY2NlcHRzIGEgc3RyaW5nIGJ5IGRlZmF1bHQuXG4gICAgICogQW4gYXJyb3cgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSAqdGhpcyoga2V5d29yZCBpbiB0aGUgY2FsbGluZyBjb21wb25lbnQuXG4gICAgICogU2VlIG11bHRpIGlucHV0IGV4YW1wbGVzIGZvciBkZXRhaWxzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmV3VG9rZW5QYXJzZUZuOiAoc2VhcmNoVGVybTogc3RyaW5nKSA9PiBhbnkgPSB0aGlzLl9kZWZhdWx0UGFyc2U7XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBmdW5jdGlvbi4gVXNlZCB0byBjaGVjayBpZiBuZXcgdG9rZW4gY2FuIGJlIGFkZGVkIGludG8gbGlzdC5cbiAgICAgKiBXb3JrcyBvbmx5LCB3aGVuIGBhbGxvd05ld1Rva2Vuc2Agb3B0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBuZXdUb2tlblZhbGlkYXRlRm4gPSB0aGlzLl9kZWZhdWx0VG9rZW5WYWxpZGF0ZTtcblxuICAgIC8qKiBhcmlhLWxhYmVsIGF0dHJpYnV0ZSBiaW5kaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgYmluZGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogUHJlc2V0IG9wdGlvbnMgZm9yIHRoZSBTZWxlY3QgYm9keSB3aWR0aCwgd2hhdGV2ZXIgaXMgY2hvc2VuLCB0aGUgYm9keSBoYXMgYSA2MDBweCBsaW1pdC5cbiAgICAgKiAqIGBhdC1sZWFzdGAgd2lsbCBhcHBseSBhIG1pbmltdW0gd2lkdGggdG8gdGhlIGJvZHkgZXF1aXZhbGVudCB0byB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuIC0gRGVmYXVsdFxuICAgICAqICogYGVxdWFsYCB3aWxsIGFwcGx5IGEgd2lkdGggdG8gdGhlIGJvZHkgZXF1aXZhbGVudCB0byB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICogKiAnZml0LWNvbnRlbnQnIHdpbGwgYXBwbHkgd2lkdGggbmVlZGVkIHRvIHByb3Blcmx5IGRpc3BsYXkgaXRlbXMgaW5zaWRlLCBpbmRlcGVuZGVudCBvZiBjb250cm9sLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsbENvbnRyb2xNb2RlOiBQb3BvdmVyRmlsbE1vZGUgPSAnYXQtbGVhc3QnO1xuXG4gICAgLyoqXG4gICAgICogIFRoZSBzdGF0ZSBvZiB0aGUgZm9ybSBjb250cm9sIC0gYXBwbGllcyBjc3MgY2xhc3Nlcy5cbiAgICAgKiAgQ2FuIGJlIGBzdWNjZXNzYCwgYGVycm9yYCwgYHdhcm5pbmdgLCBgaW5mb3JtYXRpb25gIG9yIGJsYW5rIGZvciBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhdGU/OiBGb3JtU3RhdGVzO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBBZGRPbiBCdXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbXVsdGktaW5wdXQgYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBuZXcgdG9rZW5zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dOZXdUb2tlbnMgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBtdWx0aS1pbnB1dCBzaG91bGQgYmUgYnVpbHQgb24gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG11bHRpLWlucHV0IHNob3VsZCBoYXZlIHNob3cgYWxsIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dBbGxCdXR0b24gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogTWF4IHdpZHRoIG9mIG11bHRpIGlucHV0IGJvZHkuXG4gICAgICogYG5vbmVgIHdpbGwgbm90IGxpbWl0IHdpZHRoIG9mIHRoZSBkcm9wZG93bi5cbiAgICAgKiBgY29udGFpbmVyYCB3aWxsIGxpbWl0IHdpZHRoIG9mIHRoZSBkcm9wZG93biB0byB0aGUgd2lkdGggb2YgdGhlIG11bHRpLWlucHV0IGl0c2VsZi5cbiAgICAgKiBgbnVtYmVyYCB3aWxsIGxpbWl0IHdpZHRoIG9mIHRoZSBkcm9wZG93biBieSBwcm92aWRlZCBudW1iZXIgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYm9keU1heFdpZHRoOiAnbm9uZScgfCAnY29udGFpbmVyJyB8IG51bWJlciA9ICdub25lJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9wb3BvdmVyTWF4V2lkdGgoKTogTnVsbGFibGU8bnVtYmVyPiB7XG4gICAgICAgIGlmICh0aGlzLmJvZHlNYXhXaWR0aCA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ib2R5TWF4V2lkdGggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ib2R5TWF4V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cblxuICAgIC8qKiBNdWx0aSBJbnB1dCBNb2JpbGUgQ29uZmlndXJhdGlvbiwgaXQncyBhcHBsaWVkIG9ubHksIHdoZW4gbW9iaWxlIGlzIGVuYWJsZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZyA9IHsgaGFzQ2xvc2VCdXR0b246IHRydWUsIGFwcHJvdmVCdXR0b25UZXh0OiAnU2VsZWN0JyB9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gcmV0dXJuIHJlc3VsdHMgd2hlcmUgdGhlIGlucHV0IG1hdGNoZXMgdGhlIGVudGlyZSBzdHJpbmcuIEJ5IGRlZmF1bHQsIG9ubHkgcmVzdWx0cyB0aGF0IHN0YXJ0XG4gICAgICogd2l0aCB0aGUgaW5wdXQgc2VhcmNoIHRlcm0gd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGluY2x1ZGVzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgd2l0aCB3aGljaCB0byBkaXNwbGF5IHRoZSBpbmRpdmlkdWFsIGxpc3RlZCBpdGVtcy5cbiAgICAgKiBVc2UgaXQgYnkgcGFzc2luZyBhbiBuZy10ZW1wbGF0ZSB3aXRoIGltcGxpY2l0IGNvbnRlbnQuIFNlZSBleGFtcGxlcyBmb3IgbW9yZSBpbmZvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRvb2x0aXAgZm9yIHRoZSBtdWx0aS1pbnB1dCBpY29uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgaXRlbSBvcHRpb25zIHNob3VsZCBiZSByZW5kZXJlZCBhcyBieWxpbmUuICovXG4gICAgQElucHV0KClcbiAgICBieWxpbmUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhdXRvY29tcGxldGUgc2hvdWxkIGJlIGVuYWJsZWQ7IEVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXV0b0NvbXBsZXRlID0gdHJ1ZTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlYXJjaCB0ZXJtIGNoYW5nZXMuIFVzZSAqJGV2ZW50KiB0byBhY2Nlc3MgdGhlIG5ldyB0ZXJtLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlYXJjaFRlcm1DaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzZWxlY3RlZCBpdGVtcyBjaGFuZ2UuIFVzZSAqJGV2ZW50KiB0byBhY2Nlc3MgdGhlIG5ldyBzZWxlY3RlZCBhcnJheS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZENoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgICAvKiogV2hldGhlciBtdWx0aSBpbnB1dCBwb3BvdmVyIGJvZHkgc2hvdWxkIGJlIG9wZW5lZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgb3Igbm90IHRvIGRpc3BsYXkgdGhlIGFkZG9uIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlBZGRvbkJ1dHRvbiA9IHRydWU7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCwgd2hlbiB0aGUgbXVsdGkgaW5wdXQncyBwb3BvdmVyIGJvZHkgaXMgb3BlbmVkIG9yIGNsb3NlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG9wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFbWl0cyBldmVudCB3aGVuIHRoZSBhZGRvbiBidXR0b24gaXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBhZGRPbkJ1dHRvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQsIHdoZW4gdGhlIG11bHRpIGlucHV0J3MgYWxsIGl0ZW0gY2hlY2tlZCBvciBub3QgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBhbGxJdGVtc1NlbGVjdGVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoUG9wb3ZlckNvbXBvbmVudClcbiAgICBwb3BvdmVyUmVmOiBQb3BvdmVyQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdjb250cm9sJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIGNvbnRyb2xUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbGlzdCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBsaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoTGlzdENvbXBvbmVudClcbiAgICBsaXN0Q29tcG9uZW50OiBMaXN0Q29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dEVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBzZWFyY2hJbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoVG9rZW5pemVyQ29tcG9uZW50KVxuICAgIHRva2VuaXplcjogVG9rZW5pemVyQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBvcHRpb25JdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9wdGlvbkl0ZW1bXT4oW10pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfc2VhcmNoVGVybUN0cmwgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3ZpZXdNb2RlbCQ6IE9ic2VydmFibGU8Vmlld01vZGVsPiA9IHRoaXMuX2dldFZpZXdNb2RlbCgpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlyOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9mb2N1c1RyYXBTZXJ2aWNlOiBGb2N1c1RyYXBTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuc3Vic2NyaWJlKChpc1J0bCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpciA9IGlzUnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlucHV0SWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRJZCA9IHV1aWR2NCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hUZXJtQ3RybC52YWx1ZUNoYW5nZXMucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHNlYXJjaFRlcm0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm1DaGFuZ2UuZW1pdChzZWFyY2hUZXJtID8/ICcnKTtcbiAgICAgICAgICAgICAgICAvLyByZXNldHRpbmcgZXhpc3Rpbmcgc2VsZWN0aW9uIHN0YXRlLCBpZiBhbnlcbiAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX2dldFZpZXdNb2RlbCgpXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKCh2aWV3TW9kZWwpID0+ICF2aWV3TW9kZWwuZGlzcGxheWVkT3B0aW9ucy5zb21lKChjKSA9PiAhYy5pc1NlbGVjdGVkKSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoYWxsSXRlbXNTZWxlY3RlZCkgPT4gdGhpcy5hbGxJdGVtc1NlbGVjdGVkQ2hhbmdlLmVtaXQoYWxsSXRlbXNTZWxlY3RlZCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuXG4gICAgICAgIGlmIChjaGFuZ2VzLmRyb3Bkb3duVmFsdWVzIHx8IGNoYW5nZXMuc2VhcmNoVGVybSB8fCBjaGFuZ2VzLnZhbHVlRm4gfHwgY2hhbmdlcy5kaXNwbGF5Rm4pIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbkl0ZW1zID0gKHRoaXMuZHJvcGRvd25WYWx1ZXMgPz8gW10pLm1hcCgoaXRlbSkgPT4gdGhpcy5fZ2V0T3B0aW9uSXRlbShpdGVtKSk7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbkl0ZW1zJC5uZXh0KG9wdGlvbkl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID8gdGhpcy5fc2VhcmNoVGVybUN0cmwuZGlzYWJsZSgpIDogdGhpcy5fc2VhcmNoVGVybUN0cmwuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRVcE1vYmlsZU1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRva2VuaXplci5fc2hvd092ZXJmbG93UG9wb3ZlciA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBDc3NDbGFzc0J1aWxkZXIgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gICAgICogZnVuY3Rpb24gbXVzdCByZXR1cm4gc2luZ2xlIHN0cmluZ1xuICAgICAqIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBvcmRlciB3aGljaCBjc3MgY2xhc3NlcyBhcmUgYXBwbGllZFxuICAgICAqL1xuICAgIEBhcHBseUNzc0NsYXNzXG4gICAgYnVpbGRDb21wb25lbnRDc3NDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIC8vIFRPRE86IHRoaXMgaWNvbiBmbGlwIG1heSBiZSBhZGRyZXNzZWQgaW4gc3R5bGVzIGluIHRoZSBmdXR1cmVcbiAgICAgICAgaWYgKHRoaXMuZ2x5cGggPT09ICd2YWx1ZS1oZWxwJyAmJiB0aGlzLl9kaXIgPT09ICdydGwnKSB7XG4gICAgICAgICAgICBjb25zdCBpY29uID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zYXAtaWNvbi0tdmFsdWUtaGVscCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICBpY29uLnN0eWxlLnRyYW5zZm9ybSA9ICdzY2FsZVgoLTEpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbJ2ZkLW11bHRpLWlucHV0JywgJ2ZkLW11bHRpLWlucHV0LWN1c3RvbScsIHRoaXMuY2xhc3NdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZWxlbWVudFJlZigpOiBFbGVtZW50UmVmPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChzZWxlY3RlZDogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgd3JpdGVWYWx1ZShzZWxlY3RlZDogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHBhc3NlZCB0byBsaXN0IGNvbXBvbmVudCAqL1xuICAgIGhhbmRsZUxpc3RGb2N1c0VzY2FwZShkaXJlY3Rpb246IEZvY3VzRXNjYXBlRGlyZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd1cCcgJiYgIXRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9wZW5DaGFuZ2VIYW5kbGUob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcGVuICYmIHRoaXMub3BlbiAmJiAhdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wZW4gIT09IG9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KG9wZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcGVuID0gb3BlbjtcblxuICAgICAgICBpZiAoIXRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyT3BlbkhhbmRsZShvcGVuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFNlYXJjaFRlcm0oKTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlUGFyZW50Rm9jdXNUcmFwKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVQYXJlbnRGb2N1c1RyYXAoKTtcblxuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICAgIHRoaXMudG9rZW5pemVyLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBzZWxlY3RzIGFsbCBwb3NzaWJsZSBvcHRpb25zLiAqL1xuICAgIHNlbGVjdEFsbEl0ZW1zKHNlbGVjdEFsbDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoc2VsZWN0QWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5vcHRpb25JdGVtcyQuZ2V0VmFsdWUoKS5tYXAoKGMpID0+IGMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9uIE1vYmlsZSBtb2RlIGNoYW5nZXMgYXJlIHByb3BhZ2F0ZWQgb25seSBvbiBhcHByb3ZlLlxuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNoZWNrYm94S2V5dXAodmFsdWU6IGFueSwgZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbU1BBQ0UsIEVOVEVSXSkpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hlY2tib3hDbGljayh2YWx1ZSwgZXZlbnQsIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYXN5bmMgX29uQ2hlY2tib3hDbGljayhcbiAgICAgICAgdmFsdWU6IGFueSxcbiAgICAgICAgZXZlbnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50LFxuICAgICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgICBpc0xpc3RJdGVtID0gZmFsc2VcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdG9nZ2xlZFNlbGVjdGlvbiA9ICF0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5vblJhbmdlRWxlbWVudFRvZ2dsZWQoaW5kZXgsIGV2ZW50KTtcbiAgICAgICAgY29uc3Qgc3ViID0gdGhpcy5fdmlld01vZGVsJC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgodm0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IuYXBwbHlWYWx1ZVRvRWFjaEluUmFuZ2UoKGlkeCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVTZWxlY3QodG9nZ2xlZFNlbGVjdGlvbiwgdm0uZGlzcGxheWVkT3B0aW9uc1tpZHhdLnZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoc3ViKTtcbiAgICAgICAgaWYgKGlzTGlzdEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzdG9wIHByb3BhZ2F0aW9uIG9uIHRoZSBjaGVja2JveCBzbyBldmVudCBkb2Vzbid0IHJlYWNoIHRoZSBsaXN0IGl0ZW1cbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ub2tlbkNsaWNrKHZhbHVlOiBhbnksIHJlc2V0U2VhcmNoOiBib29sZWFuLCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgdGhpcyBmdW5jdGlvbiBmcm9tIGJlaW5nIGNhbGxlZCB0d2ljZSB3aGVuIGNoZWNrYm94IHVwZGF0ZXNcbiAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0KGZhbHNlLCB2YWx1ZSwgcmVzZXRTZWFyY2gpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZVNlbGVjdChjaGVja2VkOiBhbnksIHZhbHVlOiBhbnksIHJlc2V0U2VhcmNoID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2aW91c0xlbmd0aCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmxlbmd0aDtcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgcG9wb3ZlciBwbGFjZW1lbnQgdXBkYXRlXG4gICAgICAgIGlmICh0aGlzLl9zaG91bGRQb3BvdmVyQmVVcGRhdGVkKHByZXZpb3VzTGVuZ3RoLCB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5sZW5ndGgpKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYucmVmcmVzaFBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0U2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFNlYXJjaFRlcm0oKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbiBNb2JpbGUgbW9kZSBjaGFuZ2VzIGFyZSBwcm9wYWdhdGVkIG9ubHkgb24gYXBwcm92ZS5cbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlSW5wdXRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykgJiYgIXRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQ2hhbmdlSGFuZGxlKHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50LnNldEl0ZW1BY3RpdmUoMCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0RPV05fQVJST1csIFVQX0FSUk9XLCBFTlRFUl0pKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVTQ0FQRSkpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFRBQikgJiYgdGhpcy5vcGVuKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5saXN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50LnNldEl0ZW1BY3RpdmUoMCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ2FscGhhYmV0aWNhbCcpIHx8IEtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnbnVtZXJpYycpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZUhhbmRsZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93QWxsQ2xpY2tlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DdHJsLnNldFZhbHVlKCcnKTtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Nob3dBbGxLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW1NQQUNFLCBFTlRFUl0pKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93QWxsQ2xpY2tlZChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblN1Ym1pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMuc2VhcmNoVGVybTtcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0gPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNFeGlzdCA9IHRoaXMuX3NlbGVjdEZpcnN0RmlsdGVyZWQoc2VhcmNoVGVybSk7XG4gICAgICAgIGlmICghaXNFeGlzdCAmJiB0aGlzLmFsbG93TmV3VG9rZW5zICYmIHRoaXMubmV3VG9rZW5WYWxpZGF0ZUZuKHRoaXMuX3NlYXJjaFRlcm1DdHJsLnZhbHVlID8/ICcnKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VG9rZW4gPSB0aGlzLm5ld1Rva2VuUGFyc2VGbih0aGlzLl9zZWFyY2hUZXJtQ3RybC52YWx1ZSA/PyAnJyk7XG4gICAgICAgICAgICB0aGlzLl9hZGROZXdUb2tlblRvRHJvcERvd25WYWx1ZXMobmV3VG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0KHRydWUsIG5ld1Rva2VuKTtcbiAgICAgICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DdHJsLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlQ29tcGxldGUoeyB0ZXJtIH0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gdGVybTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgZGlhbG9nIGRpc21pc3NpbmcsIGNsb3NlcyBwb3BvdmVyIGFuZCBzZXRzIGJhY2t1cCBkYXRhLlxuICAgICAqL1xuICAgIGRpYWxvZ0Rpc21pc3Moc2VsZWN0ZWRCYWNrdXA6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3Jlc2V0U2VhcmNoVGVybSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWRCYWNrdXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGRpYWxvZyBhcHByb3ZhbCwgY2xvc2VzIHBvcG92ZXIgYW5kIHByb3BhZ2F0ZXMgZGF0YSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIGRpYWxvZ0FwcHJvdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSh0cnVlKTtcbiAgICAgICAgdGhpcy5vcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fcmVzZXRTZWFyY2hUZXJtKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbW9yZUNsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3BlbkNoYW5nZUhhbmRsZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hZGRPbkJ1dHRvbkNsaWNrZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkT25CdXR0b25DbGlja2VkLmVtaXQoZXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5vcGVuRHJvcGRvd25PbkFkZE9uQ2xpY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuQ2hhbmdlSGFuZGxlKCF0aGlzLm9wZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5vcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZGlzYWJsZVBhcmVudEZvY3VzVHJhcCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9jdXNUcmFwU2VydmljZT8ucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBlbmFibGVQYXJlbnRGb2N1c1RyYXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzVHJhcFNlcnZpY2U/LnVucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZGROZXdUb2tlblRvRHJvcERvd25WYWx1ZXMobmV3VG9rZW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kcm9wZG93blZhbHVlcy5wdXNoKG5ld1Rva2VuKTtcbiAgICAgICAgY29uc3QgbmV3T3B0aW9uID0gdGhpcy5fZ2V0T3B0aW9uSXRlbShuZXdUb2tlbik7XG4gICAgICAgIHRoaXMub3B0aW9uSXRlbXMkLm5leHQoWy4uLnRoaXMub3B0aW9uSXRlbXMkLnZhbHVlLCBuZXdPcHRpb25dKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdEZpcnN0RmlsdGVyZWQoc2VhcmNoVGVybTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5maWx0ZXJGbih0aGlzLmRyb3Bkb3duVmFsdWVzLCBzZWFyY2hUZXJtKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyZWQpICYmIGZpbHRlcmVkLmxlbmd0aCA+IDAgJiYgdGhpcy5hdXRvQ29tcGxldGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbkl0ZW0gPSB0aGlzLl9nZXRPcHRpb25JdGVtKGZpbHRlcmVkWzBdKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdCh0cnVlLCBvcHRpb25JdGVtLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3NlYXJjaFRlcm1DdHJsLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEZpbHRlcihjb250ZW50QXJyYXk6IGFueVtdLCBzZWFyY2hUZXJtOiBzdHJpbmcgPSAnJyk6IGFueVtdIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoTG93ZXIgPSBzZWFyY2hUZXJtLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBjb250ZW50QXJyYXkuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXllZFZhbHVlID0gdGhpcy5kaXNwbGF5Rm4oaXRlbSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVybSA9IHR5cGVvZiBkaXNwbGF5ZWRWYWx1ZSA9PT0gJ3N0cmluZycgPyBkaXNwbGF5ZWRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpIDogJyc7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmNsdWRlcyA/IHRlcm0uaW5jbHVkZXMoc2VhcmNoTG93ZXIpIDogdGVybS5zdGFydHNXaXRoKHNlYXJjaExvd2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0VmFsdWVGbih2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVmYXVsdERpc3BsYXkoc3RyOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFBhcnNlKHN0cjogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHRUb2tlblZhbGlkYXRlKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXN0cjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BvcG92ZXJPcGVuSGFuZGxlKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcGVuID0gb3BlbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Byb3BhZ2F0ZUNoYW5nZShlbWl0SW5Nb2JpbGU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUgfHwgZW1pdEluTW9iaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IFsuLi50aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF07XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChzZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZFBvcG92ZXJCZVVwZGF0ZWQocHJldmlvdXNMZW5ndGg6IG51bWJlciwgY3VycmVudExlbmd0aDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhIXRoaXMucG9wb3ZlclJlZiAmJlxuICAgICAgICAgICAgKChwcmV2aW91c0xlbmd0aCA9PT0gMCAmJiBjdXJyZW50TGVuZ3RoID09PSAxKSB8fCAocHJldmlvdXNMZW5ndGggPT09IDEgJiYgY3VycmVudExlbmd0aCA9PT0gMCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGFzeW5jIF9zZXRVcE1vYmlsZU1vZGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTVVMVElfSU5QVVRfQ09NUE9ORU5ULCB1c2VWYWx1ZTogdGhpcyB9XSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlRHluYW1pY01vZHVsZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsaXN0VGVtcGxhdGU6IHRoaXMubGlzdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xUZW1wbGF0ZTogdGhpcy5jb250cm9sVGVtcGxhdGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBNdWx0aUlucHV0TW9iaWxlTW9kdWxlLFxuICAgICAgICAgICAgTXVsdGlJbnB1dE1vYmlsZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICBpbmplY3RvclxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzZXRTZWFyY2hUZXJtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWFyY2hUZXJtQ3RybC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRPcHRpb25JdGVtKGl0ZW06IGFueSk6IE9wdGlvbkl0ZW0ge1xuICAgICAgICBjb25zdCB7IGxhYmVsLCB2YWx1ZSB9ID0gdGhpcy5fZ2V0VmFsdWVBbmRMYWJlbChpdGVtKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFZhbHVlQW5kTGFiZWwoaXRlbU9yVmFsdWU6IGFueSwgb3B0aW9uSXRlbXM6IE9wdGlvbkl0ZW1bXSA9IFtdKTogT3B0aW9uSXRlbUJhc2Uge1xuICAgICAgICBpZiAob3B0aW9uSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaXRlbU9yVmFsdWUgPSBvcHRpb25JdGVtcy5maW5kKChjKSA9PiBjLnZhbHVlID09PSBpdGVtT3JWYWx1ZSk/Lml0ZW0gPz8gaXRlbU9yVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmYXVsdERpc3BsYXkgPSB0eXBlb2YgaXRlbU9yVmFsdWUgPT09ICdvYmplY3QnID8gaXRlbU9yVmFsdWVbT2JqZWN0LmtleXMoaXRlbU9yVmFsdWUpWzBdXSA6IGl0ZW1PclZhbHVlO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWVGbihpdGVtT3JWYWx1ZSkgPz8gZGVmYXVsdERpc3BsYXk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5kaXNwbGF5Rm4oaXRlbU9yVmFsdWUpID8/IGRlZmF1bHREaXNwbGF5O1xuICAgICAgICByZXR1cm4geyBsYWJlbCwgdmFsdWUgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFZpZXdNb2RlbCgpOiBPYnNlcnZhYmxlPFZpZXdNb2RlbD4ge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hUZXJtQ3RybC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5fc2VhcmNoVGVybUN0cmwudmFsdWUpKSxcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShzdGFydFdpdGgobnVsbCkpLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25JdGVtcyRcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoWywgLCBvcHRpb25JdGVtc10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQubWFwKChjKSA9PiB0aGlzLl9nZXRWYWx1ZUFuZExhYmVsKGMsIG9wdGlvbkl0ZW1zKSk7XG4gICAgICAgICAgICAgICAgLy8gbm90IHVzaW5nIFwic2VhcmNoVGVybVwiIHZhbHVlIGZyb20gY29tYmluZUxhdGVzdCBhcyBpdCB3aWxsIGJlIHdyb25nIGZvciBsYXRlIHN1YnNjcmliZXJzLCBpZiBhbnlcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hUZXJtID0gdGhpcy5fc2VhcmNoVGVybUN0cmwudmFsdWUgPz8gJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLmZpbHRlckZuKFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25JdGVtcy5tYXAoKGMpID0+IGMuaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFRlcm1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXllZE9wdGlvbnMgPSAoQXJyYXkuaXNBcnJheShmaWx0ZXJlZCkgPyBmaWx0ZXJlZCA6IFtdKS5tYXAoKGl0ZW0pID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldE9wdGlvbkl0ZW0oaXRlbSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGRpc3BsYXllZE9wdGlvbnMuZm9yRWFjaCgoYykgPT4gKGMuaXNTZWxlY3RlZCA9IHNlbGVjdGVkLmZpbmRJbmRleCgoZCkgPT4gZC52YWx1ZSA9PT0gYy52YWx1ZSkgPiAtMSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWQsIGRpc3BsYXllZE9wdGlvbnMgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcsIFsnJGV2ZW50J10pXG4gICAgcHJpdmF0ZSBfZm9jdXNPdXQoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuaW50ZXJmYWNlIE9wdGlvbkl0ZW08VCA9IGFueT4gZXh0ZW5kcyBPcHRpb25JdGVtQmFzZSB7XG4gICAgaXRlbTogVDtcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xufVxuaW50ZXJmYWNlIE9wdGlvbkl0ZW1CYXNlIHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHZhbHVlOiBhbnk7XG59XG5cbmludGVyZmFjZSBWaWV3TW9kZWwge1xuICAgIHNlbGVjdGVkT3B0aW9uczogT3B0aW9uSXRlbUJhc2VbXTtcbiAgICBkaXNwbGF5ZWRPcHRpb25zOiBPcHRpb25JdGVtW107XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiX3ZpZXdNb2RlbCQgfCBhc3luYyBhcyB2aWV3TW9kZWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtbXVsdGktaW5wdXQgZmQtbXVsdGktaW5wdXQtY3VzdG9tXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1tdWx0aS1pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sXCIgKm5nSWY9XCJtb2JpbGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGZkLXBvcG92ZXJcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtcG9wb3Zlci1jdXN0b20tbGlzdFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbW9iaWxlXCJcbiAgICAgICAgICAgICAgICBbaXNPcGVuXT1cIm9wZW5cIlxuICAgICAgICAgICAgICAgIChpc09wZW5DaGFuZ2UpPVwib3BlbkNoYW5nZUhhbmRsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwiIW9wZW4gJiYgb3BlbkNoYW5nZUhhbmRsZSh0cnVlKVwiXG4gICAgICAgICAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgICAgICAgICBbbWF4V2lkdGhdPVwiX3BvcG92ZXJNYXhXaWR0aFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbZmlsbENvbnRyb2xNb2RlXT1cImZpbGxDb250cm9sTW9kZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1tdWx0aS1pbnB1dC1wb3BvdmVyLWN1c3RvbVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gKHN1Ym1pdCk9XCJfb25TdWJtaXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuXG4gICAgICAgICAgICAgICAgPGZkLXBvcG92ZXItYm9keVxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhb3BlblwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1wb3BvdmVyX19ib2R5LS1oaWRkZW5dPVwiIXZpZXdNb2RlbC5kaXNwbGF5ZWRPcHRpb25zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdFwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgI2NvbnRyb2w+XG4gICAgICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICAgICAgY2xhc3M9XCJmZC1tdWx0aS1pbnB1dC1pbnB1dC1ncm91cC1jdXN0b21cIlxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgICAgIFtidXR0b25dPVwiZGlzcGxheUFkZG9uQnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbaXNFeHBhbmRlZF09XCJvcGVuICYmICFtb2JpbGUgJiYgdmlld01vZGVsLmRpc3BsYXllZE9wdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICAgICAgW2dseXBoXT1cImRpc3BsYXlBZGRvbkJ1dHRvbiA/IGdseXBoIDogJydcIlxuICAgICAgICAgICAgW2ljb25UaXRsZV09XCJ0aXRsZVwiXG4gICAgICAgICAgICAoYWRkT25CdXR0b25DbGlja2VkKT1cIl9hZGRPbkJ1dHRvbkNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxmZC10b2tlbml6ZXJcbiAgICAgICAgICAgICAgICAjdG9rZW5pemVyXG4gICAgICAgICAgICAgICAgW2NvbXBhY3RDb2xsYXBzZV09XCJjb21wYWN0Q29sbGFwc2VcIlxuICAgICAgICAgICAgICAgIFtvcGVuXT1cIm9wZW5cIlxuICAgICAgICAgICAgICAgIFt0b2tlbml6ZXJGb2N1c2FibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChtb3JlQ2xpY2tlZEV2ZW50KT1cIl9tb3JlQ2xpY2tlZCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLW11bHRpLWlucHV0LXRva2VuaXplci1jdXN0b21cIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmZC10b2tlblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHZpZXdNb2RlbC5zZWxlY3RlZE9wdGlvbnM7IHRyYWNrQnk6IHZhbHVlRm5cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAob25DbG9zZUNsaWNrKT1cIl9vblRva2VuQ2xpY2sob3B0aW9uLnZhbHVlLCBmYWxzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChvblJlbW92ZSk9XCJfb25Ub2tlbkNsaWNrKG9wdGlvbi52YWx1ZSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwib3B0aW9uLmxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZmQtdG9rZW4+XG5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0IGZkLXRva2VuaXplcl9faW5wdXQgZmQtbXVsdGktaW5wdXQtdG9rZW5pemVyLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXG4gICAgICAgICAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICAgICAgICAgIGZka0F1dG9Db21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAob25Db21wbGV0ZSk9XCJfaGFuZGxlQ29tcGxldGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICNzZWFyY2hJbnB1dEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJkaXNwbGF5Rm5cIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRUZXh0XT1cIl9zZWFyY2hUZXJtQ3RybC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImRyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2VuYWJsZV09XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJfc2VhcmNoVGVybUN0cmxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfaGFuZGxlSW5wdXRLZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJpbnB1dElkXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInRva2VuaXplci5fc2hvd0FsbFRva2VucygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidG9rZW5pemVyLl9oaWRlVG9rZW5zKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2ZkLXRva2VuaXplcj5cbiAgICAgICAgPC9mZC1pbnB1dC1ncm91cD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNsaXN0PlxuICAgICAgICA8dWxcbiAgICAgICAgICAgICpuZ0lmPVwidmlld01vZGVsLmRpc3BsYXllZE9wdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgICAgIGZkLWxpc3RcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtbXVsdGktaW5wdXQtbWVudS1vdmVyZmxvd1wiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgW21vYmlsZU1vZGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXhIZWlnaHRdPVwiIW1vYmlsZSA/IG1heEhlaWdodCA6ICdhdXRvJ1wiXG4gICAgICAgICAgICBbYnlsaW5lXT1cImJ5bGluZVwiXG4gICAgICAgICAgICAoZm9jdXNFc2NhcGVMaXN0KT1cImhhbmRsZUxpc3RGb2N1c0VzY2FwZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW5XaWR0aF09XCInMTAwJSdcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHZpZXdNb2RlbC5kaXNwbGF5ZWRPcHRpb25zOyBpbmRleCBhcyBpZHg7IHRyYWNrQnk6IHZhbHVlRm5cIlxuICAgICAgICAgICAgICAgIGZkLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwib3B0aW9uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uQ2hlY2tib3hDbGljayhvcHRpb24udmFsdWUsICRldmVudCwgaWR4LCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cIl9vbkNoZWNrYm94S2V5dXAob3B0aW9uLnZhbHVlLCAkZXZlbnQsIGlkeClcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZkLWNoZWNrYm94IChjbGljayk9XCJfb25DaGVja2JveENsaWNrKG9wdGlvbi52YWx1ZSwgJGV2ZW50LCBpZHgpXCIgW3ZhbHVlXT1cIm9wdGlvbi5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVE9ETyAtLT5cbiAgICAgICAgICAgICAgICA8L2ZkLWNoZWNrYm94PlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtU291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb3B0aW9uOiBvcHRpb24gfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93QWxsQnV0dG9uICYmIHZpZXdNb2RlbC5kaXNwbGF5ZWRPcHRpb25zLmxlbmd0aCA8IGRyb3Bkb3duVmFsdWVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1tdWx0aS1pbnB1dC1zaG93LWFsbFwiXG4gICAgICAgICAgICAgICAgKGtleURvd24pPVwiX3Nob3dBbGxLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfc2hvd0FsbENsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGEgZmQtbGluayB0YWJpbmRleD1cIjBcIj5TaG93IEFsbCAoe3sgZHJvcGRvd25WYWx1ZXMubGVuZ3RoIH19KTwvYT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uPVwib3B0aW9uXCIgI2l0ZW1Tb3VyY2U+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiFpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgZmQtbGlzdC10aXRsZVxuICAgICAgICAgICAgW2lubmVySHRtbF09XCJvcHRpb24ubGFiZWwgfCBoaWdobGlnaHQgOiBfc2VhcmNoVGVybUN0cmwudmFsdWUgfHwgJycgOiBoaWdobGlnaHRcIlxuICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9uLml0ZW0gfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
740
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbXVsdGktaW5wdXQvbXVsdGktaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbXVsdGktaW5wdXQvbXVsdGktaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHakUsT0FBTyxFQUFF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aW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5URVIsIEVTQ0FQRSwgU1BBQ0UsIFRBQiwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlyc3QsIG1hcCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgTWVudUtleWJvYXJkU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tZW51JztcbmltcG9ydCB7IFBvcG92ZXJGaWxsTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZUNvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5pbXBvcnQgeyBUb2tlbml6ZXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdG9rZW4nO1xuaW1wb3J0IHsgRm9ybUl0ZW1Db250cm9sLCByZWdpc3RlckZvcm1JdGVtQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQge1xuICAgIGFwcGx5Q3NzQ2xhc3MsXG4gICAgQ3NzQ2xhc3NCdWlsZGVyLFxuICAgIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgIEZvY3VzRXNjYXBlRGlyZWN0aW9uLFxuICAgIEZvY3VzVHJhcFNlcnZpY2UsXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBSYW5nZVNlbGVjdG9yLFxuICAgIFJ0bFNlcnZpY2UsXG4gICAgdXVpZHY0XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuaW1wb3J0IHsgTXVsdGlJbnB1dE1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vbXVsdGktaW5wdXQtbW9iaWxlL211bHRpLWlucHV0LW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlJbnB1dE1vYmlsZU1vZHVsZSB9IGZyb20gJy4vbXVsdGktaW5wdXQtbW9iaWxlL211bHRpLWlucHV0LW1vYmlsZS5tb2R1bGUnO1xuaW1wb3J0IHsgTVVMVElfSU5QVVRfQ09NUE9ORU5ULCBNdWx0aUlucHV0SW50ZXJmYWNlIH0gZnJvbSAnLi9tdWx0aS1pbnB1dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlPYnNlcnZlciwgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgRm9ybVN0YXRlcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL2Zvcm1zJztcbmltcG9ydCB7IEZEX0xBTkdVQUdFLCBGZExhbmd1YWdlLCBUcmFuc2xhdGlvblJlc29sdmVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcblxuLyoqXG4gKiBJbnB1dCBmaWVsZCB3aXRoIG11bHRpcGxlIHNlbGVjdGlvbiBlbmFibGVkLiBTaG91bGQgYmUgdXNlZCB3aGVuIGEgdXNlciBjYW4gc2VsZWN0IGJldHdlZW4gYVxuICogbGltaXRlZCBudW1iZXIgb2YgcHJlLWRlZmluZWQgb3B0aW9ucyB3aXRoIGEgZmlsdGVyLWVuYWJsZWQgY29udGV4dC5cbiAqXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLW11bHRpLWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL211bHRpLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTXVsdGlJbnB1dENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBNZW51S2V5Ym9hcmRTZXJ2aWNlLFxuICAgICAgICByZWdpc3RlckZvcm1JdGVtQ29udHJvbChNdWx0aUlucHV0Q29tcG9uZW50KSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpSW5wdXRDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzXG4gICAgICAgIE11bHRpSW5wdXRJbnRlcmZhY2UsXG4gICAgICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgICAgICBDc3NDbGFzc0J1aWxkZXIsXG4gICAgICAgIE9uSW5pdCxcbiAgICAgICAgT25DaGFuZ2VzLFxuICAgICAgICBBZnRlclZpZXdJbml0LFxuICAgICAgICBPbkRlc3Ryb3ksXG4gICAgICAgIEZvcm1JdGVtQ29udHJvbFxue1xuICAgIC8qKiBQbGFjZWhvbGRlciBmb3IgdGhlIGlucHV0IGZpZWxkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogSWYgaXQgaXMgbWFuZGF0b3J5IGZpZWxkICovXG4gICAgQElucHV0KClcbiAgICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gdXNlIGNvenkgdmlzdWFscyBidXQgY29tcGFjdCBjb2xsYXBzaW5nIGJlaGF2aW9yLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29tcGFjdENvbGxhcHNlID0gdHJ1ZTtcblxuICAgIC8qKiBNYXggaGVpZ2h0IG9mIHRoZSBwb3BvdmVyLiBBbnkgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2lsbCBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggc2Nyb2xsaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SGVpZ2h0ID0gJzMwMHB4JztcblxuICAgIC8qKiBJY29uIG9mIHRoZSBidXR0b24gb24gdGhlIHJpZ2h0IG9mIHRoZSBpbnB1dCBmaWVsZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoID0gJ3ZhbHVlLWhlbHAnO1xuXG4gICAgLyoqIFZhbHVlcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHVuZmlsdGVyZWQgZHJvcGRvd24uICovXG4gICAgQElucHV0KClcbiAgICBkcm9wZG93blZhbHVlczogYW55W10gPSBbXTtcblxuICAgIC8qKiBXaGV0aGVyIHRvIG9wZW4gdGhlIGRyb3Bkb3duIHdoZW4gdGhlIGFkZG9uIGJ1dHRvbiBpcyBjbGlja2VkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbkRyb3Bkb3duT25BZGRPbkNsaWNrZWQgPSB0cnVlO1xuXG4gICAgLyoqIFNlYXJjaCB0ZXJtLCBvciBtb3JlIHNwZWNpZmljYWxseSB0aGUgdmFsdWUgb2YgdGhlIGlubmVyIGlucHV0IGZpZWxkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlYXJjaFRlcm0odmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zZWFyY2hUZXJtQ3RybC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBzZWFyY2hUZXJtKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hUZXJtQ3RybC52YWx1ZSA/PyAnJztcbiAgICB9XG5cbiAgICAvKiogSWQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBNdWx0aUlucHV0IGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRJZCA9ICcnO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHNlYXJjaCB0ZXJtIHNob3VsZCBiZSBoaWdobGlnaHRlZCBpbiByZXN1bHRzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlnaGxpZ2h0ID0gdHJ1ZTtcblxuICAgIC8qKiBTZWxlY3RlZCBkcm9wZG93biBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZXM6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgIHZhbHVlcz8uZm9yRWFjaCgoaXRlbSkgPT4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pKTtcbiAgICB9XG4gICAgZ2V0IHNlbGVjdGVkKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKiB1c2VyJ3MgY3VzdG9tIGNsYXNzZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsYXNzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgZnVuY3Rpb24uIEFjY2VwdHMgYW4gYXJyYXkgYW5kIGEgc3RyaW5nIGFzIGFyZ3VtZW50cywgYW5kIG91dHB1dHMgYW4gYXJyYXkuXG4gICAgICogQW4gYXJyb3cgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSAqdGhpcyoga2V5d29yZCBpbiB0aGUgY2FsbGluZyBjb21wb25lbnQuXG4gICAgICogU2VlIG11bHRpIGlucHV0IGV4YW1wbGVzIGZvciBkZXRhaWxzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsdGVyRm4gPSB0aGlzLl9kZWZhdWx0RmlsdGVyO1xuXG4gICAgLyoqXG4gICAgICogVmFsdWUgZnVuY3Rpb24uIEFjY2VwdHMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlXG4gICAgICogaXRlbXMgcGFzc2VkIHRvIGRyb3Bkb3duVmFsdWVzIGFzIGFyZ3VtZW50LCBhbmQgb3V0cHV0cyBhbnkgcHJvcGVydHksIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgdmFsdWUuXG4gICAgICogQW4gYXJyb3cgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSAqdGhpcyoga2V5d29yZCBpbiB0aGUgY2FsbGluZyBjb21wb25lbnQuXG4gICAgICogU2VlIG11bHRpIGlucHV0IGV4YW1wbGVzIGZvciBkZXRhaWxzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWVGbiA9IHRoaXMuX2RlZmF1bHRWYWx1ZUZuO1xuXG4gICAgLyoqXG4gICAgICogRGlzcGxheSBmdW5jdGlvbi4gQWNjZXB0cyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGVcbiAgICAgKiBpdGVtcyBwYXNzZWQgdG8gZHJvcGRvd25WYWx1ZXMgYXMgYXJndW1lbnQsIGFuZCBvdXRwdXRzIGEgc3RyaW5nLlxuICAgICAqIEFuIGFycm93IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgKnRoaXMqIGtleXdvcmQgaW4gdGhlIGNhbGxpbmcgY29tcG9uZW50LlxuICAgICAqIFNlZSBtdWx0aSBpbnB1dCBleGFtcGxlcyBmb3IgZGV0YWlscy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlGbiA9IHRoaXMuX2RlZmF1bHREaXNwbGF5O1xuXG4gICAgLyoqXG4gICAgICogUGFyc2UgZnVuY3Rpb24uIFVzZWQgZm9yIHN1Ym1pdHRpbmcgbmV3IHRva2Vucy4gQWNjZXB0cyBhIHN0cmluZyBieSBkZWZhdWx0LlxuICAgICAqIEFuIGFycm93IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgKnRoaXMqIGtleXdvcmQgaW4gdGhlIGNhbGxpbmcgY29tcG9uZW50LlxuICAgICAqIFNlZSBtdWx0aSBpbnB1dCBleGFtcGxlcyBmb3IgZGV0YWlscy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5ld1Rva2VuUGFyc2VGbjogKHNlYXJjaFRlcm06IHN0cmluZykgPT4gYW55ID0gdGhpcy5fZGVmYXVsdFBhcnNlO1xuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgZnVuY3Rpb24uIFVzZWQgdG8gY2hlY2sgaWYgbmV3IHRva2VuIGNhbiBiZSBhZGRlZCBpbnRvIGxpc3QuXG4gICAgICogV29ya3Mgb25seSwgd2hlbiBgYWxsb3dOZXdUb2tlbnNgIG9wdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmV3VG9rZW5WYWxpZGF0ZUZuID0gdGhpcy5fZGVmYXVsdFRva2VuVmFsaWRhdGU7XG5cbiAgICAvKiogYXJpYS1sYWJlbCBhdHRyaWJ1dGUgYmluZGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIGJpbmRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIFByZXNldCBvcHRpb25zIGZvciB0aGUgU2VsZWN0IGJvZHkgd2lkdGgsIHdoYXRldmVyIGlzIGNob3NlbiwgdGhlIGJvZHkgaGFzIGEgNjAwcHggbGltaXQuXG4gICAgICogKiBgYXQtbGVhc3RgIHdpbGwgYXBwbHkgYSBtaW5pbXVtIHdpZHRoIHRvIHRoZSBib2R5IGVxdWl2YWxlbnQgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLiAtIERlZmF1bHRcbiAgICAgKiAqIGBlcXVhbGAgd2lsbCBhcHBseSBhIHdpZHRoIHRvIHRoZSBib2R5IGVxdWl2YWxlbnQgdG8gdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLlxuICAgICAqICogJ2ZpdC1jb250ZW50JyB3aWxsIGFwcGx5IHdpZHRoIG5lZWRlZCB0byBwcm9wZXJseSBkaXNwbGF5IGl0ZW1zIGluc2lkZSwgaW5kZXBlbmRlbnQgb2YgY29udHJvbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbGxDb250cm9sTW9kZTogUG9wb3ZlckZpbGxNb2RlID0gJ2F0LWxlYXN0JztcblxuICAgIC8qKlxuICAgICAqICBUaGUgc3RhdGUgb2YgdGhlIGZvcm0gY29udHJvbCAtIGFwcGxpZXMgY3NzIGNsYXNzZXMuXG4gICAgICogIENhbiBiZSBgc3VjY2Vzc2AsIGBlcnJvcmAsIGB3YXJuaW5nYCwgYGluZm9ybWF0aW9uYCBvciBibGFuayBmb3IgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlPzogRm9ybVN0YXRlcztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgQWRkT24gQnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGVcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBidXR0b25Gb2N1c2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG11bHRpLWlucHV0IGFsbG93cyB0aGUgY3JlYXRpb24gb2YgbmV3IHRva2Vucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TmV3VG9rZW5zID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbXVsdGktaW5wdXQgc2hvdWxkIGJlIGJ1aWx0IG9uIG1vYmlsZSBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBtdWx0aS1pbnB1dCBzaG91bGQgaGF2ZSBzaG93IGFsbCBidXR0b24uICovXG4gICAgQElucHV0KClcbiAgICBzaG93QWxsQnV0dG9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIE1heCB3aWR0aCBvZiBtdWx0aSBpbnB1dCBib2R5LlxuICAgICAqIGBub25lYCB3aWxsIG5vdCBsaW1pdCB3aWR0aCBvZiB0aGUgZHJvcGRvd24uXG4gICAgICogYGNvbnRhaW5lcmAgd2lsbCBsaW1pdCB3aWR0aCBvZiB0aGUgZHJvcGRvd24gdG8gdGhlIHdpZHRoIG9mIHRoZSBtdWx0aS1pbnB1dCBpdHNlbGYuXG4gICAgICogYG51bWJlcmAgd2lsbCBsaW1pdCB3aWR0aCBvZiB0aGUgZHJvcGRvd24gYnkgcHJvdmlkZWQgbnVtYmVyIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJvZHlNYXhXaWR0aDogJ25vbmUnIHwgJ2NvbnRhaW5lcicgfCBudW1iZXIgPSAnbm9uZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcG9wb3Zlck1heFdpZHRoKCk6IE51bGxhYmxlPG51bWJlcj4ge1xuICAgICAgICBpZiAodGhpcy5ib2R5TWF4V2lkdGggPT09ICdub25lJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYm9keU1heFdpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9keU1heFdpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cblxuICAgIC8qKiBNdWx0aSBJbnB1dCBNb2JpbGUgQ29uZmlndXJhdGlvbiwgaXQncyBhcHBsaWVkIG9ubHksIHdoZW4gbW9iaWxlIGlzIGVuYWJsZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZyA9IHsgaGFzQ2xvc2VCdXR0b246IHRydWUsIGFwcHJvdmVCdXR0b25UZXh0OiAnU2VsZWN0JyB9O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gcmV0dXJuIHJlc3VsdHMgd2hlcmUgdGhlIGlucHV0IG1hdGNoZXMgdGhlIGVudGlyZSBzdHJpbmcuIEJ5IGRlZmF1bHQsIG9ubHkgcmVzdWx0cyB0aGF0IHN0YXJ0XG4gICAgICogd2l0aCB0aGUgaW5wdXQgc2VhcmNoIHRlcm0gd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGluY2x1ZGVzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgd2l0aCB3aGljaCB0byBkaXNwbGF5IHRoZSBpbmRpdmlkdWFsIGxpc3RlZCBpdGVtcy5cbiAgICAgKiBVc2UgaXQgYnkgcGFzc2luZyBhbiBuZy10ZW1wbGF0ZSB3aXRoIGltcGxpY2l0IGNvbnRlbnQuIFNlZSBleGFtcGxlcyBmb3IgbW9yZSBpbmZvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRvb2x0aXAgZm9yIHRoZSBtdWx0aS1pbnB1dCBpY29uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgaXRlbSBvcHRpb25zIHNob3VsZCBiZSByZW5kZXJlZCBhcyBieWxpbmUuICovXG4gICAgQElucHV0KClcbiAgICBieWxpbmUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhdXRvY29tcGxldGUgc2hvdWxkIGJlIGVuYWJsZWQ7IEVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXV0b0NvbXBsZXRlID0gdHJ1ZTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlYXJjaCB0ZXJtIGNoYW5nZXMuIFVzZSAqJGV2ZW50KiB0byBhY2Nlc3MgdGhlIG5ldyB0ZXJtLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNlYXJjaFRlcm1DaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzZWxlY3RlZCBpdGVtcyBjaGFuZ2UuIFVzZSAqJGV2ZW50KiB0byBhY2Nlc3MgdGhlIG5ldyBzZWxlY3RlZCBhcnJheS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZENoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgICAvKiogV2hldGhlciBtdWx0aSBpbnB1dCBwb3BvdmVyIGJvZHkgc2hvdWxkIGJlIG9wZW5lZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgb3Igbm90IHRvIGRpc3BsYXkgdGhlIGFkZG9uIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlBZGRvbkJ1dHRvbiA9IHRydWU7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCwgd2hlbiB0aGUgbXVsdGkgaW5wdXQncyBwb3BvdmVyIGJvZHkgaXMgb3BlbmVkIG9yIGNsb3NlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG9wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFbWl0cyBldmVudCB3aGVuIHRoZSBhZGRvbiBidXR0b24gaXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBhZGRPbkJ1dHRvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQsIHdoZW4gdGhlIG11bHRpIGlucHV0J3MgYWxsIGl0ZW0gY2hlY2tlZCBvciBub3QgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBhbGxJdGVtc1NlbGVjdGVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoUG9wb3ZlckNvbXBvbmVudClcbiAgICBwb3BvdmVyUmVmOiBQb3BvdmVyQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdjb250cm9sJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIGNvbnRyb2xUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbGlzdCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBsaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoTGlzdENvbXBvbmVudClcbiAgICBsaXN0Q29tcG9uZW50OiBMaXN0Q29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dEVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBzZWFyY2hJbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoVG9rZW5pemVyQ29tcG9uZW50KVxuICAgIHRva2VuaXplcjogVG9rZW5pemVyQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBvcHRpb25JdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9wdGlvbkl0ZW1bXT4oW10pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfc2VhcmNoVGVybUN0cmwgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3ZpZXdNb2RlbCQ6IE9ic2VydmFibGU8Vmlld01vZGVsPiA9IHRoaXMuX2dldFZpZXdNb2RlbCgpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlyOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90cmFuc2xhdGlvblJlc29sdmVyID0gbmV3IFRyYW5zbGF0aW9uUmVzb2x2ZXIoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0UmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZHluYW1pY0NvbXBvbmVudFNlcnZpY2U6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIEBJbmplY3QoRkRfTEFOR1VBR0UpIHByaXZhdGUgcmVhZG9ubHkgX2xhbmd1YWdlOiBPYnNlcnZhYmxlPEZkTGFuZ3VhZ2U+LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9mb2N1c1RyYXBTZXJ2aWNlOiBGb2N1c1RyYXBTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuc3Vic2NyaWJlKChpc1J0bCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RpciA9IGlzUnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlucHV0SWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRJZCA9IHV1aWR2NCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hUZXJtQ3RybC52YWx1ZUNoYW5nZXMucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHNlYXJjaFRlcm0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm1DaGFuZ2UuZW1pdChzZWFyY2hUZXJtID8/ICcnKTtcbiAgICAgICAgICAgICAgICAvLyByZXNldHRpbmcgZXhpc3Rpbmcgc2VsZWN0aW9uIHN0YXRlLCBpZiBhbnlcbiAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX2dldFZpZXdNb2RlbCgpXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKCh2aWV3TW9kZWwpID0+ICF2aWV3TW9kZWwuZGlzcGxheWVkT3B0aW9ucy5zb21lKChjKSA9PiAhYy5pc1NlbGVjdGVkKSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoYWxsSXRlbXNTZWxlY3RlZCkgPT4gdGhpcy5hbGxJdGVtc1NlbGVjdGVkQ2hhbmdlLmVtaXQoYWxsSXRlbXNTZWxlY3RlZCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFyaWFMYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICAgICAgdGhpcy5fbGFuZ3VhZ2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0QXJpYUxhYmVsKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZHJvcGRvd25WYWx1ZXMgfHwgY2hhbmdlcy5zZWFyY2hUZXJtIHx8IGNoYW5nZXMudmFsdWVGbiB8fCBjaGFuZ2VzLmRpc3BsYXlGbikge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSXRlbXMgPSAodGhpcy5kcm9wZG93blZhbHVlcyA/PyBbXSkubWFwKChpdGVtKSA9PiB0aGlzLl9nZXRPcHRpb25JdGVtKGl0ZW0pKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uSXRlbXMkLm5leHQob3B0aW9uSXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPyB0aGlzLl9zZWFyY2hUZXJtQ3RybC5kaXNhYmxlKCkgOiB0aGlzLl9zZWFyY2hUZXJtQ3RybC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFVwTW9iaWxlTW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9rZW5pemVyLl9zaG93T3ZlcmZsb3dQb3BvdmVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgLy8gVE9ETzogdGhpcyBpY29uIGZsaXAgbWF5IGJlIGFkZHJlc3NlZCBpbiBzdHlsZXMgaW4gdGhlIGZ1dHVyZVxuICAgICAgICBpZiAodGhpcy5nbHlwaCA9PT0gJ3ZhbHVlLWhlbHAnICYmIHRoaXMuX2RpciA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2FwLWljb24tLXZhbHVlLWhlbHAnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgaWNvbi5zdHlsZS50cmFuc2Zvcm0gPSAnc2NhbGVYKC0xKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWydmZC1tdWx0aS1pbnB1dCcsICdmZC1tdWx0aS1pbnB1dC1jdXN0b20nLCB0aGlzLmNsYXNzXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChzZWxlY3RlZDogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWQ6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBwYXNzZWQgdG8gbGlzdCBjb21wb25lbnQgKi9cbiAgICBoYW5kbGVMaXN0Rm9jdXNFc2NhcGUoZGlyZWN0aW9uOiBGb2N1c0VzY2FwZURpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnICYmICF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvcGVuQ2hhbmdlSGFuZGxlKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3BlbiAmJiB0aGlzLm9wZW4gJiYgIXRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcGVuICE9PSBvcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdChvcGVuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3BlbiA9IG9wZW47XG5cbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fcG9wb3Zlck9wZW5IYW5kbGUob3Blbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRTZWFyY2hUZXJtKCk7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVBhcmVudEZvY3VzVHJhcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlUGFyZW50Rm9jdXNUcmFwKCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRva2VuaXplci50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9XG4gICAgICAgICAgICB0aGlzLnRva2VuaXplci50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgc2VsZWN0cyBhbGwgcG9zc2libGUgb3B0aW9ucy4gKi9cbiAgICBzZWxlY3RBbGxJdGVtcyhzZWxlY3RBbGw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHNlbGVjdEFsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMub3B0aW9uSXRlbXMkLmdldFZhbHVlKCkubWFwKChjKSA9PiBjLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPbiBNb2JpbGUgbW9kZSBjaGFuZ2VzIGFyZSBwcm9wYWdhdGVkIG9ubHkgb24gYXBwcm92ZS5cbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25DaGVja2JveEtleXVwKHZhbHVlOiBhbnksIGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW1NQQUNFLCBFTlRFUl0pKSB7XG4gICAgICAgICAgICB0aGlzLl9vbkNoZWNrYm94Q2xpY2sodmFsdWUsIGV2ZW50LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFzeW5jIF9vbkNoZWNrYm94Q2xpY2soXG4gICAgICAgIHZhbHVlOiBhbnksXG4gICAgICAgIGV2ZW50OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCxcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgaXNMaXN0SXRlbSA9IGZhbHNlXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRvZ2dsZWRTZWxlY3Rpb24gPSAhdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3Iub25SYW5nZUVsZW1lbnRUb2dnbGVkKGluZGV4LCBldmVudCk7XG4gICAgICAgIGNvbnN0IHN1YiA9IHRoaXMuX3ZpZXdNb2RlbCQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKHZtKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLmFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKChpZHgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0KHRvZ2dsZWRTZWxlY3Rpb24sIHZtLmRpc3BsYXllZE9wdGlvbnNbaWR4XS52YWx1ZSwgZmFsc2UpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHN1Yik7XG4gICAgICAgIGlmIChpc0xpc3RJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RvcCBwcm9wYWdhdGlvbiBvbiB0aGUgY2hlY2tib3ggc28gZXZlbnQgZG9lc24ndCByZWFjaCB0aGUgbGlzdCBpdGVtXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uVG9rZW5DbGljayh2YWx1ZTogYW55LCByZXNldFNlYXJjaDogYm9vbGVhbiwgZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpOyAvLyBwcmV2ZW50IHRoaXMgZnVuY3Rpb24gZnJvbSBiZWluZyBjYWxsZWQgdHdpY2Ugd2hlbiBjaGVja2JveCB1cGRhdGVzXG4gICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdChmYWxzZSwgdmFsdWUsIHJlc2V0U2VhcmNoLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGVTZWxlY3QoY2hlY2tlZDogYW55LCB2YWx1ZTogYW55LCByZXNldFNlYXJjaCA9IHRydWUsIGZyb21Ub2tlbkNsb3NlQ2xpY2sgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2aW91c0xlbmd0aCA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmxlbmd0aDtcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgcG9wb3ZlciBwbGFjZW1lbnQgdXBkYXRlXG4gICAgICAgIGlmICh0aGlzLl9zaG91bGRQb3BvdmVyQmVVcGRhdGVkKHByZXZpb3VzTGVuZ3RoLCB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5sZW5ndGgpKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYucmVmcmVzaFBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0U2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFNlYXJjaFRlcm0oKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbiBNb2JpbGUgbW9kZSBjaGFuZ2VzIGFyZSBwcm9wYWdhdGVkIG9ubHkgb24gYXBwcm92ZS5cbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKGZyb21Ub2tlbkNsb3NlQ2xpY2spO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZUlucHV0S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpICYmICF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZUhhbmRsZSh0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubGlzdENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5zZXRJdGVtQWN0aXZlKDApO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtET1dOX0FSUk9XLCBVUF9BUlJPVywgRU5URVJdKSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuQ2hhbmdlSGFuZGxlKHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFU0NBUEUpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBUQUIpICYmIHRoaXMub3Blbikge1xuICAgICAgICAgICAgaWYgKHRoaXMubGlzdENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5zZXRJdGVtQWN0aXZlKDApO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdhbHBoYWJldGljYWwnKSB8fCBLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ251bWVyaWMnKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd0FsbENsaWNrZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLl9zZWFyY2hUZXJtQ3RybC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93QWxsS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtTUEFDRSwgRU5URVJdKSkge1xuICAgICAgICAgICAgdGhpcy5fc2hvd0FsbENsaWNrZWQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25TdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0aGlzLnNlYXJjaFRlcm07XG4gICAgICAgIGlmIChzZWFyY2hUZXJtID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzRXhpc3QgPSB0aGlzLl9zZWxlY3RGaXJzdEZpbHRlcmVkKHNlYXJjaFRlcm0pO1xuICAgICAgICBpZiAoIWlzRXhpc3QgJiYgdGhpcy5hbGxvd05ld1Rva2VucyAmJiB0aGlzLm5ld1Rva2VuVmFsaWRhdGVGbih0aGlzLl9zZWFyY2hUZXJtQ3RybC52YWx1ZSA/PyAnJykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1Rva2VuID0gdGhpcy5uZXdUb2tlblBhcnNlRm4odGhpcy5fc2VhcmNoVGVybUN0cmwudmFsdWUgPz8gJycpO1xuICAgICAgICAgICAgdGhpcy5fYWRkTmV3VG9rZW5Ub0Ryb3BEb3duVmFsdWVzKG5ld1Rva2VuKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdCh0cnVlLCBuZXdUb2tlbik7XG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hUZXJtQ3RybC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZUNvbXBsZXRlKHsgdGVybSB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IHRlcm07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGRpYWxvZyBkaXNtaXNzaW5nLCBjbG9zZXMgcG9wb3ZlciBhbmQgc2V0cyBiYWNrdXAgZGF0YS5cbiAgICAgKi9cbiAgICBkaWFsb2dEaXNtaXNzKHNlbGVjdGVkQmFja3VwOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl9yZXNldFNlYXJjaFRlcm0oKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkQmFja3VwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBkaWFsb2cgYXBwcm92YWwsIGNsb3NlcyBwb3BvdmVyIGFuZCBwcm9wYWdhdGVzIGRhdGEgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UodHJ1ZSk7XG4gICAgICAgIHRoaXMub3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIHRoaXMuX3Jlc2V0U2VhcmNoVGVybSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21vcmVDbGlja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYWRkT25CdXR0b25DbGlja2VkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFkZE9uQnV0dG9uQ2xpY2tlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgaWYgKHRoaXMub3BlbkRyb3Bkb3duT25BZGRPbkNsaWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZUhhbmRsZSghdGhpcy5vcGVuKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGRpc2FibGVQYXJlbnRGb2N1c1RyYXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzVHJhcFNlcnZpY2U/LnBhdXNlQ3VycmVudEZvY3VzVHJhcCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZW5hYmxlUGFyZW50Rm9jdXNUcmFwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlPy51bnBhdXNlQ3VycmVudEZvY3VzVHJhcCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkTmV3VG9rZW5Ub0Ryb3BEb3duVmFsdWVzKG5ld1Rva2VuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25WYWx1ZXMucHVzaChuZXdUb2tlbik7XG4gICAgICAgIGNvbnN0IG5ld09wdGlvbiA9IHRoaXMuX2dldE9wdGlvbkl0ZW0obmV3VG9rZW4pO1xuICAgICAgICB0aGlzLm9wdGlvbkl0ZW1zJC5uZXh0KFsuLi50aGlzLm9wdGlvbkl0ZW1zJC52YWx1ZSwgbmV3T3B0aW9uXSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RGaXJzdEZpbHRlcmVkKHNlYXJjaFRlcm06IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyRm4odGhpcy5kcm9wZG93blZhbHVlcywgc2VhcmNoVGVybSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcmVkKSAmJiBmaWx0ZXJlZC5sZW5ndGggPiAwICYmIHRoaXMuYXV0b0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25JdGVtID0gdGhpcy5fZ2V0T3B0aW9uSXRlbShmaWx0ZXJlZFswXSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTZWxlY3QodHJ1ZSwgb3B0aW9uSXRlbS52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hUZXJtQ3RybC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHRGaWx0ZXIoY29udGVudEFycmF5OiBhbnlbXSwgc2VhcmNoVGVybTogc3RyaW5nID0gJycpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaExvd2VyID0gc2VhcmNoVGVybS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gY29udGVudEFycmF5LmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5ZWRWYWx1ZSA9IHRoaXMuZGlzcGxheUZuKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlcm0gPSB0eXBlb2YgZGlzcGxheWVkVmFsdWUgPT09ICdzdHJpbmcnID8gZGlzcGxheWVkVmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA6ICcnO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5jbHVkZXMgPyB0ZXJtLmluY2x1ZGVzKHNlYXJjaExvd2VyKSA6IHRlcm0uc3RhcnRzV2l0aChzZWFyY2hMb3dlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlRm4odmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHREaXNwbGF5KHN0cjogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHRQYXJzZShzdHI6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0VG9rZW5WYWxpZGF0ZShzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISFzdHI7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wb3BvdmVyT3BlbkhhbmRsZShvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3BlbiA9IG9wZW47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9wYWdhdGVDaGFuZ2UoZW1pdEluTW9iaWxlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubW9iaWxlIHx8IGVtaXRJbk1vYmlsZSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbLi4udGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRdO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShzZWxlY3RlZCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zaG91bGRQb3BvdmVyQmVVcGRhdGVkKHByZXZpb3VzTGVuZ3RoOiBudW1iZXIsIGN1cnJlbnRMZW5ndGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnBvcG92ZXJSZWYgJiZcbiAgICAgICAgICAgICgocHJldmlvdXNMZW5ndGggPT09IDAgJiYgY3VycmVudExlbmd0aCA9PT0gMSkgfHwgKHByZXZpb3VzTGVuZ3RoID09PSAxICYmIGN1cnJlbnRMZW5ndGggPT09IDApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0VXBNb2JpbGVNb2RlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1VTFRJX0lOUFVUX0NPTVBPTkVOVCwgdXNlVmFsdWU6IHRoaXMgfV0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuX2luamVjdG9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNyZWF0ZUR5bmFtaWNNb2R1bGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGlzdFRlbXBsYXRlOiB0aGlzLmxpc3RUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBjb250cm9sVGVtcGxhdGU6IHRoaXMuY29udHJvbFRlbXBsYXRlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTXVsdGlJbnB1dE1vYmlsZU1vZHVsZSxcbiAgICAgICAgICAgIE11bHRpSW5wdXRNb2JpbGVDb21wb25lbnQsXG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgaW5qZWN0b3JcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2V0U2VhcmNoVGVybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoVGVybUN0cmwuc2V0VmFsdWUoJycpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3B0aW9uSXRlbShpdGVtOiBhbnkpOiBPcHRpb25JdGVtIHtcbiAgICAgICAgY29uc3QgeyBsYWJlbCwgdmFsdWUgfSA9IHRoaXMuX2dldFZhbHVlQW5kTGFiZWwoaXRlbSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRWYWx1ZUFuZExhYmVsKGl0ZW1PclZhbHVlOiBhbnksIG9wdGlvbkl0ZW1zOiBPcHRpb25JdGVtW10gPSBbXSk6IE9wdGlvbkl0ZW1CYXNlIHtcbiAgICAgICAgaWYgKG9wdGlvbkl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGl0ZW1PclZhbHVlID0gb3B0aW9uSXRlbXMuZmluZCgoYykgPT4gYy52YWx1ZSA9PT0gaXRlbU9yVmFsdWUpPy5pdGVtID8/IGl0ZW1PclZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlZmF1bHREaXNwbGF5ID0gdHlwZW9mIGl0ZW1PclZhbHVlID09PSAnb2JqZWN0JyA/IGl0ZW1PclZhbHVlW09iamVjdC5rZXlzKGl0ZW1PclZhbHVlKVswXV0gOiBpdGVtT3JWYWx1ZTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlRm4oaXRlbU9yVmFsdWUpID8/IGRlZmF1bHREaXNwbGF5O1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZGlzcGxheUZuKGl0ZW1PclZhbHVlKSA/PyBkZWZhdWx0RGlzcGxheTtcbiAgICAgICAgcmV0dXJuIHsgbGFiZWwsIHZhbHVlIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRWaWV3TW9kZWwoKTogT2JzZXJ2YWJsZTxWaWV3TW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5fc2VhcmNoVGVybUN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuX3NlYXJjaFRlcm1DdHJsLnZhbHVlKSksXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUoc3RhcnRXaXRoKG51bGwpKSxcbiAgICAgICAgICAgIHRoaXMub3B0aW9uSXRlbXMkXG4gICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFssICwgb3B0aW9uSXRlbXNdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLm1hcCgoYykgPT4gdGhpcy5fZ2V0VmFsdWVBbmRMYWJlbChjLCBvcHRpb25JdGVtcykpO1xuICAgICAgICAgICAgICAgIC8vIG5vdCB1c2luZyBcInNlYXJjaFRlcm1cIiB2YWx1ZSBmcm9tIGNvbWJpbmVMYXRlc3QgYXMgaXQgd2lsbCBiZSB3cm9uZyBmb3IgbGF0ZSBzdWJzY3JpYmVycywgaWYgYW55XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMuX3NlYXJjaFRlcm1DdHJsLnZhbHVlID8/ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5maWx0ZXJGbihcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uSXRlbXMubWFwKChjKSA9PiBjLml0ZW0pLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hUZXJtXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5ZWRPcHRpb25zID0gKEFycmF5LmlzQXJyYXkoZmlsdGVyZWQpID8gZmlsdGVyZWQgOiBbXSkubWFwKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXRPcHRpb25JdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkaXNwbGF5ZWRPcHRpb25zLmZvckVhY2goKGMpID0+IChjLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZC5maW5kSW5kZXgoKGQpID0+IGQudmFsdWUgPT09IGMudmFsdWUpID4gLTEpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkLCBkaXNwbGF5ZWRPcHRpb25zIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXNvdXQnLCBbJyRldmVudCddKVxuICAgIHByaXZhdGUgX2ZvY3VzT3V0KGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0QXJpYUxhYmVsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBsYW5nID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fbGFuZ3VhZ2UpO1xuICAgICAgICB0aGlzLmFyaWFMYWJlbCA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShsYW5nLCAnY29yZU11bHRpSW5wdXQubXVsdGlJbnB1dEFyaWFMYWJlbCcpO1xuICAgIH1cbn1cblxuaW50ZXJmYWNlIE9wdGlvbkl0ZW08VCA9IGFueT4gZXh0ZW5kcyBPcHRpb25JdGVtQmFzZSB7XG4gICAgaXRlbTogVDtcbiAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xufVxuaW50ZXJmYWNlIE9wdGlvbkl0ZW1CYXNlIHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHZhbHVlOiBhbnk7XG59XG5cbmludGVyZmFjZSBWaWV3TW9kZWwge1xuICAgIHNlbGVjdGVkT3B0aW9uczogT3B0aW9uSXRlbUJhc2VbXTtcbiAgICBkaXNwbGF5ZWRPcHRpb25zOiBPcHRpb25JdGVtW107XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiX3ZpZXdNb2RlbCQgfCBhc3luYyBhcyB2aWV3TW9kZWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtbXVsdGktaW5wdXQgZmQtbXVsdGktaW5wdXQtY3VzdG9tXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1tdWx0aS1pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250cm9sXCIgKm5nSWY9XCJtb2JpbGVcIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGZkLXBvcG92ZXJcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsQm9keUNsYXNzPVwiZmQtcG9wb3Zlci1jdXN0b20tbGlzdFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbW9iaWxlXCJcbiAgICAgICAgICAgICAgICBbaXNPcGVuXT1cIm9wZW5cIlxuICAgICAgICAgICAgICAgIChpc09wZW5DaGFuZ2UpPVwib3BlbkNoYW5nZUhhbmRsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwiIW9wZW4gJiYgb3BlbkNoYW5nZUhhbmRsZSh0cnVlKVwiXG4gICAgICAgICAgICAgICAgW3RyaWdnZXJzXT1cIltdXCJcbiAgICAgICAgICAgICAgICBbbWF4V2lkdGhdPVwiX3BvcG92ZXJNYXhXaWR0aFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbZmlsbENvbnRyb2xNb2RlXT1cImZpbGxDb250cm9sTW9kZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1tdWx0aS1pbnB1dC1wb3BvdmVyLWN1c3RvbVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gKHN1Ym1pdCk9XCJfb25TdWJtaXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyb2xcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuXG4gICAgICAgICAgICAgICAgPGZkLXBvcG92ZXItYm9keVxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhb3BlblwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1wb3BvdmVyX19ib2R5LS1oaWRkZW5dPVwiIXZpZXdNb2RlbC5kaXNwbGF5ZWRPcHRpb25zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdFwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgI2NvbnRyb2w+XG4gICAgICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICAgICAgY2xhc3M9XCJmZC1tdWx0aS1pbnB1dC1pbnB1dC1ncm91cC1jdXN0b21cIlxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgICAgIFtidXR0b25dPVwiZGlzcGxheUFkZG9uQnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbaXNFeHBhbmRlZF09XCJvcGVuICYmICFtb2JpbGUgJiYgdmlld01vZGVsLmRpc3BsYXllZE9wdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbaXNDb250cm9sXT1cInRydWVcIlxuICAgICAgICAgICAgW2dseXBoXT1cImRpc3BsYXlBZGRvbkJ1dHRvbiA/IGdseXBoIDogJydcIlxuICAgICAgICAgICAgW2ljb25UaXRsZV09XCJ0aXRsZVwiXG4gICAgICAgICAgICAoYWRkT25CdXR0b25DbGlja2VkKT1cIl9hZGRPbkJ1dHRvbkNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxmZC10b2tlbml6ZXJcbiAgICAgICAgICAgICAgICAjdG9rZW5pemVyXG4gICAgICAgICAgICAgICAgW2NvbXBhY3RDb2xsYXBzZV09XCJjb21wYWN0Q29sbGFwc2VcIlxuICAgICAgICAgICAgICAgIFtvcGVuXT1cIm9wZW5cIlxuICAgICAgICAgICAgICAgIFt0b2tlbml6ZXJGb2N1c2FibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChtb3JlQ2xpY2tlZEV2ZW50KT1cIl9tb3JlQ2xpY2tlZCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkLW11bHRpLWlucHV0LXRva2VuaXplci1jdXN0b21cIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmZC10b2tlblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHZpZXdNb2RlbC5zZWxlY3RlZE9wdGlvbnM7IHRyYWNrQnk6IHZhbHVlRm5cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAob25DbG9zZUNsaWNrKT1cIl9vblRva2VuQ2xpY2sob3B0aW9uLnZhbHVlLCBmYWxzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChvblJlbW92ZSk9XCJfb25Ub2tlbkNsaWNrKG9wdGlvbi52YWx1ZSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwib3B0aW9uLmxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZmQtdG9rZW4+XG5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0IGZkLXRva2VuaXplcl9faW5wdXQgZmQtbXVsdGktaW5wdXQtdG9rZW5pemVyLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgZmQtZm9ybS1jb250cm9sXG4gICAgICAgICAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICAgICAgICAgIGZka0F1dG9Db21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAob25Db21wbGV0ZSk9XCJfaGFuZGxlQ29tcGxldGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICNzZWFyY2hJbnB1dEVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXlGbl09XCJkaXNwbGF5Rm5cIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRUZXh0XT1cIl9zZWFyY2hUZXJtQ3RybC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImRyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2VuYWJsZV09XCJhdXRvQ29tcGxldGUgJiYgIW1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJfc2VhcmNoVGVybUN0cmxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfaGFuZGxlSW5wdXRLZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJpbnB1dElkXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInRva2VuaXplci5fc2hvd0FsbFRva2VucygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidG9rZW5pemVyLl9oaWRlVG9rZW5zKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2ZkLXRva2VuaXplcj5cbiAgICAgICAgPC9mZC1pbnB1dC1ncm91cD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNsaXN0PlxuICAgICAgICA8dWxcbiAgICAgICAgICAgICpuZ0lmPVwidmlld01vZGVsLmRpc3BsYXllZE9wdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgICAgIGZkLWxpc3RcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtbXVsdGktaW5wdXQtbWVudS1vdmVyZmxvd1wiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgW21vYmlsZU1vZGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXhIZWlnaHRdPVwiIW1vYmlsZSA/IG1heEhlaWdodCA6ICdhdXRvJ1wiXG4gICAgICAgICAgICBbYnlsaW5lXT1cImJ5bGluZVwiXG4gICAgICAgICAgICAoZm9jdXNFc2NhcGVMaXN0KT1cImhhbmRsZUxpc3RGb2N1c0VzY2FwZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW5XaWR0aF09XCInMTAwJSdcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHZpZXdNb2RlbC5kaXNwbGF5ZWRPcHRpb25zOyBpbmRleCBhcyBpZHg7IHRyYWNrQnk6IHZhbHVlRm5cIlxuICAgICAgICAgICAgICAgIGZkLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwib3B0aW9uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uQ2hlY2tib3hDbGljayhvcHRpb24udmFsdWUsICRldmVudCwgaWR4LCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cIl9vbkNoZWNrYm94S2V5dXAob3B0aW9uLnZhbHVlLCAkZXZlbnQsIGlkeClcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJvcHRpb24uaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZkLWNoZWNrYm94IChjbGljayk9XCJfb25DaGVja2JveENsaWNrKG9wdGlvbi52YWx1ZSwgJGV2ZW50LCBpZHgpXCIgW3ZhbHVlXT1cIm9wdGlvbi5pc1NlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVE9ETyAtLT5cbiAgICAgICAgICAgICAgICA8L2ZkLWNoZWNrYm94PlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtU291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgb3B0aW9uOiBvcHRpb24gfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93QWxsQnV0dG9uICYmIHZpZXdNb2RlbC5kaXNwbGF5ZWRPcHRpb25zLmxlbmd0aCA8IGRyb3Bkb3duVmFsdWVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1tdWx0aS1pbnB1dC1zaG93LWFsbFwiXG4gICAgICAgICAgICAgICAgKGtleURvd24pPVwiX3Nob3dBbGxLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfc2hvd0FsbENsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGEgZmQtbGluayB0YWJpbmRleD1cIjBcIj5TaG93IEFsbCAoe3sgZHJvcGRvd25WYWx1ZXMubGVuZ3RoIH19KTwvYT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uPVwib3B0aW9uXCIgI2l0ZW1Tb3VyY2U+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiFpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgZmQtbGlzdC10aXRsZVxuICAgICAgICAgICAgW2lubmVySHRtbF09XCJvcHRpb24ubGFiZWwgfCBoaWdobGlnaHQgOiBfc2VhcmNoVGVybUN0cmwudmFsdWUgfHwgJycgOiBoaWdobGlnaHRcIlxuICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9uLml0ZW0gfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -4,8 +4,8 @@ import { applyCssClass } from '@fundamental-ngx/cdk/utils';
4
4
  import * as i0 from "@angular/core";
5
5
  export class NotificationIndicatorDirective {
6
6
  /** @hidden */
7
- constructor(_elementRef) {
8
- this._elementRef = _elementRef;
7
+ constructor(elementRef) {
8
+ this.elementRef = elementRef;
9
9
  }
10
10
  /** @hidden */
11
11
  ngOnChanges() {
@@ -23,10 +23,6 @@ export class NotificationIndicatorDirective {
23
23
  buildComponentCssClass() {
24
24
  return ['fd-notification__indicator', this.type ? 'fd-notification__indicator--' + this.type : '', this.class];
25
25
  }
26
- /** @hidden */
27
- elementRef() {
28
- return this._elementRef;
29
- }
30
26
  }
31
27
  NotificationIndicatorDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NotificationIndicatorDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
32
28
  NotificationIndicatorDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.8", type: NotificationIndicatorDirective, selector: "[fdNotificationIndicator], [fd-notification-indicator]", inputs: { type: "type", class: "class" }, usesOnChanges: true, ngImport: i0 });
@@ -46,4 +42,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
46
42
  }], class: [{
47
43
  type: Input
48
44
  }], buildComponentCssClass: [] } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWluZGljYXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9ub3RpZmljYXRpb24vZGlyZWN0aXZlcy9ub3RpZmljYXRpb24taW5kaWNhdG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBUTNELE1BQU0sT0FBTyw4QkFBOEI7SUFTdkMsY0FBYztJQUNkLFlBQW9CLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO0lBQUcsQ0FBQztJQUUvQyxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUTtRQUNKLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBRUgsc0JBQXNCO1FBQ2xCLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFRCxjQUFjO0lBQ2QsVUFBVTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDOzsySEFuQ1EsOEJBQThCOytHQUE5Qiw4QkFBOEI7QUEyQnZDO0lBQUMsYUFBYTs7Ozs0RUFHYjsyRkE5QlEsOEJBQThCO2tCQUgxQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx3REFBd0Q7aUJBQ3JFO2lHQUlHLElBQUk7c0JBREgsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBc0JOLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhcHBseUNzc0NsYXNzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBJbmRpY2F0b3JTdGF0ZXMgPSAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm9ybWF0aW9uJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZmROb3RpZmljYXRpb25JbmRpY2F0b3JdLCBbZmQtbm90aWZpY2F0aW9uLWluZGljYXRvcl0nXG59KVxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbkluZGljYXRvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBDc3NDbGFzc0J1aWxkZXIge1xuICAgIC8qKiBUeXBlIG9mIHRoZSBpbmRpY2F0b3IuIENhbiBiZSAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm9ybWF0aW9uJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgdHlwZTogSW5kaWNhdG9yU3RhdGVzO1xuXG4gICAgLyoqIEFwcGx5IHVzZXIgY3VzdG9tIHN0eWxlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ3NzQ2xhc3NCdWlsZGVyIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAgICAqIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHNpbmdsZSBzdHJpbmdcbiAgICAgKiBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igb3JkZXIgd2hpY2ggY3NzIGNsYXNzZXMgYXJlIGFwcGxpZWRcbiAgICAgKi9cbiAgICBAYXBwbHlDc3NDbGFzc1xuICAgIGJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gWydmZC1ub3RpZmljYXRpb25fX2luZGljYXRvcicsIHRoaXMudHlwZSA/ICdmZC1ub3RpZmljYXRpb25fX2luZGljYXRvci0tJyArIHRoaXMudHlwZSA6ICcnLCB0aGlzLmNsYXNzXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGVsZW1lbnRSZWYoKTogRWxlbWVudFJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWY7XG4gICAgfVxufVxuIl19
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWluZGljYXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9ub3RpZmljYXRpb24vZGlyZWN0aXZlcy9ub3RpZmljYXRpb24taW5kaWNhdG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBUTNELE1BQU0sT0FBTyw4QkFBOEI7SUFTdkMsY0FBYztJQUNkLFlBQTRCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFBRyxDQUFDO0lBRXRELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRO1FBQ0osSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFFSCxzQkFBc0I7UUFDbEIsT0FBTyxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkgsQ0FBQzs7MkhBOUJRLDhCQUE4QjsrR0FBOUIsOEJBQThCO0FBMkJ2QztJQUFDLGFBQWE7Ozs7NEVBR2I7MkZBOUJRLDhCQUE4QjtrQkFIMUMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsd0RBQXdEO2lCQUNyRTtpR0FJRyxJQUFJO3NCQURILEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQXNCTixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXBwbHlDc3NDbGFzcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuZXhwb3J0IHR5cGUgSW5kaWNhdG9yU3RhdGVzID0gJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICd3YXJuaW5nJyB8ICdpbmZvcm1hdGlvbic7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkTm90aWZpY2F0aW9uSW5kaWNhdG9yXSwgW2ZkLW5vdGlmaWNhdGlvbi1pbmRpY2F0b3JdJ1xufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25JbmRpY2F0b3JEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQ3NzQ2xhc3NCdWlsZGVyIHtcbiAgICAvKiogVHlwZSBvZiB0aGUgaW5kaWNhdG9yLiBDYW4gYmUgJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICd3YXJuaW5nJyB8ICdpbmZvcm1hdGlvbicgKi9cbiAgICBASW5wdXQoKVxuICAgIHR5cGU6IEluZGljYXRvclN0YXRlcztcblxuICAgIC8qKiBBcHBseSB1c2VyIGN1c3RvbSBzdHlsZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsYXNzOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBDc3NDbGFzc0J1aWxkZXIgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gICAgICogZnVuY3Rpb24gbXVzdCByZXR1cm4gc2luZ2xlIHN0cmluZ1xuICAgICAqIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBvcmRlciB3aGljaCBjc3MgY2xhc3NlcyBhcmUgYXBwbGllZFxuICAgICAqL1xuICAgIEBhcHBseUNzc0NsYXNzXG4gICAgYnVpbGRDb21wb25lbnRDc3NDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbJ2ZkLW5vdGlmaWNhdGlvbl9faW5kaWNhdG9yJywgdGhpcy50eXBlID8gJ2ZkLW5vdGlmaWNhdGlvbl9faW5kaWNhdG9yLS0nICsgdGhpcy50eXBlIDogJycsIHRoaXMuY2xhc3NdO1xuICAgIH1cbn1cbiJdfQ==
@@ -6,8 +6,8 @@ import * as i0 from "@angular/core";
6
6
  import * as i1 from "@fundamental-ngx/core/popover";
7
7
  export class NotificationGroupComponent {
8
8
  /** @hidden */
9
- constructor(_elementRef, _popover) {
10
- this._elementRef = _elementRef;
9
+ constructor(elementRef, _popover) {
10
+ this.elementRef = elementRef;
11
11
  this._popover = _popover;
12
12
  /** Whether the Notification Group is in mobile mode */
13
13
  this.mobile = false;
@@ -31,10 +31,6 @@ export class NotificationGroupComponent {
31
31
  ];
32
32
  }
33
33
  /** @hidden */
34
- elementRef() {
35
- return this._elementRef;
36
- }
37
- /** @hidden */
38
34
  ngOnInit() {
39
35
  this.buildComponentCssClass();
40
36
  }
@@ -70,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
70
66
  }, {
71
67
  type: Input
72
68
  }], buildComponentCssClass: [] } });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24tZ3JvdXAvbm90aWZpY2F0aW9uLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsaUJBQWlCLEVBR2pCLFFBQVEsRUFDUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUFRdkYsTUFBTSxPQUFPLDBCQUEwQjtJQWFuQyxjQUFjO0lBQ2QsWUFDWSxXQUF1QixFQUNtQixRQUEwQjtRQURwRSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUNtQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQVhoRix1REFBdUQ7UUFDOUMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQVlwQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFFSCxzQkFBc0I7UUFDbEIsT0FBTztZQUNILHFFQUFxRTtZQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsS0FBSztTQUNiLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVU7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRO1FBQ0osSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQzs7dUhBakRRLDBCQUEwQiw0Q0FnQlgsb0JBQW9COzJHQWhCbkMsMEJBQTBCLHVNQUp6QiwyQkFBMkI7QUFvQ3JDO0lBQUMsYUFBYTs7Ozt3RUFPYjsyRkF2Q1EsMEJBQTBCO2tCQU50QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7OzBCQWlCUSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG9CQUFvQjs0Q0FiNUMsS0FBSztzQkFESixLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFLTixLQUFLO3NCQUZKLFdBQVc7dUJBQUMsYUFBYTs7c0JBQ3pCLEtBQUs7Z0JBdUJOLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhcHBseUNzc0NsYXNzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQmFzZVBvcG92ZXJDbGFzcywgRkRfUE9QT1ZFUl9DT01QT05FTlQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtbm90aWZpY2F0aW9uLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQ3NzQ2xhc3NCdWlsZGVyIHtcbiAgICAvKiogVXNlcidzIGN1c3RvbSBjbGFzc2VzICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIE5vdGlmaWNhdGlvbiBHcm91cCBpcyBpbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFVzZXIgZGVmaW5lZCB3aWR0aCBmb3IgdGhlIG5vdGlmaWNhdGlvbiAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKVxuICAgIEBJbnB1dCgpXG4gICAgd2lkdGg6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRkRfUE9QT1ZFUl9DT01QT05FTlQpIHByaXZhdGUgX3BvcG92ZXI6IEJhc2VQb3BvdmVyQ2xhc3NcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuX3BvcG92ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXIuZm9jdXNUcmFwcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXIuZm9jdXNBdXRvQ2FwdHVyZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBDc3NDbGFzc0J1aWxkZXIgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdmZC1ub3RpZmljYXRpb24gZmQtbm90aWZpY2F0aW9uLS1ncm91cCBmZC1ub3RpZmljYXRpb24tY3VzdG9tLWJsb2NrJyxcbiAgICAgICAgICAgIHRoaXMubW9iaWxlID8gJ2ZkLW5vdGlmaWNhdGlvbi0tbW9iaWxlJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5jbGFzc1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZWxlbWVudFJlZigpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWY7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxufVxuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24tZ3JvdXAvbm90aWZpY2F0aW9uLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsaUJBQWlCLEVBR2pCLFFBQVEsRUFDUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUFRdkYsTUFBTSxPQUFPLDBCQUEwQjtJQWFuQyxjQUFjO0lBQ2QsWUFDb0IsVUFBc0IsRUFDWSxRQUEwQjtRQUQ1RCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ1ksYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFYaEYsdURBQXVEO1FBQzlDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFZcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBRUgsc0JBQXNCO1FBQ2xCLE9BQU87WUFDSCxxRUFBcUU7WUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLEtBQUs7U0FDYixDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRO1FBQ0osSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQzs7dUhBNUNRLDBCQUEwQiw0Q0FnQlgsb0JBQW9COzJHQWhCbkMsMEJBQTBCLHVNQUp6QiwyQkFBMkI7QUFvQ3JDO0lBQUMsYUFBYTs7Ozt3RUFPYjsyRkF2Q1EsMEJBQTBCO2tCQU50QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7OzBCQWlCUSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG9CQUFvQjs0Q0FiNUMsS0FBSztzQkFESixLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFLTixLQUFLO3NCQUZKLFdBQVc7dUJBQUMsYUFBYTs7c0JBQ3pCLEtBQUs7Z0JBdUJOLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhcHBseUNzc0NsYXNzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQmFzZVBvcG92ZXJDbGFzcywgRkRfUE9QT1ZFUl9DT01QT05FTlQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtbm90aWZpY2F0aW9uLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQ3NzQ2xhc3NCdWlsZGVyIHtcbiAgICAvKiogVXNlcidzIGN1c3RvbSBjbGFzc2VzICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIE5vdGlmaWNhdGlvbiBHcm91cCBpcyBpbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFVzZXIgZGVmaW5lZCB3aWR0aCBmb3IgdGhlIG5vdGlmaWNhdGlvbiAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKVxuICAgIEBJbnB1dCgpXG4gICAgd2lkdGg6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZEX1BPUE9WRVJfQ09NUE9ORU5UKSBwcml2YXRlIF9wb3BvdmVyOiBCYXNlUG9wb3ZlckNsYXNzXG4gICAgKSB7XG4gICAgICAgIGlmICh0aGlzLl9wb3BvdmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyLmZvY3VzVHJhcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyLmZvY3VzQXV0b0NhcHR1cmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQ3NzQ2xhc3NCdWlsZGVyIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAgICAqIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBvcmRlciB3aGljaCBjc3MgY2xhc3NlcyBhcmUgYXBwbGllZFxuICAgICAqL1xuICAgIEBhcHBseUNzc0NsYXNzXG4gICAgYnVpbGRDb21wb25lbnRDc3NDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZmQtbm90aWZpY2F0aW9uIGZkLW5vdGlmaWNhdGlvbi0tZ3JvdXAgZmQtbm90aWZpY2F0aW9uLWN1c3RvbS1ibG9jaycsXG4gICAgICAgICAgICB0aGlzLm1vYmlsZSA/ICdmZC1ub3RpZmljYXRpb24tLW1vYmlsZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuY2xhc3NcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG59XG4iXX0=