primeng 18.0.0 → 18.0.2-patch.1

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 (361) hide show
  1. package/accordion/accordion.d.ts +7 -7
  2. package/autocomplete/autocomplete.d.ts +21 -8
  3. package/badge/badge.d.ts +1 -3
  4. package/basecomponent/basecomponent.d.ts +2 -5
  5. package/blockui/blockui.d.ts +10 -5
  6. package/breadcrumb/breadcrumb.d.ts +9 -6
  7. package/button/button.d.ts +10 -4
  8. package/calendar/calendar.d.ts +29 -15
  9. package/card/card.d.ts +12 -5
  10. package/carousel/carousel.d.ts +10 -4
  11. package/cascadeselect/cascadeselect.d.ts +18 -8
  12. package/checkbox/checkbox.d.ts +8 -4
  13. package/chip/chip.d.ts +9 -7
  14. package/chips/chips.d.ts +237 -0
  15. package/chips/chips.interface.d.ts +66 -0
  16. package/chips/index.d.ts +5 -0
  17. package/chips/public_api.d.ts +2 -0
  18. package/chips/style/chipsstyle.d.ts +69 -0
  19. package/confirmdialog/confirmdialog.d.ts +14 -5
  20. package/confirmpopup/confirmpopup.d.ts +11 -5
  21. package/contextmenu/contextmenu.d.ts +10 -6
  22. package/datepicker/datepicker.d.ts +113 -33
  23. package/dialog/dialog.d.ts +15 -4
  24. package/divider/divider.d.ts +1 -1
  25. package/dock/dock.d.ts +7 -4
  26. package/drawer/drawer.d.ts +18 -10
  27. package/dropdown/dropdown.d.ts +4 -3
  28. package/dynamicdialog/dynamicdialog.d.ts +1 -0
  29. package/editor/editor.d.ts +7 -3
  30. package/esm2022/accordion/accordion.mjs +58 -43
  31. package/esm2022/autocomplete/autocomplete.mjs +153 -92
  32. package/esm2022/badge/badge.mjs +39 -32
  33. package/esm2022/basecomponent/basecomponent.mjs +3 -26
  34. package/esm2022/blockui/blockui.mjs +38 -18
  35. package/esm2022/breadcrumb/breadcrumb.mjs +50 -32
  36. package/esm2022/button/button.mjs +55 -28
  37. package/esm2022/calendar/calendar.mjs +207 -143
  38. package/esm2022/card/card.mjs +96 -46
  39. package/esm2022/carousel/carousel.mjs +74 -42
  40. package/esm2022/cascadeselect/cascadeselect.mjs +100 -62
  41. package/esm2022/checkbox/checkbox.mjs +32 -14
  42. package/esm2022/chip/chip.mjs +117 -96
  43. package/esm2022/chips/chips.interface.mjs +2 -0
  44. package/esm2022/chips/chips.mjs +827 -0
  45. package/esm2022/chips/primeng-chips.mjs +5 -0
  46. package/esm2022/chips/public_api.mjs +3 -0
  47. package/esm2022/chips/style/chipsstyle.mjs +175 -0
  48. package/esm2022/confirmdialog/confirmdialog.mjs +96 -57
  49. package/esm2022/confirmpopup/confirmpopup.mjs +57 -29
  50. package/esm2022/contextmenu/contextmenu.mjs +51 -20
  51. package/esm2022/datepicker/datepicker.mjs +198 -156
  52. package/esm2022/dialog/dialog.mjs +98 -52
  53. package/esm2022/divider/divider.mjs +2 -4
  54. package/esm2022/dock/dock.mjs +31 -13
  55. package/esm2022/drawer/drawer.mjs +112 -70
  56. package/esm2022/dropdown/dropdown.mjs +13 -5
  57. package/esm2022/dynamicdialog/dynamicdialog-config.mjs +13 -13
  58. package/esm2022/dynamicdialog/dynamicdialog.mjs +9 -5
  59. package/esm2022/editor/editor.mjs +27 -11
  60. package/esm2022/fieldset/fieldset.mjs +61 -33
  61. package/esm2022/fileupload/fileupload.mjs +139 -89
  62. package/esm2022/galleria/galleria.mjs +18 -9
  63. package/esm2022/image/image.mjs +113 -66
  64. package/esm2022/imagecompare/imagecompare.mjs +31 -11
  65. package/esm2022/inplace/inplace.mjs +49 -24
  66. package/esm2022/inputmask/inputmask.mjs +30 -14
  67. package/esm2022/inputmask/style/inputmaskstyle.mjs +2 -2
  68. package/esm2022/inputnumber/inputnumber.mjs +55 -47
  69. package/esm2022/inputotp/inputotp.mjs +30 -11
  70. package/esm2022/listbox/listbox.mjs +137 -78
  71. package/esm2022/megamenu/megamenu.mjs +105 -59
  72. package/esm2022/menu/menu.mjs +26 -26
  73. package/esm2022/menubar/menubar.mjs +70 -35
  74. package/esm2022/message/message.mjs +50 -26
  75. package/esm2022/messages/messages.mjs +13 -4
  76. package/esm2022/metergroup/metergroup.mjs +63 -31
  77. package/esm2022/multiselect/multiselect.mjs +247 -156
  78. package/esm2022/orderlist/orderlist.mjs +125 -70
  79. package/esm2022/organizationchart/organizationchart.mjs +30 -14
  80. package/esm2022/overlay/overlay.mjs +27 -7
  81. package/esm2022/overlaypanel/overlaypanel.mjs +33 -10
  82. package/esm2022/paginator/paginator.mjs +92 -60
  83. package/esm2022/panel/panel.mjs +160 -100
  84. package/esm2022/panelmenu/panelmenu.mjs +55 -32
  85. package/esm2022/password/password.mjs +88 -49
  86. package/esm2022/picklist/picklist.mjs +363 -259
  87. package/esm2022/popover/popover.mjs +29 -12
  88. package/esm2022/progressbar/progressbar.mjs +27 -9
  89. package/esm2022/rating/rating.mjs +46 -22
  90. package/esm2022/scroller/scroller.mjs +47 -37
  91. package/esm2022/scrollpanel/scrollpanel.mjs +28 -9
  92. package/esm2022/scrolltop/scrolltop.mjs +17 -10
  93. package/esm2022/select/select.mjs +198 -119
  94. package/esm2022/selectbutton/selectbutton.mjs +26 -11
  95. package/esm2022/sidebar/sidebar.mjs +82 -60
  96. package/esm2022/speeddial/speeddial.mjs +54 -29
  97. package/esm2022/splitbutton/splitbutton.mjs +41 -18
  98. package/esm2022/splitter/splitter.mjs +5 -5
  99. package/esm2022/stepper/stepper.mjs +27 -13
  100. package/esm2022/table/table.mjs +107 -96
  101. package/esm2022/tabmenu/tabmenu.mjs +54 -27
  102. package/esm2022/tabs/tablist.mjs +28 -20
  103. package/esm2022/tabview/tabview.mjs +106 -54
  104. package/esm2022/tag/tag.mjs +68 -44
  105. package/esm2022/tieredmenu/tieredmenu.mjs +44 -21
  106. package/esm2022/timeline/timeline.mjs +41 -17
  107. package/esm2022/toast/toast.mjs +31 -9
  108. package/esm2022/togglebutton/togglebutton.mjs +45 -30
  109. package/esm2022/toggleswitch/toggleswitch.mjs +28 -9
  110. package/esm2022/toolbar/toolbar.mjs +47 -21
  111. package/esm2022/tooltip/tooltip.mjs +35 -70
  112. package/esm2022/tree/tree.mjs +114 -97
  113. package/esm2022/treeselect/treeselect.mjs +156 -89
  114. package/esm2022/treetable/treetable.mjs +31 -12
  115. package/esm2022/usestyle/usestyle.mjs +2 -2
  116. package/fesm2022/primeng-accordion.mjs +59 -44
  117. package/fesm2022/primeng-accordion.mjs.map +1 -1
  118. package/fesm2022/primeng-animateonscroll.mjs +1 -1
  119. package/fesm2022/primeng-api.mjs +1 -1
  120. package/fesm2022/primeng-autocomplete.mjs +152 -91
  121. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  122. package/fesm2022/primeng-avatar.mjs +1 -1
  123. package/fesm2022/primeng-avatargroup.mjs +1 -1
  124. package/fesm2022/primeng-badge.mjs +40 -33
  125. package/fesm2022/primeng-badge.mjs.map +1 -1
  126. package/fesm2022/primeng-basecomponent.mjs +2 -25
  127. package/fesm2022/primeng-basecomponent.mjs.map +1 -1
  128. package/fesm2022/primeng-blockui.mjs +37 -17
  129. package/fesm2022/primeng-blockui.mjs.map +1 -1
  130. package/fesm2022/primeng-breadcrumb.mjs +49 -31
  131. package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
  132. package/fesm2022/primeng-button.mjs +54 -27
  133. package/fesm2022/primeng-button.mjs.map +1 -1
  134. package/fesm2022/primeng-buttongroup.mjs +1 -1
  135. package/fesm2022/primeng-calendar.mjs +207 -143
  136. package/fesm2022/primeng-calendar.mjs.map +1 -1
  137. package/fesm2022/primeng-card.mjs +95 -45
  138. package/fesm2022/primeng-card.mjs.map +1 -1
  139. package/fesm2022/primeng-carousel.mjs +73 -41
  140. package/fesm2022/primeng-carousel.mjs.map +1 -1
  141. package/fesm2022/primeng-cascadeselect.mjs +99 -61
  142. package/fesm2022/primeng-cascadeselect.mjs.map +1 -1
  143. package/fesm2022/primeng-chart.mjs +1 -1
  144. package/fesm2022/primeng-checkbox.mjs +31 -13
  145. package/fesm2022/primeng-checkbox.mjs.map +1 -1
  146. package/fesm2022/primeng-chip.mjs +116 -95
  147. package/fesm2022/primeng-chip.mjs.map +1 -1
  148. package/fesm2022/primeng-chips.mjs +1006 -0
  149. package/fesm2022/primeng-chips.mjs.map +1 -0
  150. package/fesm2022/primeng-colorpicker.mjs +1 -1
  151. package/fesm2022/primeng-confirmdialog.mjs +95 -56
  152. package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
  153. package/fesm2022/primeng-confirmpopup.mjs +57 -29
  154. package/fesm2022/primeng-confirmpopup.mjs.map +1 -1
  155. package/fesm2022/primeng-contextmenu.mjs +50 -19
  156. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  157. package/fesm2022/primeng-dataview.mjs +2 -2
  158. package/fesm2022/primeng-datepicker.mjs +198 -156
  159. package/fesm2022/primeng-datepicker.mjs.map +1 -1
  160. package/fesm2022/primeng-defer.mjs +1 -1
  161. package/fesm2022/primeng-dialog.mjs +97 -51
  162. package/fesm2022/primeng-dialog.mjs.map +1 -1
  163. package/fesm2022/primeng-divider.mjs +2 -4
  164. package/fesm2022/primeng-divider.mjs.map +1 -1
  165. package/fesm2022/primeng-dock.mjs +30 -12
  166. package/fesm2022/primeng-dock.mjs.map +1 -1
  167. package/fesm2022/primeng-dragdrop.mjs +1 -1
  168. package/fesm2022/primeng-drawer.mjs +111 -69
  169. package/fesm2022/primeng-drawer.mjs.map +1 -1
  170. package/fesm2022/primeng-dropdown.mjs +12 -4
  171. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  172. package/fesm2022/primeng-dynamicdialog.mjs +21 -17
  173. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -1
  174. package/fesm2022/primeng-editor.mjs +26 -10
  175. package/fesm2022/primeng-editor.mjs.map +1 -1
  176. package/fesm2022/primeng-fieldset.mjs +61 -33
  177. package/fesm2022/primeng-fieldset.mjs.map +1 -1
  178. package/fesm2022/primeng-fileupload.mjs +138 -88
  179. package/fesm2022/primeng-fileupload.mjs.map +1 -1
  180. package/fesm2022/primeng-floatlabel.mjs +1 -1
  181. package/fesm2022/primeng-fluid.mjs +1 -1
  182. package/fesm2022/primeng-galleria.mjs +17 -8
  183. package/fesm2022/primeng-galleria.mjs.map +1 -1
  184. package/fesm2022/primeng-iconfield.mjs +1 -1
  185. package/fesm2022/primeng-icons-baseicon.mjs +1 -1
  186. package/fesm2022/primeng-iftalabel.mjs +1 -1
  187. package/fesm2022/primeng-image.mjs +112 -65
  188. package/fesm2022/primeng-image.mjs.map +1 -1
  189. package/fesm2022/primeng-imagecompare.mjs +30 -10
  190. package/fesm2022/primeng-imagecompare.mjs.map +1 -1
  191. package/fesm2022/primeng-inplace.mjs +48 -23
  192. package/fesm2022/primeng-inplace.mjs.map +1 -1
  193. package/fesm2022/primeng-inputgroupaddon.mjs +1 -1
  194. package/fesm2022/primeng-inputicon.mjs +1 -1
  195. package/fesm2022/primeng-inputmask.mjs +30 -14
  196. package/fesm2022/primeng-inputmask.mjs.map +1 -1
  197. package/fesm2022/primeng-inputnumber.mjs +54 -46
  198. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  199. package/fesm2022/primeng-inputotp.mjs +29 -10
  200. package/fesm2022/primeng-inputotp.mjs.map +1 -1
  201. package/fesm2022/primeng-inputswitch.mjs +1 -1
  202. package/fesm2022/primeng-inputtext.mjs +1 -1
  203. package/fesm2022/primeng-inputtextarea.mjs +1 -1
  204. package/fesm2022/primeng-keyfilter.mjs +1 -1
  205. package/fesm2022/primeng-knob.mjs +1 -1
  206. package/fesm2022/primeng-listbox.mjs +136 -77
  207. package/fesm2022/primeng-listbox.mjs.map +1 -1
  208. package/fesm2022/primeng-megamenu.mjs +104 -58
  209. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  210. package/fesm2022/primeng-menu.mjs +26 -26
  211. package/fesm2022/primeng-menu.mjs.map +1 -1
  212. package/fesm2022/primeng-menubar.mjs +69 -34
  213. package/fesm2022/primeng-menubar.mjs.map +1 -1
  214. package/fesm2022/primeng-message.mjs +49 -25
  215. package/fesm2022/primeng-message.mjs.map +1 -1
  216. package/fesm2022/primeng-messages.mjs +12 -3
  217. package/fesm2022/primeng-messages.mjs.map +1 -1
  218. package/fesm2022/primeng-metergroup.mjs +62 -30
  219. package/fesm2022/primeng-metergroup.mjs.map +1 -1
  220. package/fesm2022/primeng-multiselect.mjs +246 -155
  221. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  222. package/fesm2022/primeng-orderlist.mjs +124 -69
  223. package/fesm2022/primeng-orderlist.mjs.map +1 -1
  224. package/fesm2022/primeng-organizationchart.mjs +30 -14
  225. package/fesm2022/primeng-organizationchart.mjs.map +1 -1
  226. package/fesm2022/primeng-overlay.mjs +26 -6
  227. package/fesm2022/primeng-overlay.mjs.map +1 -1
  228. package/fesm2022/primeng-overlaybadge.mjs +1 -1
  229. package/fesm2022/primeng-overlaypanel.mjs +33 -10
  230. package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
  231. package/fesm2022/primeng-paginator.mjs +91 -59
  232. package/fesm2022/primeng-paginator.mjs.map +1 -1
  233. package/fesm2022/primeng-panel.mjs +160 -100
  234. package/fesm2022/primeng-panel.mjs.map +1 -1
  235. package/fesm2022/primeng-panelmenu.mjs +55 -32
  236. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  237. package/fesm2022/primeng-password.mjs +87 -48
  238. package/fesm2022/primeng-password.mjs.map +1 -1
  239. package/fesm2022/primeng-picklist.mjs +362 -258
  240. package/fesm2022/primeng-picklist.mjs.map +1 -1
  241. package/fesm2022/primeng-popover.mjs +29 -12
  242. package/fesm2022/primeng-popover.mjs.map +1 -1
  243. package/fesm2022/primeng-progressbar.mjs +26 -8
  244. package/fesm2022/primeng-progressbar.mjs.map +1 -1
  245. package/fesm2022/primeng-progressspinner.mjs +1 -1
  246. package/fesm2022/primeng-radiobutton.mjs +1 -1
  247. package/fesm2022/primeng-rating.mjs +45 -21
  248. package/fesm2022/primeng-rating.mjs.map +1 -1
  249. package/fesm2022/primeng-scroller.mjs +46 -36
  250. package/fesm2022/primeng-scroller.mjs.map +1 -1
  251. package/fesm2022/primeng-scrollpanel.mjs +27 -8
  252. package/fesm2022/primeng-scrollpanel.mjs.map +1 -1
  253. package/fesm2022/primeng-scrolltop.mjs +17 -10
  254. package/fesm2022/primeng-scrolltop.mjs.map +1 -1
  255. package/fesm2022/primeng-select.mjs +197 -118
  256. package/fesm2022/primeng-select.mjs.map +1 -1
  257. package/fesm2022/primeng-selectbutton.mjs +25 -10
  258. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  259. package/fesm2022/primeng-sidebar.mjs +81 -59
  260. package/fesm2022/primeng-sidebar.mjs.map +1 -1
  261. package/fesm2022/primeng-skeleton.mjs +1 -1
  262. package/fesm2022/primeng-slider.mjs +1 -1
  263. package/fesm2022/primeng-speeddial.mjs +53 -28
  264. package/fesm2022/primeng-speeddial.mjs.map +1 -1
  265. package/fesm2022/primeng-splitbutton.mjs +40 -17
  266. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  267. package/fesm2022/primeng-splitter.mjs +6 -6
  268. package/fesm2022/primeng-splitter.mjs.map +1 -1
  269. package/fesm2022/primeng-stepper.mjs +27 -13
  270. package/fesm2022/primeng-stepper.mjs.map +1 -1
  271. package/fesm2022/primeng-steps.mjs +1 -1
  272. package/fesm2022/primeng-styleclass.mjs +1 -1
  273. package/fesm2022/primeng-table.mjs +107 -96
  274. package/fesm2022/primeng-table.mjs.map +1 -1
  275. package/fesm2022/primeng-tabmenu.mjs +53 -26
  276. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  277. package/fesm2022/primeng-tabs.mjs +27 -19
  278. package/fesm2022/primeng-tabs.mjs.map +1 -1
  279. package/fesm2022/primeng-tabview.mjs +106 -54
  280. package/fesm2022/primeng-tabview.mjs.map +1 -1
  281. package/fesm2022/primeng-tag.mjs +67 -43
  282. package/fesm2022/primeng-tag.mjs.map +1 -1
  283. package/fesm2022/primeng-terminal.mjs +1 -1
  284. package/fesm2022/primeng-textarea.mjs +1 -1
  285. package/fesm2022/primeng-tieredmenu.mjs +43 -20
  286. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  287. package/fesm2022/primeng-timeline.mjs +40 -16
  288. package/fesm2022/primeng-timeline.mjs.map +1 -1
  289. package/fesm2022/primeng-toast.mjs +31 -9
  290. package/fesm2022/primeng-toast.mjs.map +1 -1
  291. package/fesm2022/primeng-togglebutton.mjs +44 -29
  292. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  293. package/fesm2022/primeng-toggleswitch.mjs +27 -8
  294. package/fesm2022/primeng-toggleswitch.mjs.map +1 -1
  295. package/fesm2022/primeng-toolbar.mjs +46 -20
  296. package/fesm2022/primeng-toolbar.mjs.map +1 -1
  297. package/fesm2022/primeng-tooltip.mjs +35 -70
  298. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  299. package/fesm2022/primeng-tree.mjs +114 -97
  300. package/fesm2022/primeng-tree.mjs.map +1 -1
  301. package/fesm2022/primeng-treeselect.mjs +155 -88
  302. package/fesm2022/primeng-treeselect.mjs.map +1 -1
  303. package/fesm2022/primeng-treetable.mjs +30 -11
  304. package/fesm2022/primeng-treetable.mjs.map +1 -1
  305. package/fesm2022/primeng-usestyle.mjs +1 -1
  306. package/fesm2022/primeng-usestyle.mjs.map +1 -1
  307. package/fieldset/fieldset.d.ts +12 -6
  308. package/fileupload/fileupload.d.ts +19 -8
  309. package/galleria/galleria.d.ts +3 -2
  310. package/image/image.d.ts +18 -7
  311. package/imagecompare/imagecompare.d.ts +7 -2
  312. package/inplace/inplace.d.ts +12 -6
  313. package/inputmask/inputmask.d.ts +8 -4
  314. package/inputnumber/inputnumber.d.ts +11 -6
  315. package/inputotp/inputotp.d.ts +7 -2
  316. package/listbox/listbox.d.ts +17 -4
  317. package/megamenu/megamenu.d.ts +16 -7
  318. package/menu/menu.d.ts +6 -6
  319. package/menubar/menubar.d.ts +13 -6
  320. package/message/message.d.ts +10 -4
  321. package/messages/messages.d.ts +4 -3
  322. package/metergroup/metergroup.d.ts +11 -3
  323. package/multiselect/multiselect.d.ts +36 -17
  324. package/orderlist/orderlist.d.ts +23 -11
  325. package/organizationchart/organizationchart.d.ts +6 -4
  326. package/overlay/overlay.d.ts +6 -3
  327. package/overlaypanel/overlaypanel.d.ts +6 -3
  328. package/package.json +171 -165
  329. package/paginator/paginator.d.ts +15 -8
  330. package/panel/panel.d.ts +14 -5
  331. package/panelmenu/panelmenu.d.ts +8 -4
  332. package/password/password.d.ts +15 -7
  333. package/picklist/picklist.d.ts +23 -3
  334. package/popover/popover.d.ts +8 -5
  335. package/progressbar/progressbar.d.ts +7 -3
  336. package/rating/rating.d.ts +11 -5
  337. package/scroller/scroller.d.ts +9 -4
  338. package/scrollpanel/scrollpanel.d.ts +7 -3
  339. package/scrolltop/scrolltop.d.ts +7 -4
  340. package/select/select.d.ts +31 -13
  341. package/selectbutton/selectbutton.d.ts +7 -3
  342. package/sidebar/sidebar.d.ts +9 -2
  343. package/speeddial/speeddial.d.ts +9 -4
  344. package/splitbutton/splitbutton.d.ts +9 -5
  345. package/splitter/splitter.d.ts +4 -4
  346. package/stepper/stepper.d.ts +8 -3
  347. package/table/table.d.ts +2 -2
  348. package/tabmenu/tabmenu.d.ts +12 -7
  349. package/tabs/tablist.d.ts +6 -2
  350. package/tabview/tabview.d.ts +16 -7
  351. package/tag/tag.d.ts +8 -9
  352. package/tieredmenu/tieredmenu.d.ts +10 -6
  353. package/timeline/timeline.d.ts +7 -2
  354. package/toast/toast.d.ts +7 -3
  355. package/togglebutton/togglebutton.d.ts +8 -3
  356. package/toggleswitch/toggleswitch.d.ts +6 -2
  357. package/toolbar/toolbar.d.ts +9 -4
  358. package/tooltip/tooltip.d.ts +2 -1
  359. package/tree/tree.d.ts +23 -10
  360. package/treeselect/treeselect.d.ts +26 -12
  361. package/treetable/treetable.d.ts +7 -5
@@ -1,8 +1,8 @@
1
1
  import { animate, state, style, transition, trigger } from '@angular/animations';
2
2
  import { CommonModule, DOCUMENT } from '@angular/common';
3
- import { booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, EventEmitter, HostListener, Inject, inject, Input, NgModule, numberAttribute, ViewEncapsulation } from '@angular/core';
3
+ import { booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, ContentChildren, EventEmitter, HostListener, Inject, inject, Input, NgModule, numberAttribute, ViewEncapsulation } from '@angular/core';
4
4
  import { absolutePosition, addClass, findSingle, getOffset, isIOS, isTouchDevice } from '@primeuix/utils';
5
- import { SharedModule, TranslationKeys } from 'primeng/api';
5
+ import { PrimeTemplate, SharedModule, TranslationKeys } from 'primeng/api';
6
6
  import { BaseComponent } from 'primeng/basecomponent';
7
7
  import { ButtonModule } from 'primeng/button';
8
8
  import { ConnectedOverlayScrollHandler } from 'primeng/dom';
@@ -29,7 +29,7 @@ function ConfirmPopup_div_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
29
29
  } if (rf & 2) {
30
30
  const ctx_r1 = i0.ɵɵnextContext(2);
31
31
  i0.ɵɵadvance();
32
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.headlessTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c6, ctx_r1.confirmation));
32
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.headlessTemplate || ctx_r1._headlessTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c6, ctx_r1.confirmation));
33
33
  } }
34
34
  function ConfirmPopup_div_0_ng_template_2_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
35
35
  i0.ɵɵelementContainer(0);
@@ -41,7 +41,7 @@ function ConfirmPopup_div_0_ng_template_2_ng_container_2_Template(rf, ctx) { if
41
41
  } if (rf & 2) {
42
42
  const ctx_r1 = i0.ɵɵnextContext(3);
43
43
  i0.ɵɵadvance();
44
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.contentTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c6, ctx_r1.confirmation));
44
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.contentTemplate || ctx_r1._contentTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c6, ctx_r1.confirmation));
45
45
  } }
46
46
  function ConfirmPopup_div_0_ng_template_2_ng_template_3_i_0_Template(rf, ctx) { if (rf & 1) {
47
47
  i0.ɵɵelement(0, "i", 15);
@@ -84,7 +84,7 @@ function ConfirmPopup_div_0_ng_template_2_p_button_6_Template(rf, ctx) { if (rf
84
84
  i0.ɵɵadvance();
85
85
  i0.ɵɵproperty("ngIf", ctx_r1.confirmation == null ? null : ctx_r1.confirmation.rejectIcon)("ngIfElse", ctx_r1.rejecticon);
86
86
  i0.ɵɵadvance();
87
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.rejecticon);
87
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.rejectIconTemplate || ctx_r1._rejectIconTemplate);
88
88
  } }
89
89
  function ConfirmPopup_div_0_ng_template_2_p_button_7_i_1_Template(rf, ctx) { if (rf & 1) {
90
90
  i0.ɵɵelement(0, "i");
@@ -109,7 +109,7 @@ function ConfirmPopup_div_0_ng_template_2_p_button_7_Template(rf, ctx) { if (rf
109
109
  i0.ɵɵadvance();
110
110
  i0.ɵɵproperty("ngIf", ctx_r1.confirmation == null ? null : ctx_r1.confirmation.acceptIcon)("ngIfElse", ctx_r1.accepticontemplate);
111
111
  i0.ɵɵadvance();
112
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.accepticon);
112
+ i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.acceptIconTemplate || ctx_r1._acceptIconTemplate);
113
113
  } }
114
114
  function ConfirmPopup_div_0_ng_template_2_Template(rf, ctx) { if (rf & 1) {
115
115
  i0.ɵɵelementStart(0, "div", 9, 1);
@@ -122,7 +122,7 @@ function ConfirmPopup_div_0_ng_template_2_Template(rf, ctx) { if (rf & 1) {
122
122
  const withoutContentTemplate_r5 = i0.ɵɵreference(4);
123
123
  const ctx_r1 = i0.ɵɵnextContext(2);
124
124
  i0.ɵɵadvance(2);
125
- i0.ɵɵproperty("ngIf", ctx_r1.contentTemplate)("ngIfElse", withoutContentTemplate_r5);
125
+ i0.ɵɵproperty("ngIf", ctx_r1.contentTemplate || ctx_r1._contentTemplate)("ngIfElse", withoutContentTemplate_r5);
126
126
  i0.ɵɵadvance(4);
127
127
  i0.ɵɵproperty("ngIf", (ctx_r1.confirmation == null ? null : ctx_r1.confirmation.rejectVisible) !== false);
128
128
  i0.ɵɵadvance();
@@ -140,7 +140,7 @@ function ConfirmPopup_div_0_Template(rf, ctx) { if (rf & 1) {
140
140
  i0.ɵɵclassMap(ctx_r1.styleClass);
141
141
  i0.ɵɵproperty("ngClass", "p-confirmpopup p-component")("ngStyle", ctx_r1.style)("@animation", i0.ɵɵpureFunction1(10, _c5, i0.ɵɵpureFunction2(7, _c4, ctx_r1.showTransitionOptions, ctx_r1.hideTransitionOptions)));
142
142
  i0.ɵɵadvance();
143
- i0.ɵɵproperty("ngIf", ctx_r1.headlessTemplate)("ngIfElse", notHeadless_r6);
143
+ i0.ɵɵproperty("ngIf", ctx_r1.headlessTemplate || ctx_r1._headlessTemplate)("ngIfElse", notHeadless_r6);
144
144
  } }
145
145
  /**
146
146
  * ConfirmPopup displays a confirmation overlay displayed relatively to its target.
@@ -208,9 +208,13 @@ export class ConfirmPopup extends BaseComponent {
208
208
  subscription;
209
209
  confirmation;
210
210
  contentTemplate;
211
- accepticon;
212
- rejecticon;
211
+ acceptIconTemplate;
212
+ rejectIconTemplate;
213
213
  headlessTemplate;
214
+ _contentTemplate;
215
+ _acceptIconTemplate;
216
+ _rejectIconTemplate;
217
+ _headlessTemplate;
214
218
  _visible;
215
219
  documentClickListener;
216
220
  documentResizeListener;
@@ -249,6 +253,25 @@ export class ConfirmPopup extends BaseComponent {
249
253
  }
250
254
  });
251
255
  }
256
+ templates;
257
+ ngAfterContentInit() {
258
+ this.templates?.forEach((item) => {
259
+ switch (item.getType()) {
260
+ case 'content':
261
+ this._contentTemplate = item.template;
262
+ break;
263
+ case 'rejecticon':
264
+ this._rejectIconTemplate = item.template;
265
+ break;
266
+ case 'accepticon':
267
+ this._acceptIconTemplate = item.template;
268
+ break;
269
+ case 'headless':
270
+ this._headlessTemplate = item.template;
271
+ break;
272
+ }
273
+ });
274
+ }
252
275
  option(name, k) {
253
276
  const source = this || this;
254
277
  if (source.hasOwnProperty(name)) {
@@ -446,16 +469,18 @@ export class ConfirmPopup extends BaseComponent {
446
469
  }
447
470
  static ɵfac = function ConfirmPopup_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ConfirmPopup)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.ConfirmationService), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.OverlayService), i0.ɵɵdirectiveInject(DOCUMENT)); };
448
471
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ConfirmPopup, selectors: [["p-confirmPopup"], ["p-confirmpopup"], ["p-confirm-popup"]], contentQueries: function ConfirmPopup_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
449
- i0.ɵɵcontentQuery(dirIndex, _c0, 5);
450
- i0.ɵɵcontentQuery(dirIndex, _c1, 5);
451
- i0.ɵɵcontentQuery(dirIndex, _c2, 5);
452
- i0.ɵɵcontentQuery(dirIndex, _c3, 5);
472
+ i0.ɵɵcontentQuery(dirIndex, _c0, 4);
473
+ i0.ɵɵcontentQuery(dirIndex, _c1, 4);
474
+ i0.ɵɵcontentQuery(dirIndex, _c2, 4);
475
+ i0.ɵɵcontentQuery(dirIndex, _c3, 4);
476
+ i0.ɵɵcontentQuery(dirIndex, PrimeTemplate, 4);
453
477
  } if (rf & 2) {
454
478
  let _t;
455
479
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentTemplate = _t.first);
456
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.accepticon = _t.first);
457
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.rejecticon = _t.first);
480
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.acceptIconTemplate = _t.first);
481
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.rejectIconTemplate = _t.first);
458
482
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headlessTemplate = _t.first);
483
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templates = _t);
459
484
  } }, hostBindings: function ConfirmPopup_HostBindings(rf, ctx) { if (rf & 1) {
460
485
  i0.ɵɵlistener("keydown.escape", function ConfirmPopup_keydown_escape_HostBindingHandler($event) { return ctx.onEscapeKeydown($event); }, false, i0.ɵɵresolveDocument);
461
486
  } }, inputs: { key: "key", defaultFocus: "defaultFocus", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", autoZIndex: [2, "autoZIndex", "autoZIndex", booleanAttribute], baseZIndex: [2, "baseZIndex", "baseZIndex", numberAttribute], style: "style", styleClass: "styleClass", visible: "visible" }, standalone: true, features: [i0.ɵɵProvidersFeature([ConfirmPopupStyle]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 1, vars: 1, consts: [["notHeadless", ""], ["content", ""], ["withoutContentTemplate", ""], ["rejecticon", ""], ["accepticontemplate", ""], ["role", "alertdialog", 3, "ngClass", "ngStyle", "class", "click", 4, "ngIf"], ["role", "alertdialog", 3, "click", "ngClass", "ngStyle"], [4, "ngIf", "ngIfElse"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "p-confirmpopup-content"], [1, "p-confirmpopup-footer"], ["type", "button", 3, "label", "ngClass", "styleClass", "size", "text", "buttonProps", "onClick", 4, "ngIf"], ["type", "button", 3, "label", "ngClass", "styleClass", "size", "buttonProps", "onClick", 4, "ngIf"], [3, "ngClass", "class", 4, "ngIf"], [1, "p-confirmpopup-message"], [3, "ngClass"], ["type", "button", 3, "onClick", "label", "ngClass", "styleClass", "size", "text", "buttonProps"], [3, "class", 4, "ngIf", "ngIfElse"], [4, "ngTemplateOutlet"], ["type", "button", 3, "onClick", "label", "ngClass", "styleClass", "size", "buttonProps"]], template: function ConfirmPopup_Template(rf, ctx) { if (rf & 1) {
@@ -498,13 +523,13 @@ export class ConfirmPopup extends BaseComponent {
498
523
  (@animation.start)="onAnimationStart($event)"
499
524
  (@animation.done)="onAnimationEnd($event)"
500
525
  >
501
- <ng-container *ngIf="headlessTemplate; else notHeadless">
502
- <ng-container *ngTemplateOutlet="headlessTemplate; context: { $implicit: confirmation }"></ng-container>
526
+ <ng-container *ngIf="headlessTemplate || _headlessTemplate; else notHeadless">
527
+ <ng-container *ngTemplateOutlet="headlessTemplate || _headlessTemplate; context: { $implicit: confirmation }"></ng-container>
503
528
  </ng-container>
504
529
  <ng-template #notHeadless>
505
530
  <div #content class="p-confirmpopup-content">
506
- <ng-container *ngIf="contentTemplate; else withoutContentTemplate">
507
- <ng-container *ngTemplateOutlet="contentTemplate; context: { $implicit: confirmation }"></ng-container>
531
+ <ng-container *ngIf="contentTemplate || _contentTemplate; else withoutContentTemplate">
532
+ <ng-container *ngTemplateOutlet="contentTemplate || _contentTemplate; context: { $implicit: confirmation }"></ng-container>
508
533
  </ng-container>
509
534
  <ng-template #withoutContentTemplate>
510
535
  <i [ngClass]="'p-confirmpopup-icon'" [class]="confirmation?.icon" *ngIf="confirmation?.icon"></i>
@@ -525,7 +550,7 @@ export class ConfirmPopup extends BaseComponent {
525
550
  [buttonProps]="getRejectButtonProps()"
526
551
  >
527
552
  <i [class]="confirmation?.rejectIcon" *ngIf="confirmation?.rejectIcon; else rejecticon"></i>
528
- <ng-template #rejecticon *ngTemplateOutlet="rejecticon"></ng-template>
553
+ <ng-template #rejecticon *ngTemplateOutlet="rejectIconTemplate || _rejectIconTemplate"></ng-template>
529
554
  </p-button>
530
555
  <p-button
531
556
  type="button"
@@ -539,7 +564,7 @@ export class ConfirmPopup extends BaseComponent {
539
564
  [buttonProps]="getAcceptButtonProps()"
540
565
  >
541
566
  <i [class]="confirmation?.acceptIcon" *ngIf="confirmation?.acceptIcon; else accepticontemplate"></i>
542
- <ng-template #accepticontemplate *ngTemplateOutlet="accepticon"></ng-template>
567
+ <ng-template #accepticontemplate *ngTemplateOutlet="acceptIconTemplate || _acceptIconTemplate"></ng-template>
543
568
  </p-button>
544
569
  </div>
545
570
  </ng-template>
@@ -588,16 +613,19 @@ export class ConfirmPopup extends BaseComponent {
588
613
  type: Input
589
614
  }], contentTemplate: [{
590
615
  type: ContentChild,
591
- args: ['content']
592
- }], accepticon: [{
616
+ args: ['content', { descendants: false }]
617
+ }], acceptIconTemplate: [{
593
618
  type: ContentChild,
594
- args: ['accepticon']
595
- }], rejecticon: [{
619
+ args: ['accepticon', { descendants: false }]
620
+ }], rejectIconTemplate: [{
596
621
  type: ContentChild,
597
- args: ['rejecticon']
622
+ args: ['rejecticon', { descendants: false }]
598
623
  }], headlessTemplate: [{
599
624
  type: ContentChild,
600
- args: ['headless']
625
+ args: ['headless', { descendants: false }]
626
+ }], templates: [{
627
+ type: ContentChildren,
628
+ args: [PrimeTemplate]
601
629
  }], onEscapeKeydown: [{
602
630
  type: HostListener,
603
631
  args: ['document:keydown.escape', ['$event']]
@@ -616,4 +644,4 @@ export class ConfirmPopupModule {
616
644
  }]
617
645
  }], null, null); })();
618
646
  (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(ConfirmPopupModule, { imports: [ConfirmPopup, SharedModule], exports: [ConfirmPopup, SharedModule] }); })();
619
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybXBvcHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpcm1wb3B1cC9jb25maXJtcG9wdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakcsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBRUgsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLGVBQWUsRUFJZixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRyxPQUFPLEVBQXFELFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQTBCOUMsd0JBQXdHOzs7SUFENUcsNkJBQXlEO0lBQ3JELG9HQUF5Rjs7OztJQUExRSxjQUFvQztJQUFBLEFBQXBDLDBEQUFvQyw0RUFBb0M7OztJQUsvRSx3QkFBdUc7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QUM7Z0JBQ04sT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztnQkFDckMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQzthQUN4Qzs7d0ZBQ1ksa0JBQWtCLGNBM1dsQixZQUFZLEVBd1dHLFlBQVksYUF4VzNCLFlBQVksRUF5V0csWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIEFuaW1hdGlvbkV2ZW50LCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25EZXN0cm95LFxuICAgIFJlbmRlcmVyMixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFic29sdXRlUG9zaXRpb24sIGFkZENsYXNzLCBmaW5kU2luZ2xlLCBnZXRPZmZzZXQsIGlzSU9TLCBpc1RvdWNoRGV2aWNlIH0gZnJvbSAnQHByaW1ldWl4L3V0aWxzJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSwgT3ZlcmxheVNlcnZpY2UsIFNoYXJlZE1vZHVsZSwgVHJhbnNsYXRpb25LZXlzIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJ3ByaW1lbmcvYmFzZWNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBDb25uZWN0ZWRPdmVybGF5U2Nyb2xsSGFuZGxlciB9IGZyb20gJ3ByaW1lbmcvZG9tJztcbmltcG9ydCB7IE51bGxhYmxlLCBWb2lkTGlzdGVuZXIgfSBmcm9tICdwcmltZW5nL3RzLWhlbHBlcnMnO1xuaW1wb3J0IHsgWkluZGV4VXRpbHMgfSBmcm9tICdwcmltZW5nL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uZmlybVBvcHVwU3R5bGUgfSBmcm9tICcuL3N0eWxlL2NvbmZpcm1wb3B1cHN0eWxlJztcblxuLyoqXG4gKiBDb25maXJtUG9wdXAgZGlzcGxheXMgYSBjb25maXJtYXRpb24gb3ZlcmxheSBkaXNwbGF5ZWQgcmVsYXRpdmVseSB0byBpdHMgdGFyZ2V0LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLWNvbmZpcm1Qb3B1cCwgcC1jb25maXJtcG9wdXAsIHAtY29uZmlybS1wb3B1cCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTaGFyZWRNb2R1bGUsIEJ1dHRvbk1vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJ2aXNpYmxlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidwLWNvbmZpcm1wb3B1cCBwLWNvbXBvbmVudCdcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgW2NsYXNzXT1cInN0eWxlQ2xhc3NcIlxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0ZGlhbG9nXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbk92ZXJsYXlDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtAYW5pbWF0aW9uXT1cIntcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ29wZW4nLFxuICAgICAgICAgICAgICAgIHBhcmFtczogeyBzaG93VHJhbnNpdGlvblBhcmFtczogc2hvd1RyYW5zaXRpb25PcHRpb25zLCBoaWRlVHJhbnNpdGlvblBhcmFtczogaGlkZVRyYW5zaXRpb25PcHRpb25zIH1cbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKEBhbmltYXRpb24uc3RhcnQpPVwib25BbmltYXRpb25TdGFydCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChAYW5pbWF0aW9uLmRvbmUpPVwib25BbmltYXRpb25FbmQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkbGVzc1RlbXBsYXRlOyBlbHNlIG5vdEhlYWRsZXNzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRsZXNzVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb25maXJtYXRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEhlYWRsZXNzPlxuICAgICAgICAgICAgICAgIDxkaXYgI2NvbnRlbnQgY2xhc3M9XCJwLWNvbmZpcm1wb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50VGVtcGxhdGU7IGVsc2Ugd2l0aG91dENvbnRlbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbmZpcm1hdGlvbiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhvdXRDb250ZW50VGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbbmdDbGFzc109XCIncC1jb25maXJtcG9wdXAtaWNvbidcIiBbY2xhc3NdPVwiY29uZmlybWF0aW9uPy5pY29uXCIgKm5nSWY9XCJjb25maXJtYXRpb24/Lmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29uZmlybXBvcHVwLW1lc3NhZ2VcIj57eyBjb25maXJtYXRpb24/Lm1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtY29uZmlybXBvcHVwLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlamVjdEJ1dHRvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uUmVqZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ3AtY29uZmlybXBvcHVwLXJlamVjdC1idXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cImNvbmZpcm1hdGlvbj8ucmVqZWN0QnV0dG9uU3R5bGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJjb25maXJtYXRpb24ucmVqZWN0QnV0dG9uUHJvcHM/LnNpemUgfHwgJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJjb25maXJtYXRpb24ucmVqZWN0QnV0dG9uUHJvcHM/LnRleHQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maXJtYXRpb24/LnJlamVjdFZpc2libGUgIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmVqZWN0QnV0dG9uTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblByb3BzXT1cImdldFJlamVjdEJ1dHRvblByb3BzKClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY29uZmlybWF0aW9uPy5yZWplY3RJY29uXCIgKm5nSWY9XCJjb25maXJtYXRpb24/LnJlamVjdEljb247IGVsc2UgcmVqZWN0aWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVqZWN0aWNvbiAqbmdUZW1wbGF0ZU91dGxldD1cInJlamVjdGljb25cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImFjY2VwdEJ1dHRvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWNjZXB0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ3AtY29uZmlybXBvcHVwLWFjY2VwdC1idXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cImNvbmZpcm1hdGlvbj8uYWNjZXB0QnV0dG9uU3R5bGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJjb25maXJtYXRpb24uYWNjZXB0QnV0dG9uUHJvcHM/LnNpemUgfHwgJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpcm1hdGlvbj8uYWNjZXB0VmlzaWJsZSAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY2NlcHRCdXR0b25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uUHJvcHNdPVwiZ2V0QWNjZXB0QnV0dG9uUHJvcHMoKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjb25maXJtYXRpb24/LmFjY2VwdEljb25cIiAqbmdJZj1cImNvbmZpcm1hdGlvbj8uYWNjZXB0SWNvbjsgZWxzZSBhY2NlcHRpY29udGVtcGxhdGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FjY2VwdGljb250ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImFjY2VwdGljb25cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgYCxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2FuaW1hdGlvbicsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICd2b2lkJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWSgwLjgpJyxcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ29wZW4nLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDFcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gb3BlbicsIGFuaW1hdGUoJ3t7c2hvd1RyYW5zaXRpb25QYXJhbXN9fScpKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ29wZW4gPT4gdm9pZCcsIGFuaW1hdGUoJ3t7aGlkZVRyYW5zaXRpb25QYXJhbXN9fScpKVxuICAgICAgICBdKVxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtDb25maXJtUG9wdXBTdHlsZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlybVBvcHVwIGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwga2V5IHRvIG1hdGNoIHRoZSBrZXkgb2YgY29uZmlybSBvYmplY3QsIG5lY2Vzc2FyeSB0byB1c2Ugd2hlbiBjb21wb25lbnQgdHJlZSBoYXMgbXVsdGlwbGUgY29uZmlybSBkaWFsb2dzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgdG8gcmVjZWl2ZSB0aGUgZm9jdXMgd2hlbiB0aGUgcG9wdXAgZ2V0cyB2aXNpYmxlLCB2YWxpZCB2YWx1ZXMgYXJlIFwiYWNjZXB0XCIsIFwicmVqZWN0XCIsIGFuZCBcIm5vbmVcIi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkZWZhdWx0Rm9jdXM6IHN0cmluZyA9ICdhY2NlcHQnO1xuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb24gb3B0aW9ucyBvZiB0aGUgc2hvdyBhbmltYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2hvd1RyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnLjEycyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSc7XG4gICAgLyoqXG4gICAgICogVHJhbnNpdGlvbiBvcHRpb25zIG9mIHRoZSBoaWRlIGFuaW1hdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBoaWRlVHJhbnNpdGlvbk9wdGlvbnM6IHN0cmluZyA9ICcuMXMgbGluZWFyJztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgbWFuYWdlIGxheWVyaW5nLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhdXRvWkluZGV4OiBib29sZWFuID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBCYXNlIHpJbmRleCB2YWx1ZSB0byB1c2UgaW4gbGF5ZXJpbmcuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgYmFzZVpJbmRleDogbnVtYmVyID0gMDtcbiAgICAvKipcbiAgICAgKiBJbmxpbmUgc3R5bGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTdHlsZSBjbGFzcyBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGlmIHRoZSBjb21wb25lbnQgaXMgdmlzaWJsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgdmlzaWJsZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgICB9XG4gICAgc2V0IHZpc2libGUodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyOiBOdWxsYWJsZTxIVE1MRGl2RWxlbWVudD47XG5cbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbmZpcm1hdGlvbjogTnVsbGFibGU8Q29uZmlybWF0aW9uPjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2NvbnRlbnQnKSBjb250ZW50VGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnYWNjZXB0aWNvbicpIGFjY2VwdGljb246IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgncmVqZWN0aWNvbicpIHJlamVjdGljb246IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGxlc3MnKSBoZWFkbGVzc1RlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIF92aXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgZG9jdW1lbnRDbGlja0xpc3RlbmVyOiBWb2lkTGlzdGVuZXI7XG5cbiAgICBkb2N1bWVudFJlc2l6ZUxpc3RlbmVyOiBWb2lkTGlzdGVuZXI7XG5cbiAgICBzY3JvbGxIYW5kbGVyOiBOdWxsYWJsZTxDb25uZWN0ZWRPdmVybGF5U2Nyb2xsSGFuZGxlcj47XG5cbiAgICBwcml2YXRlIHdpbmRvdzogV2luZG93O1xuXG4gICAgX2NvbXBvbmVudFN0eWxlID0gaW5qZWN0KENvbmZpcm1Qb3B1cFN0eWxlKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHB1YmxpYyBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyBvdmVybGF5U2VydmljZTogT3ZlcmxheVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHB1YmxpYyBkb2N1bWVudDogRG9jdW1lbnRcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy53aW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3IGFzIFdpbmRvdztcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UucmVxdWlyZUNvbmZpcm1hdGlvbiQuc3Vic2NyaWJlKChjb25maXJtYXRpb24pID0+IHtcbiAgICAgICAgICAgIGlmICghY29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uLmtleSA9PT0gdGhpcy5rZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbiA9IGNvbmZpcm1hdGlvbjtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlybWF0aW9uKTtcblxuICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IGNvbmZpcm1hdGlvbltrZXldO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uLmFjY2VwdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5hY2NlcHRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24uYWNjZXB0RXZlbnQuc3Vic2NyaWJlKHRoaXMuY29uZmlybWF0aW9uLmFjY2VwdCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uLnJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5yZWplY3RFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ucmVqZWN0RXZlbnQuc3Vic2NyaWJlKHRoaXMuY29uZmlybWF0aW9uLnJlamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3B0aW9uKG5hbWU6IHN0cmluZywgaz86IHN0cmluZykge1xuICAgICAgICBjb25zdCBzb3VyY2U6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB0aGlzIHx8IHRoaXM7XG4gICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVtrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VbbmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSlcbiAgICBvbkVzY2FwZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uICYmIHRoaXMuY29uZmlybWF0aW9uLmNsb3NlT25Fc2NhcGUpIHtcbiAgICAgICAgICAgIHRoaXMub25SZWplY3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQW5pbWF0aW9uU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50b1N0YXRlID09PSAnb3BlbicpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID0gZXZlbnQuZWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCB0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgICAgICB0aGlzLmFsaWduKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRMaXN0ZW5lcnMoKTtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0RWxlbWVudFRvRm9jdXMoKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQudG9TdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAndm9pZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbnRhaW5lckRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEFjY2VwdEJ1dHRvblByb3BzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb24oJ2FjY2VwdEJ1dHRvblByb3BzJyk7XG4gICAgfVxuXG4gICAgZ2V0UmVqZWN0QnV0dG9uUHJvcHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbigncmVqZWN0QnV0dG9uUHJvcHMnKTtcbiAgICB9XG5cbiAgICBnZXRFbGVtZW50VG9Gb2N1cygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmRlZmF1bHRGb2N1cykge1xuICAgICAgICAgICAgY2FzZSAnYWNjZXB0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gPGFueT5maW5kU2luZ2xlKHRoaXMuY29udGFpbmVyLCAnLnAtY29uZmlybS1wb3B1cC1hY2NlcHQnKTtcblxuICAgICAgICAgICAgY2FzZSAncmVqZWN0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gPGFueT5maW5kU2luZ2xlKHRoaXMuY29udGFpbmVyLCAnLnAtY29uZmlybS1wb3B1cC1yZWplY3QnKTtcblxuICAgICAgICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhbGlnbigpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b1pJbmRleCkge1xuICAgICAgICAgICAgWkluZGV4VXRpbHMuc2V0KCdvdmVybGF5JywgdGhpcy5jb250YWluZXIsIHRoaXMuY29uZmlnLnpJbmRleC5vdmVybGF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jb25maXJtYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uKHRoaXMuY29udGFpbmVyLCB0aGlzLmNvbmZpcm1hdGlvbj8udGFyZ2V0IGFzIGFueSwgZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lck9mZnNldCA9IDxhbnk+Z2V0T2Zmc2V0KHRoaXMuY29udGFpbmVyKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0T2Zmc2V0ID0gPGFueT5nZXRPZmZzZXQodGhpcy5jb25maXJtYXRpb24/LnRhcmdldCBhcyBhbnkpO1xuICAgICAgICBsZXQgYXJyb3dMZWZ0ID0gMDtcblxuICAgICAgICBpZiAoY29udGFpbmVyT2Zmc2V0LmxlZnQgPCB0YXJnZXRPZmZzZXQubGVmdCkge1xuICAgICAgICAgICAgYXJyb3dMZWZ0ID0gdGFyZ2V0T2Zmc2V0LmxlZnQgLSBjb250YWluZXJPZmZzZXQubGVmdDtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5jb250YWluZXIgYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLnNldFByb3BlcnR5KCctLW92ZXJsYXlBcnJvd0xlZnQnLCBgJHthcnJvd0xlZnR9cHhgKTtcblxuICAgICAgICBpZiAoY29udGFpbmVyT2Zmc2V0LnRvcCA8IHRhcmdldE9mZnNldC50b3ApIHtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuY29udGFpbmVyLCAncC1jb25maXJtLXBvcHVwLWZsaXBwZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGUoKSB7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uQWNjZXB0KCkge1xuICAgICAgICBpZiAodGhpcy5jb25maXJtYXRpb24/LmFjY2VwdEV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5hY2NlcHRFdmVudC5lbWl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG5cbiAgICBvblJlamVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uPy5yZWplY3RFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ucmVqZWN0RXZlbnQuZW1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25PdmVybGF5Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5hZGQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZWwubmF0aXZlRWxlbWVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBiaW5kTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgICAgICAvKlxuICAgICAgICAgKiBDYWxsZWQgaW5zaWRlIGBzZXRUaW1lb3V0YCB0byBhdm9pZCBsaXN0ZW5pbmcgdG8gdGhlIGNsaWNrIGV2ZW50IHRoYXQgYXBwZWFycyB3aGVuIGBjb25maXJtYCBpcyBmaXJzdCBjYWxsZWQoYnViYmxpbmcpLlxuICAgICAgICAgKiBOZWVkIHdhaXQgd2hlbiBidWJibGluZyBldmVudCB1cCBhbmQgaGFuZyB0aGUgaGFuZGxlciBvbiB0aGUgbmV4dCB0aWNrLlxuICAgICAgICAgKiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gZXZlbnRUYXJnZXQgYW5kIGNvbmZpcm1hdGlvbi50YXJnZXQgZG8gbm90IG1hdGNoIHdoZW4gdGhlIGBjb25maXJtYCBtZXRob2QgaXMgY2FsbGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmREb2N1bWVudENsaWNrTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmluZFNjcm9sbExpc3RlbmVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVuYmluZExpc3RlbmVycygpIHtcbiAgICAgICAgdGhpcy51bmJpbmREb2N1bWVudENsaWNrTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy51bmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMudW5iaW5kU2Nyb2xsTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBiaW5kRG9jdW1lbnRDbGlja0xpc3RlbmVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKSB7XG4gICAgICAgICAgICBsZXQgZG9jdW1lbnRFdmVudCA9IGlzSU9TKCkgPyAndG91Y2hzdGFydCcgOiAnY2xpY2snO1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRUYXJnZXQ6IGFueSA9IHRoaXMuZWwgPyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudCA6IHRoaXMuZG9jdW1lbnQ7XG5cbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oZG9jdW1lbnRUYXJnZXQsIGRvY3VtZW50RXZlbnQsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbiAmJiB0aGlzLmNvbmZpcm1hdGlvbi5kaXNtaXNzYWJsZU1hc2sgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0YXJnZXRFbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuY29uZmlybWF0aW9uLnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyICE9PSBldmVudC50YXJnZXQgJiYgIXRoaXMuY29udGFpbmVyPy5jb250YWlucyhldmVudC50YXJnZXQpICYmIHRhcmdldEVsZW1lbnQgIT09IGV2ZW50LnRhcmdldCAmJiAhdGFyZ2V0RWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5iaW5kRG9jdW1lbnRDbGlja0xpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZSAmJiAhaXNUb3VjaERldmljZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy53aW5kb3csICdyZXNpemUnLCB0aGlzLm9uV2luZG93UmVzaXplLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5iaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmluZFNjcm9sbExpc3RlbmVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyID0gbmV3IENvbm5lY3RlZE92ZXJsYXlTY3JvbGxIYW5kbGVyKHRoaXMuY29uZmlybWF0aW9uPy50YXJnZXQsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyLmJpbmRTY3JvbGxMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHVuYmluZFNjcm9sbExpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxIYW5kbGVyKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEhhbmRsZXIudW5iaW5kU2Nyb2xsTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuc3Vic2NyaWJlQ29uZmlybWF0aW9uU3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb25maXJtYXRpb24uYWNjZXB0RXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5hY2NlcHRFdmVudC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jb25maXJtYXRpb24ucmVqZWN0RXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5yZWplY3RFdmVudC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Db250YWluZXJEZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuYmluZExpc3RlbmVycygpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQ29uZmlybWF0aW9uU3Vic2NyaXB0aW9ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dG9aSW5kZXgpIHtcbiAgICAgICAgICAgIFpJbmRleFV0aWxzLmNsZWFyKHRoaXMuY29udGFpbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHJlc3RvcmVBcHBlbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmRvY3VtZW50LmJvZHksIHRoaXMuY29udGFpbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25Db250YWluZXJEZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZ2V0IGFjY2VwdEJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm1hdGlvbj8uYWNjZXB0TGFiZWwgfHwgdGhpcy5jb25maWcuZ2V0VHJhbnNsYXRpb24oVHJhbnNsYXRpb25LZXlzLkFDQ0VQVCk7XG4gICAgfVxuXG4gICAgZ2V0IHJlamVjdEJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm1hdGlvbj8ucmVqZWN0TGFiZWwgfHwgdGhpcy5jb25maWcuZ2V0VHJhbnNsYXRpb24oVHJhbnNsYXRpb25LZXlzLlJFSkVDVCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZUFwcGVuZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbQ29uZmlybVBvcHVwLCBTaGFyZWRNb2R1bGVdLFxuICAgIGV4cG9ydHM6IFtDb25maXJtUG9wdXAsIFNoYXJlZE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlybVBvcHVwTW9kdWxlIHt9XG4iXX0=
647
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybXBvcHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpcm1wb3B1cC9jb25maXJtcG9wdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakcsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBRUgsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixlQUFlLEVBS2YsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUcsT0FBTyxFQUFxRCxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7O0lBMEI5Qyx3QkFBNkg7OztJQURqSSw2QkFBOEU7SUFDMUUsb0dBQThHOzs7O0lBQS9GLGNBQXlEO0lBQUEsQUFBekQsc0ZBQXlELDRF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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgQW5pbWF0aW9uRXZlbnQsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25EZXN0cm95LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhYnNvbHV0ZVBvc2l0aW9uLCBhZGRDbGFzcywgZmluZFNpbmdsZSwgZ2V0T2Zmc2V0LCBpc0lPUywgaXNUb3VjaERldmljZSB9IGZyb20gJ0BwcmltZXVpeC91dGlscyc7XG5pbXBvcnQgeyBDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2UsIE92ZXJsYXlTZXJ2aWNlLCBQcmltZVRlbXBsYXRlLCBTaGFyZWRNb2R1bGUsIFRyYW5zbGF0aW9uS2V5cyB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2Jhc2Vjb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgQ29ubmVjdGVkT3ZlcmxheVNjcm9sbEhhbmRsZXIgfSBmcm9tICdwcmltZW5nL2RvbSc7XG5pbXBvcnQgeyBOdWxsYWJsZSwgVm9pZExpc3RlbmVyIH0gZnJvbSAncHJpbWVuZy90cy1oZWxwZXJzJztcbmltcG9ydCB7IFpJbmRleFV0aWxzIH0gZnJvbSAncHJpbWVuZy91dGlscyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpcm1Qb3B1cFN0eWxlIH0gZnJvbSAnLi9zdHlsZS9jb25maXJtcG9wdXBzdHlsZSc7XG5cbi8qKlxuICogQ29uZmlybVBvcHVwIGRpc3BsYXlzIGEgY29uZmlybWF0aW9uIG92ZXJsYXkgZGlzcGxheWVkIHJlbGF0aXZlbHkgdG8gaXRzIHRhcmdldC5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1jb25maXJtUG9wdXAsIHAtY29uZmlybXBvcHVwLCBwLWNvbmZpcm0tcG9wdXAnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2hhcmVkTW9kdWxlLCBCdXR0b25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwidmlzaWJsZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCIncC1jb25maXJtcG9wdXAgcC1jb21wb25lbnQnXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJzdHlsZUNsYXNzXCJcbiAgICAgICAgICAgIHJvbGU9XCJhbGVydGRpYWxvZ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25PdmVybGF5Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICBbQGFuaW1hdGlvbl09XCJ7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICdvcGVuJyxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHsgc2hvd1RyYW5zaXRpb25QYXJhbXM6IHNob3dUcmFuc2l0aW9uT3B0aW9ucywgaGlkZVRyYW5zaXRpb25QYXJhbXM6IGhpZGVUcmFuc2l0aW9uT3B0aW9ucyB9XG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChAYW5pbWF0aW9uLnN0YXJ0KT1cIm9uQW5pbWF0aW9uU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoQGFuaW1hdGlvbi5kb25lKT1cIm9uQW5pbWF0aW9uRW5kKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGxlc3NUZW1wbGF0ZSB8fCBfaGVhZGxlc3NUZW1wbGF0ZTsgZWxzZSBub3RIZWFkbGVzc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkbGVzc1RlbXBsYXRlIHx8IF9oZWFkbGVzc1RlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29uZmlybWF0aW9uIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RIZWFkbGVzcz5cbiAgICAgICAgICAgICAgICA8ZGl2ICNjb250ZW50IGNsYXNzPVwicC1jb25maXJtcG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFRlbXBsYXRlIHx8IF9jb250ZW50VGVtcGxhdGU7IGVsc2Ugd2l0aG91dENvbnRlbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZSB8fCBfY29udGVudFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29uZmlybWF0aW9uIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjd2l0aG91dENvbnRlbnRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtuZ0NsYXNzXT1cIidwLWNvbmZpcm1wb3B1cC1pY29uJ1wiIFtjbGFzc109XCJjb25maXJtYXRpb24/Lmljb25cIiAqbmdJZj1cImNvbmZpcm1hdGlvbj8uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb25maXJtcG9wdXAtbWVzc2FnZVwiPnt7IGNvbmZpcm1hdGlvbj8ubWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1jb25maXJtcG9wdXAtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicmVqZWN0QnV0dG9uTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25SZWplY3QoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIncC1jb25maXJtcG9wdXAtcmVqZWN0LWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiY29uZmlybWF0aW9uPy5yZWplY3RCdXR0b25TdHlsZUNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cImNvbmZpcm1hdGlvbi5yZWplY3RCdXR0b25Qcm9wcz8uc2l6ZSB8fCAnc21hbGwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImNvbmZpcm1hdGlvbi5yZWplY3RCdXR0b25Qcm9wcz8udGV4dCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpcm1hdGlvbj8ucmVqZWN0VmlzaWJsZSAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZWplY3RCdXR0b25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uUHJvcHNdPVwiZ2V0UmVqZWN0QnV0dG9uUHJvcHMoKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjb25maXJtYXRpb24/LnJlamVjdEljb25cIiAqbmdJZj1cImNvbmZpcm1hdGlvbj8ucmVqZWN0SWNvbjsgZWxzZSByZWplY3RpY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWplY3RpY29uICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVqZWN0SWNvblRlbXBsYXRlIHx8IF9yZWplY3RJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImFjY2VwdEJ1dHRvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWNjZXB0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ3AtY29uZmlybXBvcHVwLWFjY2VwdC1idXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cImNvbmZpcm1hdGlvbj8uYWNjZXB0QnV0dG9uU3R5bGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCJjb25maXJtYXRpb24uYWNjZXB0QnV0dG9uUHJvcHM/LnNpemUgfHwgJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpcm1hdGlvbj8uYWNjZXB0VmlzaWJsZSAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY2NlcHRCdXR0b25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uUHJvcHNdPVwiZ2V0QWNjZXB0QnV0dG9uUHJvcHMoKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjb25maXJtYXRpb24/LmFjY2VwdEljb25cIiAqbmdJZj1cImNvbmZpcm1hdGlvbj8uYWNjZXB0SWNvbjsgZWxzZSBhY2NlcHRpY29udGVtcGxhdGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FjY2VwdGljb250ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImFjY2VwdEljb25UZW1wbGF0ZSB8fCBfYWNjZXB0SWNvblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdhbmltYXRpb24nLCBbXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAndm9pZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICdzY2FsZVkoMC44KScsXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdvcGVuJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLFxuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IG9wZW4nLCBhbmltYXRlKCd7e3Nob3dUcmFuc2l0aW9uUGFyYW1zfX0nKSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdvcGVuID0+IHZvaWQnLCBhbmltYXRlKCd7e2hpZGVUcmFuc2l0aW9uUGFyYW1zfX0nKSlcbiAgICAgICAgXSlcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbQ29uZmlybVBvcHVwU3R5bGVdXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpcm1Qb3B1cCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIGtleSB0byBtYXRjaCB0aGUga2V5IG9mIGNvbmZpcm0gb2JqZWN0LCBuZWNlc3NhcnkgdG8gdXNlIHdoZW4gY29tcG9uZW50IHRyZWUgaGFzIG11bHRpcGxlIGNvbmZpcm0gZGlhbG9ncy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IHRvIHJlY2VpdmUgdGhlIGZvY3VzIHdoZW4gdGhlIHBvcHVwIGdldHMgdmlzaWJsZSwgdmFsaWQgdmFsdWVzIGFyZSBcImFjY2VwdFwiLCBcInJlamVjdFwiLCBhbmQgXCJub25lXCIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZGVmYXVsdEZvY3VzOiBzdHJpbmcgPSAnYWNjZXB0JztcbiAgICAvKipcbiAgICAgKiBUcmFuc2l0aW9uIG9wdGlvbnMgb2YgdGhlIHNob3cgYW5pbWF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dUcmFuc2l0aW9uT3B0aW9uczogc3RyaW5nID0gJy4xMnMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSknO1xuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb24gb3B0aW9ucyBvZiB0aGUgaGlkZSBhbmltYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaGlkZVRyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnLjFzIGxpbmVhcic7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IG1hbmFnZSBsYXllcmluZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b1pJbmRleDogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogQmFzZSB6SW5kZXggdmFsdWUgdG8gdXNlIGluIGxheWVyaW5nLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGJhc2VaSW5kZXg6IG51bWJlciA9IDA7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBpZiB0aGUgY29tcG9uZW50IGlzIHZpc2libGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IHZpc2libGUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gICAgfVxuICAgIHNldCB2aXNpYmxlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNvbnRhaW5lcjogTnVsbGFibGU8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25maXJtYXRpb246IE51bGxhYmxlPENvbmZpcm1hdGlvbj47XG5cbiAgICBAQ29udGVudENoaWxkKCdjb250ZW50JywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgY29udGVudFRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2FjY2VwdGljb24nLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBhY2NlcHRJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQENvbnRlbnRDaGlsZCgncmVqZWN0aWNvbicsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIHJlamVjdEljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBAQ29udGVudENoaWxkKCdoZWFkbGVzcycsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIGhlYWRsZXNzVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgX2NvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9hY2NlcHRJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfcmVqZWN0SWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX2hlYWRsZXNzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfdmlzaWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIGRvY3VtZW50Q2xpY2tMaXN0ZW5lcjogVm9pZExpc3RlbmVyO1xuXG4gICAgZG9jdW1lbnRSZXNpemVMaXN0ZW5lcjogVm9pZExpc3RlbmVyO1xuXG4gICAgc2Nyb2xsSGFuZGxlcjogTnVsbGFibGU8Q29ubmVjdGVkT3ZlcmxheVNjcm9sbEhhbmRsZXI+O1xuXG4gICAgcHJpdmF0ZSB3aW5kb3c6IFdpbmRvdztcblxuICAgIF9jb21wb25lbnRTdHlsZSA9IGluamVjdChDb25maXJtUG9wdXBTdHlsZSk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwdWJsaWMgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgb3ZlcmxheVNlcnZpY2U6IE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwdWJsaWMgZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMud2luZG93ID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyBhcyBXaW5kb3c7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLnJlcXVpcmVDb25maXJtYXRpb24kLnN1YnNjcmliZSgoY29uZmlybWF0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbi5rZXkgPT09IHRoaXMua2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24gPSBjb25maXJtYXRpb247XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpcm1hdGlvbik7XG5cbiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBjb25maXJtYXRpb25ba2V5XTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbi5hY2NlcHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24uYWNjZXB0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmFjY2VwdEV2ZW50LnN1YnNjcmliZSh0aGlzLmNvbmZpcm1hdGlvbi5hY2NlcHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbi5yZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ucmVqZWN0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLnJlamVjdEV2ZW50LnN1YnNjcmliZSh0aGlzLmNvbmZpcm1hdGlvbi5yZWplY3QpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBDb250ZW50Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSkgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQ7XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzPy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29udGVudCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAncmVqZWN0aWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlamVjdEljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYWNjZXB0aWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FjY2VwdEljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnaGVhZGxlc3MnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkbGVzc1RlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wdGlvbihuYW1lOiBzdHJpbmcsIGs/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0gdGhpcyB8fCB0aGlzO1xuICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICBpZiAoaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2Vba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc291cmNlW25hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gICAgb25Fc2NhcGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbiAmJiB0aGlzLmNvbmZpcm1hdGlvbi5jbG9zZU9uRXNjYXBlKSB7XG4gICAgICAgICAgICB0aGlzLm9uUmVqZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ29wZW4nKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGV2ZW50LmVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgdGhpcy5jb250YWluZXIpO1xuICAgICAgICAgICAgdGhpcy5hbGlnbigpO1xuICAgICAgICAgICAgdGhpcy5iaW5kTGlzdGVuZXJzKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnRUb0ZvY3VzKCk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LnRvU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3ZvaWQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25Db250YWluZXJEZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRBY2NlcHRCdXR0b25Qcm9wcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uKCdhY2NlcHRCdXR0b25Qcm9wcycpO1xuICAgIH1cblxuICAgIGdldFJlamVjdEJ1dHRvblByb3BzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb24oJ3JlamVjdEJ1dHRvblByb3BzJyk7XG4gICAgfVxuXG4gICAgZ2V0RWxlbWVudFRvRm9jdXMoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5kZWZhdWx0Rm9jdXMpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FjY2VwdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxhbnk+ZmluZFNpbmdsZSh0aGlzLmNvbnRhaW5lciwgJy5wLWNvbmZpcm0tcG9wdXAtYWNjZXB0Jyk7XG5cbiAgICAgICAgICAgIGNhc2UgJ3JlamVjdCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxhbnk+ZmluZFNpbmdsZSh0aGlzLmNvbnRhaW5lciwgJy5wLWNvbmZpcm0tcG9wdXAtcmVqZWN0Jyk7XG5cbiAgICAgICAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWxpZ24oKSB7XG4gICAgICAgIGlmICh0aGlzLmF1dG9aSW5kZXgpIHtcbiAgICAgICAgICAgIFpJbmRleFV0aWxzLnNldCgnb3ZlcmxheScsIHRoaXMuY29udGFpbmVyLCB0aGlzLmNvbmZpZy56SW5kZXgub3ZlcmxheSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuY29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYWJzb2x1dGVQb3NpdGlvbih0aGlzLmNvbnRhaW5lciwgdGhpcy5jb25maXJtYXRpb24/LnRhcmdldCBhcyBhbnksIGZhbHNlKTtcblxuICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSA8YW55PmdldE9mZnNldCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIGNvbnN0IHRhcmdldE9mZnNldCA9IDxhbnk+Z2V0T2Zmc2V0KHRoaXMuY29uZmlybWF0aW9uPy50YXJnZXQgYXMgYW55KTtcbiAgICAgICAgbGV0IGFycm93TGVmdCA9IDA7XG5cbiAgICAgICAgaWYgKGNvbnRhaW5lck9mZnNldC5sZWZ0IDwgdGFyZ2V0T2Zmc2V0LmxlZnQpIHtcbiAgICAgICAgICAgIGFycm93TGVmdCA9IHRhcmdldE9mZnNldC5sZWZ0IC0gY29udGFpbmVyT2Zmc2V0LmxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuY29udGFpbmVyIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1vdmVybGF5QXJyb3dMZWZ0JywgYCR7YXJyb3dMZWZ0fXB4YCk7XG5cbiAgICAgICAgaWYgKGNvbnRhaW5lck9mZnNldC50b3AgPCB0YXJnZXRPZmZzZXQudG9wKSB7XG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmNvbnRhaW5lciwgJ3AtY29uZmlybS1wb3B1cC1mbGlwcGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlKCkge1xuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbkFjY2VwdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uPy5hY2NlcHRFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24uYWNjZXB0RXZlbnQuZW1pdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25SZWplY3QoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbj8ucmVqZWN0RXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLnJlamVjdEV2ZW50LmVtaXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cblxuICAgIG9uT3ZlcmxheUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYmluZExpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgLypcbiAgICAgICAgICogQ2FsbGVkIGluc2lkZSBgc2V0VGltZW91dGAgdG8gYXZvaWQgbGlzdGVuaW5nIHRvIHRoZSBjbGljayBldmVudCB0aGF0IGFwcGVhcnMgd2hlbiBgY29uZmlybWAgaXMgZmlyc3QgY2FsbGVkKGJ1YmJsaW5nKS5cbiAgICAgICAgICogTmVlZCB3YWl0IHdoZW4gYnViYmxpbmcgZXZlbnQgdXAgYW5kIGhhbmcgdGhlIGhhbmRsZXIgb24gdGhlIG5leHQgdGljay5cbiAgICAgICAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGV2ZW50VGFyZ2V0IGFuZCBjb25maXJtYXRpb24udGFyZ2V0IGRvIG5vdCBtYXRjaCB3aGVuIHRoZSBgY29uZmlybWAgbWV0aG9kIGlzIGNhbGxlZC5cbiAgICAgICAgICovXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kRG9jdW1lbnRDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRTY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1bmJpbmRMaXN0ZW5lcnMoKSB7XG4gICAgICAgIHRoaXMudW5iaW5kRG9jdW1lbnRDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMudW5iaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLnVuYmluZFNjcm9sbExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgYmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikge1xuICAgICAgICAgICAgbGV0IGRvY3VtZW50RXZlbnQgPSBpc0lPUygpID8gJ3RvdWNoc3RhcnQnIDogJ2NsaWNrJztcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50VGFyZ2V0OiBhbnkgPSB0aGlzLmVsID8gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm93bmVyRG9jdW1lbnQgOiB0aGlzLmRvY3VtZW50O1xuXG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGRvY3VtZW50VGFyZ2V0LCBkb2N1bWVudEV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maXJtYXRpb24gJiYgdGhpcy5jb25maXJtYXRpb24uZGlzbWlzc2FibGVNYXNrICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IDxIVE1MRWxlbWVudD50aGlzLmNvbmZpcm1hdGlvbi50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lciAhPT0gZXZlbnQudGFyZ2V0ICYmICF0aGlzLmNvbnRhaW5lcj8uY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiB0YXJnZXRFbGVtZW50ICE9PSBldmVudC50YXJnZXQgJiYgIXRhcmdldEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuYmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25XaW5kb3dSZXNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgIWlzVG91Y2hEZXZpY2UoKSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMud2luZG93LCAncmVzaXplJywgdGhpcy5vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJpbmRTY3JvbGxMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNjcm9sbEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsSGFuZGxlciA9IG5ldyBDb25uZWN0ZWRPdmVybGF5U2Nyb2xsSGFuZGxlcih0aGlzLmNvbmZpcm1hdGlvbj8udGFyZ2V0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2Nyb2xsSGFuZGxlci5iaW5kU2Nyb2xsTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICB1bmJpbmRTY3JvbGxMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyLnVuYmluZFNjcm9sbExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1bnN1YnNjcmliZUNvbmZpcm1hdGlvblN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uLmFjY2VwdEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24uYWNjZXB0RXZlbnQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlybWF0aW9uLnJlamVjdEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ucmVqZWN0RXZlbnQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29udGFpbmVyRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bmJpbmRMaXN0ZW5lcnMoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUNvbmZpcm1hdGlvblN1YnNjcmlwdGlvbnMoKTtcblxuICAgICAgICBpZiAodGhpcy5hdXRvWkluZGV4KSB7XG4gICAgICAgICAgICBaSW5kZXhVdGlscy5jbGVhcih0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXN0b3JlQXBwZW5kKCkge1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCB0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ29udGFpbmVyRGVzdHJveSgpO1xuICAgIH1cblxuICAgIGdldCBhY2NlcHRCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtYXRpb24/LmFjY2VwdExhYmVsIHx8IHRoaXMuY29uZmlnLmdldFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uS2V5cy5BQ0NFUFQpO1xuICAgIH1cblxuICAgIGdldCByZWplY3RCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtYXRpb24/LnJlamVjdExhYmVsIHx8IHRoaXMuY29uZmlnLmdldFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uS2V5cy5SRUpFQ1QpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnJlc3RvcmVBcHBlbmQoKTtcblxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbmZpcm1Qb3B1cCwgU2hhcmVkTW9kdWxlXSxcbiAgICBleHBvcnRzOiBbQ29uZmlybVBvcHVwLCBTaGFyZWRNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpcm1Qb3B1cE1vZHVsZSB7fVxuIl19