primeng 18.0.0-beta.2 → 18.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (553) hide show
  1. package/accordion/accordion.d.ts +147 -22
  2. package/accordion/public_api.d.ts +1 -1
  3. package/autocomplete/public_api.d.ts +1 -0
  4. package/avatar/public_api.d.ts +1 -0
  5. package/avatargroup/avatargroup.d.ts +1 -1
  6. package/avatargroup/public_api.d.ts +1 -0
  7. package/badge/badge.d.ts +20 -26
  8. package/badge/public_api.d.ts +1 -0
  9. package/base/style/basestyle.d.ts +4 -0
  10. package/blockui/public_api.d.ts +1 -0
  11. package/breadcrumb/breadcrumb.d.ts +0 -1
  12. package/breadcrumb/public_api.d.ts +1 -0
  13. package/button/button.d.ts +0 -1
  14. package/button/public_api.d.ts +1 -0
  15. package/buttongroup/buttongroup.d.ts +1 -1
  16. package/buttongroup/public_api.d.ts +1 -0
  17. package/calendar/public_api.d.ts +1 -0
  18. package/card/public_api.d.ts +1 -0
  19. package/carousel/public_api.d.ts +1 -0
  20. package/cascadeselect/public_api.d.ts +1 -0
  21. package/chart/public_api.d.ts +1 -0
  22. package/chart/style/chartstyle.d.ts +32 -0
  23. package/checkbox/public_api.d.ts +1 -0
  24. package/chip/public_api.d.ts +1 -0
  25. package/colorpicker/public_api.d.ts +1 -0
  26. package/confirmdialog/public_api.d.ts +1 -0
  27. package/confirmpopup/public_api.d.ts +1 -0
  28. package/contextmenu/public_api.d.ts +1 -0
  29. package/dataview/public_api.d.ts +1 -0
  30. package/datepicker/public_api.d.ts +1 -0
  31. package/dock/public_api.d.ts +1 -0
  32. package/drawer/public_api.d.ts +1 -0
  33. package/dropdown/public_api.d.ts +1 -0
  34. package/dynamicdialog/dynamicdialog.d.ts +5 -0
  35. package/dynamicdialog/public_api.d.ts +1 -0
  36. package/editor/public_api.d.ts +1 -0
  37. package/esm2022/accordion/accordion.mjs +430 -80
  38. package/esm2022/accordion/public_api.mjs +2 -2
  39. package/esm2022/accordion/style/accordionstyle.mjs +3 -2
  40. package/esm2022/autocomplete/autocomplete.mjs +3 -3
  41. package/esm2022/autocomplete/public_api.mjs +2 -1
  42. package/esm2022/avatar/avatar.mjs +3 -2
  43. package/esm2022/avatar/public_api.mjs +2 -1
  44. package/esm2022/avatargroup/avatargroup.mjs +3 -3
  45. package/esm2022/avatargroup/public_api.mjs +2 -1
  46. package/esm2022/badge/badge.mjs +39 -51
  47. package/esm2022/badge/public_api.mjs +2 -1
  48. package/esm2022/blockui/public_api.mjs +2 -1
  49. package/esm2022/breadcrumb/breadcrumb.mjs +98 -119
  50. package/esm2022/breadcrumb/public_api.mjs +2 -1
  51. package/esm2022/button/button.mjs +3 -7
  52. package/esm2022/button/public_api.mjs +2 -1
  53. package/esm2022/buttongroup/buttongroup.mjs +3 -3
  54. package/esm2022/buttongroup/public_api.mjs +2 -1
  55. package/esm2022/calendar/calendar.mjs +2 -2
  56. package/esm2022/calendar/public_api.mjs +2 -1
  57. package/esm2022/card/public_api.mjs +2 -1
  58. package/esm2022/carousel/public_api.mjs +2 -1
  59. package/esm2022/cascadeselect/public_api.mjs +2 -1
  60. package/esm2022/chart/public_api.mjs +2 -1
  61. package/esm2022/chart/style/chartstyle.mjs +36 -0
  62. package/esm2022/checkbox/public_api.mjs +2 -1
  63. package/esm2022/chip/public_api.mjs +2 -1
  64. package/esm2022/colorpicker/public_api.mjs +2 -1
  65. package/esm2022/confirmdialog/public_api.mjs +2 -1
  66. package/esm2022/confirmpopup/public_api.mjs +2 -1
  67. package/esm2022/contextmenu/contextmenu.mjs +1 -1
  68. package/esm2022/contextmenu/public_api.mjs +2 -1
  69. package/esm2022/dataview/public_api.mjs +2 -1
  70. package/esm2022/datepicker/datepicker.mjs +18 -6
  71. package/esm2022/datepicker/public_api.mjs +2 -1
  72. package/esm2022/dialog/dialog.mjs +21 -16
  73. package/esm2022/divider/divider.mjs +4 -4
  74. package/esm2022/dock/public_api.mjs +2 -1
  75. package/esm2022/drawer/drawer.mjs +15 -11
  76. package/esm2022/drawer/public_api.mjs +2 -1
  77. package/esm2022/dropdown/dropdown.mjs +2 -2
  78. package/esm2022/dropdown/public_api.mjs +2 -1
  79. package/esm2022/dropdown/style/dropdownstyle.mjs +2 -2
  80. package/esm2022/dynamicdialog/dynamicdialog.mjs +94 -24
  81. package/esm2022/dynamicdialog/public_api.mjs +2 -1
  82. package/esm2022/editor/editor.mjs +6 -5
  83. package/esm2022/editor/public_api.mjs +2 -1
  84. package/esm2022/fieldset/fieldset.mjs +11 -21
  85. package/esm2022/fieldset/public_api.mjs +2 -1
  86. package/esm2022/fileupload/public_api.mjs +2 -1
  87. package/esm2022/floatlabel/floatlabel.mjs +18 -13
  88. package/esm2022/floatlabel/public_api.mjs +2 -1
  89. package/esm2022/floatlabel/style/floatlabelstyle.mjs +63 -28
  90. package/esm2022/fluid/public_api.mjs +2 -1
  91. package/esm2022/galleria/galleria.mjs +113 -124
  92. package/esm2022/galleria/public_api.mjs +2 -1
  93. package/esm2022/iconfield/iconfield.mjs +4 -4
  94. package/esm2022/iconfield/public_api.mjs +2 -1
  95. package/esm2022/iconfield/style/iconfieldstyle.mjs +10 -20
  96. package/esm2022/iftalabel/iftalabel.mjs +43 -0
  97. package/esm2022/iftalabel/primeng-iftalabel.mjs +5 -0
  98. package/esm2022/iftalabel/public_api.mjs +3 -0
  99. package/esm2022/iftalabel/style/iftalabelstyle.mjs +96 -0
  100. package/esm2022/image/image.interface.mjs +1 -1
  101. package/esm2022/image/image.mjs +86 -42
  102. package/esm2022/image/public_api.mjs +2 -1
  103. package/esm2022/inplace/inplace.mjs +3 -3
  104. package/esm2022/inplace/public_api.mjs +2 -1
  105. package/esm2022/inputgroup/public_api.mjs +2 -1
  106. package/esm2022/inputgroup/style/inputgroupstyle.mjs +30 -17
  107. package/esm2022/inputgroupaddon/inputgroupaddon.mjs +15 -13
  108. package/esm2022/inputgroupaddon/public_api.mjs +2 -1
  109. package/esm2022/inputicon/inputicon.mjs +7 -4
  110. package/esm2022/inputicon/public_api.mjs +2 -1
  111. package/esm2022/inputmask/inputmask.mjs +2 -2
  112. package/esm2022/inputmask/public_api.mjs +2 -1
  113. package/esm2022/inputnumber/inputnumber.mjs +218 -220
  114. package/esm2022/inputnumber/public_api.mjs +2 -1
  115. package/esm2022/inputnumber/style/inputnumberstyle.mjs +6 -1
  116. package/esm2022/inputotp/inputotp.mjs +1 -1
  117. package/esm2022/inputotp/public_api.mjs +2 -1
  118. package/esm2022/inputswitch/public_api.mjs +2 -1
  119. package/esm2022/inputtext/inputtext.mjs +11 -2
  120. package/esm2022/inputtext/public_api.mjs +2 -1
  121. package/esm2022/inputtextarea/public_api.mjs +2 -1
  122. package/esm2022/knob/public_api.mjs +2 -1
  123. package/esm2022/listbox/listbox.mjs +37 -12
  124. package/esm2022/listbox/public_api.mjs +2 -1
  125. package/esm2022/megamenu/megamenu.mjs +1 -1
  126. package/esm2022/megamenu/public_api.mjs +2 -1
  127. package/esm2022/menu/menu.mjs +5 -3
  128. package/esm2022/menu/public_api.mjs +2 -1
  129. package/esm2022/menubar/menubar.mjs +3 -3
  130. package/esm2022/menubar/public_api.mjs +2 -1
  131. package/esm2022/message/message.mjs +2 -34
  132. package/esm2022/messages/public_api.mjs +2 -1
  133. package/esm2022/metergroup/public_api.mjs +2 -1
  134. package/esm2022/multiselect/multiselect.mjs +679 -673
  135. package/esm2022/multiselect/public_api.mjs +2 -1
  136. package/esm2022/orderlist/orderlist.mjs +88 -16
  137. package/esm2022/orderlist/public_api.mjs +2 -1
  138. package/esm2022/organizationchart/organizationchart.mjs +5 -5
  139. package/esm2022/organizationchart/public_api.mjs +2 -1
  140. package/esm2022/overlay/public_api.mjs +2 -1
  141. package/esm2022/overlaybadge/overlaybadge.mjs +4 -6
  142. package/esm2022/overlaybadge/public_api.mjs +2 -1
  143. package/esm2022/overlaypanel/public_api.mjs +2 -1
  144. package/esm2022/paginator/public_api.mjs +2 -1
  145. package/esm2022/panelmenu/panelmenu.mjs +18 -10
  146. package/esm2022/panelmenu/public_api.mjs +2 -1
  147. package/esm2022/password/password.mjs +5 -3
  148. package/esm2022/password/public_api.mjs +2 -1
  149. package/esm2022/picklist/picklist.mjs +186 -16
  150. package/esm2022/picklist/public_api.mjs +2 -1
  151. package/esm2022/popover/public_api.mjs +2 -1
  152. package/esm2022/progressbar/public_api.mjs +2 -1
  153. package/esm2022/progressspinner/public_api.mjs +2 -1
  154. package/esm2022/radiobutton/public_api.mjs +2 -1
  155. package/esm2022/rating/public_api.mjs +2 -1
  156. package/esm2022/rating/rating.mjs +11 -108
  157. package/esm2022/ripple/public_api.mjs +2 -1
  158. package/esm2022/scroller/public_api.mjs +2 -1
  159. package/esm2022/scroller/scroller.mjs +2 -2
  160. package/esm2022/scrollpanel/public_api.mjs +2 -1
  161. package/esm2022/scrolltop/public_api.mjs +2 -1
  162. package/esm2022/scrolltop/scrolltop.mjs +19 -14
  163. package/esm2022/select/select.mjs +8 -16
  164. package/esm2022/select/style/selectstyle.mjs +2 -2
  165. package/esm2022/selectbutton/public_api.mjs +2 -1
  166. package/esm2022/selectbutton/style/selectbuttonstyle.mjs +3 -3
  167. package/esm2022/sidebar/public_api.mjs +2 -1
  168. package/esm2022/skeleton/public_api.mjs +2 -1
  169. package/esm2022/slider/public_api.mjs +2 -1
  170. package/esm2022/speeddial/public_api.mjs +2 -1
  171. package/esm2022/speeddial/speeddial.interface.mjs +1 -1
  172. package/esm2022/speeddial/speeddial.mjs +73 -49
  173. package/esm2022/speeddial/style/speeddialstyle.mjs +2 -2
  174. package/esm2022/splitbutton/public_api.mjs +2 -1
  175. package/esm2022/splitbutton/splitbutton.mjs +19 -6
  176. package/esm2022/splitter/public_api.mjs +2 -1
  177. package/esm2022/stepper/public_api.mjs +2 -2
  178. package/esm2022/stepper/stepper.mjs +367 -660
  179. package/esm2022/stepper/style/stepperstyle.mjs +1 -2
  180. package/esm2022/steps/public_api.mjs +2 -1
  181. package/esm2022/table/public_api.mjs +2 -1
  182. package/esm2022/table/table.mjs +24 -20
  183. package/esm2022/tabmenu/public_api.mjs +2 -1
  184. package/esm2022/tabmenu/tabmenu.mjs +9 -5
  185. package/esm2022/tabs/public_api.mjs +6 -2
  186. package/esm2022/tabs/tab.mjs +171 -0
  187. package/esm2022/tabs/tablist.mjs +256 -0
  188. package/esm2022/tabs/tabpanel.mjs +49 -0
  189. package/esm2022/tabs/tabpanels.mjs +30 -0
  190. package/esm2022/tabs/tabs.mjs +45 -948
  191. package/esm2022/tabview/public_api.mjs +2 -1
  192. package/esm2022/tabview/style/tabsstyle.mjs +15 -15
  193. package/esm2022/tag/public_api.mjs +2 -1
  194. package/esm2022/terminal/public_api.mjs +2 -1
  195. package/esm2022/textarea/public_api.mjs +2 -1
  196. package/esm2022/themes/aura/aura.mjs +7 -3
  197. package/esm2022/themes/aura/floatlabel/index.mjs +29 -1
  198. package/esm2022/themes/aura/iftalabel/index.mjs +16 -0
  199. package/esm2022/themes/lara/floatlabel/index.mjs +27 -1
  200. package/esm2022/themes/lara/iftalabel/index.mjs +16 -0
  201. package/esm2022/themes/lara/lara.mjs +7 -3
  202. package/esm2022/themes/nora/floatlabel/index.mjs +27 -1
  203. package/esm2022/themes/nora/iftalabel/index.mjs +16 -0
  204. package/esm2022/themes/nora/nora.mjs +7 -3
  205. package/esm2022/tieredmenu/public_api.mjs +2 -1
  206. package/esm2022/timeline/public_api.mjs +2 -1
  207. package/esm2022/timeline/timeline.mjs +54 -68
  208. package/esm2022/toast/public_api.mjs +2 -1
  209. package/esm2022/togglebutton/public_api.mjs +2 -1
  210. package/esm2022/togglebutton/style/togglebuttonstyle.mjs +2 -2
  211. package/esm2022/togglebutton/togglebutton.mjs +83 -76
  212. package/esm2022/toggleswitch/public_api.mjs +2 -1
  213. package/esm2022/toggleswitch/style/toggleswitchstyle.mjs +8 -5
  214. package/esm2022/toggleswitch/toggleswitch.mjs +44 -48
  215. package/esm2022/toolbar/public_api.mjs +2 -1
  216. package/esm2022/tooltip/public_api.mjs +2 -1
  217. package/esm2022/tree/public_api.mjs +2 -1
  218. package/esm2022/tree/tree.mjs +7 -4
  219. package/esm2022/treeselect/public_api.mjs +2 -1
  220. package/esm2022/treeselect/treeselect.mjs +7 -56
  221. package/esm2022/treetable/public_api.mjs +2 -1
  222. package/esm2022/treetable/style/treetablestyle.mjs +2 -2
  223. package/esm2022/treetable/treetable.mjs +4 -4
  224. package/esm2022/utils/inpututils.mjs +7 -0
  225. package/esm2022/utils/public_api.mjs +3 -2
  226. package/fesm2022/primeng-accordion.mjs +433 -82
  227. package/fesm2022/primeng-accordion.mjs.map +1 -1
  228. package/fesm2022/primeng-autocomplete.mjs +3 -3
  229. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  230. package/fesm2022/primeng-avatar.mjs +3 -2
  231. package/fesm2022/primeng-avatar.mjs.map +1 -1
  232. package/fesm2022/primeng-avatargroup.mjs +3 -3
  233. package/fesm2022/primeng-avatargroup.mjs.map +1 -1
  234. package/fesm2022/primeng-badge.mjs +39 -51
  235. package/fesm2022/primeng-badge.mjs.map +1 -1
  236. package/fesm2022/primeng-blockui.mjs +1 -1
  237. package/fesm2022/primeng-blockui.mjs.map +1 -1
  238. package/fesm2022/primeng-breadcrumb.mjs +98 -119
  239. package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
  240. package/fesm2022/primeng-button.mjs +3 -7
  241. package/fesm2022/primeng-button.mjs.map +1 -1
  242. package/fesm2022/primeng-buttongroup.mjs +3 -3
  243. package/fesm2022/primeng-buttongroup.mjs.map +1 -1
  244. package/fesm2022/primeng-calendar.mjs +2 -2
  245. package/fesm2022/primeng-calendar.mjs.map +1 -1
  246. package/fesm2022/primeng-card.mjs +1 -1
  247. package/fesm2022/primeng-card.mjs.map +1 -1
  248. package/fesm2022/primeng-carousel.mjs +1 -1
  249. package/fesm2022/primeng-carousel.mjs.map +1 -1
  250. package/fesm2022/primeng-cascadeselect.mjs +1 -1
  251. package/fesm2022/primeng-cascadeselect.mjs.map +1 -1
  252. package/fesm2022/primeng-chart.mjs +36 -2
  253. package/fesm2022/primeng-chart.mjs.map +1 -1
  254. package/fesm2022/primeng-checkbox.mjs +1 -1
  255. package/fesm2022/primeng-checkbox.mjs.map +1 -1
  256. package/fesm2022/primeng-chip.mjs +1 -1
  257. package/fesm2022/primeng-chip.mjs.map +1 -1
  258. package/fesm2022/primeng-colorpicker.mjs +1 -1
  259. package/fesm2022/primeng-colorpicker.mjs.map +1 -1
  260. package/fesm2022/primeng-confirmdialog.mjs +1 -1
  261. package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
  262. package/fesm2022/primeng-confirmpopup.mjs +1 -1
  263. package/fesm2022/primeng-confirmpopup.mjs.map +1 -1
  264. package/fesm2022/primeng-contextmenu.mjs +2 -2
  265. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  266. package/fesm2022/primeng-dataview.mjs +1 -1
  267. package/fesm2022/primeng-dataview.mjs.map +1 -1
  268. package/fesm2022/primeng-datepicker.mjs +18 -6
  269. package/fesm2022/primeng-datepicker.mjs.map +1 -1
  270. package/fesm2022/primeng-dialog.mjs +20 -15
  271. package/fesm2022/primeng-dialog.mjs.map +1 -1
  272. package/fesm2022/primeng-divider.mjs +3 -3
  273. package/fesm2022/primeng-divider.mjs.map +1 -1
  274. package/fesm2022/primeng-dock.mjs +1 -1
  275. package/fesm2022/primeng-dock.mjs.map +1 -1
  276. package/fesm2022/primeng-drawer.mjs +15 -11
  277. package/fesm2022/primeng-drawer.mjs.map +1 -1
  278. package/fesm2022/primeng-dropdown.mjs +3 -3
  279. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  280. package/fesm2022/primeng-dynamicdialog.mjs +94 -24
  281. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -1
  282. package/fesm2022/primeng-editor.mjs +5 -4
  283. package/fesm2022/primeng-editor.mjs.map +1 -1
  284. package/fesm2022/primeng-fieldset.mjs +11 -21
  285. package/fesm2022/primeng-fieldset.mjs.map +1 -1
  286. package/fesm2022/primeng-fileupload.mjs +1 -1
  287. package/fesm2022/primeng-fileupload.mjs.map +1 -1
  288. package/fesm2022/primeng-floatlabel.mjs +80 -40
  289. package/fesm2022/primeng-floatlabel.mjs.map +1 -1
  290. package/fesm2022/primeng-fluid.mjs +1 -1
  291. package/fesm2022/primeng-fluid.mjs.map +1 -1
  292. package/fesm2022/primeng-galleria.mjs +113 -124
  293. package/fesm2022/primeng-galleria.mjs.map +1 -1
  294. package/fesm2022/primeng-iconfield.mjs +13 -23
  295. package/fesm2022/primeng-iconfield.mjs.map +1 -1
  296. package/fesm2022/primeng-iftalabel.mjs +143 -0
  297. package/fesm2022/primeng-iftalabel.mjs.map +1 -0
  298. package/fesm2022/primeng-image.mjs +85 -41
  299. package/fesm2022/primeng-image.mjs.map +1 -1
  300. package/fesm2022/primeng-inplace.mjs +3 -3
  301. package/fesm2022/primeng-inplace.mjs.map +1 -1
  302. package/fesm2022/primeng-inputgroup.mjs +30 -17
  303. package/fesm2022/primeng-inputgroup.mjs.map +1 -1
  304. package/fesm2022/primeng-inputgroupaddon.mjs +15 -13
  305. package/fesm2022/primeng-inputgroupaddon.mjs.map +1 -1
  306. package/fesm2022/primeng-inputicon.mjs +7 -4
  307. package/fesm2022/primeng-inputicon.mjs.map +1 -1
  308. package/fesm2022/primeng-inputmask.mjs +2 -2
  309. package/fesm2022/primeng-inputmask.mjs.map +1 -1
  310. package/fesm2022/primeng-inputnumber.mjs +223 -220
  311. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  312. package/fesm2022/primeng-inputotp.mjs +2 -2
  313. package/fesm2022/primeng-inputotp.mjs.map +1 -1
  314. package/fesm2022/primeng-inputswitch.mjs +1 -1
  315. package/fesm2022/primeng-inputtext.mjs +11 -2
  316. package/fesm2022/primeng-inputtext.mjs.map +1 -1
  317. package/fesm2022/primeng-inputtextarea.mjs +1 -1
  318. package/fesm2022/primeng-inputtextarea.mjs.map +1 -1
  319. package/fesm2022/primeng-knob.mjs +1 -1
  320. package/fesm2022/primeng-knob.mjs.map +1 -1
  321. package/fesm2022/primeng-listbox.mjs +37 -12
  322. package/fesm2022/primeng-listbox.mjs.map +1 -1
  323. package/fesm2022/primeng-megamenu.mjs +2 -2
  324. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  325. package/fesm2022/primeng-menu.mjs +4 -2
  326. package/fesm2022/primeng-menu.mjs.map +1 -1
  327. package/fesm2022/primeng-menubar.mjs +3 -3
  328. package/fesm2022/primeng-menubar.mjs.map +1 -1
  329. package/fesm2022/primeng-message.mjs +1 -33
  330. package/fesm2022/primeng-message.mjs.map +1 -1
  331. package/fesm2022/primeng-messages.mjs +1 -1
  332. package/fesm2022/primeng-metergroup.mjs +1 -1
  333. package/fesm2022/primeng-metergroup.mjs.map +1 -1
  334. package/fesm2022/primeng-multiselect.mjs +679 -673
  335. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  336. package/fesm2022/primeng-orderlist.mjs +87 -15
  337. package/fesm2022/primeng-orderlist.mjs.map +1 -1
  338. package/fesm2022/primeng-organizationchart.mjs +5 -5
  339. package/fesm2022/primeng-organizationchart.mjs.map +1 -1
  340. package/fesm2022/primeng-overlay.mjs +1 -1
  341. package/fesm2022/primeng-overlaybadge.mjs +4 -6
  342. package/fesm2022/primeng-overlaybadge.mjs.map +1 -1
  343. package/fesm2022/primeng-overlaypanel.mjs +1 -1
  344. package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
  345. package/fesm2022/primeng-paginator.mjs +1 -1
  346. package/fesm2022/primeng-paginator.mjs.map +1 -1
  347. package/fesm2022/primeng-panelmenu.mjs +17 -9
  348. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  349. package/fesm2022/primeng-password.mjs +4 -2
  350. package/fesm2022/primeng-password.mjs.map +1 -1
  351. package/fesm2022/primeng-picklist.mjs +185 -15
  352. package/fesm2022/primeng-picklist.mjs.map +1 -1
  353. package/fesm2022/primeng-popover.mjs +1 -1
  354. package/fesm2022/primeng-progressbar.mjs +1 -1
  355. package/fesm2022/primeng-progressbar.mjs.map +1 -1
  356. package/fesm2022/primeng-progressspinner.mjs +1 -1
  357. package/fesm2022/primeng-progressspinner.mjs.map +1 -1
  358. package/fesm2022/primeng-radiobutton.mjs +1 -1
  359. package/fesm2022/primeng-radiobutton.mjs.map +1 -1
  360. package/fesm2022/primeng-rating.mjs +11 -108
  361. package/fesm2022/primeng-rating.mjs.map +1 -1
  362. package/fesm2022/primeng-ripple.mjs +1 -1
  363. package/fesm2022/primeng-ripple.mjs.map +1 -1
  364. package/fesm2022/primeng-scroller.mjs +2 -2
  365. package/fesm2022/primeng-scroller.mjs.map +1 -1
  366. package/fesm2022/primeng-scrollpanel.mjs +1 -1
  367. package/fesm2022/primeng-scrollpanel.mjs.map +1 -1
  368. package/fesm2022/primeng-scrolltop.mjs +19 -14
  369. package/fesm2022/primeng-scrolltop.mjs.map +1 -1
  370. package/fesm2022/primeng-select.mjs +8 -16
  371. package/fesm2022/primeng-select.mjs.map +1 -1
  372. package/fesm2022/primeng-selectbutton.mjs +3 -3
  373. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  374. package/fesm2022/primeng-sidebar.mjs +1 -1
  375. package/fesm2022/primeng-skeleton.mjs +1 -1
  376. package/fesm2022/primeng-skeleton.mjs.map +1 -1
  377. package/fesm2022/primeng-slider.mjs +1 -1
  378. package/fesm2022/primeng-slider.mjs.map +1 -1
  379. package/fesm2022/primeng-speeddial.mjs +73 -49
  380. package/fesm2022/primeng-speeddial.mjs.map +1 -1
  381. package/fesm2022/primeng-splitbutton.mjs +19 -6
  382. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  383. package/fesm2022/primeng-splitter.mjs +1 -1
  384. package/fesm2022/primeng-splitter.mjs.map +1 -1
  385. package/fesm2022/primeng-stepper.mjs +368 -662
  386. package/fesm2022/primeng-stepper.mjs.map +1 -1
  387. package/fesm2022/primeng-steps.mjs +1 -1
  388. package/fesm2022/primeng-steps.mjs.map +1 -1
  389. package/fesm2022/primeng-table.mjs +24 -20
  390. package/fesm2022/primeng-table.mjs.map +1 -1
  391. package/fesm2022/primeng-tabmenu.mjs +8 -4
  392. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  393. package/fesm2022/primeng-tabs.mjs +460 -886
  394. package/fesm2022/primeng-tabs.mjs.map +1 -1
  395. package/fesm2022/primeng-tabview.mjs +15 -15
  396. package/fesm2022/primeng-tabview.mjs.map +1 -1
  397. package/fesm2022/primeng-tag.mjs +1 -1
  398. package/fesm2022/primeng-tag.mjs.map +1 -1
  399. package/fesm2022/primeng-terminal.mjs +1 -1
  400. package/fesm2022/primeng-terminal.mjs.map +1 -1
  401. package/fesm2022/primeng-textarea.mjs +1 -1
  402. package/fesm2022/primeng-textarea.mjs.map +1 -1
  403. package/fesm2022/primeng-themes-aura.mjs +49 -2
  404. package/fesm2022/primeng-themes-aura.mjs.map +1 -1
  405. package/fesm2022/primeng-themes-lara.mjs +47 -2
  406. package/fesm2022/primeng-themes-lara.mjs.map +1 -1
  407. package/fesm2022/primeng-themes-nora.mjs +47 -2
  408. package/fesm2022/primeng-themes-nora.mjs.map +1 -1
  409. package/fesm2022/primeng-tieredmenu.mjs +1 -1
  410. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  411. package/fesm2022/primeng-timeline.mjs +54 -68
  412. package/fesm2022/primeng-timeline.mjs.map +1 -1
  413. package/fesm2022/primeng-toast.mjs +1 -1
  414. package/fesm2022/primeng-toast.mjs.map +1 -1
  415. package/fesm2022/primeng-togglebutton.mjs +84 -77
  416. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  417. package/fesm2022/primeng-toggleswitch.mjs +50 -51
  418. package/fesm2022/primeng-toggleswitch.mjs.map +1 -1
  419. package/fesm2022/primeng-toolbar.mjs +1 -1
  420. package/fesm2022/primeng-toolbar.mjs.map +1 -1
  421. package/fesm2022/primeng-tooltip.mjs +1 -1
  422. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  423. package/fesm2022/primeng-tree.mjs +7 -4
  424. package/fesm2022/primeng-tree.mjs.map +1 -1
  425. package/fesm2022/primeng-treeselect.mjs +7 -56
  426. package/fesm2022/primeng-treeselect.mjs.map +1 -1
  427. package/fesm2022/primeng-treetable.mjs +4 -4
  428. package/fesm2022/primeng-treetable.mjs.map +1 -1
  429. package/fesm2022/primeng-utils.mjs +8 -1
  430. package/fesm2022/primeng-utils.mjs.map +1 -1
  431. package/fieldset/fieldset.d.ts +1 -6
  432. package/fieldset/public_api.d.ts +1 -0
  433. package/fileupload/public_api.d.ts +1 -0
  434. package/floatlabel/floatlabel.d.ts +6 -1
  435. package/floatlabel/public_api.d.ts +1 -0
  436. package/floatlabel/style/floatlabelstyle.d.ts +3 -6
  437. package/fluid/public_api.d.ts +1 -0
  438. package/galleria/public_api.d.ts +1 -0
  439. package/iconfield/iconfield.d.ts +1 -1
  440. package/iconfield/public_api.d.ts +1 -0
  441. package/iftalabel/iftalabel.d.ts +20 -0
  442. package/iftalabel/index.d.ts +5 -0
  443. package/iftalabel/public_api.d.ts +2 -0
  444. package/iftalabel/style/iftalabelstyle.d.ts +30 -0
  445. package/image/image.d.ts +2 -0
  446. package/image/image.interface.d.ts +32 -0
  447. package/image/public_api.d.ts +1 -0
  448. package/inplace/public_api.d.ts +1 -0
  449. package/inputgroup/public_api.d.ts +1 -0
  450. package/inputgroupaddon/inputgroupaddon.d.ts +3 -0
  451. package/inputgroupaddon/public_api.d.ts +1 -0
  452. package/inputicon/public_api.d.ts +1 -0
  453. package/inputmask/public_api.d.ts +1 -0
  454. package/inputnumber/inputnumber.d.ts +1 -0
  455. package/inputnumber/public_api.d.ts +1 -0
  456. package/inputotp/public_api.d.ts +1 -0
  457. package/inputswitch/public_api.d.ts +1 -0
  458. package/inputtext/inputtext.d.ts +6 -1
  459. package/inputtext/public_api.d.ts +1 -0
  460. package/inputtextarea/public_api.d.ts +1 -0
  461. package/knob/public_api.d.ts +1 -0
  462. package/listbox/listbox.d.ts +14 -6
  463. package/listbox/public_api.d.ts +1 -0
  464. package/megamenu/public_api.d.ts +1 -0
  465. package/menu/public_api.d.ts +1 -0
  466. package/menubar/public_api.d.ts +1 -0
  467. package/messages/public_api.d.ts +1 -0
  468. package/metergroup/public_api.d.ts +1 -0
  469. package/multiselect/multiselect.d.ts +1 -1
  470. package/multiselect/public_api.d.ts +1 -0
  471. package/orderlist/orderlist.d.ts +28 -1
  472. package/orderlist/public_api.d.ts +1 -0
  473. package/organizationchart/organizationchart.d.ts +1 -1
  474. package/organizationchart/public_api.d.ts +1 -0
  475. package/overlay/public_api.d.ts +1 -0
  476. package/overlaybadge/overlaybadge.d.ts +2 -2
  477. package/overlaybadge/public_api.d.ts +1 -0
  478. package/overlaypanel/public_api.d.ts +1 -0
  479. package/package.json +281 -275
  480. package/paginator/public_api.d.ts +1 -0
  481. package/panelmenu/panelmenu.d.ts +1 -1
  482. package/panelmenu/public_api.d.ts +1 -0
  483. package/password/password.d.ts +1 -1
  484. package/password/public_api.d.ts +1 -0
  485. package/picklist/picklist.d.ts +52 -5
  486. package/picklist/public_api.d.ts +1 -0
  487. package/popover/public_api.d.ts +1 -0
  488. package/progressbar/public_api.d.ts +1 -0
  489. package/progressspinner/public_api.d.ts +1 -0
  490. package/radiobutton/public_api.d.ts +1 -0
  491. package/rating/public_api.d.ts +1 -0
  492. package/rating/rating.d.ts +1 -20
  493. package/ripple/public_api.d.ts +1 -0
  494. package/scroller/public_api.d.ts +1 -0
  495. package/scrollpanel/public_api.d.ts +1 -0
  496. package/scrolltop/public_api.d.ts +1 -0
  497. package/selectbutton/public_api.d.ts +1 -0
  498. package/sidebar/public_api.d.ts +1 -0
  499. package/skeleton/public_api.d.ts +1 -0
  500. package/slider/public_api.d.ts +1 -0
  501. package/speeddial/public_api.d.ts +1 -0
  502. package/speeddial/speeddial.d.ts +25 -2
  503. package/speeddial/speeddial.interface.d.ts +17 -1
  504. package/splitbutton/public_api.d.ts +1 -0
  505. package/splitbutton/splitbutton.d.ts +6 -1
  506. package/splitter/public_api.d.ts +1 -0
  507. package/stepper/public_api.d.ts +1 -1
  508. package/stepper/stepper.d.ts +140 -88
  509. package/steps/public_api.d.ts +1 -0
  510. package/table/public_api.d.ts +1 -0
  511. package/tabmenu/public_api.d.ts +1 -0
  512. package/tabmenu/tabmenu.d.ts +1 -0
  513. package/tabs/public_api.d.ts +5 -1
  514. package/tabs/tab.d.ts +47 -0
  515. package/tabs/tablist.d.ts +51 -0
  516. package/tabs/tabpanel.d.ts +20 -0
  517. package/tabs/tabpanels.d.ts +10 -0
  518. package/tabs/tabs.d.ts +31 -237
  519. package/tabview/public_api.d.ts +1 -0
  520. package/tabview/style/tabsstyle.d.ts +4 -4
  521. package/tag/public_api.d.ts +1 -0
  522. package/terminal/public_api.d.ts +1 -0
  523. package/textarea/public_api.d.ts +1 -0
  524. package/themes/aura/aura.d.ts +45 -0
  525. package/themes/aura/floatlabel/index.d.ts +28 -0
  526. package/themes/aura/iftalabel/index.d.ts +16 -0
  527. package/themes/lara/floatlabel/index.d.ts +26 -0
  528. package/themes/lara/iftalabel/index.d.ts +16 -0
  529. package/themes/lara/lara.d.ts +43 -0
  530. package/themes/nora/floatlabel/index.d.ts +26 -0
  531. package/themes/nora/iftalabel/index.d.ts +16 -0
  532. package/themes/nora/nora.d.ts +43 -0
  533. package/tieredmenu/public_api.d.ts +1 -0
  534. package/timeline/public_api.d.ts +1 -0
  535. package/timeline/timeline.d.ts +1 -0
  536. package/toast/public_api.d.ts +1 -0
  537. package/togglebutton/public_api.d.ts +1 -0
  538. package/togglebutton/togglebutton.d.ts +6 -7
  539. package/toggleswitch/public_api.d.ts +1 -0
  540. package/toolbar/public_api.d.ts +1 -0
  541. package/tooltip/public_api.d.ts +1 -0
  542. package/tree/public_api.d.ts +1 -0
  543. package/tree/tree.d.ts +1 -0
  544. package/treeselect/public_api.d.ts +1 -0
  545. package/treetable/public_api.d.ts +1 -0
  546. package/utils/inpututils.d.ts +2 -0
  547. package/utils/public_api.d.ts +2 -1
  548. package/accordion/accordion.interface.d.ts +0 -49
  549. package/esm2022/accordion/accordion.interface.mjs +0 -2
  550. package/esm2022/stepper/stepper.interface.mjs +0 -2
  551. package/esm2022/tabs/tabs.interface.mjs +0 -2
  552. package/stepper/stepper.interface.d.ts +0 -26
  553. package/tabs/tabs.interface.d.ts +0 -49
@@ -1,554 +1,303 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, inject, Input, NgModule, Output, ViewEncapsulation, } from '@angular/core';
3
- import { PrimeTemplate, SharedModule } from 'primeng/api';
4
- import { UniqueComponentId } from 'primeng/utils';
5
- import { animate, state, style, transition, trigger } from '@angular/animations';
2
+ import { ChangeDetectionStrategy, Component, computed, contentChild, ContentChild, ContentChildren, contentChildren, effect, forwardRef, inject, input, model, NgModule, signal, ViewEncapsulation, } from '@angular/core';
6
3
  import { BaseComponent } from 'primeng/basecomponent';
4
+ import { ObjectUtils, transformToBoolean, UniqueComponentId } from 'primeng/utils';
7
5
  import { StepperStyle } from './style/stepperstyle';
6
+ import { DomHandler } from 'primeng/dom';
7
+ import { animate, state, style, transition, trigger } from '@angular/animations';
8
+ import { PrimeTemplate, SharedModule } from 'primeng/api';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@angular/common";
10
- export class StepperHeader {
11
- id;
12
- template;
13
- stepperPanel;
14
- index;
15
- disabled;
16
- active;
17
- highlighted;
18
- getStepProp;
19
- ariaControls;
20
- onClick = new EventEmitter();
21
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
22
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: StepperHeader, selector: "p-stepperHeader, p-stepper-header", inputs: { id: "id", template: "template", stepperPanel: "stepperPanel", index: "index", disabled: "disabled", active: "active", highlighted: "highlighted", getStepProp: "getStepProp", ariaControls: "ariaControls" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
23
- <ng-container *ngIf="template; else buttonRef">
24
- <ng-container
25
- *ngTemplateOutlet="
26
- template;
27
- context: {
28
- index: index,
29
- active: active,
30
- highlighted: highlighted,
31
- class: 'p-stepper-action',
32
- headerClass: 'p-stepper-action',
33
- numberClass: 'p-stepper-number',
34
- titleClass: 'p-stepper-title',
35
- onClick: onClick,
36
- }
37
- "
38
- ></ng-container>
39
- </ng-container>
40
- <ng-template #buttonRef>
41
- <p-button
42
- [id]="id"
43
- class="p-step-header"
44
- role="tab"
45
- [tabindex]="disabled ? -1 : undefined"
46
- [aria-controls]="ariaControls"
47
- (click)="onClick.emit($event, index)"
48
- >
49
- <span class="p-step-number">{{ index + 1 }}</span>
50
- <span class="p-step-title">{{ getStepProp }}</span>
51
- </p-button>
52
- </ng-template>
53
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
11
+ export class StepList extends BaseComponent {
12
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepList, deps: null, target: i0.ɵɵFactoryTarget.Component });
13
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: StepList, isStandalone: true, selector: "p-step-list", host: { properties: { "class.p-steplist": "true", "class.p-component": "true" } }, usesInheritance: true, ngImport: i0, template: ` <ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
54
14
  }
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperHeader, decorators: [{
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepList, decorators: [{
56
16
  type: Component,
57
17
  args: [{
58
- selector: 'p-stepperHeader, p-stepper-header',
59
- template: `
60
- <ng-container *ngIf="template; else buttonRef">
61
- <ng-container
62
- *ngTemplateOutlet="
63
- template;
64
- context: {
65
- index: index,
66
- active: active,
67
- highlighted: highlighted,
68
- class: 'p-stepper-action',
69
- headerClass: 'p-stepper-action',
70
- numberClass: 'p-stepper-number',
71
- titleClass: 'p-stepper-title',
72
- onClick: onClick,
73
- }
74
- "
75
- ></ng-container>
76
- </ng-container>
77
- <ng-template #buttonRef>
78
- <p-button
79
- [id]="id"
80
- class="p-step-header"
81
- role="tab"
82
- [tabindex]="disabled ? -1 : undefined"
83
- [aria-controls]="ariaControls"
84
- (click)="onClick.emit($event, index)"
85
- >
86
- <span class="p-step-number">{{ index + 1 }}</span>
87
- <span class="p-step-title">{{ getStepProp }}</span>
88
- </p-button>
89
- </ng-template>
90
- `,
18
+ selector: 'p-step-list',
19
+ standalone: true,
20
+ imports: [CommonModule],
21
+ template: ` <ng-content></ng-content>`,
22
+ changeDetection: ChangeDetectionStrategy.OnPush,
23
+ encapsulation: ViewEncapsulation.None,
24
+ host: {
25
+ '[class.p-steplist]': 'true',
26
+ '[class.p-component]': 'true',
27
+ },
91
28
  }]
92
- }], propDecorators: { id: [{
93
- type: Input
94
- }], template: [{
95
- type: Input
96
- }], stepperPanel: [{
97
- type: Input
98
- }], index: [{
99
- type: Input
100
- }], disabled: [{
101
- type: Input
102
- }], active: [{
103
- type: Input
104
- }], highlighted: [{
105
- type: Input
106
- }], getStepProp: [{
107
- type: Input
108
- }], ariaControls: [{
109
- type: Input
110
- }], onClick: [{
111
- type: Output
112
- }] } });
113
- export class StepperSeparator {
114
- template;
115
- separatorClass;
116
- stepperPanel;
117
- index;
118
- active;
119
- highlighted;
120
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperSeparator, deps: [], target: i0.ɵɵFactoryTarget.Component });
121
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: StepperSeparator, selector: "p-stepperSeparator, p-stepper-separator", inputs: { template: "template", separatorClass: "separatorClass", stepperPanel: "stepperPanel", index: "index", active: "active", highlighted: "highlighted" }, host: { classAttribute: "p-stepper-separator" }, ngImport: i0, template: `
122
- <ng-container *ngIf="template; else span">
123
- <ng-container
124
- *ngTemplateOutlet="template; context: { index: index, active: active, highlighted: highlighted, class: separatorClass }"
125
- ></ng-container>
126
- </ng-container>
127
- <ng-template #span>
128
- <span [class]="separatorClass" aria-hidden="true"></span>
129
- </ng-template>
130
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
29
+ }] });
30
+ export class StepperSeparator extends BaseComponent {
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperSeparator, deps: null, target: i0.ɵɵFactoryTarget.Component });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: StepperSeparator, isStandalone: true, selector: "p-stepper-separator", host: { properties: { "class.p-stepper-separator": "true", "class.p-component": "true" } }, usesInheritance: true, ngImport: i0, template: ` <ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
131
33
  }
132
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperSeparator, decorators: [{
133
35
  type: Component,
134
36
  args: [{
135
- selector: 'p-stepperSeparator, p-stepper-separator',
136
- template: `
137
- <ng-container *ngIf="template; else span">
138
- <ng-container
139
- *ngTemplateOutlet="template; context: { index: index, active: active, highlighted: highlighted, class: separatorClass }"
140
- ></ng-container>
141
- </ng-container>
142
- <ng-template #span>
143
- <span [class]="separatorClass" aria-hidden="true"></span>
144
- </ng-template>
145
- `,
37
+ selector: 'p-stepper-separator',
38
+ standalone: true,
39
+ imports: [CommonModule],
40
+ template: ` <ng-content></ng-content>`,
41
+ changeDetection: ChangeDetectionStrategy.OnPush,
42
+ encapsulation: ViewEncapsulation.None,
146
43
  host: {
147
- class: 'p-stepper-separator',
44
+ '[class.p-stepper-separator]': 'true',
45
+ '[class.p-component]': 'true',
148
46
  },
149
47
  }]
150
- }], propDecorators: { template: [{
151
- type: Input
152
- }], separatorClass: [{
153
- type: Input
154
- }], stepperPanel: [{
155
- type: Input
156
- }], index: [{
157
- type: Input
158
- }], active: [{
159
- type: Input
160
- }], highlighted: [{
161
- type: Input
162
- }] } });
163
- export class StepperContent {
164
- id;
165
- orientation;
166
- template;
167
- ariaLabelledby;
168
- stepperPanel;
169
- index;
170
- active;
171
- highlighted;
172
- onClick = new EventEmitter();
173
- prevCallback = new EventEmitter();
174
- nextCallback = new EventEmitter();
175
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
176
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: StepperContent, selector: "p-stepperContent, p-stepper-content", inputs: { id: "id", orientation: "orientation", template: "template", ariaLabelledby: "ariaLabelledby", stepperPanel: "stepperPanel", index: "index", active: "active", highlighted: "highlighted" }, outputs: { onClick: "onClick", prevCallback: "prevCallback", nextCallback: "nextCallback" }, host: { properties: { "class.p-steppanel-content": "true", "class.p-element": "true", "class.p-toggleable-content": "orientation === 'vertical'" } }, ngImport: i0, template: ` <div
177
- [id]="id"
178
- role="tabpanel"
179
- data-pc-name="stepperpanel"
180
- [attr.data-pc-index]="index"
181
- [attr.data-p-active]="active"
182
- [attr.aria-labelledby]="ariaLabelledby"
183
- >
184
- <ng-container *ngIf="template">
185
- <ng-container
186
- *ngTemplateOutlet="
187
- template;
188
- context: {
189
- index: index,
190
- active: active,
191
- highlighted: highlighted,
192
- onClick: onClick,
193
- prevCallback: prevCallback,
194
- nextCallback: nextCallback,
195
- }
196
- "
197
- ></ng-container>
198
- </ng-container>
199
- <ng-template *ngIf="!template">
200
- <ng-container *ngIf="stepperPanel">
201
- <ng-container *ngTemplateOutlet="stepperPanel"></ng-container>
202
- </ng-container>
203
- </ng-template>
204
- </div>`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
48
+ }] });
49
+ /**
50
+ * StepItem is a helper component for Stepper component used in vertical orientation.
51
+ * @group Components
52
+ */
53
+ export class StepItem extends BaseComponent {
54
+ pcStepper = inject(forwardRef(() => Stepper));
55
+ /**
56
+ * Value of step.
57
+ * @type {<number | undefined>}
58
+ * @defaultValue undefined
59
+ * @group Props
60
+ */
61
+ value = model();
62
+ isActive = computed(() => this.pcStepper.value() === this.value());
63
+ step = contentChild(Step);
64
+ stepPanel = contentChild(StepPanel);
65
+ constructor() {
66
+ super();
67
+ effect(() => {
68
+ this.step().value.set(this.value());
69
+ }, { allowSignalWrites: true });
70
+ effect(() => {
71
+ this.stepPanel().value.set(this.value());
72
+ }, { allowSignalWrites: true });
73
+ }
74
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
75
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.2", type: StepItem, isStandalone: true, selector: "p-step-item", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.p-stepitem": "true", "class.p-component": "true", "attr.data-p-active": "isActive()" } }, queries: [{ propertyName: "step", first: true, predicate: Step, descendants: true, isSignal: true }, { propertyName: "stepPanel", first: true, predicate: StepPanel, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: ` <ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
205
76
  }
206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperContent, decorators: [{
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepItem, decorators: [{
207
78
  type: Component,
208
79
  args: [{
209
- selector: 'p-stepperContent, p-stepper-content',
210
- template: ` <div
211
- [id]="id"
212
- role="tabpanel"
213
- data-pc-name="stepperpanel"
214
- [attr.data-pc-index]="index"
215
- [attr.data-p-active]="active"
216
- [attr.aria-labelledby]="ariaLabelledby"
217
- >
218
- <ng-container *ngIf="template">
219
- <ng-container
220
- *ngTemplateOutlet="
221
- template;
222
- context: {
223
- index: index,
224
- active: active,
225
- highlighted: highlighted,
226
- onClick: onClick,
227
- prevCallback: prevCallback,
228
- nextCallback: nextCallback,
229
- }
230
- "
231
- ></ng-container>
232
- </ng-container>
233
- <ng-template *ngIf="!template">
234
- <ng-container *ngIf="stepperPanel">
235
- <ng-container *ngTemplateOutlet="stepperPanel"></ng-container>
236
- </ng-container>
237
- </ng-template>
238
- </div>`,
80
+ selector: 'p-step-item',
81
+ standalone: true,
82
+ imports: [CommonModule],
83
+ template: ` <ng-content></ng-content>`,
84
+ changeDetection: ChangeDetectionStrategy.OnPush,
85
+ encapsulation: ViewEncapsulation.None,
239
86
  host: {
240
- '[class.p-steppanel-content]': 'true',
241
- '[class.p-element]': 'true',
242
- '[class.p-toggleable-content]': "orientation === 'vertical'",
87
+ '[class.p-stepitem]': 'true',
88
+ '[class.p-component]': 'true',
89
+ '[attr.data-p-active]': 'isActive()',
243
90
  },
244
91
  }]
245
- }], propDecorators: { id: [{
246
- type: Input
247
- }], orientation: [{
248
- type: Input
249
- }], template: [{
250
- type: Input
251
- }], ariaLabelledby: [{
252
- type: Input
253
- }], stepperPanel: [{
254
- type: Input
255
- }], index: [{
256
- type: Input
257
- }], active: [{
258
- type: Input
259
- }], highlighted: [{
260
- type: Input
261
- }], onClick: [{
262
- type: Output
263
- }], prevCallback: [{
264
- type: Output
265
- }], nextCallback: [{
266
- type: Output
267
- }] } });
268
- export class StepperPanel extends BaseComponent {
269
- header;
270
- templates;
271
- headerTemplate;
272
- startTemplate;
92
+ }], ctorParameters: () => [] });
93
+ /**
94
+ * Step is a helper component for Stepper component.
95
+ * @group Components
96
+ */
97
+ export class Step extends BaseComponent {
98
+ pcStepper = inject(forwardRef(() => Stepper));
99
+ /**
100
+ * Active value of stepper.
101
+ * @type {number}
102
+ * @defaultValue undefined
103
+ * @group Props
104
+ */
105
+ value = model();
106
+ /**
107
+ * Whether the step is disabled.
108
+ * @type {boolean}
109
+ * @defaultValue false
110
+ * @group Props
111
+ */
112
+ disabled = input(false, {
113
+ transform: (v) => transformToBoolean(v),
114
+ });
115
+ active = computed(() => this.pcStepper.isStepActive(this.value()));
116
+ isStepDisabled = computed(() => !this.active() && (this.pcStepper.linear() || this.disabled()));
117
+ id = computed(() => `${this.pcStepper.id()}_step_${this.value()}`);
118
+ ariaControls = computed(() => `${this.pcStepper.id()}_steppanel_${this.value()}`);
119
+ isSeparatorVisible = computed(() => {
120
+ if (this.pcStepper.stepList()) {
121
+ const index = ObjectUtils.findIndexInList(this.el.nativeElement, this.pcStepper.stepList().el.nativeElement.children);
122
+ const stepLen = DomHandler.find(this.pcStepper.stepList().el.nativeElement, '[data-pc-name="step"]').length;
123
+ return index !== stepLen - 1;
124
+ }
125
+ });
126
+ /**
127
+ * Content template.
128
+ * @type {TemplateRef<StepContentTemplateContext>}
129
+ * @group Templates
130
+ */
273
131
  contentTemplate;
274
- separatorTemplate;
275
- endTemplate;
132
+ templates;
276
133
  ngAfterContentInit() {
277
- this.templates.forEach((item) => {
134
+ this.templates?.forEach((item) => {
278
135
  switch (item.getType()) {
279
- case 'header':
280
- this.headerTemplate = item.template;
281
- break;
282
136
  case 'content':
283
137
  this.contentTemplate = item.template;
284
138
  break;
285
- case 'separator':
286
- this.separatorTemplate = item.template;
287
- break;
288
139
  }
289
140
  });
290
141
  }
291
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperPanel, deps: null, target: i0.ɵɵFactoryTarget.Component });
292
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: StepperPanel, selector: "p-stepperPanel, p-stepper-panel", inputs: { header: "header" }, queries: [{ propertyName: "templates", predicate: PrimeTemplate }], usesInheritance: true, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true });
142
+ onStepClick() {
143
+ this.pcStepper.updateValue(this.value());
144
+ }
145
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: Step, deps: null, target: i0.ɵɵFactoryTarget.Component });
146
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: Step, isStandalone: true, selector: "p-step", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.p-step": "true", "class.p-step-active": "active()", "class.p-disabled": "isStepDisabled()", "class.p-component": "true", "attr.aria-current": "active() ? \"step\" : undefined", "attr.role": "\"presentation\"", "attr.data-p-active": "active()", "attr.data-p-disabled": "isStepDisabled()", "attr.data-pc-name": "\"step\"" } }, queries: [{ propertyName: "contentTemplate", first: true, predicate: ["content"], descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], usesInheritance: true, ngImport: i0, template: `
147
+ @if (!contentTemplate) {
148
+ <button
149
+ [attr.id]="id()"
150
+ class="p-step-header"
151
+ [attr.role]="'tab'"
152
+ [tabindex]="isStepDisabled() ? -1 : undefined"
153
+ [attr.aria-controls]="ariaControls()"
154
+ [disabled]="isStepDisabled()"
155
+ (click)="onStepClick()"
156
+ >
157
+ <span class="p-step-number">{{ value() }}</span>
158
+ <span class="p-step-title">
159
+ <ng-content></ng-content>
160
+ </span>
161
+ </button>
162
+ @if (isSeparatorVisible()) {
163
+ <p-stepper-separator />
164
+ }
165
+ } @else {
166
+ <ng-container
167
+ *ngTemplateOutlet="contentTemplate; context: { activateCallback: onStepClick.bind(this), value: value(), active: active() }"
168
+ ></ng-container>
169
+ @if (isSeparatorVisible()) {
170
+ <p-stepper-separator />
171
+ }
172
+ }
173
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: StepperSeparator, selector: "p-stepper-separator" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
293
174
  }
294
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperPanel, decorators: [{
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: Step, decorators: [{
295
176
  type: Component,
296
177
  args: [{
297
- selector: 'p-stepperPanel, p-stepper-panel',
298
- template: ` <ng-content></ng-content> `,
178
+ selector: 'p-step',
179
+ standalone: true,
180
+ imports: [CommonModule, StepperSeparator],
181
+ template: `
182
+ @if (!contentTemplate) {
183
+ <button
184
+ [attr.id]="id()"
185
+ class="p-step-header"
186
+ [attr.role]="'tab'"
187
+ [tabindex]="isStepDisabled() ? -1 : undefined"
188
+ [attr.aria-controls]="ariaControls()"
189
+ [disabled]="isStepDisabled()"
190
+ (click)="onStepClick()"
191
+ >
192
+ <span class="p-step-number">{{ value() }}</span>
193
+ <span class="p-step-title">
194
+ <ng-content></ng-content>
195
+ </span>
196
+ </button>
197
+ @if (isSeparatorVisible()) {
198
+ <p-stepper-separator />
199
+ }
200
+ } @else {
201
+ <ng-container
202
+ *ngTemplateOutlet="contentTemplate; context: { activateCallback: onStepClick.bind(this), value: value(), active: active() }"
203
+ ></ng-container>
204
+ @if (isSeparatorVisible()) {
205
+ <p-stepper-separator />
206
+ }
207
+ }
208
+ `,
209
+ changeDetection: ChangeDetectionStrategy.OnPush,
210
+ encapsulation: ViewEncapsulation.None,
211
+ host: {
212
+ '[class.p-step]': 'true',
213
+ '[class.p-step-active]': 'active()',
214
+ '[class.p-disabled]': 'isStepDisabled()',
215
+ '[class.p-component]': 'true',
216
+ '[attr.aria-current]': 'active() ? "step" : undefined',
217
+ '[attr.role]': '"presentation"',
218
+ '[attr.data-p-active]': 'active()',
219
+ '[attr.data-p-disabled]': 'isStepDisabled()',
220
+ '[attr.data-pc-name]': '"step"',
221
+ },
299
222
  }]
300
- }], propDecorators: { header: [{
301
- type: Input
223
+ }], propDecorators: { contentTemplate: [{
224
+ type: ContentChild,
225
+ args: ['content']
302
226
  }], templates: [{
303
227
  type: ContentChildren,
304
228
  args: [PrimeTemplate]
305
229
  }] } });
306
230
  /**
307
- * The Stepper component displays a wizard-like workflow by guiding users through the multi-step progression.
231
+ * StepPanel is a helper component for Stepper component.
308
232
  * @group Components
309
233
  */
310
- export class Stepper extends BaseComponent {
234
+ export class StepPanel extends BaseComponent {
235
+ pcStepper = inject(forwardRef(() => Stepper));
236
+ transitionOptions = computed(() => this.pcStepper.transitionOptions());
311
237
  /**
312
- * Active step index of stepper.
238
+ * Active value of stepper.
239
+ * @type {number}
240
+ * @defaultValue undefined
313
241
  * @group Props
314
242
  */
315
- activeStep = 0;
316
- /**
317
- * Orientation of the stepper.
318
- * @group Props
319
- */
320
- orientation = 'horizontal';
243
+ value = model(undefined);
244
+ active = computed(() => this.pcStepper.value() === this.value());
245
+ ariaControls = computed(() => `${this.pcStepper.id()}_step_${this.value()}`);
246
+ id = computed(() => `${this.pcStepper.id()}_steppanel_${this.value()}`);
247
+ isVertical = computed(() => this.pcStepper.stepItems().length > 0);
248
+ isSeparatorVisible = computed(() => {
249
+ if (this.pcStepper.stepItems()) {
250
+ const stepLen = this.pcStepper.stepItems().length;
251
+ const stepPanelElements = DomHandler.find(this.pcStepper.el.nativeElement, '[data-pc-name="steppanel"]');
252
+ const index = ObjectUtils.findIndexInList(this.el.nativeElement, stepPanelElements);
253
+ return index !== stepLen - 1;
254
+ }
255
+ });
321
256
  /**
322
- * Whether the steps are clickable or not.
323
- * @group Props
257
+ * Content template.
258
+ * @type {TemplateRef<StepPanelContentTemplateContext>}
259
+ * @group Templates
324
260
  */
325
- linear = false;
326
- /**
327
- * Transition options of the animation.
328
- * @group Props
329
- */
330
- transitionOptions = '400ms cubic-bezier(0.86, 0, 0.07, 1)';
331
- stepperPanels;
261
+ contentTemplate;
332
262
  templates;
333
- onClick = new EventEmitter();
334
- /**
335
- * Emitted when the value changes.
336
- * @param {ActiveStepChangeEvent} event - custom change event.
337
- * @group Emits
338
- */
339
- activeStepChange = new EventEmitter();
340
- _componentStyle = inject(StepperStyle);
341
- headerTemplate;
342
- startTemplate;
343
- separatorTemplate;
344
- endTemplate;
345
- id = UniqueComponentId();
346
- panels;
347
- isStepActive(index) {
348
- return this.activeStep === index;
349
- }
350
- getStepProp(step) {
351
- if (step?.header) {
352
- return step.header;
353
- }
354
- if (step?.content) {
355
- return step.content;
356
- }
357
- return undefined;
358
- }
359
- getStepKey(step, index) {
360
- return this.getStepProp(step) || index;
361
- }
362
- getStepHeaderActionId(index) {
363
- return `${this.id}_${index}_header_action`;
364
- }
365
- getStepContentId(index) {
366
- return `${this.id}_${index}_content`;
367
- }
368
- updateActiveStep(event, index) {
369
- this.activeStep = index;
370
- this.activeStepChange.emit(this.activeStep);
371
- }
372
- onItemClick(event, index) {
373
- if (this.linear) {
374
- event.preventDefault();
375
- return;
376
- }
377
- if (index !== this.activeStep) {
378
- this.updateActiveStep(event, index);
379
- }
380
- }
381
- isItemDisabled(index) {
382
- return this.linear && !this.isStepActive(index);
383
- }
384
- prevCallback(event, index) {
385
- if (index !== 0) {
386
- this.updateActiveStep(event, index - 1);
387
- }
388
- }
389
- nextCallback(event, index) {
390
- if (index !== this.stepperPanels.length - 1) {
391
- this.updateActiveStep(event, index + 1);
392
- }
393
- }
394
- trackByFn(index) {
395
- return index;
396
- }
397
263
  ngAfterContentInit() {
398
- this.panels = this.stepperPanels.toArray();
399
- this.templates.forEach((item) => {
264
+ this.templates?.forEach((item) => {
400
265
  switch (item.getType()) {
401
- case 'start':
402
- this.startTemplate = item.template;
403
- break;
404
- case 'end':
405
- this.endTemplate = item.template;
406
- break;
407
- default:
266
+ case 'content':
267
+ this.contentTemplate = item.template;
408
268
  break;
409
269
  }
410
270
  });
411
271
  }
412
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: Stepper, deps: null, target: i0.ɵɵFactoryTarget.Component });
413
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: Stepper, selector: "p-stepper", inputs: { activeStep: "activeStep", orientation: "orientation", linear: "linear", transitionOptions: "transitionOptions" }, outputs: { onClick: "onClick", activeStepChange: "activeStepChange" }, host: { properties: { "class.p-stepper": "true", "class.p-component": "true", "class.p-stepper-vertical": "orientation === 'vertical'" } }, providers: [StepperStyle], queries: [{ propertyName: "stepperPanels", predicate: StepperPanel }, { propertyName: "templates", predicate: PrimeTemplate }], usesInheritance: true, ngImport: i0, template: `
414
- <ng-container *ngIf="startTemplate">
415
- <ng-container *ngTemplateOutlet="startTemplate"></ng-container>
416
- </ng-container>
417
- <ng-container *ngIf="orientation === 'horizontal'; else vertical">
418
- <ul class="p-steplist">
419
- <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn">
420
- <li
421
- [key]="getStepKey(step, index)"
422
- class="p-step"
423
- [ngClass]="{
424
- 'p-step-active': isStepActive(index),
425
- 'p-disabled': isItemDisabled(index),
426
- }"
427
- [attr.aria-current]="isStepActive(index) ? 'step' : undefined"
428
- role="presentation"
429
- [data-pc-name]="stepperPanel"
430
- [data-p-highlight]="isStepActive(index)"
431
- [data-p-disabled]="isItemDisabled(index)"
432
- [data-pc-index]="index"
433
- [data-p-active]="isStepActive(index)"
434
- >
435
- <p-stepper-header
436
- [id]="getStepHeaderActionId(index)"
437
- [template]="step.headerTemplate"
438
- [stepperPanel]="step"
439
- [getStepProp]="getStepProp(step, 'header')"
440
- [index]="index"
441
- [disabled]="isItemDisabled(index)"
442
- [active]="isStepActive(index)"
443
- [highlighted]="index < activeStep"
444
- [aria-controls]="getStepContentId(index)"
445
- (onClick)="onItemClick($event, index)"
446
- ></p-stepper-header>
447
-
448
- <ng-container *ngIf="index !== stepperPanels.length - 1">
449
- <p-stepper-separator
450
- [template]="step.separatorTemplate"
451
- [separatorClass]="'p-stepper-separator'"
452
- [stepperPanel]="step"
453
- [index]="index"
454
- [active]="isStepActive(index)"
455
- [highlighted]="index < activeStep"
456
- />
457
- </ng-container>
458
- </li>
459
- </ng-template>
460
- </ul>
461
- <div class="p-stepper-panels">
462
- <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn">
463
- <ng-container *ngIf="isStepActive(index)">
464
- <p-stepper-content
465
- [id]="getStepContentId(index)"
466
- [template]="step.contentTemplate"
467
- [orientation]="orientation"
468
- [stepperPanel]="step"
469
- [index]="index"
470
- [active]="isStepActive(index)"
471
- [highlighted]="index < activeStep"
472
- [ariaLabelledby]="getStepHeaderActionId(index)"
473
- (onClick)="onItemClick($event, index)"
474
- (nextCallback)="nextCallback($event, index)"
475
- (prevCallback)="prevCallback($event, index)"
476
- />
477
- </ng-container>
478
- </ng-template>
479
- </div>
480
- </ng-container>
481
- <ng-template #vertical>
482
- <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn">
483
- <div
484
- [key]="getStepKey(step, index)"
485
- class="p-stepitem"
486
- [ngClass]="{
487
- 'p-stepitem-active': orientation === 'vertical' && isStepActive(index),
488
- }"
489
- [attr.aria-current]="isStepActive(index) ? 'step' : undefined"
490
- [data-pc-name]="'stepperpanel'"
491
- [data-p-highlight]="isStepActive(index)"
492
- [data-p-disabled]="isItemDisabled(index)"
493
- [data-pc-index]="index"
494
- [data-p-active]="isStepActive(index)"
495
- >
496
- <p-stepper-header
497
- [id]="getStepHeaderActionId(index)"
498
- [template]="step.headerTemplate"
499
- [stepperPanel]="step"
500
- [getStepProp]="getStepProp(step, 'header')"
501
- [index]="index"
502
- [disabled]="isItemDisabled(index)"
503
- [active]="isStepActive(index)"
504
- [highlighted]="index < activeStep"
505
- [aria-controls]="getStepContentId(index)"
506
- class="p-step"
507
- [ngClass]="{ 'p-step-active': isStepActive(index) }"
508
- (onClick)="onItemClick($event, index)"
509
- ></p-stepper-header>
510
-
511
- <div
512
- class="p-steppanel"
513
- [ngClass]="{ 'p-steppanel-active': isStepActive(index) }"
514
- [@tabContent]="
515
- isStepActive(index)
516
- ? { value: 'visible', params: { transitionParams: transitionOptions } }
517
- : { value: 'hidden', params: { transitionParams: transitionOptions } }
518
- "
519
- >
520
- <ng-container *ngIf="index !== stepperPanels.length - 1">
521
- <p-stepper-separator
522
- [template]="step.separatorTemplate"
523
- [separatorClass]="'p-stepper-separator'"
524
- [stepperPanel]="step"
525
- [index]="index"
526
- [active]="isStepActive(index)"
527
- [highlighted]="index < activeStep"
528
- />
529
- </ng-container>
530
- <p-stepper-content
531
- [id]="getStepContentId(index)"
532
- [template]="step.contentTemplate"
533
- [orientation]="orientation"
534
- [stepperPanel]="step"
535
- [index]="index"
536
- [active]="isStepActive(index)"
537
- [highlighted]="index < activeStep"
538
- [ariaLabelledby]="getStepHeaderActionId(index)"
539
- (onClick)="onItemClick($event, index)"
540
- (nextCallback)="nextCallback($event, index)"
541
- (prevCallback)="prevCallback($event, index)"
542
- />
543
- </div>
544
- </div>
545
- </ng-template>
546
- </ng-template>
547
- <ng-container *ngIf="endTemplate">
548
- <ng-container *ngTemplateOutlet="endTemplate"></ng-container>
549
- </ng-container>
550
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: StepperContent, selector: "p-stepperContent, p-stepper-content", inputs: ["id", "orientation", "template", "ariaLabelledby", "stepperPanel", "index", "active", "highlighted"], outputs: ["onClick", "prevCallback", "nextCallback"] }, { kind: "component", type: StepperHeader, selector: "p-stepperHeader, p-stepper-header", inputs: ["id", "template", "stepperPanel", "index", "disabled", "active", "highlighted", "getStepProp", "ariaControls"], outputs: ["onClick"] }, { kind: "component", type: StepperSeparator, selector: "p-stepperSeparator, p-stepper-separator", inputs: ["template", "separatorClass", "stepperPanel", "index", "active", "highlighted"] }], animations: [
551
- trigger('tabContent', [
272
+ updateValue(value) {
273
+ this.pcStepper.updateValue(value);
274
+ }
275
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepPanel, deps: null, target: i0.ɵɵFactoryTarget.Component });
276
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: StepPanel, isStandalone: true, selector: "p-step-panel", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.p-steppanel": "true", "class.p-component": "true", "class.p-steppanel-active": "active()", "attr.role": "\"tabpanel\"", "attr.aria-controls": "ariaControls()", "attr.id": "id()", "attr.data-p-active": "active()", "attr.data-pc-name": "\"steppanel\"" } }, queries: [{ propertyName: "contentTemplate", first: true, predicate: ["content"], descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], usesInheritance: true, ngImport: i0, template: `
277
+ @if (isSeparatorVisible()) {
278
+ <p-stepper-separator />
279
+ }
280
+ <div
281
+ class="p-steppanel-content"
282
+ [@content]="
283
+ isVertical()
284
+ ? active()
285
+ ? { value: 'visible', params: { transitionParams: transitionOptions() } }
286
+ : { value: 'hidden', params: { transitionParams: transitionOptions() } }
287
+ : undefined
288
+ "
289
+ >
290
+ @if (active()) {
291
+ <ng-container
292
+ *ngTemplateOutlet="
293
+ contentTemplate;
294
+ context: { activateCallback: updateValue.bind(this), value: value(), active: active() }
295
+ "
296
+ ></ng-container>
297
+ }
298
+ </div>
299
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: StepperSeparator, selector: "p-stepper-separator" }], animations: [
300
+ trigger('content', [
552
301
  state('hidden', style({
553
302
  height: '0',
554
303
  visibility: 'hidden',
@@ -562,158 +311,50 @@ export class Stepper extends BaseComponent {
562
311
  ]),
563
312
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
564
313
  }
565
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: Stepper, decorators: [{
314
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepPanel, decorators: [{
566
315
  type: Component,
567
316
  args: [{
568
- selector: 'p-stepper',
317
+ selector: 'p-step-panel',
318
+ standalone: true,
319
+ imports: [CommonModule, StepperSeparator],
569
320
  template: `
570
- <ng-container *ngIf="startTemplate">
571
- <ng-container *ngTemplateOutlet="startTemplate"></ng-container>
572
- </ng-container>
573
- <ng-container *ngIf="orientation === 'horizontal'; else vertical">
574
- <ul class="p-steplist">
575
- <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn">
576
- <li
577
- [key]="getStepKey(step, index)"
578
- class="p-step"
579
- [ngClass]="{
580
- 'p-step-active': isStepActive(index),
581
- 'p-disabled': isItemDisabled(index),
582
- }"
583
- [attr.aria-current]="isStepActive(index) ? 'step' : undefined"
584
- role="presentation"
585
- [data-pc-name]="stepperPanel"
586
- [data-p-highlight]="isStepActive(index)"
587
- [data-p-disabled]="isItemDisabled(index)"
588
- [data-pc-index]="index"
589
- [data-p-active]="isStepActive(index)"
590
- >
591
- <p-stepper-header
592
- [id]="getStepHeaderActionId(index)"
593
- [template]="step.headerTemplate"
594
- [stepperPanel]="step"
595
- [getStepProp]="getStepProp(step, 'header')"
596
- [index]="index"
597
- [disabled]="isItemDisabled(index)"
598
- [active]="isStepActive(index)"
599
- [highlighted]="index < activeStep"
600
- [aria-controls]="getStepContentId(index)"
601
- (onClick)="onItemClick($event, index)"
602
- ></p-stepper-header>
603
-
604
- <ng-container *ngIf="index !== stepperPanels.length - 1">
605
- <p-stepper-separator
606
- [template]="step.separatorTemplate"
607
- [separatorClass]="'p-stepper-separator'"
608
- [stepperPanel]="step"
609
- [index]="index"
610
- [active]="isStepActive(index)"
611
- [highlighted]="index < activeStep"
612
- />
613
- </ng-container>
614
- </li>
615
- </ng-template>
616
- </ul>
617
- <div class="p-stepper-panels">
618
- <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn">
619
- <ng-container *ngIf="isStepActive(index)">
620
- <p-stepper-content
621
- [id]="getStepContentId(index)"
622
- [template]="step.contentTemplate"
623
- [orientation]="orientation"
624
- [stepperPanel]="step"
625
- [index]="index"
626
- [active]="isStepActive(index)"
627
- [highlighted]="index < activeStep"
628
- [ariaLabelledby]="getStepHeaderActionId(index)"
629
- (onClick)="onItemClick($event, index)"
630
- (nextCallback)="nextCallback($event, index)"
631
- (prevCallback)="prevCallback($event, index)"
632
- />
633
- </ng-container>
634
- </ng-template>
635
- </div>
636
- </ng-container>
637
- <ng-template #vertical>
638
- <ng-template ngFor let-step [ngForOf]="panels" let-index="index" [ngForTrackBy]="trackByFn">
639
- <div
640
- [key]="getStepKey(step, index)"
641
- class="p-stepitem"
642
- [ngClass]="{
643
- 'p-stepitem-active': orientation === 'vertical' && isStepActive(index),
644
- }"
645
- [attr.aria-current]="isStepActive(index) ? 'step' : undefined"
646
- [data-pc-name]="'stepperpanel'"
647
- [data-p-highlight]="isStepActive(index)"
648
- [data-p-disabled]="isItemDisabled(index)"
649
- [data-pc-index]="index"
650
- [data-p-active]="isStepActive(index)"
651
- >
652
- <p-stepper-header
653
- [id]="getStepHeaderActionId(index)"
654
- [template]="step.headerTemplate"
655
- [stepperPanel]="step"
656
- [getStepProp]="getStepProp(step, 'header')"
657
- [index]="index"
658
- [disabled]="isItemDisabled(index)"
659
- [active]="isStepActive(index)"
660
- [highlighted]="index < activeStep"
661
- [aria-controls]="getStepContentId(index)"
662
- class="p-step"
663
- [ngClass]="{ 'p-step-active': isStepActive(index) }"
664
- (onClick)="onItemClick($event, index)"
665
- ></p-stepper-header>
666
-
667
- <div
668
- class="p-steppanel"
669
- [ngClass]="{ 'p-steppanel-active': isStepActive(index) }"
670
- [@tabContent]="
671
- isStepActive(index)
672
- ? { value: 'visible', params: { transitionParams: transitionOptions } }
673
- : { value: 'hidden', params: { transitionParams: transitionOptions } }
674
- "
675
- >
676
- <ng-container *ngIf="index !== stepperPanels.length - 1">
677
- <p-stepper-separator
678
- [template]="step.separatorTemplate"
679
- [separatorClass]="'p-stepper-separator'"
680
- [stepperPanel]="step"
681
- [index]="index"
682
- [active]="isStepActive(index)"
683
- [highlighted]="index < activeStep"
684
- />
685
- </ng-container>
686
- <p-stepper-content
687
- [id]="getStepContentId(index)"
688
- [template]="step.contentTemplate"
689
- [orientation]="orientation"
690
- [stepperPanel]="step"
691
- [index]="index"
692
- [active]="isStepActive(index)"
693
- [highlighted]="index < activeStep"
694
- [ariaLabelledby]="getStepHeaderActionId(index)"
695
- (onClick)="onItemClick($event, index)"
696
- (nextCallback)="nextCallback($event, index)"
697
- (prevCallback)="prevCallback($event, index)"
698
- />
699
- </div>
700
- </div>
701
- </ng-template>
702
- </ng-template>
703
- <ng-container *ngIf="endTemplate">
704
- <ng-container *ngTemplateOutlet="endTemplate"></ng-container>
705
- </ng-container>
321
+ @if (isSeparatorVisible()) {
322
+ <p-stepper-separator />
323
+ }
324
+ <div
325
+ class="p-steppanel-content"
326
+ [@content]="
327
+ isVertical()
328
+ ? active()
329
+ ? { value: 'visible', params: { transitionParams: transitionOptions() } }
330
+ : { value: 'hidden', params: { transitionParams: transitionOptions() } }
331
+ : undefined
332
+ "
333
+ >
334
+ @if (active()) {
335
+ <ng-container
336
+ *ngTemplateOutlet="
337
+ contentTemplate;
338
+ context: { activateCallback: updateValue.bind(this), value: value(), active: active() }
339
+ "
340
+ ></ng-container>
341
+ }
342
+ </div>
706
343
  `,
707
344
  changeDetection: ChangeDetectionStrategy.OnPush,
708
345
  encapsulation: ViewEncapsulation.None,
709
- providers: [StepperStyle],
710
346
  host: {
711
- '[class.p-stepper]': 'true',
347
+ '[class.p-steppanel]': 'true',
712
348
  '[class.p-component]': 'true',
713
- '[class.p-stepper-vertical]': "orientation === 'vertical'",
349
+ '[class.p-steppanel-active]': 'active()',
350
+ '[attr.role]': '"tabpanel"',
351
+ '[attr.aria-controls]': 'ariaControls()',
352
+ '[attr.id]': 'id()',
353
+ '[attr.data-p-active]': 'active()',
354
+ '[attr.data-pc-name]': '"steppanel"',
714
355
  },
715
356
  animations: [
716
- trigger('tabContent', [
357
+ trigger('content', [
717
358
  state('hidden', style({
718
359
  height: '0',
719
360
  visibility: 'hidden',
@@ -727,36 +368,102 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
727
368
  ]),
728
369
  ],
729
370
  }]
730
- }], propDecorators: { activeStep: [{
731
- type: Input
732
- }], orientation: [{
733
- type: Input
734
- }], linear: [{
735
- type: Input
736
- }], transitionOptions: [{
737
- type: Input
738
- }], stepperPanels: [{
739
- type: ContentChildren,
740
- args: [StepperPanel]
371
+ }], propDecorators: { contentTemplate: [{
372
+ type: ContentChild,
373
+ args: ['content']
741
374
  }], templates: [{
742
375
  type: ContentChildren,
743
376
  args: [PrimeTemplate]
744
- }], onClick: [{
745
- type: Output
746
- }], activeStepChange: [{
747
- type: Output
748
377
  }] } });
378
+ export class StepPanels extends BaseComponent {
379
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepPanels, deps: null, target: i0.ɵɵFactoryTarget.Component });
380
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: StepPanels, isStandalone: true, selector: "p-step-panels", host: { properties: { "class.p-steppanels": "true", "class.p-component": "true" } }, usesInheritance: true, ngImport: i0, template: ` <ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
381
+ }
382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepPanels, decorators: [{
383
+ type: Component,
384
+ args: [{
385
+ selector: 'p-step-panels',
386
+ standalone: true,
387
+ imports: [CommonModule],
388
+ template: ` <ng-content></ng-content>`,
389
+ changeDetection: ChangeDetectionStrategy.OnPush,
390
+ encapsulation: ViewEncapsulation.None,
391
+ host: {
392
+ '[class.p-steppanels]': 'true',
393
+ '[class.p-component]': 'true',
394
+ },
395
+ }]
396
+ }] });
397
+ /**
398
+ * Stepper is a component that streamlines a wizard-like workflow, organizing content into coherent steps and visually guiding users through a numbered progression in a multistep process.
399
+ * @group Components
400
+ */
401
+ export class Stepper extends BaseComponent {
402
+ /**
403
+ * A model that can hold a numeric value or be undefined.
404
+ * @defaultValue undefined
405
+ * @type {ModelSignal<number | undefined>}
406
+ * @group Props
407
+ */
408
+ value = model(undefined);
409
+ /**
410
+ * A boolean variable that captures user input.
411
+ * @defaultValue false
412
+ * @type {InputSignalWithTransform<any, boolean >}
413
+ * @group Props
414
+ */
415
+ linear = input(false, {
416
+ transform: (v) => transformToBoolean(v),
417
+ });
418
+ /**
419
+ * Transition options of the animation.
420
+ * @defaultValue 400ms cubic-bezier(0.86, 0, 0.07, 1)
421
+ * @type {InputSignal<string >}
422
+ * @group Props
423
+ */
424
+ transitionOptions = input('400ms cubic-bezier(0.86, 0, 0.07, 1)');
425
+ _componentStyle = inject(StepperStyle);
426
+ id = signal(UniqueComponentId());
427
+ stepItems = contentChildren(StepItem);
428
+ steps = contentChildren(Step);
429
+ stepList = contentChild(StepList);
430
+ updateValue(value) {
431
+ this.value.set(value);
432
+ }
433
+ isStepActive(value) {
434
+ return this.value() === value;
435
+ }
436
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: Stepper, deps: null, target: i0.ɵɵFactoryTarget.Component });
437
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.2", type: Stepper, isStandalone: true, selector: "p-stepper", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, transitionOptions: { classPropertyName: "transitionOptions", publicName: "transitionOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.p-stepper": "true", "class.p-component": "true", "attr.role": "\"tablist\"", "attr.id": "id()" } }, providers: [StepperStyle], queries: [{ propertyName: "stepItems", predicate: StepItem, isSignal: true }, { propertyName: "steps", predicate: Step, isSignal: true }, { propertyName: "stepList", first: true, predicate: StepList, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: ` <ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
438
+ }
439
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: Stepper, decorators: [{
440
+ type: Component,
441
+ args: [{
442
+ selector: 'p-stepper',
443
+ standalone: true,
444
+ imports: [CommonModule],
445
+ template: ` <ng-content></ng-content>`,
446
+ changeDetection: ChangeDetectionStrategy.OnPush,
447
+ encapsulation: ViewEncapsulation.None,
448
+ providers: [StepperStyle],
449
+ host: {
450
+ '[class.p-stepper]': 'true',
451
+ '[class.p-component]': 'true',
452
+ '[attr.role]': '"tablist"',
453
+ '[attr.id]': 'id()',
454
+ },
455
+ }]
456
+ }] });
749
457
  export class StepperModule {
750
458
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
751
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.2", ngImport: i0, type: StepperModule, declarations: [Stepper, StepperPanel, StepperPanel, StepperContent, StepperHeader, StepperSeparator], imports: [CommonModule, SharedModule], exports: [Stepper, StepperPanel, StepperContent, StepperHeader, StepperSeparator, SharedModule] });
752
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperModule, imports: [CommonModule, SharedModule, SharedModule] });
459
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.2", ngImport: i0, type: StepperModule, imports: [Stepper, StepList, StepPanels, StepPanel, StepItem, Step, StepperSeparator, SharedModule], exports: [Stepper, StepList, StepPanels, StepPanel, StepItem, Step, StepperSeparator, SharedModule] });
460
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperModule, imports: [Stepper, StepList, StepPanels, StepPanel, StepItem, Step, StepperSeparator, SharedModule, SharedModule] });
753
461
  }
754
462
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: StepperModule, decorators: [{
755
463
  type: NgModule,
756
464
  args: [{
757
- imports: [CommonModule, SharedModule],
758
- exports: [Stepper, StepperPanel, StepperContent, StepperHeader, StepperSeparator, SharedModule],
759
- declarations: [Stepper, StepperPanel, StepperPanel, StepperContent, StepperHeader, StepperSeparator],
465
+ imports: [Stepper, StepList, StepPanels, StepPanel, StepItem, Step, StepperSeparator, SharedModule],
466
+ exports: [Stepper, StepList, StepPanels, StepPanel, StepItem, Step, StepperSeparator, SharedModule],
760
467
  }]
761
468
  }] });
762
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9zdGVwcGVyL3N0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUdOLGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFxQ3BELE1BQU0sT0FBTyxhQUFhO0lBQ2IsRUFBRSxDQUFxQjtJQUV2QixRQUFRLENBQStCO0lBRXZDLFlBQVksQ0FBZTtJQUUzQixLQUFLLENBQXFCO0lBRTFCLFFBQVEsQ0FBc0I7SUFFOUIsTUFBTSxDQUFzQjtJQUU1QixXQUFXLENBQXNCO0lBRWpDLFdBQVcsQ0FBcUI7SUFFaEMsWUFBWSxDQUFxQjtJQUVoQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQzt1R0FuQnBDLGFBQWE7MkZBQWIsYUFBYSxrVUFqQ1o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0ErQlQ7OzJGQUVRLGFBQWE7a0JBbkN6QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQ0FBbUM7b0JB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eUQsWUFBWTt3R0FHckYsYUFBYSxZQUpaLFlBQVksRUFBRSxZQUFZLEVBQzhDLFlBQVk7OzJGQUdyRixhQUFhO2tCQUx6QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLENBQUM7b0JBQy9GLFlBQVksRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLENBQUM7aUJBQ3ZHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcmltZVRlbXBsYXRlLCBTaGFyZWRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ3ByaW1lbmcvdHMtaGVscGVycyc7XG5pbXBvcnQgeyBVbmlxdWVDb21wb25lbnRJZCB9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9iYXNlY29tcG9uZW50JztcbmltcG9ydCB7IFN0ZXBwZXJTdHlsZSB9IGZyb20gJy4vc3R5bGUvc3RlcHBlcnN0eWxlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXN0ZXBwZXJIZWFkZXIsIHAtc3RlcHBlci1oZWFkZXInLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZTsgZWxzZSBidXR0b25SZWZcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBhY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogaGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogJ3Atc3RlcHBlci1hY3Rpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2xhc3M6ICdwLXN0ZXBwZXItYWN0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlckNsYXNzOiAncC1zdGVwcGVyLW51bWJlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUNsYXNzOiAncC1zdGVwcGVyLXRpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNidXR0b25SZWY+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1zdGVwLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgIFthcmlhLWNvbnRyb2xzXT1cImFyaWFDb250cm9sc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2suZW1pdCgkZXZlbnQsIGluZGV4KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLXN0ZXAtbnVtYmVyXCI+e3sgaW5kZXggKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1zdGVwLXRpdGxlXCI+e3sgZ2V0U3RlcFByb3AgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBwZXJIZWFkZXIge1xuICAgIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIHN0ZXBwZXJQYW5lbDogU3RlcHBlclBhbmVsO1xuXG4gICAgQElucHV0KCkgaW5kZXg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgYWN0aXZlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgaGlnaGxpZ2h0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBnZXRTdGVwUHJvcDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgYXJpYUNvbnRyb2xzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBAT3V0cHV0KCkgb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXN0ZXBwZXJTZXBhcmF0b3IsIHAtc3RlcHBlci1zZXBhcmF0b3InLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZTsgZWxzZSBzcGFuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyBpbmRleDogaW5kZXgsIGFjdGl2ZTogYWN0aXZlLCBoaWdobGlnaHRlZDogaGlnaGxpZ2h0ZWQsIGNsYXNzOiBzZXBhcmF0b3JDbGFzcyB9XCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJzZXBhcmF0b3JDbGFzc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdwLXN0ZXBwZXItc2VwYXJhdG9yJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTdGVwcGVyU2VwYXJhdG9yIHtcbiAgICBASW5wdXQoKSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIHNlcGFyYXRvckNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBzdGVwcGVyUGFuZWw6IFN0ZXBwZXJQYW5lbDtcblxuICAgIEBJbnB1dCgpIGluZGV4OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBhY3RpdmU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBoaWdobGlnaHRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXN0ZXBwZXJDb250ZW50LCBwLXN0ZXBwZXItY29udGVudCcsXG4gICAgdGVtcGxhdGU6IGAgPGRpdlxuICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICByb2xlPVwidGFicGFuZWxcIlxuICAgICAgICBkYXRhLXBjLW5hbWU9XCJzdGVwcGVycGFuZWxcIlxuICAgICAgICBbYXR0ci5kYXRhLXBjLWluZGV4XT1cImluZGV4XCJcbiAgICAgICAgW2F0dHIuZGF0YS1wLWFjdGl2ZV09XCJhY3RpdmVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkYnlcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogYWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGhpZ2hsaWdodGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDYWxsYmFjazogcHJldkNhbGxiYWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENhbGxiYWNrOiBuZXh0Q2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcHBlclBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0ZXBwZXJQYW5lbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+YCxcblxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5wLXN0ZXBwYW5lbC1jb250ZW50XSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5wLWVsZW1lbnRdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLnAtdG9nZ2xlYWJsZS1jb250ZW50XSc6IFwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIixcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTdGVwcGVyQ29udGVudCB7XG4gICAgQElucHV0KCkgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIG9yaWVudGF0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xuXG4gICAgQElucHV0KCkgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBhcmlhTGFiZWxsZWRieTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgc3RlcHBlclBhbmVsOiBTdGVwcGVyUGFuZWw7XG5cbiAgICBASW5wdXQoKSBpbmRleDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgYWN0aXZlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgaGlnaGxpZ2h0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBAT3V0cHV0KCkgb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIEBPdXRwdXQoKSBwcmV2Q2FsbGJhY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBAT3V0cHV0KCkgbmV4dENhbGxiYWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Atc3RlcHBlclBhbmVsLCBwLXN0ZXBwZXItcGFuZWwnLFxuICAgIHRlbXBsYXRlOiBgIDxuZy1jb250ZW50PjwvbmctY29udGVudD4gYCxcbn0pXG5leHBvcnQgY2xhc3MgU3RlcHBlclBhbmVsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFByaW1lVGVtcGxhdGUpIHRlbXBsYXRlczogTnVsbGFibGU8UXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+PjtcblxuICAgIGhlYWRlclRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIHN0YXJ0VGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgY29udGVudFRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIHNlcGFyYXRvclRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGVuZFRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgKHRoaXMudGVtcGxhdGVzIGFzIFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPikuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChpdGVtLmdldFR5cGUoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdjb250ZW50JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzZXBhcmF0b3InOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcGFyYXRvclRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGUgU3RlcHBlciBjb21wb25lbnQgZGlzcGxheXMgYSB3aXphcmQtbGlrZSB3b3JrZmxvdyBieSBndWlkaW5nIHVzZXJzIHRocm91Z2ggdGhlIG11bHRpLXN0ZXAgcHJvZ3Jlc3Npb24uXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Atc3RlcHBlcicsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXJ0VGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGFydFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJzsgZWxzZSB2ZXJ0aWNhbFwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicC1zdGVwbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtc3RlcCBbbmdGb3JPZl09XCJwYW5lbHNcIiBsZXQtaW5kZXg9XCJpbmRleFwiIFtuZ0ZvclRyYWNrQnldPVwidHJhY2tCeUZuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgW2tleV09XCJnZXRTdGVwS2V5KHN0ZXAsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtc3RlcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Atc3RlcC1hY3RpdmUnOiBpc1N0ZXBBY3RpdmUoaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwLWRpc2FibGVkJzogaXNJdGVtRGlzYWJsZWQoaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXNTdGVwQWN0aXZlKGluZGV4KSA/ICdzdGVwJyA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhLXBjLW5hbWVdPVwic3RlcHBlclBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhLXAtaGlnaGxpZ2h0XT1cImlzU3RlcEFjdGl2ZShpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGEtcC1kaXNhYmxlZF09XCJpc0l0ZW1EaXNhYmxlZChpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGEtcGMtaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGEtcC1hY3RpdmVdPVwiaXNTdGVwQWN0aXZlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXN0ZXBwZXItaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFN0ZXBIZWFkZXJBY3Rpb25JZChpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJzdGVwLmhlYWRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RlcHBlclBhbmVsXT1cInN0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnZXRTdGVwUHJvcF09XCJnZXRTdGVwUHJvcChzdGVwLCAnaGVhZGVyJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJpc1N0ZXBBY3RpdmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0ZWRdPVwiaW5kZXggPCBhY3RpdmVTdGVwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYS1jb250cm9sc109XCJnZXRTdGVwQ29udGVudElkKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50LCBpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1zdGVwcGVyLWhlYWRlcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZGV4ICE9PSBzdGVwcGVyUGFuZWxzLmxlbmd0aCAtIDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1zdGVwcGVyLXNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVdPVwic3RlcC5zZXBhcmF0b3JUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZXBhcmF0b3JDbGFzc109XCIncC1zdGVwcGVyLXNlcGFyYXRvcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RlcHBlclBhbmVsXT1cInN0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImlzU3RlcEFjdGl2ZShpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0ZWRdPVwiaW5kZXggPCBhY3RpdmVTdGVwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1zdGVwcGVyLXBhbmVsc1wiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtc3RlcCBbbmdGb3JPZl09XCJwYW5lbHNcIiBsZXQtaW5kZXg9XCJpbmRleFwiIFtuZ0ZvclRyYWNrQnldPVwidHJhY2tCeUZuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0ZXBBY3RpdmUoaW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1zdGVwcGVyLWNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3RlcENvbnRlbnRJZChpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJzdGVwLmNvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29yaWVudGF0aW9uXT1cIm9yaWVudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RlcHBlclBhbmVsXT1cInN0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJpc1N0ZXBBY3RpdmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0ZWRdPVwiaW5kZXggPCBhY3RpdmVTdGVwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsbGVkYnldPVwiZ2V0U3RlcEhlYWRlckFjdGlvbklkKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50LCBpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0Q2FsbGJhY2spPVwibmV4dENhbGxiYWNrKCRldmVudCwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJldkNhbGxiYWNrKT1cInByZXZDYWxsYmFjaygkZXZlbnQsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3ZlcnRpY2FsPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1zdGVwIFtuZ0Zvck9mXT1cInBhbmVsc1wiIGxldC1pbmRleD1cImluZGV4XCIgW25nRm9yVHJhY2tCeV09XCJ0cmFja0J5Rm5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIFtrZXldPVwiZ2V0U3RlcEtleShzdGVwLCBpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtc3RlcGl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAncC1zdGVwaXRlbS1hY3RpdmUnOiBvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiBpc1N0ZXBBY3RpdmUoaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImlzU3RlcEFjdGl2ZShpbmRleCkgPyAnc3RlcCcgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YS1wYy1uYW1lXT1cIidzdGVwcGVycGFuZWwnXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGEtcC1oaWdobGlnaHRdPVwiaXNTdGVwQWN0aXZlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhLXAtZGlzYWJsZWRdPVwiaXNJdGVtRGlzYWJsZWQoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGEtcGMtaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YS1wLWFjdGl2ZV09XCJpc1N0ZXBBY3RpdmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwLXN0ZXBwZXItaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3RlcEhlYWRlckFjdGlvbklkKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVdPVwic3RlcC5oZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RlcHBlclBhbmVsXT1cInN0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2dldFN0ZXBQcm9wXT1cImdldFN0ZXBQcm9wKHN0ZXAsICdoZWFkZXInKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSXRlbURpc2FibGVkKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImlzU3RlcEFjdGl2ZShpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hpZ2hsaWdodGVkXT1cImluZGV4IDwgYWN0aXZlU3RlcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYS1jb250cm9sc109XCJnZXRTdGVwQ29udGVudElkKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtc3RlcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwLXN0ZXAtYWN0aXZlJzogaXNTdGVwQWN0aXZlKGluZGV4KSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uSXRlbUNsaWNrKCRldmVudCwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcC1zdGVwcGVyLWhlYWRlcj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtc3RlcHBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3Atc3RlcHBhbmVsLWFjdGl2ZSc6IGlzU3RlcEFjdGl2ZShpbmRleCkgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbQHRhYkNvbnRlbnRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdGVwQWN0aXZlKGluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHsgdmFsdWU6ICd2aXNpYmxlJywgcGFyYW1zOiB7IHRyYW5zaXRpb25QYXJhbXM6IHRyYW5zaXRpb25PcHRpb25zIH0gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsgdmFsdWU6ICdoaWRkZW4nLCBwYXJhbXM6IHsgdHJhbnNpdGlvblBhcmFtczogdHJhbnNpdGlvbk9wdGlvbnMgfSB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5kZXggIT09IHN0ZXBwZXJQYW5lbHMubGVuZ3RoIC0gMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXN0ZXBwZXItc2VwYXJhdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJzdGVwLnNlcGFyYXRvclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlcGFyYXRvckNsYXNzXT1cIidwLXN0ZXBwZXItc2VwYXJhdG9yJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwcGVyUGFuZWxdPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVdPVwiaXNTdGVwQWN0aXZlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWdobGlnaHRlZF09XCJpbmRleCA8IGFjdGl2ZVN0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXN0ZXBwZXItY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRTdGVwQ29udGVudElkKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlXT1cInN0ZXAuY29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3JpZW50YXRpb25dPVwib3JpZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwcGVyUGFuZWxdPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImlzU3RlcEFjdGl2ZShpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWdobGlnaHRlZF09XCJpbmRleCA8IGFjdGl2ZVN0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxsZWRieV09XCJnZXRTdGVwSGVhZGVyQWN0aW9uSWQoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5leHRDYWxsYmFjayk9XCJuZXh0Q2FsbGJhY2soJGV2ZW50LCBpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2Q2FsbGJhY2spPVwicHJldkNhbGxiYWNrKCRldmVudCwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuZFRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW5kVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgYCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW1N0ZXBwZXJTdHlsZV0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLnAtc3RlcHBlcl0nOiAndHJ1ZScsXG4gICAgICAgICdbY2xhc3MucC1jb21wb25lbnRdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLnAtc3RlcHBlci12ZXJ0aWNhbF0nOiBcIm9yaWVudGF0aW9uID09PSAndmVydGljYWwnXCIsXG4gICAgfSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ3RhYkNvbnRlbnQnLCBbXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzAnLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcqJyxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPD0+IGhpZGRlbicsIFthbmltYXRlKCcyNTBtcyBjdWJpYy1iZXppZXIoMC44NiwgMCwgMC4wNywgMSknKV0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgYW5pbWF0ZSgwKSksXG4gICAgICAgIF0pLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBwZXIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgLyoqXG4gICAgICogQWN0aXZlIHN0ZXAgaW5kZXggb2Ygc3RlcHBlci5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhY3RpdmVTdGVwOiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsID0gMDtcbiAgICAvKipcbiAgICAgKiBPcmllbnRhdGlvbiBvZiB0aGUgc3RlcHBlci5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyA9ICdob3Jpem9udGFsJztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBzdGVwcyBhcmUgY2xpY2thYmxlIG9yIG5vdC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsaW5lYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBUcmFuc2l0aW9uIG9wdGlvbnMgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uT3B0aW9uczogc3RyaW5nID0gJzQwMG1zIGN1YmljLWJlemllcigwLjg2LCAwLCAwLjA3LCAxKSc7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFN0ZXBwZXJQYW5lbCkgc3RlcHBlclBhbmVsczogUXVlcnlMaXN0PFN0ZXBwZXJQYW5lbD4gfCB1bmRlZmluZWQ7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFByaW1lVGVtcGxhdGUpIHRlbXBsYXRlczogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkO1xuXG4gICAgQE91dHB1dCgpIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXMuXG4gICAgICogQHBhcmFtIHtBY3RpdmVTdGVwQ2hhbmdlRXZlbnR9IGV2ZW50IC0gY3VzdG9tIGNoYW5nZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgYWN0aXZlU3RlcENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIF9jb21wb25lbnRTdHlsZSA9IGluamVjdChTdGVwcGVyU3R5bGUpO1xuXG4gICAgaGVhZGVyVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgc3RhcnRUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBzZXBhcmF0b3JUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBlbmRUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBpZDogc3RyaW5nID0gVW5pcXVlQ29tcG9uZW50SWQoKTtcblxuICAgIHBhbmVscyE6IFN0ZXBwZXJQYW5lbFtdO1xuXG4gICAgaXNTdGVwQWN0aXZlKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlU3RlcCA9PT0gaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0U3RlcFByb3Aoc3RlcCkge1xuICAgICAgICBpZiAoc3RlcD8uaGVhZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RlcC5oZWFkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RlcD8uY29udGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0ZXAuY29udGVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldFN0ZXBLZXkoc3RlcCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3RlcFByb3Aoc3RlcCkgfHwgaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0U3RlcEhlYWRlckFjdGlvbklkKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmlkfV8ke2luZGV4fV9oZWFkZXJfYWN0aW9uYDtcbiAgICB9XG5cbiAgICBnZXRTdGVwQ29udGVudElkKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmlkfV8ke2luZGV4fV9jb250ZW50YDtcbiAgICB9XG5cbiAgICB1cGRhdGVBY3RpdmVTdGVwKGV2ZW50LCBpbmRleCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXAgPSBpbmRleDtcblxuICAgICAgICB0aGlzLmFjdGl2ZVN0ZXBDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZVN0ZXApO1xuICAgIH1cblxuICAgIG9uSXRlbUNsaWNrKGV2ZW50LCBpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5saW5lYXIpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMuYWN0aXZlU3RlcCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVTdGVwKGV2ZW50LCBpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0l0ZW1EaXNhYmxlZChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5saW5lYXIgJiYgIXRoaXMuaXNTdGVwQWN0aXZlKGluZGV4KTtcbiAgICB9XG5cbiAgICBwcmV2Q2FsbGJhY2soZXZlbnQsIGluZGV4KSB7XG4gICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVTdGVwKGV2ZW50LCBpbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmV4dENhbGxiYWNrKGV2ZW50LCBpbmRleCkge1xuICAgICAgICBpZiAoaW5kZXggIT09IHRoaXMuc3RlcHBlclBhbmVscy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVN0ZXAoZXZlbnQsIGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMucGFuZWxzID0gKHRoaXMuc3RlcHBlclBhbmVscyBhcyBRdWVyeUxpc3Q8U3RlcHBlclBhbmVsPikudG9BcnJheSgpO1xuICAgICAgICAodGhpcy50ZW1wbGF0ZXMgYXMgUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+KS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2hhcmVkTW9kdWxlXSxcbiAgICBleHBvcnRzOiBbU3RlcHBlciwgU3RlcHBlclBhbmVsLCBTdGVwcGVyQ29udGVudCwgU3RlcHBlckhlYWRlciwgU3RlcHBlclNlcGFyYXRvciwgU2hhcmVkTW9kdWxlXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtTdGVwcGVyLCBTdGVwcGVyUGFuZWwsIFN0ZXBwZXJQYW5lbCwgU3RlcHBlckNvbnRlbnQsIFN0ZXBwZXJIZWFkZXIsIFN0ZXBwZXJTZXBhcmF0b3JdLFxufSlcbmV4cG9ydCBjbGFzcyBTdGVwcGVyTW9kdWxlIHt9XG4iXX0=
469
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9zdGVwcGVyL3N0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osWUFBWSxFQUNaLGVBQWUsRUFDZixlQUFlLEVBQ2YsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLEtBQUssRUFFTCxRQUFRLEVBRVIsTUFBTSxFQUVOLGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUF5QzFELE1BQU0sT0FBTyxRQUFTLFNBQVEsYUFBYTt1R0FBOUIsUUFBUTsyRkFBUixRQUFRLGlMQVJQLDRCQUE0QiwyREFENUIsWUFBWTs7MkZBU2IsUUFBUTtrQkFacEIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFLDRCQUE0Qjtv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dUdBQWIsYUFBYTt3R0FBYixhQUFhLFlBaERiLE9BQU8sRUF0VVAsUUFBUSxFQWlUUixVQUFVLEVBakVWLFNBQVMsRUEvTVQsUUFBUSxFQW9GUixJQUFJLEVBdkdKLGdCQUFnQixFQXFXNkQsWUFBWSxhQTdDekYsT0FBTyxFQXRVUCxRQUFRLEVBaVRSLFVBQVUsRUFqRVYsU0FBUyxFQS9NVCxRQUFRLEVBb0ZSLElBQUksRUF2R0osZ0JBQWdCLEVBc1c2RCxZQUFZO3dHQUV6RixhQUFhLFlBSFosT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUNaLFlBQVk7OzJGQUV6RixhQUFhO2tCQUp6QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQztvQkFDbkcsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDO2lCQUN0RyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIGNvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIGNvbnRlbnRDaGlsZHJlbixcbiAgICBlZmZlY3QsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgSW5wdXRTaWduYWwsXG4gICAgSW5wdXRTaWduYWxXaXRoVHJhbnNmb3JtLFxuICAgIG1vZGVsLFxuICAgIE1vZGVsU2lnbmFsLFxuICAgIE5nTW9kdWxlLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBzaWduYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9iYXNlY29tcG9uZW50JztcbmltcG9ydCB7IE9iamVjdFV0aWxzLCB0cmFuc2Zvcm1Ub0Jvb2xlYW4sIFVuaXF1ZUNvbXBvbmVudElkIH0gZnJvbSAncHJpbWVuZy91dGlscyc7XG5pbXBvcnQgeyBTdGVwcGVyU3R5bGUgfSBmcm9tICcuL3N0eWxlL3N0ZXBwZXJzdHlsZSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBQcmltZVRlbXBsYXRlLCBTaGFyZWRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbi8qKlxuICogQ29udGV4dCBpbnRlcmZhY2UgZm9yIHRoZSBTdGVwUGFuZWwgY29udGVudCB0ZW1wbGF0ZS5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gYWN0aXZhdGVDYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGFjdGl2YXRlIGEgc3RlcC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0ZXAuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFjdGl2ZSAtIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN0ZXAgaXMgYWN0aXZlLlxuICogQGdyb3VwIEludGVyZmFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBDb250ZW50VGVtcGxhdGVDb250ZXh0IHtcbiAgICBhY3RpdmF0ZUNhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgYWN0aXZlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnRleHQgaW50ZXJmYWNlIGZvciB0aGUgU3RlcFBhbmVsIGNvbnRlbnQgdGVtcGxhdGUuXG4gKlxuICogQHByb3BlcnR5IHsoaW5kZXg6IG51bWJlcikgPT4gdm9pZH0gYWN0aXZhdGVDYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGFjdGl2YXRlIGEgc3RlcC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0ZXAuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFjdGl2ZSAtIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN0ZXAgaXMgYWN0aXZlLlxuICogQGdyb3VwIEludGVyZmFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBQYW5lbENvbnRlbnRUZW1wbGF0ZUNvbnRleHQge1xuICAgIGFjdGl2YXRlQ2FsbGJhY2s6IChpbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgYWN0aXZlOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Atc3RlcC1saXN0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLnAtc3RlcGxpc3RdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLnAtY29tcG9uZW50XSc6ICd0cnVlJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTdGVwTGlzdCBleHRlbmRzIEJhc2VDb21wb25lbnQge31cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXN0ZXBwZXItc2VwYXJhdG9yJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLnAtc3RlcHBlci1zZXBhcmF0b3JdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLnAtY29tcG9uZW50XSc6ICd0cnVlJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTdGVwcGVyU2VwYXJhdG9yIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7fVxuXG4vKipcbiAqIFN0ZXBJdGVtIGlzIGEgaGVscGVyIGNvbXBvbmVudCBmb3IgU3RlcHBlciBjb21wb25lbnQgdXNlZCBpbiB2ZXJ0aWNhbCBvcmllbnRhdGlvbi5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1zdGVwLWl0ZW0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MucC1zdGVwaXRlbV0nOiAndHJ1ZScsXG4gICAgICAgICdbY2xhc3MucC1jb21wb25lbnRdJzogJ3RydWUnLFxuICAgICAgICAnW2F0dHIuZGF0YS1wLWFjdGl2ZV0nOiAnaXNBY3RpdmUoKScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgU3RlcEl0ZW0gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgICBwY1N0ZXBwZXIgPSBpbmplY3QoZm9yd2FyZFJlZigoKSA9PiBTdGVwcGVyKSk7XG4gICAgLyoqXG4gICAgICogVmFsdWUgb2Ygc3RlcC5cbiAgICAgKiBAdHlwZSB7PG51bWJlciB8IHVuZGVmaW5lZD59XG4gICAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICB2YWx1ZTogTW9kZWxTaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPiA9IG1vZGVsPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcblxuICAgIGlzQWN0aXZlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wY1N0ZXBwZXIudmFsdWUoKSA9PT0gdGhpcy52YWx1ZSgpKTtcblxuICAgIHN0ZXAgPSBjb250ZW50Q2hpbGQoU3RlcCk7XG5cbiAgICBzdGVwUGFuZWwgPSBjb250ZW50Q2hpbGQoU3RlcFBhbmVsKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwKCkudmFsdWUuc2V0KHRoaXMudmFsdWUoKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBQYW5lbCgpLnZhbHVlLnNldCh0aGlzLnZhbHVlKCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogU3RlcCBpcyBhIGhlbHBlciBjb21wb25lbnQgZm9yIFN0ZXBwZXIgY29tcG9uZW50LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXN0ZXAnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU3RlcHBlclNlcGFyYXRvcl0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgQGlmICghY29udGVudFRlbXBsYXRlKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiaWQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLXN0ZXAtaGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cIid0YWInXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiaXNTdGVwRGlzYWJsZWQoKSA/IC0xIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImFyaWFDb250cm9scygpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNTdGVwRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3RlcENsaWNrKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1zdGVwLW51bWJlclwiPnt7IHZhbHVlKCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLXN0ZXAtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgQGlmIChpc1NlcGFyYXRvclZpc2libGUoKSkge1xuICAgICAgICAgICAgICAgIDxwLXN0ZXBwZXItc2VwYXJhdG9yIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRlbXBsYXRlOyBjb250ZXh0OiB7IGFjdGl2YXRlQ2FsbGJhY2s6IG9uU3RlcENsaWNrLmJpbmQodGhpcyksIHZhbHVlOiB2YWx1ZSgpLCBhY3RpdmU6IGFjdGl2ZSgpIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgQGlmIChpc1NlcGFyYXRvclZpc2libGUoKSkge1xuICAgICAgICAgICAgICAgIDxwLXN0ZXBwZXItc2VwYXJhdG9yIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLnAtc3RlcF0nOiAndHJ1ZScsXG4gICAgICAgICdbY2xhc3MucC1zdGVwLWFjdGl2ZV0nOiAnYWN0aXZlKCknLFxuICAgICAgICAnW2NsYXNzLnAtZGlzYWJsZWRdJzogJ2lzU3RlcERpc2FibGVkKCknLFxuICAgICAgICAnW2NsYXNzLnAtY29tcG9uZW50XSc6ICd0cnVlJyxcbiAgICAgICAgJ1thdHRyLmFyaWEtY3VycmVudF0nOiAnYWN0aXZlKCkgPyBcInN0ZXBcIiA6IHVuZGVmaW5lZCcsXG4gICAgICAgICdbYXR0ci5yb2xlXSc6ICdcInByZXNlbnRhdGlvblwiJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtcC1hY3RpdmVdJzogJ2FjdGl2ZSgpJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtcC1kaXNhYmxlZF0nOiAnaXNTdGVwRGlzYWJsZWQoKScsXG4gICAgICAgICdbYXR0ci5kYXRhLXBjLW5hbWVdJzogJ1wic3RlcFwiJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTdGVwIGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICAgIHBjU3RlcHBlciA9IGluamVjdChmb3J3YXJkUmVmKCgpID0+IFN0ZXBwZXIpKTtcbiAgICAvKipcbiAgICAgKiBBY3RpdmUgdmFsdWUgb2Ygc3RlcHBlci5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgdmFsdWU6IE1vZGVsU2lnbmFsPG51bWJlcj4gPSBtb2RlbDxudW1iZXIgfCB1bmRlZmluZWQ+KCk7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgc3RlcCBpcyBkaXNhYmxlZC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgZGlzYWJsZWQ6IElucHV0U2lnbmFsV2l0aFRyYW5zZm9ybTxhbnksIGJvb2xlYW4+ID0gaW5wdXQoZmFsc2UsIHtcbiAgICAgICAgdHJhbnNmb3JtOiAodjogYW55IHwgYm9vbGVhbikgPT4gdHJhbnNmb3JtVG9Cb29sZWFuKHYpLFxuICAgIH0pO1xuXG4gICAgYWN0aXZlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wY1N0ZXBwZXIuaXNTdGVwQWN0aXZlKHRoaXMudmFsdWUoKSkpO1xuXG4gICAgaXNTdGVwRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5hY3RpdmUoKSAmJiAodGhpcy5wY1N0ZXBwZXIubGluZWFyKCkgfHwgdGhpcy5kaXNhYmxlZCgpKSk7XG5cbiAgICBpZCA9IGNvbXB1dGVkKCgpID0+IGAke3RoaXMucGNTdGVwcGVyLmlkKCl9X3N0ZXBfJHt0aGlzLnZhbHVlKCl9YCk7XG5cbiAgICBhcmlhQ29udHJvbHMgPSBjb21wdXRlZCgoKSA9PiBgJHt0aGlzLnBjU3RlcHBlci5pZCgpfV9zdGVwcGFuZWxfJHt0aGlzLnZhbHVlKCl9YCk7XG5cbiAgICBpc1NlcGFyYXRvclZpc2libGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBjU3RlcHBlci5zdGVwTGlzdCgpKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IE9iamVjdFV0aWxzLmZpbmRJbmRleEluTGlzdCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMucGNTdGVwcGVyLnN0ZXBMaXN0KCkuZWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbik7XG4gICAgICAgICAgICBjb25zdCBzdGVwTGVuID0gRG9tSGFuZGxlci5maW5kKHRoaXMucGNTdGVwcGVyLnN0ZXBMaXN0KCkuZWwubmF0aXZlRWxlbWVudCwgJ1tkYXRhLXBjLW5hbWU9XCJzdGVwXCJdJykubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4ICE9PSBzdGVwTGVuIC0gMTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIENvbnRlbnQgdGVtcGxhdGUuXG4gICAgICogQHR5cGUge1RlbXBsYXRlUmVmPFN0ZXBDb250ZW50VGVtcGxhdGVDb250ZXh0Pn1cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnY29udGVudCcpIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U3RlcENvbnRlbnRUZW1wbGF0ZUNvbnRleHQ+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihQcmltZVRlbXBsYXRlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZDtcblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXM/LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjb250ZW50JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25TdGVwQ2xpY2soKSB7XG4gICAgICAgIHRoaXMucGNTdGVwcGVyLnVwZGF0ZVZhbHVlKHRoaXMudmFsdWUoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFN0ZXBQYW5lbCBpcyBhIGhlbHBlciBjb21wb25lbnQgZm9yIFN0ZXBwZXIgY29tcG9uZW50LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXN0ZXAtcGFuZWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU3RlcHBlclNlcGFyYXRvcl0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgQGlmIChpc1NlcGFyYXRvclZpc2libGUoKSkge1xuICAgICAgICAgICAgPHAtc3RlcHBlci1zZXBhcmF0b3IgLz5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInAtc3RlcHBhbmVsLWNvbnRlbnRcIlxuICAgICAgICAgICAgW0Bjb250ZW50XT1cIlxuICAgICAgICAgICAgICAgIGlzVmVydGljYWwoKVxuICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsgdmFsdWU6ICd2aXNpYmxlJywgcGFyYW1zOiB7IHRyYW5zaXRpb25QYXJhbXM6IHRyYW5zaXRpb25PcHRpb25zKCkgfSB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHsgdmFsdWU6ICdoaWRkZW4nLCBwYXJhbXM6IHsgdHJhbnNpdGlvblBhcmFtczogdHJhbnNpdGlvbk9wdGlvbnMoKSB9IH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoYWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGFjdGl2YXRlQ2FsbGJhY2s6IHVwZGF0ZVZhbHVlLmJpbmQodGhpcyksIHZhbHVlOiB2YWx1ZSgpLCBhY3RpdmU6IGFjdGl2ZSgpIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MucC1zdGVwcGFuZWxdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLnAtY29tcG9uZW50XSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5wLXN0ZXBwYW5lbC1hY3RpdmVdJzogJ2FjdGl2ZSgpJyxcbiAgICAgICAgJ1thdHRyLnJvbGVdJzogJ1widGFicGFuZWxcIicsXG4gICAgICAgICdbYXR0ci5hcmlhLWNvbnRyb2xzXSc6ICdhcmlhQ29udHJvbHMoKScsXG4gICAgICAgICdbYXR0ci5pZF0nOiAnaWQoKScsXG4gICAgICAgICdbYXR0ci5kYXRhLXAtYWN0aXZlXSc6ICdhY3RpdmUoKScsXG4gICAgICAgICdbYXR0ci5kYXRhLXBjLW5hbWVdJzogJ1wic3RlcHBhbmVsXCInLFxuICAgIH0sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdjb250ZW50JywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnKicsXG4gICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlIDw9PiBoaWRkZW4nLCBbYW5pbWF0ZSgnMjUwbXMgY3ViaWMtYmV6aWVyKDAuODYsIDAsIDAuMDcsIDEpJyldKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIGFuaW1hdGUoMCkpLFxuICAgICAgICBdKSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTdGVwUGFuZWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgcGNTdGVwcGVyID0gaW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gU3RlcHBlcikpO1xuXG4gICAgdHJhbnNpdGlvbk9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBjU3RlcHBlci50cmFuc2l0aW9uT3B0aW9ucygpKTtcbiAgICAvKipcbiAgICAgKiBBY3RpdmUgdmFsdWUgb2Ygc3RlcHBlci5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgdmFsdWU6IE1vZGVsU2lnbmFsPG51bWJlcj4gPSBtb2RlbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICBhY3RpdmUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBjU3RlcHBlci52YWx1ZSgpID09PSB0aGlzLnZhbHVlKCkpO1xuXG4gICAgYXJpYUNvbnRyb2xzID0gY29tcHV0ZWQoKCkgPT4gYCR7dGhpcy5wY1N0ZXBwZXIuaWQoKX1fc3RlcF8ke3RoaXMudmFsdWUoKX1gKTtcblxuICAgIGlkID0gY29tcHV0ZWQoKCkgPT4gYCR7dGhpcy5wY1N0ZXBwZXIuaWQoKX1fc3RlcHBhbmVsXyR7dGhpcy52YWx1ZSgpfWApO1xuXG4gICAgaXNWZXJ0aWNhbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGNTdGVwcGVyLnN0ZXBJdGVtcygpLmxlbmd0aCA+IDApO1xuXG4gICAgaXNTZXBhcmF0b3JWaXNpYmxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wY1N0ZXBwZXIuc3RlcEl0ZW1zKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXBMZW4gPSB0aGlzLnBjU3RlcHBlci5zdGVwSXRlbXMoKS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBzdGVwUGFuZWxFbGVtZW50cyA9IERvbUhhbmRsZXIuZmluZCh0aGlzLnBjU3RlcHBlci5lbC5uYXRpdmVFbGVtZW50LCAnW2RhdGEtcGMtbmFtZT1cInN0ZXBwYW5lbFwiXScpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBPYmplY3RVdGlscy5maW5kSW5kZXhJbkxpc3QodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBzdGVwUGFuZWxFbGVtZW50cyk7XG5cbiAgICAgICAgICAgIHJldHVybiBpbmRleCAhPT0gc3RlcExlbiAtIDE7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBDb250ZW50IHRlbXBsYXRlLlxuICAgICAqIEB0eXBlIHtUZW1wbGF0ZVJlZjxTdGVwUGFuZWxDb250ZW50VGVtcGxhdGVDb250ZXh0Pn1cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnY29udGVudCcpIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8U3RlcFBhbmVsQ29udGVudFRlbXBsYXRlQ29udGV4dD47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFByaW1lVGVtcGxhdGUpIHRlbXBsYXRlczogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkO1xuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlcz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChpdGVtLmdldFR5cGUoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGNTdGVwcGVyLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1zdGVwLXBhbmVscycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZTogYCA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5wLXN0ZXBwYW5lbHNdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLnAtY29tcG9uZW50XSc6ICd0cnVlJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTdGVwUGFuZWxzIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7fVxuXG4vKipcbiAqIFN0ZXBwZXIgaXMgYSBjb21wb25lbnQgdGhhdCBzdHJlYW1saW5lcyBhIHdpemFyZC1saWtlIHdvcmtmbG93LCBvcmdhbml6aW5nIGNvbnRlbnQgaW50byBjb2hlcmVudCBzdGVwcyBhbmQgdmlzdWFsbHkgZ3VpZGluZyB1c2VycyB0aHJvdWdoIGEgbnVtYmVyZWQgcHJvZ3Jlc3Npb24gaW4gYSBtdWx0aXN0ZXAgcHJvY2Vzcy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1zdGVwcGVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbU3RlcHBlclN0eWxlXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MucC1zdGVwcGVyXSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5wLWNvbXBvbmVudF0nOiAndHJ1ZScsXG4gICAgICAgICdbYXR0ci5yb2xlXSc6ICdcInRhYmxpc3RcIicsXG4gICAgICAgICdbYXR0ci5pZF0nOiAnaWQoKScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgU3RlcHBlciBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIEEgbW9kZWwgdGhhdCBjYW4gaG9sZCBhIG51bWVyaWMgdmFsdWUgb3IgYmUgdW5kZWZpbmVkLlxuICAgICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAgICogQHR5cGUge01vZGVsU2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD59XG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgdmFsdWU6IE1vZGVsU2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4gPSBtb2RlbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgLyoqXG4gICAgICogQSBib29sZWFuIHZhcmlhYmxlIHRoYXQgY2FwdHVyZXMgdXNlciBpbnB1dC5cbiAgICAgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXG4gICAgICogQHR5cGUge0lucHV0U2lnbmFsV2l0aFRyYW5zZm9ybTxhbnksIGJvb2xlYW4gPn1cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBsaW5lYXI6IElucHV0U2lnbmFsV2l0aFRyYW5zZm9ybTxhbnksIGJvb2xlYW4+ID0gaW5wdXQoZmFsc2UsIHtcbiAgICAgICAgdHJhbnNmb3JtOiAodjogYW55IHwgYm9vbGVhbikgPT4gdHJhbnNmb3JtVG9Cb29sZWFuKHYpLFxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb24gb3B0aW9ucyBvZiB0aGUgYW5pbWF0aW9uLlxuICAgICAqIEBkZWZhdWx0VmFsdWUgNDAwbXMgY3ViaWMtYmV6aWVyKDAuODYsIDAsIDAuMDcsIDEpXG4gICAgICogQHR5cGUge0lucHV0U2lnbmFsPHN0cmluZyA+fVxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIHRyYW5zaXRpb25PcHRpb25zOiBJbnB1dFNpZ25hbDxzdHJpbmc+ID0gaW5wdXQ8c3RyaW5nPignNDAwbXMgY3ViaWMtYmV6aWVyKDAuODYsIDAsIDAuMDcsIDEpJyk7XG5cbiAgICBfY29tcG9uZW50U3R5bGUgPSBpbmplY3QoU3RlcHBlclN0eWxlKTtcblxuICAgIGlkID0gc2lnbmFsPHN0cmluZz4oVW5pcXVlQ29tcG9uZW50SWQoKSk7XG5cbiAgICBzdGVwSXRlbXMgPSBjb250ZW50Q2hpbGRyZW4oU3RlcEl0ZW0pO1xuXG4gICAgc3RlcHMgPSBjb250ZW50Q2hpbGRyZW4oU3RlcCk7XG5cbiAgICBzdGVwTGlzdCA9IGNvbnRlbnRDaGlsZChTdGVwTGlzdCk7XG5cbiAgICB1cGRhdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmFsdWUuc2V0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBpc1N0ZXBBY3RpdmUodmFsdWU6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSgpID09PSB2YWx1ZTtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1N0ZXBwZXIsIFN0ZXBMaXN0LCBTdGVwUGFuZWxzLCBTdGVwUGFuZWwsIFN0ZXBJdGVtLCBTdGVwLCBTdGVwcGVyU2VwYXJhdG9yLCBTaGFyZWRNb2R1bGVdLFxuICAgIGV4cG9ydHM6IFtTdGVwcGVyLCBTdGVwTGlzdCwgU3RlcFBhbmVscywgU3RlcFBhbmVsLCBTdGVwSXRlbSwgU3RlcCwgU3RlcHBlclNlcGFyYXRvciwgU2hhcmVkTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RlcHBlck1vZHVsZSB7fVxuIl19