@fundamental-ngx/core 0.58.2-rc.0 → 0.58.2

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 (297) hide show
  1. package/fesm2022/fundamental-ngx-core-action-bar.mjs +26 -26
  2. package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
  3. package/fesm2022/fundamental-ngx-core-action-sheet.mjs +20 -20
  4. package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
  5. package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs +28 -28
  6. package/fesm2022/fundamental-ngx-core-avatar-group-legacy.mjs.map +1 -1
  7. package/fesm2022/fundamental-ngx-core-avatar-group.mjs +34 -34
  8. package/fesm2022/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  9. package/fesm2022/fundamental-ngx-core-avatar.mjs +10 -10
  10. package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
  11. package/fesm2022/fundamental-ngx-core-bar.mjs +25 -25
  12. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  13. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +10 -10
  14. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  15. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs +15 -15
  16. package/fesm2022/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  17. package/fesm2022/fundamental-ngx-core-button.mjs +15 -15
  18. package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
  19. package/fesm2022/fundamental-ngx-core-calendar.mjs +40 -40
  20. package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
  21. package/fesm2022/fundamental-ngx-core-card.mjs +130 -126
  22. package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
  23. package/fesm2022/fundamental-ngx-core-carousel.mjs +19 -19
  24. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  25. package/fesm2022/fundamental-ngx-core-checkbox.mjs +7 -7
  26. package/fesm2022/fundamental-ngx-core-checkbox.mjs.map +1 -1
  27. package/fesm2022/fundamental-ngx-core-combobox.mjs +16 -16
  28. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-core-content-density.mjs +25 -25
  30. package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
  31. package/fesm2022/fundamental-ngx-core-date-picker.mjs +13 -13
  32. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +13 -13
  34. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-core-datetime.mjs +30 -30
  36. package/fesm2022/fundamental-ngx-core-datetime.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-core-dialog.mjs +64 -64
  38. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs +52 -52
  40. package/fesm2022/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs +13 -13
  42. package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
  43. package/fesm2022/fundamental-ngx-core-facets.mjs +17 -17
  44. package/fesm2022/fundamental-ngx-core-facets.mjs.map +1 -1
  45. package/fesm2022/fundamental-ngx-core-feed-input.mjs +17 -17
  46. package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +22 -22
  48. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-core-file-uploader.mjs +16 -16
  50. package/fesm2022/fundamental-ngx-core-file-uploader.mjs.map +1 -1
  51. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs +13 -13
  52. package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  53. package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs +7 -7
  54. package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs.map +1 -1
  55. package/fesm2022/fundamental-ngx-core-form.mjs +70 -70
  56. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  57. package/fesm2022/fundamental-ngx-core-formatted-text.mjs +8 -8
  58. package/fesm2022/fundamental-ngx-core-formatted-text.mjs.map +1 -1
  59. package/fesm2022/fundamental-ngx-core-generic-tag.mjs +7 -7
  60. package/fesm2022/fundamental-ngx-core-generic-tag.mjs.map +1 -1
  61. package/fesm2022/fundamental-ngx-core-grid-list.mjs +47 -47
  62. package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
  63. package/fesm2022/fundamental-ngx-core-icon.mjs +8 -8
  64. package/fesm2022/fundamental-ngx-core-icon.mjs.map +1 -1
  65. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs +19 -19
  66. package/fesm2022/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
  67. package/fesm2022/fundamental-ngx-core-infinite-scroll.mjs +10 -8
  68. package/fesm2022/fundamental-ngx-core-infinite-scroll.mjs.map +1 -1
  69. package/fesm2022/fundamental-ngx-core-info-label.mjs +7 -7
  70. package/fesm2022/fundamental-ngx-core-info-label.mjs.map +1 -1
  71. package/fesm2022/fundamental-ngx-core-inline-help.mjs +7 -7
  72. package/fesm2022/fundamental-ngx-core-inline-help.mjs.map +1 -1
  73. package/fesm2022/fundamental-ngx-core-input-group.mjs +19 -19
  74. package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
  75. package/fesm2022/fundamental-ngx-core-layout-grid.mjs +17 -17
  76. package/fesm2022/fundamental-ngx-core-layout-grid.mjs.map +1 -1
  77. package/fesm2022/fundamental-ngx-core-layout-panel.mjs +31 -31
  78. package/fesm2022/fundamental-ngx-core-layout-panel.mjs.map +1 -1
  79. package/fesm2022/fundamental-ngx-core-link.mjs +7 -7
  80. package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
  81. package/fesm2022/fundamental-ngx-core-list.mjs +80 -80
  82. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  83. package/fesm2022/fundamental-ngx-core-menu.mjs +58 -56
  84. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  85. package/fesm2022/fundamental-ngx-core-message-box.mjs +37 -37
  86. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-core-message-page.mjs +19 -19
  88. package/fesm2022/fundamental-ngx-core-message-page.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-core-message-strip.mjs +25 -25
  90. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-message-toast.mjs +17 -17
  92. package/fesm2022/fundamental-ngx-core-message-toast.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +19 -19
  94. package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-core-mobile-mode.mjs +3 -3
  96. package/fesm2022/fundamental-ngx-core-mobile-mode.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +22 -22
  98. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  99. package/fesm2022/fundamental-ngx-core-multi-input.mjs +15 -15
  100. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  101. package/fesm2022/fundamental-ngx-core-nested-list.mjs +40 -40
  102. package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
  103. package/fesm2022/fundamental-ngx-core-notification.mjs +88 -88
  104. package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
  105. package/fesm2022/fundamental-ngx-core-object-attribute.mjs +7 -7
  106. package/fesm2022/fundamental-ngx-core-object-attribute.mjs.map +1 -1
  107. package/fesm2022/fundamental-ngx-core-object-identifier.mjs +11 -11
  108. package/fesm2022/fundamental-ngx-core-object-identifier.mjs.map +1 -1
  109. package/fesm2022/fundamental-ngx-core-object-marker.mjs +7 -7
  110. package/fesm2022/fundamental-ngx-core-object-marker.mjs.map +1 -1
  111. package/fesm2022/fundamental-ngx-core-object-number.mjs +7 -7
  112. package/fesm2022/fundamental-ngx-core-object-number.mjs.map +1 -1
  113. package/fesm2022/fundamental-ngx-core-object-status.mjs +7 -7
  114. package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
  115. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +31 -31
  116. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  117. package/fesm2022/fundamental-ngx-core-pagination.mjs +11 -11
  118. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  119. package/fesm2022/fundamental-ngx-core-panel.mjs +19 -19
  120. package/fesm2022/fundamental-ngx-core-panel.mjs.map +1 -1
  121. package/fesm2022/fundamental-ngx-core-popover.mjs +42 -42
  122. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  123. package/fesm2022/fundamental-ngx-core-product-switch.mjs +13 -13
  124. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  125. package/fesm2022/fundamental-ngx-core-progress-indicator.mjs +7 -7
  126. package/fesm2022/fundamental-ngx-core-progress-indicator.mjs.map +1 -1
  127. package/fesm2022/fundamental-ngx-core-quick-view.mjs +37 -37
  128. package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
  129. package/fesm2022/fundamental-ngx-core-radio.mjs +7 -7
  130. package/fesm2022/fundamental-ngx-core-radio.mjs.map +1 -1
  131. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +10 -10
  132. package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  133. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +10 -10
  134. package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
  135. package/fesm2022/fundamental-ngx-core-scroll-spy.mjs +7 -7
  136. package/fesm2022/fundamental-ngx-core-scroll-spy.mjs.map +1 -1
  137. package/fesm2022/fundamental-ngx-core-scrollbar.mjs +7 -7
  138. package/fesm2022/fundamental-ngx-core-scrollbar.mjs.map +1 -1
  139. package/fesm2022/fundamental-ngx-core-segmented-button.mjs +7 -7
  140. package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  141. package/fesm2022/fundamental-ngx-core-select.mjs +20 -20
  142. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  143. package/fesm2022/fundamental-ngx-core-settings.mjs +52 -52
  144. package/fesm2022/fundamental-ngx-core-settings.mjs.map +1 -1
  145. package/fesm2022/fundamental-ngx-core-shared.mjs +3 -3
  146. package/fesm2022/fundamental-ngx-core-shared.mjs.map +1 -1
  147. package/fesm2022/fundamental-ngx-core-shellbar.mjs +88 -75
  148. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  149. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +13 -13
  150. package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  151. package/fesm2022/fundamental-ngx-core-skeleton.mjs +12 -10
  152. package/fesm2022/fundamental-ngx-core-skeleton.mjs.map +1 -1
  153. package/fesm2022/fundamental-ngx-core-slider.mjs +10 -10
  154. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  155. package/fesm2022/fundamental-ngx-core-split-button.mjs +10 -10
  156. package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
  157. package/fesm2022/fundamental-ngx-core-status-indicator.mjs +7 -7
  158. package/fesm2022/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  159. package/fesm2022/fundamental-ngx-core-step-input.mjs +13 -9
  160. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  161. package/fesm2022/fundamental-ngx-core-switch.mjs +7 -7
  162. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  163. package/fesm2022/fundamental-ngx-core-table.mjs +49 -49
  164. package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
  165. package/fesm2022/fundamental-ngx-core-tabs.mjs +52 -52
  166. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  167. package/fesm2022/fundamental-ngx-core-tests.mjs.map +1 -1
  168. package/fesm2022/fundamental-ngx-core-text.mjs +8 -8
  169. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  170. package/fesm2022/fundamental-ngx-core-theming.mjs +7 -7
  171. package/fesm2022/fundamental-ngx-core-theming.mjs.map +1 -1
  172. package/fesm2022/fundamental-ngx-core-tile.mjs +94 -94
  173. package/fesm2022/fundamental-ngx-core-tile.mjs.map +1 -1
  174. package/fesm2022/fundamental-ngx-core-time-picker.mjs +8 -8
  175. package/fesm2022/fundamental-ngx-core-time-picker.mjs.map +1 -1
  176. package/fesm2022/fundamental-ngx-core-time.mjs +11 -11
  177. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  178. package/fesm2022/fundamental-ngx-core-timeline.mjs +43 -43
  179. package/fesm2022/fundamental-ngx-core-timeline.mjs.map +1 -1
  180. package/fesm2022/fundamental-ngx-core-title.mjs +8 -8
  181. package/fesm2022/fundamental-ngx-core-title.mjs.map +1 -1
  182. package/fesm2022/fundamental-ngx-core-token.mjs +19 -15
  183. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  184. package/fesm2022/fundamental-ngx-core-toolbar.mjs +47 -47
  185. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  186. package/fesm2022/fundamental-ngx-core-tree.mjs +32 -32
  187. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  188. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +37 -37
  189. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  190. package/fesm2022/fundamental-ngx-core-user-menu.mjs +64 -64
  191. package/fesm2022/fundamental-ngx-core-user-menu.mjs.map +1 -1
  192. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +13 -13
  193. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
  194. package/fesm2022/fundamental-ngx-core-wizard.mjs +28 -28
  195. package/fesm2022/fundamental-ngx-core-wizard.mjs.map +1 -1
  196. package/fesm2022/fundamental-ngx-core.mjs +4 -4
  197. package/fesm2022/fundamental-ngx-core.mjs.map +1 -1
  198. package/package.json +113 -113
  199. package/{types/fundamental-ngx-core-shellbar.d.ts → shellbar/index.d.ts} +21 -13
  200. package/{types/fundamental-ngx-core-toolbar.d.ts → toolbar/index.d.ts} +7 -8
  201. /package/{types/fundamental-ngx-core-action-bar.d.ts → action-bar/index.d.ts} +0 -0
  202. /package/{types/fundamental-ngx-core-action-sheet.d.ts → action-sheet/index.d.ts} +0 -0
  203. /package/{types/fundamental-ngx-core-avatar.d.ts → avatar/index.d.ts} +0 -0
  204. /package/{types/fundamental-ngx-core-avatar-group.d.ts → avatar-group/index.d.ts} +0 -0
  205. /package/{types/fundamental-ngx-core-avatar-group-legacy.d.ts → avatar-group-legacy/index.d.ts} +0 -0
  206. /package/{types/fundamental-ngx-core-bar.d.ts → bar/index.d.ts} +0 -0
  207. /package/{types/fundamental-ngx-core-breadcrumb.d.ts → breadcrumb/index.d.ts} +0 -0
  208. /package/{types/fundamental-ngx-core-busy-indicator.d.ts → busy-indicator/index.d.ts} +0 -0
  209. /package/{types/fundamental-ngx-core-button.d.ts → button/index.d.ts} +0 -0
  210. /package/{types/fundamental-ngx-core-calendar.d.ts → calendar/index.d.ts} +0 -0
  211. /package/{types/fundamental-ngx-core-card.d.ts → card/index.d.ts} +0 -0
  212. /package/{types/fundamental-ngx-core-carousel.d.ts → carousel/index.d.ts} +0 -0
  213. /package/{types/fundamental-ngx-core-checkbox.d.ts → checkbox/index.d.ts} +0 -0
  214. /package/{types/fundamental-ngx-core-combobox.d.ts → combobox/index.d.ts} +0 -0
  215. /package/{types/fundamental-ngx-core-content-density.d.ts → content-density/index.d.ts} +0 -0
  216. /package/{types/fundamental-ngx-core-date-picker.d.ts → date-picker/index.d.ts} +0 -0
  217. /package/{types/fundamental-ngx-core-datetime.d.ts → datetime/index.d.ts} +0 -0
  218. /package/{types/fundamental-ngx-core-datetime-picker.d.ts → datetime-picker/index.d.ts} +0 -0
  219. /package/{types/fundamental-ngx-core-dialog.d.ts → dialog/index.d.ts} +0 -0
  220. /package/{types/fundamental-ngx-core-dynamic-page.d.ts → dynamic-page/index.d.ts} +0 -0
  221. /package/{types/fundamental-ngx-core-dynamic-side-content.d.ts → dynamic-side-content/index.d.ts} +0 -0
  222. /package/{types/fundamental-ngx-core-facets.d.ts → facets/index.d.ts} +0 -0
  223. /package/{types/fundamental-ngx-core-feed-input.d.ts → feed-input/index.d.ts} +0 -0
  224. /package/{types/fundamental-ngx-core-feed-list-item.d.ts → feed-list-item/index.d.ts} +0 -0
  225. /package/{types/fundamental-ngx-core-file-uploader.d.ts → file-uploader/index.d.ts} +0 -0
  226. /package/{types/fundamental-ngx-core-fixed-card-layout.d.ts → fixed-card-layout/index.d.ts} +0 -0
  227. /package/{types/fundamental-ngx-core-flexible-column-layout.d.ts → flexible-column-layout/index.d.ts} +0 -0
  228. /package/{types/fundamental-ngx-core-form.d.ts → form/index.d.ts} +0 -0
  229. /package/{types/fundamental-ngx-core-formatted-text.d.ts → formatted-text/index.d.ts} +0 -0
  230. /package/{types/fundamental-ngx-core-generic-tag.d.ts → generic-tag/index.d.ts} +0 -0
  231. /package/{types/fundamental-ngx-core-grid-list.d.ts → grid-list/index.d.ts} +0 -0
  232. /package/{types/fundamental-ngx-core-icon.d.ts → icon/index.d.ts} +0 -0
  233. /package/{types/fundamental-ngx-core-illustrated-message.d.ts → illustrated-message/index.d.ts} +0 -0
  234. /package/{types/fundamental-ngx-core.d.ts → index.d.ts} +0 -0
  235. /package/{types/fundamental-ngx-core-infinite-scroll.d.ts → infinite-scroll/index.d.ts} +0 -0
  236. /package/{types/fundamental-ngx-core-info-label.d.ts → info-label/index.d.ts} +0 -0
  237. /package/{types/fundamental-ngx-core-inline-help.d.ts → inline-help/index.d.ts} +0 -0
  238. /package/{types/fundamental-ngx-core-input-group.d.ts → input-group/index.d.ts} +0 -0
  239. /package/{types/fundamental-ngx-core-layout-grid.d.ts → layout-grid/index.d.ts} +0 -0
  240. /package/{types/fundamental-ngx-core-layout-panel.d.ts → layout-panel/index.d.ts} +0 -0
  241. /package/{types/fundamental-ngx-core-link.d.ts → link/index.d.ts} +0 -0
  242. /package/{types/fundamental-ngx-core-list.d.ts → list/index.d.ts} +0 -0
  243. /package/{types/fundamental-ngx-core-menu.d.ts → menu/index.d.ts} +0 -0
  244. /package/{types/fundamental-ngx-core-message-box.d.ts → message-box/index.d.ts} +0 -0
  245. /package/{types/fundamental-ngx-core-message-page.d.ts → message-page/index.d.ts} +0 -0
  246. /package/{types/fundamental-ngx-core-message-strip.d.ts → message-strip/index.d.ts} +0 -0
  247. /package/{types/fundamental-ngx-core-message-toast.d.ts → message-toast/index.d.ts} +0 -0
  248. /package/{types/fundamental-ngx-core-micro-process-flow.d.ts → micro-process-flow/index.d.ts} +0 -0
  249. /package/{types/fundamental-ngx-core-mobile-mode.d.ts → mobile-mode/index.d.ts} +0 -0
  250. /package/{types/fundamental-ngx-core-multi-combobox.d.ts → multi-combobox/index.d.ts} +0 -0
  251. /package/{types/fundamental-ngx-core-multi-input.d.ts → multi-input/index.d.ts} +0 -0
  252. /package/{types/fundamental-ngx-core-nested-list.d.ts → nested-list/index.d.ts} +0 -0
  253. /package/{types/fundamental-ngx-core-notification.d.ts → notification/index.d.ts} +0 -0
  254. /package/{types/fundamental-ngx-core-object-attribute.d.ts → object-attribute/index.d.ts} +0 -0
  255. /package/{types/fundamental-ngx-core-object-identifier.d.ts → object-identifier/index.d.ts} +0 -0
  256. /package/{types/fundamental-ngx-core-object-marker.d.ts → object-marker/index.d.ts} +0 -0
  257. /package/{types/fundamental-ngx-core-object-number.d.ts → object-number/index.d.ts} +0 -0
  258. /package/{types/fundamental-ngx-core-object-status.d.ts → object-status/index.d.ts} +0 -0
  259. /package/{types/fundamental-ngx-core-overflow-layout.d.ts → overflow-layout/index.d.ts} +0 -0
  260. /package/{types/fundamental-ngx-core-pagination.d.ts → pagination/index.d.ts} +0 -0
  261. /package/{types/fundamental-ngx-core-panel.d.ts → panel/index.d.ts} +0 -0
  262. /package/{types/fundamental-ngx-core-popover.d.ts → popover/index.d.ts} +0 -0
  263. /package/{types/fundamental-ngx-core-product-switch.d.ts → product-switch/index.d.ts} +0 -0
  264. /package/{types/fundamental-ngx-core-progress-indicator.d.ts → progress-indicator/index.d.ts} +0 -0
  265. /package/{types/fundamental-ngx-core-quick-view.d.ts → quick-view/index.d.ts} +0 -0
  266. /package/{types/fundamental-ngx-core-radio.d.ts → radio/index.d.ts} +0 -0
  267. /package/{types/fundamental-ngx-core-rating-indicator.d.ts → rating-indicator/index.d.ts} +0 -0
  268. /package/{types/fundamental-ngx-core-resizable-card-layout.d.ts → resizable-card-layout/index.d.ts} +0 -0
  269. /package/{types/fundamental-ngx-core-scroll-spy.d.ts → scroll-spy/index.d.ts} +0 -0
  270. /package/{types/fundamental-ngx-core-scrollbar.d.ts → scrollbar/index.d.ts} +0 -0
  271. /package/{types/fundamental-ngx-core-segmented-button.d.ts → segmented-button/index.d.ts} +0 -0
  272. /package/{types/fundamental-ngx-core-select.d.ts → select/index.d.ts} +0 -0
  273. /package/{types/fundamental-ngx-core-settings.d.ts → settings/index.d.ts} +0 -0
  274. /package/{types/fundamental-ngx-core-shared.d.ts → shared/index.d.ts} +0 -0
  275. /package/{types/fundamental-ngx-core-side-navigation.d.ts → side-navigation/index.d.ts} +0 -0
  276. /package/{types/fundamental-ngx-core-skeleton.d.ts → skeleton/index.d.ts} +0 -0
  277. /package/{types/fundamental-ngx-core-slider.d.ts → slider/index.d.ts} +0 -0
  278. /package/{types/fundamental-ngx-core-split-button.d.ts → split-button/index.d.ts} +0 -0
  279. /package/{types/fundamental-ngx-core-status-indicator.d.ts → status-indicator/index.d.ts} +0 -0
  280. /package/{types/fundamental-ngx-core-step-input.d.ts → step-input/index.d.ts} +0 -0
  281. /package/{types/fundamental-ngx-core-switch.d.ts → switch/index.d.ts} +0 -0
  282. /package/{types/fundamental-ngx-core-table.d.ts → table/index.d.ts} +0 -0
  283. /package/{types/fundamental-ngx-core-tabs.d.ts → tabs/index.d.ts} +0 -0
  284. /package/{types/fundamental-ngx-core-tests.d.ts → tests/index.d.ts} +0 -0
  285. /package/{types/fundamental-ngx-core-text.d.ts → text/index.d.ts} +0 -0
  286. /package/{types/fundamental-ngx-core-theming.d.ts → theming/index.d.ts} +0 -0
  287. /package/{types/fundamental-ngx-core-tile.d.ts → tile/index.d.ts} +0 -0
  288. /package/{types/fundamental-ngx-core-time.d.ts → time/index.d.ts} +0 -0
  289. /package/{types/fundamental-ngx-core-time-picker.d.ts → time-picker/index.d.ts} +0 -0
  290. /package/{types/fundamental-ngx-core-timeline.d.ts → timeline/index.d.ts} +0 -0
  291. /package/{types/fundamental-ngx-core-title.d.ts → title/index.d.ts} +0 -0
  292. /package/{types/fundamental-ngx-core-token.d.ts → token/index.d.ts} +0 -0
  293. /package/{types/fundamental-ngx-core-tree.d.ts → tree/index.d.ts} +0 -0
  294. /package/{types/fundamental-ngx-core-upload-collection.d.ts → upload-collection/index.d.ts} +0 -0
  295. /package/{types/fundamental-ngx-core-user-menu.d.ts → user-menu/index.d.ts} +0 -0
  296. /package/{types/fundamental-ngx-core-vertical-navigation.d.ts → vertical-navigation/index.d.ts} +0 -0
  297. /package/{types/fundamental-ngx-core-wizard.d.ts → wizard/index.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-date-picker.mjs","sources":["../../../../libs/core/date-picker/tokens.ts","../../../../libs/core/date-picker/date-picker-mobile/date-picker-mobile.component.ts","../../../../libs/core/date-picker/date-picker-mobile/date-picker-mobile.component.html","../../../../libs/core/date-picker/errors.ts","../../../../libs/core/date-picker/date-picker.component.ts","../../../../libs/core/date-picker/date-picker.component.html","../../../../libs/core/date-picker/date-picker.module.ts","../../../../libs/core/date-picker/fundamental-ngx-core-date-picker.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { DatePicker } from './date-picker.model';\n\nexport const FD_DATE_PICKER_COMPONENT = new InjectionToken<DatePicker<any>>('FdDatePickerComponent');\nexport const FD_DATE_PICKER_MOBILE_CONFIG = new InjectionToken<MobileModeConfig>('FdDatePickerMobileConfig');\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { DateRange } from '@fundamental-ngx/core/calendar';\nimport {\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { DatePicker } from '../date-picker.model';\nimport { FD_DATE_PICKER_COMPONENT, FD_DATE_PICKER_MOBILE_CONFIG } from '../tokens';\n\n@Component({\n selector: 'fd-date-picker-mobile',\n templateUrl: './date-picker-mobile.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TitleComponent,\n NgTemplateOutlet,\n DialogFooterComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogHeaderComponent,\n ButtonBarComponent,\n InitialFocusDirective\n ]\n})\nexport class DatePickerMobileComponent<D> extends MobileModeBase<DatePicker<D>> {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /** @hidden */\n private _selectedBackup: D | Array<D> | DateRange<D> | Array<DateRange<D>>;\n\n /** @hidden */\n constructor(\n @Inject(FD_DATE_PICKER_MOBILE_CONFIG)\n public datePickerConfig: { calendarTemplate: TemplateRef<any>; controlTemplate: TemplateRef<any> },\n @Inject(FD_DATE_PICKER_COMPONENT) datePickerComponent: DatePicker<D>\n ) {\n super(datePickerComponent, MobileModeControl.DATE_PICKER);\n\n this._component.isOpenChange.subscribe((isOpen) => {\n this._toggleDialog(isOpen);\n });\n }\n\n /** @hidden */\n _getShowCalendarLegend(): boolean {\n const show = this._component.showCalendarLegend;\n if (typeof show === 'boolean') {\n return show;\n }\n\n return (show as any)?.() || false;\n }\n\n /** @hidden */\n _getLegendCol(): boolean {\n const col = this._component.legendCol;\n if (typeof col === 'boolean') {\n return col;\n }\n\n return (col as any)?.() || false;\n }\n\n /** @hidden */\n handleApprove(): void {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n\n /** @hidden */\n handleDismiss(): void {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n\n /** @hidden */\n private _toggleDialog(open: boolean): void {\n if (open) {\n this._selectedBackup = this._component.getSelectedDate();\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n\n /** @hidden */\n private _open(): void {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n backdropClickCloseable: false,\n disablePaddings: true,\n ...this.dialogConfig,\n container: this._elementRef.nativeElement\n });\n\n this._selectedBackup = this._component.getSelectedDate();\n\n const refSub = this.dialogRef.afterClosed.pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button title=\"Close\" fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n }\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"datePickerConfig.calendarTemplate || null\"></ng-template>\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar fdkInitialFocus [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\">\n </fd-button-bar>\n }\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","/** Creates an error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider: string): Error {\n return Error(\n `FdDatePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`\n );\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n DestroyRef,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n inject,\n Injector,\n input,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validator } from '@angular/forms';\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport { DynamicComponentService, FocusTrapService, Nullable } from '@fundamental-ngx/cdk/utils';\nimport { BarComponent, BarElementDirective, BarRightDirective } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n CalendarComponent,\n CalendarLegendFocusingService,\n CalendarType,\n CalendarTypeEnum,\n CalendarYearGrid,\n DateRange,\n DaysOfWeek,\n FdCalendarView,\n FdCalendarViewEnum,\n NavigationButtonDisableFunction\n} from '@fundamental-ngx/core/calendar';\nimport { DATE_TIME_FORMATS, DatetimeAdapter, DateTimeFormats } from '@fundamental-ngx/core/datetime';\nimport {\n FormItemControl,\n FormMessageComponent,\n PopoverFormMessageService,\n registerFormItemControl\n} from '@fundamental-ngx/core/form';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverModule, PopoverService } from '@fundamental-ngx/core/popover';\nimport { Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';\nimport { FdLanguageKeyIdentifier, FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { DatePickerMobileComponent } from './date-picker-mobile/date-picker-mobile.component';\nimport { DatePicker } from './date-picker.model';\nimport { createMissingDateImplementationError } from './errors';\nimport { FD_DATE_PICKER_COMPONENT, FD_DATE_PICKER_MOBILE_CONFIG } from './tokens';\n\nlet datePickerCounter = 0;\n\n/**\n * The datetime picker component is an opinionated composition of the fd-popover and\n * fd-calendar components to accomplish the UI pattern for picking a date.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-date-picker [(ngModel)]=\"date\"></fd-date-picker>\n * ```\n *\n */\n@Component({\n selector: 'fd-date-picker',\n templateUrl: './date-picker.component.html',\n styleUrl: './date-picker.component.scss',\n host: {\n '(blur)': 'onTouched()',\n '[class.fd-date-picker]': 'true',\n '[class.fd-date-picker-custom]': 'inline'\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: FD_DATE_PICKER_COMPONENT,\n useExisting: DatePickerComponent\n },\n registerFormItemControl(DatePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService,\n CalendarLegendFocusingService\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgTemplateOutlet,\n PopoverModule,\n FormMessageComponent,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n CalendarComponent,\n BarComponent,\n BarRightDirective,\n BarElementDirective,\n ButtonComponent,\n FdTranslatePipe\n ]\n})\nexport class DatePickerComponent<D>\n implements\n DatePicker<D>,\n OnInit,\n OnDestroy,\n OnChanges,\n AfterViewInit,\n ControlValueAccessor,\n Validator,\n FormItemControl\n{\n /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n @Input()\n type: CalendarType = CalendarTypeEnum.Single;\n\n /** Date picker input placeholder string */\n @Input()\n placeholder = '';\n\n /** ID attribute for input element inside DatePicker component */\n @Input()\n inputId: string;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Define a custom datetime format. Can be a string for DayjsDatetimeAdapter or object for FdDatetimeAdapter */\n @Input()\n customDateTimeFormat: unknown;\n\n /** Text displayed in message */\n @Input()\n set message(message: string) {\n this._message = message;\n }\n\n /** The trigger events that will open/close the message box.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). */\n @Input()\n set messageTriggers(triggers: string[]) {\n this._messageTriggers = triggers;\n this._popoverFormMessage.triggers = triggers;\n }\n\n /** The currently selected date model in single mode. */\n @Input()\n selectedDate: Nullable<D>;\n\n /** The currently selected date model in multiple mode. */\n @Input()\n selectedMultipleDates: Array<D> = [];\n\n /** The currently selected date model with start and end in range mode. */\n @Input()\n selectedRangeDate: DateRange<D> = { start: null, end: null };\n\n /** The currently selected date model with multiple ranges. */\n @Input()\n selectedMultipleDateRanges: Array<DateRange<D>> = [];\n\n /** The day of the week the calendar should start on. 1 represents Sunday, 2 is Monday, 3 is Tuesday, and so on. */\n @Input()\n startingDayOfWeek: DaysOfWeek;\n\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected on Day View.\n */\n @Input()\n rangeHoverEffect = false;\n\n /** Whether to validate the date picker input. */\n @Input()\n useValidation = true;\n\n /** Whether a null input is considered valid. */\n @Input()\n allowNull = true;\n\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n @Input()\n activeView: FdCalendarView = FdCalendarViewEnum.Day;\n\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n @Input()\n placement: Placement = 'bottom-start';\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /** Whether the date picker is disabled. */\n @Input()\n disabled: boolean;\n\n /** Defines if date picker should be closed after date choose */\n @Input()\n closeOnDateChoose = true;\n\n /** Enables Today-Selection-Button if true */\n @Input()\n showTodayButton = false;\n\n /** Label for Today-Selection-Button */\n @Input()\n todayButtonLabel = 'Today';\n\n /**\n * Function used to disable previous button in the calendar header.\n */\n @Input()\n previousButtonDisableFunction: NavigationButtonDisableFunction<D>;\n\n /**\n * Function used to disable next button in the calendar header.\n */\n @Input()\n nextButtonDisableFunction: NavigationButtonDisableFunction<D>;\n\n /**\n * @deprecated Popover is toggled with f4 key\n */\n @Input()\n buttonFocusable = false;\n\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n @Input()\n specialDaysRules: SpecialDayRule<D>[] = [];\n\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n yearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 5\n };\n\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n @Input()\n aggregatedYearGrid: CalendarYearGrid = {\n rows: 4,\n cols: 3\n };\n\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n @Input()\n markWeekends = true;\n\n /**\n * Whether user wants to show week numbers next to days\n */\n @Input()\n showWeekNumbers = true;\n\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n @Input()\n allowMultipleSelection = false;\n\n /** Should date picker be inlined. */\n @Input()\n inline = true;\n\n /** aria-labelledby for element describing date-picker. */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n @Input({ transform: booleanAttribute })\n processInputOnBlur = false;\n\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n @Input()\n preventScrollOnFocus = false;\n\n /** Whether date picker should rendered in mobile mode. */\n @Input()\n mobile = false;\n\n /** Mobile mode configuration. */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n @Input()\n mobileLandscape = false;\n\n /** Whether calendar is used inside mobile in portrait mode */\n @Input()\n mobilePortrait = false;\n\n /** Whether to select and display the date range in MM/YYYY or YYYY format\n * For month and year format value is 'month'\n * For year format value is 'year'\n */\n @Input()\n dateRangeFormat = '';\n\n /** Event emitted when the state of the isOpen property changes. */\n @Output()\n readonly isOpenChange = new EventEmitter<boolean>();\n\n /** Event thrown every time selected date in single mode is changed */\n @Output()\n readonly selectedDateChange: EventEmitter<Nullable<D>> = new EventEmitter<Nullable<D>>();\n\n /** Event thrown every time the selected dates in multiple mode are changed. */\n @Output()\n readonly selectedMultipleDatesChange: EventEmitter<Array<D>> = new EventEmitter<Array<D>>();\n\n /** Event thrown every time selected first or last date in range mode is changed */\n @Output()\n readonly selectedRangeDateChange: EventEmitter<DateRange<D>> = new EventEmitter<DateRange<D>>();\n\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n @Output()\n readonly selectedMultipleDateRangesChange: EventEmitter<Array<DateRange<D>>> = new EventEmitter<\n Array<DateRange<D>>\n >();\n\n /** Event thrown every time calendar active view is changed */\n @Output()\n readonly activeViewChange = new EventEmitter<FdCalendarView>();\n\n /** @hidden */\n @ViewChild('inputGroupComponent', {\n read: ElementRef\n })\n _inputGroupElement: ElementRef;\n\n /** @hidden */\n @ViewChild(InputGroupInputDirective, {\n read: ElementRef\n })\n _inputElement: ElementRef<HTMLInputElement>;\n\n /** @hidden */\n @ViewChild('controlTemplate')\n private readonly _controlTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('calendarTemplate')\n private readonly _calendarTemplate: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('popoverMessageTemplate')\n private readonly _messagePopoverTemplate: TemplateRef<any>;\n\n /** @hideen */\n @ViewChildren(CalendarComponent)\n private readonly _calendars: QueryList<CalendarComponent<D>>;\n\n /** Whether to display the calendar legend below the calendar. Default is false. */\n showCalendarLegend = input(false, { transform: booleanAttribute });\n\n /** Whether the legend should display in column layout instead of row layout. Default is false. */\n legendCol = input(false, { transform: booleanAttribute });\n\n /**\n * The state of the form control - applies css classes.\n * Also, this is applied to message.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n set state(state: Nullable<FormStates>) {\n this._state = state || 'default';\n }\n\n /** @hidden */\n get state(): FormStates {\n if (this._state == null && this.useValidation && this._isInvalidDateInput) {\n return 'error';\n }\n return this._state;\n }\n\n /** Whether the date picker is open. Can be used through two-way binding. */\n @Input()\n set isOpen(value: boolean) {\n if (value === this._isOpen) {\n return;\n }\n this._isOpen = value;\n this._showPopoverContents = value;\n this._changeDetectionRef.detectChanges();\n }\n\n get isOpen(): boolean {\n return this._isOpen;\n }\n\n /** @hidden */\n _calendarComponent: CalendarComponent<D>;\n\n /** @hidden */\n _message: string | null = null;\n\n /** @hidden */\n _messageTriggers: string[] = ['focusin', 'focusout'];\n\n /** @hidden The value of the input */\n _inputFieldDate: string | null = null;\n\n /** @hidden Whether the date input is invalid */\n _isInvalidDateInput = false;\n\n /** @hidden */\n _showPopoverContents = false;\n\n /** @hidden */\n readonly _formValueStateMessageId = `fd-date-picker-form-message-${datePickerCounter++}`;\n\n /** @hidden */\n private _isOpen = false;\n\n /** @hidden */\n private _calendarPendingDate: Nullable<D>;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _state: FormStates = 'default';\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden */\n private readonly _dynamicComponentService = inject(DynamicComponentService);\n\n /** @hidden */\n private readonly _focusTrapService = inject(FocusTrapService, {\n optional: true\n });\n\n /** @hidden */\n private _mobileComponentRef: Nullable<ComponentRef<DatePickerMobileComponent<D>>>;\n\n /** @hidden */\n get _rangeDelimiter(): string {\n return this._dateTimeFormats.rangeDelimiter;\n }\n\n /**\n * Date input aria label key based on type\n * @hidden\n */\n get _dateInputArialLabelKey(): FdLanguageKeyIdentifier {\n // return either input value or a key for \"fdTranslate\" pipe\n return this.type === CalendarTypeEnum.Range\n ? 'coreDatePicker.dateRangeInputLabel'\n : 'coreDatePicker.dateInputLabel';\n }\n\n /** @hidden */\n constructor(\n private _changeDetectionRef: ChangeDetectorRef,\n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n @Optional()\n private _dateTimeAdapter: DatetimeAdapter<D>,\n @Optional()\n @Inject(DATE_TIME_FORMATS)\n private _dateTimeFormats: DateTimeFormats,\n private _popoverFormMessage: PopoverFormMessageService\n ) {\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n }\n\n /**\n * Function used to disable certain dates in the calendar.\n */\n @Input()\n disableFunction: (value: D) => boolean = () => false;\n\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n */\n @Input()\n disableRangeStartFunction: (value: D) => boolean = () => false;\n\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n */\n @Input()\n disableRangeEndFunction: (value: D) => boolean = () => false;\n\n /** @hidden */\n onChange: (value: any) => void = () => {};\n\n /** @hidden */\n onTouched: any = () => {};\n\n /** @hidden */\n dialogApprove(): void {}\n\n /** @hidden */\n dialogDismiss(prevValue: D | Array<D> | DateRange<D> | Array<DateRange<D>>): void {\n if (this.allowMultipleSelection) {\n if (this._isMultipleDateRanges(prevValue)) {\n this.handleMultipleDateRangesChange(prevValue);\n } else {\n const value = prevValue as Array<D>;\n this.handleMultipleDatesChange(value);\n }\n } else {\n if (this._isDateRange(prevValue)) {\n this.handleRangeDateChange(prevValue);\n } else {\n const value = prevValue as D;\n this.handleSingleDateChange(value);\n }\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n // initial view should be month or year if dateRangeFormat is provided\n if (this.dateRangeFormat === 'month') {\n this.activeView = FdCalendarViewEnum.Month;\n } else if (this.dateRangeFormat === 'year') {\n this.activeView = FdCalendarViewEnum.Year;\n }\n\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.formatInputDate(this.selectedDate);\n this._changeDetectionRef.detectChanges();\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('isOpen' in changes) {\n this._showPopoverContents = this.isOpen;\n this._changeDetectionRef.detectChanges();\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._InitialiseVariablesInMessageService();\n\n this._calendars.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n const calendar = this._calendars.first;\n this._calendarComponent = calendar;\n setTimeout(() => {\n if (this._calendarComponent) {\n this._focusTrapService?.pauseCurrentFocusTrap();\n } else {\n this._focusTrapService?.unpauseCurrentFocusTrap();\n }\n\n calendar?.setCurrentlyDisplayed(this._calendarPendingDate);\n calendar?.initialFocus();\n });\n });\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n this._mobileComponentRef?.destroy();\n }\n\n /**\n * Method that handle calendar active view change and throws event.\n */\n handleCalendarActiveViewChange(activeView: FdCalendarView): void {\n this.activeViewChange.emit(activeView);\n }\n\n /** @hidden */\n closeFromCalendar(): void {\n if (this.type === CalendarTypeEnum.Single && this.closeOnDateChoose && !this.allowMultipleSelection) {\n this.onTouched();\n this.closeCalendar();\n }\n }\n\n /** Opens the calendar */\n openCalendar(): void {\n if (this.disabled) {\n return;\n }\n this._setOpenState(true);\n this._changeMessageVisibility();\n }\n\n /** Toggles the calendar open or closed */\n toggleCalendar(): void {\n if (this.disabled) {\n return;\n }\n this._setOpenState(!this.isOpen);\n if (!this.isOpen) {\n this.onTouched();\n }\n this._changeMessageVisibility();\n }\n\n /** Closes the calendar if it is open */\n closeCalendar(): void {\n if (!this.isOpen) {\n return;\n }\n this._setOpenState(false);\n this._changeMessageVisibility();\n }\n\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected single date changed\n */\n handleSingleDateChange(date: D): void {\n if (!date) {\n return;\n }\n this.selectedDate = date;\n this.selectedDateChange.emit(date);\n this.onChange(date);\n this._refreshCurrentlyDisplayedCalendarDate(date);\n this.formatInputDate(date);\n this._isInvalidDateInput = !this.isModelValid();\n if (this.closeOnDateChoose && this.type === CalendarTypeEnum.Single) {\n this.closeCalendar();\n }\n }\n\n /**\n * @hidden\n * Method that is triggered by events from the calendar component when the selected multiple dates change.\n */\n handleMultipleDatesChange(dates: Array<D>): void {\n if (!dates || dates.length === 0) {\n this.selectedMultipleDates = [];\n this.selectedMultipleDatesChange.emit([]);\n this.onChange([]);\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this._inputFieldDate = null;\n return;\n }\n this.selectedMultipleDates = dates;\n this.selectedMultipleDatesChange.emit(dates);\n this.onChange(dates);\n /** Assuming the first date in the array is used for refresh */\n if (this.showTodayButton) {\n this._refreshCurrentlyDisplayedCalendarDate(dates[0]);\n }\n this._inputFieldDate = this.formatDateArray(dates);\n this._isInvalidDateInput = !this.isModelValid();\n }\n\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected range date changed\n */\n handleRangeDateChange(dates: DateRange<D>): void {\n const startChanged = !this._dateTimeAdapter.datesEqual(dates.start, this.selectedRangeDate.start);\n const endChanged = !this._dateTimeAdapter.datesEqual(dates.end, this.selectedRangeDate.end);\n if (dates && (startChanged || endChanged)) {\n const shouldClose = this.closeOnDateChoose && dates.end !== null;\n if (dates.end !== null) {\n this._inputFieldDate = this._formatDateRange(dates);\n this.selectedRangeDate = {\n start: dates.start,\n end: dates.end\n };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n this._refreshCurrentlyDisplayedCalendarDate(dates.start);\n this._isInvalidDateInput = !this.isModelValid();\n }\n if (shouldClose) {\n this.closeCalendar();\n }\n }\n }\n\n /**\n * @hidden\n * Method that is triggered by events from the calendar component when the selected multiple range dates change.\n */\n handleMultipleDateRangesChange(dates: Array<DateRange<D>>): void {\n let hasChanged = false;\n\n // Check for changes in the date ranges\n if (dates.length !== this.selectedMultipleDateRanges.length) {\n hasChanged = true;\n } else {\n for (let i = 0; i < dates.length; i++) {\n if (\n !this._dateTimeAdapter.datesEqual(dates[i].start, this.selectedMultipleDateRanges[i].start) ||\n !this._dateTimeAdapter.datesEqual(dates[i].end, this.selectedMultipleDateRanges[i].end)\n ) {\n hasChanged = true;\n break;\n }\n }\n }\n\n // If any date range has changed, update the internal state and emit changes\n if (hasChanged) {\n this.selectedMultipleDateRanges = dates;\n\n // Update the formatted input field\n this._inputFieldDate = this._formatMultipleDateRanges(dates);\n\n // Emit the change event\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n\n // Perform any additional actions such as updating the model or refreshing the calendar\n this.onChange(this.selectedMultipleDateRanges);\n // if you want to refresh the calendar view, you can use the following line\n // this._refreshCurrentlyDisplayedCalendarDate(dates[0].start);\n this._calendarPendingDate = dates[0].start;\n this._isInvalidDateInput = !this.isModelValid();\n }\n }\n\n /**\n * @hidden\n * Method that is triggered date formatting in the date control\n */\n formatInputDate(date: Nullable<D>): void {\n if (!date) {\n return;\n }\n this._inputFieldDate = this._formatDate(date);\n }\n\n /**\n * @hidden\n * Method that is triggered when Today-Selection-Button clicked, it changes selected date or date range to today's date\n */\n onTodayButtonClick(): void {\n const todayDate = this._dateTimeAdapter.today();\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n this.handleMultipleDatesChange([todayDate]);\n this.closeFromCalendar();\n } else if (this.type === CalendarTypeEnum.Range) {\n this.handleMultipleDateRangesChange([\n {\n start: todayDate,\n end: todayDate\n }\n ]);\n }\n } else {\n if (this.type === CalendarTypeEnum.Single) {\n this.handleSingleDateChange(todayDate);\n this.closeFromCalendar();\n } else if (this.type === CalendarTypeEnum.Range) {\n this.handleRangeDateChange({\n start: todayDate,\n end: todayDate\n });\n }\n }\n }\n\n /**\n * @hidden\n * Method that is triggered when the text input is confirmed to ba changed, by clicking enter, or blur\n */\n handleInputChange(strDate: string, isTypeEvent: boolean): void {\n if ((isTypeEvent && this.processInputOnBlur) || (!isTypeEvent && !this.processInputOnBlur)) {\n // if processInputOnBlur === true, ignore type event\n // if processInputOnBlur === false, ignore blur/enter event\n return;\n }\n this.dateStringUpdate(strDate);\n }\n\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate(): {\n [key: string]: any;\n } | null {\n return this.isModelValid()\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n\n /** @hidden */\n registerOnChange(\n fn: (selected: any) => {\n void;\n }\n ): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectionRef.detectChanges();\n }\n\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms\n */\n writeValue(selected: D | Array<D> | DateRange<D> | Array<DateRange<D>> | null): void {\n /** If written value is not defined, null, empty string */\n if (!selected) {\n this._inputFieldDate = '';\n this._refreshCurrentlyDisplayedCalendarDate(this._dateTimeAdapter.today());\n this.selectedRangeDate = {\n start: null,\n end: null\n };\n this.selectedDate = null;\n this.selectedMultipleDates = [];\n this.selectedMultipleDateRanges = [];\n this._changeDetectionRef.detectChanges();\n return;\n }\n if (this.allowMultipleSelection && Array.isArray(selected)) {\n if (this.type === CalendarTypeEnum.Single) {\n /**\n * For single mode, if the date is invalid, model is changed, it refreshes currently\n * input field text, but it does not refresh currently displayed day\n */\n // selected = this._parseDate(selected)\n selected = <Array<D>>selected;\n\n this.selectedMultipleDates = selected;\n this._inputFieldDate = this.formatDateArray(selected);\n this._refreshCurrentlyDisplayedCalendarDate(selected[0]);\n }\n if (this.type === CalendarTypeEnum.Range) {\n /**\n * For range mode, if the date is invalid, model is changed, but it does not refresh currently\n * displayed day view, or input field text\n */\n selected = selected as Array<DateRange<D>>;\n if (selected && selected.length > 0) {\n const filteredRanges = selected.filter((range) => range.start !== null && range.end !== null);\n if (filteredRanges.length > 0) {\n this.selectedMultipleDateRanges = filteredRanges.map((range) => ({\n start: this._parseDate(range.start),\n end: this._parseDate(range.end)\n }));\n this._refreshCurrentlyDisplayedCalendarDate(filteredRanges[0].start);\n this._inputFieldDate = this._formatMultipleDateRanges(filteredRanges);\n } else {\n this._inputFieldDate = '';\n }\n } else {\n this._inputFieldDate = '';\n }\n }\n } else {\n if (this.type === CalendarTypeEnum.Single) {\n /**\n * For single mode, if the date is invalid, model is changed, it refreshes currently\n * input field text, but it does not refresh currently displayed day\n */\n selected = this._parseDate(selected) as D;\n this.selectedDate = selected;\n this._inputFieldDate = this._formatDate(selected);\n this._refreshCurrentlyDisplayedCalendarDate(selected);\n }\n if (this.type === CalendarTypeEnum.Range) {\n /**\n * For range mode, if the date is invalid, model is changed, but it does not refresh currently\n * displayed day view, or input field text\n */\n selected = selected as DateRange<D>;\n if (selected?.start) {\n this.selectedRangeDate = {\n start: this._parseDate(selected.start),\n end: this._parseDate(selected.end)\n };\n this._refreshCurrentlyDisplayedCalendarDate(selected.start);\n this._inputFieldDate = this._formatDateRange(selected);\n } else {\n this._inputFieldDate = '';\n }\n }\n }\n\n this._isInvalidDateInput = !this.isModelValid();\n this._changeDetectionRef.detectChanges();\n }\n\n /**\n * @hidden\n * Method, which is responsible for transforming string to date, depending on type or\n * validation the results are different. It also changes the state of _isInvalidDateInput\n */\n dateStringUpdate(dateStr: string): void {\n this._inputFieldDate = dateStr;\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n this.updateMultipleDates(dateStr);\n } else {\n this._updateMultipleDateRanges(dateStr);\n }\n } else {\n if (this.type === CalendarTypeEnum.Single) {\n this._updateSingleDate(dateStr);\n } else {\n this._updateRangeDate(dateStr);\n }\n }\n }\n\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isModelValid(): boolean {\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n return this._isMultipleModelValid(this.selectedMultipleDates);\n } else {\n return this._isMultipleRangesModelValid(this.selectedMultipleDateRanges);\n }\n } else {\n if (this.type === CalendarTypeEnum.Single) {\n return this._isSingleModelValid(this.selectedDate);\n } else {\n return this._isRangeModelValid(this.selectedRangeDate);\n }\n }\n }\n\n /** Returns current selected date. */\n getSelectedDate(): D | Array<D> | DateRange<D> | Array<DateRange<D>> {\n return (\n this.selectedDate || this.selectedMultipleDates || this.selectedRangeDate || this.selectedMultipleDateRanges\n );\n }\n\n /** @hidden */\n _changeMessageVisibility(): void {\n if (this.isOpen) {\n this._popoverFormMessage.hide();\n } else {\n this._popoverFormMessage.show();\n }\n }\n\n /** @hidden */\n _onOpenStateChanged(isOpen: boolean): void {\n this.isOpenChange.emit(isOpen);\n this._changeMessageVisibility();\n // focus input control every time popup is closed\n if (!isOpen && this._inputElement) {\n this._inputElement.nativeElement.focus({\n preventScroll: this.preventScrollOnFocus\n });\n }\n }\n\n /**\n * Renders the calendar right before the popover is opened.\n * Used for correct calculations of overlay position and size.\n */\n _beforePopoverOpen(): void {\n this._showPopoverContents = true;\n this._changeDetectionRef.detectChanges();\n }\n\n /** @hidden */\n _onBlur(event: FocusEvent): void {\n this.onTouched();\n this.handleInputChange((event.target as any).value, false);\n }\n\n /** Method that returns info if single model given is valid */\n private _isSingleModelValid(date: Nullable<D>): boolean {\n return (this._isDateValid(date) && !this.disableFunction(date)) || (!date && this.allowNull);\n }\n\n /** Method that returns info if multiple date model given is valid */\n private _isMultipleModelValid(dates: Array<Nullable<D>>): boolean {\n return dates?.every((date) => this._isSingleModelValid(date));\n }\n\n /** Method that returns info if range date model given is valid */\n private _isRangeModelValid(fdRangeDate: DateRange<D>): boolean {\n return (\n (fdRangeDate && this._isStartDateValid(fdRangeDate.start) && this._isEndDateValid(fdRangeDate.end)) ||\n (!fdRangeDate.start && !fdRangeDate.end && this.allowNull)\n );\n }\n\n /** Method that returns info if multiple range date model given is valid */\n private _isMultipleRangesModelValid(ranges: Array<DateRange<D>>): boolean {\n if (!ranges || ranges.length === 0) {\n return this.allowNull;\n }\n return ranges.every((range) => range.start && range.end && this._isRangeModelValid(range));\n }\n\n /** Method that returns info if end date model given is valid */\n private _isEndDateValid(endDate: Nullable<D>): boolean {\n return this._isDateValid(endDate) && !this.disableRangeEndFunction(endDate);\n }\n\n /** Method that returns info if start date model given is valid */\n private _isStartDateValid(startDate: Nullable<D>): boolean {\n return this._isDateValid(startDate) && !this.disableRangeStartFunction(startDate);\n }\n\n /** Method that returns info if given date model is valid */\n private _isDateValid(date: Nullable<D>): date is D {\n return this._dateTimeAdapter.isValid(date);\n }\n\n /** @hidden */\n private _refreshCurrentlyDisplayedCalendarDate(date: Nullable<D>): void {\n this._calendarPendingDate = date;\n this._calendarComponent?.setCurrentlyDisplayed(date);\n }\n\n /** @hidden */\n private _formatDate(date: Nullable<D>): string {\n if (this.customDateTimeFormat) {\n return this._dateTimeAdapter.format(date, this.customDateTimeFormat);\n }\n return this._dateTimeAdapter.format(date, this._dateTimeFormats.display.dateInput);\n }\n\n /** @hidden */\n private formatDateArray(dates: Array<D>): string {\n return dates.map((date) => this._formatDate(date)).join(', ');\n }\n\n /** @hidden */\n private _parseDate(date: unknown): D | null {\n return this._dateTimeAdapter.parse(date, this._dateTimeFormats.parse.dateInput);\n }\n\n /**\n * Helper method to parse a date string into an array of dates.\n * @param dateStr The date string to parse.\n * @returns An array of dates.\n */\n private parseDateString(dateStr: string): D[] {\n return dateStr\n .split(',')\n .map((date) => this._parseDate(date.trim()))\n .filter((date) => date !== null) as D[];\n }\n\n /** @hidden */\n private _formatDateRange(dateRange: DateRange<D>): string {\n const startDate = this._formatDate(dateRange.start);\n const endDate = this._formatDate(dateRange.end);\n return startDate + this._rangeDelimiter + endDate;\n }\n\n /** @hidden */\n private _formatMultipleDateRanges(dateRanges: Array<DateRange<D>>): string {\n return dateRanges.map((dateRange) => this._formatDateRange(dateRange)).join(', ');\n }\n\n /** @hidden */\n private _InitialiseVariablesInMessageService(): void {\n this._popoverFormMessage.init(this._inputGroupElement);\n this._popoverFormMessage.triggers = this._messageTriggers;\n this._popoverFormMessage.message = this._messagePopoverTemplate;\n }\n\n /** @hidden */\n private _setOpenState(isOpen: boolean): void {\n this._showPopoverContents = isOpen;\n this._changeDetectionRef.detectChanges();\n this.isOpen = isOpen;\n this.isOpenChange.emit(this.isOpen);\n this._changeDetectionRef.detectChanges();\n }\n\n /** @hidden */\n private _setUpMobileMode(): void {\n const injector = Injector.create({\n providers: [\n { provide: FD_DATE_PICKER_COMPONENT, useValue: this },\n {\n provide: FD_DATE_PICKER_MOBILE_CONFIG,\n useValue: { calendarTemplate: this._calendarTemplate, controlTemplate: this._controlTemplate }\n }\n ],\n parent: this._injector\n });\n\n this._mobileComponentRef = this._dynamicComponentService.createDynamicComponent(\n {},\n DatePickerMobileComponent<D>,\n {\n container: 'body'\n },\n {\n injector\n }\n );\n }\n\n /** @hidden */\n private _isDateRange(value: any): value is DateRange<D> {\n return !!value && value.start && value.end;\n }\n\n /** @hidden */\n private _isMultipleDateRanges(value: any): value is Array<DateRange<D>> {\n return Array.isArray(value) && value.every((item) => this._isDateRange(item));\n }\n\n /**\n * @hidden\n * Updates the selected single date from a date string.\n * @param dateStr The date string to parse and update the selected date.\n */\n private _updateSingleDate(dateStr: string): void {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedDate = null;\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedDate);\n this.onChange(this.selectedDate);\n this.selectedDateChange.emit(this.selectedDate);\n return;\n }\n const date = this._parseDate(dateStr);\n\n if (!this._dateTimeAdapter.datesEqual(date, this.selectedDate)) {\n this._isInvalidDateInput = !this._isSingleModelValid(date);\n\n if (!this._isInvalidDateInput) {\n this._refreshCurrentlyDisplayedCalendarDate(date);\n }\n\n this.selectedDate = date;\n this.onChange(this.selectedDate);\n this.selectedDateChange.emit(this.selectedDate);\n }\n }\n\n /**\n * @hidden\n * Updates the selected range date from a date string.\n * @param dateStr The date string to parse and update the selected range date.\n */\n private _updateRangeDate(dateStr: string): void {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedRangeDate = { start: null, end: null };\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedRangeDate.start);\n this.onChange(this.selectedRangeDate);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n return;\n }\n\n const [startDateStr, endDateStr] = dateStr.split(this._rangeDelimiter);\n const startDate = this._parseDate(startDateStr);\n const endDate = this._parseDate(endDateStr);\n\n if (\n !this._dateTimeAdapter.datesEqual(startDate, this.selectedRangeDate.start) ||\n !this._dateTimeAdapter.datesEqual(endDate, this.selectedRangeDate.end)\n ) {\n let selectedRangeDate: DateRange<D> | null = null;\n\n if (\n this._dateTimeAdapter.isValid(startDate) &&\n this._dateTimeAdapter.isValid(endDate) &&\n this._dateTimeAdapter.compareDate(startDate, endDate) > 0\n ) {\n selectedRangeDate = { start: endDate, end: startDate };\n } else {\n selectedRangeDate = { start: startDate, end: endDate };\n }\n\n this._isInvalidDateInput = !this._isRangeModelValid(selectedRangeDate);\n this.selectedRangeDate = selectedRangeDate;\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n\n if (this._isStartDateValid(this.selectedRangeDate.start)) {\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedRangeDate.start);\n }\n }\n }\n\n /**\n * @hidden\n * Updates the selected multiple dates from a date string.\n * @param dateStr The date string to parse and update the selected multiple dates.\n */\n private updateMultipleDates(dateStr: string): void {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedMultipleDates = [];\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this.onChange(this.selectedMultipleDates);\n this.selectedMultipleDatesChange.emit(this.selectedMultipleDates);\n return;\n }\n\n const parsedDates = this.parseDateString(dateStr);\n\n // Check if the new parsed dates are different from the previously selected dates\n const datesChanged = !this._areDatesEqual(parsedDates, this.selectedMultipleDates);\n\n if (datesChanged) {\n this._isInvalidDateInput = !this._isMultipleModelValid(parsedDates);\n\n if (!this._isInvalidDateInput) {\n this._refreshCurrentlyDisplayedCalendarDate(parsedDates[0]);\n }\n\n this.selectedMultipleDates = parsedDates;\n this.onChange(this.selectedMultipleDates);\n this.selectedMultipleDatesChange.emit(this.selectedMultipleDates);\n }\n }\n\n /** Helper method to compare two arrays of dates */\n private _areDatesEqual(dates1: D[], dates2: D[]): boolean {\n if (dates1.length !== dates2.length) {\n return false;\n }\n return dates1.every((date, index) => this._dateTimeAdapter.datesEqual(date, dates2[index]));\n }\n\n /**\n * @hidden\n * Updates the selected multiple date ranges from a date string.\n * @param dateStr The date string to parse and update the selected multiple date ranges.\n */\n private _updateMultipleDateRanges(dateStr: string): void {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedMultipleDateRanges = [{ start: null, end: null }];\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this.onChange(this.selectedMultipleDateRanges);\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n return;\n }\n\n const rangeStrings = dateStr.split(',').map((range) => range.trim());\n const parsedRanges = rangeStrings.map((rangeStr) => {\n const [startStr, endStr] = rangeStr.split(this._rangeDelimiter).map((date) => date.trim());\n return {\n start: this._parseDate(startStr),\n end: this._parseDate(endStr)\n };\n });\n\n // Check if the new parsed ranges are different from the previously selected ranges\n const rangesChanged = !this._areDateRangesEqual(parsedRanges, this.selectedMultipleDateRanges);\n\n this._isInvalidDateInput = !this._isMultipleRangesModelValid(parsedRanges);\n\n if (!this._isInvalidDateInput && rangesChanged) {\n if (this._isStartDateValid(this.selectedMultipleDateRanges[0].start)) {\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedMultipleDateRanges[0].start);\n }\n this.selectedMultipleDateRanges = parsedRanges;\n this.onChange(this.selectedMultipleDateRanges);\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n }\n }\n\n /** Helper method to compare two arrays of date ranges */\n private _areDateRangesEqual(ranges1: DateRange<D>[], ranges2: DateRange<D>[]): boolean {\n if (ranges1.length !== ranges2.length) {\n return false;\n }\n return ranges1.every(\n (range, index) =>\n this._dateTimeAdapter.datesEqual(range.start, ranges2[index].start) &&\n this._dateTimeAdapter.datesEqual(range.end, ranges2[index].end)\n );\n }\n}\n","<ng-template [ngTemplateOutlet]=\"mobile ? controlTemplate : desktopTemplate\"></ng-template>\n<ng-template #popoverMessageTemplate>\n @if (_message) {\n <fd-form-message [embedded]=\"true\" [type]=\"state\">\n {{ _message }}\n </fd-form-message>\n }\n</ng-template>\n<ng-template #desktopTemplate>\n <fd-popover\n [(isOpen)]=\"isOpen\"\n (beforeOpen)=\"_beforePopoverOpen()\"\n (isOpenChange)=\"_onOpenStateChanged($event)\"\n [triggers]=\"[]\"\n [placement]=\"placement\"\n [disabled]=\"disabled\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [appendTo]=\"appendTo\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [attr.aria-expanded]=\"isOpen\" [attr.aria-hidden]=\"!isOpen\">\n @if (_showPopoverContents) {\n <ng-template [ngTemplateOutlet]=\"popoverMessageTemplate\"></ng-template>\n <ng-content></ng-content>\n <ng-template [ngTemplateOutlet]=\"calendarTemplate\"></ng-template>\n }\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #controlTemplate>\n <fd-input-group\n #inputGroupComponent\n [state]=\"state\"\n [disabled]=\"disabled\"\n [isControl]=\"true\"\n [button]=\"true\"\n [buttonFocusable]=\"buttonFocusable\"\n glyph=\"appointment-2\"\n [isExpanded]=\"isOpen\"\n [glyphAriaLabel]=\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\"\n [iconTitle]=\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\"\n (addOnButtonClicked)=\"toggleCalendar()\"\n >\n <input\n type=\"text\"\n class=\"fd-input\"\n fd-input-group-input\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [attr.id]=\"inputId\"\n aria-haspopup=\"grid\"\n aria-autocomplete=\"none\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-label]=\"_dateInputArialLabelKey | fdTranslate\"\n [attr.aria-required]=\"required\"\n [attr.aria-describedby]=\"_formValueStateMessageId\"\n [ngModel]=\"_inputFieldDate\"\n (keyup.enter)=\"handleInputChange($any($event.target).value, false)\"\n (keydown.f4)=\"toggleCalendar()\"\n (ngModelChange)=\"handleInputChange($event, true)\"\n (click)=\"mobile && openCalendar()\"\n (blur)=\"_onBlur($event)\"\n />\n </fd-input-group>\n</ng-template>\n<ng-template #calendarTemplate>\n <fd-calendar\n [activeView]=\"activeView\"\n [markWeekends]=\"markWeekends\"\n [specialDaysRules]=\"specialDaysRules\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [allowMultipleSelection]=\"allowMultipleSelection\"\n [aggregatedYearGrid]=\"aggregatedYearGrid\"\n [yearGrid]=\"yearGrid\"\n [calType]=\"type\"\n [rangeHoverEffect]=\"rangeHoverEffect\"\n [disableFunction]=\"disableFunction\"\n [disableRangeStartFunction]=\"disableRangeStartFunction\"\n [disableRangeEndFunction]=\"disableRangeEndFunction\"\n [selectedDate]=\"selectedDate\"\n [selectedMultipleDates]=\"selectedMultipleDates\"\n [selectedRangeDate]=\"selectedRangeDate\"\n [selectedMultipleDateRanges]=\"selectedMultipleDateRanges\"\n [startingDayOfWeek]=\"startingDayOfWeek\"\n [previousButtonDisableFunction]=\"previousButtonDisableFunction\"\n [nextButtonDisableFunction]=\"nextButtonDisableFunction\"\n [showCalendarLegend]=\"showCalendarLegend()\"\n [legendCol]=\"legendCol()\"\n [mobileLandscape]=\"mobile && mobileLandscape\"\n [mobilePortrait]=\"mobile && mobilePortrait\"\n [dateRangeFormat]=\"dateRangeFormat\"\n (selectedDateChange)=\"handleSingleDateChange($event)\"\n (selectedMultipleDatesChange)=\"handleMultipleDatesChange($event)\"\n (selectedRangeDateChange)=\"handleRangeDateChange($event)\"\n (selectedMultipleDateRangesChange)=\"handleMultipleDateRangesChange($event)\"\n (activeViewChange)=\"handleCalendarActiveViewChange($event)\"\n (closeCalendar)=\"closeFromCalendar()\"\n ></fd-calendar>\n @if (showTodayButton) {\n <div fd-bar barDesign=\"footer\" class=\"fd-date-picker__bar\">\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'coreCalendar.todayLabel' | fdTranslate\"\n (click)=\"onTodayButtonClick()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n }\n</ng-template>\n<div [style.display]=\"'none'\" aria-hidden=\"true\">\n <div [attr.id]=\"_formValueStateMessageId\" aria-atomic=\"true\" aria-live=\"assertive\">\n @switch (state) {\n @case ('success') {\n {{ 'coreDatePicker.valueStateSuccessMessage' | fdTranslate }}\n }\n @case ('information') {\n {{ 'coreDatePicker.valueStateInformationMessage' | fdTranslate }}\n }\n @case ('warning') {\n {{ 'coreDatePicker.valueStateWarningMessage' | fdTranslate }}\n }\n @case ('error') {\n {{ 'coreDatePicker.valueStateErrorMessage' | fdTranslate }}\n }\n }\n {{ _message }}\n </div>\n</div>\n","import { NgModule } from '@angular/core';\n\nimport { DatePickerMobileComponent } from './date-picker-mobile/date-picker-mobile.component';\nimport { DatePickerComponent } from './date-picker.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [DatePickerComponent, DatePickerMobileComponent],\n exports: [DatePickerComponent, DatePickerMobileComponent]\n})\nexport class DatePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-date-picker.mjs","sources":["../tmp-esm2022/date-picker/tokens.js","../tmp-esm2022/date-picker/date-picker-mobile/date-picker-mobile.component.js","../tmp-esm2022/date-picker/errors.js","../tmp-esm2022/date-picker/date-picker.component.js","../tmp-esm2022/date-picker/date-picker.module.js","../tmp-esm2022/date-picker/fundamental-ngx-core-date-picker.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport const FD_DATE_PICKER_COMPONENT = new InjectionToken('FdDatePickerComponent');\nexport const FD_DATE_PICKER_MOBILE_CONFIG = new InjectionToken('FdDatePickerMobileConfig');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUFrQix1QkFBdUIsQ0FBQyxDQUFDO0FBQ3JHLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLElBQUksY0FBYyxDQUFtQiwwQkFBMEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJy4vZGF0ZS1waWNrZXIubW9kZWwnO1xuXG5leHBvcnQgY29uc3QgRkRfREFURV9QSUNLRVJfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPERhdGVQaWNrZXI8YW55Pj4oJ0ZkRGF0ZVBpY2tlckNvbXBvbmVudCcpO1xuZXhwb3J0IGNvbnN0IEZEX0RBVEVfUElDS0VSX01PQklMRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TW9iaWxlTW9kZUNvbmZpZz4oJ0ZkRGF0ZVBpY2tlck1vYmlsZUNvbmZpZycpO1xuIl19","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FD_DATE_PICKER_COMPONENT, FD_DATE_PICKER_MOBILE_CONFIG } from '../tokens';\nimport * as i0 from \"@angular/core\";\nexport class DatePickerMobileComponent extends MobileModeBase {\n /** @hidden */\n constructor(datePickerConfig, datePickerComponent) {\n super(datePickerComponent, MobileModeControl.DATE_PICKER);\n this.datePickerConfig = datePickerConfig;\n this._component.isOpenChange.subscribe((isOpen) => {\n this._toggleDialog(isOpen);\n });\n }\n /** @hidden */\n _getShowCalendarLegend() {\n const show = this._component.showCalendarLegend;\n if (typeof show === 'boolean') {\n return show;\n }\n return show?.() || false;\n }\n /** @hidden */\n _getLegendCol() {\n const col = this._component.legendCol;\n if (typeof col === 'boolean') {\n return col;\n }\n return col?.() || false;\n }\n /** @hidden */\n handleApprove() {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n /** @hidden */\n handleDismiss() {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n /** @hidden */\n _toggleDialog(open) {\n if (open) {\n this._selectedBackup = this._component.getSelectedDate();\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n /** @hidden */\n _open() {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n backdropClickCloseable: false,\n disablePaddings: true,\n ...this.dialogConfig,\n container: this._elementRef.nativeElement\n });\n this._selectedBackup = this._component.getSelectedDate();\n const refSub = this.dialogRef.afterClosed.pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerMobileComponent, deps: [{ token: FD_DATE_PICKER_MOBILE_CONFIG }, { token: FD_DATE_PICKER_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: DatePickerMobileComponent, isStandalone: true, selector: \"fd-date-picker-mobile\", viewQueries: [{ propertyName: \"dialogTemplate\", first: true, predicate: [\"dialogTemplate\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"datePickerConfig.calendarTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", dependencies: [{ kind: \"component\", type: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: ButtonBarComponent, selector: \"fd-button-bar\", inputs: [\"fullWidth\", \"fdType\", \"title\", \"ariaLabelledby\", \"id\"] }, { kind: \"directive\", type: InitialFocusDirective, selector: \"[fdkInitialFocus]\", inputs: [\"fdkInitialFocus\", \"enabled\", \"focusLastElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerMobileComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-date-picker-mobile', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n TitleComponent,\n NgTemplateOutlet,\n DialogFooterComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogHeaderComponent,\n ButtonBarComponent,\n InitialFocusDirective\n ], template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"datePickerConfig.calendarTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\" }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [FD_DATE_PICKER_MOBILE_CONFIG]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [FD_DATE_PICKER_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1tb2JpbGUvZGF0ZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci1tb2JpbGUvZGF0ZS1waWNrZXItbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0QsT0FBTyxFQUNILG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDeEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFtQm5GLE1BQU0sT0FBTyx5QkFBNkIsU0FBUSxjQUE2QjtJQU8zRSxjQUFjO0lBQ2QsWUFFVyxnQkFBMkYsRUFDaEUsbUJBQWtDO1FBRXBFLEtB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QUNkLGdCQUFnQixvSkFDaEIscUJBQXFCLDZEQUNyQixlQUFlLHNHQUNmLG1CQUFtQix3RkFDbkIsMEJBQTBCLCtHQUMxQixxQkFBcUIsNkRBQ3JCLGtCQUFrQiw0SEFDbEIscUJBQXFCOzsyRkFHaEIseUJBQXlCO2tCQWpCckMsU0FBUzsrQkFDSSx1QkFBdUIsaUJBRWxCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ0wsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLDBCQUEwQjt3QkFDMUIscUJBQXFCO3dCQUNyQixrQkFBa0I7d0JBQ2xCLHFCQUFxQjtxQkFDeEI7OzBCQVdJLE1BQU07MkJBQUMsNEJBQTRCOzswQkFFbkMsTUFBTTsyQkFBQyx3QkFBd0I7eUNBVFAsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEluaXRpYWxGb2N1c0RpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJ1dHRvbkJhckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9iYXInO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NhbGVuZGFyJztcbmltcG9ydCB7XG4gICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICBEaWFsb2dDbG9zZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IE1vYmlsZU1vZGVCYXNlLCBNb2JpbGVNb2RlQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90aXRsZSc7XG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIubW9kZWwnO1xuaW1wb3J0IHsgRkRfREFURV9QSUNLRVJfQ09NUE9ORU5ULCBGRF9EQVRFX1BJQ0tFUl9NT0JJTEVfQ09ORklHIH0gZnJvbSAnLi4vdG9rZW5zJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1kYXRlLXBpY2tlci1tb2JpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0JvZHlDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0Nsb3NlQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIEJ1dHRvbkJhckNvbXBvbmVudCxcbiAgICAgICAgSW5pdGlhbEZvY3VzRGlyZWN0aXZlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyTW9iaWxlQ29tcG9uZW50PEQ+IGV4dGVuZHMgTW9iaWxlTW9kZUJhc2U8RGF0ZVBpY2tlcjxEPj4ge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nVGVtcGxhdGUnKSBkaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IEQgfCBBcnJheTxEPiB8IERhdGVSYW5nZTxEPiB8IEFycmF5PERhdGVSYW5nZTxEPj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEZEX0RBVEVfUElDS0VSX01PQklMRV9DT05GSUcpXG4gICAgICAgIHB1YmxpYyBkYXRlUGlja2VyQ29uZmlnOiB7IGNhbGVuZGFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IGNvbnRyb2xUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB9LFxuICAgICAgICBASW5qZWN0KEZEX0RBVEVfUElDS0VSX0NPTVBPTkVOVCkgZGF0ZVBpY2tlckNvbXBvbmVudDogRGF0ZVBpY2tlcjxEPlxuICAgICkge1xuICAgICAgICBzdXBlcihkYXRlUGlja2VyQ29tcG9uZW50LCBNb2JpbGVNb2RlQ29udHJvbC5EQVRFX1BJQ0tFUik7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmlzT3BlbkNoYW5nZS5zdWJzY3JpYmUoKGlzT3BlbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlRGlhbG9nKGlzT3Blbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dldFNob3dDYWxlbmRhckxlZ2VuZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc2hvdyA9IHRoaXMuX2NvbXBvbmVudC5zaG93Q2FsZW5kYXJMZWdlbmQ7XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvdyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gc2hvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoc2hvdyBhcyBhbnkpPy4oKSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9nZXRMZWdlbmRDb2woKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuX2NvbXBvbmVudC5sZWdlbmRDb2w7XG4gICAgICAgIGlmICh0eXBlb2YgY29sID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2w7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGNvbCBhcyBhbnkpPy4oKSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZUFwcHJvdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5kaWFsb2dBcHByb3ZlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVEaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5kaXNtaXNzKCk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5kaWFsb2dEaXNtaXNzKHRoaXMuX3NlbGVjdGVkQmFja3VwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvZ2dsZURpYWxvZyhvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEJhY2t1cCA9IHRoaXMuX2NvbXBvbmVudC5nZXRTZWxlY3RlZERhdGUoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZGlhbG9nU2VydmljZS5oYXNPcGVuRGlhbG9ncygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCB7XG4gICAgICAgICAgICBtb2JpbGU6IHRydWUsXG4gICAgICAgICAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRCYWNrdXAgPSB0aGlzLl9jb21wb25lbnQuZ2V0U2VsZWN0ZWREYXRlKCk7XG5cbiAgICAgICAgY29uc3QgcmVmU3ViID0gdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBlcnJvcjogKHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgICAgICAgICAgICAgICAgICByZWZTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbZmREaWFsb2dUZW1wbGF0ZV0gbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2RpYWxvZ1RlbXBsYXRlPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJDbG9zZVwiIGZkLWRpYWxvZy1jbG9zZS1idXR0b24gW21vYmlsZV09XCJ0cnVlXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJkYXRlUGlja2VyQ29uZmlnLmNhbGVuZGFyVGVtcGxhdGUgfHwgbnVsbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XG4gICAgICAgIDxmZC1kaWFsb2ctZm9vdGVyPlxuICAgICAgICAgICAgQGlmIChtb2JpbGVDb25maWcuYXBwcm92ZUJ1dHRvblRleHQpIHtcbiAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhciBmZFR5cGU9XCJlbXBoYXNpemVkXCIgW2xhYmVsXT1cIm1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCFcIiAoY2xpY2spPVwiaGFuZGxlQXBwcm92ZSgpXCI+XG4gICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGZka0luaXRpYWxGb2N1cyBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmNhbmNlbEJ1dHRvblRleHQhXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPlxuICAgICAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuICAgIDwvZmQtZGlhbG9nPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","/** Creates an error to be thrown when attempting to use an invalid date implementation. */\nexport function createMissingDateImplementationError(provider) {\n return Error(`FdDatePicker: No provider found for ${provider}. You must import one of the following ` +\n `modules at your application root: FdDatetimeModule, or provide a ` +\n `custom implementation.`);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyRkFBMkY7QUFDM0YsTUFBTSxVQUFVLG9DQUFvQyxDQUFDLFFBQWdCO0lBQ2pFLE9BQU8sS0FBSyxDQUNSLHVDQUF1QyxRQUFRLHlDQUF5QztRQUNwRixtRUFBbUU7UUFDbkUsd0JBQXdCLENBQy9CLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIENyZWF0ZXMgYW4gZXJyb3IgdG8gYmUgdGhyb3duIHdoZW4gYXR0ZW1wdGluZyB0byB1c2UgYW4gaW52YWxpZCBkYXRlIGltcGxlbWVudGF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1pc3NpbmdEYXRlSW1wbGVtZW50YXRpb25FcnJvcihwcm92aWRlcjogc3RyaW5nKTogRXJyb3Ige1xuICAgIHJldHVybiBFcnJvcihcbiAgICAgICAgYEZkRGF0ZVBpY2tlcjogTm8gcHJvdmlkZXIgZm91bmQgZm9yICR7cHJvdmlkZXJ9LiBZb3UgbXVzdCBpbXBvcnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgICBgbW9kdWxlcyBhdCB5b3VyIGFwcGxpY2F0aW9uIHJvb3Q6IEZkRGF0ZXRpbWVNb2R1bGUsIG9yIHByb3ZpZGUgYSBgICtcbiAgICAgICAgICAgIGBjdXN0b20gaW1wbGVtZW50YXRpb24uYFxuICAgICk7XG59XG4iXX0=","import { NgTemplateOutlet } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, forwardRef, Inject, inject, Injector, input, Input, Optional, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DynamicComponentService, FocusTrapService } from '@fundamental-ngx/cdk/utils';\nimport { BarComponent, BarElementDirective, BarRightDirective } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { CalendarComponent, CalendarLegendFocusingService, CalendarTypeEnum, DateRange, FdCalendarViewEnum } from '@fundamental-ngx/core/calendar';\nimport { DATE_TIME_FORMATS, DatetimeAdapter } from '@fundamental-ngx/core/datetime';\nimport { FormMessageComponent, PopoverFormMessageService, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { PopoverModule, PopoverService } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { DatePickerMobileComponent } from './date-picker-mobile/date-picker-mobile.component';\nimport { createMissingDateImplementationError } from './errors';\nimport { FD_DATE_PICKER_COMPONENT, FD_DATE_PICKER_MOBILE_CONFIG } from './tokens';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/core/datetime\";\nimport * as i2 from \"@fundamental-ngx/core/form\";\nimport * as i3 from \"@fundamental-ngx/core/popover\";\nimport * as i4 from \"@angular/forms\";\nlet datePickerCounter = 0;\n/**\n * The datetime picker component is an opinionated composition of the fd-popover and\n * fd-calendar components to accomplish the UI pattern for picking a date.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-date-picker [(ngModel)]=\"date\"></fd-date-picker>\n * ```\n *\n */\nexport class DatePickerComponent {\n /** Text displayed in message */\n set message(message) {\n this._message = message;\n }\n /** The trigger events that will open/close the message box.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp). */\n set messageTriggers(triggers) {\n this._messageTriggers = triggers;\n this._popoverFormMessage.triggers = triggers;\n }\n /**\n * The state of the form control - applies css classes.\n * Also, this is applied to message.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n set state(state) {\n this._state = state || 'default';\n }\n /** @hidden */\n get state() {\n if (this._state == null && this.useValidation && this._isInvalidDateInput) {\n return 'error';\n }\n return this._state;\n }\n /** Whether the date picker is open. Can be used through two-way binding. */\n set isOpen(value) {\n if (value === this._isOpen) {\n return;\n }\n this._isOpen = value;\n this._showPopoverContents = value;\n this._changeDetectionRef.detectChanges();\n }\n get isOpen() {\n return this._isOpen;\n }\n /** @hidden */\n get _rangeDelimiter() {\n return this._dateTimeFormats.rangeDelimiter;\n }\n /**\n * Date input aria label key based on type\n * @hidden\n */\n get _dateInputArialLabelKey() {\n // return either input value or a key for \"fdTranslate\" pipe\n return this.type === CalendarTypeEnum.Range\n ? 'coreDatePicker.dateRangeInputLabel'\n : 'coreDatePicker.dateInputLabel';\n }\n /** @hidden */\n constructor(_changeDetectionRef, \n // Use @Optional to avoid angular injection error message and throw our own which is more precise one\n _dateTimeAdapter, _dateTimeFormats, _popoverFormMessage) {\n this._changeDetectionRef = _changeDetectionRef;\n this._dateTimeAdapter = _dateTimeAdapter;\n this._dateTimeFormats = _dateTimeFormats;\n this._popoverFormMessage = _popoverFormMessage;\n /** The type of calendar, 'single' for single date selection or 'range' for a range of dates. */\n this.type = CalendarTypeEnum.Single;\n /** Date picker input placeholder string */\n this.placeholder = '';\n /** If it is mandatory field */\n this.required = false;\n /** The currently selected date model in multiple mode. */\n this.selectedMultipleDates = [];\n /** The currently selected date model with start and end in range mode. */\n this.selectedRangeDate = { start: null, end: null };\n /** The currently selected date model with multiple ranges. */\n this.selectedMultipleDateRanges = [];\n /**\n * Whether user wants to mark day cells on hover.\n * Works only on range mode, when start date is selected on Day View.\n */\n this.rangeHoverEffect = false;\n /** Whether to validate the date picker input. */\n this.useValidation = true;\n /** Whether a null input is considered valid. */\n this.allowNull = true;\n /** Actually shown active view one of 'day' | 'month' | 'year' in calendar component*/\n this.activeView = FdCalendarViewEnum.Day;\n /**\n * The placement of the popover. It can be one of: top, top-start, top-end, bottom,\n * bottom-start, bottom-end, right, right-start, right-end, left, left-start, left-end.\n */\n this.placement = 'bottom-start';\n /** Defines if date picker should be closed after date choose */\n this.closeOnDateChoose = true;\n /** Enables Today-Selection-Button if true */\n this.showTodayButton = false;\n /** Label for Today-Selection-Button */\n this.todayButtonLabel = 'Today';\n /**\n * @deprecated Popover is toggled with f4 key\n */\n this.buttonFocusable = false;\n /**\n * Special days mark, it can be used by passing array of object with\n * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:\n * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section\n * Rule accepts method with FdDate object as a parameter. ex:\n * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.\n */\n this.specialDaysRules = [];\n /**\n * Object to customize year grid,\n * Row, Columns and method to display year can be modified\n */\n this.yearGrid = {\n rows: 4,\n cols: 5\n };\n /**\n * Object to customize aggregated year grid,\n * Row, Columns and method to display year can be modified\n */\n this.aggregatedYearGrid = {\n rows: 4,\n cols: 3\n };\n /**\n * Whether user wants to mark sunday/saturday with `fd-calendar__item--weekend` class\n */\n this.markWeekends = true;\n /**\n * Whether user wants to show week numbers next to days\n */\n this.showWeekNumbers = true;\n /**\n * Whether the user wants to select multiple days or multiple range dates.\n * If `displayWeekNumbers` is true, the user can click on the week number to mark the related row.\n * The user can click on week days to mark the related column.\n * Note: Clickable selection for week row or column does not work for range selections.\n */\n this.allowMultipleSelection = false;\n /** Should date picker be inlined. */\n this.inline = true;\n /**\n * Whether to recalculate value from the input as user types or on blur.\n * By default, updates the value as user types.\n * @default false\n */\n this.processInputOnBlur = false;\n /**\n * Whether to prevent page scrolling when focusing date picker input field after calendar has been closed.\n */\n this.preventScrollOnFocus = false;\n /** Whether date picker should rendered in mobile mode. */\n this.mobile = false;\n /** Whether calendar is used inside mobile in landscape mode, it also adds close button on right side */\n this.mobileLandscape = false;\n /** Whether calendar is used inside mobile in portrait mode */\n this.mobilePortrait = false;\n /** Whether to select and display the date range in MM/YYYY or YYYY format\n * For month and year format value is 'month'\n * For year format value is 'year'\n */\n this.dateRangeFormat = '';\n /** Event emitted when the state of the isOpen property changes. */\n this.isOpenChange = new EventEmitter();\n /** Event thrown every time selected date in single mode is changed */\n this.selectedDateChange = new EventEmitter();\n /** Event thrown every time the selected dates in multiple mode are changed. */\n this.selectedMultipleDatesChange = new EventEmitter();\n /** Event thrown every time selected first or last date in range mode is changed */\n this.selectedRangeDateChange = new EventEmitter();\n /** Event thrown every time the first or last date in multiple range mode is changed. */\n this.selectedMultipleDateRangesChange = new EventEmitter();\n /** Event thrown every time calendar active view is changed */\n this.activeViewChange = new EventEmitter();\n /** Whether to display the calendar legend below the calendar. Default is false. */\n this.showCalendarLegend = input(false, ...(ngDevMode ? [{ debugName: \"showCalendarLegend\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n /** Whether the legend should display in column layout instead of row layout. Default is false. */\n this.legendCol = input(false, ...(ngDevMode ? [{ debugName: \"legendCol\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n /** @hidden */\n this._message = null;\n /** @hidden */\n this._messageTriggers = ['focusin', 'focusout'];\n /** @hidden The value of the input */\n this._inputFieldDate = null;\n /** @hidden Whether the date input is invalid */\n this._isInvalidDateInput = false;\n /** @hidden */\n this._showPopoverContents = false;\n /** @hidden */\n this._formValueStateMessageId = `fd-date-picker-form-message-${datePickerCounter++}`;\n /** @hidden */\n this._isOpen = false;\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._subscriptions = new Subscription();\n /** @hidden */\n this._state = 'default';\n /** @hidden */\n this._injector = inject(Injector);\n /** @hidden */\n this._dynamicComponentService = inject(DynamicComponentService);\n /** @hidden */\n this._focusTrapService = inject(FocusTrapService, {\n optional: true\n });\n /**\n * Function used to disable certain dates in the calendar.\n */\n this.disableFunction = () => false;\n /**\n * Function used to disable certain dates in the calendar for the range start selection.\n */\n this.disableRangeStartFunction = () => false;\n /**\n * Function used to disable certain dates in the calendar for the range end selection.\n */\n this.disableRangeEndFunction = () => false;\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n if (!this._dateTimeAdapter) {\n throw createMissingDateImplementationError('DateTimeAdapter');\n }\n if (!this._dateTimeFormats) {\n throw createMissingDateImplementationError('DATE_TIME_FORMATS');\n }\n }\n /** @hidden */\n dialogApprove() { }\n /** @hidden */\n dialogDismiss(prevValue) {\n if (this.allowMultipleSelection) {\n if (this._isMultipleDateRanges(prevValue)) {\n this.handleMultipleDateRangesChange(prevValue);\n }\n else {\n const value = prevValue;\n this.handleMultipleDatesChange(value);\n }\n }\n else {\n if (this._isDateRange(prevValue)) {\n this.handleRangeDateChange(prevValue);\n }\n else {\n const value = prevValue;\n this.handleSingleDateChange(value);\n }\n }\n }\n /** @hidden */\n ngOnInit() {\n // initial view should be month or year if dateRangeFormat is provided\n if (this.dateRangeFormat === 'month') {\n this.activeView = FdCalendarViewEnum.Month;\n }\n else if (this.dateRangeFormat === 'year') {\n this.activeView = FdCalendarViewEnum.Year;\n }\n this._dateTimeAdapter.localeChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.formatInputDate(this.selectedDate);\n this._changeDetectionRef.detectChanges();\n });\n }\n /** @hidden */\n ngOnChanges(changes) {\n if ('isOpen' in changes) {\n this._showPopoverContents = this.isOpen;\n this._changeDetectionRef.detectChanges();\n }\n }\n /** @hidden */\n ngAfterViewInit() {\n this._InitialiseVariablesInMessageService();\n this._calendars.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n const calendar = this._calendars.first;\n this._calendarComponent = calendar;\n setTimeout(() => {\n if (this._calendarComponent) {\n this._focusTrapService?.pauseCurrentFocusTrap();\n }\n else {\n this._focusTrapService?.unpauseCurrentFocusTrap();\n }\n calendar?.setCurrentlyDisplayed(this._calendarPendingDate);\n calendar?.initialFocus();\n });\n });\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n this._mobileComponentRef?.destroy();\n }\n /**\n * Method that handle calendar active view change and throws event.\n */\n handleCalendarActiveViewChange(activeView) {\n this.activeViewChange.emit(activeView);\n }\n /** @hidden */\n closeFromCalendar() {\n if (this.type === CalendarTypeEnum.Single && this.closeOnDateChoose && !this.allowMultipleSelection) {\n this.onTouched();\n this.closeCalendar();\n }\n }\n /** Opens the calendar */\n openCalendar() {\n if (this.disabled) {\n return;\n }\n this._setOpenState(true);\n this._changeMessageVisibility();\n }\n /** Toggles the calendar open or closed */\n toggleCalendar() {\n if (this.disabled) {\n return;\n }\n this._setOpenState(!this.isOpen);\n if (!this.isOpen) {\n this.onTouched();\n }\n this._changeMessageVisibility();\n }\n /** Closes the calendar if it is open */\n closeCalendar() {\n if (!this.isOpen) {\n return;\n }\n this._setOpenState(false);\n this._changeMessageVisibility();\n }\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected single date changed\n */\n handleSingleDateChange(date) {\n if (!date) {\n return;\n }\n this.selectedDate = date;\n this.selectedDateChange.emit(date);\n this.onChange(date);\n this._refreshCurrentlyDisplayedCalendarDate(date);\n this.formatInputDate(date);\n this._isInvalidDateInput = !this.isModelValid();\n if (this.closeOnDateChoose && this.type === CalendarTypeEnum.Single) {\n this.closeCalendar();\n }\n }\n /**\n * @hidden\n * Method that is triggered by events from the calendar component when the selected multiple dates change.\n */\n handleMultipleDatesChange(dates) {\n if (!dates || dates.length === 0) {\n this.selectedMultipleDates = [];\n this.selectedMultipleDatesChange.emit([]);\n this.onChange([]);\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this._inputFieldDate = null;\n return;\n }\n this.selectedMultipleDates = dates;\n this.selectedMultipleDatesChange.emit(dates);\n this.onChange(dates);\n /** Assuming the first date in the array is used for refresh */\n if (this.showTodayButton) {\n this._refreshCurrentlyDisplayedCalendarDate(dates[0]);\n }\n this._inputFieldDate = this.formatDateArray(dates);\n this._isInvalidDateInput = !this.isModelValid();\n }\n /**\n * @hidden\n * Method that is triggered by events from calendar component, when there is selected range date changed\n */\n handleRangeDateChange(dates) {\n const startChanged = !this._dateTimeAdapter.datesEqual(dates.start, this.selectedRangeDate.start);\n const endChanged = !this._dateTimeAdapter.datesEqual(dates.end, this.selectedRangeDate.end);\n if (dates && (startChanged || endChanged)) {\n const shouldClose = this.closeOnDateChoose && dates.end !== null;\n if (dates.end !== null) {\n this._inputFieldDate = this._formatDateRange(dates);\n this.selectedRangeDate = {\n start: dates.start,\n end: dates.end\n };\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n this._refreshCurrentlyDisplayedCalendarDate(dates.start);\n this._isInvalidDateInput = !this.isModelValid();\n }\n if (shouldClose) {\n this.closeCalendar();\n }\n }\n }\n /**\n * @hidden\n * Method that is triggered by events from the calendar component when the selected multiple range dates change.\n */\n handleMultipleDateRangesChange(dates) {\n let hasChanged = false;\n // Check for changes in the date ranges\n if (dates.length !== this.selectedMultipleDateRanges.length) {\n hasChanged = true;\n }\n else {\n for (let i = 0; i < dates.length; i++) {\n if (!this._dateTimeAdapter.datesEqual(dates[i].start, this.selectedMultipleDateRanges[i].start) ||\n !this._dateTimeAdapter.datesEqual(dates[i].end, this.selectedMultipleDateRanges[i].end)) {\n hasChanged = true;\n break;\n }\n }\n }\n // If any date range has changed, update the internal state and emit changes\n if (hasChanged) {\n this.selectedMultipleDateRanges = dates;\n // Update the formatted input field\n this._inputFieldDate = this._formatMultipleDateRanges(dates);\n // Emit the change event\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n // Perform any additional actions such as updating the model or refreshing the calendar\n this.onChange(this.selectedMultipleDateRanges);\n // if you want to refresh the calendar view, you can use the following line\n // this._refreshCurrentlyDisplayedCalendarDate(dates[0].start);\n this._calendarPendingDate = dates[0].start;\n this._isInvalidDateInput = !this.isModelValid();\n }\n }\n /**\n * @hidden\n * Method that is triggered date formatting in the date control\n */\n formatInputDate(date) {\n if (!date) {\n return;\n }\n this._inputFieldDate = this._formatDate(date);\n }\n /**\n * @hidden\n * Method that is triggered when Today-Selection-Button clicked, it changes selected date or date range to today's date\n */\n onTodayButtonClick() {\n const todayDate = this._dateTimeAdapter.today();\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n this.handleMultipleDatesChange([todayDate]);\n this.closeFromCalendar();\n }\n else if (this.type === CalendarTypeEnum.Range) {\n this.handleMultipleDateRangesChange([\n {\n start: todayDate,\n end: todayDate\n }\n ]);\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n this.handleSingleDateChange(todayDate);\n this.closeFromCalendar();\n }\n else if (this.type === CalendarTypeEnum.Range) {\n this.handleRangeDateChange({\n start: todayDate,\n end: todayDate\n });\n }\n }\n }\n /**\n * @hidden\n * Method that is triggered when the text input is confirmed to ba changed, by clicking enter, or blur\n */\n handleInputChange(strDate, isTypeEvent) {\n if ((isTypeEvent && this.processInputOnBlur) || (!isTypeEvent && !this.processInputOnBlur)) {\n // if processInputOnBlur === true, ignore type event\n // if processInputOnBlur === false, ignore blur/enter event\n return;\n }\n this.dateStringUpdate(strDate);\n }\n /**\n * @hidden\n * Function that implements Validator Interface, adds validation support for forms\n */\n validate() {\n return this.isModelValid()\n ? null\n : {\n dateValidation: {\n valid: false\n }\n };\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /** @hidden */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectionRef.detectChanges();\n }\n /**\n * @hidden\n * Function that provides support for ControlValueAccessor that allows to use [(ngModel)] or forms\n */\n writeValue(selected) {\n /** If written value is not defined, null, empty string */\n if (!selected) {\n this._inputFieldDate = '';\n this._refreshCurrentlyDisplayedCalendarDate(this._dateTimeAdapter.today());\n this.selectedRangeDate = {\n start: null,\n end: null\n };\n this.selectedDate = null;\n this.selectedMultipleDates = [];\n this.selectedMultipleDateRanges = [];\n this._changeDetectionRef.detectChanges();\n return;\n }\n if (this.allowMultipleSelection && Array.isArray(selected)) {\n if (this.type === CalendarTypeEnum.Single) {\n /**\n * For single mode, if the date is invalid, model is changed, it refreshes currently\n * input field text, but it does not refresh currently displayed day\n */\n // selected = this._parseDate(selected)\n selected = selected;\n this.selectedMultipleDates = selected;\n this._inputFieldDate = this.formatDateArray(selected);\n this._refreshCurrentlyDisplayedCalendarDate(selected[0]);\n }\n if (this.type === CalendarTypeEnum.Range) {\n /**\n * For range mode, if the date is invalid, model is changed, but it does not refresh currently\n * displayed day view, or input field text\n */\n selected = selected;\n if (selected && selected.length > 0) {\n const filteredRanges = selected.filter((range) => range.start !== null && range.end !== null);\n if (filteredRanges.length > 0) {\n this.selectedMultipleDateRanges = filteredRanges.map((range) => ({\n start: this._parseDate(range.start),\n end: this._parseDate(range.end)\n }));\n this._refreshCurrentlyDisplayedCalendarDate(filteredRanges[0].start);\n this._inputFieldDate = this._formatMultipleDateRanges(filteredRanges);\n }\n else {\n this._inputFieldDate = '';\n }\n }\n else {\n this._inputFieldDate = '';\n }\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n /**\n * For single mode, if the date is invalid, model is changed, it refreshes currently\n * input field text, but it does not refresh currently displayed day\n */\n selected = this._parseDate(selected);\n this.selectedDate = selected;\n this._inputFieldDate = this._formatDate(selected);\n this._refreshCurrentlyDisplayedCalendarDate(selected);\n }\n if (this.type === CalendarTypeEnum.Range) {\n /**\n * For range mode, if the date is invalid, model is changed, but it does not refresh currently\n * displayed day view, or input field text\n */\n selected = selected;\n if (selected?.start) {\n this.selectedRangeDate = {\n start: this._parseDate(selected.start),\n end: this._parseDate(selected.end)\n };\n this._refreshCurrentlyDisplayedCalendarDate(selected.start);\n this._inputFieldDate = this._formatDateRange(selected);\n }\n else {\n this._inputFieldDate = '';\n }\n }\n }\n this._isInvalidDateInput = !this.isModelValid();\n this._changeDetectionRef.detectChanges();\n }\n /**\n * @hidden\n * Method, which is responsible for transforming string to date, depending on type or\n * validation the results are different. It also changes the state of _isInvalidDateInput\n */\n dateStringUpdate(dateStr) {\n this._inputFieldDate = dateStr;\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n this.updateMultipleDates(dateStr);\n }\n else {\n this._updateMultipleDateRanges(dateStr);\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n this._updateSingleDate(dateStr);\n }\n else {\n this._updateRangeDate(dateStr);\n }\n }\n }\n /** Method that provides information if model selected date/dates have properly types and are valid */\n isModelValid() {\n if (this.allowMultipleSelection) {\n if (this.type === CalendarTypeEnum.Single) {\n return this._isMultipleModelValid(this.selectedMultipleDates);\n }\n else {\n return this._isMultipleRangesModelValid(this.selectedMultipleDateRanges);\n }\n }\n else {\n if (this.type === CalendarTypeEnum.Single) {\n return this._isSingleModelValid(this.selectedDate);\n }\n else {\n return this._isRangeModelValid(this.selectedRangeDate);\n }\n }\n }\n /** Returns current selected date. */\n getSelectedDate() {\n return (this.selectedDate || this.selectedMultipleDates || this.selectedRangeDate || this.selectedMultipleDateRanges);\n }\n /** @hidden */\n _changeMessageVisibility() {\n if (this.isOpen) {\n this._popoverFormMessage.hide();\n }\n else {\n this._popoverFormMessage.show();\n }\n }\n /** @hidden */\n _onOpenStateChanged(isOpen) {\n this.isOpenChange.emit(isOpen);\n this._changeMessageVisibility();\n // focus input control every time popup is closed\n if (!isOpen && this._inputElement) {\n this._inputElement.nativeElement.focus({\n preventScroll: this.preventScrollOnFocus\n });\n }\n }\n /**\n * Renders the calendar right before the popover is opened.\n * Used for correct calculations of overlay position and size.\n */\n _beforePopoverOpen() {\n this._showPopoverContents = true;\n this._changeDetectionRef.detectChanges();\n }\n /** @hidden */\n _onBlur(event) {\n this.onTouched();\n this.handleInputChange(event.target.value, false);\n }\n /** Method that returns info if single model given is valid */\n _isSingleModelValid(date) {\n return (this._isDateValid(date) && !this.disableFunction(date)) || (!date && this.allowNull);\n }\n /** Method that returns info if multiple date model given is valid */\n _isMultipleModelValid(dates) {\n return dates?.every((date) => this._isSingleModelValid(date));\n }\n /** Method that returns info if range date model given is valid */\n _isRangeModelValid(fdRangeDate) {\n return ((fdRangeDate && this._isStartDateValid(fdRangeDate.start) && this._isEndDateValid(fdRangeDate.end)) ||\n (!fdRangeDate.start && !fdRangeDate.end && this.allowNull));\n }\n /** Method that returns info if multiple range date model given is valid */\n _isMultipleRangesModelValid(ranges) {\n if (!ranges || ranges.length === 0) {\n return this.allowNull;\n }\n return ranges.every((range) => range.start && range.end && this._isRangeModelValid(range));\n }\n /** Method that returns info if end date model given is valid */\n _isEndDateValid(endDate) {\n return this._isDateValid(endDate) && !this.disableRangeEndFunction(endDate);\n }\n /** Method that returns info if start date model given is valid */\n _isStartDateValid(startDate) {\n return this._isDateValid(startDate) && !this.disableRangeStartFunction(startDate);\n }\n /** Method that returns info if given date model is valid */\n _isDateValid(date) {\n return this._dateTimeAdapter.isValid(date);\n }\n /** @hidden */\n _refreshCurrentlyDisplayedCalendarDate(date) {\n this._calendarPendingDate = date;\n this._calendarComponent?.setCurrentlyDisplayed(date);\n }\n /** @hidden */\n _formatDate(date) {\n if (this.customDateTimeFormat) {\n return this._dateTimeAdapter.format(date, this.customDateTimeFormat);\n }\n return this._dateTimeAdapter.format(date, this._dateTimeFormats.display.dateInput);\n }\n /** @hidden */\n formatDateArray(dates) {\n return dates.map((date) => this._formatDate(date)).join(', ');\n }\n /** @hidden */\n _parseDate(date) {\n return this._dateTimeAdapter.parse(date, this._dateTimeFormats.parse.dateInput);\n }\n /**\n * Helper method to parse a date string into an array of dates.\n * @param dateStr The date string to parse.\n * @returns An array of dates.\n */\n parseDateString(dateStr) {\n return dateStr\n .split(',')\n .map((date) => this._parseDate(date.trim()))\n .filter((date) => date !== null);\n }\n /** @hidden */\n _formatDateRange(dateRange) {\n const startDate = this._formatDate(dateRange.start);\n const endDate = this._formatDate(dateRange.end);\n return startDate + this._rangeDelimiter + endDate;\n }\n /** @hidden */\n _formatMultipleDateRanges(dateRanges) {\n return dateRanges.map((dateRange) => this._formatDateRange(dateRange)).join(', ');\n }\n /** @hidden */\n _InitialiseVariablesInMessageService() {\n this._popoverFormMessage.init(this._inputGroupElement);\n this._popoverFormMessage.triggers = this._messageTriggers;\n this._popoverFormMessage.message = this._messagePopoverTemplate;\n }\n /** @hidden */\n _setOpenState(isOpen) {\n this._showPopoverContents = isOpen;\n this._changeDetectionRef.detectChanges();\n this.isOpen = isOpen;\n this.isOpenChange.emit(this.isOpen);\n this._changeDetectionRef.detectChanges();\n }\n /** @hidden */\n _setUpMobileMode() {\n const injector = Injector.create({\n providers: [\n { provide: FD_DATE_PICKER_COMPONENT, useValue: this },\n {\n provide: FD_DATE_PICKER_MOBILE_CONFIG,\n useValue: { calendarTemplate: this._calendarTemplate, controlTemplate: this._controlTemplate }\n }\n ],\n parent: this._injector\n });\n this._mobileComponentRef = this._dynamicComponentService.createDynamicComponent({}, (DatePickerMobileComponent), {\n container: 'body'\n }, {\n injector\n });\n }\n /** @hidden */\n _isDateRange(value) {\n return !!value && value.start && value.end;\n }\n /** @hidden */\n _isMultipleDateRanges(value) {\n return Array.isArray(value) && value.every((item) => this._isDateRange(item));\n }\n /**\n * @hidden\n * Updates the selected single date from a date string.\n * @param dateStr The date string to parse and update the selected date.\n */\n _updateSingleDate(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedDate = null;\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedDate);\n this.onChange(this.selectedDate);\n this.selectedDateChange.emit(this.selectedDate);\n return;\n }\n const date = this._parseDate(dateStr);\n if (!this._dateTimeAdapter.datesEqual(date, this.selectedDate)) {\n this._isInvalidDateInput = !this._isSingleModelValid(date);\n if (!this._isInvalidDateInput) {\n this._refreshCurrentlyDisplayedCalendarDate(date);\n }\n this.selectedDate = date;\n this.onChange(this.selectedDate);\n this.selectedDateChange.emit(this.selectedDate);\n }\n }\n /**\n * @hidden\n * Updates the selected range date from a date string.\n * @param dateStr The date string to parse and update the selected range date.\n */\n _updateRangeDate(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedRangeDate = { start: null, end: null };\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedRangeDate.start);\n this.onChange(this.selectedRangeDate);\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n return;\n }\n const [startDateStr, endDateStr] = dateStr.split(this._rangeDelimiter);\n const startDate = this._parseDate(startDateStr);\n const endDate = this._parseDate(endDateStr);\n if (!this._dateTimeAdapter.datesEqual(startDate, this.selectedRangeDate.start) ||\n !this._dateTimeAdapter.datesEqual(endDate, this.selectedRangeDate.end)) {\n let selectedRangeDate = null;\n if (this._dateTimeAdapter.isValid(startDate) &&\n this._dateTimeAdapter.isValid(endDate) &&\n this._dateTimeAdapter.compareDate(startDate, endDate) > 0) {\n selectedRangeDate = { start: endDate, end: startDate };\n }\n else {\n selectedRangeDate = { start: startDate, end: endDate };\n }\n this._isInvalidDateInput = !this._isRangeModelValid(selectedRangeDate);\n this.selectedRangeDate = selectedRangeDate;\n this.selectedRangeDateChange.emit(this.selectedRangeDate);\n this.onChange(this.selectedRangeDate);\n if (this._isStartDateValid(this.selectedRangeDate.start)) {\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedRangeDate.start);\n }\n }\n }\n /**\n * @hidden\n * Updates the selected multiple dates from a date string.\n * @param dateStr The date string to parse and update the selected multiple dates.\n */\n updateMultipleDates(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedMultipleDates = [];\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this.onChange(this.selectedMultipleDates);\n this.selectedMultipleDatesChange.emit(this.selectedMultipleDates);\n return;\n }\n const parsedDates = this.parseDateString(dateStr);\n // Check if the new parsed dates are different from the previously selected dates\n const datesChanged = !this._areDatesEqual(parsedDates, this.selectedMultipleDates);\n if (datesChanged) {\n this._isInvalidDateInput = !this._isMultipleModelValid(parsedDates);\n if (!this._isInvalidDateInput) {\n this._refreshCurrentlyDisplayedCalendarDate(parsedDates[0]);\n }\n this.selectedMultipleDates = parsedDates;\n this.onChange(this.selectedMultipleDates);\n this.selectedMultipleDatesChange.emit(this.selectedMultipleDates);\n }\n }\n /** Helper method to compare two arrays of dates */\n _areDatesEqual(dates1, dates2) {\n if (dates1.length !== dates2.length) {\n return false;\n }\n return dates1.every((date, index) => this._dateTimeAdapter.datesEqual(date, dates2[index]));\n }\n /**\n * @hidden\n * Updates the selected multiple date ranges from a date string.\n * @param dateStr The date string to parse and update the selected multiple date ranges.\n */\n _updateMultipleDateRanges(dateStr) {\n if (!dateStr) {\n this._isInvalidDateInput = !this.allowNull;\n this.selectedMultipleDateRanges = [{ start: null, end: null }];\n this._refreshCurrentlyDisplayedCalendarDate(null);\n this.onChange(this.selectedMultipleDateRanges);\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n return;\n }\n const rangeStrings = dateStr.split(',').map((range) => range.trim());\n const parsedRanges = rangeStrings.map((rangeStr) => {\n const [startStr, endStr] = rangeStr.split(this._rangeDelimiter).map((date) => date.trim());\n return {\n start: this._parseDate(startStr),\n end: this._parseDate(endStr)\n };\n });\n // Check if the new parsed ranges are different from the previously selected ranges\n const rangesChanged = !this._areDateRangesEqual(parsedRanges, this.selectedMultipleDateRanges);\n this._isInvalidDateInput = !this._isMultipleRangesModelValid(parsedRanges);\n if (!this._isInvalidDateInput && rangesChanged) {\n if (this._isStartDateValid(this.selectedMultipleDateRanges[0].start)) {\n this._refreshCurrentlyDisplayedCalendarDate(this.selectedMultipleDateRanges[0].start);\n }\n this.selectedMultipleDateRanges = parsedRanges;\n this.onChange(this.selectedMultipleDateRanges);\n this.selectedMultipleDateRangesChange.emit(this.selectedMultipleDateRanges);\n }\n }\n /** Helper method to compare two arrays of date ranges */\n _areDateRangesEqual(ranges1, ranges2) {\n if (ranges1.length !== ranges2.length) {\n return false;\n }\n return ranges1.every((range, index) => this._dateTimeAdapter.datesEqual(range.start, ranges2[index].start) &&\n this._dateTimeAdapter.datesEqual(range.end, ranges2[index].end));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DatetimeAdapter, optional: true }, { token: DATE_TIME_FORMATS, optional: true }, { token: i2.PopoverFormMessageService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: DatePickerComponent, isStandalone: true, selector: \"fd-date-picker\", inputs: { type: { classPropertyName: \"type\", publicName: \"type\", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: \"placeholder\", publicName: \"placeholder\", isSignal: false, isRequired: false, transformFunction: null }, inputId: { classPropertyName: \"inputId\", publicName: \"inputId\", isSignal: false, isRequired: false, transformFunction: null }, required: { classPropertyName: \"required\", publicName: \"required\", isSignal: false, isRequired: false, transformFunction: null }, customDateTimeFormat: { classPropertyName: \"customDateTimeFormat\", publicName: \"customDateTimeFormat\", isSignal: false, isRequired: false, transformFunction: null }, message: { classPropertyName: \"message\", publicName: \"message\", isSignal: false, isRequired: false, transformFunction: null }, messageTriggers: { classPropertyName: \"messageTriggers\", publicName: \"messageTriggers\", isSignal: false, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: \"selectedDate\", publicName: \"selectedDate\", isSignal: false, isRequired: false, transformFunction: null }, selectedMultipleDates: { classPropertyName: \"selectedMultipleDates\", publicName: \"selectedMultipleDates\", isSignal: false, isRequired: false, transformFunction: null }, selectedRangeDate: { classPropertyName: \"selectedRangeDate\", publicName: \"selectedRangeDate\", isSignal: false, isRequired: false, transformFunction: null }, selectedMultipleDateRanges: { classPropertyName: \"selectedMultipleDateRanges\", publicName: \"selectedMultipleDateRanges\", isSignal: false, isRequired: false, transformFunction: null }, startingDayOfWeek: { classPropertyName: \"startingDayOfWeek\", publicName: \"startingDayOfWeek\", isSignal: false, isRequired: false, transformFunction: null }, rangeHoverEffect: { classPropertyName: \"rangeHoverEffect\", publicName: \"rangeHoverEffect\", isSignal: false, isRequired: false, transformFunction: null }, useValidation: { classPropertyName: \"useValidation\", publicName: \"useValidation\", isSignal: false, isRequired: false, transformFunction: null }, allowNull: { classPropertyName: \"allowNull\", publicName: \"allowNull\", isSignal: false, isRequired: false, transformFunction: null }, activeView: { classPropertyName: \"activeView\", publicName: \"activeView\", isSignal: false, isRequired: false, transformFunction: null }, placement: { classPropertyName: \"placement\", publicName: \"placement\", isSignal: false, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: \"appendTo\", publicName: \"appendTo\", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: \"disabled\", publicName: \"disabled\", isSignal: false, isRequired: false, transformFunction: null }, closeOnDateChoose: { classPropertyName: \"closeOnDateChoose\", publicName: \"closeOnDateChoose\", isSignal: false, isRequired: false, transformFunction: null }, showTodayButton: { classPropertyName: \"showTodayButton\", publicName: \"showTodayButton\", isSignal: false, isRequired: false, transformFunction: null }, todayButtonLabel: { classPropertyName: \"todayButtonLabel\", publicName: \"todayButtonLabel\", isSignal: false, isRequired: false, transformFunction: null }, previousButtonDisableFunction: { classPropertyName: \"previousButtonDisableFunction\", publicName: \"previousButtonDisableFunction\", isSignal: false, isRequired: false, transformFunction: null }, nextButtonDisableFunction: { classPropertyName: \"nextButtonDisableFunction\", publicName: \"nextButtonDisableFunction\", isSignal: false, isRequired: false, transformFunction: null }, buttonFocusable: { classPropertyName: \"buttonFocusable\", publicName: \"buttonFocusable\", isSignal: false, isRequired: false, transformFunction: null }, specialDaysRules: { classPropertyName: \"specialDaysRules\", publicName: \"specialDaysRules\", isSignal: false, isRequired: false, transformFunction: null }, yearGrid: { classPropertyName: \"yearGrid\", publicName: \"yearGrid\", isSignal: false, isRequired: false, transformFunction: null }, aggregatedYearGrid: { classPropertyName: \"aggregatedYearGrid\", publicName: \"aggregatedYearGrid\", isSignal: false, isRequired: false, transformFunction: null }, markWeekends: { classPropertyName: \"markWeekends\", publicName: \"markWeekends\", isSignal: false, isRequired: false, transformFunction: null }, showWeekNumbers: { classPropertyName: \"showWeekNumbers\", publicName: \"showWeekNumbers\", isSignal: false, isRequired: false, transformFunction: null }, allowMultipleSelection: { classPropertyName: \"allowMultipleSelection\", publicName: \"allowMultipleSelection\", isSignal: false, isRequired: false, transformFunction: null }, inline: { classPropertyName: \"inline\", publicName: \"inline\", isSignal: false, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: \"ariaLabelledBy\", publicName: \"ariaLabelledBy\", isSignal: false, isRequired: false, transformFunction: null }, processInputOnBlur: { classPropertyName: \"processInputOnBlur\", publicName: \"processInputOnBlur\", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, preventScrollOnFocus: { classPropertyName: \"preventScrollOnFocus\", publicName: \"preventScrollOnFocus\", isSignal: false, isRequired: false, transformFunction: null }, mobile: { classPropertyName: \"mobile\", publicName: \"mobile\", isSignal: false, isRequired: false, transformFunction: null }, mobileConfig: { classPropertyName: \"mobileConfig\", publicName: \"mobileConfig\", isSignal: false, isRequired: false, transformFunction: null }, mobileLandscape: { classPropertyName: \"mobileLandscape\", publicName: \"mobileLandscape\", isSignal: false, isRequired: false, transformFunction: null }, mobilePortrait: { classPropertyName: \"mobilePortrait\", publicName: \"mobilePortrait\", isSignal: false, isRequired: false, transformFunction: null }, dateRangeFormat: { classPropertyName: \"dateRangeFormat\", publicName: \"dateRangeFormat\", isSignal: false, isRequired: false, transformFunction: null }, showCalendarLegend: { classPropertyName: \"showCalendarLegend\", publicName: \"showCalendarLegend\", isSignal: true, isRequired: false, transformFunction: null }, legendCol: { classPropertyName: \"legendCol\", publicName: \"legendCol\", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: \"state\", publicName: \"state\", isSignal: false, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: \"isOpen\", publicName: \"isOpen\", isSignal: false, isRequired: false, transformFunction: null }, disableFunction: { classPropertyName: \"disableFunction\", publicName: \"disableFunction\", isSignal: false, isRequired: false, transformFunction: null }, disableRangeStartFunction: { classPropertyName: \"disableRangeStartFunction\", publicName: \"disableRangeStartFunction\", isSignal: false, isRequired: false, transformFunction: null }, disableRangeEndFunction: { classPropertyName: \"disableRangeEndFunction\", publicName: \"disableRangeEndFunction\", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { isOpenChange: \"isOpenChange\", selectedDateChange: \"selectedDateChange\", selectedMultipleDatesChange: \"selectedMultipleDatesChange\", selectedRangeDateChange: \"selectedRangeDateChange\", selectedMultipleDateRangesChange: \"selectedMultipleDateRangesChange\", activeViewChange: \"activeViewChange\" }, host: { listeners: { \"blur\": \"onTouched()\" }, properties: { \"class.fd-date-picker\": \"true\", \"class.fd-date-picker-custom\": \"inline\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: FD_DATE_PICKER_COMPONENT,\n useExisting: DatePickerComponent\n },\n registerFormItemControl(DatePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService,\n CalendarLegendFocusingService\n ], viewQueries: [{ propertyName: \"_inputGroupElement\", first: true, predicate: [\"inputGroupComponent\"], descendants: true, read: ElementRef }, { propertyName: \"_inputElement\", first: true, predicate: InputGroupInputDirective, descendants: true, read: ElementRef }, { propertyName: \"_controlTemplate\", first: true, predicate: [\"controlTemplate\"], descendants: true }, { propertyName: \"_calendarTemplate\", first: true, predicate: [\"calendarTemplate\"], descendants: true }, { propertyName: \"_messagePopoverTemplate\", first: true, predicate: [\"popoverMessageTemplate\"], descendants: true }, { propertyName: \"_calendars\", predicate: CalendarComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? controlTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #popoverMessageTemplate>\\n @if (_message) {\\n <fd-form-message [embedded]=\\\"true\\\" [type]=\\\"state\\\">\\n {{ _message }}\\n </fd-form-message>\\n }\\n</ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n [(isOpen)]=\\\"isOpen\\\"\\n (beforeOpen)=\\\"_beforePopoverOpen()\\\"\\n (isOpenChange)=\\\"_onOpenStateChanged($event)\\\"\\n [triggers]=\\\"[]\\\"\\n [placement]=\\\"placement\\\"\\n [disabled]=\\\"disabled\\\"\\n [focusTrapped]=\\\"true\\\"\\n [focusAutoCapture]=\\\"false\\\"\\n [appendTo]=\\\"appendTo\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [attr.aria-expanded]=\\\"isOpen\\\" [attr.aria-hidden]=\\\"!isOpen\\\">\\n @if (_showPopoverContents) {\\n <ng-template [ngTemplateOutlet]=\\\"popoverMessageTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n <ng-template [ngTemplateOutlet]=\\\"calendarTemplate\\\"></ng-template>\\n }\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n #inputGroupComponent\\n [state]=\\\"state\\\"\\n [disabled]=\\\"disabled\\\"\\n [isControl]=\\\"true\\\"\\n [button]=\\\"true\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n glyph=\\\"appointment-2\\\"\\n [isExpanded]=\\\"isOpen\\\"\\n [glyphAriaLabel]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n [iconTitle]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n (addOnButtonClicked)=\\\"toggleCalendar()\\\"\\n >\\n <input\\n type=\\\"text\\\"\\n class=\\\"fd-input\\\"\\n fd-input-group-input\\n [disabled]=\\\"disabled\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [attr.id]=\\\"inputId\\\"\\n aria-haspopup=\\\"grid\\\"\\n aria-autocomplete=\\\"none\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-label]=\\\"_dateInputArialLabelKey | fdTranslate\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.aria-describedby]=\\\"_formValueStateMessageId\\\"\\n [ngModel]=\\\"_inputFieldDate\\\"\\n (keyup.enter)=\\\"handleInputChange($any($event.target).value, false)\\\"\\n (keydown.f4)=\\\"toggleCalendar()\\\"\\n (ngModelChange)=\\\"handleInputChange($event, true)\\\"\\n (click)=\\\"mobile && openCalendar()\\\"\\n (blur)=\\\"_onBlur($event)\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #calendarTemplate>\\n <fd-calendar\\n [activeView]=\\\"activeView\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [allowMultipleSelection]=\\\"allowMultipleSelection\\\"\\n [aggregatedYearGrid]=\\\"aggregatedYearGrid\\\"\\n [yearGrid]=\\\"yearGrid\\\"\\n [calType]=\\\"type\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n [disableFunction]=\\\"disableFunction\\\"\\n [disableRangeStartFunction]=\\\"disableRangeStartFunction\\\"\\n [disableRangeEndFunction]=\\\"disableRangeEndFunction\\\"\\n [selectedDate]=\\\"selectedDate\\\"\\n [selectedMultipleDates]=\\\"selectedMultipleDates\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [selectedMultipleDateRanges]=\\\"selectedMultipleDateRanges\\\"\\n [startingDayOfWeek]=\\\"startingDayOfWeek\\\"\\n [previousButtonDisableFunction]=\\\"previousButtonDisableFunction\\\"\\n [nextButtonDisableFunction]=\\\"nextButtonDisableFunction\\\"\\n [showCalendarLegend]=\\\"showCalendarLegend()\\\"\\n [legendCol]=\\\"legendCol()\\\"\\n [mobileLandscape]=\\\"mobile && mobileLandscape\\\"\\n [mobilePortrait]=\\\"mobile && mobilePortrait\\\"\\n [dateRangeFormat]=\\\"dateRangeFormat\\\"\\n (selectedDateChange)=\\\"handleSingleDateChange($event)\\\"\\n (selectedMultipleDatesChange)=\\\"handleMultipleDatesChange($event)\\\"\\n (selectedRangeDateChange)=\\\"handleRangeDateChange($event)\\\"\\n (selectedMultipleDateRangesChange)=\\\"handleMultipleDateRangesChange($event)\\\"\\n (activeViewChange)=\\\"handleCalendarActiveViewChange($event)\\\"\\n (closeCalendar)=\\\"closeFromCalendar()\\\"\\n ></fd-calendar>\\n @if (showTodayButton) {\\n <div fd-bar barDesign=\\\"footer\\\" class=\\\"fd-date-picker__bar\\\">\\n <div fd-bar-right>\\n <fd-bar-element>\\n <button\\n fd-button\\n [label]=\\\"'coreCalendar.todayLabel' | fdTranslate\\\"\\n (click)=\\\"onTodayButtonClick()\\\"\\n ></button>\\n </fd-bar-element>\\n </div>\\n </div>\\n }\\n</ng-template>\\n<div [style.display]=\\\"'none'\\\" aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_formValueStateMessageId\\\" aria-atomic=\\\"true\\\" aria-live=\\\"assertive\\\">\\n @switch (state) {\\n @case ('success') {\\n {{ 'coreDatePicker.valueStateSuccessMessage' | fdTranslate }}\\n }\\n @case ('information') {\\n {{ 'coreDatePicker.valueStateInformationMessage' | fdTranslate }}\\n }\\n @case ('warning') {\\n {{ 'coreDatePicker.valueStateWarningMessage' | fdTranslate }}\\n }\\n @case ('error') {\\n {{ 'coreDatePicker.valueStateErrorMessage' | fdTranslate }}\\n }\\n }\\n {{ _message }}\\n </div>\\n</div>\\n\", styles: [\".fd-date-picker-custom{display:inline-block}.fd-date-picker-custom fd-popover{display:block}.fd-date-picker-custom fd-calendar{border-radius:.25rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem)}.fd-date-picker__bar{overflow:hidden}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: PopoverModule }, { kind: \"component\", type: i3.PopoverControlComponent, selector: \"fd-popover-control, [fdPopoverControl]\" }, { kind: \"component\", type: i3.PopoverBodyComponent, selector: \"fd-popover-body\", inputs: [\"minWidth\", \"maxWidth\", \"minHeight\", \"maxHeight\"] }, { kind: \"component\", type: i3.PopoverComponent, selector: \"fd-popover\", inputs: [\"title\", \"trigger\", \"fixedPosition\", \"id\", \"mobile\", \"mobileConfig\", \"preventSpaceKeyScroll\"] }, { kind: \"component\", type: FormMessageComponent, selector: \"fd-form-message\", inputs: [\"type\", \"static\", \"embedded\", \"class\"] }, { kind: \"component\", type: InputGroupComponent, selector: \"fd-input-group\", inputs: [\"placement\", \"required\", \"inline\", \"addOnText\", \"buttonFocusable\", \"type\", \"glyph\", \"glyphFont\", \"button\", \"isControl\", \"showFocus\", \"isExpanded\", \"glyphAriaLabel\", \"addonButtonAriaHidden\", \"iconTitle\", \"ariaLabelledBy\", \"ariaLabel\"], outputs: [\"addOnButtonClicked\", \"search\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i4.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i4.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i4.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: CalendarComponent, selector: \"fd-calendar\", inputs: [\"selectedDate\", \"selectedMultipleDates\", \"selectedRangeDate\", \"selectedMultipleDateRanges\", \"markWeekends\", \"showWeekNumbers\", \"allowMultipleSelection\", \"mobileLandscape\", \"mobilePortrait\", \"activeView\", \"startingDayOfWeek\", \"calType\", \"id\", \"specialDaysRules\", \"yearGrid\", \"aggregatedYearGrid\", \"rangeHoverEffect\", \"dateRangeFormat\", \"previousButtonDisableFunction\", \"nextButtonDisableFunction\", \"showCalendarLegend\", \"legendCol\", \"escapeFocusFunction\", \"disableFunction\", \"disableRangeStartFunction\", \"disableRangeEndFunction\"], outputs: [\"activeViewChange\", \"selectedDateChange\", \"selectedMultipleDatesChange\", \"selectedRangeDateChange\", \"selectedMultipleDateRangesChange\", \"isValidDateChange\", \"closeCalendar\", \"closeClicked\"] }, { kind: \"component\", type: BarComponent, selector: \"[fd-bar]\", inputs: [\"class\", \"barDesign\", \"inPage\", \"inHomePage\", \"clear\", \"size\", \"role\"] }, { kind: \"directive\", type: BarRightDirective, selector: \"[fd-bar-right]\" }, { kind: \"directive\", type: BarElementDirective, selector: \"fd-bar-element\", inputs: [\"fullWidth\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-date-picker', host: {\n '(blur)': 'onTouched()',\n '[class.fd-date-picker]': 'true',\n '[class.fd-date-picker-custom]': 'inline'\n }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n },\n {\n provide: FD_DATE_PICKER_COMPONENT,\n useExisting: DatePickerComponent\n },\n registerFormItemControl(DatePickerComponent),\n PopoverFormMessageService,\n PopoverService,\n DynamicComponentService,\n CalendarLegendFocusingService\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n NgTemplateOutlet,\n PopoverModule,\n FormMessageComponent,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n CalendarComponent,\n BarComponent,\n BarRightDirective,\n BarElementDirective,\n ButtonComponent,\n FdTranslatePipe\n ], template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? controlTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #popoverMessageTemplate>\\n @if (_message) {\\n <fd-form-message [embedded]=\\\"true\\\" [type]=\\\"state\\\">\\n {{ _message }}\\n </fd-form-message>\\n }\\n</ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n [(isOpen)]=\\\"isOpen\\\"\\n (beforeOpen)=\\\"_beforePopoverOpen()\\\"\\n (isOpenChange)=\\\"_onOpenStateChanged($event)\\\"\\n [triggers]=\\\"[]\\\"\\n [placement]=\\\"placement\\\"\\n [disabled]=\\\"disabled\\\"\\n [focusTrapped]=\\\"true\\\"\\n [focusAutoCapture]=\\\"false\\\"\\n [appendTo]=\\\"appendTo\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [attr.aria-expanded]=\\\"isOpen\\\" [attr.aria-hidden]=\\\"!isOpen\\\">\\n @if (_showPopoverContents) {\\n <ng-template [ngTemplateOutlet]=\\\"popoverMessageTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n <ng-template [ngTemplateOutlet]=\\\"calendarTemplate\\\"></ng-template>\\n }\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n #inputGroupComponent\\n [state]=\\\"state\\\"\\n [disabled]=\\\"disabled\\\"\\n [isControl]=\\\"true\\\"\\n [button]=\\\"true\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n glyph=\\\"appointment-2\\\"\\n [isExpanded]=\\\"isOpen\\\"\\n [glyphAriaLabel]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n [iconTitle]=\\\"'coreDatePicker.displayCalendarToggleLabel' | fdTranslate\\\"\\n (addOnButtonClicked)=\\\"toggleCalendar()\\\"\\n >\\n <input\\n type=\\\"text\\\"\\n class=\\\"fd-input\\\"\\n fd-input-group-input\\n [disabled]=\\\"disabled\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [attr.id]=\\\"inputId\\\"\\n aria-haspopup=\\\"grid\\\"\\n aria-autocomplete=\\\"none\\\"\\n [attr.aria-expanded]=\\\"isOpen\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-label]=\\\"_dateInputArialLabelKey | fdTranslate\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.aria-describedby]=\\\"_formValueStateMessageId\\\"\\n [ngModel]=\\\"_inputFieldDate\\\"\\n (keyup.enter)=\\\"handleInputChange($any($event.target).value, false)\\\"\\n (keydown.f4)=\\\"toggleCalendar()\\\"\\n (ngModelChange)=\\\"handleInputChange($event, true)\\\"\\n (click)=\\\"mobile && openCalendar()\\\"\\n (blur)=\\\"_onBlur($event)\\\"\\n />\\n </fd-input-group>\\n</ng-template>\\n<ng-template #calendarTemplate>\\n <fd-calendar\\n [activeView]=\\\"activeView\\\"\\n [markWeekends]=\\\"markWeekends\\\"\\n [specialDaysRules]=\\\"specialDaysRules\\\"\\n [showWeekNumbers]=\\\"showWeekNumbers\\\"\\n [allowMultipleSelection]=\\\"allowMultipleSelection\\\"\\n [aggregatedYearGrid]=\\\"aggregatedYearGrid\\\"\\n [yearGrid]=\\\"yearGrid\\\"\\n [calType]=\\\"type\\\"\\n [rangeHoverEffect]=\\\"rangeHoverEffect\\\"\\n [disableFunction]=\\\"disableFunction\\\"\\n [disableRangeStartFunction]=\\\"disableRangeStartFunction\\\"\\n [disableRangeEndFunction]=\\\"disableRangeEndFunction\\\"\\n [selectedDate]=\\\"selectedDate\\\"\\n [selectedMultipleDates]=\\\"selectedMultipleDates\\\"\\n [selectedRangeDate]=\\\"selectedRangeDate\\\"\\n [selectedMultipleDateRanges]=\\\"selectedMultipleDateRanges\\\"\\n [startingDayOfWeek]=\\\"startingDayOfWeek\\\"\\n [previousButtonDisableFunction]=\\\"previousButtonDisableFunction\\\"\\n [nextButtonDisableFunction]=\\\"nextButtonDisableFunction\\\"\\n [showCalendarLegend]=\\\"showCalendarLegend()\\\"\\n [legendCol]=\\\"legendCol()\\\"\\n [mobileLandscape]=\\\"mobile && mobileLandscape\\\"\\n [mobilePortrait]=\\\"mobile && mobilePortrait\\\"\\n [dateRangeFormat]=\\\"dateRangeFormat\\\"\\n (selectedDateChange)=\\\"handleSingleDateChange($event)\\\"\\n (selectedMultipleDatesChange)=\\\"handleMultipleDatesChange($event)\\\"\\n (selectedRangeDateChange)=\\\"handleRangeDateChange($event)\\\"\\n (selectedMultipleDateRangesChange)=\\\"handleMultipleDateRangesChange($event)\\\"\\n (activeViewChange)=\\\"handleCalendarActiveViewChange($event)\\\"\\n (closeCalendar)=\\\"closeFromCalendar()\\\"\\n ></fd-calendar>\\n @if (showTodayButton) {\\n <div fd-bar barDesign=\\\"footer\\\" class=\\\"fd-date-picker__bar\\\">\\n <div fd-bar-right>\\n <fd-bar-element>\\n <button\\n fd-button\\n [label]=\\\"'coreCalendar.todayLabel' | fdTranslate\\\"\\n (click)=\\\"onTodayButtonClick()\\\"\\n ></button>\\n </fd-bar-element>\\n </div>\\n </div>\\n }\\n</ng-template>\\n<div [style.display]=\\\"'none'\\\" aria-hidden=\\\"true\\\">\\n <div [attr.id]=\\\"_formValueStateMessageId\\\" aria-atomic=\\\"true\\\" aria-live=\\\"assertive\\\">\\n @switch (state) {\\n @case ('success') {\\n {{ 'coreDatePicker.valueStateSuccessMessage' | fdTranslate }}\\n }\\n @case ('information') {\\n {{ 'coreDatePicker.valueStateInformationMessage' | fdTranslate }}\\n }\\n @case ('warning') {\\n {{ 'coreDatePicker.valueStateWarningMessage' | fdTranslate }}\\n }\\n @case ('error') {\\n {{ 'coreDatePicker.valueStateErrorMessage' | fdTranslate }}\\n }\\n }\\n {{ _message }}\\n </div>\\n</div>\\n\", styles: [\".fd-date-picker-custom{display:inline-block}.fd-date-picker-custom fd-popover{display:block}.fd-date-picker-custom fd-calendar{border-radius:.25rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem)}.fd-date-picker__bar{overflow:hidden}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DatetimeAdapter, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DATE_TIME_FORMATS]\n }] }, { type: i2.PopoverFormMessageService }], propDecorators: { type: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], inputId: [{\n type: Input\n }], required: [{\n type: Input\n }], customDateTimeFormat: [{\n type: Input\n }], message: [{\n type: Input\n }], messageTriggers: [{\n type: Input\n }], selectedDate: [{\n type: Input\n }], selectedMultipleDates: [{\n type: Input\n }], selectedRangeDate: [{\n type: Input\n }], selectedMultipleDateRanges: [{\n type: Input\n }], startingDayOfWeek: [{\n type: Input\n }], rangeHoverEffect: [{\n type: Input\n }], useValidation: [{\n type: Input\n }], allowNull: [{\n type: Input\n }], activeView: [{\n type: Input\n }], placement: [{\n type: Input\n }], appendTo: [{\n type: Input\n }], disabled: [{\n type: Input\n }], closeOnDateChoose: [{\n type: Input\n }], showTodayButton: [{\n type: Input\n }], todayButtonLabel: [{\n type: Input\n }], previousButtonDisableFunction: [{\n type: Input\n }], nextButtonDisableFunction: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], specialDaysRules: [{\n type: Input\n }], yearGrid: [{\n type: Input\n }], aggregatedYearGrid: [{\n type: Input\n }], markWeekends: [{\n type: Input\n }], showWeekNumbers: [{\n type: Input\n }], allowMultipleSelection: [{\n type: Input\n }], inline: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], processInputOnBlur: [{\n type: Input,\n args: [{ transform: booleanAttribute }]\n }], preventScrollOnFocus: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], mobileLandscape: [{\n type: Input\n }], mobilePortrait: [{\n type: Input\n }], dateRangeFormat: [{\n type: Input\n }], isOpenChange: [{\n type: Output\n }], selectedDateChange: [{\n type: Output\n }], selectedMultipleDatesChange: [{\n type: Output\n }], selectedRangeDateChange: [{\n type: Output\n }], selectedMultipleDateRangesChange: [{\n type: Output\n }], activeViewChange: [{\n type: Output\n }], _inputGroupElement: [{\n type: ViewChild,\n args: ['inputGroupComponent', {\n read: ElementRef\n }]\n }], _inputElement: [{\n type: ViewChild,\n args: [InputGroupInputDirective, {\n read: ElementRef\n }]\n }], _controlTemplate: [{\n type: ViewChild,\n args: ['controlTemplate']\n }], _calendarTemplate: [{\n type: ViewChild,\n args: ['calendarTemplate']\n }], _messagePopoverTemplate: [{\n type: ViewChild,\n args: ['popoverMessageTemplate']\n }], _calendars: [{\n type: ViewChildren,\n args: [CalendarComponent]\n }], state: [{\n type: Input\n }], isOpen: [{\n type: Input\n }], disableFunction: [{\n type: Input\n }], disableRangeStartFunction: [{\n type: Input\n }], disableRangeEndFunction: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBRUgsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQVksTUFBTSw0QkFBNEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsNkJBQTZCLEVBRTdCLGdCQUFnQixFQUVoQixTQUFTLEVBR1Qsa0JBQWtCLEVBRXJCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxF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QUMsa0JBQWtCO2dCQUtaLHVCQUF1QjtzQkFEdkMsU0FBUzt1QkFBQyx3QkFBd0I7Z0JBS2xCLFVBQVU7c0JBRDFCLFlBQVk7dUJBQUMsaUJBQWlCO2dCQWUzQixLQUFLO3NCQURSLEtBQUs7Z0JBZUYsTUFBTTtzQkFEVCxLQUFLO2dCQXVHTixlQUFlO3NCQURkLEtBQUs7Z0JBT04seUJBQXlCO3NCQUR4QixLQUFLO2dCQU9OLHVCQUF1QjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBpbnB1dCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgRm9jdXNUcmFwU2VydmljZSwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCYXJDb21wb25lbnQsIEJhckVsZW1lbnREaXJlY3RpdmUsIEJhclJpZ2h0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7XG4gICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgQ2FsZW5kYXJMZWdlbmRGb2N1c2luZ1NlcnZpY2UsXG4gICAgQ2FsZW5kYXJUeXBlLFxuICAgIENhbGVuZGFyVHlwZUVudW0sXG4gICAgQ2FsZW5kYXJZZWFyR3JpZCxcbiAgICBEYXRlUmFuZ2UsXG4gICAgRGF5c09mV2VlayxcbiAgICBGZENhbGVuZGFyVmlldyxcbiAgICBGZENhbGVuZGFyVmlld0VudW0sXG4gICAgTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVGdW5jdGlvblxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY2FsZW5kYXInO1xuaW1wb3J0IHsgREFURV9USU1FX0ZPUk1BVFMsIERhdGV0aW1lQWRhcHRlciwgRGF0ZVRpbWVGb3JtYXRzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RhdGV0aW1lJztcbmltcG9ydCB7XG4gICAgRm9ybUl0ZW1Db250cm9sLFxuICAgIEZvcm1NZXNzYWdlQ29tcG9uZW50LFxuICAgIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsXG4gICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2xcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgSW5wdXRHcm91cENvbXBvbmVudCwgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgUG9wb3Zlck1vZHVsZSwgUG9wb3ZlclNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBQbGFjZW1lbnQsIFNwZWNpYWxEYXlSdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5pbXBvcnQgeyBGZExhbmd1YWdlS2V5SWRlbnRpZmllciwgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlck1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1waWNrZXItbW9iaWxlL2RhdGUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJy4vZGF0ZS1waWNrZXIubW9kZWwnO1xuaW1wb3J0IHsgY3JlYXRlTWlzc2luZ0RhdGVJbXBsZW1lbnRhdGlvbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgRkRfREFURV9QSUNLRVJfQ09NUE9ORU5ULCBGRF9EQVRFX1BJQ0tFUl9NT0JJTEVfQ09ORklHIH0gZnJvbSAnLi90b2tlbnMnO1xuXG5sZXQgZGF0ZVBpY2tlckNvdW50ZXIgPSAwO1xuXG4vKipcbiAqIFRoZSBkYXRldGltZSBwaWNrZXIgY29tcG9uZW50IGlzIGFuIG9waW5pb25hdGVkIGNvbXBvc2l0aW9uIG9mIHRoZSBmZC1wb3BvdmVyIGFuZFxuICogZmQtY2FsZW5kYXIgY29tcG9uZW50cyB0byBhY2NvbXBsaXNoIHRoZSBVSSBwYXR0ZXJuIGZvciBwaWNraW5nIGEgZGF0ZS5cbiAqXG4gKiBTdXBwb3J0cyBBbmd1bGFyIEZvcm1zLlxuICogYGBgaHRtbFxuICogPGZkLWRhdGUtcGlja2VyIFsobmdNb2RlbCldPVwiZGF0ZVwiPjwvZmQtZGF0ZS1waWNrZXI+XG4gKiBgYGBcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtZGF0ZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnb25Ub3VjaGVkKCknLFxuICAgICAgICAnW2NsYXNzLmZkLWRhdGUtcGlja2VyXSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1kYXRlLXBpY2tlci1jdXN0b21dJzogJ2lubGluZSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfREFURV9QSUNLRVJfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IERhdGVQaWNrZXJDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgIFBvcG92ZXJGb3JtTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIFBvcG92ZXJTZXJ2aWNlLFxuICAgICAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgQ2FsZW5kYXJMZWdlbmRGb2N1c2luZ1NlcnZpY2VcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBQb3BvdmVyTW9kdWxlLFxuICAgICAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgSW5wdXRHcm91cENvbXBvbmVudCxcbiAgICAgICAgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgICAgIEJhckNvbXBvbmVudCxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50PEQ+XG4gICAgaW1wbGVtZW50c1xuICAgICAgICBEYXRlUGlja2VyPEQ+LFxuICAgICAgICBPbkluaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgT25DaGFuZ2VzLFxuICAgICAgICBBZnRlclZpZXdJbml0LFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgVmFsaWRhdG9yLFxuICAgICAgICBGb3JtSXRlbUNvbnRyb2xcbntcbiAgICAvKiogVGhlIHR5cGUgb2YgY2FsZW5kYXIsICdzaW5nbGUnIGZvciBzaW5nbGUgZGF0ZSBzZWxlY3Rpb24gb3IgJ3JhbmdlJyBmb3IgYSByYW5nZSBvZiBkYXRlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHR5cGU6IENhbGVuZGFyVHlwZSA9IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlO1xuXG4gICAgLyoqIERhdGUgcGlja2VyIGlucHV0IHBsYWNlaG9sZGVyIHN0cmluZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2Vob2xkZXIgPSAnJztcblxuICAgIC8qKiBJRCBhdHRyaWJ1dGUgZm9yIGlucHV0IGVsZW1lbnQgaW5zaWRlIERhdGVQaWNrZXIgY29tcG9uZW50ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dElkOiBzdHJpbmc7XG5cbiAgICAvKiogSWYgaXQgaXMgbWFuZGF0b3J5IGZpZWxkICovXG4gICAgQElucHV0KClcbiAgICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIERlZmluZSBhIGN1c3RvbSBkYXRldGltZSBmb3JtYXQuIENhbiBiZSBhIHN0cmluZyBmb3IgRGF5anNEYXRldGltZUFkYXB0ZXIgb3Igb2JqZWN0IGZvciBGZERhdGV0aW1lQWRhcHRlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tRGF0ZVRpbWVGb3JtYXQ6IHVua25vd247XG5cbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgaW4gbWVzc2FnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIC8qKiBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG1lc3NhZ2UgYm94LlxuICAgICAqICBBY2NlcHRzIGFueSBbSFRNTCBET00gRXZlbnRzXShodHRwczovL3d3dy53M3NjaG9vbHMuY29tL2pzcmVmL2RvbV9vYmpfZXZlbnQuYXNwKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBtZXNzYWdlVHJpZ2dlcnModHJpZ2dlcnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VUcmlnZ2VycyA9IHRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UudHJpZ2dlcnMgPSB0cmlnZ2VycztcbiAgICB9XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIGluIHNpbmdsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWREYXRlOiBOdWxsYWJsZTxEPjtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgbW9kZWwgaW4gbXVsdGlwbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkTXVsdGlwbGVEYXRlczogQXJyYXk8RD4gPSBbXTtcblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUgbW9kZWwgd2l0aCBzdGFydCBhbmQgZW5kIGluIHJhbmdlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZFJhbmdlRGF0ZTogRGF0ZVJhbmdlPEQ+ID0geyBzdGFydDogbnVsbCwgZW5kOiBudWxsIH07XG5cbiAgICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRlIG1vZGVsIHdpdGggbXVsdGlwbGUgcmFuZ2VzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXM6IEFycmF5PERhdGVSYW5nZTxEPj4gPSBbXTtcblxuICAgIC8qKiBUaGUgZGF5IG9mIHRoZSB3ZWVrIHRoZSBjYWxlbmRhciBzaG91bGQgc3RhcnQgb24uIDEgcmVwcmVzZW50cyBTdW5kYXksIDIgaXMgTW9uZGF5LCAzIGlzIFR1ZXNkYXksIGFuZCBzbyBvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXJ0aW5nRGF5T2ZXZWVrOiBEYXlzT2ZXZWVrO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB1c2VyIHdhbnRzIHRvIG1hcmsgZGF5IGNlbGxzIG9uIGhvdmVyLlxuICAgICAqIFdvcmtzIG9ubHkgb24gcmFuZ2UgbW9kZSwgd2hlbiBzdGFydCBkYXRlIGlzIHNlbGVjdGVkIG9uIERheSBWaWV3LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmFuZ2VIb3ZlckVmZmVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gdmFsaWRhdGUgdGhlIGRhdGUgcGlja2VyIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlVmFsaWRhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciBhIG51bGwgaW5wdXQgaXMgY29uc2lkZXJlZCB2YWxpZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TnVsbCA9IHRydWU7XG5cbiAgICAvKiogQWN0dWFsbHkgc2hvd24gYWN0aXZlIHZpZXcgb25lIG9mICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyBpbiBjYWxlbmRhciBjb21wb25lbnQqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uRGF5O1xuXG4gICAgLyoqXG4gICAgICogIFRoZSBwbGFjZW1lbnQgb2YgdGhlIHBvcG92ZXIuIEl0IGNhbiBiZSBvbmUgb2Y6IHRvcCwgdG9wLXN0YXJ0LCB0b3AtZW5kLCBib3R0b20sXG4gICAgICogIGJvdHRvbS1zdGFydCwgYm90dG9tLWVuZCwgcmlnaHQsIHJpZ2h0LXN0YXJ0LCByaWdodC1lbmQsIGxlZnQsIGxlZnQtc3RhcnQsIGxlZnQtZW5kLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGxhY2VtZW50OiBQbGFjZW1lbnQgPSAnYm90dG9tLXN0YXJ0JztcblxuICAgIC8qKiBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgcG9wb3ZlciBzaG91bGQgYmUgYXBwZW5kZWQuICovXG4gICAgQElucHV0KClcbiAgICBhcHBlbmRUbzogRWxlbWVudFJlZjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBkYXRlIHBpY2tlciBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIERlZmluZXMgaWYgZGF0ZSBwaWNrZXIgc2hvdWxkIGJlIGNsb3NlZCBhZnRlciBkYXRlIGNob29zZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xvc2VPbkRhdGVDaG9vc2UgPSB0cnVlO1xuXG4gICAgLyoqIEVuYWJsZXMgVG9kYXktU2VsZWN0aW9uLUJ1dHRvbiBpZiB0cnVlICovXG4gICAgQElucHV0KClcbiAgICBzaG93VG9kYXlCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKiBMYWJlbCBmb3IgVG9kYXktU2VsZWN0aW9uLUJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdG9kYXlCdXR0b25MYWJlbCA9ICdUb2RheSc7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgcHJldmlvdXMgYnV0dG9uIGluIHRoZSBjYWxlbmRhciBoZWFkZXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcmV2aW91c0J1dHRvbkRpc2FibGVGdW5jdGlvbjogTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVGdW5jdGlvbjxEPjtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGlzYWJsZSBuZXh0IGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgaGVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbjogTmF2aWdhdGlvbkJ1dHRvbkRpc2FibGVGdW5jdGlvbjxEPjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFBvcG92ZXIgaXMgdG9nZ2xlZCB3aXRoIGY0IGtleVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnV0dG9uRm9jdXNhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGRheXMgbWFyaywgaXQgY2FuIGJlIHVzZWQgYnkgcGFzc2luZyBhcnJheSBvZiBvYmplY3Qgd2l0aFxuICAgICAqIFNwZWNpYWwgZGF5IG51bWJlciwgbGlzdCAxLTIwIFtjbGFzczpgZmQtY2FsZW5kYXJfX2l0ZW0tLWxlZ2VuZC17e251bWJlcn19YF0gaXMgYXZhaWxhYmxlIHRoZXJlOlxuICAgICAqIGh0dHBzOi8vc2FwLmdpdGh1Yi5pby9mdW5kYW1lbnRhbC1zdHlsZXMvY29tcG9uZW50cy9jYWxlbmRhci5odG1sIGNhbGVuZGFyIHNwZWNpYWwgZGF5cyBzZWN0aW9uXG4gICAgICogUnVsZSBhY2NlcHRzIG1ldGhvZCB3aXRoIEZkRGF0ZSBvYmplY3QgYXMgYSBwYXJhbWV0ZXIuIGV4OlxuICAgICAqIGBydWxlOiAoZmREYXRlOiBGZERhdGUpID0+IGZkRGF0ZS5nZXREYXkoKSA9PT0gMWAsIHdoaWNoIHdpbGwgbWFyayBhbGwgc3VuZGF5cyBhcyBzcGVjaWFsIGRheS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNwZWNpYWxEYXlzUnVsZXM6IFNwZWNpYWxEYXlSdWxlPEQ+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgeWVhciBncmlkLFxuICAgICAqIFJvdywgQ29sdW1ucyBhbmQgbWV0aG9kIHRvIGRpc3BsYXkgeWVhciBjYW4gYmUgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiA1XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBjdXN0b21pemUgYWdncmVnYXRlZCB5ZWFyIGdyaWQsXG4gICAgICogUm93LCBDb2x1bW5zIGFuZCBtZXRob2QgdG8gZGlzcGxheSB5ZWFyIGNhbiBiZSBtb2RpZmllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWdncmVnYXRlZFllYXJHcmlkOiBDYWxlbmRhclllYXJHcmlkID0ge1xuICAgICAgICByb3dzOiA0LFxuICAgICAgICBjb2xzOiAzXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdXNlciB3YW50cyB0byBtYXJrIHN1bmRheS9zYXR1cmRheSB3aXRoIGBmZC1jYWxlbmRhcl9faXRlbS0td2Vla2VuZGAgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1hcmtXZWVrZW5kcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHVzZXIgd2FudHMgdG8gc2hvdyB3ZWVrIG51bWJlcnMgbmV4dCB0byBkYXlzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93V2Vla051bWJlcnMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdXNlciB3YW50cyB0byBzZWxlY3QgbXVsdGlwbGUgZGF5cyBvciBtdWx0aXBsZSByYW5nZSBkYXRlcy5cbiAgICAgKiBJZiBgZGlzcGxheVdlZWtOdW1iZXJzYCBpcyB0cnVlLCB0aGUgdXNlciBjYW4gY2xpY2sgb24gdGhlIHdlZWsgbnVtYmVyIHRvIG1hcmsgdGhlIHJlbGF0ZWQgcm93LlxuICAgICAqIFRoZSB1c2VyIGNhbiBjbGljayBvbiB3ZWVrIGRheXMgdG8gbWFyayB0aGUgcmVsYXRlZCBjb2x1bW4uXG4gICAgICogTm90ZTogQ2xpY2thYmxlIHNlbGVjdGlvbiBmb3Igd2VlayByb3cgb3IgY29sdW1uIGRvZXMgbm90IHdvcmsgZm9yIHJhbmdlIHNlbGVjdGlvbnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd011bHRpcGxlU2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAvKiogU2hvdWxkIGRhdGUgcGlja2VyIGJlIGlubGluZWQuICovXG4gICAgQElucHV0KClcbiAgICBpbmxpbmUgPSB0cnVlO1xuXG4gICAgLyoqIGFyaWEtbGFiZWxsZWRieSBmb3IgZWxlbWVudCBkZXNjcmliaW5nIGRhdGUtcGlja2VyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHJlY2FsY3VsYXRlIHZhbHVlIGZyb20gdGhlIGlucHV0IGFzIHVzZXIgdHlwZXMgb3Igb24gYmx1ci5cbiAgICAgKiBCeSBkZWZhdWx0LCB1cGRhdGVzIHRoZSB2YWx1ZSBhcyB1c2VyIHR5cGVzLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHJvY2Vzc0lucHV0T25CbHVyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHByZXZlbnQgcGFnZSBzY3JvbGxpbmcgd2hlbiBmb2N1c2luZyBkYXRlIHBpY2tlciBpbnB1dCBmaWVsZCBhZnRlciBjYWxlbmRhciBoYXMgYmVlbiBjbG9zZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgZGF0ZSBwaWNrZXIgc2hvdWxkIHJlbmRlcmVkIGluIG1vYmlsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTW9iaWxlIG1vZGUgY29uZmlndXJhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZztcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIGlzIHVzZWQgaW5zaWRlIG1vYmlsZSBpbiBsYW5kc2NhcGUgbW9kZSwgaXQgYWxzbyBhZGRzIGNsb3NlIGJ1dHRvbiBvbiByaWdodCBzaWRlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVMYW5kc2NhcGUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGNhbGVuZGFyIGlzIHVzZWQgaW5zaWRlIG1vYmlsZSBpbiBwb3J0cmFpdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVQb3J0cmFpdCA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gc2VsZWN0IGFuZCBkaXNwbGF5IHRoZSBkYXRlIHJhbmdlIGluIE1NL1lZWVkgb3IgWVlZWSBmb3JtYXRcbiAgICAgKiBGb3IgbW9udGggYW5kIHllYXIgZm9ybWF0IHZhbHVlIGlzICdtb250aCdcbiAgICAgKiBGb3IgeWVhciBmb3JtYXQgdmFsdWUgaXMgJ3llYXInXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkYXRlUmFuZ2VGb3JtYXQgPSAnJztcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBpc09wZW4gcHJvcGVydHkgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpc09wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duIGV2ZXJ5IHRpbWUgc2VsZWN0ZWQgZGF0ZSBpbiBzaW5nbGUgbW9kZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TnVsbGFibGU8RD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxOdWxsYWJsZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB0aGUgc2VsZWN0ZWQgZGF0ZXMgaW4gbXVsdGlwbGUgbW9kZSBhcmUgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PEQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRocm93biBldmVyeSB0aW1lIHNlbGVjdGVkIGZpcnN0IG9yIGxhc3QgZGF0ZSBpbiByYW5nZSBtb2RlIGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZTxEPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSB0aGUgZmlyc3Qgb3IgbGFzdCBkYXRlIGluIG11bHRpcGxlIHJhbmdlIG1vZGUgaXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PERhdGVSYW5nZTxEPj4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAgICAgQXJyYXk8RGF0ZVJhbmdlPEQ+PlxuICAgID4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24gZXZlcnkgdGltZSBjYWxlbmRhciBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgYWN0aXZlVmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmRDYWxlbmRhclZpZXc+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXBDb21wb25lbnQnLCB7XG4gICAgICAgIHJlYWQ6IEVsZW1lbnRSZWZcbiAgICB9KVxuICAgIF9pbnB1dEdyb3VwRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUsIHtcbiAgICAgICAgcmVhZDogRWxlbWVudFJlZlxuICAgIH0pXG4gICAgX2lucHV0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnY29udHJvbFRlbXBsYXRlJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyVGVtcGxhdGUnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NhbGVuZGFyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3BvcG92ZXJNZXNzYWdlVGVtcGxhdGUnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2VQb3BvdmVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGVlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oQ2FsZW5kYXJDb21wb25lbnQpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2FsZW5kYXJzOiBRdWVyeUxpc3Q8Q2FsZW5kYXJDb21wb25lbnQ8RD4+O1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgY2FsZW5kYXIgbGVnZW5kIGJlbG93IHRoZSBjYWxlbmRhci4gRGVmYXVsdCBpcyBmYWxzZS4gKi9cbiAgICBzaG93Q2FsZW5kYXJMZWdlbmQgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbGVnZW5kIHNob3VsZCBkaXNwbGF5IGluIGNvbHVtbiBsYXlvdXQgaW5zdGVhZCBvZiByb3cgbGF5b3V0LiBEZWZhdWx0IGlzIGZhbHNlLiAqL1xuICAgIGxlZ2VuZENvbCA9IGlucHV0KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgc3RhdGUgb2YgdGhlIGZvcm0gY29udHJvbCAtIGFwcGxpZXMgY3NzIGNsYXNzZXMuXG4gICAgICogIEFsc28sIHRoaXMgaXMgYXBwbGllZCB0byBtZXNzYWdlLlxuICAgICAqICBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc3RhdGUoc3RhdGU6IE51bGxhYmxlPEZvcm1TdGF0ZXM+KSB7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gc3RhdGUgfHwgJ2RlZmF1bHQnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHN0YXRlKCk6IEZvcm1TdGF0ZXMge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT0gbnVsbCAmJiB0aGlzLnVzZVZhbGlkYXRpb24gJiYgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2Vycm9yJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGU7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGUgcGlja2VyIGlzIG9wZW4uIENhbiBiZSB1c2VkIHRocm91Z2ggdHdvLXdheSBiaW5kaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGlzT3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2lzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzT3BlbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYWxlbmRhckNvbXBvbmVudDogQ2FsZW5kYXJDb21wb25lbnQ8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VUcmlnZ2Vyczogc3RyaW5nW10gPSBbJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnXTtcblxuICAgIC8qKiBAaGlkZGVuIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgKi9cbiAgICBfaW5wdXRGaWVsZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gV2hldGhlciB0aGUgZGF0ZSBpbnB1dCBpcyBpbnZhbGlkICovXG4gICAgX2lzSW52YWxpZERhdGVJbnB1dCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd1BvcG92ZXJDb250ZW50cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZm9ybVZhbHVlU3RhdGVNZXNzYWdlSWQgPSBgZmQtZGF0ZS1waWNrZXItZm9ybS1tZXNzYWdlLSR7ZGF0ZVBpY2tlckNvdW50ZXIrK31gO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsZW5kYXJQZW5kaW5nRGF0ZTogTnVsbGFibGU8RD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXRlOiBGb3JtU3RhdGVzID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KER5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNUcmFwU2VydmljZSA9IGluamVjdChGb2N1c1RyYXBTZXJ2aWNlLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21vYmlsZUNvbXBvbmVudFJlZjogTnVsbGFibGU8Q29tcG9uZW50UmVmPERhdGVQaWNrZXJNb2JpbGVDb21wb25lbnQ8RD4+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9yYW5nZURlbGltaXRlcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLnJhbmdlRGVsaW1pdGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERhdGUgaW5wdXQgYXJpYSBsYWJlbCBrZXkgYmFzZWQgb24gdHlwZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgX2RhdGVJbnB1dEFyaWFsTGFiZWxLZXkoKTogRmRMYW5ndWFnZUtleUlkZW50aWZpZXIge1xuICAgICAgICAvLyByZXR1cm4gZWl0aGVyIGlucHV0IHZhbHVlIG9yIGEga2V5IGZvciBcImZkVHJhbnNsYXRlXCIgcGlwZVxuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlXG4gICAgICAgICAgICA/ICdjb3JlRGF0ZVBpY2tlci5kYXRlUmFuZ2VJbnB1dExhYmVsJ1xuICAgICAgICAgICAgOiAnY29yZURhdGVQaWNrZXIuZGF0ZUlucHV0TGFiZWwnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdGlvblJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIC8vIFVzZSBAT3B0aW9uYWwgdG8gYXZvaWQgYW5ndWxhciBpbmplY3Rpb24gZXJyb3IgbWVzc2FnZSBhbmQgdGhyb3cgb3VyIG93biB3aGljaCBpcyBtb3JlIHByZWNpc2Ugb25lXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHByaXZhdGUgX2RhdGVUaW1lQWRhcHRlcjogRGF0ZXRpbWVBZGFwdGVyPEQ+LFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KERBVEVfVElNRV9GT1JNQVRTKVxuICAgICAgICBwcml2YXRlIF9kYXRlVGltZUZvcm1hdHM6IERhdGVUaW1lRm9ybWF0cyxcbiAgICAgICAgcHJpdmF0ZSBfcG9wb3ZlckZvcm1NZXNzYWdlOiBQb3BvdmVyRm9ybU1lc3NhZ2VTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RhdGVUaW1lQWRhcHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVNaXNzaW5nRGF0ZUltcGxlbWVudGF0aW9uRXJyb3IoJ0RBVEVfVElNRV9GT1JNQVRTJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlRnVuY3Rpb246ICh2YWx1ZTogRCkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkaXNhYmxlIGNlcnRhaW4gZGF0ZXMgaW4gdGhlIGNhbGVuZGFyIGZvciB0aGUgcmFuZ2Ugc3RhcnQgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbjogKHZhbHVlOiBEKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGRpc2FibGUgY2VydGFpbiBkYXRlcyBpbiB0aGUgY2FsZW5kYXIgZm9yIHRoZSByYW5nZSBlbmQgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVJhbmdlRW5kRnVuY3Rpb246ICh2YWx1ZTogRCkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZGlhbG9nQXBwcm92ZSgpOiB2b2lkIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGRpYWxvZ0Rpc21pc3MocHJldlZhbHVlOiBEIHwgQXJyYXk8RD4gfCBEYXRlUmFuZ2U8RD4gfCBBcnJheTxEYXRlUmFuZ2U8RD4+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc011bHRpcGxlRGF0ZVJhbmdlcyhwcmV2VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNdWx0aXBsZURhdGVSYW5nZXNDaGFuZ2UocHJldlZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcmV2VmFsdWUgYXMgQXJyYXk8RD47XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNdWx0aXBsZURhdGVzQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0RhdGVSYW5nZShwcmV2VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSYW5nZURhdGVDaGFuZ2UocHJldlZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcmV2VmFsdWUgYXMgRDtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNpbmdsZURhdGVDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gaW5pdGlhbCB2aWV3IHNob3VsZCBiZSBtb250aCBvciB5ZWFyIGlmIGRhdGVSYW5nZUZvcm1hdCBpcyBwcm92aWRlZFxuICAgICAgICBpZiAodGhpcy5kYXRlUmFuZ2VGb3JtYXQgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IEZkQ2FsZW5kYXJWaWV3RW51bS5Nb250aDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVSYW5nZUZvcm1hdCA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBGZENhbGVuZGFyVmlld0VudW0uWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5sb2NhbGVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXRJbnB1dERhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICgnaXNPcGVuJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gdGhpcy5pc09wZW47XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25SZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX0luaXRpYWxpc2VWYXJpYWJsZXNJbk1lc3NhZ2VTZXJ2aWNlKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsZW5kYXJzLmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGVuZGFyID0gdGhpcy5fY2FsZW5kYXJzLmZpcnN0O1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQgPSBjYWxlbmRhcjtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWxlbmRhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlPy5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlPy51bnBhdXNlQ3VycmVudEZvY3VzVHJhcCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhbGVuZGFyPy5zZXRDdXJyZW50bHlEaXNwbGF5ZWQodGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSk7XG4gICAgICAgICAgICAgICAgY2FsZW5kYXI/LmluaXRpYWxGb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBNb2JpbGVNb2RlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX21vYmlsZUNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCB0aGF0IGhhbmRsZSBjYWxlbmRhciBhY3RpdmUgdmlldyBjaGFuZ2UgYW5kIHRocm93cyBldmVudC5cbiAgICAgKi9cbiAgICBoYW5kbGVDYWxlbmRhckFjdGl2ZVZpZXdDaGFuZ2UoYWN0aXZlVmlldzogRmRDYWxlbmRhclZpZXcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQoYWN0aXZlVmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbG9zZUZyb21DYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUgJiYgdGhpcy5jbG9zZU9uRGF0ZUNob29zZSAmJiAhdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogT3BlbnMgdGhlIGNhbGVuZGFyICovXG4gICAgb3BlbkNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldE9wZW5TdGF0ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgY2FsZW5kYXIgb3BlbiBvciBjbG9zZWQgKi9cbiAgICB0b2dnbGVDYWxlbmRhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRPcGVuU3RhdGUoIXRoaXMuaXNPcGVuKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIC8qKiBDbG9zZXMgdGhlIGNhbGVuZGFyIGlmIGl0IGlzIG9wZW4gKi9cbiAgICBjbG9zZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0T3BlblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlTWVzc2FnZVZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGNhbGVuZGFyIGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCBzaW5nbGUgZGF0ZSBjaGFuZ2VkXG4gICAgICovXG4gICAgaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZShkYXRlOiBEKTogdm9pZCB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShkYXRlKTtcbiAgICAgICAgdGhpcy5mb3JtYXRJbnB1dERhdGUoZGF0ZSk7XG4gICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmlzTW9kZWxWYWxpZCgpO1xuICAgICAgICBpZiAodGhpcy5jbG9zZU9uRGF0ZUNob29zZSAmJiB0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gdGhlIGNhbGVuZGFyIGNvbXBvbmVudCB3aGVuIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSBkYXRlcyBjaGFuZ2UuXG4gICAgICovXG4gICAgaGFuZGxlTXVsdGlwbGVEYXRlc0NoYW5nZShkYXRlczogQXJyYXk8RD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRlcyB8fCBkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZS5lbWl0KFtdKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoW10pO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IGRhdGVzO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlc0NoYW5nZS5lbWl0KGRhdGVzKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlcyk7XG4gICAgICAgIC8qKiBBc3N1bWluZyB0aGUgZmlyc3QgZGF0ZSBpbiB0aGUgYXJyYXkgaXMgdXNlZCBmb3IgcmVmcmVzaCAqL1xuICAgICAgICBpZiAodGhpcy5zaG93VG9kYXlCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZXNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5mb3JtYXREYXRlQXJyYXkoZGF0ZXMpO1xuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5pc01vZGVsVmFsaWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IGV2ZW50cyBmcm9tIGNhbGVuZGFyIGNvbXBvbmVudCwgd2hlbiB0aGVyZSBpcyBzZWxlY3RlZCByYW5nZSBkYXRlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBoYW5kbGVSYW5nZURhdGVDaGFuZ2UoZGF0ZXM6IERhdGVSYW5nZTxEPik6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENoYW5nZWQgPSAhdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZXMuc3RhcnQsIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmRDaGFuZ2VkID0gIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGRhdGVzLmVuZCwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5lbmQpO1xuICAgICAgICBpZiAoZGF0ZXMgJiYgKHN0YXJ0Q2hhbmdlZCB8fCBlbmRDaGFuZ2VkKSkge1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ2xvc2UgPSB0aGlzLmNsb3NlT25EYXRlQ2hvb3NlICYmIGRhdGVzLmVuZCAhPT0gbnVsbDtcbiAgICAgICAgICAgIGlmIChkYXRlcy5lbmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGVSYW5nZShkYXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGVzLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IGRhdGVzLmVuZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShkYXRlcy5zdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBpcyB0cmlnZ2VyZWQgYnkgZXZlbnRzIGZyb20gdGhlIGNhbGVuZGFyIGNvbXBvbmVudCB3aGVuIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSByYW5nZSBkYXRlcyBjaGFuZ2UuXG4gICAgICovXG4gICAgaGFuZGxlTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlKGRhdGVzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KTogdm9pZCB7XG4gICAgICAgIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNoYW5nZXMgaW4gdGhlIGRhdGUgcmFuZ2VzXG4gICAgICAgIGlmIChkYXRlcy5sZW5ndGggIT09IHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChkYXRlc1tpXS5zdGFydCwgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1tpXS5zdGFydCkgfHxcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKGRhdGVzW2ldLmVuZCwgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1tpXS5lbmQpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBhbnkgZGF0ZSByYW5nZSBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBpbnRlcm5hbCBzdGF0ZSBhbmQgZW1pdCBjaGFuZ2VzXG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzID0gZGF0ZXM7XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZm9ybWF0dGVkIGlucHV0IGZpZWxkXG4gICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuX2Zvcm1hdE11bHRpcGxlRGF0ZVJhbmdlcyhkYXRlcyk7XG5cbiAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNoYW5nZSBldmVudFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuXG4gICAgICAgICAgICAvLyBQZXJmb3JtIGFueSBhZGRpdGlvbmFsIGFjdGlvbnMgc3VjaCBhcyB1cGRhdGluZyB0aGUgbW9kZWwgb3IgcmVmcmVzaGluZyB0aGUgY2FsZW5kYXJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgICAgICAvLyBpZiB5b3Ugd2FudCB0byByZWZyZXNoIHRoZSBjYWxlbmRhciB2aWV3LCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGxpbmVcbiAgICAgICAgICAgIC8vIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZXNbMF0uc3RhcnQpO1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJQZW5kaW5nRGF0ZSA9IGRhdGVzWzBdLnN0YXJ0O1xuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuaXNNb2RlbFZhbGlkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIGRhdGUgZm9ybWF0dGluZyBpbiB0aGUgZGF0ZSBjb250cm9sXG4gICAgICovXG4gICAgZm9ybWF0SW5wdXREYXRlKGRhdGU6IE51bGxhYmxlPEQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gVG9kYXktU2VsZWN0aW9uLUJ1dHRvbiBjbGlja2VkLCBpdCBjaGFuZ2VzIHNlbGVjdGVkIGRhdGUgb3IgZGF0ZSByYW5nZSB0byB0b2RheSdzIGRhdGVcbiAgICAgKi9cbiAgICBvblRvZGF5QnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvZGF5RGF0ZSA9IHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpO1xuICAgICAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVEYXRlc0NoYW5nZShbdG9kYXlEYXRlXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUZyb21DYWxlbmRhcigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZShbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0b2RheURhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHRvZGF5RGF0ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2luZ2xlRGF0ZUNoYW5nZSh0b2RheURhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VGcm9tQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSYW5nZURhdGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogdG9kYXlEYXRlLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IHRvZGF5RGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB0ZXh0IGlucHV0IGlzIGNvbmZpcm1lZCB0byBiYSBjaGFuZ2VkLCBieSBjbGlja2luZyBlbnRlciwgb3IgYmx1clxuICAgICAqL1xuICAgIGhhbmRsZUlucHV0Q2hhbmdlKHN0ckRhdGU6IHN0cmluZywgaXNUeXBlRXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKChpc1R5cGVFdmVudCAmJiB0aGlzLnByb2Nlc3NJbnB1dE9uQmx1cikgfHwgKCFpc1R5cGVFdmVudCAmJiAhdGhpcy5wcm9jZXNzSW5wdXRPbkJsdXIpKSB7XG4gICAgICAgICAgICAvLyBpZiBwcm9jZXNzSW5wdXRPbkJsdXIgPT09IHRydWUsIGlnbm9yZSB0eXBlIGV2ZW50XG4gICAgICAgICAgICAvLyBpZiBwcm9jZXNzSW5wdXRPbkJsdXIgPT09IGZhbHNlLCBpZ25vcmUgYmx1ci9lbnRlciBldmVudFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZVN0cmluZ1VwZGF0ZShzdHJEYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIFZhbGlkYXRvciBJbnRlcmZhY2UsIGFkZHMgdmFsaWRhdGlvbiBzdXBwb3J0IGZvciBmb3Jtc1xuICAgICAqL1xuICAgIHZhbGlkYXRlKCk6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH0gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb2RlbFZhbGlkKClcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBkYXRlVmFsaWRhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShcbiAgICAgICAgZm46IChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICAgICAgICB2b2lkO1xuICAgICAgICB9XG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnVuY3Rpb24gdGhhdCBwcm92aWRlcyBzdXBwb3J0IGZvciBDb250cm9sVmFsdWVBY2Nlc3NvciB0aGF0IGFsbG93cyB0byB1c2UgWyhuZ01vZGVsKV0gb3IgZm9ybXNcbiAgICAgKi9cbiAgICB3cml0ZVZhbHVlKHNlbGVjdGVkOiBEIHwgQXJyYXk8RD4gfCBEYXRlUmFuZ2U8RD4gfCBBcnJheTxEYXRlUmFuZ2U8RD4+IHwgbnVsbCk6IHZvaWQge1xuICAgICAgICAvKiogSWYgd3JpdHRlbiB2YWx1ZSBpcyBub3QgZGVmaW5lZCwgbnVsbCwgZW1wdHkgc3RyaW5nICovXG4gICAgICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gJyc7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuX2RhdGVUaW1lQWRhcHRlci50b2RheSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZW5kOiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiAmJiBBcnJheS5pc0FycmF5KHNlbGVjdGVkKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3Igc2luZ2xlIG1vZGUsIGlmIHRoZSBkYXRlIGlzIGludmFsaWQsIG1vZGVsIGlzIGNoYW5nZWQsIGl0IHJlZnJlc2hlcyBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICAgKiBpbnB1dCBmaWVsZCB0ZXh0LCBidXQgaXQgZG9lcyBub3QgcmVmcmVzaCBjdXJyZW50bHkgZGlzcGxheWVkIGRheVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkID0gdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkKVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gPEFycmF5PEQ+PnNlbGVjdGVkO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZUFycmF5KHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHNlbGVjdGVkWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3IgcmFuZ2UgbW9kZSwgaWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgbW9kZWwgaXMgY2hhbmdlZCwgYnV0IGl0IGRvZXMgbm90IHJlZnJlc2ggY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICogZGlzcGxheWVkIGRheSB2aWV3LCBvciBpbnB1dCBmaWVsZCB0ZXh0XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZCBhcyBBcnJheTxEYXRlUmFuZ2U8RD4+O1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmFuZ2VzID0gc2VsZWN0ZWQuZmlsdGVyKChyYW5nZSkgPT4gcmFuZ2Uuc3RhcnQgIT09IG51bGwgJiYgcmFuZ2UuZW5kICE9PSBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUmFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMgPSBmaWx0ZXJlZFJhbmdlcy5tYXAoKHJhbmdlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9wYXJzZURhdGUocmFuZ2Uuc3RhcnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcGFyc2VEYXRlKHJhbmdlLmVuZClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZmlsdGVyZWRSYW5nZXNbMF0uc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXRNdWx0aXBsZURhdGVSYW5nZXMoZmlsdGVyZWRSYW5nZXMpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0RmllbGREYXRlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3Igc2luZ2xlIG1vZGUsIGlmIHRoZSBkYXRlIGlzIGludmFsaWQsIG1vZGVsIGlzIGNoYW5nZWQsIGl0IHJlZnJlc2hlcyBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICAgKiBpbnB1dCBmaWVsZCB0ZXh0LCBidXQgaXQgZG9lcyBub3QgcmVmcmVzaCBjdXJyZW50bHkgZGlzcGxheWVkIGRheVxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gdGhpcy5fcGFyc2VEYXRlKHNlbGVjdGVkKSBhcyBEO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSB0aGlzLl9mb3JtYXREYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBGb3IgcmFuZ2UgbW9kZSwgaWYgdGhlIGRhdGUgaXMgaW52YWxpZCwgbW9kZWwgaXMgY2hhbmdlZCwgYnV0IGl0IGRvZXMgbm90IHJlZnJlc2ggY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICogZGlzcGxheWVkIGRheSB2aWV3LCBvciBpbnB1dCBmaWVsZCB0ZXh0XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZCBhcyBEYXRlUmFuZ2U8RD47XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkPy5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuX3BhcnNlRGF0ZShzZWxlY3RlZC5zdGFydCksXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuX3BhcnNlRGF0ZShzZWxlY3RlZC5lbmQpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoc2VsZWN0ZWQuc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dEZpZWxkRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGVSYW5nZShzZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5pc01vZGVsVmFsaWQoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kLCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgdHJhbnNmb3JtaW5nIHN0cmluZyB0byBkYXRlLCBkZXBlbmRpbmcgb24gdHlwZSBvclxuICAgICAqIHZhbGlkYXRpb24gdGhlIHJlc3VsdHMgYXJlIGRpZmZlcmVudC4gSXQgYWxzbyBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiBfaXNJbnZhbGlkRGF0ZUlucHV0XG4gICAgICovXG4gICAgZGF0ZVN0cmluZ1VwZGF0ZShkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5wdXRGaWVsZERhdGUgPSBkYXRlU3RyO1xuICAgICAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSBDYWxlbmRhclR5cGVFbnVtLlNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTXVsdGlwbGVEYXRlcyhkYXRlU3RyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlTXVsdGlwbGVEYXRlUmFuZ2VzKGRhdGVTdHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTaW5nbGVEYXRlKGRhdGVTdHIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVSYW5nZURhdGUoZGF0ZVN0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gaWYgbW9kZWwgc2VsZWN0ZWQgZGF0ZS9kYXRlcyBoYXZlIHByb3Blcmx5IHR5cGVzIGFuZCBhcmUgdmFsaWQgKi9cbiAgICBpc01vZGVsVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IENhbGVuZGFyVHlwZUVudW0uU2luZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlwbGVNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlwbGVSYW5nZXNNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gQ2FsZW5kYXJUeXBlRW51bS5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTaW5nbGVNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBzZWxlY3RlZCBkYXRlLiAqL1xuICAgIGdldFNlbGVjdGVkRGF0ZSgpOiBEIHwgQXJyYXk8RD4gfCBEYXRlUmFuZ2U8RD4gfCBBcnJheTxEYXRlUmFuZ2U8RD4+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlIHx8IHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzIHx8IHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgfHwgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2Uuc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcGVuU3RhdGVDaGFuZ2VkKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KGlzT3Blbik7XG4gICAgICAgIHRoaXMuX2NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5KCk7XG4gICAgICAgIC8vIGZvY3VzIGlucHV0IGNvbnRyb2wgZXZlcnkgdGltZSBwb3B1cCBpcyBjbG9zZWRcbiAgICAgICAgaWYgKCFpc09wZW4gJiYgdGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgICAgICAgICAgcHJldmVudFNjcm9sbDogdGhpcy5wcmV2ZW50U2Nyb2xsT25Gb2N1c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXJzIHRoZSBjYWxlbmRhciByaWdodCBiZWZvcmUgdGhlIHBvcG92ZXIgaXMgb3BlbmVkLlxuICAgICAqIFVzZWQgZm9yIGNvcnJlY3QgY2FsY3VsYXRpb25zIG9mIG92ZXJsYXkgcG9zaXRpb24gYW5kIHNpemUuXG4gICAgICovXG4gICAgX2JlZm9yZVBvcG92ZXJPcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckNvbnRlbnRzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZSgoZXZlbnQudGFyZ2V0IGFzIGFueSkudmFsdWUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHNpbmdsZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzU2luZ2xlTW9kZWxWYWxpZChkYXRlOiBOdWxsYWJsZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX2lzRGF0ZVZhbGlkKGRhdGUpICYmICF0aGlzLmRpc2FibGVGdW5jdGlvbihkYXRlKSkgfHwgKCFkYXRlICYmIHRoaXMuYWxsb3dOdWxsKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIG11bHRpcGxlIGRhdGUgbW9kZWwgZ2l2ZW4gaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc011bHRpcGxlTW9kZWxWYWxpZChkYXRlczogQXJyYXk8TnVsbGFibGU8RD4+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBkYXRlcz8uZXZlcnkoKGRhdGUpID0+IHRoaXMuX2lzU2luZ2xlTW9kZWxWYWxpZChkYXRlKSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiByYW5nZSBkYXRlIG1vZGVsIGdpdmVuIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNSYW5nZU1vZGVsVmFsaWQoZmRSYW5nZURhdGU6IERhdGVSYW5nZTxEPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGZkUmFuZ2VEYXRlICYmIHRoaXMuX2lzU3RhcnREYXRlVmFsaWQoZmRSYW5nZURhdGUuc3RhcnQpICYmIHRoaXMuX2lzRW5kRGF0ZVZhbGlkKGZkUmFuZ2VEYXRlLmVuZCkpIHx8XG4gICAgICAgICAgICAoIWZkUmFuZ2VEYXRlLnN0YXJ0ICYmICFmZFJhbmdlRGF0ZS5lbmQgJiYgdGhpcy5hbGxvd051bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiBtdWx0aXBsZSByYW5nZSBkYXRlIG1vZGVsIGdpdmVuIGlzIHZhbGlkICovXG4gICAgcHJpdmF0ZSBfaXNNdWx0aXBsZVJhbmdlc01vZGVsVmFsaWQocmFuZ2VzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcmFuZ2VzIHx8IHJhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFuZ2VzLmV2ZXJ5KChyYW5nZSkgPT4gcmFuZ2Uuc3RhcnQgJiYgcmFuZ2UuZW5kICYmIHRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHJhbmdlKSk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJldHVybnMgaW5mbyBpZiBlbmQgZGF0ZSBtb2RlbCBnaXZlbiBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzRW5kRGF0ZVZhbGlkKGVuZERhdGU6IE51bGxhYmxlPEQ+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RhdGVWYWxpZChlbmREYXRlKSAmJiAhdGhpcy5kaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbihlbmREYXRlKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmV0dXJucyBpbmZvIGlmIHN0YXJ0IGRhdGUgbW9kZWwgZ2l2ZW4gaXMgdmFsaWQgKi9cbiAgICBwcml2YXRlIF9pc1N0YXJ0RGF0ZVZhbGlkKHN0YXJ0RGF0ZTogTnVsbGFibGU8RD4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGF0ZVZhbGlkKHN0YXJ0RGF0ZSkgJiYgIXRoaXMuZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvbihzdGFydERhdGUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCByZXR1cm5zIGluZm8gaWYgZ2l2ZW4gZGF0ZSBtb2RlbCBpcyB2YWxpZCAqL1xuICAgIHByaXZhdGUgX2lzRGF0ZVZhbGlkKGRhdGU6IE51bGxhYmxlPEQ+KTogZGF0ZSBpcyBEIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGRhdGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShkYXRlOiBOdWxsYWJsZTxEPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhclBlbmRpbmdEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJDb21wb25lbnQ/LnNldEN1cnJlbnRseURpc3BsYXllZChkYXRlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdERhdGUoZGF0ZTogTnVsbGFibGU8RD4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21EYXRlVGltZUZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5jdXN0b21EYXRlVGltZUZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5fZGF0ZVRpbWVGb3JtYXRzLmRpc3BsYXkuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZm9ybWF0RGF0ZUFycmF5KGRhdGVzOiBBcnJheTxEPik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBkYXRlcy5tYXAoKGRhdGUpID0+IHRoaXMuX2Zvcm1hdERhdGUoZGF0ZSkpLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wYXJzZURhdGUoZGF0ZTogdW5rbm93bik6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5wYXJzZShkYXRlLCB0aGlzLl9kYXRlVGltZUZvcm1hdHMucGFyc2UuZGF0ZUlucHV0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIHBhcnNlIGEgZGF0ZSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBkYXRlcy5cbiAgICAgKiBAcGFyYW0gZGF0ZVN0ciBUaGUgZGF0ZSBzdHJpbmcgdG8gcGFyc2UuXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZGF0ZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZURhdGVTdHJpbmcoZGF0ZVN0cjogc3RyaW5nKTogRFtdIHtcbiAgICAgICAgcmV0dXJuIGRhdGVTdHJcbiAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKChkYXRlKSA9PiB0aGlzLl9wYXJzZURhdGUoZGF0ZS50cmltKCkpKVxuICAgICAgICAgICAgLmZpbHRlcigoZGF0ZSkgPT4gZGF0ZSAhPT0gbnVsbCkgYXMgRFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybWF0RGF0ZVJhbmdlKGRhdGVSYW5nZTogRGF0ZVJhbmdlPEQ+KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlUmFuZ2Uuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShkYXRlUmFuZ2UuZW5kKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0RGF0ZSArIHRoaXMuX3JhbmdlRGVsaW1pdGVyICsgZW5kRGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1hdE11bHRpcGxlRGF0ZVJhbmdlcyhkYXRlUmFuZ2VzOiBBcnJheTxEYXRlUmFuZ2U8RD4+KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGRhdGVSYW5nZXMubWFwKChkYXRlUmFuZ2UpID0+IHRoaXMuX2Zvcm1hdERhdGVSYW5nZShkYXRlUmFuZ2UpKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfSW5pdGlhbGlzZVZhcmlhYmxlc0luTWVzc2FnZVNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJGb3JtTWVzc2FnZS5pbml0KHRoaXMuX2lucHV0R3JvdXBFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckZvcm1NZXNzYWdlLnRyaWdnZXJzID0gdGhpcy5fbWVzc2FnZVRyaWdnZXJzO1xuICAgICAgICB0aGlzLl9wb3BvdmVyRm9ybU1lc3NhZ2UubWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VQb3BvdmVyVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRPcGVuU3RhdGUoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyQ29udGVudHMgPSBpc09wZW47XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvblJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwTW9iaWxlTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBGRF9EQVRFX1BJQ0tFUl9DT01QT05FTlQsIHVzZVZhbHVlOiB0aGlzIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGRF9EQVRFX1BJQ0tFUl9NT0JJTEVfQ09ORklHLFxuICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogeyBjYWxlbmRhclRlbXBsYXRlOiB0aGlzLl9jYWxlbmRhclRlbXBsYXRlLCBjb250cm9sVGVtcGxhdGU6IHRoaXMuX2NvbnRyb2xUZW1wbGF0ZSB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fbW9iaWxlQ29tcG9uZW50UmVmID0gdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlRHluYW1pY0NvbXBvbmVudChcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgRGF0ZVBpY2tlck1vYmlsZUNvbXBvbmVudDxEPixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6ICdib2R5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbmplY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNEYXRlUmFuZ2UodmFsdWU6IGFueSk6IHZhbHVlIGlzIERhdGVSYW5nZTxEPiB7XG4gICAgICAgIHJldHVybiAhIXZhbHVlICYmIHZhbHVlLnN0YXJ0ICYmIHZhbHVlLmVuZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzTXVsdGlwbGVEYXRlUmFuZ2VzKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBcnJheTxEYXRlUmFuZ2U8RD4+IHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0aGlzLl9pc0RhdGVSYW5nZShpdGVtKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFVwZGF0ZXMgdGhlIHNlbGVjdGVkIHNpbmdsZSBkYXRlIGZyb20gYSBkYXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gZGF0ZVN0ciBUaGUgZGF0ZSBzdHJpbmcgdG8gcGFyc2UgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVTaW5nbGVEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIWRhdGVTdHIpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5fcGFyc2VEYXRlKGRhdGVTdHIpO1xuXG4gICAgICAgIGlmICghdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZSwgdGhpcy5zZWxlY3RlZERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5faXNTaW5nbGVNb2RlbFZhbGlkKGRhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUoZGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXBkYXRlcyB0aGUgc2VsZWN0ZWQgcmFuZ2UgZGF0ZSBmcm9tIGEgZGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIGRhdGVTdHIgVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIHJhbmdlIGRhdGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlUmFuZ2VEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIWRhdGVTdHIpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLmFsbG93TnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSB7IHN0YXJ0OiBudWxsLCBlbmQ6IG51bGwgfTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3N0YXJ0RGF0ZVN0ciwgZW5kRGF0ZVN0cl0gPSBkYXRlU3RyLnNwbGl0KHRoaXMuX3JhbmdlRGVsaW1pdGVyKTtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5fcGFyc2VEYXRlKHN0YXJ0RGF0ZVN0cik7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLl9wYXJzZURhdGUoZW5kRGF0ZVN0cik7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKHN0YXJ0RGF0ZSwgdGhpcy5zZWxlY3RlZFJhbmdlRGF0ZS5zdGFydCkgfHxcbiAgICAgICAgICAgICF0aGlzLl9kYXRlVGltZUFkYXB0ZXIuZGF0ZXNFcXVhbChlbmREYXRlLCB0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRSYW5nZURhdGU6IERhdGVSYW5nZTxEPiB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmlzVmFsaWQoc3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5pc1ZhbGlkKGVuZERhdGUpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmVEYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkgPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlRGF0ZSA9IHsgc3RhcnQ6IGVuZERhdGUsIGVuZDogc3RhcnREYXRlIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2VEYXRlID0geyBzdGFydDogc3RhcnREYXRlLCBlbmQ6IGVuZERhdGUgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzUmFuZ2VNb2RlbFZhbGlkKHNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUgPSBzZWxlY3RlZFJhbmdlRGF0ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZURhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZFJhbmdlRGF0ZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1N0YXJ0RGF0ZVZhbGlkKHRoaXMuc2VsZWN0ZWRSYW5nZURhdGUuc3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZSh0aGlzLnNlbGVjdGVkUmFuZ2VEYXRlLnN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSBkYXRlcyBmcm9tIGEgZGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIGRhdGVTdHIgVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIG11bHRpcGxlIGRhdGVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlTXVsdGlwbGVEYXRlcyhkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5hbGxvd051bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZWREYXRlcyA9IHRoaXMucGFyc2VEYXRlU3RyaW5nKGRhdGVTdHIpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBuZXcgcGFyc2VkIGRhdGVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBkYXRlc1xuICAgICAgICBjb25zdCBkYXRlc0NoYW5nZWQgPSAhdGhpcy5fYXJlRGF0ZXNFcXVhbChwYXJzZWREYXRlcywgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuXG4gICAgICAgIGlmIChkYXRlc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZERhdGVJbnB1dCA9ICF0aGlzLl9pc011bHRpcGxlTW9kZWxWYWxpZChwYXJzZWREYXRlcyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEN1cnJlbnRseURpc3BsYXllZENhbGVuZGFyRGF0ZShwYXJzZWREYXRlc1swXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzID0gcGFyc2VkRGF0ZXM7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEhlbHBlciBtZXRob2QgdG8gY29tcGFyZSB0d28gYXJyYXlzIG9mIGRhdGVzICovXG4gICAgcHJpdmF0ZSBfYXJlRGF0ZXNFcXVhbChkYXRlczE6IERbXSwgZGF0ZXMyOiBEW10pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGRhdGVzMS5sZW5ndGggIT09IGRhdGVzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZXMxLmV2ZXJ5KChkYXRlLCBpbmRleCkgPT4gdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwoZGF0ZSwgZGF0ZXMyW2luZGV4XSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVcGRhdGVzIHRoZSBzZWxlY3RlZCBtdWx0aXBsZSBkYXRlIHJhbmdlcyBmcm9tIGEgZGF0ZSBzdHJpbmcuXG4gICAgICogQHBhcmFtIGRhdGVTdHIgVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIG11bHRpcGxlIGRhdGUgcmFuZ2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZU11bHRpcGxlRGF0ZVJhbmdlcyhkYXRlU3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgPSAhdGhpcy5hbGxvd051bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzID0gW3sgc3RhcnQ6IG51bGwsIGVuZDogbnVsbCB9XTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hDdXJyZW50bHlEaXNwbGF5ZWRDYWxlbmRhckRhdGUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmFuZ2VTdHJpbmdzID0gZGF0ZVN0ci5zcGxpdCgnLCcpLm1hcCgocmFuZ2UpID0+IHJhbmdlLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJhbmdlcyA9IHJhbmdlU3RyaW5ncy5tYXAoKHJhbmdlU3RyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbc3RhcnRTdHIsIGVuZFN0cl0gPSByYW5nZVN0ci5zcGxpdCh0aGlzLl9yYW5nZURlbGltaXRlcikubWFwKChkYXRlKSA9PiBkYXRlLnRyaW0oKSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9wYXJzZURhdGUoc3RhcnRTdHIpLFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fcGFyc2VEYXRlKGVuZFN0cilcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBuZXcgcGFyc2VkIHJhbmdlcyBhcmUgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgcmFuZ2VzXG4gICAgICAgIGNvbnN0IHJhbmdlc0NoYW5nZWQgPSAhdGhpcy5fYXJlRGF0ZVJhbmdlc0VxdWFsKHBhcnNlZFJhbmdlcywgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG5cbiAgICAgICAgdGhpcy5faXNJbnZhbGlkRGF0ZUlucHV0ID0gIXRoaXMuX2lzTXVsdGlwbGVSYW5nZXNNb2RlbFZhbGlkKHBhcnNlZFJhbmdlcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9pc0ludmFsaWREYXRlSW5wdXQgJiYgcmFuZ2VzQ2hhbmdlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzU3RhcnREYXRlVmFsaWQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlc1swXS5zdGFydCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoQ3VycmVudGx5RGlzcGxheWVkQ2FsZW5kYXJEYXRlKHRoaXMuc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNbMF0uc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyA9IHBhcnNlZFJhbmdlcztcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZE11bHRpcGxlRGF0ZVJhbmdlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSGVscGVyIG1ldGhvZCB0byBjb21wYXJlIHR3byBhcnJheXMgb2YgZGF0ZSByYW5nZXMgKi9cbiAgICBwcml2YXRlIF9hcmVEYXRlUmFuZ2VzRXF1YWwocmFuZ2VzMTogRGF0ZVJhbmdlPEQ+W10sIHJhbmdlczI6IERhdGVSYW5nZTxEPltdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChyYW5nZXMxLmxlbmd0aCAhPT0gcmFuZ2VzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmFuZ2VzMS5ldmVyeShcbiAgICAgICAgICAgIChyYW5nZSwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVRpbWVBZGFwdGVyLmRhdGVzRXF1YWwocmFuZ2Uuc3RhcnQsIHJhbmdlczJbaW5kZXhdLnN0YXJ0KSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVUaW1lQWRhcHRlci5kYXRlc0VxdWFsKHJhbmdlLmVuZCwgcmFuZ2VzMltpbmRleF0uZW5kKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtb2JpbGUgPyBjb250cm9sVGVtcGxhdGUgOiBkZXNrdG9wVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwb3BvdmVyTWVzc2FnZVRlbXBsYXRlPlxuICAgIEBpZiAoX21lc3NhZ2UpIHtcbiAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBbZW1iZWRkZWRdPVwidHJ1ZVwiIFt0eXBlXT1cInN0YXRlXCI+XG4gICAgICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZXNrdG9wVGVtcGxhdGU+XG4gICAgPGZkLXBvcG92ZXJcbiAgICAgICAgWyhpc09wZW4pXT1cImlzT3BlblwiXG4gICAgICAgIChiZWZvcmVPcGVuKT1cIl9iZWZvcmVQb3BvdmVyT3BlbigpXCJcbiAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJfb25PcGVuU3RhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbdHJpZ2dlcnNdPVwiW11cIlxuICAgICAgICBbcGxhY2VtZW50XT1cInBsYWNlbWVudFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtmb2N1c0F1dG9DYXB0dXJlXT1cImZhbHNlXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCJcbiAgICA+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc09wZW5cIiBbYXR0ci5hcmlhLWhpZGRlbl09XCIhaXNPcGVuXCI+XG4gICAgICAgICAgICBAaWYgKF9zaG93UG9wb3ZlckNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBvcG92ZXJNZXNzYWdlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FsZW5kYXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgICA8ZmQtaW5wdXQtZ3JvdXBcbiAgICAgICAgI2lucHV0R3JvdXBDb21wb25lbnRcbiAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2lzQ29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgW2J1dHRvbl09XCJ0cnVlXCJcbiAgICAgICAgW2J1dHRvbkZvY3VzYWJsZV09XCJidXR0b25Gb2N1c2FibGVcIlxuICAgICAgICBnbHlwaD1cImFwcG9pbnRtZW50LTJcIlxuICAgICAgICBbaXNFeHBhbmRlZF09XCJpc09wZW5cIlxuICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiJ2NvcmVEYXRlUGlja2VyLmRpc3BsYXlDYWxlbmRhclRvZ2dsZUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgW2ljb25UaXRsZV09XCInY29yZURhdGVQaWNrZXIuZGlzcGxheUNhbGVuZGFyVG9nZ2xlTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAoYWRkT25CdXR0b25DbGlja2VkKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxuICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWlucHV0XCJcbiAgICAgICAgICAgIGZkLWlucHV0LWdyb3VwLWlucHV0XG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImdyaWRcIlxuICAgICAgICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNPcGVuXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9kYXRlSW5wdXRBcmlhbExhYmVsS2V5IHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIl9mb3JtVmFsdWVTdGF0ZU1lc3NhZ2VJZFwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJfaW5wdXRGaWVsZERhdGVcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsIGZhbHNlKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5mNCk9XCJ0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vYmlsZSAmJiBvcGVuQ2FsZW5kYXIoKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJfb25CbHVyKCRldmVudClcIlxuICAgICAgICAvPlxuICAgIDwvZmQtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjYWxlbmRhclRlbXBsYXRlPlxuICAgIDxmZC1jYWxlbmRhclxuICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgW21hcmtXZWVrZW5kc109XCJtYXJrV2Vla2VuZHNcIlxuICAgICAgICBbc3BlY2lhbERheXNSdWxlc109XCJzcGVjaWFsRGF5c1J1bGVzXCJcbiAgICAgICAgW3Nob3dXZWVrTnVtYmVyc109XCJzaG93V2Vla051bWJlcnNcIlxuICAgICAgICBbYWxsb3dNdWx0aXBsZVNlbGVjdGlvbl09XCJhbGxvd011bHRpcGxlU2VsZWN0aW9uXCJcbiAgICAgICAgW2FnZ3JlZ2F0ZWRZZWFyR3JpZF09XCJhZ2dyZWdhdGVkWWVhckdyaWRcIlxuICAgICAgICBbeWVhckdyaWRdPVwieWVhckdyaWRcIlxuICAgICAgICBbY2FsVHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW3JhbmdlSG92ZXJFZmZlY3RdPVwicmFuZ2VIb3ZlckVmZmVjdFwiXG4gICAgICAgIFtkaXNhYmxlRnVuY3Rpb25dPVwiZGlzYWJsZUZ1bmN0aW9uXCJcbiAgICAgICAgW2Rpc2FibGVSYW5nZVN0YXJ0RnVuY3Rpb25dPVwiZGlzYWJsZVJhbmdlU3RhcnRGdW5jdGlvblwiXG4gICAgICAgIFtkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvbl09XCJkaXNhYmxlUmFuZ2VFbmRGdW5jdGlvblwiXG4gICAgICAgIFtzZWxlY3RlZERhdGVdPVwic2VsZWN0ZWREYXRlXCJcbiAgICAgICAgW3NlbGVjdGVkTXVsdGlwbGVEYXRlc109XCJzZWxlY3RlZE11bHRpcGxlRGF0ZXNcIlxuICAgICAgICBbc2VsZWN0ZWRSYW5nZURhdGVdPVwic2VsZWN0ZWRSYW5nZURhdGVcIlxuICAgICAgICBbc2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNdPVwic2VsZWN0ZWRNdWx0aXBsZURhdGVSYW5nZXNcIlxuICAgICAgICBbc3RhcnRpbmdEYXlPZldlZWtdPVwic3RhcnRpbmdEYXlPZldlZWtcIlxuICAgICAgICBbcHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb25dPVwicHJldmlvdXNCdXR0b25EaXNhYmxlRnVuY3Rpb25cIlxuICAgICAgICBbbmV4dEJ1dHRvbkRpc2FibGVGdW5jdGlvbl09XCJuZXh0QnV0dG9uRGlzYWJsZUZ1bmN0aW9uXCJcbiAgICAgICAgW3Nob3dDYWxlbmRhckxlZ2VuZF09XCJzaG93Q2FsZW5kYXJMZWdlbmQoKVwiXG4gICAgICAgIFtsZWdlbmRDb2xdPVwibGVnZW5kQ29sKClcIlxuICAgICAgICBbbW9iaWxlTGFuZHNjYXBlXT1cIm1vYmlsZSAmJiBtb2JpbGVMYW5kc2NhcGVcIlxuICAgICAgICBbbW9iaWxlUG9ydHJhaXRdPVwibW9iaWxlICYmIG1vYmlsZVBvcnRyYWl0XCJcbiAgICAgICAgW2RhdGVSYW5nZUZvcm1hdF09XCJkYXRlUmFuZ2VGb3JtYXRcIlxuICAgICAgICAoc2VsZWN0ZWREYXRlQ2hhbmdlKT1cImhhbmRsZVNpbmdsZURhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RlZE11bHRpcGxlRGF0ZXNDaGFuZ2UpPVwiaGFuZGxlTXVsdGlwbGVEYXRlc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGVkUmFuZ2VEYXRlQ2hhbmdlKT1cImhhbmRsZVJhbmdlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGVkTXVsdGlwbGVEYXRlUmFuZ2VzQ2hhbmdlKT1cImhhbmRsZU11bHRpcGxlRGF0ZVJhbmdlc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGFjdGl2ZVZpZXdDaGFuZ2UpPVwiaGFuZGxlQ2FsZW5kYXJBY3RpdmVWaWV3Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY2xvc2VDYWxlbmRhcik9XCJjbG9zZUZyb21DYWxlbmRhcigpXCJcbiAgICA+PC9mZC1jYWxlbmRhcj5cbiAgICBAaWYgKHNob3dUb2RheUJ1dHRvbikge1xuICAgICAgICA8ZGl2IGZkLWJhciBiYXJEZXNpZ249XCJmb290ZXJcIiBjbGFzcz1cImZkLWRhdGUtcGlja2VyX19iYXJcIj5cbiAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvcmVDYWxlbmRhci50b2RheUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRvZGF5QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48ZGl2IFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXYgW2F0dHIuaWRdPVwiX2Zvcm1WYWx1ZVN0YXRlTWVzc2FnZUlkXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+XG4gICAgICAgIEBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgICAgICBAY2FzZSAoJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAge3sgJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVTdWNjZXNzTWVzc2FnZScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdpbmZvcm1hdGlvbicpIHtcbiAgICAgICAgICAgICAgICB7eyAnY29yZURhdGVQaWNrZXIudmFsdWVTdGF0ZUluZm9ybWF0aW9uTWVzc2FnZScgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCd3YXJuaW5nJykge1xuICAgICAgICAgICAgICAgIHt7ICdjb3JlRGF0ZVBpY2tlci52YWx1ZVN0YXRlV2FybmluZ01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAge3sgJ2NvcmVEYXRlUGlja2VyLnZhbHVlU3RhdGVFcnJvck1lc3NhZ2UnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB7eyBfbWVzc2FnZSB9fVxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=","import { NgModule } from '@angular/core';\nimport { DatePickerMobileComponent } from './date-picker-mobile/date-picker-mobile.component';\nimport { DatePickerComponent } from './date-picker.component';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\nexport class DatePickerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, imports: [DatePickerComponent, DatePickerMobileComponent], exports: [DatePickerComponent, DatePickerMobileComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, imports: [DatePickerComponent, DatePickerMobileComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: DatePickerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [DatePickerComponent, DatePickerMobileComponent],\n exports: [DatePickerComponent, DatePickerMobileComponent]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUU5RDs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sZ0JBQWdCOzhHQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQixZQUhmLG1CQUFtQixFQUFFLHlCQUF5QixhQUM5QyxtQkFBbUIsRUFBRSx5QkFBeUI7K0dBRS9DLGdCQUFnQixZQUhmLG1CQUFtQixFQUFFLHlCQUF5Qjs7MkZBRy9DLGdCQUFnQjtrQkFKNUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx5QkFBeUIsQ0FBQztvQkFDekQsT0FBTyxFQUFFLENBQUMsbUJBQW1CLEVBQUUseUJBQXlCLENBQUM7aUJBQzVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGF0ZVBpY2tlck1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1waWNrZXItbW9iaWxlL2RhdGUtcGlja2VyLW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50JztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogVXNlIGRpcmVjdCBpbXBvcnRzIG9mIGNvbXBvbmVudHMgYW5kIGRpcmVjdGl2ZXMuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0RhdGVQaWNrZXJDb21wb25lbnQsIERhdGVQaWNrZXJNb2JpbGVDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtEYXRlUGlja2VyQ29tcG9uZW50LCBEYXRlUGlja2VyTW9iaWxlQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtZGF0ZS1waWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZS1waWNrZXIvZnVuZGFtZW50YWwtbmd4LWNvcmUtZGF0ZS1waWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}