@fundamental-ngx/core 0.37.0-rc.2 → 0.37.0-rc.21

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 (373) hide show
  1. package/carousel/carousel-item/carousel-item.component.d.ts +2 -3
  2. package/carousel/carousel.component.d.ts +4 -3
  3. package/dynamic-page/dynamic-page-header/subheader/dynamic-page-subheader.component.d.ts +4 -0
  4. package/esm2020/action-bar/action-bar.component.mjs +2 -2
  5. package/esm2020/action-sheet/action-sheet.component.mjs +3 -3
  6. package/esm2020/alert/alert.component.mjs +2 -2
  7. package/esm2020/avatar/avatar.component.mjs +7 -3
  8. package/esm2020/avatar-group/avatar-group.component.mjs +2 -2
  9. package/esm2020/bar/bar.component.mjs +2 -2
  10. package/esm2020/breadcrumb/breadcrumb.component.mjs +2 -2
  11. package/esm2020/busy-indicator/busy-indicator.component.mjs +2 -2
  12. package/esm2020/button/button.component.mjs +2 -2
  13. package/esm2020/calendar/calendar.component.mjs +2 -2
  14. package/esm2020/card/card.component.mjs +2 -2
  15. package/esm2020/carousel/carousel-item/carousel-item.component.mjs +5 -7
  16. package/esm2020/carousel/carousel.component.mjs +31 -27
  17. package/esm2020/checkbox/checkbox/checkbox.component.mjs +2 -2
  18. package/esm2020/combobox/combobox.component.mjs +1 -1
  19. package/esm2020/date-picker/date-picker.component.mjs +1 -1
  20. package/esm2020/datetime-picker/datetime-picker.component.mjs +1 -1
  21. package/esm2020/dialog/dialog.component.mjs +2 -2
  22. package/esm2020/dynamic-page/dynamic-page-header/subheader/dynamic-page-subheader.component.mjs +7 -3
  23. package/esm2020/dynamic-page/dynamic-page.component.mjs +2 -2
  24. package/esm2020/dynamic-side-content/dynamic-side-content.component.mjs +2 -2
  25. package/esm2020/facets/facet/facet.component.mjs +2 -2
  26. package/esm2020/feed-input/feed-input.component.mjs +2 -2
  27. package/esm2020/feed-list-item/components/list/feed-list.component.mjs +2 -2
  28. package/esm2020/file-uploader/file-uploader.component.mjs +8 -12
  29. package/esm2020/fixed-card-layout/fixed-card-layout.component.mjs +2 -2
  30. package/esm2020/flexible-column-layout/flexible-column-layout.component.mjs +2 -2
  31. package/esm2020/form/fieldset/fieldset.component.mjs +2 -2
  32. package/esm2020/form/form-control/form-control.component.mjs +2 -2
  33. package/esm2020/form/form-group/form-group.component.mjs +2 -2
  34. package/esm2020/form/form-header/form-header.component.mjs +2 -2
  35. package/esm2020/form/form-input-message-group/form-input-message-group.component.mjs +3 -3
  36. package/esm2020/form/form-item/form-item.component.mjs +2 -2
  37. package/esm2020/form/form-label/form-label.component.mjs +2 -2
  38. package/esm2020/form/form-message/form-message.component.mjs +2 -2
  39. package/esm2020/grid-list/components/grid-list/grid-list.component.mjs +2 -2
  40. package/esm2020/icon/icon.component.mjs +2 -2
  41. package/esm2020/illustrated-message/illustrated-message.component.mjs +2 -2
  42. package/esm2020/info-label/info-label.component.mjs +2 -2
  43. package/esm2020/inline-help/inline-help.directive.mjs +3 -3
  44. package/esm2020/input-group/input-group.component.mjs +2 -2
  45. package/esm2020/layout-grid/layout-grid.component.mjs +2 -2
  46. package/esm2020/layout-panel/layout-panel.component.mjs +2 -2
  47. package/esm2020/link/link.component.mjs +2 -2
  48. package/esm2020/list/list.component.mjs +2 -2
  49. package/esm2020/menu/menu-item/menu-item.component.mjs +43 -7
  50. package/esm2020/menu/menu.component.mjs +44 -33
  51. package/esm2020/menu/services/menu.service.mjs +14 -13
  52. package/esm2020/message-box/message-box.component.mjs +2 -2
  53. package/esm2020/message-page/message-page.component.mjs +2 -2
  54. package/esm2020/message-strip/message-strip.component.mjs +2 -2
  55. package/esm2020/message-toast/message-toast.component.mjs +2 -2
  56. package/esm2020/multi-input/multi-input.component.mjs +1 -1
  57. package/esm2020/nested-list/nested-list-popover/nested-list-popover.component.mjs +1 -1
  58. package/esm2020/notification/notification/notification.component.mjs +2 -2
  59. package/esm2020/object-identifier/object-identifier.component.mjs +2 -2
  60. package/esm2020/object-marker/object-marker.component.mjs +2 -2
  61. package/esm2020/object-number/object-number.component.mjs +2 -2
  62. package/esm2020/object-status/object-status.component.mjs +2 -2
  63. package/esm2020/overflow-layout/overflow-layout.component.mjs +1 -1
  64. package/esm2020/pagination/pagination.component.mjs +2 -2
  65. package/esm2020/panel/panel.component.mjs +2 -2
  66. package/esm2020/popover/base/base-popover.class.mjs +10 -2
  67. package/esm2020/popover/popover-body/popover-body.component.mjs +36 -35
  68. package/esm2020/popover/popover-service/popover.service.mjs +3 -1
  69. package/esm2020/product-switch/product-switch/product-switch.component.mjs +1 -1
  70. package/esm2020/product-switch/product-switch-body/product-switch-body.component.mjs +2 -2
  71. package/esm2020/progress-indicator/progress-indicator.component.mjs +2 -2
  72. package/esm2020/quick-view/quick-view/quick-view.component.mjs +2 -2
  73. package/esm2020/radio/radio-button/radio-button.component.mjs +2 -2
  74. package/esm2020/rating-indicator/components/rating-indicator.component.mjs +2 -2
  75. package/esm2020/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.mjs +2 -2
  76. package/esm2020/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.mjs +2 -2
  77. package/esm2020/scrollbar/scrollbar.component.mjs +2 -2
  78. package/esm2020/segmented-button/segmented-button.component.mjs +2 -2
  79. package/esm2020/select/select.component.mjs +2 -2
  80. package/esm2020/shared/interfaces/popover-position.mjs +1 -28
  81. package/esm2020/shellbar/product-menu/product-menu.component.mjs +1 -1
  82. package/esm2020/shellbar/shellbar.component.mjs +2 -2
  83. package/esm2020/shellbar/user-menu/shellbar-user-menu.component.mjs +1 -1
  84. package/esm2020/side-navigation/side-navigation.component.mjs +2 -2
  85. package/esm2020/slider/slider.component.mjs +2 -2
  86. package/esm2020/split-button/split-button.component.mjs +8 -8
  87. package/esm2020/splitter/splitter.component.mjs +2 -2
  88. package/esm2020/status-indicator/status-indicator.component.mjs +2 -2
  89. package/esm2020/step-input/step-input.component.mjs +2 -2
  90. package/esm2020/switch/switch.component.mjs +2 -2
  91. package/esm2020/table/table-wrapper.component.mjs +2 -2
  92. package/esm2020/table/table.component.mjs +2 -2
  93. package/esm2020/tabs/tab-list.component.mjs +2 -2
  94. package/esm2020/tabs/tab-nav/tab-nav.component.mjs +2 -2
  95. package/esm2020/text/text.component.mjs +2 -2
  96. package/esm2020/tile/tile.component.mjs +2 -2
  97. package/esm2020/time/time.component.mjs +2 -2
  98. package/esm2020/time-picker/time-picker.component.mjs +1 -1
  99. package/esm2020/title/title.component.mjs +2 -2
  100. package/esm2020/token/token.component.mjs +2 -2
  101. package/esm2020/token/tokenizer.component.mjs +2 -2
  102. package/esm2020/toolbar/toolbar.component.mjs +2 -2
  103. package/esm2020/tree/tree-child.component.mjs +2 -2
  104. package/esm2020/tree/tree.component.mjs +2 -2
  105. package/esm2020/upload-collection/upload-collection.component.mjs +2 -2
  106. package/esm2020/vertical-navigation/vertical-navigation-main-navigation.component.mjs +2 -2
  107. package/esm2020/vertical-navigation/vertical-navigation.component.mjs +2 -2
  108. package/esm2020/wizard/wizard.component.mjs +2 -2
  109. package/fesm2015/fundamental-ngx-core-action-bar.mjs +2 -2
  110. package/fesm2015/fundamental-ngx-core-action-sheet.mjs +2 -2
  111. package/fesm2015/fundamental-ngx-core-action-sheet.mjs.map +1 -1
  112. package/fesm2015/fundamental-ngx-core-alert.mjs +2 -2
  113. package/fesm2015/fundamental-ngx-core-avatar-group.mjs +2 -2
  114. package/fesm2015/fundamental-ngx-core-avatar.mjs +6 -2
  115. package/fesm2015/fundamental-ngx-core-avatar.mjs.map +1 -1
  116. package/fesm2015/fundamental-ngx-core-bar.mjs +2 -2
  117. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +2 -2
  118. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  119. package/fesm2015/fundamental-ngx-core-busy-indicator.mjs +2 -2
  120. package/fesm2015/fundamental-ngx-core-button.mjs +2 -2
  121. package/fesm2015/fundamental-ngx-core-button.mjs.map +1 -1
  122. package/fesm2015/fundamental-ngx-core-calendar.mjs +2 -2
  123. package/fesm2015/fundamental-ngx-core-card.mjs +2 -2
  124. package/fesm2015/fundamental-ngx-core-carousel.mjs +32 -30
  125. package/fesm2015/fundamental-ngx-core-carousel.mjs.map +1 -1
  126. package/fesm2015/fundamental-ngx-core-checkbox.mjs +2 -2
  127. package/fesm2015/fundamental-ngx-core-combobox.mjs +1 -1
  128. package/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
  129. package/fesm2015/fundamental-ngx-core-date-picker.mjs +1 -1
  130. package/fesm2015/fundamental-ngx-core-date-picker.mjs.map +1 -1
  131. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs +1 -1
  132. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  133. package/fesm2015/fundamental-ngx-core-dialog.mjs +2 -2
  134. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs +8 -4
  135. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  136. package/fesm2015/fundamental-ngx-core-dynamic-side-content.mjs +2 -2
  137. package/fesm2015/fundamental-ngx-core-facets.mjs +2 -2
  138. package/fesm2015/fundamental-ngx-core-feed-input.mjs +2 -2
  139. package/fesm2015/fundamental-ngx-core-feed-input.mjs.map +1 -1
  140. package/fesm2015/fundamental-ngx-core-feed-list-item.mjs +2 -2
  141. package/fesm2015/fundamental-ngx-core-file-uploader.mjs +6 -10
  142. package/fesm2015/fundamental-ngx-core-file-uploader.mjs.map +1 -1
  143. package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +2 -2
  144. package/fesm2015/fundamental-ngx-core-flexible-column-layout.mjs +2 -2
  145. package/fesm2015/fundamental-ngx-core-form.mjs +16 -16
  146. package/fesm2015/fundamental-ngx-core-form.mjs.map +1 -1
  147. package/fesm2015/fundamental-ngx-core-grid-list.mjs +2 -2
  148. package/fesm2015/fundamental-ngx-core-icon.mjs +2 -2
  149. package/fesm2015/fundamental-ngx-core-icon.mjs.map +1 -1
  150. package/fesm2015/fundamental-ngx-core-illustrated-message.mjs +2 -2
  151. package/fesm2015/fundamental-ngx-core-info-label.mjs +2 -2
  152. package/fesm2015/fundamental-ngx-core-info-label.mjs.map +1 -1
  153. package/fesm2015/fundamental-ngx-core-inline-help.mjs +2 -2
  154. package/fesm2015/fundamental-ngx-core-inline-help.mjs.map +1 -1
  155. package/fesm2015/fundamental-ngx-core-input-group.mjs +2 -2
  156. package/fesm2015/fundamental-ngx-core-layout-grid.mjs +2 -2
  157. package/fesm2015/fundamental-ngx-core-layout-panel.mjs +2 -2
  158. package/fesm2015/fundamental-ngx-core-link.mjs +2 -2
  159. package/fesm2015/fundamental-ngx-core-link.mjs.map +1 -1
  160. package/fesm2015/fundamental-ngx-core-list.mjs +2 -2
  161. package/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  162. package/fesm2015/fundamental-ngx-core-menu.mjs +99 -49
  163. package/fesm2015/fundamental-ngx-core-menu.mjs.map +1 -1
  164. package/fesm2015/fundamental-ngx-core-message-box.mjs +2 -2
  165. package/fesm2015/fundamental-ngx-core-message-page.mjs +2 -2
  166. package/fesm2015/fundamental-ngx-core-message-strip.mjs +2 -2
  167. package/fesm2015/fundamental-ngx-core-message-toast.mjs +2 -2
  168. package/fesm2015/fundamental-ngx-core-multi-input.mjs +1 -1
  169. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  170. package/fesm2015/fundamental-ngx-core-nested-list.mjs +1 -1
  171. package/fesm2015/fundamental-ngx-core-nested-list.mjs.map +1 -1
  172. package/fesm2015/fundamental-ngx-core-notification.mjs +2 -2
  173. package/fesm2015/fundamental-ngx-core-object-identifier.mjs +2 -2
  174. package/fesm2015/fundamental-ngx-core-object-marker.mjs +2 -2
  175. package/fesm2015/fundamental-ngx-core-object-marker.mjs.map +1 -1
  176. package/fesm2015/fundamental-ngx-core-object-number.mjs +2 -2
  177. package/fesm2015/fundamental-ngx-core-object-status.mjs +2 -2
  178. package/fesm2015/fundamental-ngx-core-object-status.mjs.map +1 -1
  179. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +1 -1
  180. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  181. package/fesm2015/fundamental-ngx-core-pagination.mjs +2 -2
  182. package/fesm2015/fundamental-ngx-core-panel.mjs +2 -2
  183. package/fesm2015/fundamental-ngx-core-popover.mjs +47 -35
  184. package/fesm2015/fundamental-ngx-core-popover.mjs.map +1 -1
  185. package/fesm2015/fundamental-ngx-core-product-switch.mjs +3 -3
  186. package/fesm2015/fundamental-ngx-core-product-switch.mjs.map +1 -1
  187. package/fesm2015/fundamental-ngx-core-progress-indicator.mjs +2 -2
  188. package/fesm2015/fundamental-ngx-core-progress-indicator.mjs.map +1 -1
  189. package/fesm2015/fundamental-ngx-core-quick-view.mjs +2 -2
  190. package/fesm2015/fundamental-ngx-core-quick-view.mjs.map +1 -1
  191. package/fesm2015/fundamental-ngx-core-radio.mjs +2 -2
  192. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs +2 -2
  193. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  194. package/fesm2015/fundamental-ngx-core-resizable-card-layout.mjs +4 -4
  195. package/fesm2015/fundamental-ngx-core-scrollbar.mjs +2 -2
  196. package/fesm2015/fundamental-ngx-core-segmented-button.mjs +2 -2
  197. package/fesm2015/fundamental-ngx-core-select.mjs +2 -2
  198. package/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
  199. package/fesm2015/fundamental-ngx-core-shared.mjs +1 -28
  200. package/fesm2015/fundamental-ngx-core-shared.mjs.map +1 -1
  201. package/fesm2015/fundamental-ngx-core-shellbar.mjs +4 -4
  202. package/fesm2015/fundamental-ngx-core-shellbar.mjs.map +1 -1
  203. package/fesm2015/fundamental-ngx-core-side-navigation.mjs +2 -2
  204. package/fesm2015/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  205. package/fesm2015/fundamental-ngx-core-slider.mjs +2 -2
  206. package/fesm2015/fundamental-ngx-core-slider.mjs.map +1 -1
  207. package/fesm2015/fundamental-ngx-core-split-button.mjs +7 -7
  208. package/fesm2015/fundamental-ngx-core-split-button.mjs.map +1 -1
  209. package/fesm2015/fundamental-ngx-core-splitter.mjs +2 -2
  210. package/fesm2015/fundamental-ngx-core-status-indicator.mjs +2 -2
  211. package/fesm2015/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  212. package/fesm2015/fundamental-ngx-core-step-input.mjs +2 -2
  213. package/fesm2015/fundamental-ngx-core-switch.mjs +2 -2
  214. package/fesm2015/fundamental-ngx-core-table.mjs +4 -4
  215. package/fesm2015/fundamental-ngx-core-tabs.mjs +4 -4
  216. package/fesm2015/fundamental-ngx-core-tabs.mjs.map +1 -1
  217. package/fesm2015/fundamental-ngx-core-text.mjs +2 -2
  218. package/fesm2015/fundamental-ngx-core-tile.mjs +2 -2
  219. package/fesm2015/fundamental-ngx-core-time-picker.mjs +1 -1
  220. package/fesm2015/fundamental-ngx-core-time-picker.mjs.map +1 -1
  221. package/fesm2015/fundamental-ngx-core-time.mjs +2 -2
  222. package/fesm2015/fundamental-ngx-core-title.mjs +2 -2
  223. package/fesm2015/fundamental-ngx-core-token.mjs +4 -4
  224. package/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  225. package/fesm2015/fundamental-ngx-core-toolbar.mjs +2 -2
  226. package/fesm2015/fundamental-ngx-core-toolbar.mjs.map +1 -1
  227. package/fesm2015/fundamental-ngx-core-tree.mjs +3 -3
  228. package/fesm2015/fundamental-ngx-core-tree.mjs.map +1 -1
  229. package/fesm2015/fundamental-ngx-core-upload-collection.mjs +2 -2
  230. package/fesm2015/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  231. package/fesm2015/fundamental-ngx-core-vertical-navigation.mjs +4 -4
  232. package/fesm2015/fundamental-ngx-core-wizard.mjs +2 -2
  233. package/fesm2020/fundamental-ngx-core-action-bar.mjs +2 -2
  234. package/fesm2020/fundamental-ngx-core-action-sheet.mjs +2 -2
  235. package/fesm2020/fundamental-ngx-core-action-sheet.mjs.map +1 -1
  236. package/fesm2020/fundamental-ngx-core-alert.mjs +2 -2
  237. package/fesm2020/fundamental-ngx-core-avatar-group.mjs +2 -2
  238. package/fesm2020/fundamental-ngx-core-avatar.mjs +6 -2
  239. package/fesm2020/fundamental-ngx-core-avatar.mjs.map +1 -1
  240. package/fesm2020/fundamental-ngx-core-bar.mjs +2 -2
  241. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +2 -2
  242. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  243. package/fesm2020/fundamental-ngx-core-busy-indicator.mjs +2 -2
  244. package/fesm2020/fundamental-ngx-core-button.mjs +2 -2
  245. package/fesm2020/fundamental-ngx-core-button.mjs.map +1 -1
  246. package/fesm2020/fundamental-ngx-core-calendar.mjs +2 -2
  247. package/fesm2020/fundamental-ngx-core-card.mjs +2 -2
  248. package/fesm2020/fundamental-ngx-core-carousel.mjs +32 -30
  249. package/fesm2020/fundamental-ngx-core-carousel.mjs.map +1 -1
  250. package/fesm2020/fundamental-ngx-core-checkbox.mjs +2 -2
  251. package/fesm2020/fundamental-ngx-core-combobox.mjs +1 -1
  252. package/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
  253. package/fesm2020/fundamental-ngx-core-date-picker.mjs +1 -1
  254. package/fesm2020/fundamental-ngx-core-date-picker.mjs.map +1 -1
  255. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs +1 -1
  256. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  257. package/fesm2020/fundamental-ngx-core-dialog.mjs +2 -2
  258. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs +8 -4
  259. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  260. package/fesm2020/fundamental-ngx-core-dynamic-side-content.mjs +2 -2
  261. package/fesm2020/fundamental-ngx-core-facets.mjs +2 -2
  262. package/fesm2020/fundamental-ngx-core-feed-input.mjs +2 -2
  263. package/fesm2020/fundamental-ngx-core-feed-input.mjs.map +1 -1
  264. package/fesm2020/fundamental-ngx-core-feed-list-item.mjs +2 -2
  265. package/fesm2020/fundamental-ngx-core-file-uploader.mjs +6 -10
  266. package/fesm2020/fundamental-ngx-core-file-uploader.mjs.map +1 -1
  267. package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +2 -2
  268. package/fesm2020/fundamental-ngx-core-flexible-column-layout.mjs +2 -2
  269. package/fesm2020/fundamental-ngx-core-form.mjs +16 -16
  270. package/fesm2020/fundamental-ngx-core-form.mjs.map +1 -1
  271. package/fesm2020/fundamental-ngx-core-grid-list.mjs +2 -2
  272. package/fesm2020/fundamental-ngx-core-icon.mjs +2 -2
  273. package/fesm2020/fundamental-ngx-core-icon.mjs.map +1 -1
  274. package/fesm2020/fundamental-ngx-core-illustrated-message.mjs +2 -2
  275. package/fesm2020/fundamental-ngx-core-info-label.mjs +2 -2
  276. package/fesm2020/fundamental-ngx-core-info-label.mjs.map +1 -1
  277. package/fesm2020/fundamental-ngx-core-inline-help.mjs +2 -2
  278. package/fesm2020/fundamental-ngx-core-inline-help.mjs.map +1 -1
  279. package/fesm2020/fundamental-ngx-core-input-group.mjs +2 -2
  280. package/fesm2020/fundamental-ngx-core-layout-grid.mjs +2 -2
  281. package/fesm2020/fundamental-ngx-core-layout-panel.mjs +2 -2
  282. package/fesm2020/fundamental-ngx-core-link.mjs +2 -2
  283. package/fesm2020/fundamental-ngx-core-link.mjs.map +1 -1
  284. package/fesm2020/fundamental-ngx-core-list.mjs +2 -2
  285. package/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  286. package/fesm2020/fundamental-ngx-core-menu.mjs +97 -49
  287. package/fesm2020/fundamental-ngx-core-menu.mjs.map +1 -1
  288. package/fesm2020/fundamental-ngx-core-message-box.mjs +2 -2
  289. package/fesm2020/fundamental-ngx-core-message-page.mjs +2 -2
  290. package/fesm2020/fundamental-ngx-core-message-strip.mjs +2 -2
  291. package/fesm2020/fundamental-ngx-core-message-toast.mjs +2 -2
  292. package/fesm2020/fundamental-ngx-core-multi-input.mjs +1 -1
  293. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  294. package/fesm2020/fundamental-ngx-core-nested-list.mjs +1 -1
  295. package/fesm2020/fundamental-ngx-core-nested-list.mjs.map +1 -1
  296. package/fesm2020/fundamental-ngx-core-notification.mjs +2 -2
  297. package/fesm2020/fundamental-ngx-core-object-identifier.mjs +2 -2
  298. package/fesm2020/fundamental-ngx-core-object-marker.mjs +2 -2
  299. package/fesm2020/fundamental-ngx-core-object-marker.mjs.map +1 -1
  300. package/fesm2020/fundamental-ngx-core-object-number.mjs +2 -2
  301. package/fesm2020/fundamental-ngx-core-object-status.mjs +2 -2
  302. package/fesm2020/fundamental-ngx-core-object-status.mjs.map +1 -1
  303. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +1 -1
  304. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  305. package/fesm2020/fundamental-ngx-core-pagination.mjs +2 -2
  306. package/fesm2020/fundamental-ngx-core-panel.mjs +2 -2
  307. package/fesm2020/fundamental-ngx-core-popover.mjs +47 -35
  308. package/fesm2020/fundamental-ngx-core-popover.mjs.map +1 -1
  309. package/fesm2020/fundamental-ngx-core-product-switch.mjs +3 -3
  310. package/fesm2020/fundamental-ngx-core-product-switch.mjs.map +1 -1
  311. package/fesm2020/fundamental-ngx-core-progress-indicator.mjs +2 -2
  312. package/fesm2020/fundamental-ngx-core-progress-indicator.mjs.map +1 -1
  313. package/fesm2020/fundamental-ngx-core-quick-view.mjs +2 -2
  314. package/fesm2020/fundamental-ngx-core-quick-view.mjs.map +1 -1
  315. package/fesm2020/fundamental-ngx-core-radio.mjs +2 -2
  316. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs +2 -2
  317. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  318. package/fesm2020/fundamental-ngx-core-resizable-card-layout.mjs +4 -4
  319. package/fesm2020/fundamental-ngx-core-scrollbar.mjs +2 -2
  320. package/fesm2020/fundamental-ngx-core-segmented-button.mjs +2 -2
  321. package/fesm2020/fundamental-ngx-core-select.mjs +2 -2
  322. package/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
  323. package/fesm2020/fundamental-ngx-core-shared.mjs +1 -28
  324. package/fesm2020/fundamental-ngx-core-shared.mjs.map +1 -1
  325. package/fesm2020/fundamental-ngx-core-shellbar.mjs +4 -4
  326. package/fesm2020/fundamental-ngx-core-shellbar.mjs.map +1 -1
  327. package/fesm2020/fundamental-ngx-core-side-navigation.mjs +2 -2
  328. package/fesm2020/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  329. package/fesm2020/fundamental-ngx-core-slider.mjs +2 -2
  330. package/fesm2020/fundamental-ngx-core-slider.mjs.map +1 -1
  331. package/fesm2020/fundamental-ngx-core-split-button.mjs +7 -7
  332. package/fesm2020/fundamental-ngx-core-split-button.mjs.map +1 -1
  333. package/fesm2020/fundamental-ngx-core-splitter.mjs +2 -2
  334. package/fesm2020/fundamental-ngx-core-status-indicator.mjs +2 -2
  335. package/fesm2020/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  336. package/fesm2020/fundamental-ngx-core-step-input.mjs +2 -2
  337. package/fesm2020/fundamental-ngx-core-switch.mjs +2 -2
  338. package/fesm2020/fundamental-ngx-core-table.mjs +4 -4
  339. package/fesm2020/fundamental-ngx-core-tabs.mjs +4 -4
  340. package/fesm2020/fundamental-ngx-core-tabs.mjs.map +1 -1
  341. package/fesm2020/fundamental-ngx-core-text.mjs +2 -2
  342. package/fesm2020/fundamental-ngx-core-tile.mjs +2 -2
  343. package/fesm2020/fundamental-ngx-core-time-picker.mjs +1 -1
  344. package/fesm2020/fundamental-ngx-core-time-picker.mjs.map +1 -1
  345. package/fesm2020/fundamental-ngx-core-time.mjs +2 -2
  346. package/fesm2020/fundamental-ngx-core-title.mjs +2 -2
  347. package/fesm2020/fundamental-ngx-core-token.mjs +4 -4
  348. package/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  349. package/fesm2020/fundamental-ngx-core-toolbar.mjs +2 -2
  350. package/fesm2020/fundamental-ngx-core-toolbar.mjs.map +1 -1
  351. package/fesm2020/fundamental-ngx-core-tree.mjs +3 -3
  352. package/fesm2020/fundamental-ngx-core-tree.mjs.map +1 -1
  353. package/fesm2020/fundamental-ngx-core-upload-collection.mjs +2 -2
  354. package/fesm2020/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  355. package/fesm2020/fundamental-ngx-core-vertical-navigation.mjs +4 -4
  356. package/fesm2020/fundamental-ngx-core-wizard.mjs +2 -2
  357. package/file-uploader/file-uploader.component.d.ts +0 -2
  358. package/fundamental-ngx-core-v0.37.0-rc.21.tgz +0 -0
  359. package/menu/menu-item/menu-item.component.d.ts +27 -7
  360. package/menu/menu.component.d.ts +15 -10
  361. package/menu/services/menu.service.d.ts +3 -3
  362. package/package.json +11 -8
  363. package/popover/base/base-popover.class.d.ts +5 -1
  364. package/popover/popover-body/popover-body.component.d.ts +7 -10
  365. package/schematics/migrations/migration-0-37/index.js +14 -1
  366. package/schematics/migrations/migration-0-37/index.js.map +1 -1
  367. package/schematics/migrations/migration-0-37/index.ts +18 -1
  368. package/schematics/ng-add/index.js +6 -6
  369. package/schematics/ng-add/index.js.map +1 -1
  370. package/schematics/ng-add/index.ts +4 -4
  371. package/shared/interfaces/popover-position.d.ts +0 -8
  372. package/styles/fundamental-ngx-core.css +1 -0
  373. package/fundamental-ngx-core-v0.37.0-rc.2.tgz +0 -0
@@ -1,5 +1,5 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Input, Optional, Output, QueryList, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';
2
- import { debounceTime, takeUntil } from 'rxjs/operators';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Input, NgZone, Optional, Output, QueryList, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { debounceTime, take, takeUntil } from 'rxjs/operators';
3
3
  import { Subject, merge } from 'rxjs';
4
4
  import { resizeObservable, RtlService } from '@fundamental-ngx/core/utils';
5
5
  import { CarouselItemComponent } from './carousel-item/carousel-item.component';
@@ -28,11 +28,12 @@ class CarouselActiveSlides {
28
28
  }
29
29
  export class CarouselComponent {
30
30
  /** @hidden */
31
- constructor(_elementRef, _renderer, _changeDetectorRef, _carouselService, _rtlService) {
31
+ constructor(_elementRef, _renderer, _changeDetectorRef, _carouselService, _zone, _rtlService) {
32
32
  this._elementRef = _elementRef;
33
33
  this._renderer = _renderer;
34
34
  this._changeDetectorRef = _changeDetectorRef;
35
35
  this._carouselService = _carouselService;
36
+ this._zone = _zone;
36
37
  this._rtlService = _rtlService;
37
38
  /** ID for the Carousel. */
38
39
  this.id = `fd-carousel-${carouselCounter++}`;
@@ -312,28 +313,31 @@ export class CarouselComponent {
312
313
  }
313
314
  /** @hidden Initialize carousel with visible items */
314
315
  _initializeCarousel() {
315
- // Handles navigator button enabled/disabled state
316
- this._buttonVisibility();
317
- let arrayLength;
318
- // set page indicator count with fake array, to use in template
319
- if (this.loop && this._visibleSlidesNumericCount > 1) {
320
- // If loop with multi item visible.
321
- arrayLength = this.slides.length;
322
- }
323
- else {
324
- arrayLength = this.slides.length - this._visibleSlidesNumericCount + 1;
325
- }
326
- const pageIndicatorsIfZeroCount = this.slides.length === 0 ? 0 : 1;
327
- this.pageIndicatorsCountArray = new Array(arrayLength > 0 ? arrayLength : pageIndicatorsIfZeroCount);
328
- this._goToFirstItem();
329
- this.slides.forEach((_slide, index) => {
330
- if (index >= this.currentActiveSlidesStartIndex &&
331
- index < this.currentActiveSlidesStartIndex + this._visibleSlidesNumericCount) {
332
- _slide.visibility = 'visible';
316
+ this._zone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {
317
+ // Handles navigator button enabled/disabled state
318
+ this._buttonVisibility();
319
+ let arrayLength;
320
+ // set page indicator count with fake array, to use in template
321
+ if (this.loop && this._visibleSlidesNumericCount > 1) {
322
+ // If loop with multi item visible.
323
+ arrayLength = this.slides.length;
333
324
  }
334
325
  else {
335
- _slide.visibility = 'hidden';
326
+ arrayLength = this.slides.length - this._visibleSlidesNumericCount + 1;
336
327
  }
328
+ const pageIndicatorsIfZeroCount = this.slides.length === 0 ? 0 : 1;
329
+ this.pageIndicatorsCountArray = new Array(arrayLength > 0 ? arrayLength : pageIndicatorsIfZeroCount);
330
+ this._goToFirstItem();
331
+ this.slides.forEach((_slide, index) => {
332
+ if (index >= this.currentActiveSlidesStartIndex &&
333
+ index < this.currentActiveSlidesStartIndex + this._visibleSlidesNumericCount) {
334
+ _slide.visibility = 'visible';
335
+ }
336
+ else {
337
+ _slide.visibility = 'hidden';
338
+ }
339
+ });
340
+ this._changeDetectorRef.detectChanges();
337
341
  });
338
342
  }
339
343
  /** @hidden */
@@ -568,14 +572,14 @@ export class CarouselComponent {
568
572
  return slides;
569
573
  }
570
574
  }
571
- CarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.CarouselService }, { token: i2.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
572
- CarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: CarouselComponent, selector: "fd-carousel", inputs: { id: "id", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", pageIndicatorsOrientation: "pageIndicatorsOrientation", height: "height", width: "width", loop: "loop", leftNavigationBtnLabel: "leftNavigationBtnLabel", rightNavigationBtnLabel: "rightNavigationBtnLabel", navigation: "navigation", navigatorInPageIndicator: "navigatorInPageIndicator", numericIndicator: "numericIndicator", pageIndicatorContainer: "pageIndicatorContainer", pageIndicator: "pageIndicator", resourceStrings: "resourceStrings", slideTransitionDuration: "slideTransitionDuration", swipeEnabled: "swipeEnabled", vertical: "vertical", visibleSlidesCount: "visibleSlidesCount" }, outputs: { slideChange: "slideChange" }, host: { listeners: { "keydown.arrowright": "onKeydownArrowRight($event)", "keydown.arrowleft": "onKeydownArrowLeft($event)" }, properties: { "style.width": "width", "attr.id": "this.id" } }, providers: [CarouselService], queries: [{ propertyName: "slides", predicate: CarouselItemComponent, descendants: true }], viewQueries: [{ propertyName: "slideContainer", first: true, predicate: ["slideContainer"], descendants: true }, { propertyName: "carouselContainer", first: true, predicate: ["carouselContainer"], descendants: true }], ngImport: i0, template: "<div\n class=\"fd-carousel\"\n [class.fd-carousel--no-navigation]=\"!navigation\"\n data-ride=\"carousel\"\n tabindex=\"0\"\n [style.height]=\"height\"\n [style.width]=\"width\"\n [attr.dir]=\"dir\"\n role=\"region\"\n #carouselContainer\n (click)=\"_focus()\"\n>\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'top'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-carousel__content\"\n [class.fd-carousel__content--horizontal]=\"!vertical\"\n [style.width]=\"_contentSizePx\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <div #slideContainer class=\"fd-carousel__slides\">\n <ng-content></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div style=\"display: none\" role=\"region\" [attr.id]=\"id + '-accessibility'\" aria-live=\"polite\" dir=\"ltr\">\n {{ screenReaderLabel }}\n </div>\n</div>\n\n<ng-template #pageIndicatorContainer>\n <div class=\"fd-carousel__page-indicator-container\">\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"pageIndicators\"> </ng-container>\n\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pageIndicators>\n <ng-container *ngIf=\"numericIndicator\">\n <div class=\"fd-carousel__page-indicators\">\n <ng-container *ngIf=\"pageIndicator\">\n <div class=\"fd-carousel__text\" dir=\"ltr\">\n {{ getPageIndicatorLabel }}\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!numericIndicator && _showNavigationButtonInPageIndicatorContainer\">\n <ol class=\"fd-carousel__page-indicators\" [attr.dir]=\"dir\">\n <ng-container *ngIf=\"pageIndicator\">\n <ng-container *ngFor=\"let item of pageIndicatorsCountArray; let i = index\">\n <li\n [attr.data-slide-to]=\"i + 1\"\n class=\"fd-carousel__page-indicator\"\n [class.fd-carousel__page-indicator--active]=\"i === currentActiveSlidesStartIndex\"\n ></li>\n </ng-container>\n </ng-container>\n </ol>\n </ng-container>\n</ng-template>\n\n<ng-template #buttonLeft>\n <button\n fd-button\n class=\"fd-carousel__button fd-carousel__button--left\"\n [style.z-index]=\"1\"\n data-slide=\"previous\"\n [attr.aria-label]=\"leftNavigationBtnLabel || ('coreCarousel.leftNavigationBtnLabel' | fdTranslate)\"\n (click)=\"previous(); $event.stopPropagation()\"\n [disabled]=\"leftButtonDisabled\"\n [attr.title]=\"leftNavigationBtnLabel || ('coreCarousel.leftNavigationBtnLabel' | fdTranslate)\"\n glyph=\"slim-arrow-left\"\n ></button>\n</ng-template>\n\n<ng-template #buttonRight>\n <button\n fd-button\n class=\"fd-carousel__button fd-carousel__button--right\"\n [style.z-index]=\"1\"\n data-slide=\"next\"\n [attr.aria-label]=\"rightNavigationBtnLabel || ('coreCarousel.rightNavigationBtnLabel' | fdTranslate)\"\n (click)=\"next(); $event.stopPropagation()\"\n [disabled]=\"rightButtonDisabled\"\n [attr.title]=\"rightNavigationBtnLabel || ('coreCarousel.rightNavigationBtnLabel' | fdTranslate)\"\n glyph=\"slim-arrow-right\"\n ></button>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.25.1-rc.16\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-carousel{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;line-height:var(--sapContent_LineHeight);margin:0;max-width:100%;min-width:15.5rem;padding:0;width:100%}.fd-carousel:after,.fd-carousel:before{box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline-color:var(--sapContent_FocusColor);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{display:block}.fd-carousel .fd-carousel__content{-webkit-box-sizing:border-box;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);border:0;box-sizing:border-box;color:var(--sapTextColor);flex-basis:100%;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;position:relative}.fd-carousel .fd-carousel__content:after,.fd-carousel .fd-carousel__content:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__content .fd-carousel__button{-webkit-box-shadow:var(--sapContent_Shadow1);-webkit-transform:translateY(-50%);box-shadow:var(--sapContent_Shadow1);display:none;margin:0;position:absolute;top:50%;transform:translateY(-50%)}.fd-carousel .fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel .fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel .fd-carousel__content--horizontal .fd-carousel__slides{-ms-touch-action:pan-y;display:flex;flex-direction:row;min-width:-moz-fit-content;min-width:fit-content;touch-action:pan-y;width:100%}.fd-carousel .fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__slides{-webkit-box-sizing:border-box;-ms-touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;line-height:var(--sapContent_LineHeight);margin:0;min-height:-moz-fit-content;min-height:fit-content;padding:0;touch-action:pan-x;user-select:none}.fd-carousel__slides:after,.fd-carousel__slides:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:0;margin:0;padding:0;width:100%}.fd-carousel__item:after,.fd-carousel__item:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background:var(--sapPageFooter_Background);border:0;border-top:var(--fdCarousel_Pagination_Border);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;max-height:3.5rem;min-height:2.75rem;padding:.375rem .5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicators{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-wrap:wrap;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-wrap:wrap;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;min-width:9rem;padding:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{-webkit-box-sizing:border-box;background-color:var(--fdCarousel_Dot_Background);border:0;border:var(--fdCarousel_Dot_Border);border-radius:50%;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:var(--fdCarousel_Dot_Size);line-height:var(--sapContent_LineHeight);list-style-type:none;margin:0;margin:var(--fdCarousel_Dot_Margin);padding:0;width:var(--fdCarousel_Dot_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{background-color:var(--fdCarousel_Dot_Selected_Background);border:var(--fdCarousel_Dot_Selected_Border);height:.5rem;margin:0 .25rem;width:.5rem}.fd-carousel__text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border-radius:50%;display:flex;height:2.125rem;justify-content:center;margin:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-hover,.fd-carousel .fd-carousel__button:hover{box-shadow:var(--sapContent_Shadow1)}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: i5.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
575
+ CarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.CarouselService }, { token: i0.NgZone }, { token: i2.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
576
+ CarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: CarouselComponent, selector: "fd-carousel", inputs: { id: "id", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", pageIndicatorsOrientation: "pageIndicatorsOrientation", height: "height", width: "width", loop: "loop", leftNavigationBtnLabel: "leftNavigationBtnLabel", rightNavigationBtnLabel: "rightNavigationBtnLabel", navigation: "navigation", navigatorInPageIndicator: "navigatorInPageIndicator", numericIndicator: "numericIndicator", pageIndicatorContainer: "pageIndicatorContainer", pageIndicator: "pageIndicator", resourceStrings: "resourceStrings", slideTransitionDuration: "slideTransitionDuration", swipeEnabled: "swipeEnabled", vertical: "vertical", visibleSlidesCount: "visibleSlidesCount" }, outputs: { slideChange: "slideChange" }, host: { listeners: { "keydown.arrowright": "onKeydownArrowRight($event)", "keydown.arrowleft": "onKeydownArrowLeft($event)" }, properties: { "style.width": "width", "attr.id": "this.id" } }, providers: [CarouselService], queries: [{ propertyName: "slides", predicate: CarouselItemComponent, descendants: true }], viewQueries: [{ propertyName: "slideContainer", first: true, predicate: ["slideContainer"], descendants: true }, { propertyName: "carouselContainer", first: true, predicate: ["carouselContainer"], descendants: true }], ngImport: i0, template: "<div\n class=\"fd-carousel\"\n [class.fd-carousel--no-navigation]=\"!navigation\"\n data-ride=\"carousel\"\n tabindex=\"0\"\n [style.height]=\"height\"\n [style.width]=\"width\"\n [attr.dir]=\"dir\"\n role=\"region\"\n #carouselContainer\n (click)=\"_focus()\"\n>\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'top'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-carousel__content\"\n [class.fd-carousel__content--horizontal]=\"!vertical\"\n [style.width]=\"_contentSizePx\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <div #slideContainer class=\"fd-carousel__slides\">\n <ng-content></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div style=\"display: none\" role=\"region\" [attr.id]=\"id + '-accessibility'\" aria-live=\"polite\" dir=\"ltr\">\n {{ screenReaderLabel }}\n </div>\n</div>\n\n<ng-template #pageIndicatorContainer>\n <div class=\"fd-carousel__page-indicator-container\">\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"pageIndicators\"> </ng-container>\n\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pageIndicators>\n <ng-container *ngIf=\"numericIndicator\">\n <div class=\"fd-carousel__page-indicators\">\n <ng-container *ngIf=\"pageIndicator\">\n <div class=\"fd-carousel__text\" dir=\"ltr\">\n {{ getPageIndicatorLabel }}\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!numericIndicator && _showNavigationButtonInPageIndicatorContainer\">\n <ol class=\"fd-carousel__page-indicators\" [attr.dir]=\"dir\">\n <ng-container *ngIf=\"pageIndicator\">\n <ng-container *ngFor=\"let item of pageIndicatorsCountArray; let i = index\">\n <li\n [attr.data-slide-to]=\"i + 1\"\n class=\"fd-carousel__page-indicator\"\n [class.fd-carousel__page-indicator--active]=\"i === currentActiveSlidesStartIndex\"\n ></li>\n </ng-container>\n </ng-container>\n </ol>\n </ng-container>\n</ng-template>\n\n<ng-template #buttonLeft>\n <button\n fd-button\n class=\"fd-carousel__button fd-carousel__button--left\"\n [style.z-index]=\"1\"\n data-slide=\"previous\"\n [attr.aria-label]=\"leftNavigationBtnLabel || ('coreCarousel.leftNavigationBtnLabel' | fdTranslate)\"\n (click)=\"previous(); $event.stopPropagation()\"\n [disabled]=\"leftButtonDisabled\"\n [attr.title]=\"leftNavigationBtnLabel || ('coreCarousel.leftNavigationBtnLabel' | fdTranslate)\"\n glyph=\"slim-arrow-left\"\n ></button>\n</ng-template>\n\n<ng-template #buttonRight>\n <button\n fd-button\n class=\"fd-carousel__button fd-carousel__button--right\"\n [style.z-index]=\"1\"\n data-slide=\"next\"\n [attr.aria-label]=\"rightNavigationBtnLabel || ('coreCarousel.rightNavigationBtnLabel' | fdTranslate)\"\n (click)=\"next(); $event.stopPropagation()\"\n [disabled]=\"rightButtonDisabled\"\n [attr.title]=\"rightNavigationBtnLabel || ('coreCarousel.rightNavigationBtnLabel' | fdTranslate)\"\n glyph=\"slim-arrow-right\"\n ></button>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.26.0-rc.27\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-carousel{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;line-height:var(--sapContent_LineHeight);margin:0;max-width:100%;min-width:15.5rem;padding:0;width:100%}.fd-carousel:after,.fd-carousel:before{box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline-color:var(--sapContent_FocusColor);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{display:block}.fd-carousel .fd-carousel__content{-webkit-box-sizing:border-box;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);border:0;box-sizing:border-box;color:var(--sapTextColor);flex-basis:100%;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;position:relative}.fd-carousel .fd-carousel__content:after,.fd-carousel .fd-carousel__content:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__content .fd-carousel__button{-webkit-box-shadow:var(--sapContent_Shadow1);-webkit-transform:translateY(-50%);box-shadow:var(--sapContent_Shadow1);display:none;margin:0;position:absolute;top:50%;transform:translateY(-50%)}.fd-carousel .fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel .fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel .fd-carousel__content--horizontal .fd-carousel__slides{-ms-touch-action:pan-y;display:flex;flex-direction:row;min-width:-moz-fit-content;min-width:fit-content;touch-action:pan-y;width:100%}.fd-carousel .fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__slides{-webkit-box-sizing:border-box;-ms-touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;line-height:var(--sapContent_LineHeight);margin:0;min-height:-moz-fit-content;min-height:fit-content;padding:0;touch-action:pan-x;user-select:none}.fd-carousel__slides:after,.fd-carousel__slides:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:0;margin:0;padding:0;width:100%}.fd-carousel__item:after,.fd-carousel__item:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background:var(--sapPageFooter_Background);border:0;border-top:var(--fdCarousel_Pagination_Border);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;max-height:3.5rem;min-height:2.75rem;padding:.375rem .5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicators{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-wrap:wrap;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-wrap:wrap;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;min-width:9rem;padding:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{-webkit-box-sizing:border-box;background-color:var(--fdCarousel_Dot_Background);border:0;border:var(--fdCarousel_Dot_Border);border-radius:50%;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:var(--fdCarousel_Dot_Size);line-height:var(--sapContent_LineHeight);list-style-type:none;margin:0;margin:var(--fdCarousel_Dot_Margin);padding:0;width:var(--fdCarousel_Dot_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{background-color:var(--fdCarousel_Dot_Selected_Background);border:var(--fdCarousel_Dot_Selected_Border);height:.5rem;margin:0 .25rem;width:.5rem}.fd-carousel__text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border-radius:50%;display:flex;height:2.125rem;justify-content:center;margin:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-hover,.fd-carousel .fd-carousel__button:hover{box-shadow:var(--sapContent_Shadow1)}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: i5.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
573
577
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CarouselComponent, decorators: [{
574
578
  type: Component,
575
579
  args: [{ selector: 'fd-carousel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [CarouselService], host: {
576
580
  '[style.width]': 'width'
577
- }, template: "<div\n class=\"fd-carousel\"\n [class.fd-carousel--no-navigation]=\"!navigation\"\n data-ride=\"carousel\"\n tabindex=\"0\"\n [style.height]=\"height\"\n [style.width]=\"width\"\n [attr.dir]=\"dir\"\n role=\"region\"\n #carouselContainer\n (click)=\"_focus()\"\n>\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'top'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-carousel__content\"\n [class.fd-carousel__content--horizontal]=\"!vertical\"\n [style.width]=\"_contentSizePx\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <div #slideContainer class=\"fd-carousel__slides\">\n <ng-content></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div style=\"display: none\" role=\"region\" [attr.id]=\"id + '-accessibility'\" aria-live=\"polite\" dir=\"ltr\">\n {{ screenReaderLabel }}\n </div>\n</div>\n\n<ng-template #pageIndicatorContainer>\n <div class=\"fd-carousel__page-indicator-container\">\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"pageIndicators\"> </ng-container>\n\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pageIndicators>\n <ng-container *ngIf=\"numericIndicator\">\n <div class=\"fd-carousel__page-indicators\">\n <ng-container *ngIf=\"pageIndicator\">\n <div class=\"fd-carousel__text\" dir=\"ltr\">\n {{ getPageIndicatorLabel }}\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!numericIndicator && _showNavigationButtonInPageIndicatorContainer\">\n <ol class=\"fd-carousel__page-indicators\" [attr.dir]=\"dir\">\n <ng-container *ngIf=\"pageIndicator\">\n <ng-container *ngFor=\"let item of pageIndicatorsCountArray; let i = index\">\n <li\n [attr.data-slide-to]=\"i + 1\"\n class=\"fd-carousel__page-indicator\"\n [class.fd-carousel__page-indicator--active]=\"i === currentActiveSlidesStartIndex\"\n ></li>\n </ng-container>\n </ng-container>\n </ol>\n </ng-container>\n</ng-template>\n\n<ng-template #buttonLeft>\n <button\n fd-button\n class=\"fd-carousel__button fd-carousel__button--left\"\n [style.z-index]=\"1\"\n data-slide=\"previous\"\n [attr.aria-label]=\"leftNavigationBtnLabel || ('coreCarousel.leftNavigationBtnLabel' | fdTranslate)\"\n (click)=\"previous(); $event.stopPropagation()\"\n [disabled]=\"leftButtonDisabled\"\n [attr.title]=\"leftNavigationBtnLabel || ('coreCarousel.leftNavigationBtnLabel' | fdTranslate)\"\n glyph=\"slim-arrow-left\"\n ></button>\n</ng-template>\n\n<ng-template #buttonRight>\n <button\n fd-button\n class=\"fd-carousel__button fd-carousel__button--right\"\n [style.z-index]=\"1\"\n data-slide=\"next\"\n [attr.aria-label]=\"rightNavigationBtnLabel || ('coreCarousel.rightNavigationBtnLabel' | fdTranslate)\"\n (click)=\"next(); $event.stopPropagation()\"\n [disabled]=\"rightButtonDisabled\"\n [attr.title]=\"rightNavigationBtnLabel || ('coreCarousel.rightNavigationBtnLabel' | fdTranslate)\"\n glyph=\"slim-arrow-right\"\n ></button>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.25.1-rc.16\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-carousel{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;line-height:var(--sapContent_LineHeight);margin:0;max-width:100%;min-width:15.5rem;padding:0;width:100%}.fd-carousel:after,.fd-carousel:before{box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline-color:var(--sapContent_FocusColor);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{display:block}.fd-carousel .fd-carousel__content{-webkit-box-sizing:border-box;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);border:0;box-sizing:border-box;color:var(--sapTextColor);flex-basis:100%;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;position:relative}.fd-carousel .fd-carousel__content:after,.fd-carousel .fd-carousel__content:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__content .fd-carousel__button{-webkit-box-shadow:var(--sapContent_Shadow1);-webkit-transform:translateY(-50%);box-shadow:var(--sapContent_Shadow1);display:none;margin:0;position:absolute;top:50%;transform:translateY(-50%)}.fd-carousel .fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel .fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel .fd-carousel__content--horizontal .fd-carousel__slides{-ms-touch-action:pan-y;display:flex;flex-direction:row;min-width:-moz-fit-content;min-width:fit-content;touch-action:pan-y;width:100%}.fd-carousel .fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__slides{-webkit-box-sizing:border-box;-ms-touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;line-height:var(--sapContent_LineHeight);margin:0;min-height:-moz-fit-content;min-height:fit-content;padding:0;touch-action:pan-x;user-select:none}.fd-carousel__slides:after,.fd-carousel__slides:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:0;margin:0;padding:0;width:100%}.fd-carousel__item:after,.fd-carousel__item:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background:var(--sapPageFooter_Background);border:0;border-top:var(--fdCarousel_Pagination_Border);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;max-height:3.5rem;min-height:2.75rem;padding:.375rem .5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicators{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-wrap:wrap;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-wrap:wrap;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;min-width:9rem;padding:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{-webkit-box-sizing:border-box;background-color:var(--fdCarousel_Dot_Background);border:0;border:var(--fdCarousel_Dot_Border);border-radius:50%;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:var(--fdCarousel_Dot_Size);line-height:var(--sapContent_LineHeight);list-style-type:none;margin:0;margin:var(--fdCarousel_Dot_Margin);padding:0;width:var(--fdCarousel_Dot_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{background-color:var(--fdCarousel_Dot_Selected_Background);border:var(--fdCarousel_Dot_Selected_Border);height:.5rem;margin:0 .25rem;width:.5rem}.fd-carousel__text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border-radius:50%;display:flex;height:2.125rem;justify-content:center;margin:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-hover,.fd-carousel .fd-carousel__button:hover{box-shadow:var(--sapContent_Shadow1)}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%}\n"] }]
578
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.CarouselService }, { type: i2.RtlService, decorators: [{
581
+ }, template: "<div\n class=\"fd-carousel\"\n [class.fd-carousel--no-navigation]=\"!navigation\"\n data-ride=\"carousel\"\n tabindex=\"0\"\n [style.height]=\"height\"\n [style.width]=\"width\"\n [attr.dir]=\"dir\"\n role=\"region\"\n #carouselContainer\n (click)=\"_focus()\"\n>\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'top'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-carousel__content\"\n [class.fd-carousel__content--horizontal]=\"!vertical\"\n [style.width]=\"_contentSizePx\"\n >\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <div #slideContainer class=\"fd-carousel__slides\">\n <ng-content></ng-content>\n </div>\n\n <ng-container *ngIf=\"_showNavigationButtonInContent\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"_showPageIndicatorContainer && pageIndicatorsOrientation === 'bottom'\">\n <ng-container *ngTemplateOutlet=\"pageIndicatorContainer\"></ng-container>\n </ng-container>\n\n <div style=\"display: none\" role=\"region\" [attr.id]=\"id + '-accessibility'\" aria-live=\"polite\" dir=\"ltr\">\n {{ screenReaderLabel }}\n </div>\n</div>\n\n<ng-template #pageIndicatorContainer>\n <div class=\"fd-carousel__page-indicator-container\">\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonLeft\"></ng-container>\n </ng-container>\n\n <ng-container *ngTemplateOutlet=\"pageIndicators\"> </ng-container>\n\n <ng-container *ngIf=\"_showNavigationButtonInPageIndicatorContainer\">\n <ng-container *ngTemplateOutlet=\"buttonRight\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #pageIndicators>\n <ng-container *ngIf=\"numericIndicator\">\n <div class=\"fd-carousel__page-indicators\">\n <ng-container *ngIf=\"pageIndicator\">\n <div class=\"fd-carousel__text\" dir=\"ltr\">\n {{ getPageIndicatorLabel }}\n </div>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!numericIndicator && _showNavigationButtonInPageIndicatorContainer\">\n <ol class=\"fd-carousel__page-indicators\" [attr.dir]=\"dir\">\n <ng-container *ngIf=\"pageIndicator\">\n <ng-container *ngFor=\"let item of pageIndicatorsCountArray; let i = index\">\n <li\n [attr.data-slide-to]=\"i + 1\"\n class=\"fd-carousel__page-indicator\"\n [class.fd-carousel__page-indicator--active]=\"i === currentActiveSlidesStartIndex\"\n ></li>\n </ng-container>\n </ng-container>\n </ol>\n </ng-container>\n</ng-template>\n\n<ng-template #buttonLeft>\n <button\n fd-button\n class=\"fd-carousel__button fd-carousel__button--left\"\n [style.z-index]=\"1\"\n data-slide=\"previous\"\n [attr.aria-label]=\"leftNavigationBtnLabel || ('coreCarousel.leftNavigationBtnLabel' | fdTranslate)\"\n (click)=\"previous(); $event.stopPropagation()\"\n [disabled]=\"leftButtonDisabled\"\n [attr.title]=\"leftNavigationBtnLabel || ('coreCarousel.leftNavigationBtnLabel' | fdTranslate)\"\n glyph=\"slim-arrow-left\"\n ></button>\n</ng-template>\n\n<ng-template #buttonRight>\n <button\n fd-button\n class=\"fd-carousel__button fd-carousel__button--right\"\n [style.z-index]=\"1\"\n data-slide=\"next\"\n [attr.aria-label]=\"rightNavigationBtnLabel || ('coreCarousel.rightNavigationBtnLabel' | fdTranslate)\"\n (click)=\"next(); $event.stopPropagation()\"\n [disabled]=\"rightButtonDisabled\"\n [attr.title]=\"rightNavigationBtnLabel || ('coreCarousel.rightNavigationBtnLabel' | fdTranslate)\"\n glyph=\"slim-arrow-right\"\n ></button>\n</ng-template>\n", styles: ["/*!\n * Fundamental Library Styles v0.26.0-rc.27\n * Copyright (c) 2022 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-carousel{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;line-height:var(--sapContent_LineHeight);margin:0;max-width:100%;min-width:15.5rem;padding:0;width:100%}.fd-carousel:after,.fd-carousel:before{box-sizing:inherit;font-size:inherit}.fd-carousel.is-focus,.fd-carousel:focus{outline-color:var(--sapContent_FocusColor);outline-style:var(--sapContent_FocusStyle);outline-width:var(--sapContent_FocusWidth)}.fd-carousel.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel:hover .fd-carousel__content .fd-carousel__button{display:block}.fd-carousel .fd-carousel__content{-webkit-box-sizing:border-box;-ms-flex-preferred-size:100%;background:var(--fdCarousel_Content_Background);border:0;box-sizing:border-box;color:var(--sapTextColor);flex-basis:100%;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;position:relative}.fd-carousel .fd-carousel__content:after,.fd-carousel .fd-carousel__content:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__content .fd-carousel__button{-webkit-box-shadow:var(--sapContent_Shadow1);-webkit-transform:translateY(-50%);box-shadow:var(--sapContent_Shadow1);display:none;margin:0;position:absolute;top:50%;transform:translateY(-50%)}.fd-carousel .fd-carousel__content .fd-carousel__button--left{left:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--left[dir=rtl],[dir=rtl] .fd-carousel .fd-carousel__content .fd-carousel__button--left{left:auto;right:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--right{right:.5rem}.fd-carousel .fd-carousel__content .fd-carousel__button--right[dir=rtl],[dir=rtl] .fd-carousel .fd-carousel__content .fd-carousel__button--right{left:.5rem;right:auto}.fd-carousel .fd-carousel__content .fd-carousel__item img{height:auto;min-width:100%}.fd-carousel .fd-carousel__content--horizontal .fd-carousel__slides{-ms-touch-action:pan-y;display:flex;flex-direction:row;min-width:-moz-fit-content;min-width:fit-content;touch-action:pan-y;width:100%}.fd-carousel .fd-carousel__content--horizontal .fd-carousel__item img{min-height:100%;min-width:auto;width:auto}.fd-carousel__slides{-webkit-box-sizing:border-box;-ms-touch-action:pan-x;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-drag:none;-webkit-tap-highlight-color:rgba(0,0,0,0);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;line-height:var(--sapContent_LineHeight);margin:0;min-height:-moz-fit-content;min-height:fit-content;padding:0;touch-action:pan-x;user-select:none}.fd-carousel__slides:after,.fd-carousel__slides:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;display:none;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:100%;justify-content:center;line-height:var(--sapContent_LineHeight);line-height:0;margin:0;padding:0;width:100%}.fd-carousel__item:after,.fd-carousel__item:before{box-sizing:inherit;font-size:inherit}.fd-carousel__item--active{display:block}.fd-carousel__item img{pointer-events:none}.fd-carousel__page-indicator-container{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background:var(--sapPageFooter_Background);border:0;border-top:var(--fdCarousel_Pagination_Border);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;max-height:3.5rem;min-height:2.75rem;padding:.375rem .5rem}.fd-carousel__page-indicator-container:after,.fd-carousel__page-indicator-container:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator-container:first-child{border-bottom:var(--fdCarousel_Pagination_Border);border-top:none}.fd-carousel__page-indicators{-webkit-box-sizing:border-box;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-wrap:wrap;align-items:center;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-wrap:wrap;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;justify-content:center;line-height:var(--sapContent_LineHeight);margin:0;min-width:9rem;padding:.5rem}.fd-carousel__page-indicators:after,.fd-carousel__page-indicators:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator{-webkit-box-sizing:border-box;background-color:var(--fdCarousel_Dot_Background);border:0;border:var(--fdCarousel_Dot_Border);border-radius:50%;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;height:var(--fdCarousel_Dot_Size);line-height:var(--sapContent_LineHeight);list-style-type:none;margin:0;margin:var(--fdCarousel_Dot_Margin);padding:0;width:var(--fdCarousel_Dot_Size)}.fd-carousel__page-indicator:after,.fd-carousel__page-indicator:before{box-sizing:inherit;font-size:inherit}.fd-carousel__page-indicator--active{background-color:var(--fdCarousel_Dot_Selected_Background);border:var(--fdCarousel_Dot_Selected_Border);height:.5rem;margin:0 .25rem;width:.5rem}.fd-carousel__text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapPageFooter_TextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fd-carousel__text:after,.fd-carousel__text:before{box-sizing:inherit;font-size:inherit}.fd-carousel .fd-carousel__button{-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;border-radius:50%;display:flex;height:2.125rem;justify-content:center;margin:.25rem;max-height:2.125rem;max-width:2.125rem;min-height:2.125rem;min-width:2.125rem;padding:0;width:2.125rem}.fd-carousel .fd-carousel__button:before{inset:-.25rem;width:auto}.fd-carousel .fd-carousel__button[dir=rtl]>[class*=sap-icon],[dir=rtl] .fd-carousel .fd-carousel__button>[class*=sap-icon]{transform:rotate(180deg)}.fd-carousel .fd-carousel__button.is-hover,.fd-carousel .fd-carousel__button:hover{box-shadow:var(--sapContent_Shadow1)}.fd-carousel--no-navigation .fd-carousel__button,.fd-carousel--no-navigation.is-hover .fd-carousel__content .fd-carousel__button,.fd-carousel--no-navigation:hover .fd-carousel__content .fd-carousel__button{display:none}.fd-carousel__item fd-busy-indicator{display:block;height:100%}\n"] }]
582
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.CarouselService }, { type: i0.NgZone }, { type: i2.RtlService, decorators: [{
579
583
  type: Optional
580
584
  }] }]; }, propDecorators: { id: [{
581
585
  type: Input
@@ -638,4 +642,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
638
642
  type: HostListener,
639
643
  args: ['keydown.arrowleft', ['$event']]
640
644
  }] } });
641
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBNkIsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRyxPQUFPLEVBQXlDLGVBQWUsRUFBZ0IsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7OztBQUUxRyxrREFBa0Q7QUFDbEQsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFJcEMsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN0QixtREFBSSxDQUFBO0lBQ0osbURBQUksQ0FBQTtJQUNKLDJEQUFRLENBQUE7QUFDWixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUFPRCxJQUFJ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QUFxQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFLN0QsY0FBYztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQjtnQkFLM0IsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQjtnQkF1SzlCLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFROUMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgcmVzaXplT2JzZXJ2YWJsZSwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5cbmltcG9ydCB7IENhcm91c2VsSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY2Fyb3VzZWwtaXRlbS9jYXJvdXNlbC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXJvdXNlbFJlc291cmNlU3RyaW5nc0VOLCBGZENhcm91c2VsUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi9pMThuL2Nhcm91c2VsLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDYXJvdXNlbENvbmZpZywgQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlLCBDYXJvdXNlbFNlcnZpY2UsIFBhbkVuZE91dHB1dCB9IGZyb20gJy4vY2Fyb3VzZWwuc2VydmljZSc7XG5cbi8qKiBQYWdlIGxpbWl0IHRvIHN3aXRjaCB0byBudW1lcmljYWwgaW5kaWNhdG9yICovXG5jb25zdCBJQ09OX1BBR0VfSU5ESUNBVE9SX0xJTUlUID0gODtcblxuZXhwb3J0IHR5cGUgUGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9ICdib3R0b20nIHwgJ3RvcCc7XG5cbmV4cG9ydCBlbnVtIFNsaWRlRGlyZWN0aW9uIHtcbiAgICBOb25lLFxuICAgIE5FWFQsXG4gICAgUFJFVklPVVNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaXR0aW5nU2xpZGVzQW5kV2lkdGgge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgc2xpZGVzOiBudW1iZXI7XG59XG5cbmxldCBjYXJvdXNlbENvdW50ZXIgPSAwO1xuXG5jbGFzcyBDYXJvdXNlbEFjdGl2ZVNsaWRlcyB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGFjdGl2ZUl0ZW1zOiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSwgcHVibGljIHJlYWRvbmx5IHNsaWRlRGlyZWN0aW9uOiBzdHJpbmcpIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY2Fyb3VzZWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2Fyb3VzZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW0Nhcm91c2VsU2VydmljZV0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW3N0eWxlLndpZHRoXSc6ICd3aWR0aCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIENhcm91c2VsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xuICAgIC8qKiBJRCBmb3IgdGhlIENhcm91c2VsLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBpZCA9IGBmZC1jYXJvdXNlbC0ke2Nhcm91c2VsQ291bnRlcisrfWA7XG5cbiAgICAvKiogU2V0cyBhcmlhLWxhYmVsIGF0dHJpYnV0ZSBmb3IgY2Fyb3VzZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbCA9IG51bGw7XG5cbiAgICAvKiogU2V0cyBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIGZvciBjYXJvdXNlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IHN0cmluZztcblxuICAgIC8qKiBTZXRzIGFyaWEtZGVzY3JpYmVkYnkgYXR0cmlidXRlIGZvciBjYXJvdXNlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmc7XG5cbiAgICAvKiogU2V0cyBwb3NpdGlvbiBvZiBwYWdlIGluZGljYXRvciBjb250YWluZXIuIERlZmF1bHQgcG9zaXRpb24gaXMgYm90dG9tLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvcnNPcmllbnRhdGlvbjogUGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9ICdib3R0b20nO1xuXG4gICAgLyoqIEhlaWdodCBmb3IgY2Fyb3VzZWwgY29udGFpbmVyICovXG4gICAgQElucHV0KClcbiAgICBoZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKiBXaWR0aCBmb3IgY2Fyb3VzZWwgY29udGFpbmVyICovXG4gICAgQElucHV0KClcbiAgICB3aWR0aCA9ICcxMDAlJztcblxuICAgIC8qKiBJZiBjYXJvdXNlbCBpcyBpbiBjaXJjdWxhciBsb29wICovXG4gICAgQElucHV0KClcbiAgICBsb29wID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIExhYmVsIGZvciBsZWZ0IG5hdmlnYXRpb24gYnV0dG9uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsZWZ0TmF2aWdhdGlvbkJ0bkxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaTE4biBjYXBhYmlsaXRpZXMgaW5zdGVhZFxuICAgICAqIExhYmVsIGZvciByaWdodCBuYXZpZ2F0aW9uIGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmlnaHROYXZpZ2F0aW9uQnRuTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBTaG93cy9oaWRlcyBvcHRpb25hbCBuYXZpZ2F0aW9uIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogU2hvdyBuYXZpZ2F0aW9uIGJ1dHRvbiBpbiBwYWdlIGluZGljYXRvciBjb250YWluZXIgb3IgaW5zaWRlIGNvbnRlbnQuIERlZmF1bHQgaXMgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyIG9uIHRydWUgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRvckluUGFnZUluZGljYXRvciA9IHRydWU7XG5cbiAgICAvKiogQ29udmVydCB0byBOdW1lcmljIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgQElucHV0KClcbiAgICBudW1lcmljSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogU2hvd3MvaGlkZXMgb3B0aW9uYWwgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvckNvbnRhaW5lciA9IHRydWU7XG5cbiAgICAvKiogU2hvd3MvaGlkZXMgb3B0aW9uYWwgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VJbmRpY2F0b3IgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBzZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBGZENhcm91c2VsUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IEZkQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHNsaWRpbmcgZHVyYXRpb24gaW4gbWlsbGllIHNlY29uZHMuIERlZmF1bHQgaXMgMTUwICovXG4gICAgQElucHV0KClcbiAgICBzbGlkZVRyYW5zaXRpb25EdXJhdGlvbiA9IDE1MDtcblxuICAgIC8qKiBJcyBzd2lwZSBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBzd2lwZUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqIElzIGNhcm91c2VsIGlzIHZlcnRpY2FsLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIC8qKiBOdW1iZXIgb2YgaXRlbXMgdG8gYmUgdmlzaWJsZSBhdCBhIHRpbWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2aXNpYmxlU2xpZGVzQ291bnQodmFsdWU6IG51bWJlciB8ICdhdXRvJykge1xuICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzQ291bnQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCA9IHRoaXMuX2dldFZpc2libGVTbGlkZXNDb3VudCgpO1xuICAgIH1cblxuICAgIGdldCB2aXNpYmxlU2xpZGVzQ291bnQoKTogbnVtYmVyIHwgJ2F1dG8nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudDtcbiAgICB9XG5cbiAgICAvKiogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIGEgc2xpZGUgdHJhbnNpdGlvbiBoYXMgaGFwcGVuZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzbGlkZUNoYW5nZTogRXZlbnRFbWl0dGVyPENhcm91c2VsQWN0aXZlU2xpZGVzPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2Fyb3VzZWxBY3RpdmVTbGlkZXM+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oQ2Fyb3VzZWxJdGVtQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgc2xpZGVzOiBRdWVyeUxpc3Q8Q2Fyb3VzZWxJdGVtQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnc2xpZGVDb250YWluZXInKVxuICAgIHNsaWRlQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIENhcm91c2VsIGNvbnRhaW5lciBlbGVtZW50LiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2Nhcm91c2VsQ29udGFpbmVyJylcbiAgICBjYXJvdXNlbENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuIFN0YXJ0IGluZGV4IG9mIGN1cnJlbnRseSBhY3RpdmUgaXRlbXMgKi9cbiAgICBjdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiBoYW5kbGVzIHJ0bCBzZXJ2aWNlICovXG4gICAgZGlyOiBEaXJlY3Rpb24gPSAnbHRyJztcblxuICAgIC8qKiBAaGlkZGVuIE1ha2UgbGVmdCBuYXZpZ2F0aW9uIGJ1dHRvbiBkaXNhYmxlZCAqL1xuICAgIGxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gTWFrZSByaWdodCBuYXZpZ2F0aW9uIGJ1dHRvbiBkaXNhYmxlZCAqL1xuICAgIHJpZ2h0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIEZha2UgYXJyYXkgZm9yIGNvdW50aW5nIG51bWJlciBvZiBwYWdlIGluZGljYXRvciAqL1xuICAgIHBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheTogbnVtYmVyW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NsaWRlc1dyYXBwZXJTaXplID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9jb250ZW50U2l6ZVB4KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zbGlkZXNXcmFwcGVyU2l6ZSA/IGAke3RoaXMuX3NsaWRlc1dyYXBwZXJTaXplfXB4YCA6IHRoaXMud2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXNpYmxlU2xpZGVzQ291bnQ6IG51bWJlciB8ICdhdXRvJyA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDYXJvdXNlbFJlc291cmNlU3RyaW5nc0VOO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25maWc6IENhcm91c2VsQ29uZmlnID0ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NsaWRlc0NvcHk6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZpb3VzVmlzaWJsZVNsaWRlc0NvdW50OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NsaWRlU3dpcGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jYXJvdXNlbFNlcnZpY2U6IENhcm91c2VsU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZVRvUnRsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIE9uIGNhcm91c2VsIGxvYWQsIGRpc3BsYXkgZmlyc3Qgc2xpZGUgKyBudW1iZXIgb2Ygc2xpZGUgdmlzaWJsZVxuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gMDtcblxuICAgICAgICAvLyBDaGFuZ2UgcGFnaW5hdGlvbiBkaXNwbGF5IHRvIG51bWVyaWMsIGlmIGl0ZW0gY291bnQgaXMgbW9yZSB0aGFuIDhcbiAgICAgICAgaWYgKHRoaXMuc2xpZGVzLmxlbmd0aCA+IElDT05fUEFHRV9JTkRJQ0FUT1JfTElNSVQpIHtcbiAgICAgICAgICAgIHRoaXMubnVtZXJpY0luZGljYXRvciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zbGlkZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBEaXNhYmxlIHN3aXBlIHdoZW4gdGhlcmUgaXMgbm8gY2Fyb3VzZWwgaXRlbVxuICAgICAgICAgICAgdGhpcy5zd2lwZUVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gS2VlcCBjb3B5IG9mIG9yaWdpbmFsIHNsaWRlIGFycmF5LCBmb3IgaW5kaWNhdG9yIHB1cnBvc2UuXG4gICAgICAgIC8vIEluIGNhc2Ugb2YgbG9vcGVkIGNhcm91c2VsLCBvcmlnaW5hbCBzbGlkZXMgYXJyYXkgY2hhbmdlcy5cbiAgICAgICAgdGhpcy5fc2xpZGVzQ29weSA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVTZXJ2aWNlRXZlbnRzKCk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGR5bmFtaWMgdXBkYXRlIG9mIHNsaWRlc1xuICAgICAgICB0aGlzLnNsaWRlcy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fb25TbGlkZVVwZGF0ZXMoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVTZXJ2aWNlQ29uZmlnKCk7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5pbml0aWFsaXNlKHRoaXMuX2NvbmZpZywgdGhpcy5zbGlkZXMsIHRoaXMuc2xpZGVDb250YWluZXIpO1xuICAgICAgICB0aGlzLl9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudCA9IHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQ7XG5cbiAgICAgICAgdGhpcy5fcmVzaXplQ29udGVudENvbnRhaW5lcigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgJiYgdGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgIT09IHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDYXJvdXNlbCgpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVNlcnZpY2VDb25maWcoKTtcbiAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS51cGRhdGVDb25maWcodGhpcy5fY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzVmlzaWJsZVNsaWRlc0NvdW50ID0gdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudDtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3JJblBhZ2VJbmRpY2F0b3IgJiYgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5uYXZpZ2F0b3JJblBhZ2VJbmRpY2F0b3IgJiYgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgKHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCA+IDAgfHwgdGhpcy5udW1lcmljSW5kaWNhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBnZXRQYWdlSW5kaWNhdG9yTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyAxfSAke3RoaXMucmVzb3VyY2VTdHJpbmdzLmZkX2Nhcm91c2VsX29mfSAke1xuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoXG4gICAgICAgIH1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNjcmVlblJlYWRlckxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnJlc291cmNlU3RyaW5ncy5mZF9jYXJvdXNlbF9yZWFkZXJ9ICR7dGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIDF9ICR7XG4gICAgICAgICAgICB0aGlzLnJlc291cmNlU3RyaW5ncy5mZF9jYXJvdXNlbF9vZlxuICAgICAgICB9ICR7dGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RofWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWwgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBnZXQgdmFsdWUgZm9yIHJ0bCAqL1xuICAgIF9pc1J0bCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3JpZ2h0JywgWyckZXZlbnQnXSlcbiAgICBvbktleWRvd25BcnJvd1JpZ2h0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2lzUnRsKCkgPyB0aGlzLnByZXZpb3VzKCkgOiB0aGlzLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dsZWZ0JywgWyckZXZlbnQnXSlcbiAgICBvbktleWRvd25BcnJvd0xlZnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5faXNSdGwoKSA/IHRoaXMubmV4dCgpIDogdGhpcy5wcmV2aW91cygpO1xuICAgIH1cblxuICAgIC8qKiBUcmFuc2l0aW9ucyB0byB0aGUgcHJldmlvdXMgc2xpZGUgaW4gdGhlIGNhcm91c2VsLiAqL1xuICAgIHByZXZpb3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubG9vcCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTKTtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHRCdG5Gb2N1cygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UucGlja1ByZXZpb3VzKCk7XG5cbiAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uUFJFVklPVVMpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIFRyYW5zaXRpb25zIHRvIHRoZSBuZXh0IHNsaWRlIGluIHRoZSBjYXJvdXNlbC4gKi9cbiAgICBuZXh0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubG9vcCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID49IHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmluZyB0byBuZXh0IHNsaWRlXG4gICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FkanVzdEFjdGl2ZUl0ZW1Qb3NpdGlvbihTbGlkZURpcmVjdGlvbi5ORVhUKTtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHRCdG5Gb2N1cygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UucGlja05leHQoKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uTkVYVCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTdWJzY3JpYmUgdG8gY2Fyb3VzZWwgc2VydmljZSBldmVudHMgKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVTZXJ2aWNlRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlQ2hhbmdlJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLl9vblNsaWRlU3dpcGUoZXZlbnQpKTtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmRyYWdTdGF0ZUNoYW5nZSQuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5fb25TbGlkZURyYWcoZXZlbnQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIFByZXZlbnQgbmF0aXZlIGZvY3VzIGZsb3cgcmVsYXRlZCB0byBidXR0b24sIGlmIGJ1dHRvbiB3aWxsIGJlIGRpc2FibGUgb24gZm9jdXMgc3RhdGUuXG4gICAgICogSXQgd29ya3Mgb25seSBpZiBjYXJvdXNlbCBpcyBub3QgaW4gY2lyY3VsYXIgbG9vcC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9wcmV2ZW50RGVmYXVsdEJ0bkZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sb29wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNGaXJzdCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDA7XG4gICAgICAgIGNvbnN0IGlzTGFzdCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChpc0ZpcnN0IHx8IGlzTGFzdCkge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEFkanVzdCBwb3NpdGlvbiBvZiBhY3RpdmUgaXRlbSwgYmFzZWQgb24gc2xpZGUgZGlyZWN0aW9uICovXG4gICAgcHJpdmF0ZSBfYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKHNsaWRlRGlyZWN0aW9uOiBTbGlkZURpcmVjdGlvbiwgc3RlcDogbnVtYmVyID0gMSk6IHZvaWQge1xuICAgICAgICAvLyBNb3ZlIG9uZSBzdGVwIGluIHRoZSBkaXJlY3Rpb25cbiAgICAgICAgY29uc3QgcG9zaXRpb25BZGp1c3RtZW50ID0gc2xpZGVEaXJlY3Rpb24gPT09IFNsaWRlRGlyZWN0aW9uLk5FWFQgPyBzdGVwIDogLXN0ZXA7XG4gICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgcG9zaXRpb25BZGp1c3RtZW50O1xuXG4gICAgICAgIC8vIElmIGNhcm91c2VsIHNldCB0byBsb29wXG4gICAgICAgIGlmICh0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSB0aGlzLnNsaWRlcy5sZW5ndGggKyB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID49IHRoaXMuc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICUgdGhpcy5zbGlkZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYnV0dG9uVmlzaWJpbGl0eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlcyBuYXZpZ2F0aW9uIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgcHJpdmF0ZSBfYnV0dG9uVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gZGlzYWJsZSBuYXZpZ2F0aW9uIGJ1dHRvbiBpZiBlaXRoZXIgZGlyZWN0aW9uIGxpbWl0IGhhcyByZWFjaGVkLlxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2xpZGVzLmxlbmd0aCAtIDEgPT09IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPiAxICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPj0gdGhpcy5zbGlkZXMubGVuZ3RoXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zbGlkZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBIYW5kbGUgd2hlbiBzbGlkZSBpcyBhZGRlZCBvciByZW1vdmVkICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZVVwZGF0ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NsaWRlc0NvcHkgPSB0aGlzLnNsaWRlcy50b0FycmF5KCk7XG4gICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSAwO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaW5pdGlhbGlzZSh0aGlzLl9jb25maWcsIHRoaXMuc2xpZGVzLCB0aGlzLnNsaWRlQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZVkoMHB4KScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zbGlkZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGVYKDBweCknKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0aWFsaXplQ2Fyb3VzZWwoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEluaXRpYWxpemUgY2Fyb3VzZWwgd2l0aCB2aXNpYmxlIGl0ZW1zICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNhcm91c2VsKCk6IHZvaWQge1xuICAgICAgICAvLyBIYW5kbGVzIG5hdmlnYXRvciBidXR0b24gZW5hYmxlZC9kaXNhYmxlZCBzdGF0ZVxuICAgICAgICB0aGlzLl9idXR0b25WaXNpYmlsaXR5KCk7XG5cbiAgICAgICAgbGV0IGFycmF5TGVuZ3RoOiBudW1iZXI7XG4gICAgICAgIC8vIHNldCBwYWdlIGluZGljYXRvciBjb3VudCB3aXRoIGZha2UgYXJyYXksIHRvIHVzZSBpbiB0ZW1wbGF0ZVxuICAgICAgICBpZiAodGhpcy5sb29wICYmIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPiAxKSB7XG4gICAgICAgICAgICAvLyBJZiBsb29wIHdpdGggbXVsdGkgaXRlbSB2aXNpYmxlLlxuICAgICAgICAgICAgYXJyYXlMZW5ndGggPSB0aGlzLnNsaWRlcy5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheUxlbmd0aCA9IHRoaXMuc2xpZGVzLmxlbmd0aCAtIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFnZUluZGljYXRvcnNJZlplcm9Db3VudCA9IHRoaXMuc2xpZGVzLmxlbmd0aCA9PT0gMCA/IDAgOiAxO1xuXG4gICAgICAgIHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5ID0gbmV3IEFycmF5KGFycmF5TGVuZ3RoID4gMCA/IGFycmF5TGVuZ3RoIDogcGFnZUluZGljYXRvcnNJZlplcm9Db3VudCk7XG5cbiAgICAgICAgdGhpcy5fZ29Ub0ZpcnN0SXRlbSgpO1xuXG4gICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goKF9zbGlkZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpbmRleCA+PSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICYmXG4gICAgICAgICAgICAgICAgaW5kZXggPCB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgX3NsaWRlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zbGlkZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ29Ub0ZpcnN0SXRlbSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuY3VycmVudFRyYW5zaXRpb25QeCAhPT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5zbGlkZXMubGVuZ3RoID4gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmdvVG9JdGVtKHRoaXMuc2xpZGVzLmZpcnN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEluaXRpYWxpemUgY29uZmlnIGZvciBDYXJvdXNlbCBzZXJ2aWNlICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZVNlcnZpY2VDb25maWcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmZpZy52ZXJ0aWNhbCA9IHRoaXMudmVydGljYWw7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5lbGVtZW50c0F0T25jZSA9IHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQ7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5nZXN0dXJlU3VwcG9ydCA9IHRoaXMuc3dpcGVFbmFibGVkO1xuICAgICAgICB0aGlzLl9jb25maWcuaW5maW5pdGUgPSB0aGlzLmxvb3A7XG4gICAgICAgIHRoaXMuX2NvbmZpZy50cmFuc2l0aW9uID0gU3RyaW5nKHRoaXMuc2xpZGVUcmFuc2l0aW9uRHVyYXRpb24pICsgJ21zJztcbiAgICAgICAgLy8gQ2Fyb3VzZWwgc2VydmljZSBleHBlY3RzIHRyYW5zaXRpb24gaW4gc3RyaW5nIGZvcm1hdCB3aXRoIHVuaXQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBSZXR1cm5zIHRoZSBzbGlkZSBzd2FwcGluZyBzdGVwc1xuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFN0ZXBUYWtlbihldmVudDogUGFuRW5kT3V0cHV0LCBhY3R1YWxBY3RpdmVTbGlkZUluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgc3RlcHNDYWxjdWxhdGVkOiBudW1iZXI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICghdGhpcy5faXNSdGwoKSAmJiBldmVudC5hZnRlcikgfHxcbiAgICAgICAgICAgICh0aGlzLl9pc1J0bCgpICYmICFldmVudC5hZnRlciAmJiAhdGhpcy52ZXJ0aWNhbCkgfHxcbiAgICAgICAgICAgICh0aGlzLnZlcnRpY2FsICYmIGV2ZW50LmFmdGVyKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID09PSAwICYmIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID4gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXggLSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSB0aGlzLnNsaWRlcy5sZW5ndGggLSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgYWN0dWFsQWN0aXZlU2xpZGVJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSwgd2hlbiBmaXJzdCBsZWZ0IHN3aXBlIGJlZm9yZSBzbGlkZXMgYXJlIHJvdGF0ZWQgaW4gY2Fyb3VzZWwgc2VydmljZVxuICAgICAgICAgICAgaWYgKGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXggPT09IDAgJiYgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXggPCB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCAtIGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyB0aGlzLnNsaWRlcy5sZW5ndGggLSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGVwc0NhbGN1bGF0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlcyBub3RpZmljYXRpb24gb24gdmlzaWJsZSBzbGlkZSBjaGFuZ2UgKi9cbiAgICBwcml2YXRlIF9ub3RpZnlTbGlkZUNoYW5nZShzbGlkZURpcmVjdGlvbjogU2xpZGVEaXJlY3Rpb24sIGZpcnN0QWN0aXZlU2xpZGU/OiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2UgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVNsaWRlczogQ2Fyb3VzZWxJdGVtQ29tcG9uZW50W10gPSBbXTtcbiAgICAgICAgbGV0IGZpcnN0QWN0aXZlU2xpZGVJbmRleDogbnVtYmVyO1xuXG4gICAgICAgIGlmICh0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgIGZpcnN0QWN0aXZlU2xpZGUgPSB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0QWN0aXZlU2xpZGUpIHtcbiAgICAgICAgICAgIGZpcnN0QWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgYWN0aXZlU2xpZGVJbmRleCA9IDA7IGFjdGl2ZVNsaWRlSW5kZXggPCB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50OyBhY3RpdmVTbGlkZUluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZmlyc3RBY3RpdmVTbGlkZUluZGV4ICsgYWN0aXZlU2xpZGVJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHNsaWRlID0gdGhpcy5zbGlkZXMuZ2V0KGluZGV4KTtcbiAgICAgICAgICAgIGlmIChzbGlkZSkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgICAgICAgICAgICBzbGlkZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWFuYWdlU2xpZGVWaXNpYmlsaXR5KGZpcnN0QWN0aXZlU2xpZGVJbmRleCk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNsaWRlRGlyZWN0aW9uID09PSBTbGlkZURpcmVjdGlvbi5ORVhUID8gJ05leHQnIDogJ1ByZXZpb3VzJztcbiAgICAgICAgdGhpcy5zbGlkZUNoYW5nZS5lbWl0KG5ldyBDYXJvdXNlbEFjdGl2ZVNsaWRlcyhhY3RpdmVTbGlkZXMsIGRpcmVjdGlvbikpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE1hbmFnZXMgdmlzaWJpbGl0eSBmb3Igc2xpZGVzLiBVc2VmdWwgaW4gbWFuYWdpbmcgdGFiIG9yZGVyICovXG4gICAgcHJpdmF0ZSBfbWFuYWdlU2xpZGVWaXNpYmlsaXR5KGZpcnN0QWN0aXZlU2xpZGVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoX3NsaWRlcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gZmlyc3RBY3RpdmVTbGlkZUluZGV4ICYmIGluZGV4IDwgZmlyc3RBY3RpdmVTbGlkZUluZGV4ICsgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3NsaWRlcy52aXNpYmlsaXR5ID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3NsaWRlcy52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9zbGlkZXMudmlzaWJpbGl0eSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfc2xpZGVzLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0sIHRoaXMuc2xpZGVUcmFuc2l0aW9uRHVyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJ0bCBjaGFuZ2Ugc3Vic2NyaXB0aW9uICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9SdGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hEaXJlY3Rpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpciA9IHRoaXMuX2lzUnRsKCkgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmlzUnRsID0gdGhpcy5kaXIgPT09ICdydGwnO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLml0ZW1zICYmIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuZ29Ub0l0ZW0odGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgICAgICByZWZyZXNoRGlyZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHJlZnJlc2hEaXJlY3Rpb24oKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gT24gU3dpcGluZyBvZiBzbGlkZSwgbWFuYWdlIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZVN3aXBlKGV2ZW50OiBQYW5FbmRPdXRwdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2xpZGVTd2lwZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaXJzdEFjdGl2ZVNsaWRlID0gZXZlbnQuaXRlbTtcbiAgICAgICAgY29uc3QgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuX3NsaWRlc0NvcHkuZmluZEluZGV4KChfc2xpZGUpID0+IF9zbGlkZSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIGNvbnN0IHN0ZXBUYWtlbiA9IHRoaXMuX2dldFN0ZXBUYWtlbihldmVudCwgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCk7XG4gICAgICAgIGlmIChzdGVwVGFrZW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgc2xpZGVEaXJlY3Rpb246IFNsaWRlRGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1J0bCgpKSB7XG4gICAgICAgICAgICAgICAgc2xpZGVEaXJlY3Rpb24gPSBldmVudC5hZnRlciA/IFNsaWRlRGlyZWN0aW9uLk5FWFQgOiBTbGlkZURpcmVjdGlvbi5QUkVWSU9VUztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdmVydGljYWwgY2Fyb3VzZWwgc2xpZGUgZGlyZWN0aW9uIGlzIHNhbWUgaW4gbHRyIGFuZCBydGxcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZURpcmVjdGlvbiA9IGV2ZW50LmFmdGVyID8gU2xpZGVEaXJlY3Rpb24uTkVYVCA6IFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlRGlyZWN0aW9uID0gZXZlbnQuYWZ0ZXIgPyBTbGlkZURpcmVjdGlvbi5QUkVWSU9VUyA6IFNsaWRlRGlyZWN0aW9uLk5FWFQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKHNsaWRlRGlyZWN0aW9uLCBzdGVwVGFrZW4pO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2Uoc2xpZGVEaXJlY3Rpb24sIGZpcnN0QWN0aXZlU2xpZGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBNYWtpbmcgc2xpZGVzIHZpc2libGUgd2hlbiBzbGlkZXMgYXJlIGRyYWdnZWQuIE90aGVyd2lzZSwgaXQgbG9vc2VzIHRoZSBlZmZlY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZURyYWcoaXNEcmFnZ2luZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNEcmFnZ2luZykge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoX3NsaWRlKSA9PiB7XG4gICAgICAgICAgICAgICAgX3NsaWRlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3NsaWRlU3dpcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmdGVyIHNsaWRlIGxpbWl0IHJlYWNoZWQsIGlmIGRyYWdnaW5nIHN0YXJ0cyB0aGVuIHJldmVydCB2aXNpYmlsaXR5XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NsaWRlU3dpcGVkICYmICF0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VTbGlkZVZpc2liaWxpdHkodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVzaXplcyBpbm5lciBjYXJvdXNlbCBjb250YWluZXIgdG8gZml0IGFsbCBpdGVtcyBpbiB0aGUgdmlld3BvcnQgYW5kIGhpZGUgdGhvc2Ugd2hpY2ggYXJlIG5vdCBmdWxseSBpbiBpdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZXNpemVDb250ZW50Q29udGFpbmVyKCk6IHZvaWQge1xuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5zbGlkZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50KSxcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5jYXJvdXNlbENvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxuICAgICAgICApXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgc2xpZGVzIH0gPSB0aGlzLl9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGVTbGlkZXNDb3VudCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPSBzbGlkZXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsU2xpZGVzID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZWVkbGVTbGlkZUluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbW91bnQgb2Ygc2xpZGVzIGluc3VmZmljaWVudCB0byBmaWxsIHdob2xlIGNhcm91c2VsLCBzbGlkZSBiYWNrIGEgYml0LlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHNsaWRlcyA+IHRvdGFsU2xpZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkbGVTbGlkZUluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHNsaWRlcyAtIHRvdGFsU2xpZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWRsZVNsaWRlID0gdGhpcy5zbGlkZXMuZ2V0KG5lZWRsZVNsaWRlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSBuZWVkbGVTbGlkZUluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUgPSBuZWVkbGVTbGlkZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIGNhcm91c2VsIGNvbmZpZyBhbmQgdHJhbnNpdGlvbiB0byB0aGUgY3VycmVudCBzbGlkZS5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbmVlZGxlU2xpZGUgJiYgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmdvVG9JdGVtKG5lZWRsZVNsaWRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uTm9uZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NsaWRlc1dyYXBwZXJTaXplICE9PSB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zbGlkZXNXcmFwcGVyU2l6ZSA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxjdWxhdGVzIGhvdyBtYW55IHNsaWRlcyBjYW4gYmUgc2hvd24gd2l0aGluIGN1cnJlbnQgY2Fyb3VzZWwgdmlld3BvcnQuXG4gICAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgZml0dGluZyBzbGlkZXMgY291bnQgYW5kIHRvdGFsIHdpZHRoIG9mIHRob3NlIHNsaWRlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTogRml0dGluZ1NsaWRlc0FuZFdpZHRoIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhcm91c2VsQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIHNsaWRlczogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuY2Fyb3VzZWxDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgbGV0IG1heFNpemUgPSAwO1xuICAgICAgICBsZXQgc2xpZGVzQ291bnQgPSAwO1xuXG4gICAgICAgIGNvbnN0IGNhcm91c2VsU2xpZGVzID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICBjb25zdCBwcmV2aW91c1NsaWRlcyA9IGNhcm91c2VsU2xpZGVzLnNwbGljZSgwLCB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KTtcblxuICAgICAgICBjb25zdCBnZXRTbGlkZXMgPSAoc2xpZGVzOiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzbGlkZSBvZiBzbGlkZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gc2xpZGUuZ2V0V2lkdGgoKTtcblxuICAgICAgICAgICAgICAgIGlmICghc2xpZGVXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTaXplID0gbWF4U2l6ZSArIHNsaWRlV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV3U2l6ZSA+IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG1heFNpemUgPSBuZXdTaXplO1xuICAgICAgICAgICAgICAgIHNsaWRlc0NvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2V0U2xpZGVzKGNhcm91c2VsU2xpZGVzKTtcblxuICAgICAgICAvLyBJZiB3aXRoIG9mIHRoZSByZXN0IG9mIHRoZSBzbGlkZXMgaXMgbGVzc2VyIHRoYW4gY2Fyb3VzZSdzIHZpZXdwb3J0LCBhZGQgcHJldmlvdXMgc2xpZGVzIHRvIGl0LlxuICAgICAgICBpZiAobWF4U2l6ZSA8IHdpZHRoKSB7XG4gICAgICAgICAgICBnZXRTbGlkZXMocHJldmlvdXNTbGlkZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiBtYXhTaXplLFxuICAgICAgICAgICAgc2xpZGVzOiBzbGlkZXNDb3VudFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmlzaWJsZVNsaWRlc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl92aXNpYmxlU2xpZGVzQ291bnQgIT09ICdhdXRvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc2xpZGVzIH0gPSB0aGlzLl9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTtcbiAgICAgICAgcmV0dXJuIHNsaWRlcztcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmZC1jYXJvdXNlbFwiXG4gICAgW2NsYXNzLmZkLWNhcm91c2VsLS1uby1uYXZpZ2F0aW9uXT1cIiFuYXZpZ2F0aW9uXCJcbiAgICBkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcbiAgICBbYXR0ci5kaXJdPVwiZGlyXCJcbiAgICByb2xlPVwicmVnaW9uXCJcbiAgICAjY2Fyb3VzZWxDb250YWluZXJcbiAgICAoY2xpY2spPVwiX2ZvY3VzKClcIlxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgcGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9PT0gJ3RvcCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VJbmRpY2F0b3JDb250YWluZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fY29udGVudFwiXG4gICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fY29udGVudC0taG9yaXpvbnRhbF09XCIhdmVydGljYWxcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiX2NvbnRlbnRTaXplUHhcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluQ29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkxlZnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiAjc2xpZGVDb250YWluZXIgY2xhc3M9XCJmZC1jYXJvdXNlbF9fc2xpZGVzXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgcGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9PT0gJ2JvdHRvbSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VJbmRpY2F0b3JDb250YWluZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgcm9sZT1cInJlZ2lvblwiIFthdHRyLmlkXT1cImlkICsgJy1hY2Nlc3NpYmlsaXR5J1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGRpcj1cImx0clwiPlxuICAgICAgICB7eyBzY3JlZW5SZWFkZXJMYWJlbCB9fVxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZUluZGljYXRvckNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uTGVmdFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnZUluZGljYXRvcnNcIj4gPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblJpZ2h0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwYWdlSW5kaWNhdG9ycz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibnVtZXJpY0luZGljYXRvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VJbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3RleHRcIiBkaXI9XCJsdHJcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0UGFnZUluZGljYXRvckxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFudW1lcmljSW5kaWNhdG9yICYmIF9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICA8b2wgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JzXCIgW2F0dHIuZGlyXT1cImRpclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VJbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtc2xpZGUtdG9dPVwiaSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvci0tYWN0aXZlXT1cImkgPT09IGN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGk+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9vbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uTGVmdD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBjbGFzcz1cImZkLWNhcm91c2VsX19idXR0b24gZmQtY2Fyb3VzZWxfX2J1dHRvbi0tbGVmdFwiXG4gICAgICAgIFtzdHlsZS56LWluZGV4XT1cIjFcIlxuICAgICAgICBkYXRhLXNsaWRlPVwicHJldmlvdXNcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxlZnROYXZpZ2F0aW9uQnRuTGFiZWwgfHwgKCdjb3JlQ2Fyb3VzZWwubGVmdE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAoY2xpY2spPVwicHJldmlvdXMoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxlZnRCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cImxlZnROYXZpZ2F0aW9uQnRuTGFiZWwgfHwgKCdjb3JlQ2Fyb3VzZWwubGVmdE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICBnbHlwaD1cInNsaW0tYXJyb3ctbGVmdFwiXG4gICAgPjwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25SaWdodD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBjbGFzcz1cImZkLWNhcm91c2VsX19idXR0b24gZmQtY2Fyb3VzZWxfX2J1dHRvbi0tcmlnaHRcIlxuICAgICAgICBbc3R5bGUuei1pbmRleF09XCIxXCJcbiAgICAgICAgZGF0YS1zbGlkZT1cIm5leHRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsIHx8ICgnY29yZUNhcm91c2VsLnJpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgIChjbGljayk9XCJuZXh0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyaWdodEJ1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwicmlnaHROYXZpZ2F0aW9uQnRuTGFiZWwgfHwgKCdjb3JlQ2Fyb3VzZWwucmlnaHROYXZpZ2F0aW9uQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LXJpZ2h0XCJcbiAgICA+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
645
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFHTixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHlCQUF5QixFQUE2QixNQUFNLDJCQUEyQixDQUFDO0FBQ2pHLE9BQU8sRUFBeUMsZUFBZSxFQUFnQixNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBRTFHLGtEQUFrRDtBQUNsRCxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUlwQyxNQUFNLENBQU4sSUFBWSxjQUlYO0FBSkQsV0FBWSxjQUFjO0lBQ3RCLG1EQUFJLENBQUE7SUFDSixtREFBSSxDQUFBO0lBQ0osMkRBQVEsQ0FBQTtBQUNaLENBQUMsRUFKVyxjQUFjLEtBQWQs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LEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFRRixlQUFlO3NCQURsQixLQUFLO2dCQWNOLHVCQUF1QjtzQkFEdEIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFZRyxXQUFXO3NCQURuQixNQUFNO2dCQUtQLE1BQU07c0JBREwsZUFBZTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBSzdELGNBQWM7c0JBRGIsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBd0s5QixtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUTlDLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyByZXNpemVPYnNlcnZhYmxlLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3V0aWxzJztcblxuaW1wb3J0IHsgQ2Fyb3VzZWxJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJvdXNlbC1pdGVtL2Nhcm91c2VsLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENhcm91c2VsUmVzb3VyY2VTdHJpbmdzRU4sIEZkQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuL2kxOG4vY2Fyb3VzZWwtcmVzb3VyY2VzJztcbmltcG9ydCB7IENhcm91c2VsQ29uZmlnLCBDYXJvdXNlbEl0ZW1JbnRlcmZhY2UsIENhcm91c2VsU2VydmljZSwgUGFuRW5kT3V0cHV0IH0gZnJvbSAnLi9jYXJvdXNlbC5zZXJ2aWNlJztcblxuLyoqIFBhZ2UgbGltaXQgdG8gc3dpdGNoIHRvIG51bWVyaWNhbCBpbmRpY2F0b3IgKi9cbmNvbnN0IElDT05fUEFHRV9JTkRJQ0FUT1JfTElNSVQgPSA4O1xuXG5leHBvcnQgdHlwZSBQYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uID0gJ2JvdHRvbScgfCAndG9wJztcblxuZXhwb3J0IGVudW0gU2xpZGVEaXJlY3Rpb24ge1xuICAgIE5vbmUsXG4gICAgTkVYVCxcbiAgICBQUkVWSU9VU1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpdHRpbmdTbGlkZXNBbmRXaWR0aCB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBzbGlkZXM6IG51bWJlcjtcbn1cblxubGV0IGNhcm91c2VsQ291bnRlciA9IDA7XG5cbmNsYXNzIENhcm91c2VsQWN0aXZlU2xpZGVzIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYWN0aXZlSXRlbXM6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdLCBwdWJsaWMgcmVhZG9ubHkgc2xpZGVEaXJlY3Rpb246IHN0cmluZykge31cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYXJvdXNlbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJvdXNlbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbQ2Fyb3VzZWxTZXJ2aWNlXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGUud2lkdGhdJzogJ3dpZHRoJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XG4gICAgLyoqIElEIGZvciB0aGUgQ2Fyb3VzZWwuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIGlkID0gYGZkLWNhcm91c2VsLSR7Y2Fyb3VzZWxDb3VudGVyKyt9YDtcblxuICAgIC8qKiBTZXRzIGFyaWEtbGFiZWwgYXR0cmlidXRlIGZvciBjYXJvdXNlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsID0gbnVsbDtcblxuICAgIC8qKiBTZXRzIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIFNldHMgYXJpYS1kZXNjcmliZWRieSBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsICovXG4gICAgQElucHV0KClcbiAgICBhcmlhRGVzY3JpYmVkQnk6IHN0cmluZztcblxuICAgIC8qKiBTZXRzIHBvc2l0aW9uIG9mIHBhZ2UgaW5kaWNhdG9yIGNvbnRhaW5lci4gRGVmYXVsdCBwb3NpdGlvbiBpcyBib3R0b20uICovXG4gICAgQElucHV0KClcbiAgICBwYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uOiBQYWdlSW5kaWNhdG9yc09yaWVudGF0aW9uID0gJ2JvdHRvbSc7XG5cbiAgICAvKiogSGVpZ2h0IGZvciBjYXJvdXNlbCBjb250YWluZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqIFdpZHRoIGZvciBjYXJvdXNlbCBjb250YWluZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIHdpZHRoID0gJzEwMCUnO1xuXG4gICAgLyoqIElmIGNhcm91c2VsIGlzIGluIGNpcmN1bGFyIGxvb3AgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvb3AgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogTGFiZWwgZm9yIGxlZnQgbmF2aWdhdGlvbiBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxlZnROYXZpZ2F0aW9uQnRuTGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogTGFiZWwgZm9yIHJpZ2h0IG5hdmlnYXRpb24gYnV0dG9uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByaWdodE5hdmlnYXRpb25CdG5MYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIFNob3dzL2hpZGVzIG9wdGlvbmFsIG5hdmlnYXRpb24gYnV0dG9uICovXG4gICAgQElucHV0KClcbiAgICBuYXZpZ2F0aW9uID0gdHJ1ZTtcblxuICAgIC8qKiBTaG93IG5hdmlnYXRpb24gYnV0dG9uIGluIHBhZ2UgaW5kaWNhdG9yIGNvbnRhaW5lciBvciBpbnNpZGUgY29udGVudC4gRGVmYXVsdCBpcyBwYWdlIGluZGljYXRvciBjb250YWluZXIgb24gdHJ1ZSB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdG9ySW5QYWdlSW5kaWNhdG9yID0gdHJ1ZTtcblxuICAgIC8qKiBDb252ZXJ0IHRvIE51bWVyaWMgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBASW5wdXQoKVxuICAgIG51bWVyaWNJbmRpY2F0b3IgPSBmYWxzZTtcblxuICAgIC8qKiBTaG93cy9oaWRlcyBvcHRpb25hbCBwYWdlIGluZGljYXRvciBjb250YWluZXIgICovXG4gICAgQElucHV0KClcbiAgICBwYWdlSW5kaWNhdG9yQ29udGFpbmVyID0gdHJ1ZTtcblxuICAgIC8qKiBTaG93cy9oaWRlcyBvcHRpb25hbCBwYWdlIGluZGljYXRvciAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvciA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IEZkQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIGdldCByZXNvdXJjZVN0cmluZ3MoKTogRmRDYXJvdXNlbFJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgc2xpZGluZyBkdXJhdGlvbiBpbiBtaWxsaWUgc2Vjb25kcy4gRGVmYXVsdCBpcyAxNTAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNsaWRlVHJhbnNpdGlvbkR1cmF0aW9uID0gMTUwO1xuXG4gICAgLyoqIElzIHN3aXBlIGVuYWJsZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIHN3aXBlRW5hYmxlZCA9IHRydWU7XG5cbiAgICAvKiogSXMgY2Fyb3VzZWwgaXMgdmVydGljYWwuIERlZmF1bHQgdmFsdWUgaXMgZmFsc2UuICovXG4gICAgQElucHV0KClcbiAgICB2ZXJ0aWNhbCA9IGZhbHNlO1xuXG4gICAgLyoqIE51bWJlciBvZiBpdGVtcyB0byBiZSB2aXNpYmxlIGF0IGEgdGltZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZpc2libGVTbGlkZXNDb3VudCh2YWx1ZTogbnVtYmVyIHwgJ2F1dG8nKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID0gdGhpcy5fZ2V0VmlzaWJsZVNsaWRlc0NvdW50KCk7XG4gICAgfVxuXG4gICAgZ2V0IHZpc2libGVTbGlkZXNDb3VudCgpOiBudW1iZXIgfCAnYXV0bycge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZVNsaWRlc0NvdW50O1xuICAgIH1cblxuICAgIC8qKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgYSBzbGlkZSB0cmFuc2l0aW9uIGhhcyBoYXBwZW5lZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNsaWRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Q2Fyb3VzZWxBY3RpdmVTbGlkZXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJvdXNlbEFjdGl2ZVNsaWRlcz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihDYXJvdXNlbEl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBzbGlkZXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbEl0ZW1Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdzbGlkZUNvbnRhaW5lcicpXG4gICAgc2xpZGVDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQ2Fyb3VzZWwgY29udGFpbmVyIGVsZW1lbnQuICovXG4gICAgQFZpZXdDaGlsZCgnY2Fyb3VzZWxDb250YWluZXInKVxuICAgIGNhcm91c2VsQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gU3RhcnQgaW5kZXggb2YgY3VycmVudGx5IGFjdGl2ZSBpdGVtcyAqL1xuICAgIGN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIGhhbmRsZXMgcnRsIHNlcnZpY2UgKi9cbiAgICBkaXI6IERpcmVjdGlvbiA9ICdsdHInO1xuXG4gICAgLyoqIEBoaWRkZW4gTWFrZSBsZWZ0IG5hdmlnYXRpb24gYnV0dG9uIGRpc2FibGVkICovXG4gICAgbGVmdEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBNYWtlIHJpZ2h0IG5hdmlnYXRpb24gYnV0dG9uIGRpc2FibGVkICovXG4gICAgcmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gRmFrZSBhcnJheSBmb3IgY291bnRpbmcgbnVtYmVyIG9mIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgcGFnZUluZGljYXRvcnNDb3VudEFycmF5OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2xpZGVzV3JhcHBlclNpemUgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2NvbnRlbnRTaXplUHgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NsaWRlc1dyYXBwZXJTaXplID8gYCR7dGhpcy5fc2xpZGVzV3JhcHBlclNpemV9cHhgIDogdGhpcy53aWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Zpc2libGVTbGlkZXNDb3VudDogbnVtYmVyIHwgJ2F1dG8nID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IENhcm91c2VsUmVzb3VyY2VTdHJpbmdzRU47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbmZpZzogQ2Fyb3VzZWxDb25maWcgPSB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2xpZGVzQ29weTogQ2Fyb3VzZWxJdGVtQ29tcG9uZW50W10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2xpZGVTd2lwZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZykgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2Nhcm91c2VsU2VydmljZTogQ2Fyb3VzZWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF96b25lOiBOZ1pvbmUsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb1J0bCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBPbiBjYXJvdXNlbCBsb2FkLCBkaXNwbGF5IGZpcnN0IHNsaWRlICsgbnVtYmVyIG9mIHNsaWRlIHZpc2libGVcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9IDA7XG5cbiAgICAgICAgLy8gQ2hhbmdlIHBhZ2luYXRpb24gZGlzcGxheSB0byBudW1lcmljLCBpZiBpdGVtIGNvdW50IGlzIG1vcmUgdGhhbiA4XG4gICAgICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPiBJQ09OX1BBR0VfSU5ESUNBVE9SX0xJTUlUKSB7XG4gICAgICAgICAgICB0aGlzLm51bWVyaWNJbmRpY2F0b3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2xpZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDYXJvdXNlbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBzd2lwZSB3aGVuIHRoZXJlIGlzIG5vIGNhcm91c2VsIGl0ZW1cbiAgICAgICAgICAgIHRoaXMuc3dpcGVFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEtlZXAgY29weSBvZiBvcmlnaW5hbCBzbGlkZSBhcnJheSwgZm9yIGluZGljYXRvciBwdXJwb3NlLlxuICAgICAgICAvLyBJbiBjYXNlIG9mIGxvb3BlZCBjYXJvdXNlbCwgb3JpZ2luYWwgc2xpZGVzIGFycmF5IGNoYW5nZXMuXG4gICAgICAgIHRoaXMuX3NsaWRlc0NvcHkgPSB0aGlzLnNsaWRlcy50b0FycmF5KCk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlU2VydmljZUV2ZW50cygpO1xuXG4gICAgICAgIC8vIFN1YnNjcmliZSB0byBkeW5hbWljIHVwZGF0ZSBvZiBzbGlkZXNcbiAgICAgICAgdGhpcy5zbGlkZXMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX29uU2xpZGVVcGRhdGVzKCkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplU2VydmljZUNvbmZpZygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaW5pdGlhbGlzZSh0aGlzLl9jb25maWcsIHRoaXMuc2xpZGVzLCB0aGlzLnNsaWRlQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50O1xuXG4gICAgICAgIHRoaXMuX3Jlc2l6ZUNvbnRlbnRDb250YWluZXIoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzVmlzaWJsZVNsaWRlc0NvdW50ICYmIHRoaXMuX3ByZXZpb3VzVmlzaWJsZVNsaWRlc0NvdW50ICE9PSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50KSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ2Fyb3VzZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVTZXJ2aWNlQ29uZmlnKCk7XG4gICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UudXBkYXRlQ29uZmlnKHRoaXMuX2NvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudCA9IHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQ7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdG9ySW5QYWdlSW5kaWNhdG9yICYmIHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCA+IDE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5Db250ZW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMubmF2aWdhdG9ySW5QYWdlSW5kaWNhdG9yICYmIHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCA+IDE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3Nob3dQYWdlSW5kaWNhdG9yQ29udGFpbmVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlSW5kaWNhdG9yQ29udGFpbmVyICYmICh0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggPiAwIHx8IHRoaXMubnVtZXJpY0luZGljYXRvcik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgZ2V0UGFnZUluZGljYXRvckxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgMX0gJHt0aGlzLnJlc291cmNlU3RyaW5ncy5mZF9jYXJvdXNlbF9vZn0gJHtcbiAgICAgICAgICAgIHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aFxuICAgICAgICB9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBzY3JlZW5SZWFkZXJMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5yZXNvdXJjZVN0cmluZ3MuZmRfY2Fyb3VzZWxfcmVhZGVyfSAke3RoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyAxfSAke1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVN0cmluZ3MuZmRfY2Fyb3VzZWxfb2ZcbiAgICAgICAgfSAke3RoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aH1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2ZvY3VzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGVsICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBlbC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogZ2V0IHZhbHVlIGZvciBydGwgKi9cbiAgICBfaXNSdGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dyaWdodCcsIFsnJGV2ZW50J10pXG4gICAgb25LZXlkb3duQXJyb3dSaWdodChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9pc1J0bCgpID8gdGhpcy5wcmV2aW91cygpIDogdGhpcy5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93bGVmdCcsIFsnJGV2ZW50J10pXG4gICAgb25LZXlkb3duQXJyb3dMZWZ0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2lzUnRsKCkgPyB0aGlzLm5leHQoKSA6IHRoaXMucHJldmlvdXMoKTtcbiAgICB9XG5cbiAgICAvKiogVHJhbnNpdGlvbnMgdG8gdGhlIHByZXZpb3VzIHNsaWRlIGluIHRoZSBjYXJvdXNlbC4gKi9cbiAgICBwcmV2aW91cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvb3AgJiYgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FkanVzdEFjdGl2ZUl0ZW1Qb3NpdGlvbihTbGlkZURpcmVjdGlvbi5QUkVWSU9VUyk7XG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0QnRuRm9jdXMoKTtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLnBpY2tQcmV2aW91cygpO1xuXG4gICAgICAgIHRoaXMuX25vdGlmeVNsaWRlQ2hhbmdlKFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBzbGlkZSBpbiB0aGUgY2Fyb3VzZWwuICovXG4gICAgbmV4dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvb3AgJiYgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA+PSB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNb3ZpbmcgdG8gbmV4dCBzbGlkZVxuICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hZGp1c3RBY3RpdmVJdGVtUG9zaXRpb24oU2xpZGVEaXJlY3Rpb24uTkVYVCk7XG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0QnRuRm9jdXMoKTtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLnBpY2tOZXh0KCk7XG4gICAgICAgIHRoaXMuX25vdGlmeVNsaWRlQ2hhbmdlKFNsaWRlRGlyZWN0aW9uLk5FWFQpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU3Vic2NyaWJlIHRvIGNhcm91c2VsIHNlcnZpY2UgZXZlbnRzICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlU2VydmljZUV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZUNoYW5nZSQuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5fb25TbGlkZVN3aXBlKGV2ZW50KSk7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5kcmFnU3RhdGVDaGFuZ2UkLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuX29uU2xpZGVEcmFnKGV2ZW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBQcmV2ZW50IG5hdGl2ZSBmb2N1cyBmbG93IHJlbGF0ZWQgdG8gYnV0dG9uLCBpZiBidXR0b24gd2lsbCBiZSBkaXNhYmxlIG9uIGZvY3VzIHN0YXRlLlxuICAgICAqIEl0IHdvcmtzIG9ubHkgaWYgY2Fyb3VzZWwgaXMgbm90IGluIGNpcmN1bGFyIGxvb3AuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcHJldmVudERlZmF1bHRCdG5Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwO1xuICAgICAgICBjb25zdCBpc0xhc3QgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggLSAxO1xuICAgICAgICBpZiAoaXNGaXJzdCB8fCBpc0xhc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBBZGp1c3QgcG9zaXRpb24gb2YgYWN0aXZlIGl0ZW0sIGJhc2VkIG9uIHNsaWRlIGRpcmVjdGlvbiAqL1xuICAgIHByaXZhdGUgX2FkanVzdEFjdGl2ZUl0ZW1Qb3NpdGlvbihzbGlkZURpcmVjdGlvbjogU2xpZGVEaXJlY3Rpb24sIHN0ZXA6IG51bWJlciA9IDEpOiB2b2lkIHtcbiAgICAgICAgLy8gTW92ZSBvbmUgc3RlcCBpbiB0aGUgZGlyZWN0aW9uXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uQWRqdXN0bWVudCA9IHNsaWRlRGlyZWN0aW9uID09PSBTbGlkZURpcmVjdGlvbi5ORVhUID8gc3RlcCA6IC1zdGVwO1xuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHBvc2l0aW9uQWRqdXN0bWVudDtcblxuICAgICAgICAvLyBJZiBjYXJvdXNlbCBzZXQgdG8gbG9vcFxuICAgICAgICBpZiAodGhpcy5sb29wKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5zbGlkZXMubGVuZ3RoICsgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA+PSB0aGlzLnNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCAlIHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2J1dHRvblZpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZXMgbmF2aWdhdGlvbiBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHByaXZhdGUgX2J1dHRvblZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sb29wKSB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGRpc2FibGUgbmF2aWdhdGlvbiBidXR0b24gaWYgZWl0aGVyIGRpcmVjdGlvbiBsaW1pdCBoYXMgcmVhY2hlZC5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggLSAxID09PSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID4gMSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID49IHRoaXMuc2xpZGVzLmxlbmd0aFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlIHdoZW4gc2xpZGUgaXMgYWRkZWQgb3IgcmVtb3ZlZCAqL1xuICAgIHByaXZhdGUgX29uU2xpZGVVcGRhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zbGlkZXNDb3B5ID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmluaXRpYWxpc2UodGhpcy5fY29uZmlnLCB0aGlzLnNsaWRlcywgdGhpcy5zbGlkZUNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zbGlkZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGVZKDBweCknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlWCgwcHgpJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBJbml0aWFsaXplIGNhcm91c2VsIHdpdGggdmlzaWJsZSBpdGVtcyAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVDYXJvdXNlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEhhbmRsZXMgbmF2aWdhdG9yIGJ1dHRvbiBlbmFibGVkL2Rpc2FibGVkIHN0YXRlXG4gICAgICAgICAgICB0aGlzLl9idXR0b25WaXNpYmlsaXR5KCk7XG5cbiAgICAgICAgICAgIGxldCBhcnJheUxlbmd0aDogbnVtYmVyO1xuICAgICAgICAgICAgLy8gc2V0IHBhZ2UgaW5kaWNhdG9yIGNvdW50IHdpdGggZmFrZSBhcnJheSwgdG8gdXNlIGluIHRlbXBsYXRlXG4gICAgICAgICAgICBpZiAodGhpcy5sb29wICYmIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgbG9vcCB3aXRoIG11bHRpIGl0ZW0gdmlzaWJsZS5cbiAgICAgICAgICAgICAgICBhcnJheUxlbmd0aCA9IHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlMZW5ndGggPSB0aGlzLnNsaWRlcy5sZW5ndGggLSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ICsgMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFnZUluZGljYXRvcnNJZlplcm9Db3VudCA9IHRoaXMuc2xpZGVzLmxlbmd0aCA9PT0gMCA/IDAgOiAxO1xuXG4gICAgICAgICAgICB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheSA9IG5ldyBBcnJheShhcnJheUxlbmd0aCA+IDAgPyBhcnJheUxlbmd0aCA6IHBhZ2VJbmRpY2F0b3JzSWZaZXJvQ291bnQpO1xuXG4gICAgICAgICAgICB0aGlzLl9nb1RvRmlyc3RJdGVtKCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goKF9zbGlkZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID49IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPCB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBfc2xpZGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc2xpZGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ29Ub0ZpcnN0SXRlbSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuY3VycmVudFRyYW5zaXRpb25QeCAhPT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5zbGlkZXMubGVuZ3RoID4gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmdvVG9JdGVtKHRoaXMuc2xpZGVzLmZpcnN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEluaXRpYWxpemUgY29uZmlnIGZvciBDYXJvdXNlbCBzZXJ2aWNlICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZVNlcnZpY2VDb25maWcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmZpZy52ZXJ0aWNhbCA9IHRoaXMudmVydGljYWw7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5lbGVtZW50c0F0T25jZSA9IHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQ7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5nZXN0dXJlU3VwcG9ydCA9IHRoaXMuc3dpcGVFbmFibGVkO1xuICAgICAgICB0aGlzLl9jb25maWcuaW5maW5pdGUgPSB0aGlzLmxvb3A7XG4gICAgICAgIHRoaXMuX2NvbmZpZy50cmFuc2l0aW9uID0gU3RyaW5nKHRoaXMuc2xpZGVUcmFuc2l0aW9uRHVyYXRpb24pICsgJ21zJztcbiAgICAgICAgLy8gQ2Fyb3VzZWwgc2VydmljZSBleHBlY3RzIHRyYW5zaXRpb24gaW4gc3RyaW5nIGZvcm1hdCB3aXRoIHVuaXQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBSZXR1cm5zIHRoZSBzbGlkZSBzd2FwcGluZyBzdGVwc1xuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFN0ZXBUYWtlbihldmVudDogUGFuRW5kT3V0cHV0LCBhY3R1YWxBY3RpdmVTbGlkZUluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgc3RlcHNDYWxjdWxhdGVkOiBudW1iZXI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICghdGhpcy5faXNSdGwoKSAmJiBldmVudC5hZnRlcikgfHxcbiAgICAgICAgICAgICh0aGlzLl9pc1J0bCgpICYmICFldmVudC5hZnRlciAmJiAhdGhpcy52ZXJ0aWNhbCkgfHxcbiAgICAgICAgICAgICh0aGlzLnZlcnRpY2FsICYmIGV2ZW50LmFmdGVyKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID09PSAwICYmIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID4gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXggLSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSB0aGlzLnNsaWRlcy5sZW5ndGggLSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgYWN0dWFsQWN0aXZlU2xpZGVJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSwgd2hlbiBmaXJzdCBsZWZ0IHN3aXBlIGJlZm9yZSBzbGlkZXMgYXJlIHJvdGF0ZWQgaW4gY2Fyb3VzZWwgc2VydmljZVxuICAgICAgICAgICAgaWYgKGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXggPT09IDAgJiYgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXggPCB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCAtIGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyB0aGlzLnNsaWRlcy5sZW5ndGggLSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGVwc0NhbGN1bGF0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlcyBub3RpZmljYXRpb24gb24gdmlzaWJsZSBzbGlkZSBjaGFuZ2UgKi9cbiAgICBwcml2YXRlIF9ub3RpZnlTbGlkZUNoYW5nZShzbGlkZURpcmVjdGlvbjogU2xpZGVEaXJlY3Rpb24sIGZpcnN0QWN0aXZlU2xpZGU/OiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2UgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVNsaWRlczogQ2Fyb3VzZWxJdGVtQ29tcG9uZW50W10gPSBbXTtcbiAgICAgICAgbGV0IGZpcnN0QWN0aXZlU2xpZGVJbmRleDogbnVtYmVyO1xuXG4gICAgICAgIGlmICh0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgIGZpcnN0QWN0aXZlU2xpZGUgPSB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0QWN0aXZlU2xpZGUpIHtcbiAgICAgICAgICAgIGZpcnN0QWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgYWN0aXZlU2xpZGVJbmRleCA9IDA7IGFjdGl2ZVNsaWRlSW5kZXggPCB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50OyBhY3RpdmVTbGlkZUluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZmlyc3RBY3RpdmVTbGlkZUluZGV4ICsgYWN0aXZlU2xpZGVJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHNsaWRlID0gdGhpcy5zbGlkZXMuZ2V0KGluZGV4KTtcbiAgICAgICAgICAgIGlmIChzbGlkZSkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgICAgICAgICAgICBzbGlkZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWFuYWdlU2xpZGVWaXNpYmlsaXR5KGZpcnN0QWN0aXZlU2xpZGVJbmRleCk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNsaWRlRGlyZWN0aW9uID09PSBTbGlkZURpcmVjdGlvbi5ORVhUID8gJ05leHQnIDogJ1ByZXZpb3VzJztcbiAgICAgICAgdGhpcy5zbGlkZUNoYW5nZS5lbWl0KG5ldyBDYXJvdXNlbEFjdGl2ZVNsaWRlcyhhY3RpdmVTbGlkZXMsIGRpcmVjdGlvbikpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE1hbmFnZXMgdmlzaWJpbGl0eSBmb3Igc2xpZGVzLiBVc2VmdWwgaW4gbWFuYWdpbmcgdGFiIG9yZGVyICovXG4gICAgcHJpdmF0ZSBfbWFuYWdlU2xpZGVWaXNpYmlsaXR5KGZpcnN0QWN0aXZlU2xpZGVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoX3NsaWRlcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gZmlyc3RBY3RpdmVTbGlkZUluZGV4ICYmIGluZGV4IDwgZmlyc3RBY3RpdmVTbGlkZUluZGV4ICsgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3NsaWRlcy52aXNpYmlsaXR5ID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3NsaWRlcy52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9zbGlkZXMudmlzaWJpbGl0eSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfc2xpZGVzLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0sIHRoaXMuc2xpZGVUcmFuc2l0aW9uRHVyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJ0bCBjaGFuZ2Ugc3Vic2NyaXB0aW9uICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9SdGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hEaXJlY3Rpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpciA9IHRoaXMuX2lzUnRsKCkgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmlzUnRsID0gdGhpcy5kaXIgPT09ICdydGwnO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLml0ZW1zICYmIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuZ29Ub0l0ZW0odGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgICAgICByZWZyZXNoRGlyZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHJlZnJlc2hEaXJlY3Rpb24oKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gT24gU3dpcGluZyBvZiBzbGlkZSwgbWFuYWdlIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZVN3aXBlKGV2ZW50OiBQYW5FbmRPdXRwdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2xpZGVTd2lwZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaXJzdEFjdGl2ZVNsaWRlID0gZXZlbnQuaXRlbTtcbiAgICAgICAgY29uc3QgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuX3NsaWRlc0NvcHkuZmluZEluZGV4KChfc2xpZGUpID0+IF9zbGlkZSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIGNvbnN0IHN0ZXBUYWtlbiA9IHRoaXMuX2dldFN0ZXBUYWtlbihldmVudCwgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCk7XG4gICAgICAgIGlmIChzdGVwVGFrZW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgc2xpZGVEaXJlY3Rpb246IFNsaWRlRGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1J0bCgpKSB7XG4gICAgICAgICAgICAgICAgc2xpZGVEaXJlY3Rpb24gPSBldmVudC5hZnRlciA/IFNsaWRlRGlyZWN0aW9uLk5FWFQgOiBTbGlkZURpcmVjdGlvbi5QUkVWSU9VUztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdmVydGljYWwgY2Fyb3VzZWwgc2xpZGUgZGlyZWN0aW9uIGlzIHNhbWUgaW4gbHRyIGFuZCBydGxcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZURpcmVjdGlvbiA9IGV2ZW50LmFmdGVyID8gU2xpZGVEaXJlY3Rpb24uTkVYVCA6IFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlRGlyZWN0aW9uID0gZXZlbnQuYWZ0ZXIgPyBTbGlkZURpcmVjdGlvbi5QUkVWSU9VUyA6IFNsaWRlRGlyZWN0aW9uLk5FWFQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKHNsaWRlRGlyZWN0aW9uLCBzdGVwVGFrZW4pO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2Uoc2xpZGVEaXJlY3Rpb24sIGZpcnN0QWN0aXZlU2xpZGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBNYWtpbmcgc2xpZGVzIHZpc2libGUgd2hlbiBzbGlkZXMgYXJlIGRyYWdnZWQuIE90aGVyd2lzZSwgaXQgbG9vc2VzIHRoZSBlZmZlY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZURyYWcoaXNEcmFnZ2luZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNEcmFnZ2luZykge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoX3NsaWRlKSA9PiB7XG4gICAgICAgICAgICAgICAgX3NsaWRlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3NsaWRlU3dpcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmdGVyIHNsaWRlIGxpbWl0IHJlYWNoZWQsIGlmIGRyYWdnaW5nIHN0YXJ0cyB0aGVuIHJldmVydCB2aXNpYmlsaXR5XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NsaWRlU3dpcGVkICYmICF0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VTbGlkZVZpc2liaWxpdHkodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVzaXplcyBpbm5lciBjYXJvdXNlbCBjb250YWluZXIgdG8gZml0IGFsbCBpdGVtcyBpbiB0aGUgdmlld3BvcnQgYW5kIGhpZGUgdGhvc2Ugd2hpY2ggYXJlIG5vdCBmdWxseSBpbiBpdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZXNpemVDb250ZW50Q29udGFpbmVyKCk6IHZvaWQge1xuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5zbGlkZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50KSxcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5jYXJvdXNlbENvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxuICAgICAgICApXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgc2xpZGVzIH0gPSB0aGlzLl9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGVTbGlkZXNDb3VudCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPSBzbGlkZXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsU2xpZGVzID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZWVkbGVTbGlkZUluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbW91bnQgb2Ygc2xpZGVzIGluc3VmZmljaWVudCB0byBmaWxsIHdob2xlIGNhcm91c2VsLCBzbGlkZSBiYWNrIGEgYml0LlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHNsaWRlcyA+IHRvdGFsU2xpZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkbGVTbGlkZUluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHNsaWRlcyAtIHRvdGFsU2xpZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWRsZVNsaWRlID0gdGhpcy5zbGlkZXMuZ2V0KG5lZWRsZVNsaWRlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSBuZWVkbGVTbGlkZUluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUgPSBuZWVkbGVTbGlkZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIGNhcm91c2VsIGNvbmZpZyBhbmQgdHJhbnNpdGlvbiB0byB0aGUgY3VycmVudCBzbGlkZS5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbmVlZGxlU2xpZGUgJiYgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmdvVG9JdGVtKG5lZWRsZVNsaWRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uTm9uZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NsaWRlc1dyYXBwZXJTaXplICE9PSB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zbGlkZXNXcmFwcGVyU2l6ZSA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxjdWxhdGVzIGhvdyBtYW55IHNsaWRlcyBjYW4gYmUgc2hvd24gd2l0aGluIGN1cnJlbnQgY2Fyb3VzZWwgdmlld3BvcnQuXG4gICAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgZml0dGluZyBzbGlkZXMgY291bnQgYW5kIHRvdGFsIHdpZHRoIG9mIHRob3NlIHNsaWRlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTogRml0dGluZ1NsaWRlc0FuZFdpZHRoIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhcm91c2VsQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIHNsaWRlczogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuY2Fyb3VzZWxDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgbGV0IG1heFNpemUgPSAwO1xuICAgICAgICBsZXQgc2xpZGVzQ291bnQgPSAwO1xuXG4gICAgICAgIGNvbnN0IGNhcm91c2VsU2xpZGVzID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICBjb25zdCBwcmV2aW91c1NsaWRlcyA9IGNhcm91c2VsU2xpZGVzLnNwbGljZSgwLCB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KTtcblxuICAgICAgICBjb25zdCBnZXRTbGlkZXMgPSAoc2xpZGVzOiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzbGlkZSBvZiBzbGlkZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gc2xpZGUuZ2V0V2lkdGgoKTtcblxuICAgICAgICAgICAgICAgIGlmICghc2xpZGVXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTaXplID0gbWF4U2l6ZSArIHNsaWRlV2lkdGg7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV3U2l6ZSA+IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG1heFNpemUgPSBuZXdTaXplO1xuICAgICAgICAgICAgICAgIHNsaWRlc0NvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZ2V0U2xpZGVzKGNhcm91c2VsU2xpZGVzKTtcblxuICAgICAgICAvLyBJZiB3aXRoIG9mIHRoZSByZXN0IG9mIHRoZSBzbGlkZXMgaXMgbGVzc2VyIHRoYW4gY2Fyb3VzZSdzIHZpZXdwb3J0LCBhZGQgcHJldmlvdXMgc2xpZGVzIHRvIGl0LlxuICAgICAgICBpZiAobWF4U2l6ZSA8IHdpZHRoKSB7XG4gICAgICAgICAgICBnZXRTbGlkZXMocHJldmlvdXNTbGlkZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiBtYXhTaXplLFxuICAgICAgICAgICAgc2xpZGVzOiBzbGlkZXNDb3VudFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmlzaWJsZVNsaWRlc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl92aXNpYmxlU2xpZGVzQ291bnQgIT09ICdhdXRvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc2xpZGVzIH0gPSB0aGlzLl9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTtcbiAgICAgICAgcmV0dXJuIHNsaWRlcztcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmZC1jYXJvdXNlbFwiXG4gICAgW2NsYXNzLmZkLWNhcm91c2VsLS1uby1uYXZpZ2F0aW9uXT1cIiFuYXZpZ2F0aW9uXCJcbiAgICBkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcbiAgICBbYXR0ci5kaXJdPVwiZGlyXCJcbiAgICByb2xlPVwicmVnaW9uXCJcbiAgICAjY2Fyb3VzZWxDb250YWluZXJcbiAgICAoY2xpY2spPVwiX2ZvY3VzKClcIlxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgcGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9PT0gJ3RvcCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VJbmRpY2F0b3JDb250YWluZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fY29udGVudFwiXG4gICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fY29udGVudC0taG9yaXpvbnRhbF09XCIhdmVydGljYWxcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiX2NvbnRlbnRTaXplUHhcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluQ29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkxlZnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiAjc2xpZGVDb250YWluZXIgY2xhc3M9XCJmZC1jYXJvdXNlbF9fc2xpZGVzXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgcGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9PT0gJ2JvdHRvbSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VJbmRpY2F0b3JDb250YWluZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgcm9sZT1cInJlZ2lvblwiIFthdHRyLmlkXT1cImlkICsgJy1hY2Nlc3NpYmlsaXR5J1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGRpcj1cImx0clwiPlxuICAgICAgICB7eyBzY3JlZW5SZWFkZXJMYWJlbCB9fVxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZUluZGljYXRvckNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uTGVmdFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnZUluZGljYXRvcnNcIj4gPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblJpZ2h0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwYWdlSW5kaWNhdG9ycz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibnVtZXJpY0luZGljYXRvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VJbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3RleHRcIiBkaXI9XCJsdHJcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0UGFnZUluZGljYXRvckxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFudW1lcmljSW5kaWNhdG9yICYmIF9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICA8b2wgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JzXCIgW2F0dHIuZGlyXT1cImRpclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VJbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtc2xpZGUtdG9dPVwiaSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvci0tYWN0aXZlXT1cImkgPT09IGN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGk+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9vbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uTGVmdD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBjbGFzcz1cImZkLWNhcm91c2VsX19idXR0b24gZmQtY2Fyb3VzZWxfX2J1dHRvbi0tbGVmdFwiXG4gICAgICAgIFtzdHlsZS56LWluZGV4XT1cIjFcIlxuICAgICAgICBkYXRhLXNsaWRlPVwicHJldmlvdXNcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxlZnROYXZpZ2F0aW9uQnRuTGFiZWwgfHwgKCdjb3JlQ2Fyb3VzZWwubGVmdE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAoY2xpY2spPVwicHJldmlvdXMoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxlZnRCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cImxlZnROYXZpZ2F0aW9uQnRuTGFiZWwgfHwgKCdjb3JlQ2Fyb3VzZWwubGVmdE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICBnbHlwaD1cInNsaW0tYXJyb3ctbGVmdFwiXG4gICAgPjwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25SaWdodD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBjbGFzcz1cImZkLWNhcm91c2VsX19idXR0b24gZmQtY2Fyb3VzZWxfX2J1dHRvbi0tcmlnaHRcIlxuICAgICAgICBbc3R5bGUuei1pbmRleF09XCIxXCJcbiAgICAgICAgZGF0YS1zbGlkZT1cIm5leHRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsIHx8ICgnY29yZUNhcm91c2VsLnJpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgIChjbGljayk9XCJuZXh0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyaWdodEJ1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwicmlnaHROYXZpZ2F0aW9uQnRuTGFiZWwgfHwgKCdjb3JlQ2Fyb3VzZWwucmlnaHROYXZpZ2F0aW9uQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LXJpZ2h0XCJcbiAgICA+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19