@simpleangularcontrols/sac-common 16.0.0-rc.22 → 16.0.0-rc.23

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 (388) hide show
  1. package/common/basedatetimecontrol.d.ts +45 -18
  2. package/common/basedatetimecontrol.d.ts.map +1 -1
  3. package/common/baseinputcontrol.d.ts +10 -8
  4. package/common/baseinputcontrol.d.ts.map +1 -1
  5. package/common/baselistcontrol.d.ts +16 -16
  6. package/common/baselistcontrol.d.ts.map +1 -1
  7. package/common/basemodelcontrol.d.ts +60 -44
  8. package/common/basemodelcontrol.d.ts.map +1 -1
  9. package/common/baseselectcontrol.d.ts +6 -6
  10. package/common/baseselectcontrol.d.ts.map +1 -1
  11. package/common/baseuploadcontrol.d.ts +78 -58
  12. package/common/baseuploadcontrol.d.ts.map +1 -1
  13. package/components/browser/browser.d.ts +86 -89
  14. package/components/browser/browser.d.ts.map +1 -1
  15. package/components/browser/models/browserfile.d.ts +6 -6
  16. package/components/browser/models/browserfile.d.ts.map +1 -1
  17. package/components/browser/models/browserfiledeleterequest.d.ts +7 -7
  18. package/components/browser/models/browserfiledeleterequest.d.ts.map +1 -1
  19. package/components/browser/models/browserfilerenamerequest.d.ts +10 -10
  20. package/components/browser/models/browserfilerenamerequest.d.ts.map +1 -1
  21. package/components/browser/models/browserfileresponse.d.ts +2 -2
  22. package/components/browser/models/browserfileresponse.d.ts.map +1 -1
  23. package/components/browser/models/browserfilesaverequest.d.ts +7 -7
  24. package/components/browser/models/browserfilesaverequest.d.ts.map +1 -1
  25. package/components/browser/models/browsernode.d.ts +13 -13
  26. package/components/browser/models/browsernode.d.ts.map +1 -1
  27. package/components/browser/models/browsernodedeleterequest.d.ts +6 -6
  28. package/components/browser/models/browsernodedeleterequest.d.ts.map +1 -1
  29. package/components/browser/models/browsernodenewrequest.d.ts +7 -7
  30. package/components/browser/models/browsernodenewrequest.d.ts.map +1 -1
  31. package/components/browser/models/browsernoderenamerequest.d.ts +7 -7
  32. package/components/browser/models/browsernoderenamerequest.d.ts.map +1 -1
  33. package/components/browser/models/browsernoderequest.d.ts +7 -7
  34. package/components/browser/models/browsernoderequest.d.ts.map +1 -1
  35. package/components/browser/models/browsernoderesponse.d.ts +1 -1
  36. package/components/browser/models/browsernoderesponse.d.ts.map +1 -1
  37. package/controls/buttons/button.d.ts +25 -19
  38. package/controls/buttons/button.d.ts.map +1 -1
  39. package/controls/checkbox/checkbox.d.ts +4 -4
  40. package/controls/checkbox/checkbox.d.ts.map +1 -1
  41. package/controls/checkbox/radiobutton.d.ts +19 -13
  42. package/controls/checkbox/radiobutton.d.ts.map +1 -1
  43. package/controls/checkbox/radiobuttons.d.ts +13 -10
  44. package/controls/checkbox/radiobuttons.d.ts.map +1 -1
  45. package/controls/confirm/confirm.button.d.ts +3 -3
  46. package/controls/confirm/confirm.button.d.ts.map +1 -1
  47. package/controls/confirm/confirm.d.ts +24 -23
  48. package/controls/confirm/confirm.d.ts.map +1 -1
  49. package/controls/confirm/confirm.service.d.ts +20 -20
  50. package/controls/confirm/confirm.service.d.ts.map +1 -1
  51. package/controls/contextmenu/contextmenu.d.ts +33 -27
  52. package/controls/contextmenu/contextmenu.d.ts.map +1 -1
  53. package/controls/contextmenu/contextmenu.interface.d.ts +6 -0
  54. package/controls/contextmenu/contextmenu.interface.d.ts.map +1 -1
  55. package/controls/contextmenu/contextmenuanchor.d.ts +4 -4
  56. package/controls/contextmenu/contextmenuanchor.d.ts.map +1 -1
  57. package/controls/contextmenu/contextmenucontainer.d.ts +4 -4
  58. package/controls/contextmenu/contextmenucontainer.d.ts.map +1 -1
  59. package/controls/contextmenu/contextmenuitembutton.d.ts +12 -12
  60. package/controls/contextmenu/contextmenuitembutton.d.ts.map +1 -1
  61. package/controls/datetime/date.d.ts +11 -11
  62. package/controls/datetime/date.d.ts.map +1 -1
  63. package/controls/datetime/dateselector.d.ts +47 -40
  64. package/controls/datetime/dateselector.d.ts.map +1 -1
  65. package/controls/datetime/datetime.d.ts +15 -14
  66. package/controls/datetime/datetime.d.ts.map +1 -1
  67. package/controls/datetime/time.d.ts +22 -12
  68. package/controls/datetime/time.d.ts.map +1 -1
  69. package/controls/dialog/dialog.d.ts +29 -23
  70. package/controls/dialog/dialog.d.ts.map +1 -1
  71. package/controls/form/form.d.ts +22 -17
  72. package/controls/form/form.d.ts.map +1 -1
  73. package/controls/grid/grid.d.ts +1 -0
  74. package/controls/grid/grid.d.ts.map +1 -1
  75. package/controls/grid/gridbutton.d.ts +1 -0
  76. package/controls/grid/gridbutton.d.ts.map +1 -1
  77. package/controls/grid/gridcolumn.d.ts +10 -6
  78. package/controls/grid/gridcolumn.d.ts.map +1 -1
  79. package/controls/grid/gridcolumnaction.d.ts +2 -2
  80. package/controls/grid/gridcolumnaction.d.ts.map +1 -1
  81. package/controls/grid/gridcolumnbase.d.ts +8 -3
  82. package/controls/grid/gridcolumnbase.d.ts.map +1 -1
  83. package/controls/grid/model.d.ts +22 -19
  84. package/controls/grid/model.d.ts.map +1 -1
  85. package/controls/grid/paging.d.ts +2 -3
  86. package/controls/grid/paging.d.ts.map +1 -1
  87. package/controls/input/input.d.ts +7 -7
  88. package/controls/input/inputarea.d.ts +8 -6
  89. package/controls/input/inputarea.d.ts.map +1 -1
  90. package/controls/input/inputcurrency.d.ts +4 -1
  91. package/controls/input/inputcurrency.d.ts.map +1 -1
  92. package/controls/input/inputdecimal.d.ts +15 -15
  93. package/controls/input/inputdecimal.d.ts.map +1 -1
  94. package/controls/input/inputemail.d.ts +5 -5
  95. package/controls/input/inputemail.d.ts.map +1 -1
  96. package/controls/input/inputinteger.d.ts +15 -15
  97. package/controls/input/inputinteger.d.ts.map +1 -1
  98. package/controls/input/inputpassword.d.ts +3 -3
  99. package/controls/input/inputpassword.d.ts.map +1 -1
  100. package/controls/input/inputsearch.d.ts +11 -8
  101. package/controls/input/inputsearch.d.ts.map +1 -1
  102. package/controls/layout/formlayout.d.ts +9 -6
  103. package/controls/layout/formlayout.d.ts.map +1 -1
  104. package/controls/list/buildvaluestring.d.ts +2 -2
  105. package/controls/list/buildvaluestring.d.ts.map +1 -1
  106. package/controls/list/dropdown.d.ts +23 -22
  107. package/controls/list/dropdown.d.ts.map +1 -1
  108. package/controls/list/dropdownoptions.d.ts +11 -11
  109. package/controls/list/dropdownoptions.d.ts.map +1 -1
  110. package/controls/list/listbox.d.ts +25 -23
  111. package/controls/list/listbox.d.ts.map +1 -1
  112. package/controls/multilanguage/multilanguageinput.d.ts +27 -27
  113. package/controls/multilanguage/multilanguageinput.d.ts.map +1 -1
  114. package/controls/multilanguage/multilanguageinputarea.d.ts +27 -27
  115. package/controls/multilanguage/multilanguageinputarea.d.ts.map +1 -1
  116. package/controls/static/formcontainer.d.ts +8 -8
  117. package/controls/static/formcontainer.d.ts.map +1 -1
  118. package/controls/static/staticlabel.d.ts +6 -6
  119. package/controls/static/staticlabel.d.ts.map +1 -1
  120. package/controls/tabs/tab.d.ts +2 -2
  121. package/controls/tabs/tabitem.d.ts +9 -9
  122. package/controls/tabs/tabitem.d.ts.map +1 -1
  123. package/controls/tinymce/tinymce.d.ts +37 -37
  124. package/controls/tinymce/tinymce.d.ts.map +1 -1
  125. package/controls/tinymce/tinymcedialogsettings.d.ts +11 -11
  126. package/controls/tinymce/tinymcedialogsettings.d.ts.map +1 -1
  127. package/controls/tinymce/tinymcedialogsettingsmeta.d.ts +2 -2
  128. package/controls/tinymce/tinymcedialogsettingsmeta.d.ts.map +1 -1
  129. package/controls/tinymce/tinymceinstance.d.ts +2 -2
  130. package/controls/tinymce/tinymceinstance.d.ts.map +1 -1
  131. package/controls/tooltip/tooltip.d.ts +10 -5
  132. package/controls/tooltip/tooltip.d.ts.map +1 -1
  133. package/controls/treeview/treeview.d.ts +50 -5
  134. package/controls/treeview/treeview.d.ts.map +1 -1
  135. package/controls/upload/dropzonemultiple.d.ts +16 -16
  136. package/controls/upload/dropzonemultiple.d.ts.map +1 -1
  137. package/controls/upload/dropzonesingle.d.ts +11 -11
  138. package/controls/upload/uploadmultiple.d.ts +12 -12
  139. package/controls/upload/uploadmultiple.d.ts.map +1 -1
  140. package/controls/upload/uploadsingle.d.ts +7 -7
  141. package/controls/upload/uploadsingle.d.ts.map +1 -1
  142. package/controls/validation/validationsummary.d.ts +12 -11
  143. package/controls/validation/validationsummary.d.ts.map +1 -1
  144. package/controls/wizard/wizard.d.ts +43 -36
  145. package/controls/wizard/wizard.d.ts.map +1 -1
  146. package/controls/wizard/wizarditem.d.ts +9 -9
  147. package/controls/wizard/wizarditem.d.ts.map +1 -1
  148. package/enums/ButtonRoleType.d.ts +26 -1
  149. package/enums/ButtonRoleType.d.ts.map +1 -1
  150. package/enums/ControlHeight.d.ts +1 -1
  151. package/enums/ControlHeight.d.ts.map +1 -1
  152. package/enums/IconType.d.ts +1 -1
  153. package/enums/IconType.d.ts.map +1 -1
  154. package/esm2022/common/basedatetimecontrol.mjs +59 -38
  155. package/esm2022/common/baseinputcontrol.mjs +16 -14
  156. package/esm2022/common/baselistcontrol.mjs +20 -18
  157. package/esm2022/common/basemodelcontrol.mjs +82 -71
  158. package/esm2022/common/baseselectcontrol.mjs +10 -9
  159. package/esm2022/common/baseuploadcontrol.mjs +74 -58
  160. package/esm2022/components/browser/browser.mjs +88 -90
  161. package/esm2022/components/browser/models/browserfile.mjs +3 -3
  162. package/esm2022/components/browser/models/browserfiledeleterequest.mjs +9 -7
  163. package/esm2022/components/browser/models/browserfilerenamerequest.mjs +9 -7
  164. package/esm2022/components/browser/models/browserfileresponse.mjs +3 -3
  165. package/esm2022/components/browser/models/browserfilesaverequest.mjs +8 -6
  166. package/esm2022/components/browser/models/browsernode.mjs +3 -3
  167. package/esm2022/components/browser/models/browsernodedeleterequest.mjs +9 -7
  168. package/esm2022/components/browser/models/browsernodenewrequest.mjs +9 -7
  169. package/esm2022/components/browser/models/browsernoderenamerequest.mjs +9 -7
  170. package/esm2022/components/browser/models/browsernoderequest.mjs +9 -7
  171. package/esm2022/components/browser/models/browsernoderesponse.mjs +3 -3
  172. package/esm2022/controls/buttons/button.mjs +29 -25
  173. package/esm2022/controls/checkbox/checkbox.mjs +7 -7
  174. package/esm2022/controls/checkbox/radiobutton.mjs +23 -18
  175. package/esm2022/controls/checkbox/radiobuttons.mjs +17 -14
  176. package/esm2022/controls/confirm/confirm.button.mjs +6 -6
  177. package/esm2022/controls/confirm/confirm.mjs +27 -28
  178. package/esm2022/controls/confirm/confirm.service.mjs +24 -24
  179. package/esm2022/controls/contextmenu/contextmenu.interface.mjs +3 -3
  180. package/esm2022/controls/contextmenu/contextmenu.mjs +32 -27
  181. package/esm2022/controls/contextmenu/contextmenuanchor.mjs +7 -7
  182. package/esm2022/controls/contextmenu/contextmenucontainer.mjs +7 -7
  183. package/esm2022/controls/contextmenu/contextmenuitem.mjs +4 -4
  184. package/esm2022/controls/contextmenu/contextmenuitembutton.mjs +13 -13
  185. package/esm2022/controls/datetime/date.mjs +16 -16
  186. package/esm2022/controls/datetime/dateselector.mjs +95 -94
  187. package/esm2022/controls/datetime/datetime.mjs +20 -19
  188. package/esm2022/controls/datetime/time.mjs +27 -17
  189. package/esm2022/controls/dialog/dialog.mjs +41 -37
  190. package/esm2022/controls/form/form.mjs +22 -19
  191. package/esm2022/controls/grid/grid.mjs +5 -4
  192. package/esm2022/controls/grid/gridbutton.mjs +5 -4
  193. package/esm2022/controls/grid/gridcolumn.mjs +13 -9
  194. package/esm2022/controls/grid/gridcolumnaction.mjs +6 -6
  195. package/esm2022/controls/grid/gridcolumnbase.mjs +12 -7
  196. package/esm2022/controls/grid/gridimage.mjs +3 -3
  197. package/esm2022/controls/grid/model.mjs +23 -21
  198. package/esm2022/controls/grid/paging.mjs +9 -10
  199. package/esm2022/controls/input/input.mjs +11 -11
  200. package/esm2022/controls/input/inputarea.mjs +12 -10
  201. package/esm2022/controls/input/inputcurrency.mjs +9 -7
  202. package/esm2022/controls/input/inputdecimal.mjs +22 -22
  203. package/esm2022/controls/input/inputemail.mjs +9 -9
  204. package/esm2022/controls/input/inputinteger.mjs +21 -21
  205. package/esm2022/controls/input/inputpassword.mjs +7 -7
  206. package/esm2022/controls/input/inputsearch.mjs +15 -13
  207. package/esm2022/controls/layout/formlayout.mjs +16 -10
  208. package/esm2022/controls/list/buildvaluestring.mjs +10 -8
  209. package/esm2022/controls/list/dropdown.mjs +31 -30
  210. package/esm2022/controls/list/dropdownoptions.mjs +26 -19
  211. package/esm2022/controls/list/listbox.mjs +32 -30
  212. package/esm2022/controls/multilanguage/multilanguageinput.mjs +33 -33
  213. package/esm2022/controls/multilanguage/multilanguageinputarea.mjs +34 -34
  214. package/esm2022/controls/static/formcontainer.mjs +13 -13
  215. package/esm2022/controls/static/staticlabel.mjs +15 -12
  216. package/esm2022/controls/tabs/tab.mjs +5 -5
  217. package/esm2022/controls/tabs/tabitem.mjs +9 -8
  218. package/esm2022/controls/tinymce/tinymce.mjs +38 -38
  219. package/esm2022/controls/tinymce/tinymcedialogsettings.mjs +9 -7
  220. package/esm2022/controls/tinymce/tinymcedialogsettingsmeta.mjs +3 -5
  221. package/esm2022/controls/tinymce/tinymceinstance.mjs +3 -3
  222. package/esm2022/controls/tooltip/tooltip.mjs +16 -11
  223. package/esm2022/controls/treeview/treeview.mjs +47 -11
  224. package/esm2022/controls/upload/dropzonemultiple.mjs +21 -21
  225. package/esm2022/controls/upload/dropzonesingle.mjs +15 -15
  226. package/esm2022/controls/upload/uploadmultiple.mjs +17 -17
  227. package/esm2022/controls/upload/uploadsingle.mjs +11 -11
  228. package/esm2022/controls/validation/validationsummary.mjs +17 -16
  229. package/esm2022/controls/wizard/wizard.mjs +43 -33
  230. package/esm2022/controls/wizard/wizarditem.mjs +8 -8
  231. package/esm2022/enums/ButtonRoleType.mjs +3 -3
  232. package/esm2022/enums/ControlHeight.mjs +4 -4
  233. package/esm2022/enums/IconType.mjs +4 -4
  234. package/esm2022/interfaces/ISacConfigurationService.mjs +3 -3
  235. package/esm2022/interfaces/ISacFileBrowserService.mjs +3 -3
  236. package/esm2022/interfaces/ISacLabelSizes.mjs +3 -3
  237. package/esm2022/interfaces/ISacLanguageService.mjs +3 -3
  238. package/esm2022/interfaces/ISacLocalisationService.mjs +3 -3
  239. package/esm2022/interfaces/ISacUploadEventCompleteState.mjs +3 -3
  240. package/esm2022/interfaces/ISacValidationKeyService.mjs +3 -3
  241. package/esm2022/interfaces/iabstractcontrollabel.mjs +3 -3
  242. package/esm2022/interfaces/iconfirmcomponent.mjs +3 -3
  243. package/esm2022/interfaces/idatetimecontrol.mjs +3 -3
  244. package/esm2022/interfaces/iuploadcontrol.mjs +3 -3
  245. package/esm2022/interfaces/treeviewaction.interface.mjs +3 -3
  246. package/esm2022/models/languagemodel.mjs +8 -6
  247. package/esm2022/public_api.mjs +4 -4
  248. package/esm2022/services/index.mjs +3 -3
  249. package/esm2022/services/sac-configuration.service.mjs +13 -11
  250. package/esm2022/services/sac-filebrowser.service.mjs +66 -52
  251. package/esm2022/services/sac-icon.service.mjs +5 -5
  252. package/esm2022/services/sac-language.service.mjs +11 -7
  253. package/esm2022/services/sac-localisation.service.mjs +15 -11
  254. package/esm2022/services/sac-validationkey.service.mjs +108 -6
  255. package/esm2022/utilities/convertion.mjs +10 -8
  256. package/esm2022/utilities/datatypes.mjs +8 -6
  257. package/esm2022/utilities/enums.mjs +4 -10
  258. package/esm2022/utilities/guid.mjs +8 -8
  259. package/esm2022/utilities/interpolation.mjs +21 -14
  260. package/esm2022/utilities/popuphelper.mjs +52 -32
  261. package/esm2022/utilities/positioncalculator.mjs +61 -0
  262. package/esm2022/utilities/positionelements.mjs +32 -0
  263. package/esm2022/utilities/testingattribute.pipe.mjs +19 -6
  264. package/esm2022/validation/email.validator.mjs +11 -3
  265. package/esm2022/validation/equals.validator.mjs +12 -3
  266. package/esm2022/validation/index.mjs +3 -3
  267. package/esm2022/validation/invaliddate.validator.mjs +11 -3
  268. package/esm2022/validation/isDateValid.mjs +12 -10
  269. package/esm2022/validation/maxdate.validator.mjs +13 -4
  270. package/esm2022/validation/maxtime.validator.mjs +13 -4
  271. package/esm2022/validation/maxvalue.validator.mjs +12 -3
  272. package/esm2022/validation/mindate.validator.mjs +13 -4
  273. package/esm2022/validation/minfiles.validator.mjs +13 -4
  274. package/esm2022/validation/mintextlength.validator.mjs +11 -4
  275. package/esm2022/validation/mintime.validator.mjs +13 -4
  276. package/esm2022/validation/minvalue.validator.mjs +12 -3
  277. package/esm2022/validation/multilanguagerequired.validator.mjs +12 -3
  278. package/esm2022/validation/multilanguagerequiredany.validator.mjs +12 -3
  279. package/esm2022/validation/notequals.validator.mjs +12 -3
  280. package/esm2022/validation/pattern.validator.mjs +12 -3
  281. package/esm2022/validation/required.validator.mjs +11 -3
  282. package/esm2022/validation/validation.mjs +86 -102
  283. package/esm2022/validation/validationerrorcreator.mjs +13 -3
  284. package/esm2022/validation/validationerroritem.mjs +14 -12
  285. package/fesm2022/simpleangularcontrols-sac-common.mjs +2693 -2164
  286. package/fesm2022/simpleangularcontrols-sac-common.mjs.map +1 -1
  287. package/interfaces/ISacConfigurationService.d.ts +9 -1
  288. package/interfaces/ISacConfigurationService.d.ts.map +1 -1
  289. package/interfaces/ISacFileBrowserService.d.ts +43 -43
  290. package/interfaces/ISacFileBrowserService.d.ts.map +1 -1
  291. package/interfaces/ISacLabelSizes.d.ts +9 -6
  292. package/interfaces/ISacLabelSizes.d.ts.map +1 -1
  293. package/interfaces/ISacLanguageService.d.ts +3 -3
  294. package/interfaces/ISacLanguageService.d.ts.map +1 -1
  295. package/interfaces/ISacLocalisationService.d.ts +2 -2
  296. package/interfaces/ISacLocalisationService.d.ts.map +1 -1
  297. package/interfaces/ISacUploadEventCompleteState.d.ts +6 -0
  298. package/interfaces/ISacUploadEventCompleteState.d.ts.map +1 -1
  299. package/interfaces/iabstractcontrollabel.d.ts +4 -1
  300. package/interfaces/iabstractcontrollabel.d.ts.map +1 -1
  301. package/interfaces/iconfirmcomponent.d.ts +6 -6
  302. package/interfaces/iconfirmcomponent.d.ts.map +1 -1
  303. package/interfaces/idatetimecontrol.d.ts +10 -1
  304. package/interfaces/idatetimecontrol.d.ts.map +1 -1
  305. package/interfaces/iuploadcontrol.d.ts.map +1 -1
  306. package/interfaces/treeviewaction.interface.d.ts +9 -0
  307. package/interfaces/treeviewaction.interface.d.ts.map +1 -1
  308. package/models/languagemodel.d.ts +9 -9
  309. package/models/languagemodel.d.ts.map +1 -1
  310. package/package.json +1 -1
  311. package/public_api.d.ts +2 -1
  312. package/public_api.d.ts.map +1 -1
  313. package/services/index.d.ts +3 -3
  314. package/services/index.d.ts.map +1 -1
  315. package/services/sac-configuration.service.d.ts +8 -0
  316. package/services/sac-configuration.service.d.ts.map +1 -1
  317. package/services/sac-filebrowser.service.d.ts +97 -89
  318. package/services/sac-filebrowser.service.d.ts.map +1 -1
  319. package/services/sac-language.service.d.ts +2 -2
  320. package/services/sac-language.service.d.ts.map +1 -1
  321. package/services/sac-localisation.service.d.ts +11 -7
  322. package/services/sac-localisation.service.d.ts.map +1 -1
  323. package/services/sac-validationkey.service.d.ts +152 -5
  324. package/services/sac-validationkey.service.d.ts.map +1 -1
  325. package/simpleangularcontrols-sac-common-16.0.0-rc.23.tgz +0 -0
  326. package/utilities/convertion.d.ts +4 -4
  327. package/utilities/convertion.d.ts.map +1 -1
  328. package/utilities/datatypes.d.ts +3 -3
  329. package/utilities/datatypes.d.ts.map +1 -1
  330. package/utilities/enums.d.ts +8 -1
  331. package/utilities/enums.d.ts.map +1 -1
  332. package/utilities/guid.d.ts +1 -1
  333. package/utilities/guid.d.ts.map +1 -1
  334. package/utilities/interpolation.d.ts +9 -8
  335. package/utilities/interpolation.d.ts.map +1 -1
  336. package/utilities/popuphelper.d.ts +47 -10
  337. package/utilities/popuphelper.d.ts.map +1 -1
  338. package/utilities/positioncalculator.d.ts +83 -0
  339. package/utilities/positioncalculator.d.ts.map +1 -0
  340. package/utilities/positionelements.d.ts +31 -0
  341. package/utilities/positionelements.d.ts.map +1 -0
  342. package/utilities/testingattribute.pipe.d.ts +16 -1
  343. package/utilities/testingattribute.pipe.d.ts.map +1 -1
  344. package/validation/email.validator.d.ts +7 -0
  345. package/validation/email.validator.d.ts.map +1 -1
  346. package/validation/equals.validator.d.ts +8 -0
  347. package/validation/equals.validator.d.ts.map +1 -1
  348. package/validation/index.d.ts.map +1 -1
  349. package/validation/invaliddate.validator.d.ts +7 -0
  350. package/validation/invaliddate.validator.d.ts.map +1 -1
  351. package/validation/isDateValid.d.ts +5 -2
  352. package/validation/isDateValid.d.ts.map +1 -1
  353. package/validation/maxdate.validator.d.ts +8 -0
  354. package/validation/maxdate.validator.d.ts.map +1 -1
  355. package/validation/maxtime.validator.d.ts +8 -0
  356. package/validation/maxtime.validator.d.ts.map +1 -1
  357. package/validation/maxvalue.validator.d.ts +8 -0
  358. package/validation/maxvalue.validator.d.ts.map +1 -1
  359. package/validation/mindate.validator.d.ts +8 -0
  360. package/validation/mindate.validator.d.ts.map +1 -1
  361. package/validation/minfiles.validator.d.ts +8 -0
  362. package/validation/minfiles.validator.d.ts.map +1 -1
  363. package/validation/mintextlength.validator.d.ts +8 -0
  364. package/validation/mintextlength.validator.d.ts.map +1 -1
  365. package/validation/mintime.validator.d.ts +8 -0
  366. package/validation/mintime.validator.d.ts.map +1 -1
  367. package/validation/minvalue.validator.d.ts +8 -0
  368. package/validation/minvalue.validator.d.ts.map +1 -1
  369. package/validation/multilanguagerequired.validator.d.ts +9 -1
  370. package/validation/multilanguagerequired.validator.d.ts.map +1 -1
  371. package/validation/multilanguagerequiredany.validator.d.ts +9 -1
  372. package/validation/multilanguagerequiredany.validator.d.ts.map +1 -1
  373. package/validation/notequals.validator.d.ts +8 -0
  374. package/validation/notequals.validator.d.ts.map +1 -1
  375. package/validation/pattern.validator.d.ts +8 -0
  376. package/validation/pattern.validator.d.ts.map +1 -1
  377. package/validation/required.validator.d.ts +7 -0
  378. package/validation/required.validator.d.ts.map +1 -1
  379. package/validation/validation.d.ts +83 -99
  380. package/validation/validation.d.ts.map +1 -1
  381. package/validation/validationerrorcreator.d.ts +9 -0
  382. package/validation/validationerrorcreator.d.ts.map +1 -1
  383. package/validation/validationerroritem.d.ts +16 -16
  384. package/validation/validationerroritem.d.ts.map +1 -1
  385. package/esm2022/utilities/positioning.mjs +0 -58
  386. package/simpleangularcontrols-sac-common-16.0.0-rc.22.tgz +0 -0
  387. package/utilities/positioning.d.ts +0 -83
  388. package/utilities/positioning.d.ts.map +0 -1
@@ -1,33 +1,32 @@
1
- function cov_13aj6impkv(){var path="/home/runner/work/simpleangularcontrols/simpleangularcontrols/ch.jnetwork.sac-controls/dist/sac-common/esm2022/components/browser/browser.mjs";var hash="e7be3636dfd16bdefffda51c29c8cf591c6b9b90";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/runner/work/simpleangularcontrols/simpleangularcontrols/ch.jnetwork.sac-controls/dist/sac-common/esm2022/components/browser/browser.mjs",statementMap:{"0":{start:{line:22,column:8},end:{line:22,column:35}},"1":{start:{line:27,column:8},end:{line:27,column:31}},"2":{start:{line:31,column:8},end:{line:31,column:36}},"3":{start:{line:35,column:8},end:{line:35,column:36}},"4":{start:{line:39,column:8},end:{line:39,column:36}},"5":{start:{line:43,column:8},end:{line:43,column:38}},"6":{start:{line:47,column:8},end:{line:47,column:38}},"7":{start:{line:51,column:8},end:{line:51,column:38}},"8":{start:{line:55,column:8},end:{line:55,column:39}},"9":{start:{line:59,column:8},end:{line:67,column:10}},"10":{start:{line:71,column:8},end:{line:71,column:37}},"11":{start:{line:75,column:8},end:{line:75,column:33}},"12":{start:{line:79,column:8},end:{line:79,column:26}},"13":{start:{line:80,column:8},end:{line:80,column:113}},"14":{start:{line:81,column:8},end:{line:81,column:113}},"15":{start:{line:82,column:8},end:{line:82,column:134}},"16":{start:{line:83,column:8},end:{line:83,column:86}},"17":{start:{line:91,column:29},end:{line:91,column:74}},"18":{start:{line:92,column:8},end:{line:94,column:9}},"19":{start:{line:93,column:12},end:{line:93,column:42}},"20":{start:{line:95,column:8},end:{line:95,column:32}},"21":{start:{line:102,column:8},end:{line:102,column:59}},"22":{start:{line:109,column:8},end:{line:109,column:57}},"23":{start:{line:116,column:8},end:{line:116,column:65}},"24":{start:{line:123,column:8},end:{line:123,column:64}},"25":{start:{line:130,column:8},end:{line:130,column:62}},"26":{start:{line:137,column:8},end:{line:137,column:63}},"27":{start:{line:144,column:8},end:{line:144,column:60}},"28":{start:{line:150,column:8},end:{line:155,column:9}},"29":{start:{line:151,column:12},end:{line:151,column:37}},"30":{start:{line:154,column:12},end:{line:154,column:24}},"31":{start:{line:163,column:8},end:{line:170,column:9}},"32":{start:{line:164,column:12},end:{line:164,column:79}},"33":{start:{line:164,column:54},end:{line:164,column:76}},"34":{start:{line:165,column:12},end:{line:169,column:13}},"35":{start:{line:168,column:16},end:{line:168,column:55}},"36":{start:{line:171,column:8},end:{line:171,column:37}},"37":{start:{line:178,column:8},end:{line:186,column:11}},"38":{start:{line:179,column:12},end:{line:185,column:13}},"39":{start:{line:180,column:16},end:{line:184,column:19}},"40":{start:{line:183,column:20},end:{line:183,column:59}},"41":{start:{line:193,column:8},end:{line:206,column:11}},"42":{start:{line:194,column:12},end:{line:205,column:13}},"43":{start:{line:195,column:16},end:{line:204,column:19}},"44":{start:{line:198,column:39},end:{line:198,column:79}},"45":{start:{line:199,column:20},end:{line:199,column:67}},"46":{start:{line:200,column:20},end:{line:202,column:23}},"47":{start:{line:201,column:24},end:{line:201,column:47}},"48":{start:{line:203,column:20},end:{line:203,column:48}},"49":{start:{line:213,column:8},end:{line:213,column:31}},"50":{start:{line:220,column:8},end:{line:220,column:31}},"51":{start:{line:227,column:21},end:{line:235,column:9}},"52":{start:{line:236,column:8},end:{line:236,column:35}},"53":{start:{line:237,column:8},end:{line:237,column:30}},"54":{start:{line:238,column:8},end:{line:238,column:28}},"55":{start:{line:244,column:8},end:{line:262,column:11}},"56":{start:{line:247,column:12},end:{line:255,column:14}},"57":{start:{line:256,column:12},end:{line:256,column:37}},"58":{start:{line:257,column:12},end:{line:257,column:46}},"59":{start:{line:259,column:12},end:{line:261,column:13}},"60":{start:{line:260,column:16},end:{line:260,column:56}},"61":{start:{line:268,column:8},end:{line:270,column:9}},"62":{start:{line:269,column:12},end:{line:269,column:40}},"63":{start:{line:271,column:8},end:{line:277,column:11}},"64":{start:{line:274,column:12},end:{line:274,column:53}},"65":{start:{line:275,column:12},end:{line:275,column:43}},"66":{start:{line:276,column:12},end:{line:276,column:37}},"67":{start:{line:285,column:8},end:{line:285,column:32}},"68":{start:{line:286,column:8},end:{line:289,column:9}},"69":{start:{line:288,column:12},end:{line:288,column:19}},"70":{start:{line:290,column:8},end:{line:296,column:9}},"71":{start:{line:291,column:12},end:{line:295,column:15}},"72":{start:{line:294,column:16},end:{line:294,column:55}},"73":{start:{line:304,column:8},end:{line:304,column:32}},"74":{start:{line:305,column:8},end:{line:337,column:9}},"75":{start:{line:306,column:12},end:{line:311,column:13}},"76":{start:{line:310,column:16},end:{line:310,column:23}},"77":{start:{line:312,column:12},end:{line:319,column:13}},"78":{start:{line:313,column:16},end:{line:318,column:19}},"79":{start:{line:316,column:20},end:{line:316,column:49}},"80":{start:{line:317,column:20},end:{line:317,column:45}},"81":{start:{line:322,column:12},end:{line:327,column:13}},"82":{start:{line:325,column:16},end:{line:325,column:55}},"83":{start:{line:326,column:16},end:{line:326,column:23}},"84":{start:{line:328,column:12},end:{line:328,column:38}},"85":{start:{line:329,column:12},end:{line:329,column:35}},"86":{start:{line:330,column:12},end:{line:336,column:15}},"87":{start:{line:333,column:16},end:{line:333,column:45}},"88":{start:{line:334,column:16},end:{line:334,column:47}},"89":{start:{line:335,column:16},end:{line:335,column:41}},"90":{start:{line:344,column:8},end:{line:346,column:9}},"91":{start:{line:345,column:12},end:{line:345,column:79}},"92":{start:{line:345,column:54},end:{line:345,column:76}},"93":{start:{line:347,column:8},end:{line:352,column:9}},"94":{start:{line:348,column:12},end:{line:348,column:77}},"95":{start:{line:351,column:12},end:{line:351,column:52}},"96":{start:{line:353,column:8},end:{line:353,column:37}},"97":{start:{line:354,column:8},end:{line:354,column:42}},"98":{start:{line:361,column:8},end:{line:363,column:9}},"99":{start:{line:362,column:12},end:{line:362,column:40}},"100":{start:{line:365,column:8},end:{line:365,column:37}},"101":{start:{line:366,column:8},end:{line:383,column:9}},"102":{start:{line:367,column:12},end:{line:379,column:15}},"103":{start:{line:370,column:16},end:{line:370,column:42}},"104":{start:{line:371,column:16},end:{line:371,column:41}},"105":{start:{line:372,column:16},end:{line:378,column:17}},"106":{start:{line:373,column:37},end:{line:373,column:108}},"107":{start:{line:374,column:33},end:{line:374,column:84}},"108":{start:{line:374,column:58},end:{line:374,column:83}},"109":{start:{line:375,column:20},end:{line:377,column:21}},"110":{start:{line:376,column:24},end:{line:376,column:46}},"111":{start:{line:382,column:12},end:{line:382,column:37}},"112":{start:{line:390,column:8},end:{line:395,column:9}},"113":{start:{line:391,column:12},end:{line:391,column:36}},"114":{start:{line:394,column:12},end:{line:394,column:35}},"115":{start:{line:402,column:8},end:{line:408,column:9}},"116":{start:{line:403,column:12},end:{line:407,column:15}},"117":{start:{line:404,column:16},end:{line:406,column:17}},"118":{start:{line:405,column:20},end:{line:405,column:47}},"119":{start:{line:409,column:19},end:{line:409,column:37}},"120":{start:{line:410,column:8},end:{line:417,column:9}},"121":{start:{line:411,column:12},end:{line:416,column:15}},"122":{start:{line:414,column:16},end:{line:414,column:55}},"123":{start:{line:415,column:16},end:{line:415,column:43}},"124":{start:{line:426,column:8},end:{line:430,column:11}},"125":{start:{line:427,column:12},end:{line:429,column:13}},"126":{start:{line:428,column:16},end:{line:428,column:69}},"127":{start:{line:431,column:8},end:{line:431,column:71}},"128":{start:{line:431,column:41},end:{line:431,column:69}},"129":{start:{line:439,column:8},end:{line:439,column:49}},"130":{start:{line:440,column:8},end:{line:442,column:11}},"131":{start:{line:441,column:12},end:{line:441,column:42}},"132":{start:{line:451,column:8},end:{line:453,column:9}},"133":{start:{line:452,column:12},end:{line:452,column:24}},"134":{start:{line:454,column:8},end:{line:459,column:9}},"135":{start:{line:455,column:27},end:{line:455,column:65}},"136":{start:{line:456,column:12},end:{line:458,column:13}},"137":{start:{line:457,column:16},end:{line:457,column:30}},"138":{start:{line:460,column:8},end:{line:460,column:20}},"139":{start:{line:470,column:8},end:{line:472,column:9}},"140":{start:{line:471,column:12},end:{line:471,column:24}},"141":{start:{line:474,column:26},end:{line:474,column:41}},"142":{start:{line:475,column:8},end:{line:475,column:42}},"143":{start:{line:476,column:8},end:{line:476,column:68}},"144":{start:{line:487,column:8},end:{line:499,column:9}},"145":{start:{line:488,column:12},end:{line:488,column:24}},"146":{start:{line:490,column:13},end:{line:499,column:9}},"147":{start:{line:492,column:12},end:{line:492,column:35}},"148":{start:{line:493,column:12},end:{line:498,column:13}},"149":{start:{line:494,column:31},end:{line:494,column:86}},"150":{start:{line:495,column:16},end:{line:497,column:17}},"151":{start:{line:496,column:20},end:{line:496,column:34}},"152":{start:{line:500,column:8},end:{line:500,column:20}},"153":{start:{line:507,column:8},end:{line:515,column:9}},"154":{start:{line:508,column:12},end:{line:508,column:50}},"155":{start:{line:511,column:12},end:{line:511,column:36}},"156":{start:{line:512,column:12},end:{line:514,column:13}},"157":{start:{line:513,column:16},end:{line:513,column:78}},"158":{start:{line:513,column:49},end:{line:513,column:76}},"159":{start:{line:521,column:8},end:{line:523,column:11}},"160":{start:{line:522,column:12},end:{line:522,column:35}},"161":{start:{line:525,column:13},end:{line:525,column:231}},"162":{start:{line:526,column:13},end:{line:526,column:556}},"163":{start:{line:529,column:0},end:{line:554,column:20}},"164":{start:{line:531,column:42},end:{line:531,column:98}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:18,column:4},end:{line:18,column:5}},loc:{start:{line:18,column:38},end:{line:84,column:5}},line:18},"1":{name:"(anonymous_1)",decl:{start:{line:90,column:4},end:{line:90,column:5}},loc:{start:{line:90,column:24},end:{line:96,column:5}},line:90},"2":{name:"(anonymous_2)",decl:{start:{line:101,column:4},end:{line:101,column:5}},loc:{start:{line:101,column:21},end:{line:103,column:5}},line:101},"3":{name:"(anonymous_3)",decl:{start:{line:108,column:4},end:{line:108,column:5}},loc:{start:{line:108,column:19},end:{line:110,column:5}},line:108},"4":{name:"(anonymous_4)",decl:{start:{line:115,column:4},end:{line:115,column:5}},loc:{start:{line:115,column:30},end:{line:117,column:5}},line:115},"5":{name:"(anonymous_5)",decl:{start:{line:122,column:4},end:{line:122,column:5}},loc:{start:{line:122,column:26},end:{line:124,column:5}},line:122},"6":{name:"(anonymous_6)",decl:{start:{line:129,column:4},end:{line:129,column:5}},loc:{start:{line:129,column:24},end:{line:131,column:5}},line:129},"7":{name:"(anonymous_7)",decl:{start:{line:136,column:4},end:{line:136,column:5}},loc:{start:{line:136,column:25},end:{line:138,column:5}},line:136},"8":{name:"(anonymous_8)",decl:{start:{line:143,column:4},end:{line:143,column:5}},loc:{start:{line:143,column:22},end:{line:145,column:5}},line:143},"9":{name:"(anonymous_9)",decl:{start:{line:149,column:4},end:{line:149,column:5}},loc:{start:{line:149,column:23},end:{line:156,column:5}},line:149},"10":{name:"(anonymous_10)",decl:{start:{line:162,column:4},end:{line:162,column:5}},loc:{start:{line:162,column:32},end:{line:172,column:5}},line:162},"11":{name:"(anonymous_11)",decl:{start:{line:164,column:44},end:{line:164,column:45}},loc:{start:{line:164,column:54},end:{line:164,column:76}},line:164},"12":{name:"(anonymous_12)",decl:{start:{line:177,column:4},end:{line:177,column:5}},loc:{start:{line:177,column:21},end:{line:187,column:5}},line:177},"13":{name:"(anonymous_13)",decl:{start:{line:178,column:47},end:{line:178,column:48}},loc:{start:{line:178,column:60},end:{line:186,column:9}},line:178},"14":{name:"(anonymous_14)",decl:{start:{line:182,column:31},end:{line:182,column:32}},loc:{start:{line:182,column:43},end:{line:184,column:17}},line:182},"15":{name:"(anonymous_15)",decl:{start:{line:192,column:4},end:{line:192,column:5}},loc:{start:{line:192,column:21},end:{line:207,column:5}},line:192},"16":{name:"(anonymous_16)",decl:{start:{line:193,column:47},end:{line:193,column:48}},loc:{start:{line:193,column:60},end:{line:206,column:9}},line:193},"17":{name:"(anonymous_17)",decl:{start:{line:197,column:31},end:{line:197,column:32}},loc:{start:{line:197,column:43},end:{line:204,column:17}},line:197},"18":{name:"(anonymous_18)",decl:{start:{line:200,column:53},end:{line:200,column:54}},loc:{start:{line:200,column:62},end:{line:202,column:21}},line:200},"19":{name:"(anonymous_19)",decl:{start:{line:212,column:4},end:{line:212,column:5}},loc:{start:{line:212,column:19},end:{line:214,column:5}},line:212},"20":{name:"(anonymous_20)",decl:{start:{line:219,column:4},end:{line:219,column:5}},loc:{start:{line:219,column:19},end:{line:221,column:5}},line:219},"21":{name:"(anonymous_21)",decl:{start:{line:226,column:4},end:{line:226,column:5}},loc:{start:{line:226,column:18},end:{line:239,column:5}},line:226},"22":{name:"(anonymous_22)",decl:{start:{line:243,column:4},end:{line:243,column:5}},loc:{start:{line:243,column:15},end:{line:263,column:5}},line:243},"23":{name:"(anonymous_23)",decl:{start:{line:246,column:23},end:{line:246,column:24}},loc:{start:{line:246,column:35},end:{line:262,column:9}},line:246},"24":{name:"(anonymous_24)",decl:{start:{line:267,column:4},end:{line:267,column:5}},loc:{start:{line:267,column:22},end:{line:278,column:5}},line:267},"25":{name:"(anonymous_25)",decl:{start:{line:273,column:23},end:{line:273,column:24}},loc:{start:{line:273,column:35},end:{line:277,column:9}},line:273},"26":{name:"(anonymous_26)",decl:{start:{line:284,column:4},end:{line:284,column:5}},loc:{start:{line:284,column:34},end:{line:297,column:5}},line:284},"27":{name:"(anonymous_27)",decl:{start:{line:293,column:27},end:{line:293,column:28}},loc:{start:{line:293,column:39},end:{line:295,column:13}},line:293},"28":{name:"(anonymous_28)",decl:{start:{line:303,column:4},end:{line:303,column:5}},loc:{start:{line:303,column:36},end:{line:338,column:5}},line:303},"29":{name:"(anonymous_29)",decl:{start:{line:315,column:31},end:{line:315,column:32}},loc:{start:{line:315,column:43},end:{line:318,column:17}},line:315},"30":{name:"(anonymous_30)",decl:{start:{line:332,column:27},end:{line:332,column:28}},loc:{start:{line:332,column:39},end:{line:336,column:13}},line:332},"31":{name:"(anonymous_31)",decl:{start:{line:343,column:4},end:{line:343,column:5}},loc:{start:{line:343,column:21},end:{line:355,column:5}},line:343},"32":{name:"(anonymous_32)",decl:{start:{line:345,column:44},end:{line:345,column:45}},loc:{start:{line:345,column:54},end:{line:345,column:76}},line:345},"33":{name:"(anonymous_33)",decl:{start:{line:360,column:4},end:{line:360,column:5}},loc:{start:{line:360,column:21},end:{line:384,column:5}},line:360},"34":{name:"(anonymous_34)",decl:{start:{line:369,column:27},end:{line:369,column:28}},loc:{start:{line:369,column:39},end:{line:379,column:13}},line:369},"35":{name:"(anonymous_35)",decl:{start:{line:374,column:49},end:{line:374,column:50}},loc:{start:{line:374,column:58},end:{line:374,column:83}},line:374},"36":{name:"(anonymous_36)",decl:{start:{line:389,column:4},end:{line:389,column:5}},loc:{start:{line:389,column:27},end:{line:396,column:5}},line:389},"37":{name:"(anonymous_37)",decl:{start:{line:401,column:4},end:{line:401,column:5}},loc:{start:{line:401,column:39},end:{line:418,column:5}},line:401},"38":{name:"(anonymous_38)",decl:{start:{line:403,column:33},end:{line:403,column:34}},loc:{start:{line:403,column:46},end:{line:407,column:13}},line:403},"39":{name:"(anonymous_39)",decl:{start:{line:413,column:27},end:{line:413,column:28}},loc:{start:{line:413,column:39},end:{line:416,column:13}},line:413},"40":{name:"(anonymous_40)",decl:{start:{line:425,column:4},end:{line:425,column:5}},loc:{start:{line:425,column:29},end:{line:432,column:5}},line:425},"41":{name:"(anonymous_41)",decl:{start:{line:426,column:32},end:{line:426,column:33}},loc:{start:{line:426,column:41},end:{line:430,column:9}},line:426},"42":{name:"(anonymous_42)",decl:{start:{line:431,column:32},end:{line:431,column:33}},loc:{start:{line:431,column:41},end:{line:431,column:69}},line:431},"43":{name:"(anonymous_43)",decl:{start:{line:438,column:4},end:{line:438,column:5}},loc:{start:{line:438,column:31},end:{line:443,column:5}},line:438},"44":{name:"(anonymous_44)",decl:{start:{line:440,column:32},end:{line:440,column:33}},loc:{start:{line:440,column:41},end:{line:442,column:9}},line:440},"45":{name:"(anonymous_45)",decl:{start:{line:450,column:4},end:{line:450,column:5}},loc:{start:{line:450,column:37},end:{line:461,column:5}},line:450},"46":{name:"(anonymous_46)",decl:{start:{line:468,column:4},end:{line:468,column:5}},loc:{start:{line:468,column:39},end:{line:477,column:5}},line:468},"47":{name:"(anonymous_47)",decl:{start:{line:485,column:4},end:{line:485,column:5}},loc:{start:{line:485,column:51},end:{line:501,column:5}},line:485},"48":{name:"(anonymous_48)",decl:{start:{line:506,column:4},end:{line:506,column:5}},loc:{start:{line:506,column:28},end:{line:516,column:5}},line:506},"49":{name:"(anonymous_49)",decl:{start:{line:513,column:40},end:{line:513,column:41}},loc:{start:{line:513,column:49},end:{line:513,column:76}},line:513},"50":{name:"(anonymous_50)",decl:{start:{line:520,column:4},end:{line:520,column:5}},loc:{start:{line:520,column:24},end:{line:524,column:5}},line:520},"51":{name:"(anonymous_51)",decl:{start:{line:521,column:41},end:{line:521,column:42}},loc:{start:{line:521,column:50},end:{line:523,column:9}},line:521},"52":{name:"(anonymous_52)",decl:{start:{line:531,column:28},end:{line:531,column:29}},loc:{start:{line:531,column:40},end:{line:531,column:100}},line:531}},branchMap:{"0":{loc:{start:{line:92,column:8},end:{line:94,column:9}},type:"if",locations:[{start:{line:92,column:8},end:{line:94,column:9}},{start:{line:92,column:8},end:{line:94,column:9}}],line:92},"1":{loc:{start:{line:150,column:8},end:{line:155,column:9}},type:"if",locations:[{start:{line:150,column:8},end:{line:155,column:9}},{start:{line:150,column:8},end:{line:155,column:9}}],line:150},"2":{loc:{start:{line:150,column:12},end:{line:150,column:57}},type:"binary-expr",locations:[{start:{line:150,column:12},end:{line:150,column:27}},{start:{line:150,column:31},end:{line:150,column:57}}],line:150},"3":{loc:{start:{line:163,column:8},end:{line:170,column:9}},type:"if",locations:[{start:{line:163,column:8},end:{line:170,column:9}},{start:{line:163,column:8},end:{line:170,column:9}}],line:163},"4":{loc:{start:{line:165,column:12},end:{line:169,column:13}},type:"if",locations:[{start:{line:165,column:12},end:{line:169,column:13}},{start:{line:165,column:12},end:{line:169,column:13}}],line:165},"5":{loc:{start:{line:165,column:16},end:{line:167,column:51}},type:"binary-expr",locations:[{start:{line:165,column:16},end:{line:165,column:34}},{start:{line:166,column:16},end:{line:166,column:47}},{start:{line:167,column:16},end:{line:167,column:51}}],line:165},"6":{loc:{start:{line:179,column:12},end:{line:185,column:13}},type:"if",locations:[{start:{line:179,column:12},end:{line:185,column:13}},{start:{line:179,column:12},end:{line:185,column:13}}],line:179},"7":{loc:{start:{line:194,column:12},end:{line:205,column:13}},type:"if",locations:[{start:{line:194,column:12},end:{line:205,column:13}},{start:{line:194,column:12},end:{line:205,column:13}}],line:194},"8":{loc:{start:{line:259,column:12},end:{line:261,column:13}},type:"if",locations:[{start:{line:259,column:12},end:{line:261,column:13}},{start:{line:259,column:12},end:{line:261,column:13}}],line:259},"9":{loc:{start:{line:259,column:16},end:{line:259,column:78}},type:"binary-expr",locations:[{start:{line:259,column:16},end:{line:259,column:44}},{start:{line:259,column:48},end:{line:259,column:78}}],line:259},"10":{loc:{start:{line:268,column:8},end:{line:270,column:9}},type:"if",locations:[{start:{line:268,column:8},end:{line:270,column:9}},{start:{line:268,column:8},end:{line:270,column:9}}],line:268},"11":{loc:{start:{line:286,column:8},end:{line:289,column:9}},type:"if",locations:[{start:{line:286,column:8},end:{line:289,column:9}},{start:{line:286,column:8},end:{line:289,column:9}}],line:286},"12":{loc:{start:{line:286,column:12},end:{line:286,column:76}},type:"binary-expr",locations:[{start:{line:286,column:12},end:{line:286,column:24}},{start:{line:286,column:28},end:{line:286,column:48}},{start:{line:286,column:52},end:{line:286,column:76}}],line:286},"13":{loc:{start:{line:290,column:8},end:{line:296,column:9}},type:"if",locations:[{start:{line:290,column:8},end:{line:296,column:9}},{start:{line:290,column:8},end:{line:296,column:9}}],line:290},"14":{loc:{start:{line:305,column:8},end:{line:337,column:9}},type:"if",locations:[{start:{line:305,column:8},end:{line:337,column:9}},{start:{line:305,column:8},end:{line:337,column:9}}],line:305},"15":{loc:{start:{line:306,column:12},end:{line:311,column:13}},type:"if",locations:[{start:{line:306,column:12},end:{line:311,column:13}},{start:{line:306,column:12},end:{line:311,column:13}}],line:306},"16":{loc:{start:{line:306,column:16},end:{line:308,column:42}},type:"binary-expr",locations:[{start:{line:306,column:16},end:{line:306,column:30}},{start:{line:307,column:16},end:{line:307,column:38}},{start:{line:308,column:16},end:{line:308,column:42}}],line:306},"17":{loc:{start:{line:312,column:12},end:{line:319,column:13}},type:"if",locations:[{start:{line:312,column:12},end:{line:319,column:13}},{start:{line:312,column:12},end:{line:319,column:13}}],line:312},"18":{loc:{start:{line:322,column:12},end:{line:327,column:13}},type:"if",locations:[{start:{line:322,column:12},end:{line:327,column:13}},{start:{line:322,column:12},end:{line:327,column:13}}],line:322},"19":{loc:{start:{line:322,column:16},end:{line:324,column:42}},type:"binary-expr",locations:[{start:{line:322,column:16},end:{line:322,column:30}},{start:{line:323,column:16},end:{line:323,column:38}},{start:{line:324,column:16},end:{line:324,column:42}}],line:322},"20":{loc:{start:{line:344,column:8},end:{line:346,column:9}},type:"if",locations:[{start:{line:344,column:8},end:{line:346,column:9}},{start:{line:344,column:8},end:{line:346,column:9}}],line:344},"21":{loc:{start:{line:347,column:8},end:{line:352,column:9}},type:"if",locations:[{start:{line:347,column:8},end:{line:352,column:9}},{start:{line:347,column:8},end:{line:352,column:9}}],line:347},"22":{loc:{start:{line:361,column:8},end:{line:363,column:9}},type:"if",locations:[{start:{line:361,column:8},end:{line:363,column:9}},{start:{line:361,column:8},end:{line:363,column:9}}],line:361},"23":{loc:{start:{line:366,column:8},end:{line:383,column:9}},type:"if",locations:[{start:{line:366,column:8},end:{line:383,column:9}},{start:{line:366,column:8},end:{line:383,column:9}}],line:366},"24":{loc:{start:{line:372,column:16},end:{line:378,column:17}},type:"if",locations:[{start:{line:372,column:16},end:{line:378,column:17}},{start:{line:372,column:16},end:{line:378,column:17}}],line:372},"25":{loc:{start:{line:372,column:20},end:{line:372,column:82}},type:"binary-expr",locations:[{start:{line:372,column:20},end:{line:372,column:48}},{start:{line:372,column:52},end:{line:372,column:82}}],line:372},"26":{loc:{start:{line:375,column:20},end:{line:377,column:21}},type:"if",locations:[{start:{line:375,column:20},end:{line:377,column:21}},{start:{line:375,column:20},end:{line:377,column:21}}],line:375},"27":{loc:{start:{line:390,column:8},end:{line:395,column:9}},type:"if",locations:[{start:{line:390,column:8},end:{line:395,column:9}},{start:{line:390,column:8},end:{line:395,column:9}}],line:390},"28":{loc:{start:{line:402,column:8},end:{line:408,column:9}},type:"if",locations:[{start:{line:402,column:8},end:{line:408,column:9}},{start:{line:402,column:8},end:{line:408,column:9}}],line:402},"29":{loc:{start:{line:404,column:16},end:{line:406,column:17}},type:"if",locations:[{start:{line:404,column:16},end:{line:406,column:17}},{start:{line:404,column:16},end:{line:406,column:17}}],line:404},"30":{loc:{start:{line:410,column:8},end:{line:417,column:9}},type:"if",locations:[{start:{line:410,column:8},end:{line:417,column:9}},{start:{line:410,column:8},end:{line:417,column:9}}],line:410},"31":{loc:{start:{line:427,column:12},end:{line:429,column:13}},type:"if",locations:[{start:{line:427,column:12},end:{line:429,column:13}},{start:{line:427,column:12},end:{line:429,column:13}}],line:427},"32":{loc:{start:{line:451,column:8},end:{line:453,column:9}},type:"if",locations:[{start:{line:451,column:8},end:{line:453,column:9}},{start:{line:451,column:8},end:{line:453,column:9}}],line:451},"33":{loc:{start:{line:456,column:12},end:{line:458,column:13}},type:"if",locations:[{start:{line:456,column:12},end:{line:458,column:13}},{start:{line:456,column:12},end:{line:458,column:13}}],line:456},"34":{loc:{start:{line:470,column:8},end:{line:472,column:9}},type:"if",locations:[{start:{line:470,column:8},end:{line:472,column:9}},{start:{line:470,column:8},end:{line:472,column:9}}],line:470},"35":{loc:{start:{line:470,column:12},end:{line:470,column:47}},type:"binary-expr",locations:[{start:{line:470,column:12},end:{line:470,column:30}},{start:{line:470,column:34},end:{line:470,column:47}}],line:470},"36":{loc:{start:{line:487,column:8},end:{line:499,column:9}},type:"if",locations:[{start:{line:487,column:8},end:{line:499,column:9}},{start:{line:487,column:8},end:{line:499,column:9}}],line:487},"37":{loc:{start:{line:487,column:12},end:{line:487,column:66}},type:"binary-expr",locations:[{start:{line:487,column:12},end:{line:487,column:37}},{start:{line:487,column:41},end:{line:487,column:66}}],line:487},"38":{loc:{start:{line:490,column:13},end:{line:499,column:9}},type:"if",locations:[{start:{line:490,column:13},end:{line:499,column:9}},{start:{line:490,column:13},end:{line:499,column:9}}],line:490},"39":{loc:{start:{line:495,column:16},end:{line:497,column:17}},type:"if",locations:[{start:{line:495,column:16},end:{line:497,column:17}},{start:{line:495,column:16},end:{line:497,column:17}}],line:495},"40":{loc:{start:{line:507,column:8},end:{line:515,column:9}},type:"if",locations:[{start:{line:507,column:8},end:{line:515,column:9}},{start:{line:507,column:8},end:{line:515,column:9}}],line:507},"41":{loc:{start:{line:512,column:12},end:{line:514,column:13}},type:"if",locations:[{start:{line:512,column:12},end:{line:514,column:13}},{start:{line:512,column:12},end:{line:514,column:13}}],line:512}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0,0],"17":[0,0],"18":[0,0],"19":[0,0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0]},inputSourceMap:{version:3,file:"browser.js",sourceRoot:"",sources:["../../../../../projects/sac-common/src/components/browser/browser.ts"],names:[],mappings:"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",sourcesContent:["import { HttpClient } from '@angular/common/http';\nimport {\n Directive,\n EventEmitter,\n HostListener,\n Injector,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ISacFileBrowserService } from '../../interfaces/ISacFileBrowserService';\nimport { ISacIconService } from '../../interfaces/ISacIconService';\nimport { ISacLocalisationService } from '../../interfaces/ISacLocalisationService';\nimport { ISacValidationKeyService } from '../../interfaces/ISacValidationKeyService';\nimport {\n SACICON_SERVICE,\n SACLOCALISATION_SERVICE,\n SACVALIDATIONKEY_SERVICE,\n SacDefaultIconService,\n SacDefaultValidationKeyService,\n} from '../../services';\nimport {\n SACFILEBROWSER_SERVICE,\n SacDefaultFileBrowserService,\n} from '../../services/sac-filebrowser.service';\nimport { SacDefaultLocalisationService } from '../../services/sac-localisation.service';\nimport { IBrowserFile } from './models/browserfile';\nimport { IBrowserFileResponse } from './models/browserfileresponse';\nimport { IBrowserNode } from './models/browsernode';\nimport { IBrowserNodeResponse } from './models/browsernoderesponse';\n\n/**\n * Base Component f\xFCr File Browser\n */\n@Directive()\nexport abstract class SacFileBrowserCommon implements OnInit {\n // #region Properties\n\n /**\n * Service f\xFCr File Browser Zugriff (Backend)\n */\n private browserService: ISacFileBrowserService;\n /**\n * Icon service to receive icon classes for ui\n */\n private iconService: ISacIconService;\n /**\n * File welches beim starten des Browsers bereits selektiert ist\n */\n private preselecedfile: string | null = null;\n\n /**\n * Erlaubte Dateierweiterungen f\xFCr Fileauswahl und Upload. Dateierweiterung mit Punkt und\n * getrennt durch Komma f\xFCr mehr als eine Erweiterung (Example: \".jpg,.gif\")\n */\n @Input()\n public allowedtypes: string = '';\n /**\n * Erlaubt das l\xF6schen einer Datei\n */\n @Input()\n public allowfiledelete: boolean = true;\n /**\n * Erlaubt das umbenennen einer Datei\n */\n @Input()\n public allowfilerename: boolean = true;\n /**\n * Erlaubt den Upload von Dateien\n */\n @Input()\n public allowfileupload: boolean = true;\n /**\n * Erlaubt das erstellen eines neuen Ordners\n */\n @Input()\n public allowfoldercreate: boolean = true;\n /**\n * Erlaubt das l\xF6schen eines Ordners\n */\n @Input()\n public allowfolderdelete: boolean = true;\n /**\n * Erlaubt das Umbenennen eines Ordners\n */\n @Input()\n public allowfolderrename: boolean = true;\n /**\n * URL f\xFCr Backend API\n */\n @Input()\n public apiurl: string;\n /**\n * Output Emitter wenn File selektiert wird.\n */\n @Output()\n public file: EventEmitter<string> = new EventEmitter<string>();\n\n /**\n * Service f\xFCr Error Localisation\n */\n public lngResourceService: ISacLocalisationService;\n /**\n * Root Node Item f\xFCr Tree\n */\n public rootNode: IBrowserNode = {\n Name: '',\n ChildNodes: [],\n Files: [],\n IsExpanded: true,\n IsEditMode: false,\n IsNewNode: false,\n Path: '',\n };\n /**\n * Selected File Name\n */\n public selectedFile: string;\n /**\n * Selected File Item\n */\n public selectedFileItem: IBrowserFile = null;\n /**\n * Selected Node Item\n */\n public selectedNode: IBrowserNode = null;\n /**\n * Liste von Uploads\n */\n public uploads: string[] = [];\n /**\n * Service to receive standard validation message keys and texts\n */\n public validationKeyService: ISacValidationKeyService;\n\n // #endregion Properties\n\n // #region Constructors\n\n /**\n * Konstruktor\n * @param httpclient Angular HTTP Client\n * @param injector Service Injector\n */\n constructor(httpclient: HttpClient, injector: Injector) {\n this.browserService = injector.get(\n SACFILEBROWSER_SERVICE,\n new SacDefaultFileBrowserService(httpclient)\n );\n this.validationKeyService = injector.get(\n SACVALIDATIONKEY_SERVICE,\n new SacDefaultValidationKeyService()\n );\n this.lngResourceService = injector.get(\n SACLOCALISATION_SERVICE,\n new SacDefaultLocalisationService(this.validationKeyService)\n );\n\n this.iconService = injector.get(\n SACICON_SERVICE,\n new SacDefaultIconService()\n );\n }\n\n // #endregion Constructors\n\n // #region Public Getters And Setters\n\n /**\n * Setzt den Seleced Node \xFCber den Pfad\n */\n @Input()\n public set selectedfile(v: string | null) {\n const selectednode = this.findSelectedNodeByPath(this.rootNode, v);\n\n if (selectednode !== null) {\n this.selectNode(selectednode);\n }\n\n this.preselecedfile = v;\n }\n\n /**\n * CSS icon class for delete icon\n * @returns css class with icon\n */\n public get iconDelete(): string {\n return this.iconService.BrowserComponentDeleteIcon;\n }\n\n /**\n * CSS icon class for edit icon\n * @returns css class with icon\n */\n public get iconEdit(): string {\n return this.iconService.BrowserComponentEditIcon;\n }\n\n /**\n * CSS icon for folders in tree there are collabsed\n * @returns css class with icon\n */\n public get iconFolderCollabsed(): string {\n return this.iconService.BrowserComponentFolderClosedIcon;\n }\n\n /**\n * CSS icon class for folders without subfolders\n * @returns css class with icon\n */\n public get iconFolderEmpty(): string {\n return this.iconService.BrowserComponentFolderEmptyIcon;\n }\n\n /**\n * CSS icon for new folders action\n * @returns css class with icon\n */\n public get iconFolderNew(): string {\n return this.iconService.BrowserComponentFolderNewIcon;\n }\n\n /**\n * CSS icon for folders in tree there are expanded\n * @returns css class with icon\n */\n public get iconFolderOpen(): string {\n return this.iconService.BrowserComponentFolderOpenIcon;\n }\n\n /**\n * CSS icon class for refresh icon\n * @returns css class with icon\n */\n public get iconRefresh(): string {\n return this.iconService.BrowserComponentRefreshIcon;\n }\n\n /**\n * Getter f\xFCr Selected File. Ist an Input Property gebunden\n */\n public get selectedfile(): string | null {\n if (this.selectFile && this.selectFile.length > 0) {\n return this.selectedFile;\n } else {\n return null;\n }\n }\n\n // #endregion Public Getters And Setters\n\n // #region Public Methods\n\n /**\n * HostListener welcher den Edit Mode bei allen Files und Nodes beendet.\n */\n @HostListener('document:click', ['$event.target'])\n /**\n * Click Event\n */\n public exitEditMode(targetElement): void {\n if (this.selectedNode) {\n this.selectedNode.Files.forEach((itm) => (itm.IsEditMode = false));\n\n if (\n !this.selectedNode ||\n this.selectedNode.Name === null ||\n this.selectedNode.Name.length === 0\n ) {\n this.clearNewChildNodes(this.rootNode);\n }\n }\n\n this.resetNodeEditMode(null);\n }\n\n /**\n * L\xF6scht ein File\n * @param file File welches gel\xF6scht werden soll\n */\n public deleteFile(file: IBrowserFile): void {\n this.confirmDeleteFile(file).subscribe((confirm) => {\n if (confirm) {\n this.browserService\n .DeleteFile(\n this.apiurl,\n this.selectedNode.Path + '/' + file.Filename,\n this.allowedtypes\n )\n .subscribe((result: IBrowserFileResponse) => {\n this.selectedNode.Files = result.Files;\n });\n }\n });\n }\n\n /**\n * L\xF6scht einen Node\n * @param node Node welcher gel\xF6scht werden soll\n */\n public deleteNode(node: IBrowserNode): void {\n this.confirmDeleteNode(node).subscribe((confirm) => {\n if (confirm) {\n this.browserService\n .DeleteNode(this.apiurl, node.Path)\n .subscribe((result: IBrowserNodeResponse) => {\n const parentNode = this.findParentNode(this.rootNode, node);\n parentNode.ChildNodes = result.Node.ChildNodes;\n\n this.rootNode.ChildNodes.forEach((itm) => {\n this.fillPath(itm, '');\n });\n\n this.selectNode(parentNode);\n });\n }\n });\n }\n\n /**\n * Setzt ein File in den Edit Mode\n * @param file File welches in den Edit Mode gesetzt werden soll\n */\n public editFile(file: IBrowserFile): void {\n file.IsEditMode = true;\n }\n\n /**\n * Setzt einen Node in den Edit Mode\n * @param node Node welcher bearbeitet werden soll\n */\n public editNode(node: IBrowserNode): void {\n node.IsEditMode = true;\n }\n\n /**\n * Erzeugt einen neuen Node im Tree\n * @param node Node unter welchem ein neuer Node erstellt werden soll\n */\n public newNode(node: IBrowserNode) {\n const item: IBrowserNode = {\n ChildNodes: [],\n Files: [],\n IsEditMode: false,\n IsExpanded: false,\n Name: '',\n Path: node.Path,\n IsNewNode: true,\n };\n\n node.ChildNodes.push(item);\n this.selectNode(item);\n this.editNode(item);\n }\n\n /**\n * Init Event der Komponente\n */\n public ngOnInit(): void {\n this.browserService\n .GetNode(this.apiurl, '', this.allowedtypes)\n .subscribe((result: IBrowserNodeResponse) => {\n this.rootNode = {\n Name: result.Node.Name,\n Files: result.Node.Files,\n ChildNodes: result.Node.ChildNodes,\n IsExpanded: true,\n IsEditMode: false,\n IsNewNode: false,\n Path: '/',\n };\n\n this.setPathToAllNodes();\n this.selectedNode = this.rootNode;\n\n // Selected File erneut setzen, wenn Property gesetzt wurde bevor Daten vom Service geladen wurden.\n if (this.preselecedfile !== null && this.preselecedfile.length > 0) {\n this.selectedfile = this.preselecedfile;\n }\n });\n }\n\n /**\n * Aktualisiert den Node\n */\n public refreshNode(node: IBrowserNode): void {\n if (!node.IsExpanded) {\n this.switchExpandNode(node);\n }\n\n this.browserService\n .GetNode(this.apiurl, node.Path, this.allowedtypes)\n .subscribe((result: IBrowserNodeResponse) => {\n node.ChildNodes = result.Node.ChildNodes;\n node.Files = result.Node.Files;\n\n this.setPathToAllNodes();\n });\n }\n\n /**\n * Methode wenn eine Datei umbenannt werden soll\n * @param file File welches umbenannt werden soll\n * @param newFilename Neuer Dateiname\n */\n public renameFile(file: IBrowserFile, newFilename: string): void {\n file.IsEditMode = false;\n\n if (!newFilename || newFilename === null || newFilename.length === 0) {\n // Cancel, Invalid Filename\n return;\n }\n\n if (file.Filename !== newFilename) {\n this.browserService\n .RenameFile(\n this.apiurl,\n this.selectedNode.Path + '/' + file.Filename,\n newFilename,\n this.allowedtypes\n )\n .subscribe((result: IBrowserFileResponse) => {\n this.selectedNode.Files = result.Files;\n });\n }\n }\n\n /**\n * Methode wenn ein Node umbenannt werden soll\n * @param node Node welcher umbenannt werden soll\n * @param newFoldername Neuer Ordnername\n */\n public renameNode(node: IBrowserNode, newFoldername: string): void {\n node.IsEditMode = false;\n\n if (!node.IsNewNode) {\n if (\n !newFoldername ||\n newFoldername === null ||\n newFoldername.length === 0\n ) {\n // Cancel Rename. Invalid Foldername\n return;\n }\n\n if (node.Name !== newFoldername) {\n this.browserService\n .RenameNode(this.apiurl, node.Path, newFoldername)\n .subscribe((result: IBrowserNodeResponse) => {\n node.Name = result.Node.Name;\n\n this.setPathToAllNodes();\n });\n }\n } else {\n if (\n !newFoldername ||\n newFoldername === null ||\n newFoldername.length === 0\n ) {\n this.clearNewChildNodes(this.rootNode);\n return;\n }\n\n node.Name = newFoldername;\n node.IsNewNode = false;\n this.browserService\n .SaveNode(this.apiurl, node.Path, newFoldername)\n .subscribe((result: IBrowserNodeResponse) => {\n node.Name = result.Node.Name;\n node.Files = result.Node.Files;\n\n this.setPathToAllNodes();\n });\n }\n }\n\n /**\n * Methode wenn ein File selektiert wird\n * @param file File welches selektiert wird\n */\n public selectFile(file: IBrowserFile) {\n if (!file.IsEditMode) {\n this.selectedNode.Files.forEach((itm) => (itm.IsEditMode = false));\n }\n\n if (!this.selectedNode.Path.endsWith('/')) {\n this.selectedFile = this.selectedNode.Path + '/' + file.Filename;\n } else {\n this.selectedFile = '/' + file.Filename;\n }\n\n this.selectedFileItem = file;\n this.file.emit(this.selectedFile);\n }\n\n /**\n * Methode wenn ein Node selektiert wird\n * @param node Node welcher selektiert werden soll\n */\n public selectNode(node: IBrowserNode): void {\n if (!node.IsExpanded) {\n this.switchExpandNode(node);\n }\n\n // Reset the Edit Mode in all Nodes\n this.resetNodeEditMode(null);\n\n if (!node.Files) {\n this.browserService\n .GetFiles(this.apiurl, node.Path, this.allowedtypes)\n .subscribe((result: IBrowserFileResponse) => {\n node.Files = result.Files;\n this.selectedNode = node;\n\n if (this.preselecedfile !== null && this.preselecedfile.length > 0) {\n const filename = this.preselecedfile.substring(\n this.preselecedfile.lastIndexOf('/') + 1\n );\n const file = node.Files.find((itm) => itm.Filename === filename);\n if (file) {\n this.selectFile(file);\n }\n }\n });\n } else {\n this.selectedNode = node;\n }\n }\n\n /**\n * Expand/Collabse Methode f\xFCr Nodes\n * @param node Node welcher ge\xF6ffnet oder geschlossen werden soll\n */\n public switchExpandNode(node: IBrowserNode): void {\n if (node.IsExpanded) {\n node.IsExpanded = false;\n } else {\n node.IsExpanded = true;\n }\n }\n\n /**\n * Methode die Aufgerufen werden muss, wenn ein Upload beendet ist.\n * @param param Parameter des hochgeladenen Files\n */\n public uploadComplete(node: IBrowserNode, uploadIdList: string[]): void {\n if (uploadIdList !== null) {\n uploadIdList.forEach((element) => {\n if (this.uploads.indexOf(element) < 0) {\n this.uploads.push(element);\n }\n });\n }\n\n const id = this.uploads.pop();\n if (id) {\n this.browserService\n .SaveFile(this.apiurl, node.Path, id, this.allowedtypes)\n .subscribe((result: IBrowserFileResponse) => {\n this.selectedNode.Files = result.Files;\n this.uploadedFileMoved(id);\n });\n }\n }\n\n // #endregion Public Methods\n\n // #region Public Abstract Methods\n\n /**\n * Abstrakte Confirm Methode welche implementiert werden muss. Methode wird aufgerufen, wenn eine\n * Datei gel\xF6scht werden soll.\n * @param file File f\xFCr welches ein Delete Confirm eingefordert werden soll\n */\n public abstract confirmDeleteFile(file: IBrowserFile): Observable<boolean>;\n /**\n * Abstrakte Confirm Methode welche implementiert werden muss. Methode wird aufgerufen, wenn ein\n * Ordner gel\xF6scht werden soll.\n * @param folder Ordern f\xFCr welchen ein Delete Confirm eingefordert werden soll.\n */\n public abstract confirmDeleteNode(folder: IBrowserNode): Observable<boolean>;\n /**\n * Abstrakte Methode die Aufgerufen wird, wenn das Hochgeladene File aus dem Temp Folder in die\n * Struktur verschoben wurde.\n * @param uploadid ID des Uploads\n */\n public abstract uploadedFileMoved(uploadid: string): void;\n\n // #endregion Public Abstract Methods\n\n // #region Private Methods\n\n /**\n * Rekursive Methode welche beim Node und all seinen Childs neue Nodes entfernt\n * @param node Node bei welchem alle neuen Nodes entfernt werden soll.\n */\n private clearNewChildNodes(node: IBrowserNode) {\n node.ChildNodes.forEach((itm) => {\n if (itm.IsNewNode) {\n node.ChildNodes.splice(node.ChildNodes.indexOf(itm));\n }\n });\n\n node.ChildNodes.forEach((itm) => this.clearNewChildNodes(itm));\n }\n\n /**\n * Methode welche den Pfad f\xFCr einen Node erzeugt\n * @param node Node f\xFCr welchen der Pfad erzeugt werden soll\n * @param parentPath \xDCbergeordneter Pfad\n */\n private fillPath(node: IBrowserNode, parentPath: string) {\n node.Path = parentPath + '/' + node.Name;\n node.ChildNodes.forEach((itm) => {\n this.fillPath(itm, node.Path);\n });\n }\n\n /**\n * Sucht den \xFCbergeordneten Node im Tree\n * @param node Aktueller Node\n * @param nodeToFind Node welcher gefunden werden soll\n * @returns Node wenn er gefunden wurde, ansonsten wird NULL zur\xFCckgegeben\n */\n private findParentNode(\n node: IBrowserNode,\n nodeToFind: IBrowserNode\n ): IBrowserNode {\n if (node.ChildNodes.indexOf(nodeToFind) >= 0) {\n return node;\n }\n\n for (const child of node.ChildNodes) {\n const result = this.findParentNode(child, nodeToFind);\n if (result !== null) {\n return result;\n }\n }\n\n return null;\n }\n\n /**\n * Sucht einen Node gem. einem URL Pfad\n * @param node Node in welchem gesucht werden soll\n * @param path Pfad nach welchem gesucht wird\n * @returns Node welcher zum gesuchten Pfad passt. Wenn kein Node gefunden wird, wird NULL zur\xFCckgegeben\n */\n private findSelectedNodeByPath(\n node: IBrowserNode,\n path: string\n ): IBrowserNode {\n // Cancel wenn Pfad nicht definiert\n if (path === undefined || path === null) {\n return null;\n }\n\n // Pfad in Array splitten und Root Foldername setzen\n const pathArray = path.split('/');\n pathArray[0] = this.rootNode.Name;\n\n return this.findSelectedNodeByPathArray(node, pathArray, 0);\n }\n\n /**\n * Sucht einen Node gem. einem Array von Node Namen\n * @param node Node in welchem gesucht werden soll\n * @param path Array von Node Namen, welche die Hirarchy des Pfades abbilden\n * @param index Aktueller Index im PATH Array\n * @returns Node wenn einer gefunden wurde, ansonsten NULL\n */\n private findSelectedNodeByPathArray(\n node: IBrowserNode,\n path: string[],\n index: number\n ): IBrowserNode {\n // Check ob Ordner korrekt. Letzer Ordner zur\xFCckgeben. Path Last Index ist der Filename\n if (node.Name === path[index] && path.length - 2 === index) {\n return node;\n } else if (node.Name === path[index]) {\n // Expand Node\n node.IsExpanded = true;\n for (const item of node.ChildNodes) {\n const result = this.findSelectedNodeByPathArray(item, path, index + 1);\n\n if (result !== null) {\n return result;\n }\n }\n }\n return null;\n }\n\n /**\n * Rekursive Methode welche beim Node und all seinen Childs den Edit Mode beendet.\n * @param node Node bei welchem der Edit Mode beendet werden soll\n */\n private resetNodeEditMode(node: IBrowserNode): void {\n if (node === null) {\n this.resetNodeEditMode(this.rootNode);\n } else {\n node.IsEditMode = false;\n\n if (node.ChildNodes) {\n node.ChildNodes.forEach((itm) => this.resetNodeEditMode(itm));\n }\n }\n }\n\n /**\n * Setzt den Pfad in allen Nodes\n */\n private setPathToAllNodes() {\n this.rootNode.ChildNodes.forEach((itm) => {\n this.fillPath(itm, '');\n });\n }\n\n // #endregion Private Methods\n}\n"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"e7be3636dfd16bdefffda51c29c8cf591c6b9b90"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore
2
- cov_13aj6impkv=function(){return actualCoverage;};}return actualCoverage;}cov_13aj6impkv();import{Directive,EventEmitter,HostListener,Input,Output}from'@angular/core';import{SACICON_SERVICE,SACLOCALISATION_SERVICE,SACVALIDATIONKEY_SERVICE,SacDefaultIconService,SacDefaultValidationKeyService}from'../../services';import{SACFILEBROWSER_SERVICE,SacDefaultFileBrowserService}from'../../services/sac-filebrowser.service';import{SacDefaultLocalisationService}from'../../services/sac-localisation.service';import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";/**
3
- * Base Component für File Browser
4
- */class SacFileBrowserCommon{// #endregion Properties
1
+ function cov_13aj6impkv(){var path="/home/runner/work/simpleangularcontrols/simpleangularcontrols/ch.jnetwork.sac-controls/dist/sac-common/esm2022/components/browser/browser.mjs";var hash="53f6720a12072bf267400c1cd20a25c9063669ef";var global=new Function("return this")();var gcv="__coverage__";var coverageData={path:"/home/runner/work/simpleangularcontrols/simpleangularcontrols/ch.jnetwork.sac-controls/dist/sac-common/esm2022/components/browser/browser.mjs",statementMap:{"0":{start:{line:22,column:8},end:{line:22,column:35}},"1":{start:{line:26,column:8},end:{line:26,column:31}},"2":{start:{line:30,column:8},end:{line:30,column:36}},"3":{start:{line:34,column:8},end:{line:34,column:36}},"4":{start:{line:38,column:8},end:{line:38,column:36}},"5":{start:{line:42,column:8},end:{line:42,column:38}},"6":{start:{line:46,column:8},end:{line:46,column:38}},"7":{start:{line:50,column:8},end:{line:50,column:38}},"8":{start:{line:54,column:8},end:{line:54,column:39}},"9":{start:{line:58,column:8},end:{line:66,column:10}},"10":{start:{line:70,column:8},end:{line:70,column:37}},"11":{start:{line:74,column:8},end:{line:74,column:33}},"12":{start:{line:78,column:8},end:{line:78,column:26}},"13":{start:{line:79,column:8},end:{line:79,column:113}},"14":{start:{line:80,column:8},end:{line:80,column:113}},"15":{start:{line:81,column:8},end:{line:81,column:134}},"16":{start:{line:82,column:8},end:{line:82,column:86}},"17":{start:{line:91,column:8},end:{line:91,column:59}},"18":{start:{line:98,column:8},end:{line:98,column:57}},"19":{start:{line:105,column:8},end:{line:105,column:65}},"20":{start:{line:112,column:8},end:{line:112,column:64}},"21":{start:{line:119,column:8},end:{line:119,column:62}},"22":{start:{line:126,column:8},end:{line:126,column:63}},"23":{start:{line:133,column:8},end:{line:133,column:60}},"24":{start:{line:139,column:8},end:{line:144,column:9}},"25":{start:{line:140,column:12},end:{line:140,column:37}},"26":{start:{line:143,column:12},end:{line:143,column:24}},"27":{start:{line:150,column:29},end:{line:150,column:74}},"28":{start:{line:151,column:8},end:{line:153,column:9}},"29":{start:{line:152,column:12},end:{line:152,column:42}},"30":{start:{line:154,column:8},end:{line:154,column:32}},"31":{start:{line:161,column:8},end:{line:169,column:11}},"32":{start:{line:162,column:12},end:{line:168,column:13}},"33":{start:{line:163,column:16},end:{line:167,column:19}},"34":{start:{line:166,column:20},end:{line:166,column:59}},"35":{start:{line:176,column:8},end:{line:187,column:11}},"36":{start:{line:177,column:12},end:{line:186,column:13}},"37":{start:{line:178,column:16},end:{line:185,column:19}},"38":{start:{line:179,column:39},end:{line:179,column:79}},"39":{start:{line:180,column:20},end:{line:180,column:67}},"40":{start:{line:181,column:20},end:{line:183,column:23}},"41":{start:{line:182,column:24},end:{line:182,column:47}},"42":{start:{line:184,column:20},end:{line:184,column:48}},"43":{start:{line:194,column:8},end:{line:194,column:31}},"44":{start:{line:201,column:8},end:{line:201,column:31}},"45":{start:{line:207,column:8},end:{line:212,column:9}},"46":{start:{line:208,column:12},end:{line:208,column:79}},"47":{start:{line:208,column:54},end:{line:208,column:76}},"48":{start:{line:209,column:12},end:{line:211,column:13}},"49":{start:{line:210,column:16},end:{line:210,column:55}},"50":{start:{line:213,column:8},end:{line:213,column:37}},"51":{start:{line:220,column:21},end:{line:228,column:9}},"52":{start:{line:229,column:8},end:{line:229,column:35}},"53":{start:{line:230,column:8},end:{line:230,column:30}},"54":{start:{line:231,column:8},end:{line:231,column:28}},"55":{start:{line:237,column:8},end:{line:253,column:11}},"56":{start:{line:238,column:12},end:{line:246,column:14}},"57":{start:{line:247,column:12},end:{line:247,column:37}},"58":{start:{line:248,column:12},end:{line:248,column:46}},"59":{start:{line:250,column:12},end:{line:252,column:13}},"60":{start:{line:251,column:16},end:{line:251,column:56}},"61":{start:{line:259,column:8},end:{line:261,column:9}},"62":{start:{line:260,column:12},end:{line:260,column:40}},"63":{start:{line:262,column:8},end:{line:268,column:11}},"64":{start:{line:265,column:12},end:{line:265,column:53}},"65":{start:{line:266,column:12},end:{line:266,column:43}},"66":{start:{line:267,column:12},end:{line:267,column:37}},"67":{start:{line:276,column:8},end:{line:276,column:32}},"68":{start:{line:277,column:8},end:{line:280,column:9}},"69":{start:{line:279,column:12},end:{line:279,column:19}},"70":{start:{line:281,column:8},end:{line:287,column:9}},"71":{start:{line:282,column:12},end:{line:286,column:15}},"72":{start:{line:285,column:16},end:{line:285,column:55}},"73":{start:{line:295,column:8},end:{line:295,column:32}},"74":{start:{line:296,column:8},end:{line:324,column:9}},"75":{start:{line:297,column:12},end:{line:300,column:13}},"76":{start:{line:299,column:16},end:{line:299,column:23}},"77":{start:{line:301,column:12},end:{line:308,column:13}},"78":{start:{line:302,column:16},end:{line:307,column:19}},"79":{start:{line:305,column:20},end:{line:305,column:49}},"80":{start:{line:306,column:20},end:{line:306,column:45}},"81":{start:{line:311,column:12},end:{line:314,column:13}},"82":{start:{line:312,column:16},end:{line:312,column:55}},"83":{start:{line:313,column:16},end:{line:313,column:23}},"84":{start:{line:315,column:12},end:{line:315,column:38}},"85":{start:{line:316,column:12},end:{line:316,column:35}},"86":{start:{line:317,column:12},end:{line:323,column:15}},"87":{start:{line:320,column:16},end:{line:320,column:45}},"88":{start:{line:321,column:16},end:{line:321,column:47}},"89":{start:{line:322,column:16},end:{line:322,column:41}},"90":{start:{line:331,column:8},end:{line:333,column:9}},"91":{start:{line:332,column:12},end:{line:332,column:79}},"92":{start:{line:332,column:54},end:{line:332,column:76}},"93":{start:{line:334,column:8},end:{line:339,column:9}},"94":{start:{line:335,column:12},end:{line:335,column:77}},"95":{start:{line:338,column:12},end:{line:338,column:52}},"96":{start:{line:340,column:8},end:{line:340,column:37}},"97":{start:{line:341,column:8},end:{line:341,column:42}},"98":{start:{line:348,column:8},end:{line:350,column:9}},"99":{start:{line:349,column:12},end:{line:349,column:40}},"100":{start:{line:352,column:8},end:{line:352,column:37}},"101":{start:{line:353,column:8},end:{line:370,column:9}},"102":{start:{line:354,column:12},end:{line:366,column:15}},"103":{start:{line:357,column:16},end:{line:357,column:42}},"104":{start:{line:358,column:16},end:{line:358,column:41}},"105":{start:{line:359,column:16},end:{line:365,column:17}},"106":{start:{line:360,column:37},end:{line:360,column:108}},"107":{start:{line:361,column:33},end:{line:361,column:84}},"108":{start:{line:361,column:58},end:{line:361,column:83}},"109":{start:{line:362,column:20},end:{line:364,column:21}},"110":{start:{line:363,column:24},end:{line:363,column:46}},"111":{start:{line:369,column:12},end:{line:369,column:37}},"112":{start:{line:377,column:8},end:{line:382,column:9}},"113":{start:{line:378,column:12},end:{line:378,column:36}},"114":{start:{line:381,column:12},end:{line:381,column:35}},"115":{start:{line:390,column:8},end:{line:396,column:9}},"116":{start:{line:391,column:12},end:{line:395,column:15}},"117":{start:{line:392,column:16},end:{line:394,column:17}},"118":{start:{line:393,column:20},end:{line:393,column:47}},"119":{start:{line:397,column:19},end:{line:397,column:37}},"120":{start:{line:398,column:8},end:{line:405,column:9}},"121":{start:{line:399,column:12},end:{line:404,column:15}},"122":{start:{line:402,column:16},end:{line:402,column:55}},"123":{start:{line:403,column:16},end:{line:403,column:43}},"124":{start:{line:414,column:8},end:{line:418,column:11}},"125":{start:{line:415,column:12},end:{line:417,column:13}},"126":{start:{line:416,column:16},end:{line:416,column:69}},"127":{start:{line:419,column:8},end:{line:419,column:71}},"128":{start:{line:419,column:41},end:{line:419,column:69}},"129":{start:{line:427,column:8},end:{line:427,column:49}},"130":{start:{line:428,column:8},end:{line:430,column:11}},"131":{start:{line:429,column:12},end:{line:429,column:42}},"132":{start:{line:439,column:8},end:{line:441,column:9}},"133":{start:{line:440,column:12},end:{line:440,column:24}},"134":{start:{line:442,column:8},end:{line:447,column:9}},"135":{start:{line:443,column:27},end:{line:443,column:65}},"136":{start:{line:444,column:12},end:{line:446,column:13}},"137":{start:{line:445,column:16},end:{line:445,column:30}},"138":{start:{line:448,column:8},end:{line:448,column:20}},"139":{start:{line:458,column:8},end:{line:460,column:9}},"140":{start:{line:459,column:12},end:{line:459,column:24}},"141":{start:{line:462,column:26},end:{line:462,column:41}},"142":{start:{line:463,column:8},end:{line:463,column:42}},"143":{start:{line:464,column:8},end:{line:464,column:68}},"144":{start:{line:475,column:8},end:{line:487,column:9}},"145":{start:{line:476,column:12},end:{line:476,column:24}},"146":{start:{line:478,column:13},end:{line:487,column:9}},"147":{start:{line:480,column:12},end:{line:480,column:35}},"148":{start:{line:481,column:12},end:{line:486,column:13}},"149":{start:{line:482,column:31},end:{line:482,column:86}},"150":{start:{line:483,column:16},end:{line:485,column:17}},"151":{start:{line:484,column:20},end:{line:484,column:34}},"152":{start:{line:488,column:8},end:{line:488,column:20}},"153":{start:{line:495,column:8},end:{line:503,column:9}},"154":{start:{line:496,column:12},end:{line:496,column:50}},"155":{start:{line:499,column:12},end:{line:499,column:36}},"156":{start:{line:500,column:12},end:{line:502,column:13}},"157":{start:{line:501,column:16},end:{line:501,column:78}},"158":{start:{line:501,column:49},end:{line:501,column:76}},"159":{start:{line:509,column:8},end:{line:511,column:11}},"160":{start:{line:510,column:12},end:{line:510,column:35}},"161":{start:{line:513,column:13},end:{line:513,column:231}},"162":{start:{line:514,column:13},end:{line:514,column:556}},"163":{start:{line:516,column:0},end:{line:541,column:20}},"164":{start:{line:518,column:42},end:{line:518,column:98}}},fnMap:{"0":{name:"(anonymous_0)",decl:{start:{line:18,column:4},end:{line:18,column:5}},loc:{start:{line:18,column:38},end:{line:83,column:5}},line:18},"1":{name:"(anonymous_1)",decl:{start:{line:90,column:4},end:{line:90,column:5}},loc:{start:{line:90,column:21},end:{line:92,column:5}},line:90},"2":{name:"(anonymous_2)",decl:{start:{line:97,column:4},end:{line:97,column:5}},loc:{start:{line:97,column:19},end:{line:99,column:5}},line:97},"3":{name:"(anonymous_3)",decl:{start:{line:104,column:4},end:{line:104,column:5}},loc:{start:{line:104,column:30},end:{line:106,column:5}},line:104},"4":{name:"(anonymous_4)",decl:{start:{line:111,column:4},end:{line:111,column:5}},loc:{start:{line:111,column:26},end:{line:113,column:5}},line:111},"5":{name:"(anonymous_5)",decl:{start:{line:118,column:4},end:{line:118,column:5}},loc:{start:{line:118,column:24},end:{line:120,column:5}},line:118},"6":{name:"(anonymous_6)",decl:{start:{line:125,column:4},end:{line:125,column:5}},loc:{start:{line:125,column:25},end:{line:127,column:5}},line:125},"7":{name:"(anonymous_7)",decl:{start:{line:132,column:4},end:{line:132,column:5}},loc:{start:{line:132,column:22},end:{line:134,column:5}},line:132},"8":{name:"(anonymous_8)",decl:{start:{line:138,column:4},end:{line:138,column:5}},loc:{start:{line:138,column:23},end:{line:145,column:5}},line:138},"9":{name:"(anonymous_9)",decl:{start:{line:149,column:4},end:{line:149,column:5}},loc:{start:{line:149,column:24},end:{line:155,column:5}},line:149},"10":{name:"(anonymous_10)",decl:{start:{line:160,column:4},end:{line:160,column:5}},loc:{start:{line:160,column:21},end:{line:170,column:5}},line:160},"11":{name:"(anonymous_11)",decl:{start:{line:161,column:47},end:{line:161,column:48}},loc:{start:{line:161,column:60},end:{line:169,column:9}},line:161},"12":{name:"(anonymous_12)",decl:{start:{line:165,column:31},end:{line:165,column:32}},loc:{start:{line:165,column:43},end:{line:167,column:17}},line:165},"13":{name:"(anonymous_13)",decl:{start:{line:175,column:4},end:{line:175,column:5}},loc:{start:{line:175,column:21},end:{line:188,column:5}},line:175},"14":{name:"(anonymous_14)",decl:{start:{line:176,column:47},end:{line:176,column:48}},loc:{start:{line:176,column:60},end:{line:187,column:9}},line:176},"15":{name:"(anonymous_15)",decl:{start:{line:178,column:81},end:{line:178,column:82}},loc:{start:{line:178,column:93},end:{line:185,column:17}},line:178},"16":{name:"(anonymous_16)",decl:{start:{line:181,column:53},end:{line:181,column:54}},loc:{start:{line:181,column:62},end:{line:183,column:21}},line:181},"17":{name:"(anonymous_17)",decl:{start:{line:193,column:4},end:{line:193,column:5}},loc:{start:{line:193,column:19},end:{line:195,column:5}},line:193},"18":{name:"(anonymous_18)",decl:{start:{line:200,column:4},end:{line:200,column:5}},loc:{start:{line:200,column:19},end:{line:202,column:5}},line:200},"19":{name:"(anonymous_19)",decl:{start:{line:206,column:4},end:{line:206,column:5}},loc:{start:{line:206,column:32},end:{line:214,column:5}},line:206},"20":{name:"(anonymous_20)",decl:{start:{line:208,column:44},end:{line:208,column:45}},loc:{start:{line:208,column:54},end:{line:208,column:76}},line:208},"21":{name:"(anonymous_21)",decl:{start:{line:219,column:4},end:{line:219,column:5}},loc:{start:{line:219,column:18},end:{line:232,column:5}},line:219},"22":{name:"(anonymous_22)",decl:{start:{line:236,column:4},end:{line:236,column:5}},loc:{start:{line:236,column:15},end:{line:254,column:5}},line:236},"23":{name:"(anonymous_23)",decl:{start:{line:237,column:82},end:{line:237,column:83}},loc:{start:{line:237,column:94},end:{line:253,column:9}},line:237},"24":{name:"(anonymous_24)",decl:{start:{line:258,column:4},end:{line:258,column:5}},loc:{start:{line:258,column:22},end:{line:269,column:5}},line:258},"25":{name:"(anonymous_25)",decl:{start:{line:264,column:23},end:{line:264,column:24}},loc:{start:{line:264,column:35},end:{line:268,column:9}},line:264},"26":{name:"(anonymous_26)",decl:{start:{line:275,column:4},end:{line:275,column:5}},loc:{start:{line:275,column:34},end:{line:288,column:5}},line:275},"27":{name:"(anonymous_27)",decl:{start:{line:284,column:27},end:{line:284,column:28}},loc:{start:{line:284,column:39},end:{line:286,column:13}},line:284},"28":{name:"(anonymous_28)",decl:{start:{line:294,column:4},end:{line:294,column:5}},loc:{start:{line:294,column:36},end:{line:325,column:5}},line:294},"29":{name:"(anonymous_29)",decl:{start:{line:304,column:31},end:{line:304,column:32}},loc:{start:{line:304,column:43},end:{line:307,column:17}},line:304},"30":{name:"(anonymous_30)",decl:{start:{line:319,column:27},end:{line:319,column:28}},loc:{start:{line:319,column:39},end:{line:323,column:13}},line:319},"31":{name:"(anonymous_31)",decl:{start:{line:330,column:4},end:{line:330,column:5}},loc:{start:{line:330,column:21},end:{line:342,column:5}},line:330},"32":{name:"(anonymous_32)",decl:{start:{line:332,column:44},end:{line:332,column:45}},loc:{start:{line:332,column:54},end:{line:332,column:76}},line:332},"33":{name:"(anonymous_33)",decl:{start:{line:347,column:4},end:{line:347,column:5}},loc:{start:{line:347,column:21},end:{line:371,column:5}},line:347},"34":{name:"(anonymous_34)",decl:{start:{line:356,column:27},end:{line:356,column:28}},loc:{start:{line:356,column:39},end:{line:366,column:13}},line:356},"35":{name:"(anonymous_35)",decl:{start:{line:361,column:49},end:{line:361,column:50}},loc:{start:{line:361,column:58},end:{line:361,column:83}},line:361},"36":{name:"(anonymous_36)",decl:{start:{line:376,column:4},end:{line:376,column:5}},loc:{start:{line:376,column:27},end:{line:383,column:5}},line:376},"37":{name:"(anonymous_37)",decl:{start:{line:389,column:4},end:{line:389,column:5}},loc:{start:{line:389,column:39},end:{line:406,column:5}},line:389},"38":{name:"(anonymous_38)",decl:{start:{line:391,column:33},end:{line:391,column:34}},loc:{start:{line:391,column:46},end:{line:395,column:13}},line:391},"39":{name:"(anonymous_39)",decl:{start:{line:401,column:27},end:{line:401,column:28}},loc:{start:{line:401,column:39},end:{line:404,column:13}},line:401},"40":{name:"(anonymous_40)",decl:{start:{line:413,column:4},end:{line:413,column:5}},loc:{start:{line:413,column:29},end:{line:420,column:5}},line:413},"41":{name:"(anonymous_41)",decl:{start:{line:414,column:32},end:{line:414,column:33}},loc:{start:{line:414,column:41},end:{line:418,column:9}},line:414},"42":{name:"(anonymous_42)",decl:{start:{line:419,column:32},end:{line:419,column:33}},loc:{start:{line:419,column:41},end:{line:419,column:69}},line:419},"43":{name:"(anonymous_43)",decl:{start:{line:426,column:4},end:{line:426,column:5}},loc:{start:{line:426,column:31},end:{line:431,column:5}},line:426},"44":{name:"(anonymous_44)",decl:{start:{line:428,column:32},end:{line:428,column:33}},loc:{start:{line:428,column:41},end:{line:430,column:9}},line:428},"45":{name:"(anonymous_45)",decl:{start:{line:438,column:4},end:{line:438,column:5}},loc:{start:{line:438,column:37},end:{line:449,column:5}},line:438},"46":{name:"(anonymous_46)",decl:{start:{line:456,column:4},end:{line:456,column:5}},loc:{start:{line:456,column:39},end:{line:465,column:5}},line:456},"47":{name:"(anonymous_47)",decl:{start:{line:473,column:4},end:{line:473,column:5}},loc:{start:{line:473,column:51},end:{line:489,column:5}},line:473},"48":{name:"(anonymous_48)",decl:{start:{line:494,column:4},end:{line:494,column:5}},loc:{start:{line:494,column:28},end:{line:504,column:5}},line:494},"49":{name:"(anonymous_49)",decl:{start:{line:501,column:40},end:{line:501,column:41}},loc:{start:{line:501,column:49},end:{line:501,column:76}},line:501},"50":{name:"(anonymous_50)",decl:{start:{line:508,column:4},end:{line:508,column:5}},loc:{start:{line:508,column:24},end:{line:512,column:5}},line:508},"51":{name:"(anonymous_51)",decl:{start:{line:509,column:41},end:{line:509,column:42}},loc:{start:{line:509,column:50},end:{line:511,column:9}},line:509},"52":{name:"(anonymous_52)",decl:{start:{line:518,column:28},end:{line:518,column:29}},loc:{start:{line:518,column:40},end:{line:518,column:100}},line:518}},branchMap:{"0":{loc:{start:{line:139,column:8},end:{line:144,column:9}},type:"if",locations:[{start:{line:139,column:8},end:{line:144,column:9}},{start:{line:139,column:8},end:{line:144,column:9}}],line:139},"1":{loc:{start:{line:139,column:12},end:{line:139,column:57}},type:"binary-expr",locations:[{start:{line:139,column:12},end:{line:139,column:27}},{start:{line:139,column:31},end:{line:139,column:57}}],line:139},"2":{loc:{start:{line:151,column:8},end:{line:153,column:9}},type:"if",locations:[{start:{line:151,column:8},end:{line:153,column:9}},{start:{line:151,column:8},end:{line:153,column:9}}],line:151},"3":{loc:{start:{line:162,column:12},end:{line:168,column:13}},type:"if",locations:[{start:{line:162,column:12},end:{line:168,column:13}},{start:{line:162,column:12},end:{line:168,column:13}}],line:162},"4":{loc:{start:{line:177,column:12},end:{line:186,column:13}},type:"if",locations:[{start:{line:177,column:12},end:{line:186,column:13}},{start:{line:177,column:12},end:{line:186,column:13}}],line:177},"5":{loc:{start:{line:207,column:8},end:{line:212,column:9}},type:"if",locations:[{start:{line:207,column:8},end:{line:212,column:9}},{start:{line:207,column:8},end:{line:212,column:9}}],line:207},"6":{loc:{start:{line:209,column:12},end:{line:211,column:13}},type:"if",locations:[{start:{line:209,column:12},end:{line:211,column:13}},{start:{line:209,column:12},end:{line:211,column:13}}],line:209},"7":{loc:{start:{line:209,column:16},end:{line:209,column:108}},type:"binary-expr",locations:[{start:{line:209,column:16},end:{line:209,column:34}},{start:{line:209,column:38},end:{line:209,column:69}},{start:{line:209,column:73},end:{line:209,column:108}}],line:209},"8":{loc:{start:{line:250,column:12},end:{line:252,column:13}},type:"if",locations:[{start:{line:250,column:12},end:{line:252,column:13}},{start:{line:250,column:12},end:{line:252,column:13}}],line:250},"9":{loc:{start:{line:250,column:16},end:{line:250,column:78}},type:"binary-expr",locations:[{start:{line:250,column:16},end:{line:250,column:44}},{start:{line:250,column:48},end:{line:250,column:78}}],line:250},"10":{loc:{start:{line:259,column:8},end:{line:261,column:9}},type:"if",locations:[{start:{line:259,column:8},end:{line:261,column:9}},{start:{line:259,column:8},end:{line:261,column:9}}],line:259},"11":{loc:{start:{line:277,column:8},end:{line:280,column:9}},type:"if",locations:[{start:{line:277,column:8},end:{line:280,column:9}},{start:{line:277,column:8},end:{line:280,column:9}}],line:277},"12":{loc:{start:{line:277,column:12},end:{line:277,column:76}},type:"binary-expr",locations:[{start:{line:277,column:12},end:{line:277,column:24}},{start:{line:277,column:28},end:{line:277,column:48}},{start:{line:277,column:52},end:{line:277,column:76}}],line:277},"13":{loc:{start:{line:281,column:8},end:{line:287,column:9}},type:"if",locations:[{start:{line:281,column:8},end:{line:287,column:9}},{start:{line:281,column:8},end:{line:287,column:9}}],line:281},"14":{loc:{start:{line:296,column:8},end:{line:324,column:9}},type:"if",locations:[{start:{line:296,column:8},end:{line:324,column:9}},{start:{line:296,column:8},end:{line:324,column:9}}],line:296},"15":{loc:{start:{line:297,column:12},end:{line:300,column:13}},type:"if",locations:[{start:{line:297,column:12},end:{line:300,column:13}},{start:{line:297,column:12},end:{line:300,column:13}}],line:297},"16":{loc:{start:{line:297,column:16},end:{line:297,column:86}},type:"binary-expr",locations:[{start:{line:297,column:16},end:{line:297,column:30}},{start:{line:297,column:34},end:{line:297,column:56}},{start:{line:297,column:60},end:{line:297,column:86}}],line:297},"17":{loc:{start:{line:301,column:12},end:{line:308,column:13}},type:"if",locations:[{start:{line:301,column:12},end:{line:308,column:13}},{start:{line:301,column:12},end:{line:308,column:13}}],line:301},"18":{loc:{start:{line:311,column:12},end:{line:314,column:13}},type:"if",locations:[{start:{line:311,column:12},end:{line:314,column:13}},{start:{line:311,column:12},end:{line:314,column:13}}],line:311},"19":{loc:{start:{line:311,column:16},end:{line:311,column:86}},type:"binary-expr",locations:[{start:{line:311,column:16},end:{line:311,column:30}},{start:{line:311,column:34},end:{line:311,column:56}},{start:{line:311,column:60},end:{line:311,column:86}}],line:311},"20":{loc:{start:{line:331,column:8},end:{line:333,column:9}},type:"if",locations:[{start:{line:331,column:8},end:{line:333,column:9}},{start:{line:331,column:8},end:{line:333,column:9}}],line:331},"21":{loc:{start:{line:334,column:8},end:{line:339,column:9}},type:"if",locations:[{start:{line:334,column:8},end:{line:339,column:9}},{start:{line:334,column:8},end:{line:339,column:9}}],line:334},"22":{loc:{start:{line:348,column:8},end:{line:350,column:9}},type:"if",locations:[{start:{line:348,column:8},end:{line:350,column:9}},{start:{line:348,column:8},end:{line:350,column:9}}],line:348},"23":{loc:{start:{line:353,column:8},end:{line:370,column:9}},type:"if",locations:[{start:{line:353,column:8},end:{line:370,column:9}},{start:{line:353,column:8},end:{line:370,column:9}}],line:353},"24":{loc:{start:{line:359,column:16},end:{line:365,column:17}},type:"if",locations:[{start:{line:359,column:16},end:{line:365,column:17}},{start:{line:359,column:16},end:{line:365,column:17}}],line:359},"25":{loc:{start:{line:359,column:20},end:{line:359,column:82}},type:"binary-expr",locations:[{start:{line:359,column:20},end:{line:359,column:48}},{start:{line:359,column:52},end:{line:359,column:82}}],line:359},"26":{loc:{start:{line:362,column:20},end:{line:364,column:21}},type:"if",locations:[{start:{line:362,column:20},end:{line:364,column:21}},{start:{line:362,column:20},end:{line:364,column:21}}],line:362},"27":{loc:{start:{line:377,column:8},end:{line:382,column:9}},type:"if",locations:[{start:{line:377,column:8},end:{line:382,column:9}},{start:{line:377,column:8},end:{line:382,column:9}}],line:377},"28":{loc:{start:{line:390,column:8},end:{line:396,column:9}},type:"if",locations:[{start:{line:390,column:8},end:{line:396,column:9}},{start:{line:390,column:8},end:{line:396,column:9}}],line:390},"29":{loc:{start:{line:392,column:16},end:{line:394,column:17}},type:"if",locations:[{start:{line:392,column:16},end:{line:394,column:17}},{start:{line:392,column:16},end:{line:394,column:17}}],line:392},"30":{loc:{start:{line:398,column:8},end:{line:405,column:9}},type:"if",locations:[{start:{line:398,column:8},end:{line:405,column:9}},{start:{line:398,column:8},end:{line:405,column:9}}],line:398},"31":{loc:{start:{line:415,column:12},end:{line:417,column:13}},type:"if",locations:[{start:{line:415,column:12},end:{line:417,column:13}},{start:{line:415,column:12},end:{line:417,column:13}}],line:415},"32":{loc:{start:{line:439,column:8},end:{line:441,column:9}},type:"if",locations:[{start:{line:439,column:8},end:{line:441,column:9}},{start:{line:439,column:8},end:{line:441,column:9}}],line:439},"33":{loc:{start:{line:444,column:12},end:{line:446,column:13}},type:"if",locations:[{start:{line:444,column:12},end:{line:446,column:13}},{start:{line:444,column:12},end:{line:446,column:13}}],line:444},"34":{loc:{start:{line:458,column:8},end:{line:460,column:9}},type:"if",locations:[{start:{line:458,column:8},end:{line:460,column:9}},{start:{line:458,column:8},end:{line:460,column:9}}],line:458},"35":{loc:{start:{line:458,column:12},end:{line:458,column:47}},type:"binary-expr",locations:[{start:{line:458,column:12},end:{line:458,column:30}},{start:{line:458,column:34},end:{line:458,column:47}}],line:458},"36":{loc:{start:{line:475,column:8},end:{line:487,column:9}},type:"if",locations:[{start:{line:475,column:8},end:{line:487,column:9}},{start:{line:475,column:8},end:{line:487,column:9}}],line:475},"37":{loc:{start:{line:475,column:12},end:{line:475,column:66}},type:"binary-expr",locations:[{start:{line:475,column:12},end:{line:475,column:37}},{start:{line:475,column:41},end:{line:475,column:66}}],line:475},"38":{loc:{start:{line:478,column:13},end:{line:487,column:9}},type:"if",locations:[{start:{line:478,column:13},end:{line:487,column:9}},{start:{line:478,column:13},end:{line:487,column:9}}],line:478},"39":{loc:{start:{line:483,column:16},end:{line:485,column:17}},type:"if",locations:[{start:{line:483,column:16},end:{line:485,column:17}},{start:{line:483,column:16},end:{line:485,column:17}}],line:483},"40":{loc:{start:{line:495,column:8},end:{line:503,column:9}},type:"if",locations:[{start:{line:495,column:8},end:{line:503,column:9}},{start:{line:495,column:8},end:{line:503,column:9}}],line:495},"41":{loc:{start:{line:500,column:12},end:{line:502,column:13}},type:"if",locations:[{start:{line:500,column:12},end:{line:502,column:13}},{start:{line:500,column:12},end:{line:502,column:13}}],line:500}},s:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0},f:{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0},b:{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0,0],"17":[0,0],"18":[0,0],"19":[0,0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0]},inputSourceMap:{version:3,file:"browser.js",sourceRoot:"",sources:["../../../../../projects/sac-common/src/components/browser/browser.ts"],names:[],mappings:"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",sourcesContent:["import { ISacFileBrowserService } from '../../interfaces/ISacFileBrowserService';\nimport { ISacIconService } from '../../interfaces/ISacIconService';\nimport { ISacLocalisationService } from '../../interfaces/ISacLocalisationService';\nimport { ISacValidationKeyService } from '../../interfaces/ISacValidationKeyService';\nimport {\n SACICON_SERVICE,\n SACLOCALISATION_SERVICE,\n SACVALIDATIONKEY_SERVICE,\n SacDefaultIconService,\n SacDefaultValidationKeyService,\n} from '../../services';\nimport { SACFILEBROWSER_SERVICE, SacDefaultFileBrowserService } from '../../services/sac-filebrowser.service';\nimport { SacDefaultLocalisationService } from '../../services/sac-localisation.service';\nimport { IBrowserFile } from './models/browserfile';\nimport { IBrowserFileResponse } from './models/browserfileresponse';\nimport { IBrowserNode } from './models/browsernode';\nimport { IBrowserNodeResponse } from './models/browsernoderesponse';\nimport { HttpClient } from '@angular/common/http';\nimport { Directive, EventEmitter, HostListener, Injector, Input, OnInit, Output } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n/**\n * Base component for file browser\n */\n@Directive()\nexport abstract class SacFileBrowserCommon implements OnInit {\n // #region Properties\n\n /**\n * Service for file browser access (backend)\n */\n private browserService: ISacFileBrowserService;\n\n /**\n * Icon service to receive icon classes for ui\n */\n private iconService: ISacIconService;\n\n /**\n * File that is already selected when the browser starts\n */\n private preselecedfile: string | null = null;\n\n /**\n * Allowed file extensions for file selection and upload. Use dot notation, separated by commas for multiple extensions (Example: \".jpg,.gif\")\n */\n @Input()\n public allowedtypes = '';\n\n /**\n * Allows deleting a file\n */\n @Input()\n public allowfiledelete = true;\n\n /**\n * Allows renaming a file\n */\n @Input()\n public allowfilerename = true;\n\n /**\n * Allows uploading files\n */\n @Input()\n public allowfileupload = true;\n\n /**\n * Allows creating a new folder\n */\n @Input()\n public allowfoldercreate = true;\n\n /**\n * Allows deleting a folder\n */\n @Input()\n public allowfolderdelete = true;\n\n /**\n * Allows renaming a folder\n */\n @Input()\n public allowfolderrename = true;\n\n /**\n * URL for the backend API\n */\n @Input()\n public apiurl: string;\n\n /**\n * Output emitter when a file is selected.\n */\n @Output()\n public file: EventEmitter<string> = new EventEmitter<string>();\n\n /**\n * Service for error localisation\n */\n public lngResourceService: ISacLocalisationService;\n\n /**\n * Root node item for the tree\n */\n public rootNode: IBrowserNode = {\n Name: '',\n ChildNodes: [],\n Files: [],\n IsExpanded: true,\n IsEditMode: false,\n IsNewNode: false,\n Path: '',\n };\n\n /**\n * Selected File Name\n */\n public selectedFile: string;\n\n /**\n * Selected File Item\n */\n public selectedFileItem: IBrowserFile = null;\n\n /**\n * Selected Node Item\n */\n public selectedNode: IBrowserNode = null;\n\n /**\n * Liste von Uploads\n */\n public uploads: string[] = [];\n\n /**\n * Service to receive standard validation message keys and texts\n */\n public validationKeyService: ISacValidationKeyService;\n\n // #endregion Properties\n\n // #region Constructors\n\n /**\n * Constructor\n * @param httpclient Angular HTTP Client\n * @param injector Service Injector\n */\n constructor(httpclient: HttpClient, injector: Injector) {\n this.browserService = injector.get(SACFILEBROWSER_SERVICE, new SacDefaultFileBrowserService(httpclient));\n this.validationKeyService = injector.get(SACVALIDATIONKEY_SERVICE, new SacDefaultValidationKeyService());\n this.lngResourceService = injector.get(\n SACLOCALISATION_SERVICE,\n new SacDefaultLocalisationService(this.validationKeyService)\n );\n\n this.iconService = injector.get(SACICON_SERVICE, new SacDefaultIconService());\n }\n\n // #endregion Constructors\n\n // #region Public Getters And Setters\n\n /**\n * CSS icon class for delete icon\n * @returns css class with icon\n */\n public get iconDelete(): string {\n return this.iconService.BrowserComponentDeleteIcon;\n }\n\n /**\n * CSS icon class for edit icon\n * @returns css class with icon\n */\n public get iconEdit(): string {\n return this.iconService.BrowserComponentEditIcon;\n }\n\n /**\n * CSS icon for folders in tree that are collapsed\n * @returns css class with icon\n */\n public get iconFolderCollabsed(): string {\n return this.iconService.BrowserComponentFolderClosedIcon;\n }\n\n /**\n * CSS icon class for folders without subfolders\n * @returns css class with icon\n */\n public get iconFolderEmpty(): string {\n return this.iconService.BrowserComponentFolderEmptyIcon;\n }\n\n /**\n * CSS icon for new folders action\n * @returns css class with icon\n */\n public get iconFolderNew(): string {\n return this.iconService.BrowserComponentFolderNewIcon;\n }\n\n /**\n * CSS icon for folders in tree there are expanded\n * @returns css class with icon\n */\n public get iconFolderOpen(): string {\n return this.iconService.BrowserComponentFolderOpenIcon;\n }\n\n /**\n * CSS icon class for refresh icon\n * @returns css class with icon\n */\n public get iconRefresh(): string {\n return this.iconService.BrowserComponentRefreshIcon;\n }\n\n /**\n * Getter for selected file. Bound to an input property\n */\n public get selectedfile(): string | null {\n if (this.selectFile && this.selectFile.length > 0) {\n return this.selectedFile;\n } else {\n return null;\n }\n }\n\n /**\n * Sets the selected node by the path\n */\n @Input()\n public set selectedfile(v: string | null) {\n const selectednode = this.findSelectedNodeByPath(this.rootNode, v);\n\n if (selectednode !== null) {\n this.selectNode(selectednode);\n }\n\n this.preselecedfile = v;\n }\n\n // #endregion Public Getters And Setters\n\n // #region Public Methods\n\n /**\n * Abstract confirm method that must be implemented. Called when a file should be deleted.\n * @param file File for which a delete confirmation should be requested\n */\n public abstract confirmDeleteFile(file: IBrowserFile): Observable<boolean>;\n\n /**\n * Abstract confirm method that must be implemented. Called when a folder should be deleted.\n * @param folder Folder for which a delete confirmation should be requested.\n */\n public abstract confirmDeleteNode(folder: IBrowserNode): Observable<boolean>;\n\n /**\n * Deletes a file\n * @param file File to be deleted\n */\n public deleteFile(file: IBrowserFile): void {\n this.confirmDeleteFile(file).subscribe((confirm) => {\n if (confirm) {\n this.browserService\n .DeleteFile(this.apiurl, this.selectedNode.Path + '/' + file.Filename, this.allowedtypes)\n .subscribe((result: IBrowserFileResponse) => {\n this.selectedNode.Files = result.Files;\n });\n }\n });\n }\n\n /**\n * Deletes a node\n * @param node Node to be deleted\n */\n public deleteNode(node: IBrowserNode): void {\n this.confirmDeleteNode(node).subscribe((confirm) => {\n if (confirm) {\n this.browserService.DeleteNode(this.apiurl, node.Path).subscribe((result: IBrowserNodeResponse) => {\n const parentNode = this.findParentNode(this.rootNode, node);\n parentNode.ChildNodes = result.Node.ChildNodes;\n\n this.rootNode.ChildNodes.forEach((itm) => {\n this.fillPath(itm, '');\n });\n\n this.selectNode(parentNode);\n });\n }\n });\n }\n\n /**\n * Sets a file into edit mode\n * @param file File that should be placed into edit mode\n */\n public editFile(file: IBrowserFile): void {\n file.IsEditMode = true;\n }\n\n /**\n * Sets a node into edit mode\n * @param node Node to be edited\n */\n public editNode(node: IBrowserNode): void {\n node.IsEditMode = true;\n }\n\n /**\n * HostListener that ends edit mode for all files and nodes.\n */\n @HostListener('document:click', ['$event.target'])\n /**\n * Click Event - Exits edit mode for files and nodes\n * @param targetElement The target element from the click event\n */\n public exitEditMode(targetElement): void {\n if (this.selectedNode) {\n this.selectedNode.Files.forEach((itm) => (itm.IsEditMode = false));\n\n if (!this.selectedNode || this.selectedNode.Name === null || this.selectedNode.Name.length === 0) {\n this.clearNewChildNodes(this.rootNode);\n }\n }\n\n this.resetNodeEditMode(null);\n }\n\n /**\n * Creates a new node in the tree\n * @param node Node under which a new node should be created\n */\n public newNode(node: IBrowserNode) {\n const item: IBrowserNode = {\n ChildNodes: [],\n Files: [],\n IsEditMode: false,\n IsExpanded: false,\n Name: '',\n Path: node.Path,\n IsNewNode: true,\n };\n\n node.ChildNodes.push(item);\n this.selectNode(item);\n this.editNode(item);\n }\n\n /**\n * Init event of the component\n */\n public ngOnInit(): void {\n this.browserService.GetNode(this.apiurl, '', this.allowedtypes).subscribe((result: IBrowserNodeResponse) => {\n this.rootNode = {\n Name: result.Node.Name,\n Files: result.Node.Files,\n ChildNodes: result.Node.ChildNodes,\n IsExpanded: true,\n IsEditMode: false,\n IsNewNode: false,\n Path: '/',\n };\n\n this.setPathToAllNodes();\n this.selectedNode = this.rootNode;\n\n // Re-set the selected file if the property was set before data was loaded from the service.\n if (this.preselecedfile !== null && this.preselecedfile.length > 0) {\n this.selectedfile = this.preselecedfile;\n }\n });\n }\n\n /**\n * Updates the node\n */\n public refreshNode(node: IBrowserNode): void {\n if (!node.IsExpanded) {\n this.switchExpandNode(node);\n }\n\n this.browserService\n .GetNode(this.apiurl, node.Path, this.allowedtypes)\n .subscribe((result: IBrowserNodeResponse) => {\n node.ChildNodes = result.Node.ChildNodes;\n node.Files = result.Node.Files;\n\n this.setPathToAllNodes();\n });\n }\n\n /**\n * Method called when a file should be renamed\n * @param file File to be renamed\n * @param newFilename New filename\n */\n public renameFile(file: IBrowserFile, newFilename: string): void {\n file.IsEditMode = false;\n\n if (!newFilename || newFilename === null || newFilename.length === 0) {\n // Cancel, Invalid Filename\n return;\n }\n\n if (file.Filename !== newFilename) {\n this.browserService\n .RenameFile(this.apiurl, this.selectedNode.Path + '/' + file.Filename, newFilename, this.allowedtypes)\n .subscribe((result: IBrowserFileResponse) => {\n this.selectedNode.Files = result.Files;\n });\n }\n }\n\n /**\n * Method called when a node should be renamed\n * @param node Node to be renamed\n * @param newFoldername New folder name\n */\n public renameNode(node: IBrowserNode, newFoldername: string): void {\n node.IsEditMode = false;\n\n if (!node.IsNewNode) {\n if (!newFoldername || newFoldername === null || newFoldername.length === 0) {\n // Cancel Rename. Invalid Foldername\n return;\n }\n\n if (node.Name !== newFoldername) {\n this.browserService\n .RenameNode(this.apiurl, node.Path, newFoldername)\n .subscribe((result: IBrowserNodeResponse) => {\n node.Name = result.Node.Name;\n\n this.setPathToAllNodes();\n });\n }\n } else {\n if (!newFoldername || newFoldername === null || newFoldername.length === 0) {\n this.clearNewChildNodes(this.rootNode);\n return;\n }\n\n node.Name = newFoldername;\n node.IsNewNode = false;\n this.browserService\n .SaveNode(this.apiurl, node.Path, newFoldername)\n .subscribe((result: IBrowserNodeResponse) => {\n node.Name = result.Node.Name;\n node.Files = result.Node.Files;\n\n this.setPathToAllNodes();\n });\n }\n }\n\n /**\n * Method called when a file is selected\n * @param file File that is selected\n */\n public selectFile(file: IBrowserFile) {\n if (!file.IsEditMode) {\n this.selectedNode.Files.forEach((itm) => (itm.IsEditMode = false));\n }\n\n if (!this.selectedNode.Path.endsWith('/')) {\n this.selectedFile = this.selectedNode.Path + '/' + file.Filename;\n } else {\n this.selectedFile = '/' + file.Filename;\n }\n\n this.selectedFileItem = file;\n this.file.emit(this.selectedFile);\n }\n\n /**\n * Method called when a node is selected\n * @param node Node that should be selected\n */\n public selectNode(node: IBrowserNode): void {\n if (!node.IsExpanded) {\n this.switchExpandNode(node);\n }\n\n // Reset the Edit Mode in all Nodes\n this.resetNodeEditMode(null);\n\n if (!node.Files) {\n this.browserService\n .GetFiles(this.apiurl, node.Path, this.allowedtypes)\n .subscribe((result: IBrowserFileResponse) => {\n node.Files = result.Files;\n this.selectedNode = node;\n\n if (this.preselecedfile !== null && this.preselecedfile.length > 0) {\n const filename = this.preselecedfile.substring(this.preselecedfile.lastIndexOf('/') + 1);\n const file = node.Files.find((itm) => itm.Filename === filename);\n if (file) {\n this.selectFile(file);\n }\n }\n });\n } else {\n this.selectedNode = node;\n }\n }\n\n /**\n * Expand/collapse method for nodes\n * @param node Node that should be opened or closed\n */\n public switchExpandNode(node: IBrowserNode): void {\n if (node.IsExpanded) {\n node.IsExpanded = false;\n } else {\n node.IsExpanded = true;\n }\n }\n\n /**\n * Method that must be called when an upload is completed.\n * @param node Node where uploaded files should be attached.\n * @param uploadIdList List of upload IDs that finished uploading.\n */\n public uploadComplete(node: IBrowserNode, uploadIdList: string[]): void {\n if (uploadIdList !== null) {\n uploadIdList.forEach((element) => {\n if (this.uploads.indexOf(element) < 0) {\n this.uploads.push(element);\n }\n });\n }\n\n const id = this.uploads.pop();\n if (id) {\n this.browserService\n .SaveFile(this.apiurl, node.Path, id, this.allowedtypes)\n .subscribe((result: IBrowserFileResponse) => {\n this.selectedNode.Files = result.Files;\n this.uploadedFileMoved(id);\n });\n }\n }\n\n /**\n * Abstract method invoked when the uploaded file has been moved from the temp folder into the structure.\n * @param uploadid Upload ID\n */\n public abstract uploadedFileMoved(uploadid: string): void;\n\n // #endregion Public Methods\n\n // #region Private Methods\n\n /**\n * Recursive method that removes new nodes from the given node and all its children\n * @param node Node from which all new nodes should be removed.\n */\n private clearNewChildNodes(node: IBrowserNode) {\n node.ChildNodes.forEach((itm) => {\n if (itm.IsNewNode) {\n node.ChildNodes.splice(node.ChildNodes.indexOf(itm));\n }\n });\n\n node.ChildNodes.forEach((itm) => this.clearNewChildNodes(itm));\n }\n\n /**\n * Method that generates the path for a node\n * @param node Node for which the path should be generated\n * @param parentPath Parent path\n */\n private fillPath(node: IBrowserNode, parentPath: string) {\n node.Path = parentPath + '/' + node.Name;\n node.ChildNodes.forEach((itm) => {\n this.fillPath(itm, node.Path);\n });\n }\n\n /**\n * Finds the parent node in the tree\n * @param node Current node\n * @param nodeToFind Node to find\n * @returns The node if found, otherwise NULL\n */\n private findParentNode(node: IBrowserNode, nodeToFind: IBrowserNode): IBrowserNode {\n if (node.ChildNodes.indexOf(nodeToFind) >= 0) {\n return node;\n }\n\n for (const child of node.ChildNodes) {\n const result = this.findParentNode(child, nodeToFind);\n if (result !== null) {\n return result;\n }\n }\n\n return null;\n }\n\n /**\n * Finds a node according to a URL path\n * @param node Node in which to search\n * @param path Path to search for\n * @returns Node matching the path. Returns NULL if not found\n */\n private findSelectedNodeByPath(node: IBrowserNode, path: string): IBrowserNode {\n // Cancel if path is not defined\n if (path === undefined || path === null) {\n return null;\n }\n\n // Split path into array and set the root folder name\n const pathArray = path.split('/');\n pathArray[0] = this.rootNode.Name;\n\n return this.findSelectedNodeByPathArray(node, pathArray, 0);\n }\n\n /**\n * Finds a node based on an array of node names\n * @param node Node in which to search\n * @param path Array of node names representing the hierarchy of the path\n * @param index Current index in the path array\n * @returns Node if found, otherwise NULL\n */\n private findSelectedNodeByPathArray(node: IBrowserNode, path: string[], index: number): IBrowserNode {\n // Check if folder is correct. Return the last folder. The last index in path is the filename\n if (node.Name === path[index] && path.length - 2 === index) {\n return node;\n } else if (node.Name === path[index]) {\n // Expand Node\n node.IsExpanded = true;\n for (const item of node.ChildNodes) {\n const result = this.findSelectedNodeByPathArray(item, path, index + 1);\n\n if (result !== null) {\n return result;\n }\n }\n }\n return null;\n }\n\n /**\n * Recursive method that ends edit mode for the node and all its children.\n * @param node Node for which edit mode should be ended\n */\n private resetNodeEditMode(node: IBrowserNode): void {\n if (node === null) {\n this.resetNodeEditMode(this.rootNode);\n } else {\n node.IsEditMode = false;\n\n if (node.ChildNodes) {\n node.ChildNodes.forEach((itm) => this.resetNodeEditMode(itm));\n }\n }\n }\n\n /**\n * Sets the path in all nodes\n */\n private setPathToAllNodes() {\n this.rootNode.ChildNodes.forEach((itm) => {\n this.fillPath(itm, '');\n });\n }\n\n // #endregion Private Methods\n}\n"]},_coverageSchema:"1a1c01bbd47fc00a2c39e90264f33305004495a9",hash:"53f6720a12072bf267400c1cd20a25c9063669ef"};var coverage=global[gcv]||(global[gcv]={});if(!coverage[path]||coverage[path].hash!==hash){coverage[path]=coverageData;}var actualCoverage=coverage[path];{// @ts-ignore
2
+ cov_13aj6impkv=function(){return actualCoverage;};}return actualCoverage;}cov_13aj6impkv();import{SACICON_SERVICE,SACLOCALISATION_SERVICE,SACVALIDATIONKEY_SERVICE,SacDefaultIconService,SacDefaultValidationKeyService}from'../../services';import{SACFILEBROWSER_SERVICE,SacDefaultFileBrowserService}from'../../services/sac-filebrowser.service';import{SacDefaultLocalisationService}from'../../services/sac-localisation.service';import{Directive,EventEmitter,HostListener,Input,Output}from'@angular/core';import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";/**
3
+ * Base component for file browser
4
+ */export class SacFileBrowserCommon{// #endregion Properties
5
5
  // #region Constructors
6
6
  /**
7
- * Konstruktor
7
+ * Constructor
8
8
  * @param httpclient Angular HTTP Client
9
9
  * @param injector Service Injector
10
10
  */constructor(httpclient,injector){cov_13aj6impkv().f[0]++;cov_13aj6impkv().s[0]++;/**
11
- * File welches beim starten des Browsers bereits selektiert ist
11
+ * File that is already selected when the browser starts
12
12
  */this.preselecedfile=null;/**
13
- * Erlaubte Dateierweiterungen für Fileauswahl und Upload. Dateierweiterung mit Punkt und
14
- * getrennt durch Komma für mehr als eine Erweiterung (Example: ".jpg,.gif")
13
+ * Allowed file extensions for file selection and upload. Use dot notation, separated by commas for multiple extensions (Example: ".jpg,.gif")
15
14
  */cov_13aj6impkv().s[1]++;this.allowedtypes='';/**
16
- * Erlaubt das löschen einer Datei
15
+ * Allows deleting a file
17
16
  */cov_13aj6impkv().s[2]++;this.allowfiledelete=true;/**
18
- * Erlaubt das umbenennen einer Datei
17
+ * Allows renaming a file
19
18
  */cov_13aj6impkv().s[3]++;this.allowfilerename=true;/**
20
- * Erlaubt den Upload von Dateien
19
+ * Allows uploading files
21
20
  */cov_13aj6impkv().s[4]++;this.allowfileupload=true;/**
22
- * Erlaubt das erstellen eines neuen Ordners
21
+ * Allows creating a new folder
23
22
  */cov_13aj6impkv().s[5]++;this.allowfoldercreate=true;/**
24
- * Erlaubt das löschen eines Ordners
23
+ * Allows deleting a folder
25
24
  */cov_13aj6impkv().s[6]++;this.allowfolderdelete=true;/**
26
- * Erlaubt das Umbenennen eines Ordners
25
+ * Allows renaming a folder
27
26
  */cov_13aj6impkv().s[7]++;this.allowfolderrename=true;/**
28
- * Output Emitter wenn File selektiert wird.
27
+ * Output emitter when a file is selected.
29
28
  */cov_13aj6impkv().s[8]++;this.file=new EventEmitter();/**
30
- * Root Node Item für Tree
29
+ * Root node item for the tree
31
30
  */cov_13aj6impkv().s[9]++;this.rootNode={Name:'',ChildNodes:[],Files:[],IsExpanded:true,IsEditMode:false,IsNewNode:false,Path:''};/**
32
31
  * Selected File Item
33
32
  */cov_13aj6impkv().s[10]++;this.selectedFileItem=null;/**
@@ -37,110 +36,109 @@ cov_13aj6impkv=function(){return actualCoverage;};}return actualCoverage;}cov_13
37
36
  */cov_13aj6impkv().s[12]++;this.uploads=[];cov_13aj6impkv().s[13]++;this.browserService=injector.get(SACFILEBROWSER_SERVICE,new SacDefaultFileBrowserService(httpclient));cov_13aj6impkv().s[14]++;this.validationKeyService=injector.get(SACVALIDATIONKEY_SERVICE,new SacDefaultValidationKeyService());cov_13aj6impkv().s[15]++;this.lngResourceService=injector.get(SACLOCALISATION_SERVICE,new SacDefaultLocalisationService(this.validationKeyService));cov_13aj6impkv().s[16]++;this.iconService=injector.get(SACICON_SERVICE,new SacDefaultIconService());}// #endregion Constructors
38
37
  // #region Public Getters And Setters
39
38
  /**
40
- * Setzt den Seleced Node über den Pfad
41
- */set selectedfile(v){cov_13aj6impkv().f[1]++;const selectednode=(cov_13aj6impkv().s[17]++,this.findSelectedNodeByPath(this.rootNode,v));cov_13aj6impkv().s[18]++;if(selectednode!==null){cov_13aj6impkv().b[0][0]++;cov_13aj6impkv().s[19]++;this.selectNode(selectednode);}else{cov_13aj6impkv().b[0][1]++;}cov_13aj6impkv().s[20]++;this.preselecedfile=v;}/**
42
39
  * CSS icon class for delete icon
43
40
  * @returns css class with icon
44
- */get iconDelete(){cov_13aj6impkv().f[2]++;cov_13aj6impkv().s[21]++;return this.iconService.BrowserComponentDeleteIcon;}/**
41
+ */get iconDelete(){cov_13aj6impkv().f[1]++;cov_13aj6impkv().s[17]++;return this.iconService.BrowserComponentDeleteIcon;}/**
45
42
  * CSS icon class for edit icon
46
43
  * @returns css class with icon
47
- */get iconEdit(){cov_13aj6impkv().f[3]++;cov_13aj6impkv().s[22]++;return this.iconService.BrowserComponentEditIcon;}/**
48
- * CSS icon for folders in tree there are collabsed
44
+ */get iconEdit(){cov_13aj6impkv().f[2]++;cov_13aj6impkv().s[18]++;return this.iconService.BrowserComponentEditIcon;}/**
45
+ * CSS icon for folders in tree that are collapsed
49
46
  * @returns css class with icon
50
- */get iconFolderCollabsed(){cov_13aj6impkv().f[4]++;cov_13aj6impkv().s[23]++;return this.iconService.BrowserComponentFolderClosedIcon;}/**
47
+ */get iconFolderCollabsed(){cov_13aj6impkv().f[3]++;cov_13aj6impkv().s[19]++;return this.iconService.BrowserComponentFolderClosedIcon;}/**
51
48
  * CSS icon class for folders without subfolders
52
49
  * @returns css class with icon
53
- */get iconFolderEmpty(){cov_13aj6impkv().f[5]++;cov_13aj6impkv().s[24]++;return this.iconService.BrowserComponentFolderEmptyIcon;}/**
50
+ */get iconFolderEmpty(){cov_13aj6impkv().f[4]++;cov_13aj6impkv().s[20]++;return this.iconService.BrowserComponentFolderEmptyIcon;}/**
54
51
  * CSS icon for new folders action
55
52
  * @returns css class with icon
56
- */get iconFolderNew(){cov_13aj6impkv().f[6]++;cov_13aj6impkv().s[25]++;return this.iconService.BrowserComponentFolderNewIcon;}/**
53
+ */get iconFolderNew(){cov_13aj6impkv().f[5]++;cov_13aj6impkv().s[21]++;return this.iconService.BrowserComponentFolderNewIcon;}/**
57
54
  * CSS icon for folders in tree there are expanded
58
55
  * @returns css class with icon
59
- */get iconFolderOpen(){cov_13aj6impkv().f[7]++;cov_13aj6impkv().s[26]++;return this.iconService.BrowserComponentFolderOpenIcon;}/**
56
+ */get iconFolderOpen(){cov_13aj6impkv().f[6]++;cov_13aj6impkv().s[22]++;return this.iconService.BrowserComponentFolderOpenIcon;}/**
60
57
  * CSS icon class for refresh icon
61
58
  * @returns css class with icon
62
- */get iconRefresh(){cov_13aj6impkv().f[8]++;cov_13aj6impkv().s[27]++;return this.iconService.BrowserComponentRefreshIcon;}/**
63
- * Getter für Selected File. Ist an Input Property gebunden
64
- */get selectedfile(){cov_13aj6impkv().f[9]++;cov_13aj6impkv().s[28]++;if((cov_13aj6impkv().b[2][0]++,this.selectFile)&&(cov_13aj6impkv().b[2][1]++,this.selectFile.length>0)){cov_13aj6impkv().b[1][0]++;cov_13aj6impkv().s[29]++;return this.selectedFile;}else{cov_13aj6impkv().b[1][1]++;cov_13aj6impkv().s[30]++;return null;}}// #endregion Public Getters And Setters
65
- // #region Public Methods
66
- /**
67
- * HostListener welcher den Edit Mode bei allen Files und Nodes beendet.
68
- */exitEditMode(targetElement){cov_13aj6impkv().f[10]++;cov_13aj6impkv().s[31]++;if(this.selectedNode){cov_13aj6impkv().b[3][0]++;cov_13aj6impkv().s[32]++;this.selectedNode.Files.forEach(itm=>{cov_13aj6impkv().f[11]++;cov_13aj6impkv().s[33]++;return itm.IsEditMode=false;});cov_13aj6impkv().s[34]++;if((cov_13aj6impkv().b[5][0]++,!this.selectedNode)||(cov_13aj6impkv().b[5][1]++,this.selectedNode.Name===null)||(cov_13aj6impkv().b[5][2]++,this.selectedNode.Name.length===0)){cov_13aj6impkv().b[4][0]++;cov_13aj6impkv().s[35]++;this.clearNewChildNodes(this.rootNode);}else{cov_13aj6impkv().b[4][1]++;}}else{cov_13aj6impkv().b[3][1]++;}cov_13aj6impkv().s[36]++;this.resetNodeEditMode(null);}/**
69
- * Löscht ein File
70
- * @param file File welches gelöscht werden soll
71
- */deleteFile(file){cov_13aj6impkv().f[12]++;cov_13aj6impkv().s[37]++;this.confirmDeleteFile(file).subscribe(confirm=>{cov_13aj6impkv().f[13]++;cov_13aj6impkv().s[38]++;if(confirm){cov_13aj6impkv().b[6][0]++;cov_13aj6impkv().s[39]++;this.browserService.DeleteFile(this.apiurl,this.selectedNode.Path+'/'+file.Filename,this.allowedtypes).subscribe(result=>{cov_13aj6impkv().f[14]++;cov_13aj6impkv().s[40]++;this.selectedNode.Files=result.Files;});}else{cov_13aj6impkv().b[6][1]++;}});}/**
72
- * Löscht einen Node
73
- * @param node Node welcher gelöscht werden soll
74
- */deleteNode(node){cov_13aj6impkv().f[15]++;cov_13aj6impkv().s[41]++;this.confirmDeleteNode(node).subscribe(confirm=>{cov_13aj6impkv().f[16]++;cov_13aj6impkv().s[42]++;if(confirm){cov_13aj6impkv().b[7][0]++;cov_13aj6impkv().s[43]++;this.browserService.DeleteNode(this.apiurl,node.Path).subscribe(result=>{cov_13aj6impkv().f[17]++;const parentNode=(cov_13aj6impkv().s[44]++,this.findParentNode(this.rootNode,node));cov_13aj6impkv().s[45]++;parentNode.ChildNodes=result.Node.ChildNodes;cov_13aj6impkv().s[46]++;this.rootNode.ChildNodes.forEach(itm=>{cov_13aj6impkv().f[18]++;cov_13aj6impkv().s[47]++;this.fillPath(itm,'');});cov_13aj6impkv().s[48]++;this.selectNode(parentNode);});}else{cov_13aj6impkv().b[7][1]++;}});}/**
75
- * Setzt ein File in den Edit Mode
76
- * @param file File welches in den Edit Mode gesetzt werden soll
77
- */editFile(file){cov_13aj6impkv().f[19]++;cov_13aj6impkv().s[49]++;file.IsEditMode=true;}/**
78
- * Setzt einen Node in den Edit Mode
79
- * @param node Node welcher bearbeitet werden soll
80
- */editNode(node){cov_13aj6impkv().f[20]++;cov_13aj6impkv().s[50]++;node.IsEditMode=true;}/**
81
- * Erzeugt einen neuen Node im Tree
82
- * @param node Node unter welchem ein neuer Node erstellt werden soll
59
+ */get iconRefresh(){cov_13aj6impkv().f[7]++;cov_13aj6impkv().s[23]++;return this.iconService.BrowserComponentRefreshIcon;}/**
60
+ * Getter for selected file. Bound to an input property
61
+ */get selectedfile(){cov_13aj6impkv().f[8]++;cov_13aj6impkv().s[24]++;if((cov_13aj6impkv().b[1][0]++,this.selectFile)&&(cov_13aj6impkv().b[1][1]++,this.selectFile.length>0)){cov_13aj6impkv().b[0][0]++;cov_13aj6impkv().s[25]++;return this.selectedFile;}else{cov_13aj6impkv().b[0][1]++;cov_13aj6impkv().s[26]++;return null;}}/**
62
+ * Sets the selected node by the path
63
+ */set selectedfile(v){cov_13aj6impkv().f[9]++;const selectednode=(cov_13aj6impkv().s[27]++,this.findSelectedNodeByPath(this.rootNode,v));cov_13aj6impkv().s[28]++;if(selectednode!==null){cov_13aj6impkv().b[2][0]++;cov_13aj6impkv().s[29]++;this.selectNode(selectednode);}else{cov_13aj6impkv().b[2][1]++;}cov_13aj6impkv().s[30]++;this.preselecedfile=v;}/**
64
+ * Deletes a file
65
+ * @param file File to be deleted
66
+ */deleteFile(file){cov_13aj6impkv().f[10]++;cov_13aj6impkv().s[31]++;this.confirmDeleteFile(file).subscribe(confirm=>{cov_13aj6impkv().f[11]++;cov_13aj6impkv().s[32]++;if(confirm){cov_13aj6impkv().b[3][0]++;cov_13aj6impkv().s[33]++;this.browserService.DeleteFile(this.apiurl,this.selectedNode.Path+'/'+file.Filename,this.allowedtypes).subscribe(result=>{cov_13aj6impkv().f[12]++;cov_13aj6impkv().s[34]++;this.selectedNode.Files=result.Files;});}else{cov_13aj6impkv().b[3][1]++;}});}/**
67
+ * Deletes a node
68
+ * @param node Node to be deleted
69
+ */deleteNode(node){cov_13aj6impkv().f[13]++;cov_13aj6impkv().s[35]++;this.confirmDeleteNode(node).subscribe(confirm=>{cov_13aj6impkv().f[14]++;cov_13aj6impkv().s[36]++;if(confirm){cov_13aj6impkv().b[4][0]++;cov_13aj6impkv().s[37]++;this.browserService.DeleteNode(this.apiurl,node.Path).subscribe(result=>{cov_13aj6impkv().f[15]++;const parentNode=(cov_13aj6impkv().s[38]++,this.findParentNode(this.rootNode,node));cov_13aj6impkv().s[39]++;parentNode.ChildNodes=result.Node.ChildNodes;cov_13aj6impkv().s[40]++;this.rootNode.ChildNodes.forEach(itm=>{cov_13aj6impkv().f[16]++;cov_13aj6impkv().s[41]++;this.fillPath(itm,'');});cov_13aj6impkv().s[42]++;this.selectNode(parentNode);});}else{cov_13aj6impkv().b[4][1]++;}});}/**
70
+ * Sets a file into edit mode
71
+ * @param file File that should be placed into edit mode
72
+ */editFile(file){cov_13aj6impkv().f[17]++;cov_13aj6impkv().s[43]++;file.IsEditMode=true;}/**
73
+ * Sets a node into edit mode
74
+ * @param node Node to be edited
75
+ */editNode(node){cov_13aj6impkv().f[18]++;cov_13aj6impkv().s[44]++;node.IsEditMode=true;}/**
76
+ * HostListener that ends edit mode for all files and nodes.
77
+ */exitEditMode(targetElement){cov_13aj6impkv().f[19]++;cov_13aj6impkv().s[45]++;if(this.selectedNode){cov_13aj6impkv().b[5][0]++;cov_13aj6impkv().s[46]++;this.selectedNode.Files.forEach(itm=>{cov_13aj6impkv().f[20]++;cov_13aj6impkv().s[47]++;return itm.IsEditMode=false;});cov_13aj6impkv().s[48]++;if((cov_13aj6impkv().b[7][0]++,!this.selectedNode)||(cov_13aj6impkv().b[7][1]++,this.selectedNode.Name===null)||(cov_13aj6impkv().b[7][2]++,this.selectedNode.Name.length===0)){cov_13aj6impkv().b[6][0]++;cov_13aj6impkv().s[49]++;this.clearNewChildNodes(this.rootNode);}else{cov_13aj6impkv().b[6][1]++;}}else{cov_13aj6impkv().b[5][1]++;}cov_13aj6impkv().s[50]++;this.resetNodeEditMode(null);}/**
78
+ * Creates a new node in the tree
79
+ * @param node Node under which a new node should be created
83
80
  */newNode(node){cov_13aj6impkv().f[21]++;const item=(cov_13aj6impkv().s[51]++,{ChildNodes:[],Files:[],IsEditMode:false,IsExpanded:false,Name:'',Path:node.Path,IsNewNode:true});cov_13aj6impkv().s[52]++;node.ChildNodes.push(item);cov_13aj6impkv().s[53]++;this.selectNode(item);cov_13aj6impkv().s[54]++;this.editNode(item);}/**
84
- * Init Event der Komponente
85
- */ngOnInit(){cov_13aj6impkv().f[22]++;cov_13aj6impkv().s[55]++;this.browserService.GetNode(this.apiurl,'',this.allowedtypes).subscribe(result=>{cov_13aj6impkv().f[23]++;cov_13aj6impkv().s[56]++;this.rootNode={Name:result.Node.Name,Files:result.Node.Files,ChildNodes:result.Node.ChildNodes,IsExpanded:true,IsEditMode:false,IsNewNode:false,Path:'/'};cov_13aj6impkv().s[57]++;this.setPathToAllNodes();cov_13aj6impkv().s[58]++;this.selectedNode=this.rootNode;// Selected File erneut setzen, wenn Property gesetzt wurde bevor Daten vom Service geladen wurden.
81
+ * Init event of the component
82
+ */ngOnInit(){cov_13aj6impkv().f[22]++;cov_13aj6impkv().s[55]++;this.browserService.GetNode(this.apiurl,'',this.allowedtypes).subscribe(result=>{cov_13aj6impkv().f[23]++;cov_13aj6impkv().s[56]++;this.rootNode={Name:result.Node.Name,Files:result.Node.Files,ChildNodes:result.Node.ChildNodes,IsExpanded:true,IsEditMode:false,IsNewNode:false,Path:'/'};cov_13aj6impkv().s[57]++;this.setPathToAllNodes();cov_13aj6impkv().s[58]++;this.selectedNode=this.rootNode;// Re-set the selected file if the property was set before data was loaded from the service.
86
83
  cov_13aj6impkv().s[59]++;if((cov_13aj6impkv().b[9][0]++,this.preselecedfile!==null)&&(cov_13aj6impkv().b[9][1]++,this.preselecedfile.length>0)){cov_13aj6impkv().b[8][0]++;cov_13aj6impkv().s[60]++;this.selectedfile=this.preselecedfile;}else{cov_13aj6impkv().b[8][1]++;}});}/**
87
- * Aktualisiert den Node
84
+ * Updates the node
88
85
  */refreshNode(node){cov_13aj6impkv().f[24]++;cov_13aj6impkv().s[61]++;if(!node.IsExpanded){cov_13aj6impkv().b[10][0]++;cov_13aj6impkv().s[62]++;this.switchExpandNode(node);}else{cov_13aj6impkv().b[10][1]++;}cov_13aj6impkv().s[63]++;this.browserService.GetNode(this.apiurl,node.Path,this.allowedtypes).subscribe(result=>{cov_13aj6impkv().f[25]++;cov_13aj6impkv().s[64]++;node.ChildNodes=result.Node.ChildNodes;cov_13aj6impkv().s[65]++;node.Files=result.Node.Files;cov_13aj6impkv().s[66]++;this.setPathToAllNodes();});}/**
89
- * Methode wenn eine Datei umbenannt werden soll
90
- * @param file File welches umbenannt werden soll
91
- * @param newFilename Neuer Dateiname
86
+ * Method called when a file should be renamed
87
+ * @param file File to be renamed
88
+ * @param newFilename New filename
92
89
  */renameFile(file,newFilename){cov_13aj6impkv().f[26]++;cov_13aj6impkv().s[67]++;file.IsEditMode=false;cov_13aj6impkv().s[68]++;if((cov_13aj6impkv().b[12][0]++,!newFilename)||(cov_13aj6impkv().b[12][1]++,newFilename===null)||(cov_13aj6impkv().b[12][2]++,newFilename.length===0)){cov_13aj6impkv().b[11][0]++;cov_13aj6impkv().s[69]++;// Cancel, Invalid Filename
93
90
  return;}else{cov_13aj6impkv().b[11][1]++;}cov_13aj6impkv().s[70]++;if(file.Filename!==newFilename){cov_13aj6impkv().b[13][0]++;cov_13aj6impkv().s[71]++;this.browserService.RenameFile(this.apiurl,this.selectedNode.Path+'/'+file.Filename,newFilename,this.allowedtypes).subscribe(result=>{cov_13aj6impkv().f[27]++;cov_13aj6impkv().s[72]++;this.selectedNode.Files=result.Files;});}else{cov_13aj6impkv().b[13][1]++;}}/**
94
- * Methode wenn ein Node umbenannt werden soll
95
- * @param node Node welcher umbenannt werden soll
96
- * @param newFoldername Neuer Ordnername
91
+ * Method called when a node should be renamed
92
+ * @param node Node to be renamed
93
+ * @param newFoldername New folder name
97
94
  */renameNode(node,newFoldername){cov_13aj6impkv().f[28]++;cov_13aj6impkv().s[73]++;node.IsEditMode=false;cov_13aj6impkv().s[74]++;if(!node.IsNewNode){cov_13aj6impkv().b[14][0]++;cov_13aj6impkv().s[75]++;if((cov_13aj6impkv().b[16][0]++,!newFoldername)||(cov_13aj6impkv().b[16][1]++,newFoldername===null)||(cov_13aj6impkv().b[16][2]++,newFoldername.length===0)){cov_13aj6impkv().b[15][0]++;cov_13aj6impkv().s[76]++;// Cancel Rename. Invalid Foldername
98
95
  return;}else{cov_13aj6impkv().b[15][1]++;}cov_13aj6impkv().s[77]++;if(node.Name!==newFoldername){cov_13aj6impkv().b[17][0]++;cov_13aj6impkv().s[78]++;this.browserService.RenameNode(this.apiurl,node.Path,newFoldername).subscribe(result=>{cov_13aj6impkv().f[29]++;cov_13aj6impkv().s[79]++;node.Name=result.Node.Name;cov_13aj6impkv().s[80]++;this.setPathToAllNodes();});}else{cov_13aj6impkv().b[17][1]++;}}else{cov_13aj6impkv().b[14][1]++;cov_13aj6impkv().s[81]++;if((cov_13aj6impkv().b[19][0]++,!newFoldername)||(cov_13aj6impkv().b[19][1]++,newFoldername===null)||(cov_13aj6impkv().b[19][2]++,newFoldername.length===0)){cov_13aj6impkv().b[18][0]++;cov_13aj6impkv().s[82]++;this.clearNewChildNodes(this.rootNode);cov_13aj6impkv().s[83]++;return;}else{cov_13aj6impkv().b[18][1]++;}cov_13aj6impkv().s[84]++;node.Name=newFoldername;cov_13aj6impkv().s[85]++;node.IsNewNode=false;cov_13aj6impkv().s[86]++;this.browserService.SaveNode(this.apiurl,node.Path,newFoldername).subscribe(result=>{cov_13aj6impkv().f[30]++;cov_13aj6impkv().s[87]++;node.Name=result.Node.Name;cov_13aj6impkv().s[88]++;node.Files=result.Node.Files;cov_13aj6impkv().s[89]++;this.setPathToAllNodes();});}}/**
99
- * Methode wenn ein File selektiert wird
100
- * @param file File welches selektiert wird
96
+ * Method called when a file is selected
97
+ * @param file File that is selected
101
98
  */selectFile(file){cov_13aj6impkv().f[31]++;cov_13aj6impkv().s[90]++;if(!file.IsEditMode){cov_13aj6impkv().b[20][0]++;cov_13aj6impkv().s[91]++;this.selectedNode.Files.forEach(itm=>{cov_13aj6impkv().f[32]++;cov_13aj6impkv().s[92]++;return itm.IsEditMode=false;});}else{cov_13aj6impkv().b[20][1]++;}cov_13aj6impkv().s[93]++;if(!this.selectedNode.Path.endsWith('/')){cov_13aj6impkv().b[21][0]++;cov_13aj6impkv().s[94]++;this.selectedFile=this.selectedNode.Path+'/'+file.Filename;}else{cov_13aj6impkv().b[21][1]++;cov_13aj6impkv().s[95]++;this.selectedFile='/'+file.Filename;}cov_13aj6impkv().s[96]++;this.selectedFileItem=file;cov_13aj6impkv().s[97]++;this.file.emit(this.selectedFile);}/**
102
- * Methode wenn ein Node selektiert wird
103
- * @param node Node welcher selektiert werden soll
99
+ * Method called when a node is selected
100
+ * @param node Node that should be selected
104
101
  */selectNode(node){cov_13aj6impkv().f[33]++;cov_13aj6impkv().s[98]++;if(!node.IsExpanded){cov_13aj6impkv().b[22][0]++;cov_13aj6impkv().s[99]++;this.switchExpandNode(node);}else{cov_13aj6impkv().b[22][1]++;}// Reset the Edit Mode in all Nodes
105
102
  cov_13aj6impkv().s[100]++;this.resetNodeEditMode(null);cov_13aj6impkv().s[101]++;if(!node.Files){cov_13aj6impkv().b[23][0]++;cov_13aj6impkv().s[102]++;this.browserService.GetFiles(this.apiurl,node.Path,this.allowedtypes).subscribe(result=>{cov_13aj6impkv().f[34]++;cov_13aj6impkv().s[103]++;node.Files=result.Files;cov_13aj6impkv().s[104]++;this.selectedNode=node;cov_13aj6impkv().s[105]++;if((cov_13aj6impkv().b[25][0]++,this.preselecedfile!==null)&&(cov_13aj6impkv().b[25][1]++,this.preselecedfile.length>0)){cov_13aj6impkv().b[24][0]++;const filename=(cov_13aj6impkv().s[106]++,this.preselecedfile.substring(this.preselecedfile.lastIndexOf('/')+1));const file=(cov_13aj6impkv().s[107]++,node.Files.find(itm=>{cov_13aj6impkv().f[35]++;cov_13aj6impkv().s[108]++;return itm.Filename===filename;}));cov_13aj6impkv().s[109]++;if(file){cov_13aj6impkv().b[26][0]++;cov_13aj6impkv().s[110]++;this.selectFile(file);}else{cov_13aj6impkv().b[26][1]++;}}else{cov_13aj6impkv().b[24][1]++;}});}else{cov_13aj6impkv().b[23][1]++;cov_13aj6impkv().s[111]++;this.selectedNode=node;}}/**
106
- * Expand/Collabse Methode für Nodes
107
- * @param node Node welcher geöffnet oder geschlossen werden soll
103
+ * Expand/collapse method for nodes
104
+ * @param node Node that should be opened or closed
108
105
  */switchExpandNode(node){cov_13aj6impkv().f[36]++;cov_13aj6impkv().s[112]++;if(node.IsExpanded){cov_13aj6impkv().b[27][0]++;cov_13aj6impkv().s[113]++;node.IsExpanded=false;}else{cov_13aj6impkv().b[27][1]++;cov_13aj6impkv().s[114]++;node.IsExpanded=true;}}/**
109
- * Methode die Aufgerufen werden muss, wenn ein Upload beendet ist.
110
- * @param param Parameter des hochgeladenen Files
111
- */uploadComplete(node,uploadIdList){cov_13aj6impkv().f[37]++;cov_13aj6impkv().s[115]++;if(uploadIdList!==null){cov_13aj6impkv().b[28][0]++;cov_13aj6impkv().s[116]++;uploadIdList.forEach(element=>{cov_13aj6impkv().f[38]++;cov_13aj6impkv().s[117]++;if(this.uploads.indexOf(element)<0){cov_13aj6impkv().b[29][0]++;cov_13aj6impkv().s[118]++;this.uploads.push(element);}else{cov_13aj6impkv().b[29][1]++;}});}else{cov_13aj6impkv().b[28][1]++;}const id=(cov_13aj6impkv().s[119]++,this.uploads.pop());cov_13aj6impkv().s[120]++;if(id){cov_13aj6impkv().b[30][0]++;cov_13aj6impkv().s[121]++;this.browserService.SaveFile(this.apiurl,node.Path,id,this.allowedtypes).subscribe(result=>{cov_13aj6impkv().f[39]++;cov_13aj6impkv().s[122]++;this.selectedNode.Files=result.Files;cov_13aj6impkv().s[123]++;this.uploadedFileMoved(id);});}else{cov_13aj6impkv().b[30][1]++;}}// #endregion Public Abstract Methods
106
+ * Method that must be called when an upload is completed.
107
+ * @param node Node where uploaded files should be attached.
108
+ * @param uploadIdList List of upload IDs that finished uploading.
109
+ */uploadComplete(node,uploadIdList){cov_13aj6impkv().f[37]++;cov_13aj6impkv().s[115]++;if(uploadIdList!==null){cov_13aj6impkv().b[28][0]++;cov_13aj6impkv().s[116]++;uploadIdList.forEach(element=>{cov_13aj6impkv().f[38]++;cov_13aj6impkv().s[117]++;if(this.uploads.indexOf(element)<0){cov_13aj6impkv().b[29][0]++;cov_13aj6impkv().s[118]++;this.uploads.push(element);}else{cov_13aj6impkv().b[29][1]++;}});}else{cov_13aj6impkv().b[28][1]++;}const id=(cov_13aj6impkv().s[119]++,this.uploads.pop());cov_13aj6impkv().s[120]++;if(id){cov_13aj6impkv().b[30][0]++;cov_13aj6impkv().s[121]++;this.browserService.SaveFile(this.apiurl,node.Path,id,this.allowedtypes).subscribe(result=>{cov_13aj6impkv().f[39]++;cov_13aj6impkv().s[122]++;this.selectedNode.Files=result.Files;cov_13aj6impkv().s[123]++;this.uploadedFileMoved(id);});}else{cov_13aj6impkv().b[30][1]++;}}// #endregion Public Methods
112
110
  // #region Private Methods
113
111
  /**
114
- * Rekursive Methode welche beim Node und all seinen Childs neue Nodes entfernt
115
- * @param node Node bei welchem alle neuen Nodes entfernt werden soll.
112
+ * Recursive method that removes new nodes from the given node and all its children
113
+ * @param node Node from which all new nodes should be removed.
116
114
  */clearNewChildNodes(node){cov_13aj6impkv().f[40]++;cov_13aj6impkv().s[124]++;node.ChildNodes.forEach(itm=>{cov_13aj6impkv().f[41]++;cov_13aj6impkv().s[125]++;if(itm.IsNewNode){cov_13aj6impkv().b[31][0]++;cov_13aj6impkv().s[126]++;node.ChildNodes.splice(node.ChildNodes.indexOf(itm));}else{cov_13aj6impkv().b[31][1]++;}});cov_13aj6impkv().s[127]++;node.ChildNodes.forEach(itm=>{cov_13aj6impkv().f[42]++;cov_13aj6impkv().s[128]++;return this.clearNewChildNodes(itm);});}/**
117
- * Methode welche den Pfad für einen Node erzeugt
118
- * @param node Node für welchen der Pfad erzeugt werden soll
119
- * @param parentPath Übergeordneter Pfad
115
+ * Method that generates the path for a node
116
+ * @param node Node for which the path should be generated
117
+ * @param parentPath Parent path
120
118
  */fillPath(node,parentPath){cov_13aj6impkv().f[43]++;cov_13aj6impkv().s[129]++;node.Path=parentPath+'/'+node.Name;cov_13aj6impkv().s[130]++;node.ChildNodes.forEach(itm=>{cov_13aj6impkv().f[44]++;cov_13aj6impkv().s[131]++;this.fillPath(itm,node.Path);});}/**
121
- * Sucht den übergeordneten Node im Tree
122
- * @param node Aktueller Node
123
- * @param nodeToFind Node welcher gefunden werden soll
124
- * @returns Node wenn er gefunden wurde, ansonsten wird NULL zurückgegeben
119
+ * Finds the parent node in the tree
120
+ * @param node Current node
121
+ * @param nodeToFind Node to find
122
+ * @returns The node if found, otherwise NULL
125
123
  */findParentNode(node,nodeToFind){cov_13aj6impkv().f[45]++;cov_13aj6impkv().s[132]++;if(node.ChildNodes.indexOf(nodeToFind)>=0){cov_13aj6impkv().b[32][0]++;cov_13aj6impkv().s[133]++;return node;}else{cov_13aj6impkv().b[32][1]++;}cov_13aj6impkv().s[134]++;for(const child of node.ChildNodes){const result=(cov_13aj6impkv().s[135]++,this.findParentNode(child,nodeToFind));cov_13aj6impkv().s[136]++;if(result!==null){cov_13aj6impkv().b[33][0]++;cov_13aj6impkv().s[137]++;return result;}else{cov_13aj6impkv().b[33][1]++;}}cov_13aj6impkv().s[138]++;return null;}/**
126
- * Sucht einen Node gem. einem URL Pfad
127
- * @param node Node in welchem gesucht werden soll
128
- * @param path Pfad nach welchem gesucht wird
129
- * @returns Node welcher zum gesuchten Pfad passt. Wenn kein Node gefunden wird, wird NULL zurückgegeben
130
- */findSelectedNodeByPath(node,path){cov_13aj6impkv().f[46]++;cov_13aj6impkv().s[139]++;// Cancel wenn Pfad nicht definiert
131
- if((cov_13aj6impkv().b[35][0]++,path===undefined)||(cov_13aj6impkv().b[35][1]++,path===null)){cov_13aj6impkv().b[34][0]++;cov_13aj6impkv().s[140]++;return null;}else{cov_13aj6impkv().b[34][1]++;}// Pfad in Array splitten und Root Foldername setzen
124
+ * Finds a node according to a URL path
125
+ * @param node Node in which to search
126
+ * @param path Path to search for
127
+ * @returns Node matching the path. Returns NULL if not found
128
+ */findSelectedNodeByPath(node,path){cov_13aj6impkv().f[46]++;cov_13aj6impkv().s[139]++;// Cancel if path is not defined
129
+ if((cov_13aj6impkv().b[35][0]++,path===undefined)||(cov_13aj6impkv().b[35][1]++,path===null)){cov_13aj6impkv().b[34][0]++;cov_13aj6impkv().s[140]++;return null;}else{cov_13aj6impkv().b[34][1]++;}// Split path into array and set the root folder name
132
130
  const pathArray=(cov_13aj6impkv().s[141]++,path.split('/'));cov_13aj6impkv().s[142]++;pathArray[0]=this.rootNode.Name;cov_13aj6impkv().s[143]++;return this.findSelectedNodeByPathArray(node,pathArray,0);}/**
133
- * Sucht einen Node gem. einem Array von Node Namen
134
- * @param node Node in welchem gesucht werden soll
135
- * @param path Array von Node Namen, welche die Hirarchy des Pfades abbilden
136
- * @param index Aktueller Index im PATH Array
137
- * @returns Node wenn einer gefunden wurde, ansonsten NULL
138
- */findSelectedNodeByPathArray(node,path,index){cov_13aj6impkv().f[47]++;cov_13aj6impkv().s[144]++;// Check ob Ordner korrekt. Letzer Ordner zurückgeben. Path Last Index ist der Filename
131
+ * Finds a node based on an array of node names
132
+ * @param node Node in which to search
133
+ * @param path Array of node names representing the hierarchy of the path
134
+ * @param index Current index in the path array
135
+ * @returns Node if found, otherwise NULL
136
+ */findSelectedNodeByPathArray(node,path,index){cov_13aj6impkv().f[47]++;cov_13aj6impkv().s[144]++;// Check if folder is correct. Return the last folder. The last index in path is the filename
139
137
  if((cov_13aj6impkv().b[37][0]++,node.Name===path[index])&&(cov_13aj6impkv().b[37][1]++,path.length-2===index)){cov_13aj6impkv().b[36][0]++;cov_13aj6impkv().s[145]++;return node;}else{cov_13aj6impkv().b[36][1]++;cov_13aj6impkv().s[146]++;if(node.Name===path[index]){cov_13aj6impkv().b[38][0]++;cov_13aj6impkv().s[147]++;// Expand Node
140
138
  node.IsExpanded=true;cov_13aj6impkv().s[148]++;for(const item of node.ChildNodes){const result=(cov_13aj6impkv().s[149]++,this.findSelectedNodeByPathArray(item,path,index+1));cov_13aj6impkv().s[150]++;if(result!==null){cov_13aj6impkv().b[39][0]++;cov_13aj6impkv().s[151]++;return result;}else{cov_13aj6impkv().b[39][1]++;}}}else{cov_13aj6impkv().b[38][1]++;}}cov_13aj6impkv().s[152]++;return null;}/**
141
- * Rekursive Methode welche beim Node und all seinen Childs den Edit Mode beendet.
142
- * @param node Node bei welchem der Edit Mode beendet werden soll
139
+ * Recursive method that ends edit mode for the node and all its children.
140
+ * @param node Node for which edit mode should be ended
143
141
  */resetNodeEditMode(node){cov_13aj6impkv().f[48]++;cov_13aj6impkv().s[153]++;if(node===null){cov_13aj6impkv().b[40][0]++;cov_13aj6impkv().s[154]++;this.resetNodeEditMode(this.rootNode);}else{cov_13aj6impkv().b[40][1]++;cov_13aj6impkv().s[155]++;node.IsEditMode=false;cov_13aj6impkv().s[156]++;if(node.ChildNodes){cov_13aj6impkv().b[41][0]++;cov_13aj6impkv().s[157]++;node.ChildNodes.forEach(itm=>{cov_13aj6impkv().f[49]++;cov_13aj6impkv().s[158]++;return this.resetNodeEditMode(itm);});}else{cov_13aj6impkv().b[41][1]++;}}}/**
144
- * Setzt den Pfad in allen Nodes
145
- */setPathToAllNodes(){cov_13aj6impkv().f[50]++;cov_13aj6impkv().s[159]++;this.rootNode.ChildNodes.forEach(itm=>{cov_13aj6impkv().f[51]++;cov_13aj6impkv().s[160]++;this.fillPath(itm,'');});}static{cov_13aj6impkv().s[161]++;this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"16.2.12",ngImport:i0,type:SacFileBrowserCommon,deps:[{token:i1.HttpClient},{token:i0.Injector}],target:i0.ɵɵFactoryTarget.Directive});}static{cov_13aj6impkv().s[162]++;this.ɵdir=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"16.2.12",type:SacFileBrowserCommon,inputs:{allowedtypes:"allowedtypes",allowfiledelete:"allowfiledelete",allowfilerename:"allowfilerename",allowfileupload:"allowfileupload",allowfoldercreate:"allowfoldercreate",allowfolderdelete:"allowfolderdelete",allowfolderrename:"allowfolderrename",apiurl:"apiurl",selectedfile:"selectedfile"},outputs:{file:"file"},host:{listeners:{"document:click":"exitEditMode($event.target)"}},ngImport:i0});}}export{SacFileBrowserCommon};cov_13aj6impkv().s[163]++;i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"16.2.12",ngImport:i0,type:SacFileBrowserCommon,decorators:[{type:Directive}],ctorParameters:function(){cov_13aj6impkv().f[52]++;cov_13aj6impkv().s[164]++;return[{type:i1.HttpClient},{type:i0.Injector}];},propDecorators:{allowedtypes:[{type:Input}],allowfiledelete:[{type:Input}],allowfilerename:[{type:Input}],allowfileupload:[{type:Input}],allowfoldercreate:[{type:Input}],allowfolderdelete:[{type:Input}],allowfolderrename:[{type:Input}],apiurl:[{type:Input}],file:[{type:Output}],selectedfile:[{type:Input}],exitEditMode:[{type:HostListener,args:['document:click',['$event.target']]}]}});//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbXBvbmVudHMvYnJvd3Nlci9icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFFWixLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBTXZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsOEJBQThCLEdBQy9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qiw0QkFBNEIsR0FDN0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7O0FBTXhGOztHQUVHO0FBQ0gsTUFDc0Isb0JBQW9CO0lBb0d4Qyx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7O09BSUc7SUFDSCxZQUFZLFVBQXNCLEVBQUUsUUFBa0I7UUFsR3REOztXQUVHO1FBQ0ssbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBRTdDOzs7V0FHRztRQUVJLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQ2pDOztXQUVHO1FBRUksb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDdkM7O1dBRUc7UUFFSSxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUN2Qzs7V0FFRztRQUVJLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ3ZDOztXQUVHO1FBRUksc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBQ3pDOztXQUVHO1FBRUksc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBQ3pDOztXQUVHO1FBRUksc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBTXpDOztXQUVHO1FBRUksU0FBSSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBTS9EOztX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QUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBMXFCbUIsb0JBQW9CO21HQUFwQixvQkFBb0I7O1NBQXBCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQUR6QyxTQUFTO3dIQXNCRCxZQUFZO3NCQURsQixLQUFLO2dCQU1DLGVBQWU7c0JBRHJCLEtBQUs7Z0JBTUMsZUFBZTtzQkFEckIsS0FBSztnQkFNQyxlQUFlO3NCQURyQixLQUFLO2dCQU1DLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFNQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBTUMsaUJBQWlCO3NCQUR2QixLQUFLO2dCQU1DLE1BQU07c0JBRFosS0FBSztnQkFNQyxJQUFJO3NCQURWLE1BQU07Z0JBNkVJLFlBQVk7c0JBRHRCLEtBQUs7Z0JBeUZDLFlBQVk7c0JBSmxCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJU2FjRmlsZUJyb3dzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU2FjRmlsZUJyb3dzZXJTZXJ2aWNlJztcbmltcG9ydCB7IElTYWNJY29uU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY0ljb25TZXJ2aWNlJztcbmltcG9ydCB7IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU2FjTG9jYWxpc2F0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNWYWxpZGF0aW9uS2V5U2VydmljZSc7XG5pbXBvcnQge1xuICBTQUNJQ09OX1NFUlZJQ0UsXG4gIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxuICBTQUNWQUxJREFUSU9OS0VZX1NFUlZJQ0UsXG4gIFNhY0RlZmF1bHRJY29uU2VydmljZSxcbiAgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBTQUNGSUxFQlJPV1NFUl9TRVJWSUNFLFxuICBTYWNEZWZhdWx0RmlsZUJyb3dzZXJTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zYWMtZmlsZWJyb3dzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhYy1sb2NhbGlzYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJQnJvd3NlckZpbGUgfSBmcm9tICcuL21vZGVscy9icm93c2VyZmlsZSc7XG5pbXBvcnQgeyBJQnJvd3NlckZpbGVSZXNwb25zZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJmaWxlcmVzcG9uc2UnO1xuaW1wb3J0IHsgSUJyb3dzZXJOb2RlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3Nlcm5vZGUnO1xuaW1wb3J0IHsgSUJyb3dzZXJOb2RlUmVzcG9uc2UgfSBmcm9tICcuL21vZGVscy9icm93c2Vybm9kZXJlc3BvbnNlJztcblxuLyoqXG4gKiBCYXNlIENvbXBvbmVudCBmw7xyIEZpbGUgQnJvd3NlclxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYWNGaWxlQnJvd3NlckNvbW1vbiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vICNyZWdpb24gUHJvcGVydGllc1xuXG4gIC8qKlxuICAgKiBTZXJ2aWNlIGbDvHIgRmlsZSBCcm93c2VyIFp1Z3JpZmYgKEJhY2tlbmQpXG4gICAqL1xuICBwcml2YXRlIGJyb3dzZXJTZXJ2aWNlOiBJU2FjRmlsZUJyb3dzZXJTZXJ2aWNlO1xuICAvKipcbiAgICogSWNvbiBzZXJ2aWNlIHRvIHJlY2VpdmUgaWNvbiBjbGFzc2VzIGZvciB1aVxuICAgKi9cbiAgcHJpdmF0ZSBpY29uU2VydmljZTogSVNhY0ljb25TZXJ2aWNlO1xuICAvKipcbiAgICogRmlsZSB3ZWxjaGVzIGJlaW0gc3RhcnRlbiBkZXMgQnJvd3NlcnMgYmVyZWl0cyBzZWxla3RpZXJ0IGlzdFxuICAgKi9cbiAgcHJpdmF0ZSBwcmVzZWxlY2VkZmlsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEVybGF1YnRlIERhdGVpZXJ3ZWl0ZXJ1bmdlbiBmw7xyIEZpbGVhdXN3YWhsIHVuZCBVcGxvYWQuIERhdGVpZXJ3ZWl0ZXJ1bmcgbWl0IFB1bmt0IHVuZFxuICAgKiBnZXRyZW5udCBkdXJjaCBLb21tYSBmw7xyIG1laHIgYWxzIGVpbmUgRXJ3ZWl0ZXJ1bmcgKEV4YW1wbGU6IFwiLmpwZywuZ2lmXCIpXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxsb3dlZHR5cGVzOiBzdHJpbmcgPSAnJztcbiAgLyoqXG4gICAqIEVybGF1YnQgZGFzIGzDtnNjaGVuIGVpbmVyIERhdGVpXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxsb3dmaWxlZGVsZXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEVybGF1YnQgZGFzIHVtYmVuZW5uZW4gZWluZXIgRGF0ZWlcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbGxvd2ZpbGVyZW5hbWU6IGJvb2xlYW4gPSB0cnVlO1xuICAvKipcbiAgICogRXJsYXVidCBkZW4gVXBsb2FkIHZvbiBEYXRlaWVuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxsb3dmaWxldXBsb2FkOiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEVybGF1YnQgZGFzIGVyc3RlbGxlbiBlaW5lcyBuZXVlbiBPcmRuZXJzXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxsb3dmb2xkZXJjcmVhdGU6IGJvb2xlYW4gPSB0cnVlO1xuICAvKipcbiAgICogRXJsYXVidCBkYXMgbMO2c2NoZW4gZWluZXMgT3JkbmVyc1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFsbG93Zm9sZGVyZGVsZXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEVybGF1YnQgZGFzIFVtYmVuZW5uZW4gZWluZXMgT3JkbmVyc1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFsbG93Zm9sZGVycmVuYW1lOiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqXG4gICAqIFVSTCBmw7xyIEJhY2tlbmQgQVBJXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYXBpdXJsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPdXRwdXQgRW1pdHRlciB3ZW5uIEZpbGUgc2VsZWt0aWVydCB3aXJkLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmaWxlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBTZXJ2aWNlIGbDvHIgRXJyb3IgTG9jYWxpc2F0aW9uXG4gICAqL1xuICBwdWJsaWMgbG5nUmVzb3VyY2VTZXJ2aWNlOiBJU2FjTG9jYWxpc2F0aW9uU2VydmljZTtcbiAgLyoqXG4gICAqIFJvb3QgTm9kZSBJdGVtIGbDvHIgVHJlZVxuICAgKi9cbiAgcHVibGljIHJvb3ROb2RlOiBJQnJvd3Nlck5vZGUgPSB7XG4gICAgTmFtZTogJycsXG4gICAgQ2hpbGROb2RlczogW10sXG4gICAgRmlsZXM6IFtdLFxuICAgIElzRXhwYW5kZWQ6IHRydWUsXG4gICAgSXNFZGl0TW9kZTogZmFsc2UsXG4gICAgSXNOZXdOb2RlOiBmYWxzZSxcbiAgICBQYXRoOiAnJyxcbiAgfTtcbiAgLyoqXG4gICAqIFNlbGVjdGVkIEZpbGUgTmFtZVxuICAgKi9cbiAgcHVibGljIHNlbGVjdGVkRmlsZTogc3RyaW5nO1xuICAvKipcbiAgICogU2VsZWN0ZWQgRmlsZSBJdGVtXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0ZWRGaWxlSXRlbTogSUJyb3dzZXJGaWxlID0gbnVsbDtcbiAgLyoqXG4gICAqIFNlbGVjdGVkIE5vZGUgSXRlbVxuICAgKi9cbiAgcHVibGljIHNlbGVjdGVkTm9kZTogSUJyb3dzZXJOb2RlID0gbnVsbDtcbiAgLyoqXG4gICAqIExpc3RlIHZvbiBVcGxvYWRzXG4gICAqL1xuICBwdWJsaWMgdXBsb2Fkczogc3RyaW5nW10gPSBbXTtcbiAgLyoqXG4gICAqIFNlcnZpY2UgdG8gcmVjZWl2ZSBzdGFuZGFyZCB2YWxpZGF0aW9uIG1lc3NhZ2Uga2V5cyBhbmQgdGV4dHNcbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0aW9uS2V5U2VydmljZTogSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlO1xuXG4gIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xuXG4gIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgLyoqXG4gICAqIEtvbnN0cnVrdG9yXG4gICAqIEBwYXJhbSBodHRwY2xpZW50IEFuZ3VsYXIgSFRUUCBDbGllbnRcbiAgICogQHBhcmFtIGluamVjdG9yIFNlcnZpY2UgSW5qZWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKGh0dHBjbGllbnQ6IEh0dHBDbGllbnQsIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHRoaXMuYnJvd3NlclNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXG4gICAgICBTQUNGSUxFQlJPV1NFUl9TRVJWSUNFLFxuICAgICAgbmV3IFNhY0RlZmF1bHRGaWxlQnJvd3NlclNlcnZpY2UoaHR0cGNsaWVudClcbiAgICApO1xuICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXG4gICAgICBTQUNWQUxJREFUSU9OS0VZX1NFUlZJQ0UsXG4gICAgICBuZXcgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlKClcbiAgICApO1xuICAgIHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxuICAgICAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXG4gICAgICBuZXcgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UodGhpcy52YWxpZGF0aW9uS2V5U2VydmljZSlcbiAgICApO1xuXG4gICAgdGhpcy5pY29uU2VydmljZSA9IGluamVjdG9yLmdldChcbiAgICAgIFNBQ0lDT05fU0VSVklDRSxcbiAgICAgIG5ldyBTYWNEZWZhdWx0SWNvblNlcnZpY2UoKVxuICAgICk7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcblxuICAvKipcbiAgICogU2V0enQgZGVuIFNlbGVjZWQgTm9kZSDDvGJlciBkZW4gUGZhZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZGZpbGUodjogc3RyaW5nIHwgbnVsbCkge1xuICAgIGNvbnN0IHNlbGVjdGVkbm9kZSA9IHRoaXMuZmluZFNlbGVjdGVkTm9kZUJ5UGF0aCh0aGlzLnJvb3ROb2RlLCB2KTtcblxuICAgIGlmIChzZWxlY3RlZG5vZGUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0Tm9kZShzZWxlY3RlZG5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMucHJlc2VsZWNlZGZpbGUgPSB2O1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBpY29uIGNsYXNzIGZvciBkZWxldGUgaWNvblxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGljb25EZWxldGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50RGVsZXRlSWNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDU1MgaWNvbiBjbGFzcyBmb3IgZWRpdCBpY29uXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaWNvbkVkaXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50RWRpdEljb247XG4gIH1cblxuICAvKipcbiAgICogQ1NTIGljb24gZm9yIGZvbGRlcnMgaW4gdHJlZSB0aGVyZSBhcmUgY29sbGFic2VkXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaWNvbkZvbGRlckNvbGxhYnNlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRGb2xkZXJDbG9zZWRJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBpY29uIGNsYXNzIGZvciBmb2xkZXJzIHdpdGhvdXQgc3ViZm9sZGVyc1xuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJFbXB0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRGb2xkZXJFbXB0eUljb247XG4gIH1cblxuICAvKipcbiAgICogQ1NTIGljb24gZm9yIG5ldyBmb2xkZXJzIGFjdGlvblxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJOZXcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50Rm9sZGVyTmV3SWNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDU1MgaWNvbiBmb3IgZm9sZGVycyBpbiB0cmVlIHRoZXJlIGFyZSBleHBhbmRlZFxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJPcGVuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlck9wZW5JY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBpY29uIGNsYXNzIGZvciByZWZyZXNoIGljb25cbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxuICAgKi9cbiAgcHVibGljIGdldCBpY29uUmVmcmVzaCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRSZWZyZXNoSWNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgZsO8ciBTZWxlY3RlZCBGaWxlLiBJc3QgYW4gSW5wdXQgUHJvcGVydHkgZ2VidW5kZW5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRmaWxlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLnNlbGVjdEZpbGUgJiYgdGhpcy5zZWxlY3RGaWxlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xuXG4gIC8vICNyZWdpb24gUHVibGljIE1ldGhvZHNcblxuICAvKipcbiAgICogSG9zdExpc3RlbmVyIHdlbGNoZXIgZGVuIEVkaXQgTW9kZSBiZWkgYWxsZW4gRmlsZXMgdW5kIE5vZGVzIGJlZW5kZXQuXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxuICAvKipcbiAgICogQ2xpY2sgRXZlbnRcbiAgICovXG4gIHB1YmxpYyBleGl0RWRpdE1vZGUodGFyZ2V0RWxlbWVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkTm9kZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMuZm9yRWFjaCgoaXRtKSA9PiAoaXRtLklzRWRpdE1vZGUgPSBmYWxzZSkpO1xuXG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLnNlbGVjdGVkTm9kZSB8fFxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5OYW1lID09PSBudWxsIHx8XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLk5hbWUubGVuZ3RoID09PSAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jbGVhck5ld0NoaWxkTm9kZXModGhpcy5yb290Tm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldE5vZGVFZGl0TW9kZShudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMw7ZzY2h0IGVpbiBGaWxlXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgd2VsY2hlcyBnZWzDtnNjaHQgd2VyZGVuIHNvbGxcbiAgICovXG4gIHB1YmxpYyBkZWxldGVGaWxlKGZpbGU6IElCcm93c2VyRmlsZSk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybURlbGV0ZUZpbGUoZmlsZSkuc3Vic2NyaWJlKChjb25maXJtKSA9PiB7XG4gICAgICBpZiAoY29uZmlybSkge1xuICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgICAgLkRlbGV0ZUZpbGUoXG4gICAgICAgICAgICB0aGlzLmFwaXVybCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLlBhdGggKyAnLycgKyBmaWxlLkZpbGVuYW1lLFxuICAgICAgICAgICAgdGhpcy5hbGxvd2VkdHlwZXNcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTMO2c2NodCBlaW5lbiBOb2RlXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciBnZWzDtnNjaHQgd2VyZGVuIHNvbGxcbiAgICovXG4gIHB1YmxpYyBkZWxldGVOb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybURlbGV0ZU5vZGUobm9kZSkuc3Vic2NyaWJlKChjb25maXJtKSA9PiB7XG4gICAgICBpZiAoY29uZmlybSkge1xuICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgICAgLkRlbGV0ZU5vZGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aClcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5maW5kUGFyZW50Tm9kZSh0aGlzLnJvb3ROb2RlLCBub2RlKTtcbiAgICAgICAgICAgIHBhcmVudE5vZGUuQ2hpbGROb2RlcyA9IHJlc3VsdC5Ob2RlLkNoaWxkTm9kZXM7XG5cbiAgICAgICAgICAgIHRoaXMucm9vdE5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5maWxsUGF0aChpdG0sICcnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGUocGFyZW50Tm9kZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0enQgZWluIEZpbGUgaW4gZGVuIEVkaXQgTW9kZVxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHdlbGNoZXMgaW4gZGVuIEVkaXQgTW9kZSBnZXNldHp0IHdlcmRlbiBzb2xsXG4gICAqL1xuICBwdWJsaWMgZWRpdEZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKTogdm9pZCB7XG4gICAgZmlsZS5Jc0VkaXRNb2RlID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR6dCBlaW5lbiBOb2RlIGluIGRlbiBFZGl0IE1vZGVcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIGJlYXJiZWl0ZXQgd2VyZGVuIHNvbGxcbiAgICovXG4gIHB1YmxpYyBlZGl0Tm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcbiAgICBub2RlLklzRWRpdE1vZGUgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVyemV1Z3QgZWluZW4gbmV1ZW4gTm9kZSBpbSBUcmVlXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgdW50ZXIgd2VsY2hlbSBlaW4gbmV1ZXIgTm9kZSBlcnN0ZWxsdCB3ZXJkZW4gc29sbFxuICAgKi9cbiAgcHVibGljIG5ld05vZGUobm9kZTogSUJyb3dzZXJOb2RlKSB7XG4gICAgY29uc3QgaXRlbTogSUJyb3dzZXJOb2RlID0ge1xuICAgICAgQ2hpbGROb2RlczogW10sXG4gICAgICBGaWxlczogW10sXG4gICAgICBJc0VkaXRNb2RlOiBmYWxzZSxcbiAgICAgIElzRXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgTmFtZTogJycsXG4gICAgICBQYXRoOiBub2RlLlBhdGgsXG4gICAgICBJc05ld05vZGU6IHRydWUsXG4gICAgfTtcblxuICAgIG5vZGUuQ2hpbGROb2Rlcy5wdXNoKGl0ZW0pO1xuICAgIHRoaXMuc2VsZWN0Tm9kZShpdGVtKTtcbiAgICB0aGlzLmVkaXROb2RlKGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgRXZlbnQgZGVyIEtvbXBvbmVudGVcbiAgICovXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAuR2V0Tm9kZSh0aGlzLmFwaXVybCwgJycsIHRoaXMuYWxsb3dlZHR5cGVzKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLnJvb3ROb2RlID0ge1xuICAgICAgICAgIE5hbWU6IHJlc3VsdC5Ob2RlLk5hbWUsXG4gICAgICAgICAgRmlsZXM6IHJlc3VsdC5Ob2RlLkZpbGVzLFxuICAgICAgICAgIENoaWxkTm9kZXM6IHJlc3VsdC5Ob2RlLkNoaWxkTm9kZXMsXG4gICAgICAgICAgSXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgICBJc0VkaXRNb2RlOiBmYWxzZSxcbiAgICAgICAgICBJc05ld05vZGU6IGZhbHNlLFxuICAgICAgICAgIFBhdGg6ICcvJyxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnNldFBhdGhUb0FsbE5vZGVzKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gdGhpcy5yb290Tm9kZTtcblxuICAgICAgICAvLyBTZWxlY3RlZCBGaWxlIGVybmV1dCBzZXR6ZW4sIHdlbm4gUHJvcGVydHkgZ2VzZXR6dCB3dXJkZSBiZXZvciBEYXRlbiB2b20gU2VydmljZSBnZWxhZGVuIHd1cmRlbi5cbiAgICAgICAgaWYgKHRoaXMucHJlc2VsZWNlZGZpbGUgIT09IG51bGwgJiYgdGhpcy5wcmVzZWxlY2VkZmlsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZGZpbGUgPSB0aGlzLnByZXNlbGVjZWRmaWxlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBa3R1YWxpc2llcnQgZGVuIE5vZGVcbiAgICovXG4gIHB1YmxpYyByZWZyZXNoTm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcbiAgICBpZiAoIW5vZGUuSXNFeHBhbmRlZCkge1xuICAgICAgdGhpcy5zd2l0Y2hFeHBhbmROb2RlKG5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcbiAgICAgIC5HZXROb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIHRoaXMuYWxsb3dlZHR5cGVzKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xuICAgICAgICBub2RlLkNoaWxkTm9kZXMgPSByZXN1bHQuTm9kZS5DaGlsZE5vZGVzO1xuICAgICAgICBub2RlLkZpbGVzID0gcmVzdWx0Lk5vZGUuRmlsZXM7XG5cbiAgICAgICAgdGhpcy5zZXRQYXRoVG9BbGxOb2RlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kZSB3ZW5uIGVpbmUgRGF0ZWkgdW1iZW5hbm50IHdlcmRlbiBzb2xsXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgd2VsY2hlcyB1bWJlbmFubnQgd2VyZGVuIHNvbGxcbiAgICogQHBhcmFtIG5ld0ZpbGVuYW1lIE5ldWVyIERhdGVpbmFtZVxuICAgKi9cbiAgcHVibGljIHJlbmFtZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlLCBuZXdGaWxlbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgZmlsZS5Jc0VkaXRNb2RlID0gZmFsc2U7XG5cbiAgICBpZiAoIW5ld0ZpbGVuYW1lIHx8IG5ld0ZpbGVuYW1lID09PSBudWxsIHx8IG5ld0ZpbGVuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gQ2FuY2VsLCBJbnZhbGlkIEZpbGVuYW1lXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuRmlsZW5hbWUgIT09IG5ld0ZpbGVuYW1lKSB7XG4gICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgIC5SZW5hbWVGaWxlKFxuICAgICAgICAgIHRoaXMuYXBpdXJsLFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLlBhdGggKyAnLycgKyBmaWxlLkZpbGVuYW1lLFxuICAgICAgICAgIG5ld0ZpbGVuYW1lLFxuICAgICAgICAgIHRoaXMuYWxsb3dlZHR5cGVzXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzID0gcmVzdWx0LkZpbGVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kZSB3ZW5uIGVpbiBOb2RlIHVtYmVuYW5udCB3ZXJkZW4gc29sbFxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIHdlbGNoZXIgdW1iZW5hbm50IHdlcmRlbiBzb2xsXG4gICAqIEBwYXJhbSBuZXdGb2xkZXJuYW1lIE5ldWVyIE9yZG5lcm5hbWVcbiAgICovXG4gIHB1YmxpYyByZW5hbWVOb2RlKG5vZGU6IElCcm93c2VyTm9kZSwgbmV3Rm9sZGVybmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbm9kZS5Jc0VkaXRNb2RlID0gZmFsc2U7XG5cbiAgICBpZiAoIW5vZGUuSXNOZXdOb2RlKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFuZXdGb2xkZXJuYW1lIHx8XG4gICAgICAgIG5ld0ZvbGRlcm5hbWUgPT09IG51bGwgfHxcbiAgICAgICAgbmV3Rm9sZGVybmFtZS5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICAvLyBDYW5jZWwgUmVuYW1lLiBJbnZhbGlkIEZvbGRlcm5hbWVcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5OYW1lICE9PSBuZXdGb2xkZXJuYW1lKSB7XG4gICAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcbiAgICAgICAgICAuUmVuYW1lTm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCBuZXdGb2xkZXJuYW1lKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIG5vZGUuTmFtZSA9IHJlc3VsdC5Ob2RlLk5hbWU7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICAhbmV3Rm9sZGVybmFtZSB8fFxuICAgICAgICBuZXdGb2xkZXJuYW1lID09PSBudWxsIHx8XG4gICAgICAgIG5ld0ZvbGRlcm5hbWUubGVuZ3RoID09PSAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jbGVhck5ld0NoaWxkTm9kZXModGhpcy5yb290Tm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5OYW1lID0gbmV3Rm9sZGVybmFtZTtcbiAgICAgIG5vZGUuSXNOZXdOb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgIC5TYXZlTm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCBuZXdGb2xkZXJuYW1lKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgbm9kZS5OYW1lID0gcmVzdWx0Lk5vZGUuTmFtZTtcbiAgICAgICAgICBub2RlLkZpbGVzID0gcmVzdWx0Lk5vZGUuRmlsZXM7XG5cbiAgICAgICAgICB0aGlzLnNldFBhdGhUb0FsbE5vZGVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2RlIHdlbm4gZWluIEZpbGUgc2VsZWt0aWVydCB3aXJkXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgd2VsY2hlcyBzZWxla3RpZXJ0IHdpcmRcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RGaWxlKGZpbGU6IElCcm93c2VyRmlsZSkge1xuICAgIGlmICghZmlsZS5Jc0VkaXRNb2RlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcy5mb3JFYWNoKChpdG0pID0+IChpdG0uSXNFZGl0TW9kZSA9IGZhbHNlKSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZS5QYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZE5vZGUuUGF0aCArICcvJyArIGZpbGUuRmlsZW5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gJy8nICsgZmlsZS5GaWxlbmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkRmlsZUl0ZW0gPSBmaWxlO1xuICAgIHRoaXMuZmlsZS5lbWl0KHRoaXMuc2VsZWN0ZWRGaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2RlIHdlbm4gZWluIE5vZGUgc2VsZWt0aWVydCB3aXJkXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciBzZWxla3RpZXJ0IHdlcmRlbiBzb2xsXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0Tm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcbiAgICBpZiAoIW5vZGUuSXNFeHBhbmRlZCkge1xuICAgICAgdGhpcy5zd2l0Y2hFeHBhbmROb2RlKG5vZGUpO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IHRoZSBFZGl0IE1vZGUgaW4gYWxsIE5vZGVzXG4gICAgdGhpcy5yZXNldE5vZGVFZGl0TW9kZShudWxsKTtcblxuICAgIGlmICghbm9kZS5GaWxlcykge1xuICAgICAgdGhpcy5icm93c2VyU2VydmljZVxuICAgICAgICAuR2V0RmlsZXModGhpcy5hcGl1cmwsIG5vZGUuUGF0aCwgdGhpcy5hbGxvd2VkdHlwZXMpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJGaWxlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBub2RlLkZpbGVzID0gcmVzdWx0LkZpbGVzO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZTtcblxuICAgICAgICAgIGlmICh0aGlzLnByZXNlbGVjZWRmaWxlICE9PSBudWxsICYmIHRoaXMucHJlc2VsZWNlZGZpbGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnByZXNlbGVjZWRmaWxlLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgdGhpcy5wcmVzZWxlY2VkZmlsZS5sYXN0SW5kZXhPZignLycpICsgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBub2RlLkZpbGVzLmZpbmQoKGl0bSkgPT4gaXRtLkZpbGVuYW1lID09PSBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZpbGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmQvQ29sbGFic2UgTWV0aG9kZSBmw7xyIE5vZGVzXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciBnZcO2ZmZuZXQgb2RlciBnZXNjaGxvc3NlbiB3ZXJkZW4gc29sbFxuICAgKi9cbiAgcHVibGljIHN3aXRjaEV4cGFuZE5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XG4gICAgaWYgKG5vZGUuSXNFeHBhbmRlZCkge1xuICAgICAgbm9kZS5Jc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuSXNFeHBhbmRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZGUgZGllIEF1ZmdlcnVmZW4gd2VyZGVuIG11c3MsIHdlbm4gZWluIFVwbG9hZCBiZWVuZGV0IGlzdC5cbiAgICogQHBhcmFtIHBhcmFtIFBhcmFtZXRlciBkZXMgaG9jaGdlbGFkZW5lbiBGaWxlc1xuICAgKi9cbiAgcHVibGljIHVwbG9hZENvbXBsZXRlKG5vZGU6IElCcm93c2VyTm9kZSwgdXBsb2FkSWRMaXN0OiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICh1cGxvYWRJZExpc3QgIT09IG51bGwpIHtcbiAgICAgIHVwbG9hZElkTGlzdC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVwbG9hZHMuaW5kZXhPZihlbGVtZW50KSA8IDApIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSB0aGlzLnVwbG9hZHMucG9wKCk7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgIC5TYXZlRmlsZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCBpZCwgdGhpcy5hbGxvd2VkdHlwZXMpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJGaWxlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZU1vdmVkKGlkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gIC8vICNyZWdpb24gUHVibGljIEFic3RyYWN0IE1ldGhvZHNcblxuICAvKipcbiAgICogQWJzdHJha3RlIENvbmZpcm0gTWV0aG9kZSB3ZWxjaGUgaW1wbGVtZW50aWVydCB3ZXJkZW4gbXVzcy4gTWV0aG9kZSB3aXJkIGF1ZmdlcnVmZW4sIHdlbm4gZWluZVxuICAgKiBEYXRlaSBnZWzDtnNjaHQgd2VyZGVuIHNvbGwuXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgZsO8ciB3ZWxjaGVzIGVpbiBEZWxldGUgQ29uZmlybSBlaW5nZWZvcmRlcnQgd2VyZGVuIHNvbGxcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBjb25maXJtRGVsZXRlRmlsZShmaWxlOiBJQnJvd3NlckZpbGUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKipcbiAgICogQWJzdHJha3RlIENvbmZpcm0gTWV0aG9kZSB3ZWxjaGUgaW1wbGVtZW50aWVydCB3ZXJkZW4gbXVzcy4gTWV0aG9kZSB3aXJkIGF1ZmdlcnVmZW4sIHdlbm4gZWluXG4gICAqIE9yZG5lciBnZWzDtnNjaHQgd2VyZGVuIHNvbGwuXG4gICAqIEBwYXJhbSBmb2xkZXIgT3JkZXJuIGbDvHIgd2VsY2hlbiBlaW4gRGVsZXRlIENvbmZpcm0gZWluZ2Vmb3JkZXJ0IHdlcmRlbiBzb2xsLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGNvbmZpcm1EZWxldGVOb2RlKGZvbGRlcjogSUJyb3dzZXJOb2RlKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIEFic3RyYWt0ZSBNZXRob2RlIGRpZSBBdWZnZXJ1ZmVuIHdpcmQsIHdlbm4gZGFzIEhvY2hnZWxhZGVuZSBGaWxlIGF1cyBkZW0gVGVtcCBGb2xkZXIgaW4gZGllXG4gICAqIFN0cnVrdHVyIHZlcnNjaG9iZW4gd3VyZGUuXG4gICAqIEBwYXJhbSB1cGxvYWRpZCBJRCBkZXMgVXBsb2Fkc1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHVwbG9hZGVkRmlsZU1vdmVkKHVwbG9hZGlkOiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8vICNlbmRyZWdpb24gUHVibGljIEFic3RyYWN0IE1ldGhvZHNcblxuICAvLyAjcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xuXG4gIC8qKlxuICAgKiBSZWt1cnNpdmUgTWV0aG9kZSB3ZWxjaGUgYmVpbSBOb2RlIHVuZCBhbGwgc2VpbmVuIENoaWxkcyBuZXVlIE5vZGVzIGVudGZlcm50XG4gICAqIEBwYXJhbSBub2RlIE5vZGUgYmVpIHdlbGNoZW0gYWxsZSBuZXVlbiBOb2RlcyBlbnRmZXJudCB3ZXJkZW4gc29sbC5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJOZXdDaGlsZE5vZGVzKG5vZGU6IElCcm93c2VyTm9kZSkge1xuICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgIGlmIChpdG0uSXNOZXdOb2RlKSB7XG4gICAgICAgIG5vZGUuQ2hpbGROb2Rlcy5zcGxpY2Uobm9kZS5DaGlsZE5vZGVzLmluZGV4T2YoaXRtKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBub2RlLkNoaWxkTm9kZXMuZm9yRWFjaCgoaXRtKSA9PiB0aGlzLmNsZWFyTmV3Q2hpbGROb2RlcyhpdG0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2RlIHdlbGNoZSBkZW4gUGZhZCBmw7xyIGVpbmVuIE5vZGUgZXJ6ZXVndFxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGbDvHIgd2VsY2hlbiBkZXIgUGZhZCBlcnpldWd0IHdlcmRlbiBzb2xsXG4gICAqIEBwYXJhbSBwYXJlbnRQYXRoIMOcYmVyZ2VvcmRuZXRlciBQZmFkXG4gICAqL1xuICBwcml2YXRlIGZpbGxQYXRoKG5vZGU6IElCcm93c2VyTm9kZSwgcGFyZW50UGF0aDogc3RyaW5nKSB7XG4gICAgbm9kZS5QYXRoID0gcGFyZW50UGF0aCArICcvJyArIG5vZGUuTmFtZTtcbiAgICBub2RlLkNoaWxkTm9kZXMuZm9yRWFjaCgoaXRtKSA9PiB7XG4gICAgICB0aGlzLmZpbGxQYXRoKGl0bSwgbm9kZS5QYXRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWNodCBkZW4gw7xiZXJnZW9yZG5ldGVuIE5vZGUgaW0gVHJlZVxuICAgKiBAcGFyYW0gbm9kZSBBa3R1ZWxsZXIgTm9kZVxuICAgKiBAcGFyYW0gbm9kZVRvRmluZCBOb2RlIHdlbGNoZXIgZ2VmdW5kZW4gd2VyZGVuIHNvbGxcbiAgICogQHJldHVybnMgTm9kZSB3ZW5uIGVyIGdlZnVuZGVuIHd1cmRlLCBhbnNvbnN0ZW4gd2lyZCBOVUxMIHp1csO8Y2tnZWdlYmVuXG4gICAqL1xuICBwcml2YXRlIGZpbmRQYXJlbnROb2RlKFxuICAgIG5vZGU6IElCcm93c2VyTm9kZSxcbiAgICBub2RlVG9GaW5kOiBJQnJvd3Nlck5vZGVcbiAgKTogSUJyb3dzZXJOb2RlIHtcbiAgICBpZiAobm9kZS5DaGlsZE5vZGVzLmluZGV4T2Yobm9kZVRvRmluZCkgPj0gMCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLkNoaWxkTm9kZXMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFBhcmVudE5vZGUoY2hpbGQsIG5vZGVUb0ZpbmQpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Y2h0IGVpbmVuIE5vZGUgZ2VtLiBlaW5lbSBVUkwgUGZhZFxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdlbGNoZW0gZ2VzdWNodCB3ZXJkZW4gc29sbFxuICAgKiBAcGFyYW0gcGF0aCBQZmFkIG5hY2ggd2VsY2hlbSBnZXN1Y2h0IHdpcmRcbiAgICogQHJldHVybnMgTm9kZSB3ZWxjaGVyIHp1bSBnZXN1Y2h0ZW4gUGZhZCBwYXNzdC4gV2VubiBrZWluIE5vZGUgZ2VmdW5kZW4gd2lyZCwgd2lyZCBOVUxMIHp1csO8Y2tnZWdlYmVuXG4gICAqL1xuICBwcml2YXRlIGZpbmRTZWxlY3RlZE5vZGVCeVBhdGgoXG4gICAgbm9kZTogSUJyb3dzZXJOb2RlLFxuICAgIHBhdGg6IHN0cmluZ1xuICApOiBJQnJvd3Nlck5vZGUge1xuICAgIC8vIENhbmNlbCB3ZW5uIFBmYWQgbmljaHQgZGVmaW5pZXJ0XG4gICAgaWYgKHBhdGggPT09IHVuZGVmaW5lZCB8fCBwYXRoID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBQZmFkIGluIEFycmF5IHNwbGl0dGVuIHVuZCBSb290IEZvbGRlcm5hbWUgc2V0emVuXG4gICAgY29uc3QgcGF0aEFycmF5ID0gcGF0aC5zcGxpdCgnLycpO1xuICAgIHBhdGhBcnJheVswXSA9IHRoaXMucm9vdE5vZGUuTmFtZTtcblxuICAgIHJldHVybiB0aGlzLmZpbmRTZWxlY3RlZE5vZGVCeVBhdGhBcnJheShub2RlLCBwYXRoQXJyYXksIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Y2h0IGVpbmVuIE5vZGUgZ2VtLiBlaW5lbSBBcnJheSB2b24gTm9kZSBOYW1lblxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdlbGNoZW0gZ2VzdWNodCB3ZXJkZW4gc29sbFxuICAgKiBAcGFyYW0gcGF0aCBBcnJheSB2b24gTm9kZSBOYW1lbiwgd2VsY2hlIGRpZSBIaXJhcmNoeSBkZXMgUGZhZGVzIGFiYmlsZGVuXG4gICAqIEBwYXJhbSBpbmRleCBBa3R1ZWxsZXIgSW5kZXggaW0gUEFUSCBBcnJheVxuICAgKiBAcmV0dXJucyBOb2RlIHdlbm4gZWluZXIgZ2VmdW5kZW4gd3VyZGUsIGFuc29uc3RlbiBOVUxMXG4gICAqL1xuICBwcml2YXRlIGZpbmRTZWxlY3RlZE5vZGVCeVBhdGhBcnJheShcbiAgICBub2RlOiBJQnJvd3Nlck5vZGUsXG4gICAgcGF0aDogc3RyaW5nW10sXG4gICAgaW5kZXg6IG51bWJlclxuICApOiBJQnJvd3Nlck5vZGUge1xuICAgIC8vIENoZWNrIG9iIE9yZG5lciBrb3JyZWt0LiBMZXR6ZXIgT3JkbmVyIHp1csO8Y2tnZWJlbi4gUGF0aCBMYXN0IEluZGV4IGlzdCBkZXIgRmlsZW5hbWVcbiAgICBpZiAobm9kZS5OYW1lID09PSBwYXRoW2luZGV4XSAmJiBwYXRoLmxlbmd0aCAtIDIgPT09IGluZGV4KSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuTmFtZSA9PT0gcGF0aFtpbmRleF0pIHtcbiAgICAgIC8vIEV4cGFuZCBOb2RlXG4gICAgICBub2RlLklzRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5vZGUuQ2hpbGROb2Rlcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRTZWxlY3RlZE5vZGVCeVBhdGhBcnJheShpdGVtLCBwYXRoLCBpbmRleCArIDEpO1xuXG4gICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJla3Vyc2l2ZSBNZXRob2RlIHdlbGNoZSBiZWltIE5vZGUgdW5kIGFsbCBzZWluZW4gQ2hpbGRzIGRlbiBFZGl0IE1vZGUgYmVlbmRldC5cbiAgICogQHBhcmFtIG5vZGUgTm9kZSBiZWkgd2VsY2hlbSBkZXIgRWRpdCBNb2RlIGJlZW5kZXQgd2VyZGVuIHNvbGxcbiAgICovXG4gIHByaXZhdGUgcmVzZXROb2RlRWRpdE1vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVzZXROb2RlRWRpdE1vZGUodGhpcy5yb290Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuSXNFZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgICBpZiAobm9kZS5DaGlsZE5vZGVzKSB7XG4gICAgICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHRoaXMucmVzZXROb2RlRWRpdE1vZGUoaXRtKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHp0IGRlbiBQZmFkIGluIGFsbGVuIE5vZGVzXG4gICAqL1xuICBwcml2YXRlIHNldFBhdGhUb0FsbE5vZGVzKCkge1xuICAgIHRoaXMucm9vdE5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgIHRoaXMuZmlsbFBhdGgoaXRtLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xufVxuIl19
146
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEaXJlY3RpdmUiLCJFdmVudEVtaXR0ZXIiLCJIb3N0TGlzdGVuZXIiLCJJbnB1dCIsIk91dHB1dCIsIlNBQ0lDT05fU0VSVklDRSIsIlNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFIiwiU0FDVkFMSURBVElPTktFWV9TRVJWSUNFIiwiU2FjRGVmYXVsdEljb25TZXJ2aWNlIiwiU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlIiwiU0FDRklMRUJST1dTRVJfU0VSVklDRSIsIlNhY0RlZmF1bHRGaWxlQnJvd3NlclNlcnZpY2UiLCJTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSIsIlNhY0ZpbGVCcm93c2VyQ29tbW9uIiwiY29uc3RydWN0b3IiLCJodHRwY2xpZW50IiwiaW5qZWN0b3IiLCJjb3ZfMTNhajZpbXBrdiIsImYiLCJzIiwicHJlc2VsZWNlZGZpbGUiLCJhbGxvd2VkdHlwZXMiLCJhbGxvd2ZpbGVkZWxldGUiLCJhbGxvd2ZpbGVyZW5hbWUiLCJhbGxvd2ZpbGV1cGxvYWQiLCJhbGxvd2ZvbGRlcmNyZWF0ZSIsImFsbG93Zm9sZGVyZGVsZXRlIiwiYWxsb3dmb2xkZXJyZW5hbWUiLCJmaWxlIiwicm9vdE5vZGUiLCJOYW1lIiwiQ2hpbGROb2RlcyIsIkZpbGVzIiwiSXNFeHBhbmRlZCIsIklzRWRpdE1vZGUiLCJJc05ld05vZGUiLCJQYXRoIiwic2VsZWN0ZWRGaWxlSXRlbSIsInNlbGVjdGVkTm9kZSIsInVwbG9hZHMiLCJicm93c2VyU2VydmljZSIsImdldCIsInZhbGlkYXRpb25LZXlTZXJ2aWNlIiwibG5nUmVzb3VyY2VTZXJ2aWNlIiwiaWNvblNlcnZpY2UiLCJzZWxlY3RlZGZpbGUiLCJ2Iiwic2VsZWN0ZWRub2RlIiwiZmluZFNlbGVjdGVkTm9kZUJ5UGF0aCIsImIiLCJzZWxlY3ROb2RlIiwiaWNvbkRlbGV0ZSIsIkJyb3dzZXJDb21wb25lbnREZWxldGVJY29uIiwiaWNvbkVkaXQiLCJCcm93c2VyQ29tcG9uZW50RWRpdEljb24iLCJpY29uRm9sZGVyQ29sbGFic2VkIiwiQnJvd3NlckNvbXBvbmVudEZvbGRlckNsb3NlZEljb24iLCJpY29uRm9sZGVyRW1wdHkiLCJCcm93c2VyQ29tcG9uZW50Rm9sZGVyRW1wdHlJY29uIiwiaWNvbkZvbGRlck5ldyIsIkJyb3dzZXJDb21wb25lbnRGb2xkZXJOZXdJY29uIiwiaWNvbkZvbGRlck9wZW4iLCJCcm93c2VyQ29tcG9uZW50Rm9sZGVyT3Blbkljb24iLCJpY29uUmVmcmVzaCIsIkJyb3dzZXJDb21wb25lbnRSZWZyZXNoSWNvbiIsInNlbGVjdEZpbGUiLCJsZW5ndGgiLCJzZWxlY3RlZEZpbGUiLCJleGl0RWRpdE1vZGUiLCJ0YXJnZXRFbGVtZW50IiwiZm9yRWFjaCIsIml0bSIsImNsZWFyTmV3Q2hpbGROb2RlcyIsInJlc2V0Tm9kZUVkaXRNb2RlIiwiZGVsZXRlRmlsZSIsImNvbmZpcm1EZWxldGVGaWxlIiwic3Vic2NyaWJlIiwiY29uZmlybSIsIkRlbGV0ZUZpbGUiLCJhcGl1cmwiLCJGaWxlbmFtZSIsInJlc3VsdCIsImRlbGV0ZU5vZGUiLCJub2RlIiwiY29uZmlybURlbGV0ZU5vZGUiLCJEZWxldGVOb2RlIiwicGFyZW50Tm9kZSIsImZpbmRQYXJlbnROb2RlIiwiTm9kZSIsImZpbGxQYXRoIiwiZWRpdEZpbGUiLCJlZGl0Tm9kZSIsIm5ld05vZGUiLCJpdGVtIiwicHVzaCIsIm5nT25Jbml0IiwiR2V0Tm9kZSIsInNldFBhdGhUb0FsbE5vZGVzIiwicmVmcmVzaE5vZGUiLCJzd2l0Y2hFeHBhbmROb2RlIiwicmVuYW1lRmlsZSIsIm5ld0ZpbGVuYW1lIiwiUmVuYW1lRmlsZSIsInJlbmFtZU5vZGUiLCJuZXdGb2xkZXJuYW1lIiwiUmVuYW1lTm9kZSIsIlNhdmVOb2RlIiwiZW5kc1dpdGgiLCJlbWl0IiwiR2V0RmlsZXMiLCJmaWxlbmFtZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZmluZCIsInVwbG9hZENvbXBsZXRlIiwidXBsb2FkSWRMaXN0IiwiZWxlbWVudCIsImluZGV4T2YiLCJpZCIsInBvcCIsIlNhdmVGaWxlIiwidXBsb2FkZWRGaWxlTW92ZWQiLCJzcGxpY2UiLCJwYXJlbnRQYXRoIiwibm9kZVRvRmluZCIsImNoaWxkIiwicGF0aCIsInVuZGVmaW5lZCIsInBhdGhBcnJheSIsInNwbGl0IiwiZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5IiwiaW5kZXgiLCJkZXBzIiwidG9rZW4iLCJpMSIsIkh0dHBDbGllbnQiLCJpMCIsIkluamVjdG9yIiwidGFyZ2V0IiwiybXJtUZhY3RvcnlUYXJnZXQiLCJpbnB1dHMiLCJvdXRwdXRzIiwiaG9zdCIsImxpc3RlbmVycyIsIm5nSW1wb3J0IiwiZGVjb3JhdG9ycyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbXBvbmVudHMvYnJvd3Nlci9icm93c2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElTYWNGaWxlQnJvd3NlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNGaWxlQnJvd3NlclNlcnZpY2UnO1xuaW1wb3J0IHsgSVNhY0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU2FjSWNvblNlcnZpY2UnO1xuaW1wb3J0IHsgSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNMb2NhbGlzYXRpb25TZXJ2aWNlJztcbmltcG9ydCB7IElTYWNWYWxpZGF0aW9uS2V5U2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlJztcbmltcG9ydCB7XG4gIFNBQ0lDT05fU0VSVklDRSxcbiAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXG4gIFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSxcbiAgU2FjRGVmYXVsdEljb25TZXJ2aWNlLFxuICBTYWNEZWZhdWx0VmFsaWRhdGlvbktleVNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7XG4gIFNBQ0ZJTEVCUk9XU0VSX1NFUlZJQ0UsXG4gIFNhY0RlZmF1bHRGaWxlQnJvd3NlclNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhYy1maWxlYnJvd3Nlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FjLWxvY2FsaXNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElCcm93c2VyRmlsZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJmaWxlJztcbmltcG9ydCB7IElCcm93c2VyRmlsZVJlc3BvbnNlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3NlcmZpbGVyZXNwb25zZSc7XG5pbXBvcnQgeyBJQnJvd3Nlck5vZGUgfSBmcm9tICcuL21vZGVscy9icm93c2Vybm9kZSc7XG5pbXBvcnQgeyBJQnJvd3Nlck5vZGVSZXNwb25zZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJub2RlcmVzcG9uc2UnO1xuXG4vKipcbiAqIEJhc2UgQ29tcG9uZW50IGbDvHIgRmlsZSBCcm93c2VyXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY0ZpbGVCcm93c2VyQ29tbW9uIGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgLyoqXG4gICAqIFNlcnZpY2UgZsO8ciBGaWxlIEJyb3dzZXIgWnVncmlmZiAoQmFja2VuZClcbiAgICovXG4gIHByaXZhdGUgYnJvd3NlclNlcnZpY2U6IElTYWNGaWxlQnJvd3NlclNlcnZpY2U7XG4gIC8qKlxuICAgKiBJY29uIHNlcnZpY2UgdG8gcmVjZWl2ZSBpY29uIGNsYXNzZXMgZm9yIHVpXG4gICAqL1xuICBwcml2YXRlIGljb25TZXJ2aWNlOiBJU2FjSWNvblNlcnZpY2U7XG4gIC8qKlxuICAgKiBGaWxlIHdlbGNoZXMgYmVpbSBzdGFydGVuIGRlcyBCcm93c2VycyBiZXJlaXRzIHNlbGVrdGllcnQgaXN0XG4gICAqL1xuICBwcml2YXRlIHByZXNlbGVjZWRmaWxlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogRXJsYXVidGUgRGF0ZWllcndlaXRlcnVuZ2VuIGbDvHIgRmlsZWF1c3dhaGwgdW5kIFVwbG9hZC4gRGF0ZWllcndlaXRlcnVuZyBtaXQgUHVua3QgdW5kXG4gICAqIGdldHJlbm50IGR1cmNoIEtvbW1hIGbDvHIgbWVociBhbHMgZWluZSBFcndlaXRlcnVuZyAoRXhhbXBsZTogXCIuanBnLC5naWZcIilcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbGxvd2VkdHlwZXM6IHN0cmluZyA9ICcnO1xuICAvKipcbiAgICogRXJsYXVidCBkYXMgbMO2c2NoZW4gZWluZXIgRGF0ZWlcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbGxvd2ZpbGVkZWxldGU6IGJvb2xlYW4gPSB0cnVlO1xuICAvKipcbiAgICogRXJsYXVidCBkYXMgdW1iZW5lbm5lbiBlaW5lciBEYXRlaVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFsbG93ZmlsZXJlbmFtZTogYm9vbGVhbiA9IHRydWU7XG4gIC8qKlxuICAgKiBFcmxhdWJ0IGRlbiBVcGxvYWQgdm9uIERhdGVpZW5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbGxvd2ZpbGV1cGxvYWQ6IGJvb2xlYW4gPSB0cnVlO1xuICAvKipcbiAgICogRXJsYXVidCBkYXMgZXJzdGVsbGVuIGVpbmVzIG5ldWVuIE9yZG5lcnNcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbGxvd2ZvbGRlcmNyZWF0ZTogYm9vbGVhbiA9IHRydWU7XG4gIC8qKlxuICAgKiBFcmxhdWJ0IGRhcyBsw7ZzY2hlbiBlaW5lcyBPcmRuZXJzXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxsb3dmb2xkZXJkZWxldGU6IGJvb2xlYW4gPSB0cnVlO1xuICAvKipcbiAgICogRXJsYXVidCBkYXMgVW1iZW5lbm5lbiBlaW5lcyBPcmRuZXJzXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxsb3dmb2xkZXJyZW5hbWU6IGJvb2xlYW4gPSB0cnVlO1xuICAvKipcbiAgICogVVJMIGbDvHIgQmFja2VuZCBBUElcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcGl1cmw6IHN0cmluZztcbiAgLyoqXG4gICAqIE91dHB1dCBFbWl0dGVyIHdlbm4gRmlsZSBzZWxla3RpZXJ0IHdpcmQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGZpbGU6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIFNlcnZpY2UgZsO8ciBFcnJvciBMb2NhbGlzYXRpb25cbiAgICovXG4gIHB1YmxpYyBsbmdSZXNvdXJjZVNlcnZpY2U6IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlO1xuICAvKipcbiAgICogUm9vdCBOb2RlIEl0ZW0gZsO8ciBUcmVlXG4gICAqL1xuICBwdWJsaWMgcm9vdE5vZGU6IElCcm93c2VyTm9kZSA9IHtcbiAgICBOYW1lOiAnJyxcbiAgICBDaGlsZE5vZGVzOiBbXSxcbiAgICBGaWxlczogW10sXG4gICAgSXNFeHBhbmRlZDogdHJ1ZSxcbiAgICBJc0VkaXRNb2RlOiBmYWxzZSxcbiAgICBJc05ld05vZGU6IGZhbHNlLFxuICAgIFBhdGg6ICcnLFxuICB9O1xuICAvKipcbiAgICogU2VsZWN0ZWQgRmlsZSBOYW1lXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0ZWRGaWxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZWxlY3RlZCBGaWxlIEl0ZW1cbiAgICovXG4gIHB1YmxpYyBzZWxlY3RlZEZpbGVJdGVtOiBJQnJvd3NlckZpbGUgPSBudWxsO1xuICAvKipcbiAgICogU2VsZWN0ZWQgTm9kZSBJdGVtXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0ZWROb2RlOiBJQnJvd3Nlck5vZGUgPSBudWxsO1xuICAvKipcbiAgICogTGlzdGUgdm9uIFVwbG9hZHNcbiAgICovXG4gIHB1YmxpYyB1cGxvYWRzOiBzdHJpbmdbXSA9IFtdO1xuICAvKipcbiAgICogU2VydmljZSB0byByZWNlaXZlIHN0YW5kYXJkIHZhbGlkYXRpb24gbWVzc2FnZSBrZXlzIGFuZCB0ZXh0c1xuICAgKi9cbiAgcHVibGljIHZhbGlkYXRpb25LZXlTZXJ2aWNlOiBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2U7XG5cbiAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcblxuICAvKipcbiAgICogS29uc3RydWt0b3JcbiAgICogQHBhcmFtIGh0dHBjbGllbnQgQW5ndWxhciBIVFRQIENsaWVudFxuICAgKiBAcGFyYW0gaW5qZWN0b3IgU2VydmljZSBJbmplY3RvclxuICAgKi9cbiAgY29uc3RydWN0b3IoaHR0cGNsaWVudDogSHR0cENsaWVudCwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5icm93c2VyU2VydmljZSA9IGluamVjdG9yLmdldChcbiAgICAgIFNBQ0ZJTEVCUk9XU0VSX1NFUlZJQ0UsXG4gICAgICBuZXcgU2FjRGVmYXVsdEZpbGVCcm93c2VyU2VydmljZShodHRwY2xpZW50KVxuICAgICk7XG4gICAgdGhpcy52YWxpZGF0aW9uS2V5U2VydmljZSA9IGluamVjdG9yLmdldChcbiAgICAgIFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSxcbiAgICAgIG5ldyBTYWNEZWZhdWx0VmFsaWRhdGlvbktleVNlcnZpY2UoKVxuICAgICk7XG4gICAgdGhpcy5sbmdSZXNvdXJjZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXG4gICAgICBTQUNMT0NBTElTQVRJT05fU0VSVklDRSxcbiAgICAgIG5ldyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSh0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlKVxuICAgICk7XG5cbiAgICB0aGlzLmljb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxuICAgICAgU0FDSUNPTl9TRVJWSUNFLFxuICAgICAgbmV3IFNhY0RlZmF1bHRJY29uU2VydmljZSgpXG4gICAgKTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgLy8gI3JlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xuXG4gIC8qKlxuICAgKiBTZXR6dCBkZW4gU2VsZWNlZCBOb2RlIMO8YmVyIGRlbiBQZmFkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkZmlsZSh2OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRub2RlID0gdGhpcy5maW5kU2VsZWN0ZWROb2RlQnlQYXRoKHRoaXMucm9vdE5vZGUsIHYpO1xuXG4gICAgaWYgKHNlbGVjdGVkbm9kZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5zZWxlY3ROb2RlKHNlbGVjdGVkbm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmVzZWxlY2VkZmlsZSA9IHY7XG4gIH1cblxuICAvKipcbiAgICogQ1NTIGljb24gY2xhc3MgZm9yIGRlbGV0ZSBpY29uXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaWNvbkRlbGV0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnREZWxldGVJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBpY29uIGNsYXNzIGZvciBlZGl0IGljb25cbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxuICAgKi9cbiAgcHVibGljIGdldCBpY29uRWRpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRFZGl0SWNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDU1MgaWNvbiBmb3IgZm9sZGVycyBpbiB0cmVlIHRoZXJlIGFyZSBjb2xsYWJzZWRcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxuICAgKi9cbiAgcHVibGljIGdldCBpY29uRm9sZGVyQ29sbGFic2VkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlckNsb3NlZEljb247XG4gIH1cblxuICAvKipcbiAgICogQ1NTIGljb24gY2xhc3MgZm9yIGZvbGRlcnMgd2l0aG91dCBzdWJmb2xkZXJzXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaWNvbkZvbGRlckVtcHR5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlckVtcHR5SWNvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDU1MgaWNvbiBmb3IgbmV3IGZvbGRlcnMgYWN0aW9uXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaWNvbkZvbGRlck5ldygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRGb2xkZXJOZXdJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIENTUyBpY29uIGZvciBmb2xkZXJzIGluIHRyZWUgdGhlcmUgYXJlIGV4cGFuZGVkXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaWNvbkZvbGRlck9wZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50Rm9sZGVyT3Blbkljb247XG4gIH1cblxuICAvKipcbiAgICogQ1NTIGljb24gY2xhc3MgZm9yIHJlZnJlc2ggaWNvblxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGljb25SZWZyZXNoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudFJlZnJlc2hJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBmw7xyIFNlbGVjdGVkIEZpbGUuIElzdCBhbiBJbnB1dCBQcm9wZXJ0eSBnZWJ1bmRlblxuICAgKi9cbiAgcHVibGljIGdldCBzZWxlY3RlZGZpbGUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0RmlsZSAmJiB0aGlzLnNlbGVjdEZpbGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXG5cbiAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gIC8qKlxuICAgKiBIb3N0TGlzdGVuZXIgd2VsY2hlciBkZW4gRWRpdCBNb2RlIGJlaSBhbGxlbiBGaWxlcyB1bmQgTm9kZXMgYmVlbmRldC5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIC8qKlxuICAgKiBDbGljayBFdmVudFxuICAgKi9cbiAgcHVibGljIGV4aXRFZGl0TW9kZSh0YXJnZXRFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcy5mb3JFYWNoKChpdG0pID0+IChpdG0uSXNFZGl0TW9kZSA9IGZhbHNlKSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuc2VsZWN0ZWROb2RlIHx8XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLk5hbWUgPT09IG51bGwgfHxcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuTmFtZS5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNsZWFyTmV3Q2hpbGROb2Rlcyh0aGlzLnJvb3ROb2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0Tm9kZUVkaXRNb2RlKG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEzDtnNjaHQgZWluIEZpbGVcbiAgICogQHBhcmFtIGZpbGUgRmlsZSB3ZWxjaGVzIGdlbMO2c2NodCB3ZXJkZW4gc29sbFxuICAgKi9cbiAgcHVibGljIGRlbGV0ZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5jb25maXJtRGVsZXRlRmlsZShmaWxlKS5zdWJzY3JpYmUoKGNvbmZpcm0pID0+IHtcbiAgICAgIGlmIChjb25maXJtKSB7XG4gICAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcbiAgICAgICAgICAuRGVsZXRlRmlsZShcbiAgICAgICAgICAgIHRoaXMuYXBpdXJsLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuUGF0aCArICcvJyArIGZpbGUuRmlsZW5hbWUsXG4gICAgICAgICAgICB0aGlzLmFsbG93ZWR0eXBlc1xuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyRmlsZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMw7ZzY2h0IGVpbmVuIE5vZGVcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIGdlbMO2c2NodCB3ZXJkZW4gc29sbFxuICAgKi9cbiAgcHVibGljIGRlbGV0ZU5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XG4gICAgdGhpcy5jb25maXJtRGVsZXRlTm9kZShub2RlKS5zdWJzY3JpYmUoKGNvbmZpcm0pID0+IHtcbiAgICAgIGlmIChjb25maXJtKSB7XG4gICAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcbiAgICAgICAgICAuRGVsZXRlTm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmZpbmRQYXJlbnROb2RlKHRoaXMucm9vdE5vZGUsIG5vZGUpO1xuICAgICAgICAgICAgcGFyZW50Tm9kZS5DaGlsZE5vZGVzID0gcmVzdWx0Lk5vZGUuQ2hpbGROb2RlcztcblxuICAgICAgICAgICAgdGhpcy5yb290Tm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmZpbGxQYXRoKGl0bSwgJycpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Tm9kZShwYXJlbnROb2RlKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR6dCBlaW4gRmlsZSBpbiBkZW4gRWRpdCBNb2RlXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgd2VsY2hlcyBpbiBkZW4gRWRpdCBNb2RlIGdlc2V0enQgd2VyZGVuIHNvbGxcbiAgICovXG4gIHB1YmxpYyBlZGl0RmlsZShmaWxlOiBJQnJvd3NlckZpbGUpOiB2b2lkIHtcbiAgICBmaWxlLklzRWRpdE1vZGUgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHp0IGVpbmVuIE5vZGUgaW4gZGVuIEVkaXQgTW9kZVxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIHdlbGNoZXIgYmVhcmJlaXRldCB3ZXJkZW4gc29sbFxuICAgKi9cbiAgcHVibGljIGVkaXROb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xuICAgIG5vZGUuSXNFZGl0TW9kZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRXJ6ZXVndCBlaW5lbiBuZXVlbiBOb2RlIGltIFRyZWVcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB1bnRlciB3ZWxjaGVtIGVpbiBuZXVlciBOb2RlIGVyc3RlbGx0IHdlcmRlbiBzb2xsXG4gICAqL1xuICBwdWJsaWMgbmV3Tm9kZShub2RlOiBJQnJvd3Nlck5vZGUpIHtcbiAgICBjb25zdCBpdGVtOiBJQnJvd3Nlck5vZGUgPSB7XG4gICAgICBDaGlsZE5vZGVzOiBbXSxcbiAgICAgIEZpbGVzOiBbXSxcbiAgICAgIElzRWRpdE1vZGU6IGZhbHNlLFxuICAgICAgSXNFeHBhbmRlZDogZmFsc2UsXG4gICAgICBOYW1lOiAnJyxcbiAgICAgIFBhdGg6IG5vZGUuUGF0aCxcbiAgICAgIElzTmV3Tm9kZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgbm9kZS5DaGlsZE5vZGVzLnB1c2goaXRlbSk7XG4gICAgdGhpcy5zZWxlY3ROb2RlKGl0ZW0pO1xuICAgIHRoaXMuZWRpdE5vZGUoaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdCBFdmVudCBkZXIgS29tcG9uZW50ZVxuICAgKi9cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcbiAgICAgIC5HZXROb2RlKHRoaXMuYXBpdXJsLCAnJywgdGhpcy5hbGxvd2VkdHlwZXMpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMucm9vdE5vZGUgPSB7XG4gICAgICAgICAgTmFtZTogcmVzdWx0Lk5vZGUuTmFtZSxcbiAgICAgICAgICBGaWxlczogcmVzdWx0Lk5vZGUuRmlsZXMsXG4gICAgICAgICAgQ2hpbGROb2RlczogcmVzdWx0Lk5vZGUuQ2hpbGROb2RlcyxcbiAgICAgICAgICBJc0V4cGFuZGVkOiB0cnVlLFxuICAgICAgICAgIElzRWRpdE1vZGU6IGZhbHNlLFxuICAgICAgICAgIElzTmV3Tm9kZTogZmFsc2UsXG4gICAgICAgICAgUGF0aDogJy8nLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSB0aGlzLnJvb3ROb2RlO1xuXG4gICAgICAgIC8vIFNlbGVjdGVkIEZpbGUgZXJuZXV0IHNldHplbiwgd2VubiBQcm9wZXJ0eSBnZXNldHp0IHd1cmRlIGJldm9yIERhdGVuIHZvbSBTZXJ2aWNlIGdlbGFkZW4gd3VyZGVuLlxuICAgICAgICBpZiAodGhpcy5wcmVzZWxlY2VkZmlsZSAhPT0gbnVsbCAmJiB0aGlzLnByZXNlbGVjZWRmaWxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkZmlsZSA9IHRoaXMucHJlc2VsZWNlZGZpbGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFrdHVhbGlzaWVydCBkZW4gTm9kZVxuICAgKi9cbiAgcHVibGljIHJlZnJlc2hOb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xuICAgIGlmICghbm9kZS5Jc0V4cGFuZGVkKSB7XG4gICAgICB0aGlzLnN3aXRjaEV4cGFuZE5vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5icm93c2VyU2VydmljZVxuICAgICAgLkdldE5vZGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aCwgdGhpcy5hbGxvd2VkdHlwZXMpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgIG5vZGUuQ2hpbGROb2RlcyA9IHJlc3VsdC5Ob2RlLkNoaWxkTm9kZXM7XG4gICAgICAgIG5vZGUuRmlsZXMgPSByZXN1bHQuTm9kZS5GaWxlcztcblxuICAgICAgICB0aGlzLnNldFBhdGhUb0FsbE5vZGVzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2RlIHdlbm4gZWluZSBEYXRlaSB1bWJlbmFubnQgd2VyZGVuIHNvbGxcbiAgICogQHBhcmFtIGZpbGUgRmlsZSB3ZWxjaGVzIHVtYmVuYW5udCB3ZXJkZW4gc29sbFxuICAgKiBAcGFyYW0gbmV3RmlsZW5hbWUgTmV1ZXIgRGF0ZWluYW1lXG4gICAqL1xuICBwdWJsaWMgcmVuYW1lRmlsZShmaWxlOiBJQnJvd3NlckZpbGUsIG5ld0ZpbGVuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmaWxlLklzRWRpdE1vZGUgPSBmYWxzZTtcblxuICAgIGlmICghbmV3RmlsZW5hbWUgfHwgbmV3RmlsZW5hbWUgPT09IG51bGwgfHwgbmV3RmlsZW5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBDYW5jZWwsIEludmFsaWQgRmlsZW5hbWVcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmlsZS5GaWxlbmFtZSAhPT0gbmV3RmlsZW5hbWUpIHtcbiAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcbiAgICAgICAgLlJlbmFtZUZpbGUoXG4gICAgICAgICAgdGhpcy5hcGl1cmwsXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuUGF0aCArICcvJyArIGZpbGUuRmlsZW5hbWUsXG4gICAgICAgICAgbmV3RmlsZW5hbWUsXG4gICAgICAgICAgdGhpcy5hbGxvd2VkdHlwZXNcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyRmlsZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2RlIHdlbm4gZWluIE5vZGUgdW1iZW5hbm50IHdlcmRlbiBzb2xsXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciB1bWJlbmFubnQgd2VyZGVuIHNvbGxcbiAgICogQHBhcmFtIG5ld0ZvbGRlcm5hbWUgTmV1ZXIgT3JkbmVybmFtZVxuICAgKi9cbiAgcHVibGljIHJlbmFtZU5vZGUobm9kZTogSUJyb3dzZXJOb2RlLCBuZXdGb2xkZXJuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBub2RlLklzRWRpdE1vZGUgPSBmYWxzZTtcblxuICAgIGlmICghbm9kZS5Jc05ld05vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIW5ld0ZvbGRlcm5hbWUgfHxcbiAgICAgICAgbmV3Rm9sZGVybmFtZSA9PT0gbnVsbCB8fFxuICAgICAgICBuZXdGb2xkZXJuYW1lLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIC8vIENhbmNlbCBSZW5hbWUuIEludmFsaWQgRm9sZGVybmFtZVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLk5hbWUgIT09IG5ld0ZvbGRlcm5hbWUpIHtcbiAgICAgICAgdGhpcy5icm93c2VyU2VydmljZVxuICAgICAgICAgIC5SZW5hbWVOb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIG5ld0ZvbGRlcm5hbWUpXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgbm9kZS5OYW1lID0gcmVzdWx0Lk5vZGUuTmFtZTtcblxuICAgICAgICAgICAgdGhpcy5zZXRQYXRoVG9BbGxOb2RlcygpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgICFuZXdGb2xkZXJuYW1lIHx8XG4gICAgICAgIG5ld0ZvbGRlcm5hbWUgPT09IG51bGwgfHxcbiAgICAgICAgbmV3Rm9sZGVybmFtZS5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNsZWFyTmV3Q2hpbGROb2Rlcyh0aGlzLnJvb3ROb2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLk5hbWUgPSBuZXdGb2xkZXJuYW1lO1xuICAgICAgbm9kZS5Jc05ld05vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcbiAgICAgICAgLlNhdmVOb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIG5ld0ZvbGRlcm5hbWUpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBub2RlLk5hbWUgPSByZXN1bHQuTm9kZS5OYW1lO1xuICAgICAgICAgIG5vZGUuRmlsZXMgPSByZXN1bHQuTm9kZS5GaWxlcztcblxuICAgICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZGUgd2VubiBlaW4gRmlsZSBzZWxla3RpZXJ0IHdpcmRcbiAgICogQHBhcmFtIGZpbGUgRmlsZSB3ZWxjaGVzIHNlbGVrdGllcnQgd2lyZFxuICAgKi9cbiAgcHVibGljIHNlbGVjdEZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKSB7XG4gICAgaWYgKCFmaWxlLklzRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzLmZvckVhY2goKGl0bSkgPT4gKGl0bS5Jc0VkaXRNb2RlID0gZmFsc2UpKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWROb2RlLlBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSB0aGlzLnNlbGVjdGVkTm9kZS5QYXRoICsgJy8nICsgZmlsZS5GaWxlbmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSAnLycgKyBmaWxlLkZpbGVuYW1lO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlSXRlbSA9IGZpbGU7XG4gICAgdGhpcy5maWxlLmVtaXQodGhpcy5zZWxlY3RlZEZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZGUgd2VubiBlaW4gTm9kZSBzZWxla3RpZXJ0IHdpcmRcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIHNlbGVrdGllcnQgd2VyZGVuIHNvbGxcbiAgICovXG4gIHB1YmxpYyBzZWxlY3ROb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xuICAgIGlmICghbm9kZS5Jc0V4cGFuZGVkKSB7XG4gICAgICB0aGlzLnN3aXRjaEV4cGFuZE5vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgdGhlIEVkaXQgTW9kZSBpbiBhbGwgTm9kZXNcbiAgICB0aGlzLnJlc2V0Tm9kZUVkaXRNb2RlKG51bGwpO1xuXG4gICAgaWYgKCFub2RlLkZpbGVzKSB7XG4gICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgIC5HZXRGaWxlcyh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCB0aGlzLmFsbG93ZWR0eXBlcylcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIG5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xuXG4gICAgICAgICAgaWYgKHRoaXMucHJlc2VsZWNlZGZpbGUgIT09IG51bGwgJiYgdGhpcy5wcmVzZWxlY2VkZmlsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucHJlc2VsZWNlZGZpbGUuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICB0aGlzLnByZXNlbGVjZWRmaWxlLmxhc3RJbmRleE9mKCcvJykgKyAxXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IG5vZGUuRmlsZXMuZmluZCgoaXRtKSA9PiBpdG0uRmlsZW5hbWUgPT09IGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0RmlsZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZC9Db2xsYWJzZSBNZXRob2RlIGbDvHIgTm9kZXNcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIGdlw7ZmZm5ldCBvZGVyIGdlc2NobG9zc2VuIHdlcmRlbiBzb2xsXG4gICAqL1xuICBwdWJsaWMgc3dpdGNoRXhwYW5kTm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcbiAgICBpZiAobm9kZS5Jc0V4cGFuZGVkKSB7XG4gICAgICBub2RlLklzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5Jc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kZSBkaWUgQXVmZ2VydWZlbiB3ZXJkZW4gbXVzcywgd2VubiBlaW4gVXBsb2FkIGJlZW5kZXQgaXN0LlxuICAgKiBAcGFyYW0gcGFyYW0gUGFyYW1ldGVyIGRlcyBob2NoZ2VsYWRlbmVuIEZpbGVzXG4gICAqL1xuICBwdWJsaWMgdXBsb2FkQ29tcGxldGUobm9kZTogSUJyb3dzZXJOb2RlLCB1cGxvYWRJZExpc3Q6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKHVwbG9hZElkTGlzdCAhPT0gbnVsbCkge1xuICAgICAgdXBsb2FkSWRMaXN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXBsb2Fkcy5pbmRleE9mKGVsZW1lbnQpIDwgMCkge1xuICAgICAgICAgIHRoaXMudXBsb2Fkcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHRoaXMudXBsb2Fkcy5wb3AoKTtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcbiAgICAgICAgLlNhdmVGaWxlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIGlkLCB0aGlzLmFsbG93ZWR0eXBlcylcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzID0gcmVzdWx0LkZpbGVzO1xuICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlTW92ZWQoaWQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgLy8gI3JlZ2lvbiBQdWJsaWMgQWJzdHJhY3QgTWV0aG9kc1xuXG4gIC8qKlxuICAgKiBBYnN0cmFrdGUgQ29uZmlybSBNZXRob2RlIHdlbGNoZSBpbXBsZW1lbnRpZXJ0IHdlcmRlbiBtdXNzLiBNZXRob2RlIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBlaW5lXG4gICAqIERhdGVpIGdlbMO2c2NodCB3ZXJkZW4gc29sbC5cbiAgICogQHBhcmFtIGZpbGUgRmlsZSBmw7xyIHdlbGNoZXMgZWluIERlbGV0ZSBDb25maXJtIGVpbmdlZm9yZGVydCB3ZXJkZW4gc29sbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGNvbmZpcm1EZWxldGVGaWxlKGZpbGU6IElCcm93c2VyRmlsZSk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBBYnN0cmFrdGUgQ29uZmlybSBNZXRob2RlIHdlbGNoZSBpbXBsZW1lbnRpZXJ0IHdlcmRlbiBtdXNzLiBNZXRob2RlIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBlaW5cbiAgICogT3JkbmVyIGdlbMO2c2NodCB3ZXJkZW4gc29sbC5cbiAgICogQHBhcmFtIGZvbGRlciBPcmRlcm4gZsO8ciB3ZWxjaGVuIGVpbiBEZWxldGUgQ29uZmlybSBlaW5nZWZvcmRlcnQgd2VyZGVuIHNvbGwuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgY29uZmlybURlbGV0ZU5vZGUoZm9sZGVyOiBJQnJvd3Nlck5vZGUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKipcbiAgICogQWJzdHJha3RlIE1ldGhvZGUgZGllIEF1ZmdlcnVmZW4gd2lyZCwgd2VubiBkYXMgSG9jaGdlbGFkZW5lIEZpbGUgYXVzIGRlbSBUZW1wIEZvbGRlciBpbiBkaWVcbiAgICogU3RydWt0dXIgdmVyc2Nob2JlbiB3dXJkZS5cbiAgICogQHBhcmFtIHVwbG9hZGlkIElEIGRlcyBVcGxvYWRzXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgdXBsb2FkZWRGaWxlTW92ZWQodXBsb2FkaWQ6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgQWJzdHJhY3QgTWV0aG9kc1xuXG4gIC8vICNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXG5cbiAgLyoqXG4gICAqIFJla3Vyc2l2ZSBNZXRob2RlIHdlbGNoZSBiZWltIE5vZGUgdW5kIGFsbCBzZWluZW4gQ2hpbGRzIG5ldWUgTm9kZXMgZW50ZmVybnRcbiAgICogQHBhcmFtIG5vZGUgTm9kZSBiZWkgd2VsY2hlbSBhbGxlIG5ldWVuIE5vZGVzIGVudGZlcm50IHdlcmRlbiBzb2xsLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhck5ld0NoaWxkTm9kZXMobm9kZTogSUJyb3dzZXJOb2RlKSB7XG4gICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xuICAgICAgaWYgKGl0bS5Jc05ld05vZGUpIHtcbiAgICAgICAgbm9kZS5DaGlsZE5vZGVzLnNwbGljZShub2RlLkNoaWxkTm9kZXMuaW5kZXhPZihpdG0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHRoaXMuY2xlYXJOZXdDaGlsZE5vZGVzKGl0bSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZGUgd2VsY2hlIGRlbiBQZmFkIGbDvHIgZWluZW4gTm9kZSBlcnpldWd0XG4gICAqIEBwYXJhbSBub2RlIE5vZGUgZsO8ciB3ZWxjaGVuIGRlciBQZmFkIGVyemV1Z3Qgd2VyZGVuIHNvbGxcbiAgICogQHBhcmFtIHBhcmVudFBhdGggw5xiZXJnZW9yZG5ldGVyIFBmYWRcbiAgICovXG4gIHByaXZhdGUgZmlsbFBhdGgobm9kZTogSUJyb3dzZXJOb2RlLCBwYXJlbnRQYXRoOiBzdHJpbmcpIHtcbiAgICBub2RlLlBhdGggPSBwYXJlbnRQYXRoICsgJy8nICsgbm9kZS5OYW1lO1xuICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgIHRoaXMuZmlsbFBhdGgoaXRtLCBub2RlLlBhdGgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Y2h0IGRlbiDDvGJlcmdlb3JkbmV0ZW4gTm9kZSBpbSBUcmVlXG4gICAqIEBwYXJhbSBub2RlIEFrdHVlbGxlciBOb2RlXG4gICAqIEBwYXJhbSBub2RlVG9GaW5kIE5vZGUgd2VsY2hlciBnZWZ1bmRlbiB3ZXJkZW4gc29sbFxuICAgKiBAcmV0dXJucyBOb2RlIHdlbm4gZXIgZ2VmdW5kZW4gd3VyZGUsIGFuc29uc3RlbiB3aXJkIE5VTEwgenVyw7xja2dlZ2ViZW5cbiAgICovXG4gIHByaXZhdGUgZmluZFBhcmVudE5vZGUoXG4gICAgbm9kZTogSUJyb3dzZXJOb2RlLFxuICAgIG5vZGVUb0ZpbmQ6IElCcm93c2VyTm9kZVxuICApOiBJQnJvd3Nlck5vZGUge1xuICAgIGlmIChub2RlLkNoaWxkTm9kZXMuaW5kZXhPZihub2RlVG9GaW5kKSA+PSAwKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuQ2hpbGROb2Rlcykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kUGFyZW50Tm9kZShjaGlsZCwgbm9kZVRvRmluZCk7XG4gICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU3VjaHQgZWluZW4gTm9kZSBnZW0uIGVpbmVtIFVSTCBQZmFkXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgaW4gd2VsY2hlbSBnZXN1Y2h0IHdlcmRlbiBzb2xsXG4gICAqIEBwYXJhbSBwYXRoIFBmYWQgbmFjaCB3ZWxjaGVtIGdlc3VjaHQgd2lyZFxuICAgKiBAcmV0dXJucyBOb2RlIHdlbGNoZXIgenVtIGdlc3VjaHRlbiBQZmFkIHBhc3N0LiBXZW5uIGtlaW4gTm9kZSBnZWZ1bmRlbiB3aXJkLCB3aXJkIE5VTEwgenVyw7xja2dlZ2ViZW5cbiAgICovXG4gIHByaXZhdGUgZmluZFNlbGVjdGVkTm9kZUJ5UGF0aChcbiAgICBub2RlOiBJQnJvd3Nlck5vZGUsXG4gICAgcGF0aDogc3RyaW5nXG4gICk6IElCcm93c2VyTm9kZSB7XG4gICAgLy8gQ2FuY2VsIHdlbm4gUGZhZCBuaWNodCBkZWZpbmllcnRcbiAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkIHx8IHBhdGggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFBmYWQgaW4gQXJyYXkgc3BsaXR0ZW4gdW5kIFJvb3QgRm9sZGVybmFtZSBzZXR6ZW5cbiAgICBjb25zdCBwYXRoQXJyYXkgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgcGF0aEFycmF5WzBdID0gdGhpcy5yb290Tm9kZS5OYW1lO1xuXG4gICAgcmV0dXJuIHRoaXMuZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5KG5vZGUsIHBhdGhBcnJheSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogU3VjaHQgZWluZW4gTm9kZSBnZW0uIGVpbmVtIEFycmF5IHZvbiBOb2RlIE5hbWVuXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgaW4gd2VsY2hlbSBnZXN1Y2h0IHdlcmRlbiBzb2xsXG4gICAqIEBwYXJhbSBwYXRoIEFycmF5IHZvbiBOb2RlIE5hbWVuLCB3ZWxjaGUgZGllIEhpcmFyY2h5IGRlcyBQZmFkZXMgYWJiaWxkZW5cbiAgICogQHBhcmFtIGluZGV4IEFrdHVlbGxlciBJbmRleCBpbSBQQVRIIEFycmF5XG4gICAqIEByZXR1cm5zIE5vZGUgd2VubiBlaW5lciBnZWZ1bmRlbiB3dXJkZSwgYW5zb25zdGVuIE5VTExcbiAgICovXG4gIHByaXZhdGUgZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5KFxuICAgIG5vZGU6IElCcm93c2VyTm9kZSxcbiAgICBwYXRoOiBzdHJpbmdbXSxcbiAgICBpbmRleDogbnVtYmVyXG4gICk6IElCcm93c2VyTm9kZSB7XG4gICAgLy8gQ2hlY2sgb2IgT3JkbmVyIGtvcnJla3QuIExldHplciBPcmRuZXIgenVyw7xja2dlYmVuLiBQYXRoIExhc3QgSW5kZXggaXN0IGRlciBGaWxlbmFtZVxuICAgIGlmIChub2RlLk5hbWUgPT09IHBhdGhbaW5kZXhdICYmIHBhdGgubGVuZ3RoIC0gMiA9PT0gaW5kZXgpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5OYW1lID09PSBwYXRoW2luZGV4XSkge1xuICAgICAgLy8gRXhwYW5kIE5vZGVcbiAgICAgIG5vZGUuSXNFeHBhbmRlZCA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygbm9kZS5DaGlsZE5vZGVzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5KGl0ZW0sIHBhdGgsIGluZGV4ICsgMSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVrdXJzaXZlIE1ldGhvZGUgd2VsY2hlIGJlaW0gTm9kZSB1bmQgYWxsIHNlaW5lbiBDaGlsZHMgZGVuIEVkaXQgTW9kZSBiZWVuZGV0LlxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGJlaSB3ZWxjaGVtIGRlciBFZGl0IE1vZGUgYmVlbmRldCB3ZXJkZW4gc29sbFxuICAgKi9cbiAgcHJpdmF0ZSByZXNldE5vZGVFZGl0TW9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXNldE5vZGVFZGl0TW9kZSh0aGlzLnJvb3ROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5Jc0VkaXRNb2RlID0gZmFsc2U7XG5cbiAgICAgIGlmIChub2RlLkNoaWxkTm9kZXMpIHtcbiAgICAgICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4gdGhpcy5yZXNldE5vZGVFZGl0TW9kZShpdG0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0enQgZGVuIFBmYWQgaW4gYWxsZW4gTm9kZXNcbiAgICovXG4gIHByaXZhdGUgc2V0UGF0aFRvQWxsTm9kZXMoKSB7XG4gICAgdGhpcy5yb290Tm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xuICAgICAgdGhpcy5maWxsUGF0aChpdG0sICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb24gUHJpdmF0ZSBNZXRob2RzXG59XG4iXSwibWFwcGluZ3MiOiI7MkZBQ0EsT0FDRUEsU0FBUyxDQUNUQyxZQUFZLENBQ1pDLFlBQVksQ0FFWkMsS0FBSyxDQUVMQyxNQUFNLEtBQ0QsZUFBZSxDQU10QixPQUNFQyxlQUFlLENBQ2ZDLHVCQUF1QixDQUN2QkMsd0JBQXdCLENBQ3hCQyxxQkFBcUIsQ0FDckJDLDhCQUE4QixLQUN6QixnQkFBZ0IsQ0FDdkIsT0FDRUMsc0JBQXNCLENBQ3RCQyw0QkFBNEIsS0FDdkIsd0NBQXdDLENBQy9DLE9BQVNDLDZCQUE2QixLQUFRLHlDQUF5QyxDLHlFQU12Rjs7R0FHQSxLQUNzQixDQUFBQyxvQkFBb0IsQ0FvR3hDO0FBRUE7QUFFQTs7OztPQUtBQyxZQUFZQyxVQUFzQixD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
142
+ * Sets the path in all nodes
143
+ */setPathToAllNodes(){cov_13aj6impkv().f[50]++;cov_13aj6impkv().s[159]++;this.rootNode.ChildNodes.forEach(itm=>{cov_13aj6impkv().f[51]++;cov_13aj6impkv().s[160]++;this.fillPath(itm,'');});}static{cov_13aj6impkv().s[161]++;this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"16.2.12",ngImport:i0,type:SacFileBrowserCommon,deps:[{token:i1.HttpClient},{token:i0.Injector}],target:i0.ɵɵFactoryTarget.Directive});}static{cov_13aj6impkv().s[162]++;this.ɵdir=i0.ɵɵngDeclareDirective({minVersion:"14.0.0",version:"16.2.12",type:SacFileBrowserCommon,inputs:{allowedtypes:"allowedtypes",allowfiledelete:"allowfiledelete",allowfilerename:"allowfilerename",allowfileupload:"allowfileupload",allowfoldercreate:"allowfoldercreate",allowfolderdelete:"allowfolderdelete",allowfolderrename:"allowfolderrename",apiurl:"apiurl",selectedfile:"selectedfile"},outputs:{file:"file"},host:{listeners:{"document:click":"exitEditMode($event.target)"}},ngImport:i0});}}cov_13aj6impkv().s[163]++;i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"16.2.12",ngImport:i0,type:SacFileBrowserCommon,decorators:[{type:Directive}],ctorParameters:function(){cov_13aj6impkv().f[52]++;cov_13aj6impkv().s[164]++;return[{type:i1.HttpClient},{type:i0.Injector}];},propDecorators:{allowedtypes:[{type:Input}],allowfiledelete:[{type:Input}],allowfilerename:[{type:Input}],allowfileupload:[{type:Input}],allowfoldercreate:[{type:Input}],allowfolderdelete:[{type:Input}],allowfolderrename:[{type:Input}],apiurl:[{type:Input}],file:[{type:Output}],selectedfile:[{type:Input}],exitEditMode:[{type:HostListener,args:['document:click',['$event.target']]}]}});//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbXBvbmVudHMvYnJvd3Nlci9icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFDSCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsOEJBQThCLEdBQ2pDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFNeEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFZLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUd2Rzs7R0FFRztBQUVILE1BQU0sT0FBZ0Isb0JBQW9CO0lBbUh0Qyx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7O09BSUc7SUFDSCxZQUFZLFVBQXNCLEVBQUUsUUFBa0I7UUEvR3REOztXQUVHO1FBQ0ssbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBRTdDOztXQUVHO1FBRUksaUJBQVksR0FBRyxFQUFFLENBQUM7UUFFekI7O1dBRUc7UUFFSSxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUU5Qjs7V0FFRztRQUVJLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTlCOztXQUVHO1FBRUksb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFOUI7O1dBRUc7UUFFSSxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFFSSxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFFSSxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFRaEM7O1dBRUc7UUFFSSxTQUFJLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFPL0Q7O1dBRUc7UUFDSSxhQUFRLEdBQWlCO1lBQzVCLElBQUksRUFBRSxFQUFFO1lBQ1IsVUFBVSxFQUFFLEVBQUU7WUFDZCxLQUFLLEVBQUUsRUFBRTtZQUNULFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLElBQUksRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQU9GOztXQUVHO1FBQ0kscUJBQWdCLEdBQWlCLElBQUksQ0FBQztRQUU3Qzs7V0FFRztRQUNJLGlCQUFZLEdBQWlCLElBQUksQ0FBQztRQUV6Qzs7V0FFRztRQUNJLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFpQjFCLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsSUFBSSw4QkFBOEIsRUFBRSxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQ2xDLHVCQUF1QixFQUN2QixJQUFJLDZCQUE2QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUMvRCxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsMEJBQTBCO0lBRTFCLHFDQUFxQztJQUVyQzs7O09BR0c7SUFDSCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDO0lBQ3ZELENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsbUJBQW1CO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDNUI7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNXLFlBQVksQ0FBQyxDQUFnQjtRQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuRSxJQUFJLFlBQVksS0FBSyxJQUFJLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNqQztRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFrQkQ7OztPQUdHO0lBQ0ksVUFBVSxDQUFDLElBQWtCO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvQyxJQUFJLE9BQU8sRUFBRTtnQkFDVCxJQUFJLENBQUMsY0FBYztxQkFDZCxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO3FCQUN4RixTQUFTLENBQUMsQ0FBQyxNQUE0QixFQUFFLEVBQUU7b0JBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNDLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsSUFBa0I7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQy9DLElBQUksT0FBTyxFQUFFO2dCQUNULElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQTRCLEVBQUUsRUFBRTtvQkFDOUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUM1RCxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO29CQUUvQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3QkFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxDQUFDO29CQUVILElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSSxRQUFRLENBQUMsSUFBa0I7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxJQUFrQjtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFNSSxZQUFZLENBQUMsYUFBYTtRQUM3QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUVuRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDOUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMxQztTQUNKO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPLENBQUMsSUFBa0I7UUFDN0IsTUFBTSxJQUFJLEdBQWlCO1lBQ3ZCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsS0FBSyxFQUFFLEVBQUU7WUFDVCxVQUFVLEVBQUUsS0FBSztZQUNqQixVQUFVLEVBQUUsS0FBSztZQUNqQixJQUFJLEVBQUUsRUFBRTtZQUNSLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJO1NBQ2xCLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUE0QixFQUFFLEVBQUU7WUFDdkcsSUFBSSxDQUFDLFFBQVEsR0FBRztnQkFDWixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUN0QixLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUN4QixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVO2dCQUNsQyxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixJQUFJLEVBQUUsR0FBRzthQUNaLENBQUM7WUFFRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFbEMsNEZBQTRGO1lBQzVGLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7YUFDM0M7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVcsQ0FBQyxJQUFrQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7UUFFRCxJQUFJLENBQUMsY0FBYzthQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUNsRCxTQUFTLENBQUMsQ0FBQyxNQUE0QixFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBRS9CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxVQUFVLENBQUMsSUFBa0IsRUFBRSxXQUFtQjtRQUNyRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsS0FBSyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbEUsMkJBQTJCO1lBQzNCLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGNBQWM7aUJBQ2QsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7aUJBQ3JHLFNBQVMsQ0FBQyxDQUFDLE1BQTRCLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FBQztTQUNWO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxVQUFVLENBQUMsSUFBa0IsRUFBRSxhQUFxQjtRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsS0FBSyxJQUFJLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3hFLG9DQUFvQztnQkFDcEMsT0FBTzthQUNWO1lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLGNBQWM7cUJBQ2QsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7cUJBQ2pELFNBQVMsQ0FBQyxDQUFDLE1BQTRCLEVBQUUsRUFBRTtvQkFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFFN0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLEtBQUssSUFBSSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN4RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2QyxPQUFPO2FBQ1Y7WUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYztpQkFDZCxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztpQkFDL0MsU0FBUyxDQUFDLENBQUMsTUFBNEIsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUUvQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNWO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFVBQVUsQ0FBQyxJQUFrQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3BFO2FBQU07WUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQzNDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFVBQVUsQ0FBQyxJQUFrQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7UUFFRCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGNBQWM7aUJBQ2QsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO2lCQUNuRCxTQUFTLENBQUMsQ0FBQyxNQUE0QixFQUFFLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBRXpCLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNoRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDekYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7b0JBQ2pFLElBQUksSUFBSSxFQUFFO3dCQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3pCO2lCQUNKO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDVjthQUFNO1lBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDNUI7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsSUFBa0I7UUFDdEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQzNCO2FBQU07WUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLElBQWtCLEVBQUUsWUFBc0I7UUFDNUQsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM5QjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksRUFBRSxFQUFFO1lBQ0osSUFBSSxDQUFDLGNBQWM7aUJBQ2QsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztpQkFDdkQsU0FBUyxDQUFDLENBQUMsTUFBNEIsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUM7U0FDVjtJQUNMLENBQUM7SUFRRCw0QkFBNEI7SUFFNUIsMEJBQTBCO0lBRTFCOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLElBQWtCO1FBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFO2dCQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDeEQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFFBQVEsQ0FBQyxJQUFrQixFQUFFLFVBQWtCO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssY0FBYyxDQUFDLElBQWtCLEVBQUUsVUFBd0I7UUFDL0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN0RCxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ2pCLE9BQU8sTUFBTSxDQUFDO2FBQ2pCO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxzQkFBc0IsQ0FBQyxJQUFrQixFQUFFLElBQVk7UUFDM0QsZ0NBQWdDO1FBQ2hDLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxxREFBcUQ7UUFDckQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFbEMsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssMkJBQTJCLENBQUMsSUFBa0IsRUFBRSxJQUFjLEVBQUUsS0FBYTtRQUNqRiw2RkFBNkY7UUFDN0YsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUU7WUFDeEQsT0FBTyxJQUFJLENBQUM7U0FDZjthQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEMsY0FBYztZQUNkLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUV2RSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7b0JBQ2pCLE9BQU8sTUFBTSxDQUFDO2lCQUNqQjthQUNKO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssaUJBQWlCLENBQUMsSUFBa0I7UUFDeEMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6QzthQUFNO1lBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFFeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDakU7U0FDSjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBeG9CaUIsb0JBQW9CO21HQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBRHpDLFNBQVM7d0hBdUJDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBT0MsZUFBZTtzQkFEckIsS0FBSztnQkFPQyxlQUFlO3NCQURyQixLQUFLO2dCQU9DLGVBQWU7c0JBRHJCLEtBQUs7Z0JBT0MsaUJBQWlCO3NCQUR2QixLQUFLO2dCQU9DLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFPQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBT0MsTUFBTTtzQkFEWixLQUFLO2dCQU9DLElBQUk7c0JBRFYsTUFBTTtnQkE2SUksWUFBWTtzQkFEdEIsS0FBSztnQkF3RkMsWUFBWTtzQkFMbEIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElTYWNGaWxlQnJvd3NlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNGaWxlQnJvd3NlclNlcnZpY2UnO1xuaW1wb3J0IHsgSVNhY0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU2FjSWNvblNlcnZpY2UnO1xuaW1wb3J0IHsgSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNMb2NhbGlzYXRpb25TZXJ2aWNlJztcbmltcG9ydCB7IElTYWNWYWxpZGF0aW9uS2V5U2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgU0FDSUNPTl9TRVJWSUNFLFxuICAgIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxuICAgIFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSxcbiAgICBTYWNEZWZhdWx0SWNvblNlcnZpY2UsXG4gICAgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBTQUNGSUxFQlJPV1NFUl9TRVJWSUNFLCBTYWNEZWZhdWx0RmlsZUJyb3dzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FjLWZpbGVicm93c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zYWMtbG9jYWxpc2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUJyb3dzZXJGaWxlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3NlcmZpbGUnO1xuaW1wb3J0IHsgSUJyb3dzZXJGaWxlUmVzcG9uc2UgfSBmcm9tICcuL21vZGVscy9icm93c2VyZmlsZXJlc3BvbnNlJztcbmltcG9ydCB7IElCcm93c2VyTm9kZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJub2RlJztcbmltcG9ydCB7IElCcm93c2VyTm9kZVJlc3BvbnNlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3Nlcm5vZGVyZXNwb25zZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEJhc2UgY29tcG9uZW50IGZvciBmaWxlIGJyb3dzZXJcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2FjRmlsZUJyb3dzZXJDb21tb24gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZSBmb3IgZmlsZSBicm93c2VyIGFjY2VzcyAoYmFja2VuZClcbiAgICAgKi9cbiAgICBwcml2YXRlIGJyb3dzZXJTZXJ2aWNlOiBJU2FjRmlsZUJyb3dzZXJTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogSWNvbiBzZXJ2aWNlIHRvIHJlY2VpdmUgaWNvbiBjbGFzc2VzIGZvciB1aVxuICAgICAqL1xuICAgIHByaXZhdGUgaWNvblNlcnZpY2U6IElTYWNJY29uU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIEZpbGUgdGhhdCBpcyBhbHJlYWR5IHNlbGVjdGVkIHdoZW4gdGhlIGJyb3dzZXIgc3RhcnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVzZWxlY2VkZmlsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd2VkIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZmlsZSBzZWxlY3Rpb24gYW5kIHVwbG9hZC4gVXNlIGRvdCBub3RhdGlvbiwgc2VwYXJhdGVkIGJ5IGNvbW1hcyBmb3IgbXVsdGlwbGUgZXh0ZW5zaW9ucyAoRXhhbXBsZTogXCIuanBnLC5naWZcIilcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd2VkdHlwZXMgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyBkZWxldGluZyBhIGZpbGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd2ZpbGVkZWxldGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHJlbmFtaW5nIGEgZmlsZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFsbG93ZmlsZXJlbmFtZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdXBsb2FkaW5nIGZpbGVzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWxsb3dmaWxldXBsb2FkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyBjcmVhdGluZyBhIG5ldyBmb2xkZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd2ZvbGRlcmNyZWF0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgZGVsZXRpbmcgYSBmb2xkZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd2ZvbGRlcmRlbGV0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgcmVuYW1pbmcgYSBmb2xkZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd2ZvbGRlcnJlbmFtZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVUkwgZm9yIHRoZSBiYWNrZW5kIEFQSVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFwaXVybDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogT3V0cHV0IGVtaXR0ZXIgd2hlbiBhIGZpbGUgaXMgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGZpbGU6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlIGZvciBlcnJvciBsb2NhbGlzYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgbG5nUmVzb3VyY2VTZXJ2aWNlOiBJU2FjTG9jYWxpc2F0aW9uU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIFJvb3Qgbm9kZSBpdGVtIGZvciB0aGUgdHJlZVxuICAgICAqL1xuICAgIHB1YmxpYyByb290Tm9kZTogSUJyb3dzZXJOb2RlID0ge1xuICAgICAgICBOYW1lOiAnJyxcbiAgICAgICAgQ2hpbGROb2RlczogW10sXG4gICAgICAgIEZpbGVzOiBbXSxcbiAgICAgICAgSXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgSXNFZGl0TW9kZTogZmFsc2UsXG4gICAgICAgIElzTmV3Tm9kZTogZmFsc2UsXG4gICAgICAgIFBhdGg6ICcnLFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RlZCBGaWxlIE5hbWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRGaWxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RlZCBGaWxlIEl0ZW1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRGaWxlSXRlbTogSUJyb3dzZXJGaWxlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGVkIE5vZGUgSXRlbVxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZE5vZGU6IElCcm93c2VyTm9kZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0ZSB2b24gVXBsb2Fkc1xuICAgICAqL1xuICAgIHB1YmxpYyB1cGxvYWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZSB0byByZWNlaXZlIHN0YW5kYXJkIHZhbGlkYXRpb24gbWVzc2FnZSBrZXlzIGFuZCB0ZXh0c1xuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0aW9uS2V5U2VydmljZTogSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlO1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gaHR0cGNsaWVudCBBbmd1bGFyIEhUVFAgQ2xpZW50XG4gICAgICogQHBhcmFtIGluamVjdG9yIFNlcnZpY2UgSW5qZWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihodHRwY2xpZW50OiBIdHRwQ2xpZW50LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgdGhpcy5icm93c2VyU2VydmljZSA9IGluamVjdG9yLmdldChTQUNGSUxFQlJPV1NFUl9TRVJWSUNFLCBuZXcgU2FjRGVmYXVsdEZpbGVCcm93c2VyU2VydmljZShodHRwY2xpZW50KSk7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLCBuZXcgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlKCkpO1xuICAgICAgICB0aGlzLmxuZ1Jlc291cmNlU2VydmljZSA9IGluamVjdG9yLmdldChcbiAgICAgICAgICAgIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxuICAgICAgICAgICAgbmV3IFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlKHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5pY29uU2VydmljZSA9IGluamVjdG9yLmdldChTQUNJQ09OX1NFUlZJQ0UsIG5ldyBTYWNEZWZhdWx0SWNvblNlcnZpY2UoKSk7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcblxuICAgIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcblxuICAgIC8qKlxuICAgICAqIENTUyBpY29uIGNsYXNzIGZvciBkZWxldGUgaWNvblxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25EZWxldGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudERlbGV0ZUljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1NTIGljb24gY2xhc3MgZm9yIGVkaXQgaWNvblxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25FZGl0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRFZGl0SWNvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDU1MgaWNvbiBmb3IgZm9sZGVycyBpbiB0cmVlIHRoYXQgYXJlIGNvbGxhcHNlZFxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJDb2xsYWJzZWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlckNsb3NlZEljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1NTIGljb24gY2xhc3MgZm9yIGZvbGRlcnMgd2l0aG91dCBzdWJmb2xkZXJzXG4gICAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaWNvbkZvbGRlckVtcHR5KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRGb2xkZXJFbXB0eUljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1NTIGljb24gZm9yIG5ldyBmb2xkZXJzIGFjdGlvblxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJOZXcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlck5ld0ljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1NTIGljb24gZm9yIGZvbGRlcnMgaW4gdHJlZSB0aGVyZSBhcmUgZXhwYW5kZWRcbiAgICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXG4gICAgICovXG4gICAgcHVibGljIGdldCBpY29uRm9sZGVyT3BlbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50Rm9sZGVyT3Blbkljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1NTIGljb24gY2xhc3MgZm9yIHJlZnJlc2ggaWNvblxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25SZWZyZXNoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRSZWZyZXNoSWNvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXR0ZXIgZm9yIHNlbGVjdGVkIGZpbGUuIEJvdW5kIHRvIGFuIGlucHV0IHByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RlZGZpbGUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEZpbGUgJiYgdGhpcy5zZWxlY3RGaWxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbm9kZSBieSB0aGUgcGF0aFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBzZWxlY3RlZGZpbGUodjogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZG5vZGUgPSB0aGlzLmZpbmRTZWxlY3RlZE5vZGVCeVBhdGgodGhpcy5yb290Tm9kZSwgdik7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkbm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3ROb2RlKHNlbGVjdGVkbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByZXNlbGVjZWRmaWxlID0gdjtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBBYnN0cmFjdCBjb25maXJtIG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQuIENhbGxlZCB3aGVuIGEgZmlsZSBzaG91bGQgYmUgZGVsZXRlZC5cbiAgICAgKiBAcGFyYW0gZmlsZSBGaWxlIGZvciB3aGljaCBhIGRlbGV0ZSBjb25maXJtYXRpb24gc2hvdWxkIGJlIHJlcXVlc3RlZFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBjb25maXJtRGVsZXRlRmlsZShmaWxlOiBJQnJvd3NlckZpbGUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgLyoqXG4gICAgICogQWJzdHJhY3QgY29uZmlybSBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkLiBDYWxsZWQgd2hlbiBhIGZvbGRlciBzaG91bGQgYmUgZGVsZXRlZC5cbiAgICAgKiBAcGFyYW0gZm9sZGVyIEZvbGRlciBmb3Igd2hpY2ggYSBkZWxldGUgY29uZmlybWF0aW9uIHNob3VsZCBiZSByZXF1ZXN0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IGNvbmZpcm1EZWxldGVOb2RlKGZvbGRlcjogSUJyb3dzZXJOb2RlKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBmaWxlXG4gICAgICogQHBhcmFtIGZpbGUgRmlsZSB0byBiZSBkZWxldGVkXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZmlybURlbGV0ZUZpbGUoZmlsZSkuc3Vic2NyaWJlKChjb25maXJtKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmlybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLkRlbGV0ZUZpbGUodGhpcy5hcGl1cmwsIHRoaXMuc2VsZWN0ZWROb2RlLlBhdGggKyAnLycgKyBmaWxlLkZpbGVuYW1lLCB0aGlzLmFsbG93ZWR0eXBlcylcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEgbm9kZVxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdG8gYmUgZGVsZXRlZFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVOb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpcm1EZWxldGVOb2RlKG5vZGUpLnN1YnNjcmliZSgoY29uZmlybSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbmZpcm0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlLkRlbGV0ZU5vZGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aCkuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmZpbmRQYXJlbnROb2RlKHRoaXMucm9vdE5vZGUsIG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLkNoaWxkTm9kZXMgPSByZXN1bHQuTm9kZS5DaGlsZE5vZGVzO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdE5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbFBhdGgoaXRtLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Tm9kZShwYXJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGZpbGUgaW50byBlZGl0IG1vZGVcbiAgICAgKiBAcGFyYW0gZmlsZSBGaWxlIHRoYXQgc2hvdWxkIGJlIHBsYWNlZCBpbnRvIGVkaXQgbW9kZVxuICAgICAqL1xuICAgIHB1YmxpYyBlZGl0RmlsZShmaWxlOiBJQnJvd3NlckZpbGUpOiB2b2lkIHtcbiAgICAgICAgZmlsZS5Jc0VkaXRNb2RlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbm9kZSBpbnRvIGVkaXQgbW9kZVxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdG8gYmUgZWRpdGVkXG4gICAgICovXG4gICAgcHVibGljIGVkaXROb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xuICAgICAgICBub2RlLklzRWRpdE1vZGUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhvc3RMaXN0ZW5lciB0aGF0IGVuZHMgZWRpdCBtb2RlIGZvciBhbGwgZmlsZXMgYW5kIG5vZGVzLlxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXG4gICAgLyoqXG4gICAgICogQ2xpY2sgRXZlbnQgLSBFeGl0cyBlZGl0IG1vZGUgZm9yIGZpbGVzIGFuZCBub2Rlc1xuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50IFRoZSB0YXJnZXQgZWxlbWVudCBmcm9tIHRoZSBjbGljayBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBleGl0RWRpdE1vZGUodGFyZ2V0RWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzLmZvckVhY2goKGl0bSkgPT4gKGl0bS5Jc0VkaXRNb2RlID0gZmFsc2UpKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZSB8fCB0aGlzLnNlbGVjdGVkTm9kZS5OYW1lID09PSBudWxsIHx8IHRoaXMuc2VsZWN0ZWROb2RlLk5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhck5ld0NoaWxkTm9kZXModGhpcy5yb290Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0Tm9kZUVkaXRNb2RlKG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgbm9kZSBpbiB0aGUgdHJlZVxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdW5kZXIgd2hpY2ggYSBuZXcgbm9kZSBzaG91bGQgYmUgY3JlYXRlZFxuICAgICAqL1xuICAgIHB1YmxpYyBuZXdOb2RlKG5vZGU6IElCcm93c2VyTm9kZSkge1xuICAgICAgICBjb25zdCBpdGVtOiBJQnJvd3Nlck5vZGUgPSB7XG4gICAgICAgICAgICBDaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgICAgIEZpbGVzOiBbXSxcbiAgICAgICAgICAgIElzRWRpdE1vZGU6IGZhbHNlLFxuICAgICAgICAgICAgSXNFeHBhbmRlZDogZmFsc2UsXG4gICAgICAgICAgICBOYW1lOiAnJyxcbiAgICAgICAgICAgIFBhdGg6IG5vZGUuUGF0aCxcbiAgICAgICAgICAgIElzTmV3Tm9kZTogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBub2RlLkNoaWxkTm9kZXMucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5zZWxlY3ROb2RlKGl0ZW0pO1xuICAgICAgICB0aGlzLmVkaXROb2RlKGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXQgZXZlbnQgb2YgdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5icm93c2VyU2VydmljZS5HZXROb2RlKHRoaXMuYXBpdXJsLCAnJywgdGhpcy5hbGxvd2VkdHlwZXMpLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb290Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICBOYW1lOiByZXN1bHQuTm9kZS5OYW1lLFxuICAgICAgICAgICAgICAgIEZpbGVzOiByZXN1bHQuTm9kZS5GaWxlcyxcbiAgICAgICAgICAgICAgICBDaGlsZE5vZGVzOiByZXN1bHQuTm9kZS5DaGlsZE5vZGVzLFxuICAgICAgICAgICAgICAgIElzRXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgSXNFZGl0TW9kZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgSXNOZXdOb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBQYXRoOiAnLycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnNldFBhdGhUb0FsbE5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IHRoaXMucm9vdE5vZGU7XG5cbiAgICAgICAgICAgIC8vIFJlLXNldCB0aGUgc2VsZWN0ZWQgZmlsZSBpZiB0aGUgcHJvcGVydHkgd2FzIHNldCBiZWZvcmUgZGF0YSB3YXMgbG9hZGVkIGZyb20gdGhlIHNlcnZpY2UuXG4gICAgICAgICAgICBpZiAodGhpcy5wcmVzZWxlY2VkZmlsZSAhPT0gbnVsbCAmJiB0aGlzLnByZXNlbGVjZWRmaWxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkZmlsZSA9IHRoaXMucHJlc2VsZWNlZGZpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVmcmVzaE5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICghbm9kZS5Jc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaEV4cGFuZE5vZGUobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgICAgICAuR2V0Tm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCB0aGlzLmFsbG93ZWR0eXBlcylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLkNoaWxkTm9kZXMgPSByZXN1bHQuTm9kZS5DaGlsZE5vZGVzO1xuICAgICAgICAgICAgICAgIG5vZGUuRmlsZXMgPSByZXN1bHQuTm9kZS5GaWxlcztcblxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBjYWxsZWQgd2hlbiBhIGZpbGUgc2hvdWxkIGJlIHJlbmFtZWRcbiAgICAgKiBAcGFyYW0gZmlsZSBGaWxlIHRvIGJlIHJlbmFtZWRcbiAgICAgKiBAcGFyYW0gbmV3RmlsZW5hbWUgTmV3IGZpbGVuYW1lXG4gICAgICovXG4gICAgcHVibGljIHJlbmFtZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlLCBuZXdGaWxlbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGZpbGUuSXNFZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghbmV3RmlsZW5hbWUgfHwgbmV3RmlsZW5hbWUgPT09IG51bGwgfHwgbmV3RmlsZW5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBDYW5jZWwsIEludmFsaWQgRmlsZW5hbWVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlLkZpbGVuYW1lICE9PSBuZXdGaWxlbmFtZSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyU2VydmljZVxuICAgICAgICAgICAgICAgIC5SZW5hbWVGaWxlKHRoaXMuYXBpdXJsLCB0aGlzLnNlbGVjdGVkTm9kZS5QYXRoICsgJy8nICsgZmlsZS5GaWxlbmFtZSwgbmV3RmlsZW5hbWUsIHRoaXMuYWxsb3dlZHR5cGVzKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJGaWxlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBub2RlIHNob3VsZCBiZSByZW5hbWVkXG4gICAgICogQHBhcmFtIG5vZGUgTm9kZSB0byBiZSByZW5hbWVkXG4gICAgICogQHBhcmFtIG5ld0ZvbGRlcm5hbWUgTmV3IGZvbGRlciBuYW1lXG4gICAgICovXG4gICAgcHVibGljIHJlbmFtZU5vZGUobm9kZTogSUJyb3dzZXJOb2RlLCBuZXdGb2xkZXJuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbm9kZS5Jc0VkaXRNb2RlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFub2RlLklzTmV3Tm9kZSkge1xuICAgICAgICAgICAgaWYgKCFuZXdGb2xkZXJuYW1lIHx8IG5ld0ZvbGRlcm5hbWUgPT09IG51bGwgfHwgbmV3Rm9sZGVybmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBDYW5jZWwgUmVuYW1lLiBJbnZhbGlkIEZvbGRlcm5hbWVcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlLk5hbWUgIT09IG5ld0ZvbGRlcm5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5SZW5hbWVOb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIG5ld0ZvbGRlcm5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuTmFtZSA9IHJlc3VsdC5Ob2RlLk5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIW5ld0ZvbGRlcm5hbWUgfHwgbmV3Rm9sZGVybmFtZSA9PT0gbnVsbCB8fCBuZXdGb2xkZXJuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJOZXdDaGlsZE5vZGVzKHRoaXMucm9vdE5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZS5OYW1lID0gbmV3Rm9sZGVybmFtZTtcbiAgICAgICAgICAgIG5vZGUuSXNOZXdOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLlNhdmVOb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIG5ld0ZvbGRlcm5hbWUpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBub2RlLk5hbWUgPSByZXN1bHQuTm9kZS5OYW1lO1xuICAgICAgICAgICAgICAgICAgICBub2RlLkZpbGVzID0gcmVzdWx0Lk5vZGUuRmlsZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQYXRoVG9BbGxOb2RlcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgZmlsZSBpcyBzZWxlY3RlZFxuICAgICAqIEBwYXJhbSBmaWxlIEZpbGUgdGhhdCBpcyBzZWxlY3RlZFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RGaWxlKGZpbGU6IElCcm93c2VyRmlsZSkge1xuICAgICAgICBpZiAoIWZpbGUuSXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMuZm9yRWFjaCgoaXRtKSA9PiAoaXRtLklzRWRpdE1vZGUgPSBmYWxzZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZS5QYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZE5vZGUuUGF0aCArICcvJyArIGZpbGUuRmlsZW5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9ICcvJyArIGZpbGUuRmlsZW5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZUl0ZW0gPSBmaWxlO1xuICAgICAgICB0aGlzLmZpbGUuZW1pdCh0aGlzLnNlbGVjdGVkRmlsZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgbm9kZSBpcyBzZWxlY3RlZFxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0Tm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFub2RlLklzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoRXhwYW5kTm9kZShub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc2V0IHRoZSBFZGl0IE1vZGUgaW4gYWxsIE5vZGVzXG4gICAgICAgIHRoaXMucmVzZXROb2RlRWRpdE1vZGUobnVsbCk7XG5cbiAgICAgICAgaWYgKCFub2RlLkZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLkdldEZpbGVzKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIHRoaXMuYWxsb3dlZHR5cGVzKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJGaWxlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXNlbGVjZWRmaWxlICE9PSBudWxsICYmIHRoaXMucHJlc2VsZWNlZGZpbGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnByZXNlbGVjZWRmaWxlLnN1YnN0cmluZyh0aGlzLnByZXNlbGVjZWRmaWxlLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBub2RlLkZpbGVzLmZpbmQoKGl0bSkgPT4gaXRtLkZpbGVuYW1lID09PSBmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RmlsZShmaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kL2NvbGxhcHNlIG1ldGhvZCBmb3Igbm9kZXNcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIHRoYXQgc2hvdWxkIGJlIG9wZW5lZCBvciBjbG9zZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3dpdGNoRXhwYW5kTm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUuSXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgbm9kZS5Jc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLklzRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgbXVzdCBiZSBjYWxsZWQgd2hlbiBhbiB1cGxvYWQgaXMgY29tcGxldGVkLlxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgd2hlcmUgdXBsb2FkZWQgZmlsZXMgc2hvdWxkIGJlIGF0dGFjaGVkLlxuICAgICAqIEBwYXJhbSB1cGxvYWRJZExpc3QgTGlzdCBvZiB1cGxvYWQgSURzIHRoYXQgZmluaXNoZWQgdXBsb2FkaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGxvYWRDb21wbGV0ZShub2RlOiBJQnJvd3Nlck5vZGUsIHVwbG9hZElkTGlzdDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHVwbG9hZElkTGlzdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdXBsb2FkSWRMaXN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51cGxvYWRzLmluZGV4T2YoZWxlbWVudCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2Fkcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnVwbG9hZHMucG9wKCk7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyU2VydmljZVxuICAgICAgICAgICAgICAgIC5TYXZlRmlsZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCBpZCwgdGhpcy5hbGxvd2VkdHlwZXMpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVNb3ZlZChpZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBYnN0cmFjdCBtZXRob2QgaW52b2tlZCB3aGVuIHRoZSB1cGxvYWRlZCBmaWxlIGhhcyBiZWVuIG1vdmVkIGZyb20gdGhlIHRlbXAgZm9sZGVyIGludG8gdGhlIHN0cnVjdHVyZS5cbiAgICAgKiBAcGFyYW0gdXBsb2FkaWQgVXBsb2FkIElEXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHVwbG9hZGVkRmlsZU1vdmVkKHVwbG9hZGlkOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcblxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZSBtZXRob2QgdGhhdCByZW1vdmVzIG5ldyBub2RlcyBmcm9tIHRoZSBnaXZlbiBub2RlIGFuZCBhbGwgaXRzIGNoaWxkcmVuXG4gICAgICogQHBhcmFtIG5vZGUgTm9kZSBmcm9tIHdoaWNoIGFsbCBuZXcgbm9kZXMgc2hvdWxkIGJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjbGVhck5ld0NoaWxkTm9kZXMobm9kZTogSUJyb3dzZXJOb2RlKSB7XG4gICAgICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdG0uSXNOZXdOb2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5DaGlsZE5vZGVzLnNwbGljZShub2RlLkNoaWxkTm9kZXMuaW5kZXhPZihpdG0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4gdGhpcy5jbGVhck5ld0NoaWxkTm9kZXMoaXRtKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgZ2VuZXJhdGVzIHRoZSBwYXRoIGZvciBhIG5vZGVcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIGZvciB3aGljaCB0aGUgcGF0aCBzaG91bGQgYmUgZ2VuZXJhdGVkXG4gICAgICogQHBhcmFtIHBhcmVudFBhdGggUGFyZW50IHBhdGhcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbGxQYXRoKG5vZGU6IElCcm93c2VyTm9kZSwgcGFyZW50UGF0aDogc3RyaW5nKSB7XG4gICAgICAgIG5vZGUuUGF0aCA9IHBhcmVudFBhdGggKyAnLycgKyBub2RlLk5hbWU7XG4gICAgICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsbFBhdGgoaXRtLCBub2RlLlBhdGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgcGFyZW50IG5vZGUgaW4gdGhlIHRyZWVcbiAgICAgKiBAcGFyYW0gbm9kZSBDdXJyZW50IG5vZGVcbiAgICAgKiBAcGFyYW0gbm9kZVRvRmluZCBOb2RlIHRvIGZpbmRcbiAgICAgKiBAcmV0dXJucyBUaGUgbm9kZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIE5VTExcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbmRQYXJlbnROb2RlKG5vZGU6IElCcm93c2VyTm9kZSwgbm9kZVRvRmluZDogSUJyb3dzZXJOb2RlKTogSUJyb3dzZXJOb2RlIHtcbiAgICAgICAgaWYgKG5vZGUuQ2hpbGROb2Rlcy5pbmRleE9mKG5vZGVUb0ZpbmQpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLkNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFBhcmVudE5vZGUoY2hpbGQsIG5vZGVUb0ZpbmQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIG5vZGUgYWNjb3JkaW5nIHRvIGEgVVJMIHBhdGhcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdoaWNoIHRvIHNlYXJjaFxuICAgICAqIEBwYXJhbSBwYXRoIFBhdGggdG8gc2VhcmNoIGZvclxuICAgICAqIEByZXR1cm5zIE5vZGUgbWF0Y2hpbmcgdGhlIHBhdGguIFJldHVybnMgTlVMTCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbmRTZWxlY3RlZE5vZGVCeVBhdGgobm9kZTogSUJyb3dzZXJOb2RlLCBwYXRoOiBzdHJpbmcpOiBJQnJvd3Nlck5vZGUge1xuICAgICAgICAvLyBDYW5jZWwgaWYgcGF0aCBpcyBub3QgZGVmaW5lZFxuICAgICAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkIHx8IHBhdGggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3BsaXQgcGF0aCBpbnRvIGFycmF5IGFuZCBzZXQgdGhlIHJvb3QgZm9sZGVyIG5hbWVcbiAgICAgICAgY29uc3QgcGF0aEFycmF5ID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICBwYXRoQXJyYXlbMF0gPSB0aGlzLnJvb3ROb2RlLk5hbWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5KG5vZGUsIHBhdGhBcnJheSwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgYSBub2RlIGJhc2VkIG9uIGFuIGFycmF5IG9mIG5vZGUgbmFtZXNcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdoaWNoIHRvIHNlYXJjaFxuICAgICAqIEBwYXJhbSBwYXRoIEFycmF5IG9mIG5vZGUgbmFtZXMgcmVwcmVzZW50aW5nIHRoZSBoaWVyYXJjaHkgb2YgdGhlIHBhdGhcbiAgICAgKiBAcGFyYW0gaW5kZXggQ3VycmVudCBpbmRleCBpbiB0aGUgcGF0aCBhcnJheVxuICAgICAqIEByZXR1cm5zIE5vZGUgaWYgZm91bmQsIG90aGVyd2lzZSBOVUxMXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaW5kU2VsZWN0ZWROb2RlQnlQYXRoQXJyYXkobm9kZTogSUJyb3dzZXJOb2RlLCBwYXRoOiBzdHJpbmdbXSwgaW5kZXg6IG51bWJlcik6IElCcm93c2VyTm9kZSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGZvbGRlciBpcyBjb3JyZWN0LiBSZXR1cm4gdGhlIGxhc3QgZm9sZGVyLiBUaGUgbGFzdCBpbmRleCBpbiBwYXRoIGlzIHRoZSBmaWxlbmFtZVxuICAgICAgICBpZiAobm9kZS5OYW1lID09PSBwYXRoW2luZGV4XSAmJiBwYXRoLmxlbmd0aCAtIDIgPT09IGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLk5hbWUgPT09IHBhdGhbaW5kZXhdKSB7XG4gICAgICAgICAgICAvLyBFeHBhbmQgTm9kZVxuICAgICAgICAgICAgbm9kZS5Jc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBub2RlLkNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRTZWxlY3RlZE5vZGVCeVBhdGhBcnJheShpdGVtLCBwYXRoLCBpbmRleCArIDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmUgbWV0aG9kIHRoYXQgZW5kcyBlZGl0IG1vZGUgZm9yIHRoZSBub2RlIGFuZCBhbGwgaXRzIGNoaWxkcmVuLlxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgZm9yIHdoaWNoIGVkaXQgbW9kZSBzaG91bGQgYmUgZW5kZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2V0Tm9kZUVkaXRNb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldE5vZGVFZGl0TW9kZSh0aGlzLnJvb3ROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuSXNFZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5DaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4gdGhpcy5yZXNldE5vZGVFZGl0TW9kZShpdG0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhdGggaW4gYWxsIG5vZGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRQYXRoVG9BbGxOb2RlcygpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWxsUGF0aChpdG0sICcnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcml2YXRlIE1ldGhvZHNcbn1cbiJdfQ==
144
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTQUNJQ09OX1NFUlZJQ0UiLCJTQUNMT0NBTElTQVRJT05fU0VSVklDRSIsIlNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSIsIlNhY0RlZmF1bHRJY29uU2VydmljZSIsIlNhY0RlZmF1bHRWYWxpZGF0aW9uS2V5U2VydmljZSIsIlNBQ0ZJTEVCUk9XU0VSX1NFUlZJQ0UiLCJTYWNEZWZhdWx0RmlsZUJyb3dzZXJTZXJ2aWNlIiwiU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UiLCJEaXJlY3RpdmUiLCJFdmVudEVtaXR0ZXIiLCJIb3N0TGlzdGVuZXIiLCJJbnB1dCIsIk91dHB1dCIsIlNhY0ZpbGVCcm93c2VyQ29tbW9uIiwiY29uc3RydWN0b3IiLCJodHRwY2xpZW50IiwiaW5qZWN0b3IiLCJjb3ZfMTNhajZpbXBrdiIsImYiLCJzIiwicHJlc2VsZWNlZGZpbGUiLCJhbGxvd2VkdHlwZXMiLCJhbGxvd2ZpbGVkZWxldGUiLCJhbGxvd2ZpbGVyZW5hbWUiLCJhbGxvd2ZpbGV1cGxvYWQiLCJhbGxvd2ZvbGRlcmNyZWF0ZSIsImFsbG93Zm9sZGVyZGVsZXRlIiwiYWxsb3dmb2xkZXJyZW5hbWUiLCJmaWxlIiwicm9vdE5vZGUiLCJOYW1lIiwiQ2hpbGROb2RlcyIsIkZpbGVzIiwiSXNFeHBhbmRlZCIsIklzRWRpdE1vZGUiLCJJc05ld05vZGUiLCJQYXRoIiwic2VsZWN0ZWRGaWxlSXRlbSIsInNlbGVjdGVkTm9kZSIsInVwbG9hZHMiLCJicm93c2VyU2VydmljZSIsImdldCIsInZhbGlkYXRpb25LZXlTZXJ2aWNlIiwibG5nUmVzb3VyY2VTZXJ2aWNlIiwiaWNvblNlcnZpY2UiLCJpY29uRGVsZXRlIiwiQnJvd3NlckNvbXBvbmVudERlbGV0ZUljb24iLCJpY29uRWRpdCIsIkJyb3dzZXJDb21wb25lbnRFZGl0SWNvbiIsImljb25Gb2xkZXJDb2xsYWJzZWQiLCJCcm93c2VyQ29tcG9uZW50Rm9sZGVyQ2xvc2VkSWNvbiIsImljb25Gb2xkZXJFbXB0eSIsIkJyb3dzZXJDb21wb25lbnRGb2xkZXJFbXB0eUljb24iLCJpY29uRm9sZGVyTmV3IiwiQnJvd3NlckNvbXBvbmVudEZvbGRlck5ld0ljb24iLCJpY29uRm9sZGVyT3BlbiIsIkJyb3dzZXJDb21wb25lbnRGb2xkZXJPcGVuSWNvbiIsImljb25SZWZyZXNoIiwiQnJvd3NlckNvbXBvbmVudFJlZnJlc2hJY29uIiwic2VsZWN0ZWRmaWxlIiwiYiIsInNlbGVjdEZpbGUiLCJsZW5ndGgiLCJzZWxlY3RlZEZpbGUiLCJ2Iiwic2VsZWN0ZWRub2RlIiwiZmluZFNlbGVjdGVkTm9kZUJ5UGF0aCIsInNlbGVjdE5vZGUiLCJkZWxldGVGaWxlIiwiY29uZmlybURlbGV0ZUZpbGUiLCJzdWJzY3JpYmUiLCJjb25maXJtIiwiRGVsZXRlRmlsZSIsImFwaXVybCIsIkZpbGVuYW1lIiwicmVzdWx0IiwiZGVsZXRlTm9kZSIsIm5vZGUiLCJjb25maXJtRGVsZXRlTm9kZSIsIkRlbGV0ZU5vZGUiLCJwYXJlbnROb2RlIiwiZmluZFBhcmVudE5vZGUiLCJOb2RlIiwiZm9yRWFjaCIsIml0bSIsImZpbGxQYXRoIiwiZWRpdEZpbGUiLCJlZGl0Tm9kZSIsImV4aXRFZGl0TW9kZSIsInRhcmdldEVsZW1lbnQiLCJjbGVhck5ld0NoaWxkTm9kZXMiLCJyZXNldE5vZGVFZGl0TW9kZSIsIm5ld05vZGUiLCJpdGVtIiwicHVzaCIsIm5nT25Jbml0IiwiR2V0Tm9kZSIsInNldFBhdGhUb0FsbE5vZGVzIiwicmVmcmVzaE5vZGUiLCJzd2l0Y2hFeHBhbmROb2RlIiwicmVuYW1lRmlsZSIsIm5ld0ZpbGVuYW1lIiwiUmVuYW1lRmlsZSIsInJlbmFtZU5vZGUiLCJuZXdGb2xkZXJuYW1lIiwiUmVuYW1lTm9kZSIsIlNhdmVOb2RlIiwiZW5kc1dpdGgiLCJlbWl0IiwiR2V0RmlsZXMiLCJmaWxlbmFtZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZmluZCIsInVwbG9hZENvbXBsZXRlIiwidXBsb2FkSWRMaXN0IiwiZWxlbWVudCIsImluZGV4T2YiLCJpZCIsInBvcCIsIlNhdmVGaWxlIiwidXBsb2FkZWRGaWxlTW92ZWQiLCJzcGxpY2UiLCJwYXJlbnRQYXRoIiwibm9kZVRvRmluZCIsImNoaWxkIiwicGF0aCIsInVuZGVmaW5lZCIsInBhdGhBcnJheSIsInNwbGl0IiwiZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5IiwiaW5kZXgiLCJkZXBzIiwidG9rZW4iLCJpMSIsIkh0dHBDbGllbnQiLCJpMCIsIkluamVjdG9yIiwidGFyZ2V0IiwiybXJtUZhY3RvcnlUYXJnZXQiLCJpbnB1dHMiLCJvdXRwdXRzIiwiaG9zdCIsImxpc3RlbmVycyIsIm5nSW1wb3J0IiwiZGVjb3JhdG9ycyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbXBvbmVudHMvYnJvd3Nlci9icm93c2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElTYWNGaWxlQnJvd3NlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNGaWxlQnJvd3NlclNlcnZpY2UnO1xuaW1wb3J0IHsgSVNhY0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU2FjSWNvblNlcnZpY2UnO1xuaW1wb3J0IHsgSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNMb2NhbGlzYXRpb25TZXJ2aWNlJztcbmltcG9ydCB7IElTYWNWYWxpZGF0aW9uS2V5U2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgU0FDSUNPTl9TRVJWSUNFLFxuICAgIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxuICAgIFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSxcbiAgICBTYWNEZWZhdWx0SWNvblNlcnZpY2UsXG4gICAgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBTQUNGSUxFQlJPV1NFUl9TRVJWSUNFLCBTYWNEZWZhdWx0RmlsZUJyb3dzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FjLWZpbGVicm93c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zYWMtbG9jYWxpc2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUJyb3dzZXJGaWxlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3NlcmZpbGUnO1xuaW1wb3J0IHsgSUJyb3dzZXJGaWxlUmVzcG9uc2UgfSBmcm9tICcuL21vZGVscy9icm93c2VyZmlsZXJlc3BvbnNlJztcbmltcG9ydCB7IElCcm93c2VyTm9kZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJub2RlJztcbmltcG9ydCB7IElCcm93c2VyTm9kZVJlc3BvbnNlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3Nlcm5vZGVyZXNwb25zZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEJhc2UgY29tcG9uZW50IGZvciBmaWxlIGJyb3dzZXJcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2FjRmlsZUJyb3dzZXJDb21tb24gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZSBmb3IgZmlsZSBicm93c2VyIGFjY2VzcyAoYmFja2VuZClcbiAgICAgKi9cbiAgICBwcml2YXRlIGJyb3dzZXJTZXJ2aWNlOiBJU2FjRmlsZUJyb3dzZXJTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogSWNvbiBzZXJ2aWNlIHRvIHJlY2VpdmUgaWNvbiBjbGFzc2VzIGZvciB1aVxuICAgICAqL1xuICAgIHByaXZhdGUgaWNvblNlcnZpY2U6IElTYWNJY29uU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIEZpbGUgdGhhdCBpcyBhbHJlYWR5IHNlbGVjdGVkIHdoZW4gdGhlIGJyb3dzZXIgc3RhcnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVzZWxlY2VkZmlsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd2VkIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZmlsZSBzZWxlY3Rpb24gYW5kIHVwbG9hZC4gVXNlIGRvdCBub3RhdGlvbiwgc2VwYXJhdGVkIGJ5IGNvbW1hcyBmb3IgbXVsdGlwbGUgZXh0ZW5zaW9ucyAoRXhhbXBsZTogXCIuanBnLC5naWZcIilcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd2VkdHlwZXMgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyBkZWxldGluZyBhIGZpbGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd2ZpbGVkZWxldGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQWxsb3dzIHJlbmFtaW5nIGEgZmlsZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFsbG93ZmlsZXJlbmFtZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdXBsb2FkaW5nIGZpbGVzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWxsb3dmaWxldXBsb2FkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyBjcmVhdGluZyBhIG5ldyBmb2xkZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd2ZvbGRlcmNyZWF0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgZGVsZXRpbmcgYSBmb2xkZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd2ZvbGRlcmRlbGV0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgcmVuYW1pbmcgYSBmb2xkZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd2ZvbGRlcnJlbmFtZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBVUkwgZm9yIHRoZSBiYWNrZW5kIEFQSVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFwaXVybDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogT3V0cHV0IGVtaXR0ZXIgd2hlbiBhIGZpbGUgaXMgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGZpbGU6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlIGZvciBlcnJvciBsb2NhbGlzYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgbG5nUmVzb3VyY2VTZXJ2aWNlOiBJU2FjTG9jYWxpc2F0aW9uU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIFJvb3Qgbm9kZSBpdGVtIGZvciB0aGUgdHJlZVxuICAgICAqL1xuICAgIHB1YmxpYyByb290Tm9kZTogSUJyb3dzZXJOb2RlID0ge1xuICAgICAgICBOYW1lOiAnJyxcbiAgICAgICAgQ2hpbGROb2RlczogW10sXG4gICAgICAgIEZpbGVzOiBbXSxcbiAgICAgICAgSXNFeHBhbmRlZDogdHJ1ZSxcbiAgICAgICAgSXNFZGl0TW9kZTogZmFsc2UsXG4gICAgICAgIElzTmV3Tm9kZTogZmFsc2UsXG4gICAgICAgIFBhdGg6ICcnLFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RlZCBGaWxlIE5hbWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRGaWxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RlZCBGaWxlIEl0ZW1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRGaWxlSXRlbTogSUJyb3dzZXJGaWxlID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGVkIE5vZGUgSXRlbVxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZE5vZGU6IElCcm93c2VyTm9kZSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0ZSB2b24gVXBsb2Fkc1xuICAgICAqL1xuICAgIHB1YmxpYyB1cGxvYWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZSB0byByZWNlaXZlIHN0YW5kYXJkIHZhbGlkYXRpb24gbWVzc2FnZSBrZXlzIGFuZCB0ZXh0c1xuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0aW9uS2V5U2VydmljZTogSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlO1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gaHR0cGNsaWVudCBBbmd1bGFyIEhUVFAgQ2xpZW50XG4gICAgICogQHBhcmFtIGluamVjdG9yIFNlcnZpY2UgSW5qZWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihodHRwY2xpZW50OiBIdHRwQ2xpZW50LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgdGhpcy5icm93c2VyU2VydmljZSA9IGluamVjdG9yLmdldChTQUNGSUxFQlJPV1NFUl9TRVJWSUNFLCBuZXcgU2FjRGVmYXVsdEZpbGVCcm93c2VyU2VydmljZShodHRwY2xpZW50KSk7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLCBuZXcgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlKCkpO1xuICAgICAgICB0aGlzLmxuZ1Jlc291cmNlU2VydmljZSA9IGluamVjdG9yLmdldChcbiAgICAgICAgICAgIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxuICAgICAgICAgICAgbmV3IFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlKHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5pY29uU2VydmljZSA9IGluamVjdG9yLmdldChTQUNJQ09OX1NFUlZJQ0UsIG5ldyBTYWNEZWZhdWx0SWNvblNlcnZpY2UoKSk7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcblxuICAgIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcblxuICAgIC8qKlxuICAgICAqIENTUyBpY29uIGNsYXNzIGZvciBkZWxldGUgaWNvblxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25EZWxldGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudERlbGV0ZUljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1NTIGljb24gY2xhc3MgZm9yIGVkaXQgaWNvblxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25FZGl0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRFZGl0SWNvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDU1MgaWNvbiBmb3IgZm9sZGVycyBpbiB0cmVlIHRoYXQgYXJlIGNvbGxhcHNlZFxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJDb2xsYWJzZWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlckNsb3NlZEljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1NTIGljb24gY2xhc3MgZm9yIGZvbGRlcnMgd2l0aG91dCBzdWJmb2xkZXJzXG4gICAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaWNvbkZvbGRlckVtcHR5KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRGb2xkZXJFbXB0eUljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1NTIGljb24gZm9yIG5ldyBmb2xkZXJzIGFjdGlvblxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJOZXcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlck5ld0ljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1NTIGljb24gZm9yIGZvbGRlcnMgaW4gdHJlZSB0aGVyZSBhcmUgZXhwYW5kZWRcbiAgICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXG4gICAgICovXG4gICAgcHVibGljIGdldCBpY29uRm9sZGVyT3BlbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50Rm9sZGVyT3Blbkljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ1NTIGljb24gY2xhc3MgZm9yIHJlZnJlc2ggaWNvblxuICAgICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25SZWZyZXNoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRSZWZyZXNoSWNvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXR0ZXIgZm9yIHNlbGVjdGVkIGZpbGUuIEJvdW5kIHRvIGFuIGlucHV0IHByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWxlY3RlZGZpbGUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEZpbGUgJiYgdGhpcy5zZWxlY3RGaWxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbm9kZSBieSB0aGUgcGF0aFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBzZWxlY3RlZGZpbGUodjogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZG5vZGUgPSB0aGlzLmZpbmRTZWxlY3RlZE5vZGVCeVBhdGgodGhpcy5yb290Tm9kZSwgdik7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkbm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3ROb2RlKHNlbGVjdGVkbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByZXNlbGVjZWRmaWxlID0gdjtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBBYnN0cmFjdCBjb25maXJtIG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQuIENhbGxlZCB3aGVuIGEgZmlsZSBzaG91bGQgYmUgZGVsZXRlZC5cbiAgICAgKiBAcGFyYW0gZmlsZSBGaWxlIGZvciB3aGljaCBhIGRlbGV0ZSBjb25maXJtYXRpb24gc2hvdWxkIGJlIHJlcXVlc3RlZFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBjb25maXJtRGVsZXRlRmlsZShmaWxlOiBJQnJvd3NlckZpbGUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgLyoqXG4gICAgICogQWJzdHJhY3QgY29uZmlybSBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkLiBDYWxsZWQgd2hlbiBhIGZvbGRlciBzaG91bGQgYmUgZGVsZXRlZC5cbiAgICAgKiBAcGFyYW0gZm9sZGVyIEZvbGRlciBmb3Igd2hpY2ggYSBkZWxldGUgY29uZmlybWF0aW9uIHNob3VsZCBiZSByZXF1ZXN0ZWQuXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IGNvbmZpcm1EZWxldGVOb2RlKGZvbGRlcjogSUJyb3dzZXJOb2RlKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBmaWxlXG4gICAgICogQHBhcmFtIGZpbGUgRmlsZSB0byBiZSBkZWxldGVkXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZmlybURlbGV0ZUZpbGUoZmlsZSkuc3Vic2NyaWJlKChjb25maXJtKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmlybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLkRlbGV0ZUZpbGUodGhpcy5hcGl1cmwsIHRoaXMuc2VsZWN0ZWROb2RlLlBhdGggKyAnLycgKyBmaWxlLkZpbGVuYW1lLCB0aGlzLmFsbG93ZWR0eXBlcylcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGEgbm9kZVxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdG8gYmUgZGVsZXRlZFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGVOb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpcm1EZWxldGVOb2RlKG5vZGUpLnN1YnNjcmliZSgoY29uZmlybSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbmZpcm0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlLkRlbGV0ZU5vZGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aCkuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmZpbmRQYXJlbnROb2RlKHRoaXMucm9vdE5vZGUsIG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLkNoaWxkTm9kZXMgPSByZXN1bHQuTm9kZS5DaGlsZE5vZGVzO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdE5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbFBhdGgoaXRtLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Tm9kZShwYXJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGZpbGUgaW50byBlZGl0IG1vZGVcbiAgICAgKiBAcGFyYW0gZmlsZSBGaWxlIHRoYXQgc2hvdWxkIGJlIHBsYWNlZCBpbnRvIGVkaXQgbW9kZVxuICAgICAqL1xuICAgIHB1YmxpYyBlZGl0RmlsZShmaWxlOiBJQnJvd3NlckZpbGUpOiB2b2lkIHtcbiAgICAgICAgZmlsZS5Jc0VkaXRNb2RlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgbm9kZSBpbnRvIGVkaXQgbW9kZVxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdG8gYmUgZWRpdGVkXG4gICAgICovXG4gICAgcHVibGljIGVkaXROb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xuICAgICAgICBub2RlLklzRWRpdE1vZGUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhvc3RMaXN0ZW5lciB0aGF0IGVuZHMgZWRpdCBtb2RlIGZvciBhbGwgZmlsZXMgYW5kIG5vZGVzLlxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXG4gICAgLyoqXG4gICAgICogQ2xpY2sgRXZlbnQgLSBFeGl0cyBlZGl0IG1vZGUgZm9yIGZpbGVzIGFuZCBub2Rlc1xuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50IFRoZSB0YXJnZXQgZWxlbWVudCBmcm9tIHRoZSBjbGljayBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBleGl0RWRpdE1vZGUodGFyZ2V0RWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzLmZvckVhY2goKGl0bSkgPT4gKGl0bS5Jc0VkaXRNb2RlID0gZmFsc2UpKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZSB8fCB0aGlzLnNlbGVjdGVkTm9kZS5OYW1lID09PSBudWxsIHx8IHRoaXMuc2VsZWN0ZWROb2RlLk5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhck5ld0NoaWxkTm9kZXModGhpcy5yb290Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0Tm9kZUVkaXRNb2RlKG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgbm9kZSBpbiB0aGUgdHJlZVxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdW5kZXIgd2hpY2ggYSBuZXcgbm9kZSBzaG91bGQgYmUgY3JlYXRlZFxuICAgICAqL1xuICAgIHB1YmxpYyBuZXdOb2RlKG5vZGU6IElCcm93c2VyTm9kZSkge1xuICAgICAgICBjb25zdCBpdGVtOiBJQnJvd3Nlck5vZGUgPSB7XG4gICAgICAgICAgICBDaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgICAgIEZpbGVzOiBbXSxcbiAgICAgICAgICAgIElzRWRpdE1vZGU6IGZhbHNlLFxuICAgICAgICAgICAgSXNFeHBhbmRlZDogZmFsc2UsXG4gICAgICAgICAgICBOYW1lOiAnJyxcbiAgICAgICAgICAgIFBhdGg6IG5vZGUuUGF0aCxcbiAgICAgICAgICAgIElzTmV3Tm9kZTogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBub2RlLkNoaWxkTm9kZXMucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5zZWxlY3ROb2RlKGl0ZW0pO1xuICAgICAgICB0aGlzLmVkaXROb2RlKGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXQgZXZlbnQgb2YgdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5icm93c2VyU2VydmljZS5HZXROb2RlKHRoaXMuYXBpdXJsLCAnJywgdGhpcy5hbGxvd2VkdHlwZXMpLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb290Tm9kZSA9IHtcbiAgICAgICAgICAgICAgICBOYW1lOiByZXN1bHQuTm9kZS5OYW1lLFxuICAgICAgICAgICAgICAgIEZpbGVzOiByZXN1bHQuTm9kZS5GaWxlcyxcbiAgICAgICAgICAgICAgICBDaGlsZE5vZGVzOiByZXN1bHQuTm9kZS5DaGlsZE5vZGVzLFxuICAgICAgICAgICAgICAgIElzRXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgSXNFZGl0TW9kZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgSXNOZXdOb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBQYXRoOiAnLycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnNldFBhdGhUb0FsbE5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IHRoaXMucm9vdE5vZGU7XG5cbiAgICAgICAgICAgIC8vIFJlLXNldCB0aGUgc2VsZWN0ZWQgZmlsZSBpZiB0aGUgcHJvcGVydHkgd2FzIHNldCBiZWZvcmUgZGF0YSB3YXMgbG9hZGVkIGZyb20gdGhlIHNlcnZpY2UuXG4gICAgICAgICAgICBpZiAodGhpcy5wcmVzZWxlY2VkZmlsZSAhPT0gbnVsbCAmJiB0aGlzLnByZXNlbGVjZWRmaWxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkZmlsZSA9IHRoaXMucHJlc2VsZWNlZGZpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIG5vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVmcmVzaE5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICghbm9kZS5Jc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaEV4cGFuZE5vZGUobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgICAgICAuR2V0Tm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCB0aGlzLmFsbG93ZWR0eXBlcylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLkNoaWxkTm9kZXMgPSByZXN1bHQuTm9kZS5DaGlsZE5vZGVzO1xuICAgICAgICAgICAgICAgIG5vZGUuRmlsZXMgPSByZXN1bHQuTm9kZS5GaWxlcztcblxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBjYWxsZWQgd2hlbiBhIGZpbGUgc2hvdWxkIGJlIHJlbmFtZWRcbiAgICAgKiBAcGFyYW0gZmlsZSBGaWxlIHRvIGJlIHJlbmFtZWRcbiAgICAgKiBAcGFyYW0gbmV3RmlsZW5hbWUgTmV3IGZpbGVuYW1lXG4gICAgICovXG4gICAgcHVibGljIHJlbmFtZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlLCBuZXdGaWxlbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGZpbGUuSXNFZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghbmV3RmlsZW5hbWUgfHwgbmV3RmlsZW5hbWUgPT09IG51bGwgfHwgbmV3RmlsZW5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBDYW5jZWwsIEludmFsaWQgRmlsZW5hbWVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlLkZpbGVuYW1lICE9PSBuZXdGaWxlbmFtZSkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyU2VydmljZVxuICAgICAgICAgICAgICAgIC5SZW5hbWVGaWxlKHRoaXMuYXBpdXJsLCB0aGlzLnNlbGVjdGVkTm9kZS5QYXRoICsgJy8nICsgZmlsZS5GaWxlbmFtZSwgbmV3RmlsZW5hbWUsIHRoaXMuYWxsb3dlZHR5cGVzKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJGaWxlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBub2RlIHNob3VsZCBiZSByZW5hbWVkXG4gICAgICogQHBhcmFtIG5vZGUgTm9kZSB0byBiZSByZW5hbWVkXG4gICAgICogQHBhcmFtIG5ld0ZvbGRlcm5hbWUgTmV3IGZvbGRlciBuYW1lXG4gICAgICovXG4gICAgcHVibGljIHJlbmFtZU5vZGUobm9kZTogSUJyb3dzZXJOb2RlLCBuZXdGb2xkZXJuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbm9kZS5Jc0VkaXRNb2RlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFub2RlLklzTmV3Tm9kZSkge1xuICAgICAgICAgICAgaWYgKCFuZXdGb2xkZXJuYW1lIHx8IG5ld0ZvbGRlcm5hbWUgPT09IG51bGwgfHwgbmV3Rm9sZGVybmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBDYW5jZWwgUmVuYW1lLiBJbnZhbGlkIEZvbGRlcm5hbWVcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlLk5hbWUgIT09IG5ld0ZvbGRlcm5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5SZW5hbWVOb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIG5ld0ZvbGRlcm5hbWUpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuTmFtZSA9IHJlc3VsdC5Ob2RlLk5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIW5ld0ZvbGRlcm5hbWUgfHwgbmV3Rm9sZGVybmFtZSA9PT0gbnVsbCB8fCBuZXdGb2xkZXJuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJOZXdDaGlsZE5vZGVzKHRoaXMucm9vdE5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZS5OYW1lID0gbmV3Rm9sZGVybmFtZTtcbiAgICAgICAgICAgIG5vZGUuSXNOZXdOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLlNhdmVOb2RlKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIG5ld0ZvbGRlcm5hbWUpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBub2RlLk5hbWUgPSByZXN1bHQuTm9kZS5OYW1lO1xuICAgICAgICAgICAgICAgICAgICBub2RlLkZpbGVzID0gcmVzdWx0Lk5vZGUuRmlsZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQYXRoVG9BbGxOb2RlcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgZmlsZSBpcyBzZWxlY3RlZFxuICAgICAqIEBwYXJhbSBmaWxlIEZpbGUgdGhhdCBpcyBzZWxlY3RlZFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RGaWxlKGZpbGU6IElCcm93c2VyRmlsZSkge1xuICAgICAgICBpZiAoIWZpbGUuSXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMuZm9yRWFjaCgoaXRtKSA9PiAoaXRtLklzRWRpdE1vZGUgPSBmYWxzZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZS5QYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZE5vZGUuUGF0aCArICcvJyArIGZpbGUuRmlsZW5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9ICcvJyArIGZpbGUuRmlsZW5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZUl0ZW0gPSBmaWxlO1xuICAgICAgICB0aGlzLmZpbGUuZW1pdCh0aGlzLnNlbGVjdGVkRmlsZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGNhbGxlZCB3aGVuIGEgbm9kZSBpcyBzZWxlY3RlZFxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0Tm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFub2RlLklzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoRXhwYW5kTm9kZShub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc2V0IHRoZSBFZGl0IE1vZGUgaW4gYWxsIE5vZGVzXG4gICAgICAgIHRoaXMucmVzZXROb2RlRWRpdE1vZGUobnVsbCk7XG5cbiAgICAgICAgaWYgKCFub2RlLkZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLkdldEZpbGVzKHRoaXMuYXBpdXJsLCBub2RlLlBhdGgsIHRoaXMuYWxsb3dlZHR5cGVzKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJGaWxlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXNlbGVjZWRmaWxlICE9PSBudWxsICYmIHRoaXMucHJlc2VsZWNlZGZpbGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnByZXNlbGVjZWRmaWxlLnN1YnN0cmluZyh0aGlzLnByZXNlbGVjZWRmaWxlLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBub2RlLkZpbGVzLmZpbmQoKGl0bSkgPT4gaXRtLkZpbGVuYW1lID09PSBmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RmlsZShmaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kL2NvbGxhcHNlIG1ldGhvZCBmb3Igbm9kZXNcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIHRoYXQgc2hvdWxkIGJlIG9wZW5lZCBvciBjbG9zZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3dpdGNoRXhwYW5kTm9kZShub2RlOiBJQnJvd3Nlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUuSXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgbm9kZS5Jc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLklzRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgbXVzdCBiZSBjYWxsZWQgd2hlbiBhbiB1cGxvYWQgaXMgY29tcGxldGVkLlxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgd2hlcmUgdXBsb2FkZWQgZmlsZXMgc2hvdWxkIGJlIGF0dGFjaGVkLlxuICAgICAqIEBwYXJhbSB1cGxvYWRJZExpc3QgTGlzdCBvZiB1cGxvYWQgSURzIHRoYXQgZmluaXNoZWQgdXBsb2FkaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGxvYWRDb21wbGV0ZShub2RlOiBJQnJvd3Nlck5vZGUsIHVwbG9hZElkTGlzdDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHVwbG9hZElkTGlzdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdXBsb2FkSWRMaXN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51cGxvYWRzLmluZGV4T2YoZWxlbWVudCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2Fkcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnVwbG9hZHMucG9wKCk7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyU2VydmljZVxuICAgICAgICAgICAgICAgIC5TYXZlRmlsZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCBpZCwgdGhpcy5hbGxvd2VkdHlwZXMpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVNb3ZlZChpZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBYnN0cmFjdCBtZXRob2QgaW52b2tlZCB3aGVuIHRoZSB1cGxvYWRlZCBmaWxlIGhhcyBiZWVuIG1vdmVkIGZyb20gdGhlIHRlbXAgZm9sZGVyIGludG8gdGhlIHN0cnVjdHVyZS5cbiAgICAgKiBAcGFyYW0gdXBsb2FkaWQgVXBsb2FkIElEXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHVwbG9hZGVkRmlsZU1vdmVkKHVwbG9hZGlkOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcblxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZSBtZXRob2QgdGhhdCByZW1vdmVzIG5ldyBub2RlcyBmcm9tIHRoZSBnaXZlbiBub2RlIGFuZCBhbGwgaXRzIGNoaWxkcmVuXG4gICAgICogQHBhcmFtIG5vZGUgTm9kZSBmcm9tIHdoaWNoIGFsbCBuZXcgbm9kZXMgc2hvdWxkIGJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjbGVhck5ld0NoaWxkTm9kZXMobm9kZTogSUJyb3dzZXJOb2RlKSB7XG4gICAgICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdG0uSXNOZXdOb2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5DaGlsZE5vZGVzLnNwbGljZShub2RlLkNoaWxkTm9kZXMuaW5kZXhPZihpdG0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4gdGhpcy5jbGVhck5ld0NoaWxkTm9kZXMoaXRtKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgZ2VuZXJhdGVzIHRoZSBwYXRoIGZvciBhIG5vZGVcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIGZvciB3aGljaCB0aGUgcGF0aCBzaG91bGQgYmUgZ2VuZXJhdGVkXG4gICAgICogQHBhcmFtIHBhcmVudFBhdGggUGFyZW50IHBhdGhcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbGxQYXRoKG5vZGU6IElCcm93c2VyTm9kZSwgcGFyZW50UGF0aDogc3RyaW5nKSB7XG4gICAgICAgIG5vZGUuUGF0aCA9IHBhcmVudFBhdGggKyAnLycgKyBub2RlLk5hbWU7XG4gICAgICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsbFBhdGgoaXRtLCBub2RlLlBhdGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyB0aGUgcGFyZW50IG5vZGUgaW4gdGhlIHRyZWVcbiAgICAgKiBAcGFyYW0gbm9kZSBDdXJyZW50IG5vZGVcbiAgICAgKiBAcGFyYW0gbm9kZVRvRmluZCBOb2RlIHRvIGZpbmRcbiAgICAgKiBAcmV0dXJucyBUaGUgbm9kZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIE5VTExcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbmRQYXJlbnROb2RlKG5vZGU6IElCcm93c2VyTm9kZSwgbm9kZVRvRmluZDogSUJyb3dzZXJOb2RlKTogSUJyb3dzZXJOb2RlIHtcbiAgICAgICAgaWYgKG5vZGUuQ2hpbGROb2Rlcy5pbmRleE9mKG5vZGVUb0ZpbmQpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLkNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmluZFBhcmVudE5vZGUoY2hpbGQsIG5vZGVUb0ZpbmQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIG5vZGUgYWNjb3JkaW5nIHRvIGEgVVJMIHBhdGhcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdoaWNoIHRvIHNlYXJjaFxuICAgICAqIEBwYXJhbSBwYXRoIFBhdGggdG8gc2VhcmNoIGZvclxuICAgICAqIEByZXR1cm5zIE5vZGUgbWF0Y2hpbmcgdGhlIHBhdGguIFJldHVybnMgTlVMTCBpZiBub3QgZm91bmRcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbmRTZWxlY3RlZE5vZGVCeVBhdGgobm9kZTogSUJyb3dzZXJOb2RlLCBwYXRoOiBzdHJpbmcpOiBJQnJvd3Nlck5vZGUge1xuICAgICAgICAvLyBDYW5jZWwgaWYgcGF0aCBpcyBub3QgZGVmaW5lZFxuICAgICAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkIHx8IHBhdGggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3BsaXQgcGF0aCBpbnRvIGFycmF5IGFuZCBzZXQgdGhlIHJvb3QgZm9sZGVyIG5hbWVcbiAgICAgICAgY29uc3QgcGF0aEFycmF5ID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICBwYXRoQXJyYXlbMF0gPSB0aGlzLnJvb3ROb2RlLk5hbWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFNlbGVjdGVkTm9kZUJ5UGF0aEFycmF5KG5vZGUsIHBhdGhBcnJheSwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgYSBub2RlIGJhc2VkIG9uIGFuIGFycmF5IG9mIG5vZGUgbmFtZXNcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdoaWNoIHRvIHNlYXJjaFxuICAgICAqIEBwYXJhbSBwYXRoIEFycmF5IG9mIG5vZGUgbmFtZXMgcmVwcmVzZW50aW5nIHRoZSBoaWVyYXJjaHkgb2YgdGhlIHBhdGhcbiAgICAgKiBAcGFyYW0gaW5kZXggQ3VycmVudCBpbmRleCBpbiB0aGUgcGF0aCBhcnJheVxuICAgICAqIEByZXR1cm5zIE5vZGUgaWYgZm91bmQsIG90aGVyd2lzZSBOVUxMXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaW5kU2VsZWN0ZWROb2RlQnlQYXRoQXJyYXkobm9kZTogSUJyb3dzZXJOb2RlLCBwYXRoOiBzdHJpbmdbXSwgaW5kZXg6IG51bWJlcik6IElCcm93c2VyTm9kZSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGZvbGRlciBpcyBjb3JyZWN0LiBSZXR1cm4gdGhlIGxhc3QgZm9sZGVyLiBUaGUgbGFzdCBpbmRleCBpbiBwYXRoIGlzIHRoZSBmaWxlbmFtZVxuICAgICAgICBpZiAobm9kZS5OYW1lID09PSBwYXRoW2luZGV4XSAmJiBwYXRoLmxlbmd0aCAtIDIgPT09IGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLk5hbWUgPT09IHBhdGhbaW5kZXhdKSB7XG4gICAgICAgICAgICAvLyBFeHBhbmQgTm9kZVxuICAgICAgICAgICAgbm9kZS5Jc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBub2RlLkNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRTZWxlY3RlZE5vZGVCeVBhdGhBcnJheShpdGVtLCBwYXRoLCBpbmRleCArIDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmUgbWV0aG9kIHRoYXQgZW5kcyBlZGl0IG1vZGUgZm9yIHRoZSBub2RlIGFuZCBhbGwgaXRzIGNoaWxkcmVuLlxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgZm9yIHdoaWNoIGVkaXQgbW9kZSBzaG91bGQgYmUgZW5kZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2V0Tm9kZUVkaXRNb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldE5vZGVFZGl0TW9kZSh0aGlzLnJvb3ROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuSXNFZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5DaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4gdGhpcy5yZXNldE5vZGVFZGl0TW9kZShpdG0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhdGggaW4gYWxsIG5vZGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRQYXRoVG9BbGxOb2RlcygpIHtcbiAgICAgICAgdGhpcy5yb290Tm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWxsUGF0aChpdG0sICcnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcml2YXRlIE1ldGhvZHNcbn1cbiJdLCJtYXBwaW5ncyI6IjsyRkFJQSxPQUNJQSxlQUFlLENBQ2ZDLHVCQUF1QixDQUN2QkMsd0JBQXdCLENBQ3hCQyxxQkFBcUIsQ0FDckJDLDhCQUE4QixLQUMzQixnQkFBZ0IsQ0FDdkIs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LENBQUEsTUFBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxtQkFBSSxDQUFDd0UsaUJBQWlCLENBQUNQLEdBQUcsQ0FBQyxDQUFELENBQUMsQ0FBQyxDLENBQ2hFLEtBQUFuRSxjQUFBLEdBQUEyQyxDQUFBLFcsQ0FFVCxDQUVBOztPQUdRcUMsaUJBQWlCQSxDQUFBLEVBQUFoRixjQUFBLEdBQUFDLENBQUEsTUFBQUQsQ0FBQSxpQkFBQUUsQ0FBQSxRQUNyQixJQUFJLENBQUNVLFFBQVEsQ0FBQ0UsVUFBVSxDQUFDb0QsT0FBTyxDQUFFQyxHQUFHLEVBQUksQ0FBQW5FLGNBQUEsR0FBQUMsQ0FBQSxNQUFBRCxDQUFBLGlCQUFBRSxDQUFBLFFBQ3JDLElBQUksQ0FBQ2tFLFFBQVEsQ0FBQ0QsR0FBRyxDQUFFLEVBQUUsQ0FBQyxDQUMxQixDQUFDLENBQUMsQ0FDTixDLHlIQXhvQmtCdkUsb0JBQW9CLENBQUF1SCxJQUFBLEdBQUFDLEtBQUEsQ0FBQUMsRUFBQSxDQUFBQyxVQUFBLEdBQUFGLEtBQUEsQ0FBQUcsRUFBQSxDQUFBQyxRQUFBLEdBQUFDLE1BQUEsQ0FBQUYsRUFBQSxDQUFBRyxlQUFBLENBQUFuSSxTQUFBLEksK0dBQXBCSyxvQkFBb0IsQ0FBQStILE1BQUEsRUFBQXZILFlBQUEsZ0JBQUFDLGVBQUEsbUJBQUFDLGVBQUEsbUJBQUFDLGVBQUEsbUJBQUFDLGlCQUFBLHFCQUFBQyxpQkFBQSxxQkFBQUMsaUJBQUEscUJBQUE4QyxNQUFBLFVBQUFkLFlBQUEsaUJBQUFrRixPQUFBLEVBQUFqSCxJQUFBLFNBQUFrSCxJQUFBLEVBQUFDLFNBQUEsbURBQUFDLFFBQUEsQ0FBQVIsRUFBQSxJLCtHQUFwQjNILG9CQUFvQixDQUFBb0ksVUFBQSxHLEtBRHpDekksUyxrSkF1QlVhLFlBQVksRyxLQURsQlYsSyxHQU9NVyxlQUFlLEcsS0FEckJYLEssR0FPTVksZUFBZSxHLEtBRHJCWixLLEdBT01hLGVBQWUsRyxLQURyQmIsSyxHQU9NYyxpQkFBaUIsRyxLQUR2QmQsSyxHQU9NZSxpQkFBaUIsRyxLQUR2QmYsSyxHQU9NZ0IsaUJBQWlCLEcsS0FEdkJoQixLLEdBT004RCxNQUFNLEcsS0FEWjlELEssR0FPTWlCLElBQUksRyxLQURWaEIsTSxHQTZJVStDLFlBQVksRyxLQUR0QmhELEssR0F3Rk02RSxZQUFZLEcsS0FMbEI5RSxZQUFZLEMsTUFBQyxnQkFBZ0IsQ0FBRSxDQUFDLGVBQWUsQ0FBQyxDIiwiaWdub3JlTGlzdCI6W119