@simpleangularcontrols/sac-common 10.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/README.md +16 -0
  2. package/bundles/simpleangularcontrols-sac-common.umd.js +12054 -0
  3. package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -0
  4. package/bundles/simpleangularcontrols-sac-common.umd.min.js +2 -0
  5. package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -0
  6. package/common/basedatetimecontrol.d.ts +83 -0
  7. package/common/basedatetimecontrol.ngfactory.d.ts +1 -0
  8. package/common/baseinputcontrol.d.ts +42 -0
  9. package/common/baseinputcontrol.ngfactory.d.ts +1 -0
  10. package/common/baselistcontrol.d.ts +43 -0
  11. package/common/baselistcontrol.ngfactory.d.ts +1 -0
  12. package/common/basemodelcontrol.d.ts +252 -0
  13. package/common/basemodelcontrol.ngfactory.d.ts +1 -0
  14. package/common/baseselectcontrol.d.ts +14 -0
  15. package/common/baseselectcontrol.ngfactory.d.ts +1 -0
  16. package/common/baseuploadcontrol.d.ts +284 -0
  17. package/common/baseuploadcontrol.ngfactory.d.ts +1 -0
  18. package/components/browser/browser.d.ts +267 -0
  19. package/components/browser/browser.ngfactory.d.ts +1 -0
  20. package/components/browser/models/browserfile.d.ts +17 -0
  21. package/components/browser/models/browserfile.ngfactory.d.ts +1 -0
  22. package/components/browser/models/browserfiledeleterequest.d.ts +18 -0
  23. package/components/browser/models/browserfiledeleterequest.ngfactory.d.ts +1 -0
  24. package/components/browser/models/browserfilerenamerequest.d.ts +22 -0
  25. package/components/browser/models/browserfilerenamerequest.ngfactory.d.ts +1 -0
  26. package/components/browser/models/browserfileresponse.d.ts +10 -0
  27. package/components/browser/models/browserfileresponse.ngfactory.d.ts +1 -0
  28. package/components/browser/models/browserfilesaverequest.d.ts +22 -0
  29. package/components/browser/models/browserfilesaverequest.ngfactory.d.ts +1 -0
  30. package/components/browser/models/browsernode.d.ts +34 -0
  31. package/components/browser/models/browsernode.ngfactory.d.ts +1 -0
  32. package/components/browser/models/browsernodedeleterequest.d.ts +14 -0
  33. package/components/browser/models/browsernodedeleterequest.ngfactory.d.ts +1 -0
  34. package/components/browser/models/browsernodenewrequest.d.ts +18 -0
  35. package/components/browser/models/browsernodenewrequest.ngfactory.d.ts +1 -0
  36. package/components/browser/models/browsernoderenamerequest.d.ts +18 -0
  37. package/components/browser/models/browsernoderenamerequest.ngfactory.d.ts +1 -0
  38. package/components/browser/models/browsernoderequest.d.ts +18 -0
  39. package/components/browser/models/browsernoderequest.ngfactory.d.ts +1 -0
  40. package/components/browser/models/browsernoderesponse.d.ts +10 -0
  41. package/components/browser/models/browsernoderesponse.ngfactory.d.ts +1 -0
  42. package/controls/buttons/button.d.ts +70 -0
  43. package/controls/buttons/button.ngfactory.d.ts +1 -0
  44. package/controls/checkbox/checkbox.d.ts +23 -0
  45. package/controls/checkbox/checkbox.ngfactory.d.ts +1 -0
  46. package/controls/checkbox/radiobutton.d.ts +79 -0
  47. package/controls/checkbox/radiobutton.ngfactory.d.ts +1 -0
  48. package/controls/checkbox/radiobuttons.d.ts +60 -0
  49. package/controls/checkbox/radiobuttons.ngfactory.d.ts +1 -0
  50. package/controls/confirm/confirm.button.d.ts +25 -0
  51. package/controls/confirm/confirm.button.ngfactory.d.ts +1 -0
  52. package/controls/confirm/confirm.d.ts +49 -0
  53. package/controls/confirm/confirm.ngfactory.d.ts +1 -0
  54. package/controls/confirm/confirm.service.d.ts +63 -0
  55. package/controls/confirm/confirm.service.ngfactory.d.ts +1 -0
  56. package/controls/contextmenu/contextmenu.d.ts +113 -0
  57. package/controls/contextmenu/contextmenu.ngfactory.d.ts +1 -0
  58. package/controls/contextmenu/contextmenuanchor.d.ts +15 -0
  59. package/controls/contextmenu/contextmenuanchor.ngfactory.d.ts +1 -0
  60. package/controls/contextmenu/contextmenucontainer.d.ts +15 -0
  61. package/controls/contextmenu/contextmenucontainer.ngfactory.d.ts +1 -0
  62. package/controls/contextmenu/contextmenuitem.d.ts +5 -0
  63. package/controls/contextmenu/contextmenuitem.ngfactory.d.ts +1 -0
  64. package/controls/contextmenu/contextmenuitembutton.d.ts +66 -0
  65. package/controls/contextmenu/contextmenuitembutton.ngfactory.d.ts +1 -0
  66. package/controls/datetime/date.d.ts +120 -0
  67. package/controls/datetime/date.ngfactory.d.ts +1 -0
  68. package/controls/datetime/dateselector.d.ts +161 -0
  69. package/controls/datetime/dateselector.ngfactory.d.ts +1 -0
  70. package/controls/datetime/datetime.d.ts +135 -0
  71. package/controls/datetime/datetime.ngfactory.d.ts +1 -0
  72. package/controls/datetime/time.d.ts +115 -0
  73. package/controls/datetime/time.ngfactory.d.ts +1 -0
  74. package/controls/dialog/dialog.d.ts +105 -0
  75. package/controls/dialog/dialog.ngfactory.d.ts +1 -0
  76. package/controls/form/form.d.ts +47 -0
  77. package/controls/form/form.ngfactory.d.ts +1 -0
  78. package/controls/grid/grid.d.ts +125 -0
  79. package/controls/grid/grid.ngfactory.d.ts +1 -0
  80. package/controls/grid/gridbutton.d.ts +33 -0
  81. package/controls/grid/gridbutton.ngfactory.d.ts +1 -0
  82. package/controls/grid/gridcolumn.d.ts +28 -0
  83. package/controls/grid/gridcolumn.ngfactory.d.ts +1 -0
  84. package/controls/grid/gridcolumnaction.d.ts +15 -0
  85. package/controls/grid/gridcolumnaction.ngfactory.d.ts +1 -0
  86. package/controls/grid/gridcolumnbase.d.ts +86 -0
  87. package/controls/grid/gridcolumnbase.ngfactory.d.ts +1 -0
  88. package/controls/grid/gridimage.d.ts +9 -0
  89. package/controls/grid/gridimage.ngfactory.d.ts +1 -0
  90. package/controls/grid/model.d.ts +83 -0
  91. package/controls/grid/model.ngfactory.d.ts +1 -0
  92. package/controls/grid/paging.d.ts +147 -0
  93. package/controls/grid/paging.ngfactory.d.ts +1 -0
  94. package/controls/input/input.d.ts +35 -0
  95. package/controls/input/input.ngfactory.d.ts +1 -0
  96. package/controls/input/inputarea.d.ts +26 -0
  97. package/controls/input/inputarea.ngfactory.d.ts +1 -0
  98. package/controls/input/inputcurrency.d.ts +11 -0
  99. package/controls/input/inputcurrency.ngfactory.d.ts +1 -0
  100. package/controls/input/inputdecimal.d.ts +59 -0
  101. package/controls/input/inputdecimal.ngfactory.d.ts +1 -0
  102. package/controls/input/inputemail.d.ts +19 -0
  103. package/controls/input/inputemail.ngfactory.d.ts +1 -0
  104. package/controls/input/inputinteger.d.ts +59 -0
  105. package/controls/input/inputinteger.ngfactory.d.ts +1 -0
  106. package/controls/input/inputpassword.d.ts +23 -0
  107. package/controls/input/inputpassword.ngfactory.d.ts +1 -0
  108. package/controls/input/inputsearch.d.ts +23 -0
  109. package/controls/input/inputsearch.ngfactory.d.ts +1 -0
  110. package/controls/layout/formlayout.d.ts +46 -0
  111. package/controls/layout/formlayout.ngfactory.d.ts +1 -0
  112. package/controls/list/dropdown.d.ts +138 -0
  113. package/controls/list/dropdown.ngfactory.d.ts +1 -0
  114. package/controls/list/list.module.d.ts +2 -0
  115. package/controls/list/list.module.ngfactory.d.ts +3 -0
  116. package/controls/list/listbox.d.ts +86 -0
  117. package/controls/list/listbox.ngfactory.d.ts +1 -0
  118. package/controls/multilanguage/multilanguageinput.d.ts +102 -0
  119. package/controls/multilanguage/multilanguageinput.ngfactory.d.ts +1 -0
  120. package/controls/multilanguage/multilanguageinputarea.d.ts +107 -0
  121. package/controls/multilanguage/multilanguageinputarea.ngfactory.d.ts +1 -0
  122. package/controls/static/formcontainer.d.ts +31 -0
  123. package/controls/static/formcontainer.ngfactory.d.ts +1 -0
  124. package/controls/static/staticlabel.d.ts +18 -0
  125. package/controls/static/staticlabel.ngfactory.d.ts +1 -0
  126. package/controls/tabs/tab.d.ts +45 -0
  127. package/controls/tabs/tab.ngfactory.d.ts +1 -0
  128. package/controls/tabs/tabitem.d.ts +30 -0
  129. package/controls/tabs/tabitem.ngfactory.d.ts +1 -0
  130. package/controls/tinymce/tinymce.d.ts +149 -0
  131. package/controls/tinymce/tinymce.ngfactory.d.ts +1 -0
  132. package/controls/tinymce/tinymcedialogsettings.d.ts +27 -0
  133. package/controls/tinymce/tinymcedialogsettings.ngfactory.d.ts +1 -0
  134. package/controls/tinymce/tinymcedialogsettingsmeta.d.ts +9 -0
  135. package/controls/tinymce/tinymcedialogsettingsmeta.ngfactory.d.ts +1 -0
  136. package/controls/tinymce/tinymceinstance.d.ts +10 -0
  137. package/controls/tinymce/tinymceinstance.ngfactory.d.ts +1 -0
  138. package/controls/tooltip/tooltip.d.ts +138 -0
  139. package/controls/tooltip/tooltip.ngfactory.d.ts +1 -0
  140. package/controls/treeview/ngtreeitemaction.d.ts +40 -0
  141. package/controls/treeview/ngtreeitemaction.ngfactory.d.ts +1 -0
  142. package/controls/treeview/treeview.d.ts +185 -0
  143. package/controls/treeview/treeview.ngfactory.d.ts +1 -0
  144. package/controls/treeview/treeviewchild.d.ts +12 -0
  145. package/controls/treeview/treeviewchild.ngfactory.d.ts +1 -0
  146. package/controls/upload/dropzonemultiple.d.ts +70 -0
  147. package/controls/upload/dropzonemultiple.ngfactory.d.ts +1 -0
  148. package/controls/upload/dropzonesingle.d.ts +47 -0
  149. package/controls/upload/dropzonesingle.ngfactory.d.ts +1 -0
  150. package/controls/upload/uploadmultiple.d.ts +50 -0
  151. package/controls/upload/uploadmultiple.ngfactory.d.ts +1 -0
  152. package/controls/upload/uploadsingle.d.ts +27 -0
  153. package/controls/upload/uploadsingle.ngfactory.d.ts +1 -0
  154. package/controls/validation/validationsummary.d.ts +60 -0
  155. package/controls/validation/validationsummary.ngfactory.d.ts +1 -0
  156. package/controls/wizard/wizard.d.ts +73 -0
  157. package/controls/wizard/wizard.ngfactory.d.ts +1 -0
  158. package/controls/wizard/wizarditem.d.ts +25 -0
  159. package/controls/wizard/wizarditem.ngfactory.d.ts +1 -0
  160. package/enums/ButtonRoleType.d.ts +1 -0
  161. package/enums/ButtonRoleType.ngfactory.d.ts +1 -0
  162. package/enums/ControlHeight.d.ts +17 -0
  163. package/enums/ControlHeight.ngfactory.d.ts +1 -0
  164. package/enums/IconType.d.ts +7 -0
  165. package/enums/IconType.ngfactory.d.ts +1 -0
  166. package/esm2015/common/basedatetimecontrol.js +164 -0
  167. package/esm2015/common/basedatetimecontrol.ngfactory.js +7 -0
  168. package/esm2015/common/baseinputcontrol.js +78 -0
  169. package/esm2015/common/baseinputcontrol.ngfactory.js +7 -0
  170. package/esm2015/common/baselistcontrol.js +55 -0
  171. package/esm2015/common/baselistcontrol.ngfactory.js +7 -0
  172. package/esm2015/common/basemodelcontrol.js +483 -0
  173. package/esm2015/common/basemodelcontrol.ngfactory.js +7 -0
  174. package/esm2015/common/baseselectcontrol.js +26 -0
  175. package/esm2015/common/baseselectcontrol.ngfactory.js +7 -0
  176. package/esm2015/common/baseuploadcontrol.js +457 -0
  177. package/esm2015/common/baseuploadcontrol.ngfactory.js +7 -0
  178. package/esm2015/components/browser/browser.js +545 -0
  179. package/esm2015/components/browser/browser.ngfactory.js +7 -0
  180. package/esm2015/components/browser/models/browserfile.js +1 -0
  181. package/esm2015/components/browser/models/browserfile.ngfactory.js +7 -0
  182. package/esm2015/components/browser/models/browserfiledeleterequest.js +13 -0
  183. package/esm2015/components/browser/models/browserfiledeleterequest.ngfactory.js +7 -0
  184. package/esm2015/components/browser/models/browserfilerenamerequest.js +13 -0
  185. package/esm2015/components/browser/models/browserfilerenamerequest.ngfactory.js +7 -0
  186. package/esm2015/components/browser/models/browserfileresponse.js +1 -0
  187. package/esm2015/components/browser/models/browserfileresponse.ngfactory.js +7 -0
  188. package/esm2015/components/browser/models/browserfilesaverequest.js +13 -0
  189. package/esm2015/components/browser/models/browserfilesaverequest.ngfactory.js +7 -0
  190. package/esm2015/components/browser/models/browsernode.js +1 -0
  191. package/esm2015/components/browser/models/browsernode.ngfactory.js +7 -0
  192. package/esm2015/components/browser/models/browsernodedeleterequest.js +13 -0
  193. package/esm2015/components/browser/models/browsernodedeleterequest.ngfactory.js +7 -0
  194. package/esm2015/components/browser/models/browsernodenewrequest.js +13 -0
  195. package/esm2015/components/browser/models/browsernodenewrequest.ngfactory.js +7 -0
  196. package/esm2015/components/browser/models/browsernoderenamerequest.js +13 -0
  197. package/esm2015/components/browser/models/browsernoderenamerequest.ngfactory.js +7 -0
  198. package/esm2015/components/browser/models/browsernoderequest.js +13 -0
  199. package/esm2015/components/browser/models/browsernoderequest.ngfactory.js +7 -0
  200. package/esm2015/components/browser/models/browsernoderesponse.js +1 -0
  201. package/esm2015/components/browser/models/browsernoderesponse.ngfactory.js +7 -0
  202. package/esm2015/controls/buttons/button.js +141 -0
  203. package/esm2015/controls/buttons/button.ngfactory.js +7 -0
  204. package/esm2015/controls/checkbox/checkbox.js +33 -0
  205. package/esm2015/controls/checkbox/checkbox.ngfactory.js +7 -0
  206. package/esm2015/controls/checkbox/radiobutton.js +115 -0
  207. package/esm2015/controls/checkbox/radiobutton.ngfactory.js +7 -0
  208. package/esm2015/controls/checkbox/radiobuttons.js +113 -0
  209. package/esm2015/controls/checkbox/radiobuttons.ngfactory.js +7 -0
  210. package/esm2015/controls/confirm/confirm.button.js +32 -0
  211. package/esm2015/controls/confirm/confirm.button.ngfactory.js +7 -0
  212. package/esm2015/controls/confirm/confirm.js +75 -0
  213. package/esm2015/controls/confirm/confirm.ngfactory.js +7 -0
  214. package/esm2015/controls/confirm/confirm.service.js +87 -0
  215. package/esm2015/controls/confirm/confirm.service.ngfactory.js +7 -0
  216. package/esm2015/controls/contextmenu/contextmenu.js +194 -0
  217. package/esm2015/controls/contextmenu/contextmenu.ngfactory.js +7 -0
  218. package/esm2015/controls/contextmenu/contextmenuanchor.js +22 -0
  219. package/esm2015/controls/contextmenu/contextmenuanchor.ngfactory.js +7 -0
  220. package/esm2015/controls/contextmenu/contextmenucontainer.js +22 -0
  221. package/esm2015/controls/contextmenu/contextmenucontainer.ngfactory.js +7 -0
  222. package/esm2015/controls/contextmenu/contextmenuitem.js +10 -0
  223. package/esm2015/controls/contextmenu/contextmenuitem.ngfactory.js +7 -0
  224. package/esm2015/controls/contextmenu/contextmenuitembutton.js +97 -0
  225. package/esm2015/controls/contextmenu/contextmenuitembutton.ngfactory.js +7 -0
  226. package/esm2015/controls/datetime/date.js +212 -0
  227. package/esm2015/controls/datetime/date.ngfactory.js +7 -0
  228. package/esm2015/controls/datetime/dateselector.js +458 -0
  229. package/esm2015/controls/datetime/dateselector.ngfactory.js +7 -0
  230. package/esm2015/controls/datetime/datetime.js +229 -0
  231. package/esm2015/controls/datetime/datetime.ngfactory.js +7 -0
  232. package/esm2015/controls/datetime/time.js +212 -0
  233. package/esm2015/controls/datetime/time.ngfactory.js +7 -0
  234. package/esm2015/controls/dialog/dialog.js +207 -0
  235. package/esm2015/controls/dialog/dialog.ngfactory.js +7 -0
  236. package/esm2015/controls/form/form.js +110 -0
  237. package/esm2015/controls/form/form.ngfactory.js +7 -0
  238. package/esm2015/controls/grid/grid.js +144 -0
  239. package/esm2015/controls/grid/grid.ngfactory.js +7 -0
  240. package/esm2015/controls/grid/gridbutton.js +54 -0
  241. package/esm2015/controls/grid/gridbutton.ngfactory.js +7 -0
  242. package/esm2015/controls/grid/gridcolumn.js +49 -0
  243. package/esm2015/controls/grid/gridcolumn.ngfactory.js +7 -0
  244. package/esm2015/controls/grid/gridcolumnaction.js +26 -0
  245. package/esm2015/controls/grid/gridcolumnaction.ngfactory.js +7 -0
  246. package/esm2015/controls/grid/gridcolumnbase.js +126 -0
  247. package/esm2015/controls/grid/gridcolumnbase.ngfactory.js +7 -0
  248. package/esm2015/controls/grid/gridimage.js +13 -0
  249. package/esm2015/controls/grid/gridimage.ngfactory.js +7 -0
  250. package/esm2015/controls/grid/model.js +79 -0
  251. package/esm2015/controls/grid/model.ngfactory.js +7 -0
  252. package/esm2015/controls/grid/paging.js +254 -0
  253. package/esm2015/controls/grid/paging.ngfactory.js +7 -0
  254. package/esm2015/controls/input/input.js +66 -0
  255. package/esm2015/controls/input/input.ngfactory.js +7 -0
  256. package/esm2015/controls/input/inputarea.js +54 -0
  257. package/esm2015/controls/input/inputarea.ngfactory.js +7 -0
  258. package/esm2015/controls/input/inputcurrency.js +31 -0
  259. package/esm2015/controls/input/inputcurrency.ngfactory.js +7 -0
  260. package/esm2015/controls/input/inputdecimal.js +146 -0
  261. package/esm2015/controls/input/inputdecimal.ngfactory.js +7 -0
  262. package/esm2015/controls/input/inputemail.js +41 -0
  263. package/esm2015/controls/input/inputemail.ngfactory.js +7 -0
  264. package/esm2015/controls/input/inputinteger.js +130 -0
  265. package/esm2015/controls/input/inputinteger.ngfactory.js +7 -0
  266. package/esm2015/controls/input/inputpassword.js +46 -0
  267. package/esm2015/controls/input/inputpassword.ngfactory.js +7 -0
  268. package/esm2015/controls/input/inputsearch.js +37 -0
  269. package/esm2015/controls/input/inputsearch.ngfactory.js +7 -0
  270. package/esm2015/controls/layout/formlayout.js +70 -0
  271. package/esm2015/controls/layout/formlayout.ngfactory.js +7 -0
  272. package/esm2015/controls/list/dropdown.js +270 -0
  273. package/esm2015/controls/list/dropdown.ngfactory.js +7 -0
  274. package/esm2015/controls/list/list.module.js +11 -0
  275. package/esm2015/controls/list/list.module.ngfactory.js +7 -0
  276. package/esm2015/controls/list/listbox.js +187 -0
  277. package/esm2015/controls/list/listbox.ngfactory.js +7 -0
  278. package/esm2015/controls/multilanguage/multilanguageinput.js +230 -0
  279. package/esm2015/controls/multilanguage/multilanguageinput.ngfactory.js +7 -0
  280. package/esm2015/controls/multilanguage/multilanguageinputarea.js +231 -0
  281. package/esm2015/controls/multilanguage/multilanguageinputarea.ngfactory.js +7 -0
  282. package/esm2015/controls/static/formcontainer.js +50 -0
  283. package/esm2015/controls/static/formcontainer.ngfactory.js +7 -0
  284. package/esm2015/controls/static/staticlabel.js +31 -0
  285. package/esm2015/controls/static/staticlabel.ngfactory.js +7 -0
  286. package/esm2015/controls/tabs/tab.js +72 -0
  287. package/esm2015/controls/tabs/tab.ngfactory.js +7 -0
  288. package/esm2015/controls/tabs/tabitem.js +32 -0
  289. package/esm2015/controls/tabs/tabitem.ngfactory.js +7 -0
  290. package/esm2015/controls/tinymce/tinymce.js +238 -0
  291. package/esm2015/controls/tinymce/tinymce.ngfactory.js +7 -0
  292. package/esm2015/controls/tinymce/tinymcedialogsettings.js +13 -0
  293. package/esm2015/controls/tinymce/tinymcedialogsettings.ngfactory.js +7 -0
  294. package/esm2015/controls/tinymce/tinymcedialogsettingsmeta.js +4 -0
  295. package/esm2015/controls/tinymce/tinymcedialogsettingsmeta.ngfactory.js +7 -0
  296. package/esm2015/controls/tinymce/tinymceinstance.js +1 -0
  297. package/esm2015/controls/tinymce/tinymceinstance.ngfactory.js +7 -0
  298. package/esm2015/controls/tooltip/tooltip.js +361 -0
  299. package/esm2015/controls/tooltip/tooltip.ngfactory.js +7 -0
  300. package/esm2015/controls/treeview/ngtreeitemaction.js +60 -0
  301. package/esm2015/controls/treeview/ngtreeitemaction.ngfactory.js +7 -0
  302. package/esm2015/controls/treeview/treeview.js +322 -0
  303. package/esm2015/controls/treeview/treeview.ngfactory.js +7 -0
  304. package/esm2015/controls/treeview/treeviewchild.js +18 -0
  305. package/esm2015/controls/treeview/treeviewchild.ngfactory.js +7 -0
  306. package/esm2015/controls/upload/dropzonemultiple.js +163 -0
  307. package/esm2015/controls/upload/dropzonemultiple.ngfactory.js +7 -0
  308. package/esm2015/controls/upload/dropzonesingle.js +108 -0
  309. package/esm2015/controls/upload/dropzonesingle.ngfactory.js +7 -0
  310. package/esm2015/controls/upload/uploadmultiple.js +121 -0
  311. package/esm2015/controls/upload/uploadmultiple.ngfactory.js +7 -0
  312. package/esm2015/controls/upload/uploadsingle.js +55 -0
  313. package/esm2015/controls/upload/uploadsingle.ngfactory.js +7 -0
  314. package/esm2015/controls/validation/validationsummary.js +133 -0
  315. package/esm2015/controls/validation/validationsummary.ngfactory.js +7 -0
  316. package/esm2015/controls/wizard/wizard.js +139 -0
  317. package/esm2015/controls/wizard/wizard.ngfactory.js +7 -0
  318. package/esm2015/controls/wizard/wizarditem.js +27 -0
  319. package/esm2015/controls/wizard/wizarditem.ngfactory.js +7 -0
  320. package/esm2015/enums/ButtonRoleType.js +1 -0
  321. package/esm2015/enums/ButtonRoleType.ngfactory.js +7 -0
  322. package/esm2015/enums/ControlHeight.js +19 -0
  323. package/esm2015/enums/ControlHeight.ngfactory.js +7 -0
  324. package/esm2015/enums/IconType.js +9 -0
  325. package/esm2015/enums/IconType.ngfactory.js +7 -0
  326. package/esm2015/interfaces/ISacConfigurationService.js +1 -0
  327. package/esm2015/interfaces/ISacConfigurationService.ngfactory.js +7 -0
  328. package/esm2015/interfaces/ISacFileBrowserService.js +1 -0
  329. package/esm2015/interfaces/ISacFileBrowserService.ngfactory.js +7 -0
  330. package/esm2015/interfaces/ISacIconService.js +1 -0
  331. package/esm2015/interfaces/ISacIconService.ngfactory.js +7 -0
  332. package/esm2015/interfaces/ISacLabelSizes.js +1 -0
  333. package/esm2015/interfaces/ISacLabelSizes.ngfactory.js +7 -0
  334. package/esm2015/interfaces/ISacLanguageService.js +1 -0
  335. package/esm2015/interfaces/ISacLanguageService.ngfactory.js +7 -0
  336. package/esm2015/interfaces/ISacLocalisationService.js +1 -0
  337. package/esm2015/interfaces/ISacLocalisationService.ngfactory.js +7 -0
  338. package/esm2015/interfaces/ISacValidationKeyService.js +1 -0
  339. package/esm2015/interfaces/ISacValidationKeyService.ngfactory.js +7 -0
  340. package/esm2015/interfaces/iabstractcontrollabel.js +1 -0
  341. package/esm2015/interfaces/iabstractcontrollabel.ngfactory.js +7 -0
  342. package/esm2015/interfaces/iconfirmcomponent.js +1 -0
  343. package/esm2015/interfaces/iconfirmcomponent.ngfactory.js +7 -0
  344. package/esm2015/interfaces/idatetimecontrol.js +1 -0
  345. package/esm2015/interfaces/idatetimecontrol.ngfactory.js +7 -0
  346. package/esm2015/interfaces/iuploadcontrol.js +1 -0
  347. package/esm2015/interfaces/iuploadcontrol.ngfactory.js +7 -0
  348. package/esm2015/models/languagemodel.js +13 -0
  349. package/esm2015/models/languagemodel.ngfactory.js +7 -0
  350. package/esm2015/public_api.js +101 -0
  351. package/esm2015/public_api.ngfactory.js +7 -0
  352. package/esm2015/services/index.js +7 -0
  353. package/esm2015/services/index.ngfactory.js +7 -0
  354. package/esm2015/services/sac-configuration.service.js +77 -0
  355. package/esm2015/services/sac-configuration.service.ngfactory.js +7 -0
  356. package/esm2015/services/sac-filebrowser.service.js +203 -0
  357. package/esm2015/services/sac-filebrowser.service.ngfactory.js +7 -0
  358. package/esm2015/services/sac-icon.service.js +155 -0
  359. package/esm2015/services/sac-icon.service.ngfactory.js +7 -0
  360. package/esm2015/services/sac-language.service.js +43 -0
  361. package/esm2015/services/sac-language.service.ngfactory.js +7 -0
  362. package/esm2015/services/sac-localisation.service.js +460 -0
  363. package/esm2015/services/sac-localisation.service.ngfactory.js +7 -0
  364. package/esm2015/services/sac-validationkey.service.js +156 -0
  365. package/esm2015/services/sac-validationkey.service.ngfactory.js +7 -0
  366. package/esm2015/simpleangularcontrols-sac-common.js +11 -0
  367. package/esm2015/simpleangularcontrols-sac-common.ngfactory.js +7 -0
  368. package/esm2015/utilities/convertion.js +32 -0
  369. package/esm2015/utilities/convertion.ngfactory.js +7 -0
  370. package/esm2015/utilities/datatypes.js +9 -0
  371. package/esm2015/utilities/datatypes.ngfactory.js +7 -0
  372. package/esm2015/utilities/enums.js +16 -0
  373. package/esm2015/utilities/enums.ngfactory.js +7 -0
  374. package/esm2015/utilities/guid.js +16 -0
  375. package/esm2015/utilities/guid.ngfactory.js +7 -0
  376. package/esm2015/utilities/interpolation.js +50 -0
  377. package/esm2015/utilities/interpolation.ngfactory.js +7 -0
  378. package/esm2015/utilities/positioning.js +301 -0
  379. package/esm2015/utilities/positioning.ngfactory.js +7 -0
  380. package/esm2015/validation/email.validator.js +13 -0
  381. package/esm2015/validation/email.validator.ngfactory.js +7 -0
  382. package/esm2015/validation/index.js +3 -0
  383. package/esm2015/validation/index.ngfactory.js +7 -0
  384. package/esm2015/validation/invaliddate.validator.js +14 -0
  385. package/esm2015/validation/invaliddate.validator.ngfactory.js +7 -0
  386. package/esm2015/validation/isDateValid.js +15 -0
  387. package/esm2015/validation/isDateValid.ngfactory.js +7 -0
  388. package/esm2015/validation/maxdate.validator.js +21 -0
  389. package/esm2015/validation/maxdate.validator.ngfactory.js +7 -0
  390. package/esm2015/validation/maxtime.validator.js +21 -0
  391. package/esm2015/validation/maxtime.validator.ngfactory.js +7 -0
  392. package/esm2015/validation/maxvalue.validator.js +16 -0
  393. package/esm2015/validation/maxvalue.validator.ngfactory.js +7 -0
  394. package/esm2015/validation/mindate.validator.js +21 -0
  395. package/esm2015/validation/mindate.validator.ngfactory.js +7 -0
  396. package/esm2015/validation/minfiles.validator.js +19 -0
  397. package/esm2015/validation/minfiles.validator.ngfactory.js +7 -0
  398. package/esm2015/validation/minlength.validator.js +21 -0
  399. package/esm2015/validation/minlength.validator.ngfactory.js +7 -0
  400. package/esm2015/validation/mintime.validator.js +21 -0
  401. package/esm2015/validation/mintime.validator.ngfactory.js +7 -0
  402. package/esm2015/validation/minvalue.validator.js +16 -0
  403. package/esm2015/validation/minvalue.validator.ngfactory.js +7 -0
  404. package/esm2015/validation/multilanguagerequired.validator.js +22 -0
  405. package/esm2015/validation/multilanguagerequired.validator.ngfactory.js +7 -0
  406. package/esm2015/validation/multilanguagerequiredany.validator.js +22 -0
  407. package/esm2015/validation/multilanguagerequiredany.validator.ngfactory.js +7 -0
  408. package/esm2015/validation/pattern.validator.js +16 -0
  409. package/esm2015/validation/pattern.validator.ngfactory.js +7 -0
  410. package/esm2015/validation/required.validator.js +13 -0
  411. package/esm2015/validation/required.validator.ngfactory.js +7 -0
  412. package/esm2015/validation/validation.class.js +189 -0
  413. package/esm2015/validation/validation.class.ngfactory.js +7 -0
  414. package/esm2015/validation/validationerrorcreator.js +11 -0
  415. package/esm2015/validation/validationerrorcreator.ngfactory.js +7 -0
  416. package/esm2015/validation/validationerroritem.js +27 -0
  417. package/esm2015/validation/validationerroritem.ngfactory.js +7 -0
  418. package/fesm2015/simpleangularcontrols-sac-common.js +10319 -0
  419. package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -0
  420. package/interfaces/ISacConfigurationService.d.ts +38 -0
  421. package/interfaces/ISacConfigurationService.ngfactory.d.ts +1 -0
  422. package/interfaces/ISacFileBrowserService.d.ts +65 -0
  423. package/interfaces/ISacFileBrowserService.ngfactory.d.ts +1 -0
  424. package/interfaces/ISacIconService.d.ts +89 -0
  425. package/interfaces/ISacIconService.ngfactory.d.ts +1 -0
  426. package/interfaces/ISacLabelSizes.d.ts +26 -0
  427. package/interfaces/ISacLabelSizes.ngfactory.d.ts +1 -0
  428. package/interfaces/ISacLanguageService.d.ts +12 -0
  429. package/interfaces/ISacLanguageService.ngfactory.d.ts +1 -0
  430. package/interfaces/ISacLocalisationService.d.ts +10 -0
  431. package/interfaces/ISacLocalisationService.ngfactory.d.ts +1 -0
  432. package/interfaces/ISacValidationKeyService.d.ts +52 -0
  433. package/interfaces/ISacValidationKeyService.ngfactory.d.ts +1 -0
  434. package/interfaces/iabstractcontrollabel.d.ts +6 -0
  435. package/interfaces/iabstractcontrollabel.ngfactory.d.ts +1 -0
  436. package/interfaces/iconfirmcomponent.d.ts +18 -0
  437. package/interfaces/iconfirmcomponent.ngfactory.d.ts +1 -0
  438. package/interfaces/idatetimecontrol.d.ts +7 -0
  439. package/interfaces/idatetimecontrol.ngfactory.d.ts +1 -0
  440. package/interfaces/iuploadcontrol.d.ts +9 -0
  441. package/interfaces/iuploadcontrol.ngfactory.d.ts +1 -0
  442. package/models/languagemodel.d.ts +22 -0
  443. package/models/languagemodel.ngfactory.d.ts +1 -0
  444. package/package.json +28 -0
  445. package/public_api.d.ts +79 -0
  446. package/public_api.ngfactory.d.ts +1 -0
  447. package/services/index.d.ts +6 -0
  448. package/services/index.ngfactory.d.ts +1 -0
  449. package/services/sac-configuration.service.d.ts +81 -0
  450. package/services/sac-configuration.service.ngfactory.d.ts +1 -0
  451. package/services/sac-filebrowser.service.d.ts +140 -0
  452. package/services/sac-filebrowser.service.ngfactory.d.ts +1 -0
  453. package/services/sac-icon.service.d.ts +184 -0
  454. package/services/sac-icon.service.ngfactory.d.ts +1 -0
  455. package/services/sac-language.service.d.ts +26 -0
  456. package/services/sac-language.service.ngfactory.d.ts +1 -0
  457. package/services/sac-localisation.service.d.ts +137 -0
  458. package/services/sac-localisation.service.ngfactory.d.ts +1 -0
  459. package/services/sac-validationkey.service.d.ts +55 -0
  460. package/services/sac-validationkey.service.ngfactory.d.ts +1 -0
  461. package/simpleangularcontrols-sac-common-10.0.0-rc.1.tgz +0 -0
  462. package/simpleangularcontrols-sac-common.d.ts +10 -0
  463. package/simpleangularcontrols-sac-common.metadata.json +1 -0
  464. package/simpleangularcontrols-sac-common.ngfactory.d.ts +1 -0
  465. package/utilities/convertion.d.ts +15 -0
  466. package/utilities/convertion.ngfactory.d.ts +1 -0
  467. package/utilities/datatypes.d.ts +6 -0
  468. package/utilities/datatypes.ngfactory.d.ts +1 -0
  469. package/utilities/enums.d.ts +10 -0
  470. package/utilities/enums.ngfactory.d.ts +1 -0
  471. package/utilities/guid.d.ts +4 -0
  472. package/utilities/guid.ngfactory.d.ts +1 -0
  473. package/utilities/interpolation.d.ts +21 -0
  474. package/utilities/interpolation.ngfactory.d.ts +1 -0
  475. package/utilities/positioning.d.ts +82 -0
  476. package/utilities/positioning.ngfactory.d.ts +1 -0
  477. package/validation/email.validator.d.ts +2 -0
  478. package/validation/email.validator.ngfactory.d.ts +1 -0
  479. package/validation/index.d.ts +2 -0
  480. package/validation/index.ngfactory.d.ts +1 -0
  481. package/validation/invaliddate.validator.d.ts +2 -0
  482. package/validation/invaliddate.validator.ngfactory.d.ts +1 -0
  483. package/validation/isDateValid.d.ts +5 -0
  484. package/validation/isDateValid.ngfactory.d.ts +1 -0
  485. package/validation/maxdate.validator.d.ts +2 -0
  486. package/validation/maxdate.validator.ngfactory.d.ts +1 -0
  487. package/validation/maxtime.validator.d.ts +2 -0
  488. package/validation/maxtime.validator.ngfactory.d.ts +1 -0
  489. package/validation/maxvalue.validator.d.ts +2 -0
  490. package/validation/maxvalue.validator.ngfactory.d.ts +1 -0
  491. package/validation/mindate.validator.d.ts +2 -0
  492. package/validation/mindate.validator.ngfactory.d.ts +1 -0
  493. package/validation/minfiles.validator.d.ts +2 -0
  494. package/validation/minfiles.validator.ngfactory.d.ts +1 -0
  495. package/validation/minlength.validator.d.ts +2 -0
  496. package/validation/minlength.validator.ngfactory.d.ts +1 -0
  497. package/validation/mintime.validator.d.ts +2 -0
  498. package/validation/mintime.validator.ngfactory.d.ts +1 -0
  499. package/validation/minvalue.validator.d.ts +2 -0
  500. package/validation/minvalue.validator.ngfactory.d.ts +1 -0
  501. package/validation/multilanguagerequired.validator.d.ts +3 -0
  502. package/validation/multilanguagerequired.validator.ngfactory.d.ts +1 -0
  503. package/validation/multilanguagerequiredany.validator.d.ts +3 -0
  504. package/validation/multilanguagerequiredany.validator.ngfactory.d.ts +1 -0
  505. package/validation/pattern.validator.d.ts +2 -0
  506. package/validation/pattern.validator.ngfactory.d.ts +1 -0
  507. package/validation/required.validator.d.ts +2 -0
  508. package/validation/required.validator.ngfactory.d.ts +1 -0
  509. package/validation/validation.class.d.ts +139 -0
  510. package/validation/validation.class.ngfactory.d.ts +1 -0
  511. package/validation/validationerrorcreator.d.ts +1 -0
  512. package/validation/validationerrorcreator.ngfactory.d.ts +1 -0
  513. package/validation/validationerroritem.d.ts +33 -0
  514. package/validation/validationerroritem.ngfactory.d.ts +1 -0
@@ -0,0 +1,545 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Directive, EventEmitter, HostListener, Injector, Input, Output, } from '@angular/core';
3
+ import { SACICON_SERVICE, SACLOCALISATION_SERVICE, SACVALIDATIONKEY_SERVICE, SacDefaultIconService, SacDefaultValidationKeyService, } from '../../services';
4
+ import { SACFILEBROWSER_SERVICE, SacDefaultFileBrowserService, } from '../../services/sac-filebrowser.service';
5
+ import { SacDefaultLocalisationService } from '../../services/sac-localisation.service';
6
+ /**
7
+ * Base Component für File Browser
8
+ */
9
+ export class SacFileBrowserCommon {
10
+ // #endregion Properties
11
+ // #region Constructors
12
+ /**
13
+ * Konstruktor
14
+ * @param httpclient Angular HTTP Client
15
+ * @param injector Service Injector
16
+ */
17
+ constructor(httpclient, injector) {
18
+ /**
19
+ * File welches beim starten des Browsers bereits selektiert ist
20
+ */
21
+ this.preselecedfile = null;
22
+ /**
23
+ * Erlaubte Dateierweiterungen für Fileauswahl und Upload. Dateierweiterung mit Punkt und
24
+ * getrennt durch Komma für mehr als eine Erweiterung (Example: ".jpg,.gif")
25
+ */
26
+ this.allowedtypes = '';
27
+ /**
28
+ * Erlaubt das löschen einer Datei
29
+ */
30
+ this.allowfiledelete = true;
31
+ /**
32
+ * Erlaubt das umbenennen einer Datei
33
+ */
34
+ this.allowfilerename = true;
35
+ /**
36
+ * Erlaubt den Upload von Dateien
37
+ */
38
+ this.allowfileupload = true;
39
+ /**
40
+ * Erlaubt das erstellen eines neuen Ordners
41
+ */
42
+ this.allowfoldercreate = true;
43
+ /**
44
+ * Erlaubt das löschen eines Ordners
45
+ */
46
+ this.allowfolderdelete = true;
47
+ /**
48
+ * Erlaubt das Umbenennen eines Ordners
49
+ */
50
+ this.allowfolderrename = true;
51
+ /**
52
+ * Output Emitter wenn File selektiert wird.
53
+ */
54
+ this.file = new EventEmitter();
55
+ /**
56
+ * Root Node Item für Tree
57
+ */
58
+ this.rootNode = {
59
+ Name: '',
60
+ ChildNodes: [],
61
+ Files: [],
62
+ IsExpanded: true,
63
+ IsEditMode: false,
64
+ IsNewNode: false,
65
+ Path: '',
66
+ };
67
+ /**
68
+ * Selected File Item
69
+ */
70
+ this.selectedFileItem = null;
71
+ /**
72
+ * Selected Node Item
73
+ */
74
+ this.selectedNode = null;
75
+ /**
76
+ * Liste von Uploads
77
+ */
78
+ this.uploads = [];
79
+ this.browserService = injector.get(SACFILEBROWSER_SERVICE, new SacDefaultFileBrowserService(httpclient));
80
+ this.validationKeyService = injector.get(SACVALIDATIONKEY_SERVICE, new SacDefaultValidationKeyService());
81
+ this.lngResourceService = injector.get(SACLOCALISATION_SERVICE, new SacDefaultLocalisationService(this.validationKeyService));
82
+ this.iconService = injector.get(SACICON_SERVICE, new SacDefaultIconService());
83
+ }
84
+ // #endregion Constructors
85
+ // #region Public Getters And Setters
86
+ /**
87
+ * Setzt den Seleced Node über den Pfad
88
+ */
89
+ set selectedfile(v) {
90
+ const selectednode = this.findSelectedNodeByPath(this.rootNode, v);
91
+ if (selectednode !== null) {
92
+ this.selectNode(selectednode);
93
+ }
94
+ this.preselecedfile = v;
95
+ }
96
+ /**
97
+ * CSS icon class for delete icon
98
+ * @returns css class with icon
99
+ */
100
+ get iconDelete() {
101
+ return this.iconService.BrowserComponentDeleteIcon;
102
+ }
103
+ /**
104
+ * CSS icon class for edit icon
105
+ * @returns css class with icon
106
+ */
107
+ get iconEdit() {
108
+ return this.iconService.BrowserComponentEditIcon;
109
+ }
110
+ /**
111
+ * CSS icon for folders in tree there are collabsed
112
+ * @returns css class with icon
113
+ */
114
+ get iconFolderCollabsed() {
115
+ return this.iconService.BrowserComponentFolderClosedIcon;
116
+ }
117
+ /**
118
+ * CSS icon class for folders without subfolders
119
+ * @returns css class with icon
120
+ */
121
+ get iconFolderEmpty() {
122
+ return this.iconService.BrowserComponentFolderEmptyIcon;
123
+ }
124
+ /**
125
+ * CSS icon for new folders action
126
+ * @returns css class with icon
127
+ */
128
+ get iconFolderNew() {
129
+ return this.iconService.BrowserComponentFolderNewIcon;
130
+ }
131
+ /**
132
+ * CSS icon for folders in tree there are expanded
133
+ * @returns css class with icon
134
+ */
135
+ get iconFolderOpen() {
136
+ return this.iconService.BrowserComponentFolderOpenIcon;
137
+ }
138
+ /**
139
+ * CSS icon class for refresh icon
140
+ * @returns css class with icon
141
+ */
142
+ get iconRefresh() {
143
+ return this.iconService.BrowserComponentRefreshIcon;
144
+ }
145
+ /**
146
+ * Getter für Selected File. Ist an Input Property gebunden
147
+ */
148
+ get selectedfile() {
149
+ if (this.selectFile && this.selectFile.length > 0) {
150
+ return this.selectedFile;
151
+ }
152
+ else {
153
+ return null;
154
+ }
155
+ }
156
+ // #endregion Public Getters And Setters
157
+ // #region Public Methods
158
+ /**
159
+ * HostListener welcher den Edit Mode bei allen Files und Nodes beendet.
160
+ */
161
+ exitEditMode(targetElement) {
162
+ if (this.selectedNode) {
163
+ this.selectedNode.Files.forEach((itm) => (itm.IsEditMode = false));
164
+ if (!this.selectedNode ||
165
+ this.selectedNode.Name === null ||
166
+ this.selectedNode.Name.length === 0) {
167
+ this.clearNewChildNodes(this.rootNode);
168
+ }
169
+ }
170
+ this.resetNodeEditMode(null);
171
+ }
172
+ /**
173
+ * Löscht ein File
174
+ * @param file File welches gelöscht werden soll
175
+ */
176
+ deleteFile(file) {
177
+ this.confirmDeleteFile(file).subscribe((confirm) => {
178
+ if (confirm) {
179
+ this.browserService
180
+ .DeleteFile(this.apiurl, this.selectedNode.Path + '/' + file.Filename, this.allowedtypes)
181
+ .subscribe((result) => {
182
+ this.selectedNode.Files = result.Files;
183
+ });
184
+ }
185
+ });
186
+ }
187
+ /**
188
+ * Löscht einen Node
189
+ * @param node Node welcher gelöscht werden soll
190
+ */
191
+ deleteNode(node) {
192
+ this.confirmDeleteNode(node).subscribe((confirm) => {
193
+ if (confirm) {
194
+ this.browserService
195
+ .DeleteNode(this.apiurl, node.Path)
196
+ .subscribe((result) => {
197
+ const parentNode = this.findParentNode(this.rootNode, node);
198
+ parentNode.ChildNodes = result.Node.ChildNodes;
199
+ this.rootNode.ChildNodes.forEach((itm) => {
200
+ this.fillPath(itm, '');
201
+ });
202
+ this.selectNode(parentNode);
203
+ });
204
+ }
205
+ });
206
+ }
207
+ /**
208
+ * Setzt ein File in den Edit Mode
209
+ * @param file File welches in den Edit Mode gesetzt werden soll
210
+ */
211
+ editFile(file) {
212
+ file.IsEditMode = true;
213
+ }
214
+ /**
215
+ * Setzt einen Node in den Edit Mode
216
+ * @param node Node welcher bearbeitet werden soll
217
+ */
218
+ editNode(node) {
219
+ node.IsEditMode = true;
220
+ }
221
+ /**
222
+ * Erzeugt einen neuen Node im Tree
223
+ * @param node Node unter welchem ein neuer Node erstellt werden soll
224
+ */
225
+ newNode(node) {
226
+ const item = {
227
+ ChildNodes: [],
228
+ Files: [],
229
+ IsEditMode: false,
230
+ IsExpanded: false,
231
+ Name: '',
232
+ Path: node.Path,
233
+ IsNewNode: true,
234
+ };
235
+ node.ChildNodes.push(item);
236
+ this.selectNode(item);
237
+ this.editNode(item);
238
+ }
239
+ /**
240
+ * Init Event der Komponente
241
+ */
242
+ ngOnInit() {
243
+ this.browserService
244
+ .GetNode(this.apiurl, '', this.allowedtypes)
245
+ .subscribe((result) => {
246
+ this.rootNode = {
247
+ Name: result.Node.Name,
248
+ Files: result.Node.Files,
249
+ ChildNodes: result.Node.ChildNodes,
250
+ IsExpanded: true,
251
+ IsEditMode: false,
252
+ IsNewNode: false,
253
+ Path: '/',
254
+ };
255
+ this.setPathToAllNodes();
256
+ this.selectedNode = this.rootNode;
257
+ // Selected File erneut setzen, wenn Property gesetzt wurde bevor Daten vom Service geladen wurden.
258
+ if (this.preselecedfile !== null && this.preselecedfile.length > 0) {
259
+ this.selectedfile = this.preselecedfile;
260
+ }
261
+ });
262
+ }
263
+ /**
264
+ * Aktualisiert den Node
265
+ */
266
+ refreshNode(node) {
267
+ if (!node.IsExpanded) {
268
+ this.switchExpandNode(node);
269
+ }
270
+ this.browserService
271
+ .GetNode(this.apiurl, node.Path, this.allowedtypes)
272
+ .subscribe((result) => {
273
+ node.ChildNodes = result.Node.ChildNodes;
274
+ node.Files = result.Node.Files;
275
+ this.setPathToAllNodes();
276
+ });
277
+ }
278
+ /**
279
+ * Methode wenn eine Datei umbenannt werden soll
280
+ * @param file File welches umbenannt werden soll
281
+ * @param newFilename Neuer Dateiname
282
+ */
283
+ renameFile(file, newFilename) {
284
+ file.IsEditMode = false;
285
+ if (!newFilename || newFilename === null || newFilename.length === 0) {
286
+ // Cancel, Invalid Filename
287
+ return;
288
+ }
289
+ if (file.Filename !== newFilename) {
290
+ this.browserService
291
+ .RenameFile(this.apiurl, this.selectedNode.Path + '/' + file.Filename, newFilename, this.allowedtypes)
292
+ .subscribe((result) => {
293
+ this.selectedNode.Files = result.Files;
294
+ });
295
+ }
296
+ }
297
+ /**
298
+ * Methode wenn ein Node umbenannt werden soll
299
+ * @param node Node welcher umbenannt werden soll
300
+ * @param newFoldername Neuer Ordnername
301
+ */
302
+ renameNode(node, newFoldername) {
303
+ node.IsEditMode = false;
304
+ if (!node.IsNewNode) {
305
+ if (!newFoldername ||
306
+ newFoldername === null ||
307
+ newFoldername.length === 0) {
308
+ // Cancel Rename. Invalid Foldername
309
+ return;
310
+ }
311
+ if (node.Name !== newFoldername) {
312
+ this.browserService
313
+ .RenameNode(this.apiurl, node.Path, newFoldername)
314
+ .subscribe((result) => {
315
+ node.Name = result.Node.Name;
316
+ this.setPathToAllNodes();
317
+ });
318
+ }
319
+ }
320
+ else {
321
+ if (!newFoldername ||
322
+ newFoldername === null ||
323
+ newFoldername.length === 0) {
324
+ this.clearNewChildNodes(this.rootNode);
325
+ return;
326
+ }
327
+ node.Name = newFoldername;
328
+ node.IsNewNode = false;
329
+ this.browserService
330
+ .SaveNode(this.apiurl, node.Path, newFoldername)
331
+ .subscribe((result) => {
332
+ node.Name = result.Node.Name;
333
+ node.Files = result.Node.Files;
334
+ this.setPathToAllNodes();
335
+ });
336
+ }
337
+ }
338
+ /**
339
+ * Methode wenn ein File selektiert wird
340
+ * @param file File welches selektiert wird
341
+ */
342
+ selectFile(file) {
343
+ if (!file.IsEditMode) {
344
+ this.selectedNode.Files.forEach((itm) => (itm.IsEditMode = false));
345
+ }
346
+ if (!this.selectedNode.Path.endsWith('/')) {
347
+ this.selectedFile = this.selectedNode.Path + '/' + file.Filename;
348
+ }
349
+ else {
350
+ this.selectedFile = '/' + file.Filename;
351
+ }
352
+ this.selectedFileItem = file;
353
+ this.file.emit(this.selectedFile);
354
+ }
355
+ /**
356
+ * Methode wenn ein Node selektiert wird
357
+ * @param node Node welcher selektiert werden soll
358
+ */
359
+ selectNode(node) {
360
+ if (!node.IsExpanded) {
361
+ this.switchExpandNode(node);
362
+ }
363
+ // Reset the Edit Mode in all Nodes
364
+ this.resetNodeEditMode(null);
365
+ if (!node.Files) {
366
+ this.browserService
367
+ .GetFiles(this.apiurl, node.Path, this.allowedtypes)
368
+ .subscribe((result) => {
369
+ node.Files = result.Files;
370
+ this.selectedNode = node;
371
+ if (this.preselecedfile !== null && this.preselecedfile.length > 0) {
372
+ const filename = this.preselecedfile.substring(this.preselecedfile.lastIndexOf('/') + 1);
373
+ const file = node.Files.find((itm) => itm.Filename === filename);
374
+ if (file) {
375
+ this.selectFile(file);
376
+ }
377
+ }
378
+ });
379
+ }
380
+ else {
381
+ this.selectedNode = node;
382
+ }
383
+ }
384
+ /**
385
+ * Expand/Collabse Methode für Nodes
386
+ * @param node Node welcher geöffnet oder geschlossen werden soll
387
+ */
388
+ switchExpandNode(node) {
389
+ if (node.IsExpanded) {
390
+ node.IsExpanded = false;
391
+ }
392
+ else {
393
+ node.IsExpanded = true;
394
+ }
395
+ }
396
+ /**
397
+ * Methode die Aufgerufen werden muss, wenn ein Upload beendet ist.
398
+ * @param param Parameter des hochgeladenen Files
399
+ */
400
+ uploadComplete(node, uploadIdList) {
401
+ if (uploadIdList !== null) {
402
+ uploadIdList.forEach((element) => {
403
+ if (this.uploads.indexOf(element) < 0) {
404
+ this.uploads.push(element);
405
+ }
406
+ });
407
+ }
408
+ const id = this.uploads.pop();
409
+ if (id) {
410
+ this.browserService
411
+ .SaveFile(this.apiurl, node.Path, id, this.allowedtypes)
412
+ .subscribe((result) => {
413
+ this.selectedNode.Files = result.Files;
414
+ this.uploadedFileMoved(id);
415
+ });
416
+ }
417
+ }
418
+ // #endregion Public Abstract Methods
419
+ // #region Private Methods
420
+ /**
421
+ * Rekursive Methode welche beim Node und all seinen Childs neue Nodes entfernt
422
+ * @param node Node bei welchem alle neuen Nodes entfernt werden soll.
423
+ */
424
+ clearNewChildNodes(node) {
425
+ node.ChildNodes.forEach((itm) => {
426
+ if (itm.IsNewNode) {
427
+ node.ChildNodes.splice(node.ChildNodes.indexOf(itm));
428
+ }
429
+ });
430
+ node.ChildNodes.forEach((itm) => this.clearNewChildNodes(itm));
431
+ }
432
+ /**
433
+ * Methode welche den Pfad für einen Node erzeugt
434
+ * @param node Node für welchen der Pfad erzeugt werden soll
435
+ * @param parentPath Übergeordneter Pfad
436
+ */
437
+ fillPath(node, parentPath) {
438
+ node.Path = parentPath + '/' + node.Name;
439
+ node.ChildNodes.forEach((itm) => {
440
+ this.fillPath(itm, node.Path);
441
+ });
442
+ }
443
+ /**
444
+ * Sucht den übergeordneten Node im Tree
445
+ * @param node Aktueller Node
446
+ * @param nodeToFind Node welcher gefunden werden soll
447
+ * @returns Node wenn er gefunden wurde, ansonsten wird NULL zurückgegeben
448
+ */
449
+ findParentNode(node, nodeToFind) {
450
+ if (node.ChildNodes.indexOf(nodeToFind) >= 0) {
451
+ return node;
452
+ }
453
+ for (const child of node.ChildNodes) {
454
+ const result = this.findParentNode(child, nodeToFind);
455
+ if (result !== null) {
456
+ return result;
457
+ }
458
+ }
459
+ return null;
460
+ }
461
+ /**
462
+ * Sucht einen Node gem. einem URL Pfad
463
+ * @param node Node in welchem gesucht werden soll
464
+ * @param path Pfad nach welchem gesucht wird
465
+ * @returns Node welcher zum gesuchten Pfad passt. Wenn kein Node gefunden wird, wird NULL zurückgegeben
466
+ */
467
+ findSelectedNodeByPath(node, path) {
468
+ // Cancel wenn Pfad nicht definiert
469
+ if (path === undefined || path === null) {
470
+ return null;
471
+ }
472
+ // Pfad in Array splitten und Root Foldername setzen
473
+ const pathArray = path.split('/');
474
+ pathArray[0] = this.rootNode.Name;
475
+ return this.findSelectedNodeByPathArray(node, pathArray, 0);
476
+ }
477
+ /**
478
+ * Sucht einen Node gem. einem Array von Node Namen
479
+ * @param node Node in welchem gesucht werden soll
480
+ * @param path Array von Node Namen, welche die Hirarchy des Pfades abbilden
481
+ * @param index Aktueller Index im PATH Array
482
+ * @returns Node wenn einer gefunden wurde, ansonsten NULL
483
+ */
484
+ findSelectedNodeByPathArray(node, path, index) {
485
+ // Check ob Ordner korrekt. Letzer Ordner zurückgeben. Path Last Index ist der Filename
486
+ if (node.Name === path[index] && path.length - 2 === index) {
487
+ return node;
488
+ }
489
+ else if (node.Name === path[index]) {
490
+ // Expand Node
491
+ node.IsExpanded = true;
492
+ for (const item of node.ChildNodes) {
493
+ const result = this.findSelectedNodeByPathArray(item, path, index + 1);
494
+ if (result !== null) {
495
+ return result;
496
+ }
497
+ }
498
+ }
499
+ return null;
500
+ }
501
+ /**
502
+ * Rekursive Methode welche beim Node und all seinen Childs den Edit Mode beendet.
503
+ * @param node Node bei welchem der Edit Mode beendet werden soll
504
+ */
505
+ resetNodeEditMode(node) {
506
+ if (node === null) {
507
+ this.resetNodeEditMode(this.rootNode);
508
+ }
509
+ else {
510
+ node.IsEditMode = false;
511
+ if (node.ChildNodes) {
512
+ node.ChildNodes.forEach((itm) => this.resetNodeEditMode(itm));
513
+ }
514
+ }
515
+ }
516
+ /**
517
+ * Setzt den Pfad in allen Nodes
518
+ */
519
+ setPathToAllNodes() {
520
+ this.rootNode.ChildNodes.forEach((itm) => {
521
+ this.fillPath(itm, '');
522
+ });
523
+ }
524
+ }
525
+ SacFileBrowserCommon.decorators = [
526
+ { type: Directive }
527
+ ];
528
+ SacFileBrowserCommon.ctorParameters = () => [
529
+ { type: HttpClient },
530
+ { type: Injector }
531
+ ];
532
+ SacFileBrowserCommon.propDecorators = {
533
+ allowedtypes: [{ type: Input }],
534
+ allowfiledelete: [{ type: Input }],
535
+ allowfilerename: [{ type: Input }],
536
+ allowfileupload: [{ type: Input }],
537
+ allowfoldercreate: [{ type: Input }],
538
+ allowfolderdelete: [{ type: Input }],
539
+ allowfolderrename: [{ type: Input }],
540
+ apiurl: [{ type: Input }],
541
+ file: [{ type: Output }],
542
+ selectedfile: [{ type: Input }],
543
+ exitEditMode: [{ type: HostListener, args: ['document:click', ['$event.target'],] }]
544
+ };
545
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2Jyb3dzZXIvYnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBTXZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsOEJBQThCLEdBQy9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qiw0QkFBNEIsR0FDN0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU14Rjs7R0FFRztBQUVILE1BQU0sT0FBZ0Isb0JBQW9CO0lBb0d4Qyx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7O09BSUc7SUFDSCxZQUFZLFVBQXNCLEVBQUUsUUFBa0I7UUFsR3REOztXQUVHO1FBQ0ssbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBRTdDOzs7V0FHRztRQUVJLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQ2pDOztXQUVHO1FBRUksb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDdkM7O1dBRUc7UUFFSSxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUN2Qzs7V0FFRztRQUVJLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ3ZDOztXQUVHO1FBRUksc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBQ3pDOztXQUVHO1FBRUksc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBQ3pDOztXQUVHO1FBRUksc0JBQWlCLEdBQVksSUFBSSxDQUFDO1FBTXpDOztXQUVHO1FBRUksU0FBSSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBTS9EOztXQUVHO1FBQ0ksYUFBUSxHQUFpQjtZQUM5QixJQUFJLEVBQUUsRUFBRTtZQUNSLFVBQVUsRUFBRSxFQUFFO1lBQ2QsS0FBSyxFQUFFLEVBQUU7WUFDVCxVQUFVLEVBQUUsSUFBSTtZQUNoQixVQUFVLEVBQUUsS0FBSztZQUNqQixTQUFTLEVBQUUsS0FBSztZQUNoQixJQUFJLEVBQUUsRUFBRTtTQUNULENBQUM7UUFLRjs7V0FFRztRQUNJLHFCQUFnQixHQUFpQixJQUFJLENBQUM7UUFDN0M7O1dBRUc7UUFDSSxpQkFBWSxHQUFpQixJQUFJLENBQUM7UUFDekM7O1dBRUc7UUFDSSxZQUFPLEdBQWEsRUFBRSxDQUFDO1FBZ0I1QixJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQ2hDLHNCQUFzQixFQUN0QixJQUFJLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxDQUM3QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQ3RDLHdCQUF3QixFQUN4QixJQUFJLDhCQUE4QixFQUFFLENBQ3JDLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FDcEMsdUJBQXVCLEVBQ3ZCLElBQUksNkJBQTZCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQzdELENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQzdCLGVBQWUsRUFDZixJQUFJLHFCQUFxQixFQUFFLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQsMEJBQTBCO0lBRTFCLHFDQUFxQztJQUVyQzs7T0FFRztJQUNILElBQ1csWUFBWSxDQUFDLENBQWdCO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRW5FLElBQUksWUFBWSxLQUFLLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQy9CO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsMEJBQTBCLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUI7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsd0NBQXdDO0lBRXhDLHlCQUF5QjtJQUV6Qjs7T0FFRztJQUtJLFlBQVksQ0FBQyxhQUFhO1FBQy9CLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRW5FLElBQ0UsQ0FBQyxJQUFJLENBQUMsWUFBWTtnQkFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssSUFBSTtnQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDbkM7Z0JBQ0EsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN4QztTQUNGO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsSUFBa0I7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pELElBQUksT0FBTyxFQUFFO2dCQUNYLElBQUksQ0FBQyxjQUFjO3FCQUNoQixVQUFVLENBQ1QsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FDbEI7cUJBQ0EsU0FBUyxDQUFDLENBQUMsTUFBNEIsRUFBRSxFQUFFO29CQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksVUFBVSxDQUFDLElBQWtCO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNqRCxJQUFJLE9BQU8sRUFBRTtnQkFDWCxJQUFJLENBQUMsY0FBYztxQkFDaEIsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztxQkFDbEMsU0FBUyxDQUFDLENBQUMsTUFBNEIsRUFBRSxFQUFFO29CQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzVELFVBQVUsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBRS9DLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDekIsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLENBQUM7YUFDTjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxJQUFrQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUSxDQUFDLElBQWtCO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPLENBQUMsSUFBa0I7UUFDL0IsTUFBTSxJQUFJLEdBQWlCO1lBQ3pCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsS0FBSyxFQUFFLEVBQUU7WUFDVCxVQUFVLEVBQUUsS0FBSztZQUNqQixVQUFVLEVBQUUsS0FBSztZQUNqQixJQUFJLEVBQUUsRUFBRTtZQUNSLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLElBQUksQ0FBQyxjQUFjO2FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO2FBQzNDLFNBQVMsQ0FBQyxDQUFDLE1BQTRCLEVBQUUsRUFBRTtZQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHO2dCQUNkLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUs7Z0JBQ3hCLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVU7Z0JBQ2xDLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixVQUFVLEVBQUUsS0FBSztnQkFDakIsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLElBQUksRUFBRSxHQUFHO2FBQ1YsQ0FBQztZQUVGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUVsQyxtR0FBbUc7WUFDbkcsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2xFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQzthQUN6QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVyxDQUFDLElBQWtCO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtRQUVELElBQUksQ0FBQyxjQUFjO2FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUNsRCxTQUFTLENBQUMsQ0FBQyxNQUE0QixFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBRS9CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxVQUFVLENBQUMsSUFBa0IsRUFBRSxXQUFtQjtRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsS0FBSyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDcEUsMkJBQTJCO1lBQzNCLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDakMsSUFBSSxDQUFDLGNBQWM7aUJBQ2hCLFVBQVUsQ0FDVCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUM1QyxXQUFXLEVBQ1gsSUFBSSxDQUFDLFlBQVksQ0FDbEI7aUJBQ0EsU0FBUyxDQUFDLENBQUMsTUFBNEIsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVUsQ0FBQyxJQUFrQixFQUFFLGFBQXFCO1FBQ3pELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXhCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ25CLElBQ0UsQ0FBQyxhQUFhO2dCQUNkLGFBQWEsS0FBSyxJQUFJO2dCQUN0QixhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDMUI7Z0JBQ0Esb0NBQW9DO2dCQUNwQyxPQUFPO2FBQ1I7WUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO2dCQUMvQixJQUFJLENBQUMsY0FBYztxQkFDaEIsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7cUJBQ2pELFNBQVMsQ0FBQyxDQUFDLE1BQTRCLEVBQUUsRUFBRTtvQkFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFFN0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDRjthQUFNO1lBQ0wsSUFDRSxDQUFDLGFBQWE7Z0JBQ2QsYUFBYSxLQUFLLElBQUk7Z0JBQ3RCLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUMxQjtnQkFDQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2QyxPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYztpQkFDaEIsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7aUJBQy9DLFNBQVMsQ0FBQyxDQUFDLE1BQTRCLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFFL0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsSUFBa0I7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUNsRTthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN6QztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsSUFBa0I7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO1FBRUQsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLElBQUksQ0FBQyxjQUFjO2lCQUNoQixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7aUJBQ25ELFNBQVMsQ0FBQyxDQUFDLE1BQTRCLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFFekIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQ3pDLENBQUM7b0JBQ0YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7b0JBQ2pFLElBQUksSUFBSSxFQUFFO3dCQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3ZCO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsSUFBa0I7UUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ3pCO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjLENBQUMsSUFBa0IsRUFBRSxZQUFzQjtRQUM5RCxJQUFJLFlBQVksS0FBSyxJQUFJLEVBQUU7WUFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMvQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzVCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxFQUFFLEVBQUU7WUFDTixJQUFJLENBQUMsY0FBYztpQkFDaEIsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztpQkFDdkQsU0FBUyxDQUFDLENBQUMsTUFBNEIsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUF5QkQscUNBQXFDO0lBRXJDLDBCQUEwQjtJQUUxQjs7O09BR0c7SUFDSyxrQkFBa0IsQ0FBQyxJQUFrQjtRQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzlCLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN0RDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssUUFBUSxDQUFDLElBQWtCLEVBQUUsVUFBa0I7UUFDckQsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxjQUFjLENBQ3BCLElBQWtCLEVBQ2xCLFVBQXdCO1FBRXhCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDdEQsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO2dCQUNuQixPQUFPLE1BQU0sQ0FBQzthQUNmO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHNCQUFzQixDQUM1QixJQUFrQixFQUNsQixJQUFZO1FBRVosbUNBQW1DO1FBQ25DLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxvREFBb0Q7UUFDcEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFbEMsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssMkJBQTJCLENBQ2pDLElBQWtCLEVBQ2xCLElBQWMsRUFDZCxLQUFhO1FBRWIsdUZBQXVGO1FBQ3ZGLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQzFELE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLGNBQWM7WUFDZCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFdkUsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO29CQUNuQixPQUFPLE1BQU0sQ0FBQztpQkFDZjthQUNGO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSyxpQkFBaUIsQ0FBQyxJQUFrQjtRQUMxQyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2QzthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFFeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0Q7U0FDRjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OztZQTNxQkYsU0FBUzs7O1lBbkNELFVBQVU7WUFLakIsUUFBUTs7OzJCQW1EUCxLQUFLOzhCQUtMLEtBQUs7OEJBS0wsS0FBSzs4QkFLTCxLQUFLO2dDQUtMLEtBQUs7Z0NBS0wsS0FBSztnQ0FLTCxLQUFLO3FCQUtMLEtBQUs7bUJBS0wsTUFBTTsyQkE0RU4sS0FBSzsyQkFxRkwsWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElTYWNGaWxlQnJvd3NlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNGaWxlQnJvd3NlclNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjSWNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTYWNJY29uU2VydmljZSc7XHJcbmltcG9ydCB7IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU2FjTG9jYWxpc2F0aW9uU2VydmljZSc7XHJcbmltcG9ydCB7IElTYWNWYWxpZGF0aW9uS2V5U2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBTQUNJQ09OX1NFUlZJQ0UsXHJcbiAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXHJcbiAgU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLFxyXG4gIFNhY0RlZmF1bHRJY29uU2VydmljZSxcclxuICBTYWNEZWZhdWx0VmFsaWRhdGlvbktleVNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQge1xyXG4gIFNBQ0ZJTEVCUk9XU0VSX1NFUlZJQ0UsXHJcbiAgU2FjRGVmYXVsdEZpbGVCcm93c2VyU2VydmljZSxcclxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zYWMtZmlsZWJyb3dzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FjLWxvY2FsaXNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUJyb3dzZXJGaWxlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3NlcmZpbGUnO1xyXG5pbXBvcnQgeyBJQnJvd3NlckZpbGVSZXNwb25zZSB9IGZyb20gJy4vbW9kZWxzL2Jyb3dzZXJmaWxlcmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBJQnJvd3Nlck5vZGUgfSBmcm9tICcuL21vZGVscy9icm93c2Vybm9kZSc7XHJcbmltcG9ydCB7IElCcm93c2VyTm9kZVJlc3BvbnNlIH0gZnJvbSAnLi9tb2RlbHMvYnJvd3Nlcm5vZGVyZXNwb25zZSc7XHJcblxyXG4vKipcclxuICogQmFzZSBDb21wb25lbnQgZsO8ciBGaWxlIEJyb3dzZXJcclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2FjRmlsZUJyb3dzZXJDb21tb24gaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vICNyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAvKipcclxuICAgKiBTZXJ2aWNlIGbDvHIgRmlsZSBCcm93c2VyIFp1Z3JpZmYgKEJhY2tlbmQpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBicm93c2VyU2VydmljZTogSVNhY0ZpbGVCcm93c2VyU2VydmljZTtcclxuICAvKipcclxuICAgKiBJY29uIHNlcnZpY2UgdG8gcmVjZWl2ZSBpY29uIGNsYXNzZXMgZm9yIHVpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpY29uU2VydmljZTogSVNhY0ljb25TZXJ2aWNlO1xyXG4gIC8qKlxyXG4gICAqIEZpbGUgd2VsY2hlcyBiZWltIHN0YXJ0ZW4gZGVzIEJyb3dzZXJzIGJlcmVpdHMgc2VsZWt0aWVydCBpc3RcclxuICAgKi9cclxuICBwcml2YXRlIHByZXNlbGVjZWRmaWxlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRXJsYXVidGUgRGF0ZWllcndlaXRlcnVuZ2VuIGbDvHIgRmlsZWF1c3dhaGwgdW5kIFVwbG9hZC4gRGF0ZWllcndlaXRlcnVuZyBtaXQgUHVua3QgdW5kXHJcbiAgICogZ2V0cmVubnQgZHVyY2ggS29tbWEgZsO8ciBtZWhyIGFscyBlaW5lIEVyd2VpdGVydW5nIChFeGFtcGxlOiBcIi5qcGcsLmdpZlwiKVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFsbG93ZWR0eXBlczogc3RyaW5nID0gJyc7XHJcbiAgLyoqXHJcbiAgICogRXJsYXVidCBkYXMgbMO2c2NoZW4gZWluZXIgRGF0ZWlcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxvd2ZpbGVkZWxldGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIEVybGF1YnQgZGFzIHVtYmVuZW5uZW4gZWluZXIgRGF0ZWlcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxvd2ZpbGVyZW5hbWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIEVybGF1YnQgZGVuIFVwbG9hZCB2b24gRGF0ZWllblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFsbG93ZmlsZXVwbG9hZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogRXJsYXVidCBkYXMgZXJzdGVsbGVuIGVpbmVzIG5ldWVuIE9yZG5lcnNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxvd2ZvbGRlcmNyZWF0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogRXJsYXVidCBkYXMgbMO2c2NoZW4gZWluZXMgT3JkbmVyc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFsbG93Zm9sZGVyZGVsZXRlOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBFcmxhdWJ0IGRhcyBVbWJlbmVubmVuIGVpbmVzIE9yZG5lcnNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxvd2ZvbGRlcnJlbmFtZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgLyoqXHJcbiAgICogVVJMIGbDvHIgQmFja2VuZCBBUElcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhcGl1cmw6IHN0cmluZztcclxuICAvKipcclxuICAgKiBPdXRwdXQgRW1pdHRlciB3ZW5uIEZpbGUgc2VsZWt0aWVydCB3aXJkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBmaWxlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAvKipcclxuICAgKiBTZXJ2aWNlIGbDvHIgRXJyb3IgTG9jYWxpc2F0aW9uXHJcbiAgICovXHJcbiAgcHVibGljIGxuZ1Jlc291cmNlU2VydmljZTogSVNhY0xvY2FsaXNhdGlvblNlcnZpY2U7XHJcbiAgLyoqXHJcbiAgICogUm9vdCBOb2RlIEl0ZW0gZsO8ciBUcmVlXHJcbiAgICovXHJcbiAgcHVibGljIHJvb3ROb2RlOiBJQnJvd3Nlck5vZGUgPSB7XHJcbiAgICBOYW1lOiAnJyxcclxuICAgIENoaWxkTm9kZXM6IFtdLFxyXG4gICAgRmlsZXM6IFtdLFxyXG4gICAgSXNFeHBhbmRlZDogdHJ1ZSxcclxuICAgIElzRWRpdE1vZGU6IGZhbHNlLFxyXG4gICAgSXNOZXdOb2RlOiBmYWxzZSxcclxuICAgIFBhdGg6ICcnLFxyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0ZWQgRmlsZSBOYW1lXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdGVkRmlsZTogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIEZpbGUgSXRlbVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEZpbGVJdGVtOiBJQnJvd3NlckZpbGUgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIE5vZGUgSXRlbVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZE5vZGU6IElCcm93c2VyTm9kZSA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogTGlzdGUgdm9uIFVwbG9hZHNcclxuICAgKi9cclxuICBwdWJsaWMgdXBsb2Fkczogc3RyaW5nW10gPSBbXTtcclxuICAvKipcclxuICAgKiBTZXJ2aWNlIHRvIHJlY2VpdmUgc3RhbmRhcmQgdmFsaWRhdGlvbiBtZXNzYWdlIGtleXMgYW5kIHRleHRzXHJcbiAgICovXHJcbiAgcHVibGljIHZhbGlkYXRpb25LZXlTZXJ2aWNlOiBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2U7XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAvKipcclxuICAgKiBLb25zdHJ1a3RvclxyXG4gICAqIEBwYXJhbSBodHRwY2xpZW50IEFuZ3VsYXIgSFRUUCBDbGllbnRcclxuICAgKiBAcGFyYW0gaW5qZWN0b3IgU2VydmljZSBJbmplY3RvclxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGh0dHBjbGllbnQ6IEh0dHBDbGllbnQsIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgdGhpcy5icm93c2VyU2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgU0FDRklMRUJST1dTRVJfU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRGaWxlQnJvd3NlclNlcnZpY2UoaHR0cGNsaWVudClcclxuICAgICk7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNWQUxJREFUSU9OS0VZX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0VmFsaWRhdGlvbktleVNlcnZpY2UoKVxyXG4gICAgKTtcclxuICAgIHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNMT0NBTElTQVRJT05fU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlKHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaWNvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ0lDT05fU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRJY29uU2VydmljZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAvKipcclxuICAgKiBTZXR6dCBkZW4gU2VsZWNlZCBOb2RlIMO8YmVyIGRlbiBQZmFkXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkZmlsZSh2OiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZG5vZGUgPSB0aGlzLmZpbmRTZWxlY3RlZE5vZGVCeVBhdGgodGhpcy5yb290Tm9kZSwgdik7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkbm9kZSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdE5vZGUoc2VsZWN0ZWRub2RlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByZXNlbGVjZWRmaWxlID0gdjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENTUyBpY29uIGNsYXNzIGZvciBkZWxldGUgaWNvblxyXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGljb25EZWxldGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnREZWxldGVJY29uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ1NTIGljb24gY2xhc3MgZm9yIGVkaXQgaWNvblxyXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGljb25FZGl0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50RWRpdEljb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDU1MgaWNvbiBmb3IgZm9sZGVycyBpbiB0cmVlIHRoZXJlIGFyZSBjb2xsYWJzZWRcclxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpY29uRm9sZGVyQ29sbGFic2VkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50Rm9sZGVyQ2xvc2VkSWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENTUyBpY29uIGNsYXNzIGZvciBmb2xkZXJzIHdpdGhvdXQgc3ViZm9sZGVyc1xyXG4gICAqIEByZXR1cm5zIGNzcyBjbGFzcyB3aXRoIGljb25cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGljb25Gb2xkZXJFbXB0eSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudEZvbGRlckVtcHR5SWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENTUyBpY29uIGZvciBuZXcgZm9sZGVycyBhY3Rpb25cclxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpY29uRm9sZGVyTmV3KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5Ccm93c2VyQ29tcG9uZW50Rm9sZGVyTmV3SWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENTUyBpY29uIGZvciBmb2xkZXJzIGluIHRyZWUgdGhlcmUgYXJlIGV4cGFuZGVkXHJcbiAgICogQHJldHVybnMgY3NzIGNsYXNzIHdpdGggaWNvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaWNvbkZvbGRlck9wZW4oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkJyb3dzZXJDb21wb25lbnRGb2xkZXJPcGVuSWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENTUyBpY29uIGNsYXNzIGZvciByZWZyZXNoIGljb25cclxuICAgKiBAcmV0dXJucyBjc3MgY2xhc3Mgd2l0aCBpY29uXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpY29uUmVmcmVzaCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuQnJvd3NlckNvbXBvbmVudFJlZnJlc2hJY29uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyIGbDvHIgU2VsZWN0ZWQgRmlsZS4gSXN0IGFuIElucHV0IFByb3BlcnR5IGdlYnVuZGVuXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBzZWxlY3RlZGZpbGUoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RGaWxlICYmIHRoaXMuc2VsZWN0RmlsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmlsZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIEhvc3RMaXN0ZW5lciB3ZWxjaGVyIGRlbiBFZGl0IE1vZGUgYmVpIGFsbGVuIEZpbGVzIHVuZCBOb2RlcyBiZWVuZGV0LlxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXHJcbiAgLyoqXHJcbiAgICogQ2xpY2sgRXZlbnRcclxuICAgKi9cclxuICBwdWJsaWMgZXhpdEVkaXRNb2RlKHRhcmdldEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkTm9kZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcy5mb3JFYWNoKChpdG0pID0+IChpdG0uSXNFZGl0TW9kZSA9IGZhbHNlKSk7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuc2VsZWN0ZWROb2RlIHx8XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuTmFtZSA9PT0gbnVsbCB8fFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLk5hbWUubGVuZ3RoID09PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJOZXdDaGlsZE5vZGVzKHRoaXMucm9vdE5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldE5vZGVFZGl0TW9kZShudWxsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEzDtnNjaHQgZWluIEZpbGVcclxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHdlbGNoZXMgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIGRlbGV0ZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1EZWxldGVGaWxlKGZpbGUpLnN1YnNjcmliZSgoY29uZmlybSkgPT4ge1xyXG4gICAgICBpZiAoY29uZmlybSkge1xyXG4gICAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgICAgIC5EZWxldGVGaWxlKFxyXG4gICAgICAgICAgICB0aGlzLmFwaXVybCxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuUGF0aCArICcvJyArIGZpbGUuRmlsZW5hbWUsXHJcbiAgICAgICAgICAgIHRoaXMuYWxsb3dlZHR5cGVzXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyRmlsZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLkZpbGVzID0gcmVzdWx0LkZpbGVzO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTMO2c2NodCBlaW5lbiBOb2RlXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIGdlbMO2c2NodCB3ZXJkZW4gc29sbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBkZWxldGVOb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maXJtRGVsZXRlTm9kZShub2RlKS5zdWJzY3JpYmUoKGNvbmZpcm0pID0+IHtcclxuICAgICAgaWYgKGNvbmZpcm0pIHtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgICAgICAuRGVsZXRlTm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5maW5kUGFyZW50Tm9kZSh0aGlzLnJvb3ROb2RlLCBub2RlKTtcclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5DaGlsZE5vZGVzID0gcmVzdWx0Lk5vZGUuQ2hpbGROb2RlcztcclxuXHJcbiAgICAgICAgICAgIHRoaXMucm9vdE5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbGxQYXRoKGl0bSwgJycpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Tm9kZShwYXJlbnROb2RlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHp0IGVpbiBGaWxlIGluIGRlbiBFZGl0IE1vZGVcclxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHdlbGNoZXMgaW4gZGVuIEVkaXQgTW9kZSBnZXNldHp0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIGVkaXRGaWxlKGZpbGU6IElCcm93c2VyRmlsZSk6IHZvaWQge1xyXG4gICAgZmlsZS5Jc0VkaXRNb2RlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHp0IGVpbmVuIE5vZGUgaW4gZGVuIEVkaXQgTW9kZVxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciBiZWFyYmVpdGV0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIGVkaXROb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xyXG4gICAgbm9kZS5Jc0VkaXRNb2RlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVyemV1Z3QgZWluZW4gbmV1ZW4gTm9kZSBpbSBUcmVlXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB1bnRlciB3ZWxjaGVtIGVpbiBuZXVlciBOb2RlIGVyc3RlbGx0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIG5ld05vZGUobm9kZTogSUJyb3dzZXJOb2RlKSB7XHJcbiAgICBjb25zdCBpdGVtOiBJQnJvd3Nlck5vZGUgPSB7XHJcbiAgICAgIENoaWxkTm9kZXM6IFtdLFxyXG4gICAgICBGaWxlczogW10sXHJcbiAgICAgIElzRWRpdE1vZGU6IGZhbHNlLFxyXG4gICAgICBJc0V4cGFuZGVkOiBmYWxzZSxcclxuICAgICAgTmFtZTogJycsXHJcbiAgICAgIFBhdGg6IG5vZGUuUGF0aCxcclxuICAgICAgSXNOZXdOb2RlOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBub2RlLkNoaWxkTm9kZXMucHVzaChpdGVtKTtcclxuICAgIHRoaXMuc2VsZWN0Tm9kZShpdGVtKTtcclxuICAgIHRoaXMuZWRpdE5vZGUoaXRlbSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0IEV2ZW50IGRlciBLb21wb25lbnRlXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAuR2V0Tm9kZSh0aGlzLmFwaXVybCwgJycsIHRoaXMuYWxsb3dlZHR5cGVzKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9IHtcclxuICAgICAgICAgIE5hbWU6IHJlc3VsdC5Ob2RlLk5hbWUsXHJcbiAgICAgICAgICBGaWxlczogcmVzdWx0Lk5vZGUuRmlsZXMsXHJcbiAgICAgICAgICBDaGlsZE5vZGVzOiByZXN1bHQuTm9kZS5DaGlsZE5vZGVzLFxyXG4gICAgICAgICAgSXNFeHBhbmRlZDogdHJ1ZSxcclxuICAgICAgICAgIElzRWRpdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgSXNOZXdOb2RlOiBmYWxzZSxcclxuICAgICAgICAgIFBhdGg6ICcvJyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNldFBhdGhUb0FsbE5vZGVzKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSB0aGlzLnJvb3ROb2RlO1xyXG5cclxuICAgICAgICAvLyBTZWxlY3RlZCBGaWxlIGVybmV1dCBzZXR6ZW4sIHdlbm4gUHJvcGVydHkgZ2VzZXR6dCB3dXJkZSBiZXZvciBEYXRlbiB2b20gU2VydmljZSBnZWxhZGVuIHd1cmRlbi5cclxuICAgICAgICBpZiAodGhpcy5wcmVzZWxlY2VkZmlsZSAhPT0gbnVsbCAmJiB0aGlzLnByZXNlbGVjZWRmaWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRmaWxlID0gdGhpcy5wcmVzZWxlY2VkZmlsZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWt0dWFsaXNpZXJ0IGRlbiBOb2RlXHJcbiAgICovXHJcbiAgcHVibGljIHJlZnJlc2hOb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKCFub2RlLklzRXhwYW5kZWQpIHtcclxuICAgICAgdGhpcy5zd2l0Y2hFeHBhbmROb2RlKG5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgLkdldE5vZGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aCwgdGhpcy5hbGxvd2VkdHlwZXMpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogSUJyb3dzZXJOb2RlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBub2RlLkNoaWxkTm9kZXMgPSByZXN1bHQuTm9kZS5DaGlsZE5vZGVzO1xyXG4gICAgICAgIG5vZGUuRmlsZXMgPSByZXN1bHQuTm9kZS5GaWxlcztcclxuXHJcbiAgICAgICAgdGhpcy5zZXRQYXRoVG9BbGxOb2RlcygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgd2VubiBlaW5lIERhdGVpIHVtYmVuYW5udCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgd2VsY2hlcyB1bWJlbmFubnQgd2VyZGVuIHNvbGxcclxuICAgKiBAcGFyYW0gbmV3RmlsZW5hbWUgTmV1ZXIgRGF0ZWluYW1lXHJcbiAgICovXHJcbiAgcHVibGljIHJlbmFtZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlLCBuZXdGaWxlbmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBmaWxlLklzRWRpdE1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIW5ld0ZpbGVuYW1lIHx8IG5ld0ZpbGVuYW1lID09PSBudWxsIHx8IG5ld0ZpbGVuYW1lLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAvLyBDYW5jZWwsIEludmFsaWQgRmlsZW5hbWVcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWxlLkZpbGVuYW1lICE9PSBuZXdGaWxlbmFtZSkge1xyXG4gICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgICAgLlJlbmFtZUZpbGUoXHJcbiAgICAgICAgICB0aGlzLmFwaXVybCxcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLlBhdGggKyAnLycgKyBmaWxlLkZpbGVuYW1lLFxyXG4gICAgICAgICAgbmV3RmlsZW5hbWUsXHJcbiAgICAgICAgICB0aGlzLmFsbG93ZWR0eXBlc1xyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyRmlsZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgd2VubiBlaW4gTm9kZSB1bWJlbmFubnQgd2VyZGVuIHNvbGxcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIHdlbGNoZXIgdW1iZW5hbm50IHdlcmRlbiBzb2xsXHJcbiAgICogQHBhcmFtIG5ld0ZvbGRlcm5hbWUgTmV1ZXIgT3JkbmVybmFtZVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW5hbWVOb2RlKG5vZGU6IElCcm93c2VyTm9kZSwgbmV3Rm9sZGVybmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBub2RlLklzRWRpdE1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIW5vZGUuSXNOZXdOb2RlKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhbmV3Rm9sZGVybmFtZSB8fFxyXG4gICAgICAgIG5ld0ZvbGRlcm5hbWUgPT09IG51bGwgfHxcclxuICAgICAgICBuZXdGb2xkZXJuYW1lLmxlbmd0aCA9PT0gMFxyXG4gICAgICApIHtcclxuICAgICAgICAvLyBDYW5jZWwgUmVuYW1lLiBJbnZhbGlkIEZvbGRlcm5hbWVcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChub2RlLk5hbWUgIT09IG5ld0ZvbGRlcm5hbWUpIHtcclxuICAgICAgICB0aGlzLmJyb3dzZXJTZXJ2aWNlXHJcbiAgICAgICAgICAuUmVuYW1lTm9kZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCBuZXdGb2xkZXJuYW1lKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3Nlck5vZGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBub2RlLk5hbWUgPSByZXN1bHQuTm9kZS5OYW1lO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRQYXRoVG9BbGxOb2RlcygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhbmV3Rm9sZGVybmFtZSB8fFxyXG4gICAgICAgIG5ld0ZvbGRlcm5hbWUgPT09IG51bGwgfHxcclxuICAgICAgICBuZXdGb2xkZXJuYW1lLmxlbmd0aCA9PT0gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmNsZWFyTmV3Q2hpbGROb2Rlcyh0aGlzLnJvb3ROb2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5vZGUuTmFtZSA9IG5ld0ZvbGRlcm5hbWU7XHJcbiAgICAgIG5vZGUuSXNOZXdOb2RlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgICAuU2F2ZU5vZGUodGhpcy5hcGl1cmwsIG5vZGUuUGF0aCwgbmV3Rm9sZGVybmFtZSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IElCcm93c2VyTm9kZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBub2RlLk5hbWUgPSByZXN1bHQuTm9kZS5OYW1lO1xyXG4gICAgICAgICAgbm9kZS5GaWxlcyA9IHJlc3VsdC5Ob2RlLkZpbGVzO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2V0UGF0aFRvQWxsTm9kZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgd2VubiBlaW4gRmlsZSBzZWxla3RpZXJ0IHdpcmRcclxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHdlbGNoZXMgc2VsZWt0aWVydCB3aXJkXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdEZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKSB7XHJcbiAgICBpZiAoIWZpbGUuSXNFZGl0TW9kZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5GaWxlcy5mb3JFYWNoKChpdG0pID0+IChpdG0uSXNFZGl0TW9kZSA9IGZhbHNlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkTm9kZS5QYXRoLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSB0aGlzLnNlbGVjdGVkTm9kZS5QYXRoICsgJy8nICsgZmlsZS5GaWxlbmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gJy8nICsgZmlsZS5GaWxlbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZUl0ZW0gPSBmaWxlO1xyXG4gICAgdGhpcy5maWxlLmVtaXQodGhpcy5zZWxlY3RlZEZpbGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSB3ZW5uIGVpbiBOb2RlIHNlbGVrdGllcnQgd2lyZFxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgd2VsY2hlciBzZWxla3RpZXJ0IHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdE5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAoIW5vZGUuSXNFeHBhbmRlZCkge1xyXG4gICAgICB0aGlzLnN3aXRjaEV4cGFuZE5vZGUobm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIEVkaXQgTW9kZSBpbiBhbGwgTm9kZXNcclxuICAgIHRoaXMucmVzZXROb2RlRWRpdE1vZGUobnVsbCk7XHJcblxyXG4gICAgaWYgKCFub2RlLkZpbGVzKSB7XHJcbiAgICAgIHRoaXMuYnJvd3NlclNlcnZpY2VcclxuICAgICAgICAuR2V0RmlsZXModGhpcy5hcGl1cmwsIG5vZGUuUGF0aCwgdGhpcy5hbGxvd2VkdHlwZXMpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgbm9kZS5GaWxlcyA9IHJlc3VsdC5GaWxlcztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbm9kZTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5wcmVzZWxlY2VkZmlsZSAhPT0gbnVsbCAmJiB0aGlzLnByZXNlbGVjZWRmaWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnByZXNlbGVjZWRmaWxlLnN1YnN0cmluZyhcclxuICAgICAgICAgICAgICB0aGlzLnByZXNlbGVjZWRmaWxlLmxhc3RJbmRleE9mKCcvJykgKyAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBub2RlLkZpbGVzLmZpbmQoKGl0bSkgPT4gaXRtLkZpbGVuYW1lID09PSBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RGaWxlKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBhbmQvQ29sbGFic2UgTWV0aG9kZSBmw7xyIE5vZGVzXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSB3ZWxjaGVyIGdlw7ZmZm5ldCBvZGVyIGdlc2NobG9zc2VuIHdlcmRlbiBzb2xsXHJcbiAgICovXHJcbiAgcHVibGljIHN3aXRjaEV4cGFuZE5vZGUobm9kZTogSUJyb3dzZXJOb2RlKTogdm9pZCB7XHJcbiAgICBpZiAobm9kZS5Jc0V4cGFuZGVkKSB7XHJcbiAgICAgIG5vZGUuSXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbm9kZS5Jc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZGllIEF1ZmdlcnVmZW4gd2VyZGVuIG11c3MsIHdlbm4gZWluIFVwbG9hZCBiZWVuZGV0IGlzdC5cclxuICAgKiBAcGFyYW0gcGFyYW0gUGFyYW1ldGVyIGRlcyBob2NoZ2VsYWRlbmVuIEZpbGVzXHJcbiAgICovXHJcbiAgcHVibGljIHVwbG9hZENvbXBsZXRlKG5vZGU6IElCcm93c2VyTm9kZSwgdXBsb2FkSWRMaXN0OiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgaWYgKHVwbG9hZElkTGlzdCAhPT0gbnVsbCkge1xyXG4gICAgICB1cGxvYWRJZExpc3QuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnVwbG9hZHMuaW5kZXhPZihlbGVtZW50KSA8IDApIHtcclxuICAgICAgICAgIHRoaXMudXBsb2Fkcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaWQgPSB0aGlzLnVwbG9hZHMucG9wKCk7XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgdGhpcy5icm93c2VyU2VydmljZVxyXG4gICAgICAgIC5TYXZlRmlsZSh0aGlzLmFwaXVybCwgbm9kZS5QYXRoLCBpZCwgdGhpcy5hbGxvd2VkdHlwZXMpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJQnJvd3NlckZpbGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUuRmlsZXMgPSByZXN1bHQuRmlsZXM7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZU1vdmVkKGlkKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQdWJsaWMgQWJzdHJhY3QgTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBBYnN0cmFrdGUgQ29uZmlybSBNZXRob2RlIHdlbGNoZSBpbXBsZW1lbnRpZXJ0IHdlcmRlbiBtdXNzLiBNZXRob2RlIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBlaW5lXHJcbiAgICogRGF0ZWkgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsLlxyXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgZsO8ciB3ZWxjaGVzIGVpbiBEZWxldGUgQ29uZmlybSBlaW5nZWZvcmRlcnQgd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwdWJsaWMgYWJzdHJhY3QgY29uZmlybURlbGV0ZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAvKipcclxuICAgKiBBYnN0cmFrdGUgQ29uZmlybSBNZXRob2RlIHdlbGNoZSBpbXBsZW1lbnRpZXJ0IHdlcmRlbiBtdXNzLiBNZXRob2RlIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBlaW5cclxuICAgKiBPcmRuZXIgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsLlxyXG4gICAqIEBwYXJhbSBmb2xkZXIgT3JkZXJuIGbDvHIgd2VsY2hlbiBlaW4gRGVsZXRlIENvbmZpcm0gZWluZ2Vmb3JkZXJ0IHdlcmRlbiBzb2xsLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhYnN0cmFjdCBjb25maXJtRGVsZXRlTm9kZShmb2xkZXI6IElCcm93c2VyTm9kZSk6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgLyoqXHJcbiAgICogQWJzdHJha3RlIE1ldGhvZGUgZGllIEF1ZmdlcnVmZW4gd2lyZCwgd2VubiBkYXMgSG9jaGdlbGFkZW5lIEZpbGUgYXVzIGRlbSBUZW1wIEZvbGRlciBpbiBkaWVcclxuICAgKiBTdHJ1a3R1ciB2ZXJzY2hvYmVuIHd1cmRlLlxyXG4gICAqIEBwYXJhbSB1cGxvYWRpZCBJRCBkZXMgVXBsb2Fkc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBhYnN0cmFjdCB1cGxvYWRlZEZpbGVNb3ZlZCh1cGxvYWRpZDogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgQWJzdHJhY3QgTWV0aG9kc1xyXG5cclxuICAvLyAjcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBSZWt1cnNpdmUgTWV0aG9kZSB3ZWxjaGUgYmVpbSBOb2RlIHVuZCBhbGwgc2VpbmVuIENoaWxkcyBuZXVlIE5vZGVzIGVudGZlcm50XHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSBiZWkgd2VsY2hlbSBhbGxlIG5ldWVuIE5vZGVzIGVudGZlcm50IHdlcmRlbiBzb2xsLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2xlYXJOZXdDaGlsZE5vZGVzKG5vZGU6IElCcm93c2VyTm9kZSkge1xyXG4gICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xyXG4gICAgICBpZiAoaXRtLklzTmV3Tm9kZSkge1xyXG4gICAgICAgIG5vZGUuQ2hpbGROb2Rlcy5zcGxpY2Uobm9kZS5DaGlsZE5vZGVzLmluZGV4T2YoaXRtKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHRoaXMuY2xlYXJOZXdDaGlsZE5vZGVzKGl0bSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSB3ZWxjaGUgZGVuIFBmYWQgZsO8ciBlaW5lbiBOb2RlIGVyemV1Z3RcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGbDvHIgd2VsY2hlbiBkZXIgUGZhZCBlcnpldWd0IHdlcmRlbiBzb2xsXHJcbiAgICogQHBhcmFtIHBhcmVudFBhdGggw5xiZXJnZW9yZG5ldGVyIFBmYWRcclxuICAgKi9cclxuICBwcml2YXRlIGZpbGxQYXRoKG5vZGU6IElCcm93c2VyTm9kZSwgcGFyZW50UGF0aDogc3RyaW5nKSB7XHJcbiAgICBub2RlLlBhdGggPSBwYXJlbnRQYXRoICsgJy8nICsgbm9kZS5OYW1lO1xyXG4gICAgbm9kZS5DaGlsZE5vZGVzLmZvckVhY2goKGl0bSkgPT4ge1xyXG4gICAgICB0aGlzLmZpbGxQYXRoKGl0bSwgbm9kZS5QYXRoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3VjaHQgZGVuIMO8YmVyZ2VvcmRuZXRlbiBOb2RlIGltIFRyZWVcclxuICAgKiBAcGFyYW0gbm9kZSBBa3R1ZWxsZXIgTm9kZVxyXG4gICAqIEBwYXJhbSBub2RlVG9GaW5kIE5vZGUgd2VsY2hlciBnZWZ1bmRlbiB3ZXJkZW4gc29sbFxyXG4gICAqIEByZXR1cm5zIE5vZGUgd2VubiBlciBnZWZ1bmRlbiB3dXJkZSwgYW5zb25zdGVuIHdpcmQgTlVMTCB6dXLDvGNrZ2VnZWJlblxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmluZFBhcmVudE5vZGUoXHJcbiAgICBub2RlOiBJQnJvd3Nlck5vZGUsXHJcbiAgICBub2RlVG9GaW5kOiBJQnJvd3Nlck5vZGVcclxuICApOiBJQnJvd3Nlck5vZGUge1xyXG4gICAgaWYgKG5vZGUuQ2hpbGROb2Rlcy5pbmRleE9mKG5vZGVUb0ZpbmQpID49IDApIHtcclxuICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLkNoaWxkTm9kZXMpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5maW5kUGFyZW50Tm9kZShjaGlsZCwgbm9kZVRvRmluZCk7XHJcbiAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWNodCBlaW5lbiBOb2RlIGdlbS4gZWluZW0gVVJMIFBmYWRcclxuICAgKiBAcGFyYW0gbm9kZSBOb2RlIGluIHdlbGNoZW0gZ2VzdWNodCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBwYXRoIFBmYWQgbmFjaCB3ZWxjaGVtIGdlc3VjaHQgd2lyZFxyXG4gICAqIEByZXR1cm5zIE5vZGUgd2VsY2hlciB6dW0gZ2VzdWNodGVuIFBmYWQgcGFzc3QuIFdlbm4ga2VpbiBOb2RlIGdlZnVuZGVuIHdpcmQsIHdpcmQgTlVMTCB6dXLDvGNrZ2VnZWJlblxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmluZFNlbGVjdGVkTm9kZUJ5UGF0aChcclxuICAgIG5vZGU6IElCcm93c2VyTm9kZSxcclxuICAgIHBhdGg6IHN0cmluZ1xyXG4gICk6IElCcm93c2VyTm9kZSB7XHJcbiAgICAvLyBDYW5jZWwgd2VubiBQZmFkIG5pY2h0IGRlZmluaWVydFxyXG4gICAgaWYgKHBhdGggPT09IHVuZGVmaW5lZCB8fCBwYXRoID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBmYWQgaW4gQXJyYXkgc3BsaXR0ZW4gdW5kIFJvb3QgRm9sZGVybmFtZSBzZXR6ZW5cclxuICAgIGNvbnN0IHBhdGhBcnJheSA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgIHBhdGhBcnJheVswXSA9IHRoaXMucm9vdE5vZGUuTmFtZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5maW5kU2VsZWN0ZWROb2RlQnlQYXRoQXJyYXkobm9kZSwgcGF0aEFycmF5LCAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Y2h0IGVpbmVuIE5vZGUgZ2VtLiBlaW5lbSBBcnJheSB2b24gTm9kZSBOYW1lblxyXG4gICAqIEBwYXJhbSBub2RlIE5vZGUgaW4gd2VsY2hlbSBnZXN1Y2h0IHdlcmRlbiBzb2xsXHJcbiAgICogQHBhcmFtIHBhdGggQXJyYXkgdm9uIE5vZGUgTmFtZW4sIHdlbGNoZSBkaWUgSGlyYXJjaHkgZGVzIFBmYWRlcyBhYmJpbGRlblxyXG4gICAqIEBwYXJhbSBpbmRleCBBa3R1ZWxsZXIgSW5kZXggaW0gUEFUSCBBcnJheVxyXG4gICAqIEByZXR1cm5zIE5vZGUgd2VubiBlaW5lciBnZWZ1bmRlbiB3dXJkZSwgYW5zb25zdGVuIE5VTExcclxuICAgKi9cclxuICBwcml2YXRlIGZpbmRTZWxlY3RlZE5vZGVCeVBhdGhBcnJheShcclxuICAgIG5vZGU6IElCcm93c2VyTm9kZSxcclxuICAgIHBhdGg6IHN0cmluZ1tdLFxyXG4gICAgaW5kZXg6IG51bWJlclxyXG4gICk6IElCcm93c2VyTm9kZSB7XHJcbiAgICAvLyBDaGVjayBvYiBPcmRuZXIga29ycmVrdC4gTGV0emVyIE9yZG5lciB6dXLDvGNrZ2ViZW4uIFBhdGggTGFzdCBJbmRleCBpc3QgZGVyIEZpbGVuYW1lXHJcbiAgICBpZiAobm9kZS5OYW1lID09PSBwYXRoW2luZGV4XSAmJiBwYXRoLmxlbmd0aCAtIDIgPT09IGluZGV4KSB7XHJcbiAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSBlbHNlIGlmIChub2RlLk5hbWUgPT09IHBhdGhbaW5kZXhdKSB7XHJcbiAgICAgIC8vIEV4cGFuZCBOb2RlXHJcbiAgICAgIG5vZGUuSXNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBub2RlLkNoaWxkTm9kZXMpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbmRTZWxlY3RlZE5vZGVCeVBhdGhBcnJheShpdGVtLCBwYXRoLCBpbmRleCArIDEpO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWt1cnNpdmUgTWV0aG9kZSB3ZWxjaGUgYmVpbSBOb2RlIHVuZCBhbGwgc2VpbmVuIENoaWxkcyBkZW4gRWRpdCBNb2RlIGJlZW5kZXQuXHJcbiAgICogQHBhcmFtIG5vZGUgTm9kZSBiZWkgd2VsY2hlbSBkZXIgRWRpdCBNb2RlIGJlZW5kZXQgd2VyZGVuIHNvbGxcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0Tm9kZUVkaXRNb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZXNldE5vZGVFZGl0TW9kZSh0aGlzLnJvb3ROb2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5vZGUuSXNFZGl0TW9kZSA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKG5vZGUuQ2hpbGROb2Rlcykge1xyXG4gICAgICAgIG5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHRoaXMucmVzZXROb2RlRWRpdE1vZGUoaXRtKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHp0IGRlbiBQZmFkIGluIGFsbGVuIE5vZGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRQYXRoVG9BbGxOb2RlcygpIHtcclxuICAgIHRoaXMucm9vdE5vZGUuQ2hpbGROb2Rlcy5mb3JFYWNoKChpdG0pID0+IHtcclxuICAgICAgdGhpcy5maWxsUGF0aChpdG0sICcnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxufVxyXG4iXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview This file was generated by the Angular template compiler. Do not edit.
3
+ *
4
+ * @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes,extraRequire}
5
+ * tslint:disable
6
+ */
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5uZ2ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9icm93c2VyL2Jyb3dzZXIubmdmYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG4iXX0=
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3NlcmZpbGUuanMiLCJzb3VyY2VSb290IjoiQzovUHJvamVrdGUvc2ltcGxlYW5ndWxhcmNvbnRyb2xzLW5nMTAvY2guam5ldHdvcmsuc2FjLWNvbnRyb2xzL3Byb2plY3RzL3NhYy1jb21tb24vc3JjLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9icm93c2VyL21vZGVscy9icm93c2VyZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEludGVyZmFjZSBmw7xyIERhdGVpIEl0ZW1zIGluIEZpbGUgQnJvd3NlciBDb21wb25lbnRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJyb3dzZXJGaWxlIHtcclxuICAvKipcclxuICAgKiBEYXRlaW5hbWVcclxuICAgKi9cclxuICBGaWxlbmFtZTogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIEdyw7Zzc2UgZGVyIERhdGVpXHJcbiAgICovXHJcbiAgU2l6ZTogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIEl0ZW0gd2lyZCBiZWFyYmVpdGV0XHJcbiAgICovXHJcbiAgSXNFZGl0TW9kZTogYm9vbGVhbjtcclxufVxyXG4iXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview This file was generated by the Angular template compiler. Do not edit.
3
+ *
4
+ * @suppress {suspiciousCode,uselessCode,missingProperties,missingOverride,checkTypes,extraRequire}
5
+ * tslint:disable
6
+ */
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3NlcmZpbGUubmdmYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2pla3RlL3NpbXBsZWFuZ3VsYXJjb250cm9scy1uZzEwL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvYnJvd3Nlci9tb2RlbHMvYnJvd3NlcmZpbGUubmdmYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpMCBmcm9tICdAYW5ndWxhci9jb3JlJztcbmkwLkNvbXBvbmVudEZhY3Rvcnk7XG4iXX0=
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Klasse für API Request zum löschen eines Files
3
+ */
4
+ export class BrowserFileDeleteRequest {
5
+ /**
6
+ * Konstruktor
7
+ * @param init Initale Werte der Klasse
8
+ */
9
+ constructor(init) {
10
+ Object.assign(this, init);
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3NlcmZpbGVkZWxldGVyZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2pla3RlL3NpbXBsZWFuZ3VsYXJjb250cm9scy1uZzEwL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvYnJvd3Nlci9tb2RlbHMvYnJvd3NlcmZpbGVkZWxldGVyZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQzs7O09BR0c7SUFDSCxZQUFZLElBQXdDO1FBQ2xELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FVRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBLbGFzc2UgZsO8ciBBUEkgUmVxdWVzdCB6dW0gbMO2c2NoZW4gZWluZXMgRmlsZXNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBCcm93c2VyRmlsZURlbGV0ZVJlcXVlc3Qge1xyXG4gIC8qKlxyXG4gICAqIEtvbnN0cnVrdG9yXHJcbiAgICogQHBhcmFtIGluaXQgSW5pdGFsZSBXZXJ0ZSBkZXIgS2xhc3NlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaW5pdD86IFBhcnRpYWw8QnJvd3NlckZpbGVEZWxldGVSZXF1ZXN0Pikge1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBmYWRcclxuICAgKi9cclxuICBQYXRoOiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogRXJsYXVidGUgRGF0ZWl0eXBlblxyXG4gICAqL1xyXG4gIEFsbG93ZWRUeXBlczogc3RyaW5nO1xyXG59XHJcbiJdfQ==