@acorex/components 6.5.12 → 6.5.14

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 (631) hide show
  1. package/karma.conf.js +32 -0
  2. package/ng-package.json +10 -0
  3. package/package.json +13 -33
  4. package/src/lib/accordion/accordion.component.ts +43 -0
  5. package/src/lib/accordion/accordion.module.ts +11 -0
  6. package/src/lib/accordion/api.ts +2 -0
  7. package/src/lib/base/base-page.class.ts +116 -0
  8. package/src/lib/base/components.class.ts +9 -0
  9. package/src/lib/base/element.class.ts +344 -0
  10. package/src/lib/base/events.class.ts +32 -0
  11. package/src/lib/button/button.component.html +17 -0
  12. package/src/lib/button/button.component.ts +72 -0
  13. package/src/lib/button/button.module.ts +14 -0
  14. package/src/lib/calendar/calendar-box/calendar-box.component.html +68 -0
  15. package/src/lib/calendar/calendar-box/calendar-box.component.ts +461 -0
  16. package/src/lib/calendar/calendar-box/calendar-box.module.ts +16 -0
  17. package/src/lib/calendar/scheduler/scheduler-views.property.ts +38 -0
  18. package/{lib/calendar/scheduler/scheduler.class.d.ts → src/lib/calendar/scheduler/scheduler.class.ts} +20 -6
  19. package/src/lib/calendar/scheduler/scheduler.component.html +9 -0
  20. package/src/lib/calendar/scheduler/scheduler.component.scss +181 -0
  21. package/src/lib/calendar/scheduler/scheduler.component.ts +249 -0
  22. package/src/lib/calendar/scheduler/scheduler.module.ts +45 -0
  23. package/src/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.ts +133 -0
  24. package/src/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.ts +33 -0
  25. package/src/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.html +43 -0
  26. package/src/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.scss +66 -0
  27. package/src/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.ts +50 -0
  28. package/src/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.html +45 -0
  29. package/src/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.scss +19 -0
  30. package/src/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.ts +103 -0
  31. package/src/lib/calendar/scheduler/views/month/scheduler-month-view.component.html +39 -0
  32. package/src/lib/calendar/scheduler/views/month/scheduler-month-view.component.scss +55 -0
  33. package/src/lib/calendar/scheduler/views/month/scheduler-month-view.component.ts +233 -0
  34. package/src/lib/calendar/scheduler/views/scheduler-view.component.ts +124 -0
  35. package/src/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.html +50 -0
  36. package/src/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.scss +4 -0
  37. package/src/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.ts +92 -0
  38. package/src/lib/checkbox/checkbox.component.html +22 -0
  39. package/src/lib/checkbox/checkbox.component.ts +107 -0
  40. package/src/lib/checkbox/checkbox.module.ts +11 -0
  41. package/src/lib/color-picker/color-box/color-box.component.html +37 -0
  42. package/src/lib/color-picker/color-box/color-box.component.scss +60 -0
  43. package/src/lib/color-picker/color-box/color-box.component.ts +438 -0
  44. package/src/lib/color-picker/color-picker.component.html +31 -0
  45. package/src/lib/color-picker/color-picker.component.ts +87 -0
  46. package/src/lib/color-picker/color-picker.module.ts +16 -0
  47. package/src/lib/context-menu/context-menu.component.html +42 -0
  48. package/src/lib/context-menu/context-menu.component.ts +78 -0
  49. package/src/lib/context-menu/context-menu.directive.ts +159 -0
  50. package/src/lib/context-menu/context-menu.module.ts +15 -0
  51. package/src/lib/data-filter/columns/filter-column-date.component.ts +123 -0
  52. package/src/lib/data-filter/columns/filter-column-number.component.ts +100 -0
  53. package/src/lib/data-filter/columns/filter-column-selection.component.ts +69 -0
  54. package/src/lib/data-filter/columns/filter-column-string.component.ts +100 -0
  55. package/src/lib/data-filter/filter-panel/filter-panel.component.html +120 -0
  56. package/src/lib/data-filter/filter-panel/filter-panel.component.scss +143 -0
  57. package/src/lib/data-filter/filter-panel/filter-panel.component.ts +266 -0
  58. package/src/lib/data-filter/filter.class.ts +73 -0
  59. package/src/lib/data-filter/filter.module.ts +52 -0
  60. package/src/lib/data-filter/toolbar/filter-toolbar.component.html +5 -0
  61. package/src/lib/data-filter/toolbar/filter-toolbar.component.scss +17 -0
  62. package/src/lib/data-filter/toolbar/filter-toolbar.component.ts +179 -0
  63. package/src/lib/data-list/core/data-list.component.ts +62 -0
  64. package/src/lib/data-list/list/list.component.html +32 -0
  65. package/src/lib/data-list/list/list.component.scss +64 -0
  66. package/src/lib/data-list/list/list.component.ts +149 -0
  67. package/src/lib/data-list/list/list.module.ts +14 -0
  68. package/src/lib/data-list/list/toolbar-list-view.component.ts +63 -0
  69. package/src/lib/data-source/datasource.component.ts +50 -0
  70. package/src/lib/data-source/datasource.module.ts +11 -0
  71. package/{lib/data-source/read-param.d.ts → src/lib/data-source/read-param.ts} +13 -3
  72. package/src/lib/date-picker/date-picker.component.html +30 -0
  73. package/src/lib/date-picker/date-picker.component.scss +5 -0
  74. package/src/lib/date-picker/date-picker.component.ts +720 -0
  75. package/src/lib/date-picker/date-picker.module.ts +17 -0
  76. package/src/lib/dialog/dialog.component.html +5 -0
  77. package/src/lib/dialog/dialog.component.scss +32 -0
  78. package/src/lib/dialog/dialog.component.ts +32 -0
  79. package/src/lib/dialog/dialog.module.ts +13 -0
  80. package/src/lib/dialog/dialog.service.ts +178 -0
  81. package/src/lib/drawer/content.component.ts +18 -0
  82. package/src/lib/drawer/drawer-container.component.ts +37 -0
  83. package/src/lib/drawer/drawer.component.ts +151 -0
  84. package/src/lib/drawer/drawer.module.ts +16 -0
  85. package/src/lib/dropdown/dropdown.component.html +26 -0
  86. package/src/lib/dropdown/dropdown.component.scss +8 -0
  87. package/src/lib/dropdown/dropdown.component.ts +197 -0
  88. package/src/lib/dropdown/dropdown.module.ts +19 -0
  89. package/src/lib/fieldset/fieldset.component.html +6 -0
  90. package/src/lib/fieldset/fieldset.component.ts +49 -0
  91. package/src/lib/fieldset/fieldset.module.ts +11 -0
  92. package/src/lib/form-group/form-group.component.html +15 -0
  93. package/src/lib/form-group/form-group.component.ts +39 -0
  94. package/src/lib/form-group/form-group.module.ts +14 -0
  95. package/src/lib/label/label.component.html +5 -0
  96. package/src/lib/label/label.component.ts +18 -0
  97. package/src/lib/label/label.module.ts +14 -0
  98. package/src/lib/loading/loading-indicator.component.html +27 -0
  99. package/src/lib/loading/loading-indicator.component.ts +16 -0
  100. package/src/lib/loading/loading-panel.component.ts +37 -0
  101. package/src/lib/loading/loading.module.ts +13 -0
  102. package/src/lib/loading/loading.service.ts +44 -0
  103. package/src/lib/menu/menu-item.component.ts +41 -0
  104. package/src/lib/menu/menu.component.html +74 -0
  105. package/src/lib/menu/menu.component.ts +111 -0
  106. package/src/lib/menu/menu.module.ts +13 -0
  107. package/src/lib/menu/menu2.component.scss +59 -0
  108. package/src/lib/menu/menu2.component.ts +98 -0
  109. package/src/lib/number-box/number-box.component.html +32 -0
  110. package/src/lib/number-box/number-box.component.ts +641 -0
  111. package/src/lib/number-box/number-box.module.ts +13 -0
  112. package/src/lib/page/content.component.ts +18 -0
  113. package/src/lib/page/footer.component.ts +13 -0
  114. package/src/lib/page/page.component.ts +43 -0
  115. package/src/lib/page/page.module.ts +14 -0
  116. package/src/lib/panel-box/panel-box.component.html +19 -0
  117. package/src/lib/panel-box/panel-box.component.scss +25 -0
  118. package/src/lib/panel-box/panel-box.component.ts +87 -0
  119. package/src/lib/panel-box/panel-box.module.ts +10 -0
  120. package/src/lib/password-box/password-box.component.html +22 -0
  121. package/src/lib/password-box/password-box.component.ts +30 -0
  122. package/src/lib/password-box/password-box.module.ts +16 -0
  123. package/src/lib/popover/custom-cdk-overlay.service.ts +82 -0
  124. package/src/lib/popover/overlay.service.ts +102 -0
  125. package/src/lib/popover/popover.component.html +5 -0
  126. package/src/lib/popover/popover.component.scss +9 -0
  127. package/src/lib/popover/popover.component.ts +130 -0
  128. package/src/lib/popover/popover.module.ts +11 -0
  129. package/src/lib/popup/popup.component.html +33 -0
  130. package/src/lib/popup/popup.component.scss +173 -0
  131. package/src/lib/popup/popup.component.ts +182 -0
  132. package/src/lib/popup/popup.module.ts +16 -0
  133. package/src/lib/popup/popup.service.ts +103 -0
  134. package/src/lib/progress-bar/progress-bar.component.html +5 -0
  135. package/src/lib/progress-bar/progress-bar.component.ts +10 -0
  136. package/src/lib/progress-bar/progress-bar.module.ts +11 -0
  137. package/src/lib/property-editor/editors/check-editor/check-editor.ts +44 -0
  138. package/src/lib/property-editor/editors/check-editor/check.module.ts +14 -0
  139. package/src/lib/property-editor/editors/color-editor/color.editor.ts +30 -0
  140. package/src/lib/property-editor/editors/color-editor/color.module.ts +20 -0
  141. package/src/lib/property-editor/editors/column-editor/column.editor.html +75 -0
  142. package/src/lib/property-editor/editors/column-editor/column.editor.scss +193 -0
  143. package/src/lib/property-editor/editors/column-editor/column.editor.ts +124 -0
  144. package/src/lib/property-editor/editors/column-editor/column.module.ts +28 -0
  145. package/src/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.html +80 -0
  146. package/src/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.scss +71 -0
  147. package/src/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.ts +232 -0
  148. package/src/lib/property-editor/editors/conditional-color-editor/conditional-color.module.ts +52 -0
  149. package/src/lib/property-editor/editors/date-editor/date.editor.ts +49 -0
  150. package/src/lib/property-editor/editors/date-editor/date.module.ts +20 -0
  151. package/src/lib/property-editor/editors/number-editor/number.editor.ts +46 -0
  152. package/src/lib/property-editor/editors/number-editor/number.module.ts +20 -0
  153. package/src/lib/property-editor/editors/range-editor/range.editor.html +67 -0
  154. package/src/lib/property-editor/editors/range-editor/range.editor.scss +68 -0
  155. package/src/lib/property-editor/editors/range-editor/range.editor.ts +153 -0
  156. package/src/lib/property-editor/editors/range-editor/range.module.ts +37 -0
  157. package/src/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.html +8 -0
  158. package/src/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.ts +70 -0
  159. package/src/lib/property-editor/editors/selectbox-editor/selectbox.editor.html +8 -0
  160. package/src/lib/property-editor/editors/selectbox-editor/selectbox.editor.ts +77 -0
  161. package/src/lib/property-editor/editors/selectbox-editor/selectbox.module.ts +18 -0
  162. package/src/lib/property-editor/editors/selection-editor/selection-editor.ts +52 -0
  163. package/src/lib/property-editor/editors/selection-editor/selection.module.ts +14 -0
  164. package/src/lib/property-editor/editors/switch-editor/number.editor.ts +26 -0
  165. package/src/lib/property-editor/editors/switch-editor/number.module.ts +21 -0
  166. package/src/lib/property-editor/editors/text-editor/text.editor.html +5 -0
  167. package/src/lib/property-editor/editors/text-editor/text.editor.ts +31 -0
  168. package/src/lib/property-editor/editors/text-editor/text.module.ts +20 -0
  169. package/src/lib/property-editor/editors/textarea-editor/textarea.editor.html +9 -0
  170. package/src/lib/property-editor/editors/textarea-editor/textarea.editor.ts +37 -0
  171. package/src/lib/property-editor/editors/textarea-editor/textarea.module.ts +20 -0
  172. package/src/lib/property-editor/editors/time-editor/time.editor.ts +38 -0
  173. package/src/lib/property-editor/editors/time-editor/time.module.ts +20 -0
  174. package/src/lib/property-editor/property-editor-renderer.directive.ts +165 -0
  175. package/src/lib/property-editor/property-editor.class.ts +178 -0
  176. package/src/lib/property-editor/property-editor.module.ts +115 -0
  177. package/src/lib/query-builder/query-builder-group.component.html +68 -0
  178. package/src/lib/query-builder/query-builder-group.component.ts +122 -0
  179. package/src/lib/query-builder/query-builder-popup/query-builder-popup.component.html +82 -0
  180. package/src/lib/query-builder/query-builder-popup/query-builder-popup.component.ts +178 -0
  181. package/src/lib/query-builder/query-builder-rule.component.html +135 -0
  182. package/src/lib/query-builder/query-builder-rule.component.ts +390 -0
  183. package/src/lib/query-builder/query-builder.class.ts +53 -0
  184. package/src/lib/query-builder/query-builder.component.html +3 -0
  185. package/src/lib/query-builder/query-builder.component.scss +286 -0
  186. package/src/lib/query-builder/query-builder.component.ts +220 -0
  187. package/src/lib/query-builder/query-builder.module.ts +44 -0
  188. package/src/lib/query-builder/query-builder.service.ts +188 -0
  189. package/src/lib/search-bar/search-bar.component.html +30 -0
  190. package/src/lib/search-bar/search-bar.component.scss +106 -0
  191. package/src/lib/search-bar/search-bar.component.ts +287 -0
  192. package/src/lib/search-bar/search-bar.module.ts +33 -0
  193. package/src/lib/searchbox/searchbox.component.html +25 -0
  194. package/src/lib/searchbox/searchbox.component.ts +85 -0
  195. package/src/lib/searchbox/searchbox.module.ts +17 -0
  196. package/src/lib/selectbox/selectbox.component.html +100 -0
  197. package/src/lib/selectbox/selectbox.component.ts +984 -0
  198. package/src/lib/selectbox/selectbox.module.ts +31 -0
  199. package/src/lib/selectbox/selectbox2.component.html +78 -0
  200. package/src/lib/selectbox/selectbox2.component.ts +603 -0
  201. package/src/lib/selection-list/selection-list.component.html +21 -0
  202. package/src/lib/selection-list/selection-list.component.ts +115 -0
  203. package/src/lib/selection-list/selection-list.module.ts +13 -0
  204. package/src/lib/switch/switch.component.html +4 -0
  205. package/src/lib/switch/switch.component.scss +65 -0
  206. package/src/lib/switch/switch.component.ts +57 -0
  207. package/src/lib/switch/switch.module.ts +14 -0
  208. package/src/lib/tab-page/tab-page-Renderer.component.ts +70 -0
  209. package/src/lib/tab-page/tab-page-host.component.ts +110 -0
  210. package/src/lib/tab-page/tab-page.module.ts +13 -0
  211. package/src/lib/tab-page/tab-page.service.ts +176 -0
  212. package/src/lib/tab-strip/tab-strip.component.html +6 -0
  213. package/src/lib/tab-strip/tab-strip.component.ts +47 -0
  214. package/src/lib/tab-strip/tab-strip.module.ts +11 -0
  215. package/src/lib/tab-view/dynamic-tabs.directive.ts +17 -0
  216. package/src/lib/tab-view/tab-view.component.html +33 -0
  217. package/src/lib/tab-view/tab-view.component.scss +0 -0
  218. package/src/lib/tab-view/tab-view.component.ts +129 -0
  219. package/src/lib/tab-view/tab-view.module.ts +12 -0
  220. package/src/lib/tab-view/tab.component.html +8 -0
  221. package/src/lib/tab-view/tab.component.ts +15 -0
  222. package/src/lib/textarea/textarea.component.html +13 -0
  223. package/src/lib/textarea/textarea.component.ts +24 -0
  224. package/src/lib/textarea/textarea.module.ts +14 -0
  225. package/src/lib/textbox/textbox.component.html +22 -0
  226. package/src/lib/textbox/textbox.component.ts +38 -0
  227. package/src/lib/textbox/textbox.module.ts +16 -0
  228. package/src/lib/time-picker/time-picker.component.html +21 -0
  229. package/src/lib/time-picker/time-picker.component.ts +1003 -0
  230. package/src/lib/time-picker/time-picker.module.ts +15 -0
  231. package/src/lib/toast/toast-message/toast-message.component.html +17 -0
  232. package/src/lib/toast/toast-message/toast-message.component.scss +75 -0
  233. package/src/lib/toast/toast-message/toast-message.component.ts +64 -0
  234. package/src/lib/toast/toast-wrapper/toast-wrapper.component.scss +15 -0
  235. package/src/lib/toast/toast-wrapper/toast-wrapper.component.ts +13 -0
  236. package/src/lib/toast/toast.module.ts +12 -0
  237. package/src/lib/toast/toast.service.ts +64 -0
  238. package/src/lib/toolbar/group-button/toolbar-group-button.component.ts +54 -0
  239. package/src/lib/toolbar/menu/toolbar-menu.component.html +4 -0
  240. package/src/lib/toolbar/menu/toolbar-menu.component.ts +81 -0
  241. package/src/lib/toolbar/search/toolbar-search.component.html +4 -0
  242. package/src/lib/toolbar/search/toolbar-search.component.scss +24 -0
  243. package/src/lib/toolbar/search/toolbar-search.component.ts +61 -0
  244. package/src/lib/toolbar/title/toolbar-title.component.ts +35 -0
  245. package/src/lib/toolbar/toolbar-item.ts +4 -0
  246. package/src/lib/toolbar/toolbar.component.html +4 -0
  247. package/src/lib/toolbar/toolbar.component.scss +9 -0
  248. package/src/lib/toolbar/toolbar.component.ts +16 -0
  249. package/src/lib/toolbar/toolbar.module.ts +25 -0
  250. package/src/lib/tooltip/tooltip.directive.ts +101 -0
  251. package/src/lib/tooltip/tooltip.module.ts +11 -0
  252. package/src/lib/tree-side-menu/tree-side-menu.component.html +43 -0
  253. package/src/lib/tree-side-menu/tree-side-menu.component.ts +698 -0
  254. package/src/lib/tree-side-menu/tree-side-menu.module.ts +19 -0
  255. package/src/lib/tree-view/tree-view.component.html +46 -0
  256. package/src/lib/tree-view/tree-view.component.ts +836 -0
  257. package/src/lib/tree-view/tree-view.module.ts +16 -0
  258. package/src/lib/upload-file/upload-file.component.html +16 -0
  259. package/src/lib/upload-file/upload-file.component.ts +230 -0
  260. package/src/lib/upload-file/upload-file.events.ts +11 -0
  261. package/src/lib/upload-file/upload-file.module.ts +16 -0
  262. package/src/lib/validation/validation-form.component.ts +78 -0
  263. package/src/lib/validation/validation-rule.widget.ts +112 -0
  264. package/src/lib/validation/validation.class.ts +22 -0
  265. package/src/lib/validation/validation.component.ts +92 -0
  266. package/src/lib/validation/validation.module.ts +28 -0
  267. package/{public-api.d.ts → src/public-api.ts} +61 -2
  268. package/src/test.ts +28 -0
  269. package/tsconfig.lib.json +25 -0
  270. package/tsconfig.lib.prod.json +6 -0
  271. package/tsconfig.spec.json +17 -0
  272. package/tslint.json +17 -0
  273. package/acorex-components.d.ts +0 -5
  274. package/esm2020/acorex-components.mjs +0 -5
  275. package/esm2020/lib/accordion/accordion.component.mjs +0 -44
  276. package/esm2020/lib/accordion/accordion.module.mjs +0 -20
  277. package/esm2020/lib/base/base-page.class.mjs +0 -94
  278. package/esm2020/lib/base/components.class.mjs +0 -17
  279. package/esm2020/lib/base/element.class.mjs +0 -294
  280. package/esm2020/lib/base/events.class.mjs +0 -11
  281. package/esm2020/lib/button/button.component.mjs +0 -71
  282. package/esm2020/lib/button/button.module.mjs +0 -21
  283. package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +0 -413
  284. package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +0 -22
  285. package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +0 -54
  286. package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +0 -18
  287. package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +0 -213
  288. package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +0 -68
  289. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +0 -132
  290. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +0 -37
  291. package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +0 -47
  292. package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +0 -95
  293. package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +0 -204
  294. package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +0 -99
  295. package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +0 -77
  296. package/esm2020/lib/checkbox/checkbox.component.mjs +0 -98
  297. package/esm2020/lib/checkbox/checkbox.module.mjs +0 -20
  298. package/esm2020/lib/color-picker/color-box/color-box.component.mjs +0 -422
  299. package/esm2020/lib/color-picker/color-picker.component.mjs +0 -82
  300. package/esm2020/lib/color-picker/color-picker.module.mjs +0 -24
  301. package/esm2020/lib/context-menu/context-menu.component.mjs +0 -65
  302. package/esm2020/lib/context-menu/context-menu.directive.mjs +0 -135
  303. package/esm2020/lib/context-menu/context-menu.module.mjs +0 -20
  304. package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +0 -138
  305. package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +0 -117
  306. package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +0 -74
  307. package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +0 -117
  308. package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +0 -258
  309. package/esm2020/lib/data-filter/filter.class.mjs +0 -44
  310. package/esm2020/lib/data-filter/filter.module.mjs +0 -90
  311. package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +0 -166
  312. package/esm2020/lib/data-list/core/data-list.component.mjs +0 -40
  313. package/esm2020/lib/data-list/list/list.component.mjs +0 -124
  314. package/esm2020/lib/data-list/list/list.module.mjs +0 -22
  315. package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +0 -85
  316. package/esm2020/lib/data-source/datasource.component.mjs +0 -47
  317. package/esm2020/lib/data-source/datasource.module.mjs +0 -18
  318. package/esm2020/lib/data-source/read-param.mjs +0 -5
  319. package/esm2020/lib/date-picker/date-picker.component.mjs +0 -702
  320. package/esm2020/lib/date-picker/date-picker.module.mjs +0 -25
  321. package/esm2020/lib/dialog/dialog.component.mjs +0 -24
  322. package/esm2020/lib/dialog/dialog.module.mjs +0 -21
  323. package/esm2020/lib/dialog/dialog.service.mjs +0 -150
  324. package/esm2020/lib/drawer/content.component.mjs +0 -18
  325. package/esm2020/lib/drawer/drawer-container.component.mjs +0 -36
  326. package/esm2020/lib/drawer/drawer.component.mjs +0 -142
  327. package/esm2020/lib/drawer/drawer.module.mjs +0 -23
  328. package/esm2020/lib/dropdown/dropdown.component.mjs +0 -176
  329. package/esm2020/lib/dropdown/dropdown.module.mjs +0 -26
  330. package/esm2020/lib/fieldset/fieldset.component.mjs +0 -59
  331. package/esm2020/lib/fieldset/fieldset.module.mjs +0 -19
  332. package/esm2020/lib/form-group/form-group.component.mjs +0 -34
  333. package/esm2020/lib/form-group/form-group.module.mjs +0 -21
  334. package/esm2020/lib/label/label.component.mjs +0 -19
  335. package/esm2020/lib/label/label.module.mjs +0 -21
  336. package/esm2020/lib/loading/loading-indicator.component.mjs +0 -17
  337. package/esm2020/lib/loading/loading-panel.component.mjs +0 -44
  338. package/esm2020/lib/loading/loading.module.mjs +0 -21
  339. package/esm2020/lib/loading/loading.service.mjs +0 -45
  340. package/esm2020/lib/menu/menu-item.component.mjs +0 -47
  341. package/esm2020/lib/menu/menu.component.mjs +0 -86
  342. package/esm2020/lib/menu/menu.module.mjs +0 -22
  343. package/esm2020/lib/menu/menu2.component.mjs +0 -96
  344. package/esm2020/lib/number-box/number-box.component.mjs +0 -622
  345. package/esm2020/lib/number-box/number-box.module.mjs +0 -21
  346. package/esm2020/lib/page/content.component.mjs +0 -32
  347. package/esm2020/lib/page/footer.component.mjs +0 -19
  348. package/esm2020/lib/page/page.component.mjs +0 -53
  349. package/esm2020/lib/page/page.module.mjs +0 -22
  350. package/esm2020/lib/panel-box/panel-box.component.mjs +0 -88
  351. package/esm2020/lib/panel-box/panel-box.module.mjs +0 -19
  352. package/esm2020/lib/password-box/password-box.component.mjs +0 -31
  353. package/esm2020/lib/password-box/password-box.module.mjs +0 -23
  354. package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +0 -48
  355. package/esm2020/lib/popover/overlay.service.mjs +0 -90
  356. package/esm2020/lib/popover/popover.component.mjs +0 -127
  357. package/esm2020/lib/popover/popover.module.mjs +0 -19
  358. package/esm2020/lib/popup/popup.component.mjs +0 -146
  359. package/esm2020/lib/popup/popup.module.mjs +0 -25
  360. package/esm2020/lib/popup/popup.service.mjs +0 -93
  361. package/esm2020/lib/progress-bar/progress-bar.component.mjs +0 -19
  362. package/esm2020/lib/progress-bar/progress-bar.module.mjs +0 -19
  363. package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +0 -61
  364. package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +0 -22
  365. package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +0 -38
  366. package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +0 -24
  367. package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +0 -115
  368. package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +0 -32
  369. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +0 -211
  370. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +0 -78
  371. package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +0 -51
  372. package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +0 -24
  373. package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +0 -63
  374. package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +0 -24
  375. package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +0 -140
  376. package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +0 -61
  377. package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +0 -72
  378. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +0 -71
  379. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +0 -25
  380. package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +0 -69
  381. package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +0 -22
  382. package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +0 -29
  383. package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +0 -25
  384. package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +0 -32
  385. package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +0 -24
  386. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +0 -32
  387. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +0 -24
  388. package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +0 -43
  389. package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +0 -24
  390. package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +0 -154
  391. package/esm2020/lib/property-editor/property-editor.class.mjs +0 -101
  392. package/esm2020/lib/property-editor/property-editor.module.mjs +0 -196
  393. package/esm2020/lib/query-builder/query-builder-group.component.mjs +0 -124
  394. package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +0 -171
  395. package/esm2020/lib/query-builder/query-builder-rule.component.mjs +0 -395
  396. package/esm2020/lib/query-builder/query-builder.class.mjs +0 -20
  397. package/esm2020/lib/query-builder/query-builder.component.mjs +0 -82
  398. package/esm2020/lib/query-builder/query-builder.module.mjs +0 -62
  399. package/esm2020/lib/query-builder/query-builder.service.mjs +0 -197
  400. package/esm2020/lib/search-bar/search-bar.component.mjs +0 -283
  401. package/esm2020/lib/search-bar/search-bar.module.mjs +0 -63
  402. package/esm2020/lib/searchbox/searchbox.component.mjs +0 -79
  403. package/esm2020/lib/searchbox/searchbox.module.mjs +0 -24
  404. package/esm2020/lib/selectbox/selectbox.component.mjs +0 -961
  405. package/esm2020/lib/selectbox/selectbox.module.mjs +0 -44
  406. package/esm2020/lib/selectbox/selectbox2.component.mjs +0 -574
  407. package/esm2020/lib/selection-list/selection-list.component.mjs +0 -108
  408. package/esm2020/lib/selection-list/selection-list.module.mjs +0 -21
  409. package/esm2020/lib/switch/switch.component.mjs +0 -51
  410. package/esm2020/lib/switch/switch.module.mjs +0 -20
  411. package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +0 -71
  412. package/esm2020/lib/tab-page/tab-page-host.component.mjs +0 -116
  413. package/esm2020/lib/tab-page/tab-page.module.mjs +0 -21
  414. package/esm2020/lib/tab-page/tab-page.service.mjs +0 -156
  415. package/esm2020/lib/tab-strip/tab-strip.component.mjs +0 -36
  416. package/esm2020/lib/tab-strip/tab-strip.module.mjs +0 -19
  417. package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +0 -24
  418. package/esm2020/lib/tab-view/tab-view.component.mjs +0 -105
  419. package/esm2020/lib/tab-view/tab-view.module.mjs +0 -21
  420. package/esm2020/lib/tab-view/tab.component.mjs +0 -30
  421. package/esm2020/lib/textarea/textarea.component.mjs +0 -26
  422. package/esm2020/lib/textarea/textarea.module.mjs +0 -21
  423. package/esm2020/lib/textbox/textbox.component.mjs +0 -39
  424. package/esm2020/lib/textbox/textbox.module.mjs +0 -24
  425. package/esm2020/lib/time-picker/time-picker.component.mjs +0 -943
  426. package/esm2020/lib/time-picker/time-picker.module.mjs +0 -22
  427. package/esm2020/lib/toast/toast-message/toast-message.component.mjs +0 -74
  428. package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +0 -13
  429. package/esm2020/lib/toast/toast.module.mjs +0 -21
  430. package/esm2020/lib/toast/toast.service.mjs +0 -44
  431. package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +0 -78
  432. package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +0 -57
  433. package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +0 -54
  434. package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +0 -47
  435. package/esm2020/lib/toolbar/toolbar-item.mjs +0 -6
  436. package/esm2020/lib/toolbar/toolbar.component.mjs +0 -13
  437. package/esm2020/lib/toolbar/toolbar.module.mjs +0 -40
  438. package/esm2020/lib/tooltip/tooltip.directive.mjs +0 -100
  439. package/esm2020/lib/tooltip/tooltip.module.mjs +0 -19
  440. package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +0 -646
  441. package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +0 -35
  442. package/esm2020/lib/tree-view/tree-view.component.mjs +0 -764
  443. package/esm2020/lib/tree-view/tree-view.module.mjs +0 -22
  444. package/esm2020/lib/upload-file/upload-file.component.mjs +0 -208
  445. package/esm2020/lib/upload-file/upload-file.events.mjs +0 -2
  446. package/esm2020/lib/upload-file/upload-file.module.mjs +0 -24
  447. package/esm2020/lib/validation/validation-form.component.mjs +0 -65
  448. package/esm2020/lib/validation/validation-rule.widget.mjs +0 -111
  449. package/esm2020/lib/validation/validation.class.mjs +0 -2
  450. package/esm2020/lib/validation/validation.component.mjs +0 -89
  451. package/esm2020/lib/validation/validation.module.mjs +0 -34
  452. package/esm2020/public-api.mjs +0 -158
  453. package/fesm2015/acorex-components.mjs +0 -15976
  454. package/fesm2015/acorex-components.mjs.map +0 -1
  455. package/fesm2020/acorex-components.mjs +0 -15911
  456. package/fesm2020/acorex-components.mjs.map +0 -1
  457. package/lib/accordion/accordion.component.d.ts +0 -13
  458. package/lib/accordion/accordion.module.d.ts +0 -9
  459. package/lib/base/base-page.class.d.ts +0 -46
  460. package/lib/base/components.class.d.ts +0 -10
  461. package/lib/base/element.class.d.ts +0 -106
  462. package/lib/base/events.class.d.ts +0 -18
  463. package/lib/button/button.component.d.ts +0 -21
  464. package/lib/button/button.module.d.ts +0 -8
  465. package/lib/calendar/calendar-box/calendar-box.component.d.ts +0 -81
  466. package/lib/calendar/calendar-box/calendar-box.module.d.ts +0 -11
  467. package/lib/calendar/scheduler/scheduler-views.property.d.ts +0 -19
  468. package/lib/calendar/scheduler/scheduler.component.d.ts +0 -39
  469. package/lib/calendar/scheduler/scheduler.module.d.ts +0 -21
  470. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +0 -25
  471. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +0 -14
  472. package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +0 -16
  473. package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +0 -26
  474. package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +0 -37
  475. package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +0 -28
  476. package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +0 -24
  477. package/lib/checkbox/checkbox.component.d.ts +0 -30
  478. package/lib/checkbox/checkbox.module.d.ts +0 -9
  479. package/lib/color-picker/color-box/color-box.component.d.ts +0 -25
  480. package/lib/color-picker/color-picker.component.d.ts +0 -30
  481. package/lib/color-picker/color-picker.module.d.ts +0 -13
  482. package/lib/context-menu/context-menu.component.d.ts +0 -22
  483. package/lib/context-menu/context-menu.directive.d.ts +0 -38
  484. package/lib/context-menu/context-menu.module.d.ts +0 -9
  485. package/lib/data-filter/columns/filter-column-date.component.d.ts +0 -22
  486. package/lib/data-filter/columns/filter-column-number.component.d.ts +0 -15
  487. package/lib/data-filter/columns/filter-column-selection.component.d.ts +0 -18
  488. package/lib/data-filter/columns/filter-column-string.component.d.ts +0 -15
  489. package/lib/data-filter/filter-panel/filter-panel.component.d.ts +0 -45
  490. package/lib/data-filter/filter.class.d.ts +0 -40
  491. package/lib/data-filter/filter.module.d.ts +0 -24
  492. package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +0 -25
  493. package/lib/data-list/core/data-list.component.d.ts +0 -15
  494. package/lib/data-list/list/list.component.d.ts +0 -40
  495. package/lib/data-list/list/list.module.d.ts +0 -11
  496. package/lib/data-list/list/toolbar-list-view.component.d.ts +0 -17
  497. package/lib/data-source/datasource.component.d.ts +0 -16
  498. package/lib/data-source/datasource.module.d.ts +0 -7
  499. package/lib/date-picker/date-picker.component.d.ts +0 -81
  500. package/lib/date-picker/date-picker.module.d.ts +0 -14
  501. package/lib/dialog/dialog.component.d.ts +0 -14
  502. package/lib/dialog/dialog.module.d.ts +0 -10
  503. package/lib/dialog/dialog.service.d.ts +0 -36
  504. package/lib/drawer/content.component.d.ts +0 -7
  505. package/lib/drawer/drawer-container.component.d.ts +0 -10
  506. package/lib/drawer/drawer.component.d.ts +0 -34
  507. package/lib/drawer/drawer.module.d.ts +0 -10
  508. package/lib/dropdown/dropdown.component.d.ts +0 -38
  509. package/lib/dropdown/dropdown.module.d.ts +0 -13
  510. package/lib/fieldset/fieldset.component.d.ts +0 -11
  511. package/lib/fieldset/fieldset.module.d.ts +0 -8
  512. package/lib/form-group/form-group.component.d.ts +0 -14
  513. package/lib/form-group/form-group.module.d.ts +0 -8
  514. package/lib/label/label.component.d.ts +0 -9
  515. package/lib/label/label.module.d.ts +0 -8
  516. package/lib/loading/loading-indicator.component.d.ts +0 -9
  517. package/lib/loading/loading-panel.component.d.ts +0 -13
  518. package/lib/loading/loading.module.d.ts +0 -10
  519. package/lib/loading/loading.service.d.ts +0 -13
  520. package/lib/menu/menu-item.component.d.ts +0 -18
  521. package/lib/menu/menu.component.d.ts +0 -35
  522. package/lib/menu/menu.module.d.ts +0 -11
  523. package/lib/menu/menu2.component.d.ts +0 -21
  524. package/lib/number-box/number-box.component.d.ts +0 -52
  525. package/lib/number-box/number-box.module.d.ts +0 -10
  526. package/lib/page/content.component.d.ts +0 -8
  527. package/lib/page/footer.component.d.ts +0 -5
  528. package/lib/page/page.component.d.ts +0 -16
  529. package/lib/page/page.module.d.ts +0 -11
  530. package/lib/panel-box/panel-box.component.d.ts +0 -19
  531. package/lib/panel-box/panel-box.module.d.ts +0 -8
  532. package/lib/password-box/password-box.component.d.ts +0 -12
  533. package/lib/password-box/password-box.module.d.ts +0 -10
  534. package/lib/popover/custom-cdk-overlay.service.d.ts +0 -19
  535. package/lib/popover/overlay.service.d.ts +0 -31
  536. package/lib/popover/popover.component.d.ts +0 -34
  537. package/lib/popover/popover.module.d.ts +0 -8
  538. package/lib/popup/popup.component.d.ts +0 -39
  539. package/lib/popup/popup.module.d.ts +0 -13
  540. package/lib/popup/popup.service.d.ts +0 -22
  541. package/lib/progress-bar/progress-bar.component.d.ts +0 -7
  542. package/lib/progress-bar/progress-bar.module.d.ts +0 -8
  543. package/lib/property-editor/editors/check-editor/check-editor.d.ts +0 -19
  544. package/lib/property-editor/editors/check-editor/check.module.d.ts +0 -11
  545. package/lib/property-editor/editors/color-editor/color.editor.d.ts +0 -13
  546. package/lib/property-editor/editors/color-editor/color.module.d.ts +0 -12
  547. package/lib/property-editor/editors/column-editor/column.editor.d.ts +0 -34
  548. package/lib/property-editor/editors/column-editor/column.module.d.ts +0 -20
  549. package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +0 -44
  550. package/lib/property-editor/editors/conditional-color-editor/conditional-color.module.d.ts +0 -19
  551. package/lib/property-editor/editors/date-editor/date.editor.d.ts +0 -28
  552. package/lib/property-editor/editors/date-editor/date.module.d.ts +0 -12
  553. package/lib/property-editor/editors/number-editor/number.editor.d.ts +0 -20
  554. package/lib/property-editor/editors/number-editor/number.module.d.ts +0 -12
  555. package/lib/property-editor/editors/range-editor/range.editor.d.ts +0 -29
  556. package/lib/property-editor/editors/range-editor/range.module.d.ts +0 -18
  557. package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +0 -29
  558. package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +0 -28
  559. package/lib/property-editor/editors/selectbox-editor/selectbox.module.d.ts +0 -14
  560. package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +0 -25
  561. package/lib/property-editor/editors/selection-editor/selection.module.d.ts +0 -11
  562. package/lib/property-editor/editors/switch-editor/number.editor.d.ts +0 -11
  563. package/lib/property-editor/editors/switch-editor/number.module.d.ts +0 -13
  564. package/lib/property-editor/editors/text-editor/text.editor.d.ts +0 -18
  565. package/lib/property-editor/editors/text-editor/text.module.d.ts +0 -12
  566. package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +0 -17
  567. package/lib/property-editor/editors/textarea-editor/textarea.module.d.ts +0 -12
  568. package/lib/property-editor/editors/time-editor/time.editor.d.ts +0 -17
  569. package/lib/property-editor/editors/time-editor/time.module.d.ts +0 -12
  570. package/lib/property-editor/property-editor-renderer.directive.d.ts +0 -30
  571. package/lib/property-editor/property-editor.class.d.ts +0 -92
  572. package/lib/property-editor/property-editor.module.d.ts +0 -21
  573. package/lib/query-builder/query-builder-group.component.d.ts +0 -33
  574. package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +0 -35
  575. package/lib/query-builder/query-builder-rule.component.d.ts +0 -45
  576. package/lib/query-builder/query-builder.class.d.ts +0 -45
  577. package/lib/query-builder/query-builder.component.d.ts +0 -27
  578. package/lib/query-builder/query-builder.module.d.ts +0 -23
  579. package/lib/query-builder/query-builder.service.d.ts +0 -18
  580. package/lib/search-bar/search-bar.component.d.ts +0 -61
  581. package/lib/search-bar/search-bar.module.d.ts +0 -18
  582. package/lib/searchbox/searchbox.component.d.ts +0 -22
  583. package/lib/searchbox/searchbox.module.d.ts +0 -13
  584. package/lib/selectbox/selectbox.component.d.ts +0 -118
  585. package/lib/selectbox/selectbox.module.d.ts +0 -15
  586. package/lib/selectbox/selectbox2.component.d.ts +0 -103
  587. package/lib/selection-list/selection-list.component.d.ts +0 -32
  588. package/lib/selection-list/selection-list.module.d.ts +0 -10
  589. package/lib/switch/switch.component.d.ts +0 -20
  590. package/lib/switch/switch.module.d.ts +0 -9
  591. package/lib/tab-page/tab-page-Renderer.component.d.ts +0 -16
  592. package/lib/tab-page/tab-page-host.component.d.ts +0 -25
  593. package/lib/tab-page/tab-page.module.d.ts +0 -10
  594. package/lib/tab-page/tab-page.service.d.ts +0 -30
  595. package/lib/tab-strip/tab-strip.component.d.ts +0 -28
  596. package/lib/tab-strip/tab-strip.module.d.ts +0 -8
  597. package/lib/tab-view/dynamic-tabs.directive.d.ts +0 -16
  598. package/lib/tab-view/tab-view.component.d.ts +0 -26
  599. package/lib/tab-view/tab-view.module.d.ts +0 -10
  600. package/lib/tab-view/tab.component.d.ts +0 -12
  601. package/lib/textarea/textarea.component.d.ts +0 -12
  602. package/lib/textarea/textarea.module.d.ts +0 -8
  603. package/lib/textbox/textbox.component.d.ts +0 -16
  604. package/lib/textbox/textbox.module.d.ts +0 -11
  605. package/lib/time-picker/time-picker.component.d.ts +0 -52
  606. package/lib/time-picker/time-picker.module.d.ts +0 -11
  607. package/lib/toast/toast-message/toast-message.component.d.ts +0 -18
  608. package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +0 -8
  609. package/lib/toast/toast.module.d.ts +0 -9
  610. package/lib/toast/toast.service.d.ts +0 -18
  611. package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +0 -12
  612. package/lib/toolbar/menu/toolbar-menu.component.d.ts +0 -24
  613. package/lib/toolbar/search/toolbar-search.component.d.ts +0 -16
  614. package/lib/toolbar/title/toolbar-title.component.d.ts +0 -9
  615. package/lib/toolbar/toolbar-item.d.ts +0 -3
  616. package/lib/toolbar/toolbar.component.d.ts +0 -8
  617. package/lib/toolbar/toolbar.module.d.ts +0 -14
  618. package/lib/tooltip/tooltip.directive.d.ts +0 -21
  619. package/lib/tooltip/tooltip.module.d.ts +0 -8
  620. package/lib/tree-side-menu/tree-side-menu.component.d.ts +0 -111
  621. package/lib/tree-side-menu/tree-side-menu.module.d.ts +0 -11
  622. package/lib/tree-view/tree-view.component.d.ts +0 -120
  623. package/lib/tree-view/tree-view.module.d.ts +0 -11
  624. package/lib/upload-file/upload-file.component.d.ts +0 -42
  625. package/lib/upload-file/upload-file.events.d.ts +0 -10
  626. package/lib/upload-file/upload-file.module.d.ts +0 -13
  627. package/lib/validation/validation-form.component.d.ts +0 -19
  628. package/lib/validation/validation-rule.widget.d.ts +0 -23
  629. package/lib/validation/validation.class.d.ts +0 -16
  630. package/lib/validation/validation.component.d.ts +0 -25
  631. package/lib/validation/validation.module.d.ts +0 -11
@@ -1,764 +0,0 @@
1
- import { Component, ViewEncapsulation, Input, ContentChild, Output, EventEmitter, ElementRef, TemplateRef } from '@angular/core';
2
- import { AXDataSourceComponent } from '../data-source/datasource.component';
3
- import { AXHtmlEvent, AXValueEvent } from '../base/events.class';
4
- import { AXBaseComponent } from '../base/element.class';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../checkbox/checkbox.component";
7
- import * as i2 from "../context-menu/context-menu.component";
8
- import * as i3 from "@angular/common";
9
- import * as i4 from "../context-menu/context-menu.directive";
10
- export class AXTreeViewNode {
11
- constructor() {
12
- this.itemData = new AXTreeViewItemData();
13
- }
14
- }
15
- export class AXTreeViewItemData {
16
- }
17
- export class AXTreeViewItemMovedEvent {
18
- }
19
- export class AXTreeViewselectionChangedEvent extends AXValueEvent {
20
- }
21
- export class AXTreeViewseletedKeyFieldsChangedEvent extends AXValueEvent {
22
- }
23
- export class AXTreeViewItemClick extends AXHtmlEvent {
24
- }
25
- export class AXTreeViewComponent extends AXBaseComponent {
26
- constructor(ref) {
27
- super();
28
- this.ref = ref;
29
- this.selectionMode = 'single';
30
- this.selectionLevel = 'all';
31
- // user can set only one of this /selectedFieldName or /seletedKeyFields
32
- //seletedKeyFields set id of nodes and parents
33
- //selectedFieldName set name of fields that set selectes
34
- this.selectedFieldName = null;
35
- // @Input()
36
- // selectNodesRecursive: 'all' | 'parents' | 'childs' | 'none' = 'all'; //leaf
37
- this.checkParents = true;
38
- this.checkChilds = true;
39
- this.seletedKeyFields = [];
40
- this.keyField = 'id';
41
- this.hasChildField = 'child';
42
- this.bordered = false;
43
- this.lazyLoading = true;
44
- this.allowDrag = false;
45
- this.size = 'md';
46
- this.selectionChanged = new EventEmitter();
47
- this.seletedKeyFieldsChanged = new EventEmitter();
48
- this.onItemOpening = new EventEmitter();
49
- this.onItemClick = new EventEmitter();
50
- this.onItemClosing = new EventEmitter();
51
- this.onItemDrag = new EventEmitter();
52
- this.onItemMoved = new EventEmitter();
53
- this.selectableField = '';
54
- this.onContextMenuItemClick = new EventEmitter();
55
- this.showSelectBox = false;
56
- this.loading = false;
57
- this.list = [];
58
- this.selectedItems = [];
59
- this.selectedParents = [];
60
- this.loadAllChildren = false;
61
- this.listLoad = [];
62
- this.validDrop = true;
63
- this.lockedDrag = false;
64
- this.childField = 'childeren';
65
- this.showContextMenu = false;
66
- this.isSelectedItem = false;
67
- this.loced = false;
68
- this.levelCount = 0;
69
- }
70
- handleOnContextMenuItem(e) {
71
- this.onContextMenuItemClick.emit(e);
72
- }
73
- refresh() {
74
- this.list = [];
75
- this._contentDataSource.fetch(null);
76
- }
77
- internalSelectItem(item, userChange = true) {
78
- if (item[this.hasChildField] === false || this.selectionMode === 'single') {
79
- item.select = !item.select;
80
- if (item.parentNode && this.selectionMode !== 'single' && this.checkParents == true) {
81
- this.changeParentSelect(item.parentNode);
82
- }
83
- if (item.select === true) {
84
- if (this.selectionMode === 'single') {
85
- this.selectedItems.forEach((e) => {
86
- e.select = false;
87
- });
88
- this.selectedItems = [];
89
- this.selectedItems.push(item);
90
- }
91
- else {
92
- this.selectedItems.push(item);
93
- }
94
- }
95
- else {
96
- this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== item[this.keyField]);
97
- }
98
- }
99
- else {
100
- item.select = !item.select;
101
- if (item.parentNode && this.selectionMode === 'multiple' && this.checkParents == true) {
102
- this.changeParentSelect(item.parentNode);
103
- }
104
- if (this.selectionMode === 'multiple' && this.checkChilds == true) {
105
- this.changeChildSelect(item, item.select);
106
- }
107
- if (item.select == true) {
108
- if (this.selectionMode === 'multiple') {
109
- this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
110
- this.selectedParents.push(item);
111
- }
112
- else {
113
- this.selectedParents.forEach((e) => {
114
- e.select = false;
115
- });
116
- this.selectedParents = [];
117
- this.selectedParents.push(item);
118
- }
119
- }
120
- else {
121
- this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
122
- }
123
- }
124
- if (userChange) {
125
- this.selectionChanged.emit({
126
- component: this,
127
- value: this.makeNode(item),
128
- htmlElement: this.ref.nativeElement
129
- });
130
- }
131
- }
132
- makeNode(item, addChildren = true) {
133
- const node = new AXTreeViewNode();
134
- if (addChildren) {
135
- node.children = item[this.childField] === undefined ? [] : item[this.childField]?.map((m) => this.makeNode(m));
136
- }
137
- node.itemData.disabled = item.disabled === true ? item.disabled : false;
138
- node.itemData.open = item.open === true ? item.open : false;
139
- node.itemData.key = item[this.keyField];
140
- const c = [];
141
- let i = 0;
142
- for (var k in item) {
143
- i = i + 1;
144
- if (k != 'select' &&
145
- k != 'hasChild' &&
146
- k != 'loading' &&
147
- k != 'requestId' &&
148
- k != 'disabled' &&
149
- k != 'open' &&
150
- k != 'parentNode' &&
151
- k != 'toggle' &&
152
- k != 'loaded' &&
153
- k != 'indeterminate' &&
154
- k != this.childField) {
155
- //c.push({ k: item[k] });
156
- c[k] = item[k];
157
- }
158
- }
159
- node.itemData.item = c; //TO DO
160
- node.itemData.selected = item.select === true ? item.select : false;
161
- node.itemData.indeterminate = item.select === null ? true : false;
162
- node.itemData.hasChild = item[this.hasChildField];
163
- node.parent = item.parentNode === undefined ? null : this.makeNode(item.parentNode, false);
164
- if (node.parent != null) {
165
- node.parent.selectParent = () => {
166
- if (item.parentNode['select'] != true) {
167
- this.internalSelectItem(item.parentNode, true);
168
- }
169
- };
170
- node.parent.unSelectParent = () => {
171
- if (item.parentNode['select'] == true) {
172
- this.internalSelectItem(item.parentNode, true);
173
- }
174
- };
175
- }
176
- if (node.children != null && node.children.length > 0) {
177
- node.children.selectChilds = () => {
178
- item.childeren.forEach((element) => {
179
- if (element['select'] != true) {
180
- this.internalSelectItem(element, true);
181
- }
182
- });
183
- };
184
- node.children.unSelectChilds = () => {
185
- item.childeren.forEach((element) => {
186
- if (element['select'] == true) {
187
- this.internalSelectItem(element, true);
188
- }
189
- });
190
- };
191
- }
192
- return node;
193
- }
194
- changeChildSelect(item, s) {
195
- // if (this.selectNodesRecursive == 'all' || this.selectNodesRecursive == 'childs') {
196
- if (this.checkChilds == true) {
197
- item.select = s;
198
- if (item[this.hasChildField] === true && item[this.childField] && item[this.childField].length > 0) {
199
- item[this.childField].forEach((elm) => {
200
- if (elm[this.hasChildField] === true) {
201
- elm.select = s;
202
- if (s === true && this.selectionMode !== 'single') {
203
- this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== elm[this.keyField]);
204
- this.selectedParents.push(elm);
205
- }
206
- if (s === false && this.selectionMode !== 'single') {
207
- this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== elm[this.keyField]);
208
- }
209
- this.changeChildSelect(elm, s);
210
- }
211
- else {
212
- elm.select = s;
213
- if (s === true && this.selectionMode !== 'single') {
214
- this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== elm[this.keyField]);
215
- this.selectedItems.push(elm);
216
- }
217
- if (s === false && this.selectionMode !== 'single') {
218
- this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== elm[this.keyField]);
219
- }
220
- }
221
- });
222
- }
223
- else {
224
- item.select = s;
225
- }
226
- }
227
- }
228
- changeParentSelect(item) {
229
- //if (this.selectNodesRecursive == 'all' || this.selectNodesRecursive == 'parents') {
230
- if (this.checkParents) {
231
- let allselect = true;
232
- let alldeselect = true;
233
- let oneselect = false;
234
- let isindeterminate = false;
235
- if (item[this.childField]) {
236
- for (let index = 0; index < item[this.childField].length; index++) {
237
- if (item[this.childField][index].select === true) {
238
- alldeselect = false;
239
- oneselect = true;
240
- }
241
- if (item[this.childField][index].select === false || item[this.childField][index].select === undefined) {
242
- allselect = false;
243
- }
244
- if (item[this.childField][index].select === null) {
245
- isindeterminate = true;
246
- alldeselect = false;
247
- oneselect = true;
248
- allselect = false;
249
- }
250
- }
251
- }
252
- if (oneselect || (isindeterminate && !allselect)) {
253
- item.select = null;
254
- this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
255
- this.selectedParents.push(item);
256
- }
257
- if (allselect === true) {
258
- item.select = true;
259
- this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
260
- this.selectedParents.push(item);
261
- }
262
- if (alldeselect === true) {
263
- this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
264
- item.select = false;
265
- }
266
- if (item.parentNode && item.parentNode[this.childField] && item.parentNode[this.childField].length > 0) {
267
- this.changeParentSelect(item.parentNode);
268
- }
269
- }
270
- }
271
- ngOnInit() {
272
- this.onItemClick.subscribe((data) => {
273
- if (!data.cancel) {
274
- this.toggleNode(data.item, data.flag);
275
- }
276
- });
277
- }
278
- itemdbClick(e, item) {
279
- if (this.selectionMode == 'single') {
280
- this.handleOnNodeClick(e, item, true);
281
- }
282
- }
283
- handleOnNodeClick(e, item, flag = false) {
284
- // this.internalSelectItem(item);
285
- this.onItemClick.emit({
286
- component: this,
287
- htmlEvent: e,
288
- item,
289
- flag
290
- });
291
- }
292
- nodeClick(item) {
293
- if (item[this.hasChildField] == true) {
294
- this.toggleNode(item, true);
295
- }
296
- else {
297
- this.internalSelectItem(item, true);
298
- }
299
- }
300
- toggleNode(item, flag = false) {
301
- //item[this.hasChildField] === false &&
302
- if (this.selectionMode === 'single' && !flag) {
303
- if (this.selectionLevel == 'nodes' && item.hasChild == true) {
304
- }
305
- else {
306
- this.internalSelectItem(item);
307
- }
308
- }
309
- else {
310
- item.toggle = !item.toggle;
311
- if (this.selectionMode === 'single') {
312
- if (this.selectionLevel == 'nodes' && item.hasChild == true) {
313
- }
314
- else {
315
- this.internalSelectItem(item);
316
- }
317
- }
318
- if (item[this.hasChildField] === true && item.loaded !== true && this.lazyLoading) {
319
- this.itemRow = item;
320
- const uid = Math.floor(Math.random() * 100000000);
321
- item.requestId = uid;
322
- this.listLoad.push(item);
323
- this._contentDataSource.fetch(item);
324
- this.showLoading(this.itemRow);
325
- }
326
- if (item.toggle && item[this.hasChildField] === true) {
327
- item.open = true;
328
- this.onItemOpening.emit(this.makeNode(item));
329
- }
330
- else if (!item.toggle && item[this.hasChildField] === true) {
331
- item.open = false;
332
- this.onItemClosing.emit(this.makeNode(item));
333
- }
334
- }
335
- }
336
- getLevel(item) {
337
- return new Promise((resolve, reject) => {
338
- debugger;
339
- if (item.parentNode) {
340
- this.levelCount = this.levelCount + 1;
341
- this.getLevel(item.parentNode).then((res) => {
342
- resolve(this.levelCount);
343
- });
344
- }
345
- else {
346
- this.levelCount = this.levelCount + 1;
347
- resolve(this.levelCount);
348
- }
349
- });
350
- }
351
- ngAfterContentInit() {
352
- this._contentDataSource.fetch(null);
353
- this._contentDataSource.onDataReceived.subscribe((_data) => {
354
- if (this.list.length === 0) {
355
- this.hideLoading(null);
356
- this.list = _data.data.result;
357
- this.list.forEach((el) => {
358
- el.disabledCheckBox = this.selectableField != '' ? (el[this.selectableField] ? el[this.selectableField] : false) : false;
359
- el.select = false;
360
- if (this.selectionLevel == 'nodes' && el[this.hasChildField] == true) {
361
- el.disabledCheckBox = true;
362
- }
363
- if (this.selectionLevel == 'parents' && el[this.hasChildField] == false) {
364
- el.disabledCheckBox = true;
365
- }
366
- if (this.seletedKeyFields.length > 0) {
367
- this.seletedKeyFields.forEach((n) => {
368
- if (n.includes(el[this.keyField])) {
369
- if (el[this.hasChildField] == true) {
370
- if (((this.checkParents == false && this.checkChilds == false) || this.checkChilds == false) && n.length == 1) {
371
- //select parent when check child and check parent is false TODO check this Action
372
- this.selectItem(el);
373
- }
374
- this.open(el);
375
- }
376
- else {
377
- this.selectItem(el);
378
- this.isSelectedItem = true;
379
- }
380
- }
381
- });
382
- }
383
- else if (this.selectedFieldName != null) {
384
- if (el[this.hasChildField] == true && el[this.selectedFieldName] == true) {
385
- if ((this.checkParents == false && this.checkChilds == false) || this.checkChilds == false) {
386
- //select parent when check child and check parent is false TODO check this Action
387
- this.selectItem(el);
388
- }
389
- this.open(el);
390
- }
391
- else if (el[this.selectedFieldName] == true) {
392
- this.selectItem(el);
393
- this.isSelectedItem = true;
394
- }
395
- }
396
- });
397
- }
398
- else {
399
- this.itemRow = this.listLoad.filter((c) => c.requestId === _data.data.requestId)[0];
400
- this.listLoad = this.listLoad.filter((c) => c.requestId !== _data.data.requestId);
401
- this.itemRow.loaded = true;
402
- if (this.itemRow !== undefined) {
403
- this.hideLoading(this.itemRow);
404
- const result = _data.data.result;
405
- if (this.list.length !== 0) {
406
- if (this.itemRow[this.childField] && this.itemRow[this.childField].length > 0) {
407
- result.forEach((el) => {
408
- el.disabledCheckBox = this.selectableField != '' ? (el[this.selectableField] ? el[this.selectableField] : false) : false;
409
- // el.disabledCheckBox = this.selectableField != '' ? el[this.selectableField] : false;
410
- this.itemRow[this.childField][this.itemRow[this.childField].length] = el;
411
- });
412
- }
413
- else {
414
- this.itemRow[this.childField] = result;
415
- }
416
- for (let i = 0; i < result.length; i++) {
417
- result[i].disabledCheckBox =
418
- this.selectableField != '' ? (result[i][this.selectableField] ? result[i][this.selectableField] : false) : false;
419
- if (this.selectionLevel == 'nodes' && result[i][this.hasChildField] == true) {
420
- result[i].disabledCheckBox = true;
421
- }
422
- if (this.selectionLevel == 'parents' && result[i][this.hasChildField] == false) {
423
- result[i].disabledCheckBox = true;
424
- }
425
- // if (this.selectionMode !== 'single' && (this.selectNodesRecursive == 'all' || this.selectNodesRecursive == 'childs')) {
426
- if (this.selectionMode !== 'single' && this.checkChilds == true) {
427
- result[i].select = this.itemRow.select === (undefined || null) ? false : this.itemRow.select;
428
- if (this.itemRow.select === true && this.selectionMode == 'multiple' && result[i][this.hasChildField] === false) {
429
- this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== result[i][this.keyField]);
430
- this.selectedItems.push(result[i]);
431
- }
432
- else if (this.itemRow.select === true && this.selectionMode == 'multiple' && result[i][this.hasChildField] === true) {
433
- this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== result[i][this.keyField]);
434
- this.selectedParents.push(result[i]);
435
- }
436
- }
437
- else {
438
- result[i].select = false;
439
- }
440
- result[i].parentNode = this.itemRow;
441
- if (this.seletedKeyFields.length > 0) {
442
- this.seletedKeyFields.forEach((n) => {
443
- if (n.includes(result[i][this.keyField])) {
444
- if (result[i][this.hasChildField] == true) {
445
- this.levelCount = 0;
446
- debugger;
447
- this.getLevel(result[i]).then((resLevel) => {
448
- debugger;
449
- if (this.checkParents == false && this.checkChilds == false && n.length == this.levelCount) {
450
- //select parent when check child and check parent is false TODO check this Action
451
- this.selectItem(result[i]);
452
- }
453
- this.open(result[i]);
454
- });
455
- }
456
- else {
457
- this.selectItem(result[i]);
458
- this.isSelectedItem = true;
459
- }
460
- }
461
- });
462
- }
463
- else if (this.selectedFieldName != null) {
464
- if (result[i][this.hasChildField] == true && result[i][this.selectedFieldName] == true) {
465
- if (this.checkParents == false && this.checkChilds == false) {
466
- //select parent when check child and check parent is false TODO check this Action
467
- this.selectItem(result[i]);
468
- }
469
- this.open(result[i]);
470
- }
471
- else if (result[i][this.selectedFieldName] == true) {
472
- this.selectItem(result[i]);
473
- this.isSelectedItem = true;
474
- }
475
- }
476
- }
477
- this.itemRow.loaded = true;
478
- }
479
- }
480
- }
481
- if (this.isSelectedItem == true && !this.loced) {
482
- this.loced = true;
483
- this.seletedKeyFieldsChanged.emit({
484
- component: this,
485
- // value: this.makeNode(item),
486
- htmlElement: this.ref.nativeElement
487
- });
488
- }
489
- });
490
- }
491
- ngAfterViewInit() {
492
- if (this.selectionMode !== 'single') {
493
- this.showSelectBox = true;
494
- }
495
- this.showContextMenu = true;
496
- }
497
- // onItemClick(e, v) {
498
- // }
499
- onDragStart(e, v) {
500
- if (!this.lockedDrag) {
501
- this.itemDrag = v;
502
- this.onItemDrag.emit(v);
503
- }
504
- e.stopImmediatePropagation();
505
- }
506
- onDragEnd(e, v) {
507
- if (!this.lockedDrag) {
508
- this.itemDrop = v;
509
- }
510
- e.stopImmediatePropagation();
511
- }
512
- drop(e) {
513
- // this.onItemDrop.emit(this.itemDrop);
514
- if (!this.lockedDrag) {
515
- this.validDrop = true;
516
- this.sameChilde(this.itemDrag, this.itemDrop);
517
- if (this.validDrop && this.itemDrag[this.keyField] !== this.itemDrop[this.keyField] && this.itemDrag.parentNode !== this.itemDrop) {
518
- const movedEvent = new AXTreeViewItemMovedEvent();
519
- movedEvent.source = this.makeNode(this.itemDrag);
520
- movedEvent.target = this.makeNode(this.itemDrop);
521
- this.lockedDrag = true;
522
- this.showLoading(this.itemDrag);
523
- this.showLoading(this.itemDrop);
524
- movedEvent.resolve = (value) => {
525
- this.hideLoading(this.itemDrag);
526
- this.hideLoading(this.itemDrop);
527
- if (value) {
528
- this.dragDropItem(this.itemDrag, this.itemDrop);
529
- }
530
- else {
531
- this.lockedDrag = false;
532
- }
533
- };
534
- this.onItemMoved.emit(movedEvent);
535
- }
536
- }
537
- e.stopImmediatePropagation();
538
- }
539
- sameChilde(parent, child) {
540
- if (parent[this.childField] && parent[this.childField].length > 0) {
541
- for (let index = 0; index < parent[this.childField].length; index++) {
542
- if (parent[this.childField][index][this.keyField] == child[this.keyField]) {
543
- this.validDrop = false;
544
- }
545
- if (parent[this.childField][index][this.childField] && parent[this.childField][index][this.childField].length > 0) {
546
- this.sameChilde(parent[this.childField][index], child);
547
- }
548
- }
549
- }
550
- else if (parent[this.keyField] == child[this.keyField]) {
551
- this.validDrop = false;
552
- }
553
- }
554
- dragDropItem(itemChild, itemParent) {
555
- if (this.selectionLevel == 'nodes') {
556
- itemParent.disabledCheckBox = true;
557
- }
558
- if (itemChild.parentNode) {
559
- itemChild.parentNode[this.childField] = itemChild.parentNode[this.childField].filter((c) => c[this.keyField] !== itemChild[this.keyField]);
560
- }
561
- else {
562
- this.list = this.list.filter((c) => c[this.keyField] !== itemChild[this.keyField]);
563
- }
564
- itemChild.parentNode = itemParent;
565
- if (itemParent[this.childField] && itemParent[this.childField].length > 0) {
566
- itemParent[this.childField][itemParent[this.childField].length] = itemChild;
567
- }
568
- else {
569
- itemParent[this.childField] = [];
570
- itemParent[this.childField][0] = itemChild;
571
- if (itemParent[this.hasChildField] === true) {
572
- this.toggleNode(itemParent);
573
- }
574
- else {
575
- itemParent.toggle = !itemParent.toggle;
576
- itemParent.loaded = true;
577
- }
578
- itemParent[this.hasChildField] = true;
579
- }
580
- if (itemChild.parentNode && this.selectionMode !== 'single') {
581
- this.changeParentSelect(itemChild.parentNode);
582
- }
583
- this.lockedDrag = false;
584
- }
585
- listChange(field, value) {
586
- for (let index = 0; index < this.list.length; index++) {
587
- this.changeChiled(this.list[index], field, value);
588
- }
589
- this.loadAllChildren = false;
590
- }
591
- changeChiled(item, field, value) {
592
- if (field === 'toggle' && (item.loaded === false || item.loaded === undefined)) {
593
- if (this.loadAllChildren === true) {
594
- this.toggleNode(item);
595
- item[field] = value;
596
- }
597
- }
598
- else {
599
- item[field] = value;
600
- if (field === 'select' && item[this.hasChildField] === false && value === true) {
601
- this.selectedItems.push(item);
602
- }
603
- if (field === 'select' && item[this.hasChildField] === true && value === true) {
604
- this.selectedParents.push(item);
605
- }
606
- }
607
- if (field === 'select') {
608
- item.indeterminate = false;
609
- }
610
- if (item[this.hasChildField] === true && item[this.childField] && item[this.childField].length > 0) {
611
- item[this.childField].forEach((element) => {
612
- this.changeChiled(element, field, value);
613
- });
614
- }
615
- }
616
- showLoading(item) {
617
- item.loading = true;
618
- }
619
- hideLoading(item) {
620
- if (item != null) {
621
- item.loading = false;
622
- }
623
- }
624
- openAll(loadAll = false) {
625
- // if (loadAll) {
626
- // this.loadAllChildren = true;
627
- // this.listChange('toggle', true);
628
- //} else {
629
- this.listChange('toggle', true);
630
- // }
631
- }
632
- selectItem(item) {
633
- if (item['select'] != true) {
634
- this.internalSelectItem(item, false);
635
- }
636
- }
637
- unSelectItem(item) {
638
- if (item['select'] == true) {
639
- this.internalSelectItem(item, false);
640
- }
641
- }
642
- open(item) {
643
- if (item['toggle'] !== true) {
644
- this.toggleNode(item, true);
645
- }
646
- }
647
- scrolIntoView(item) {
648
- let element = document.querySelector(`li[data-id='${item[this.keyField]}']`);
649
- element.scrollIntoView();
650
- }
651
- closeAll() {
652
- this.listChange('toggle', false);
653
- }
654
- selectAll() {
655
- if (this.selectionMode !== 'single') {
656
- this.listChange('select', true);
657
- }
658
- }
659
- unSelectAll() {
660
- if (this.selectionMode !== 'single') {
661
- this.listChange('select', false);
662
- }
663
- this.selectedItems = [];
664
- }
665
- getSelectedNodes() {
666
- const selectItemsNode = [];
667
- this.selectedItems.forEach((e) => {
668
- selectItemsNode.push(this.makeNode(e));
669
- });
670
- return selectItemsNode;
671
- }
672
- getSelectedParents() {
673
- const selectItemsParent = [];
674
- this.selectedParents.forEach((e) => {
675
- selectItemsParent.push(this.makeNode(e));
676
- });
677
- return selectItemsParent;
678
- }
679
- getParentsId(item) {
680
- let keyFields = [];
681
- keyFields.push(item[this.keyField]);
682
- if (item.parentNode) {
683
- keyFields.push(...this.getParentsId(item.parentNode));
684
- }
685
- return keyFields;
686
- }
687
- getSelectedKeyFields() {
688
- let keyFields = [];
689
- this.selectedItems.forEach((elm) => {
690
- var Ids = this.getParentsId(elm);
691
- if (Ids) {
692
- keyFields.push(Ids);
693
- }
694
- });
695
- return keyFields;
696
- }
697
- getSelectedKeyFieldsParents() {
698
- let keyFields = [];
699
- this.selectedParents.forEach((elm) => {
700
- var Ids = this.getParentsId(elm);
701
- if (Ids) {
702
- keyFields.push(Ids);
703
- }
704
- });
705
- return keyFields;
706
- }
707
- }
708
- AXTreeViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXTreeViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
709
- AXTreeViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: { selectionMode: "selectionMode", selectionLevel: "selectionLevel", selectedFieldName: "selectedFieldName", checkParents: "checkParents", checkChilds: "checkChilds", seletedKeyFields: "seletedKeyFields", keyField: "keyField", hasChildField: "hasChildField", bordered: "bordered", lazyLoading: "lazyLoading", allowDrag: "allowDrag", size: "size", selectableField: "selectableField", contextMenuItems: "contextMenuItems" }, outputs: { selectionChanged: "selectionChanged", seletedKeyFieldsChanged: "seletedKeyFieldsChanged", onItemOpening: "onItemOpening", onItemClick: "onItemClick", onItemClosing: "onItemClosing", onItemDrag: "onItemDrag", onItemMoved: "onItemMoved", onContextMenuItemClick: "onContextMenuItemClick" }, queries: [{ propertyName: "nodeTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ul class=\"ax treeview {{size}}\">\r\n <ng-template #recursiveList let-list>\r\n <ng-container *ngFor=\"let item of list\">\r\n <li class=\"active {{item[hasChildField] ? '':'node'}}\" [class.bordered]=\"bordered\"\r\n [class.selected]=\"item.select\" [draggable]=\"allowDrag\" (dragstart)=\"onDragStart($event, item)\"\r\n [attr.data-id]=\"item[keyField]\" (dragleave)=\"onDragEnd($event,item)\" (dragend)=drop($event)>\r\n <div axContextMenu [contextDataItem]=\"item\" [contextMenuItems]=\"contextMenuItems\" [contextMenu]=\"menu\"\r\n (onContextMenuItemClick)=\"handleOnContextMenuItem($event)\"\r\n style=\"display: flex; cursor: pointer;align-items: center;\">\r\n <div class=\"start-side\">\r\n <div *ngIf=\"item[hasChildField]\" class=\"collapse-icon\"\r\n (click)=\"handleOnNodeClick($event,item,true)\">\r\n <i class=\"fal\"\r\n [ngClass]=\"{'fa-minus': !!item.toggle , 'fa-plus': !item.toggle , 'fa-spinner fa-spin':item.loading }\"></i>\r\n </div>\r\n\r\n <ax-check-box *ngIf=\"showSelectBox\" [disabled]=\"item.disabledCheckBox\" [size]=\"size\"\r\n [indeterminate]=\"true\" [value]=\"item.select\" (onClick)=\"internalSelectItem(item)\">\r\n </ax-check-box>\r\n\r\n\r\n </div>\r\n <div class=\"text-list\" (click)=\"nodeClick(item)\" (dblclick)=\"itemdbClick($event,item)\">\r\n <ng-container *ngIf=\"nodeTemplate; else elseTemplate\">\r\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context:{ $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n {{item.title}}\r\n </ng-template>\r\n </div>\r\n </div>\r\n <ul *ngIf=\"item.loading\">\r\n <i class=\"far \"></i>\r\n </ul>\r\n <ul class=\"child\" *ngIf=\"item.toggle\" style=\"background-color: white !important;\">\r\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: item.childeren }\">\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: list }\"></ng-container>\r\n</ul>\r\n\r\n<ax-context-menu #menu></ax-context-menu>", components: [{ type: i1.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }, { type: i2.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["size", "width", "items"], outputs: ["onItemClick", "onClosed"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.AXContextMenuDirective, selector: "[axContextMenu]", inputs: ["contextMenu", "contextDataItem", "contextMenuItems", "rtl"], outputs: ["onContextMenuItemClick"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], encapsulation: i0.ViewEncapsulation.None });
710
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXTreeViewComponent, decorators: [{
711
- type: Component,
712
- args: [{ selector: 'ax-tree-view', encapsulation: ViewEncapsulation.None, template: "<ul class=\"ax treeview {{size}}\">\r\n <ng-template #recursiveList let-list>\r\n <ng-container *ngFor=\"let item of list\">\r\n <li class=\"active {{item[hasChildField] ? '':'node'}}\" [class.bordered]=\"bordered\"\r\n [class.selected]=\"item.select\" [draggable]=\"allowDrag\" (dragstart)=\"onDragStart($event, item)\"\r\n [attr.data-id]=\"item[keyField]\" (dragleave)=\"onDragEnd($event,item)\" (dragend)=drop($event)>\r\n <div axContextMenu [contextDataItem]=\"item\" [contextMenuItems]=\"contextMenuItems\" [contextMenu]=\"menu\"\r\n (onContextMenuItemClick)=\"handleOnContextMenuItem($event)\"\r\n style=\"display: flex; cursor: pointer;align-items: center;\">\r\n <div class=\"start-side\">\r\n <div *ngIf=\"item[hasChildField]\" class=\"collapse-icon\"\r\n (click)=\"handleOnNodeClick($event,item,true)\">\r\n <i class=\"fal\"\r\n [ngClass]=\"{'fa-minus': !!item.toggle , 'fa-plus': !item.toggle , 'fa-spinner fa-spin':item.loading }\"></i>\r\n </div>\r\n\r\n <ax-check-box *ngIf=\"showSelectBox\" [disabled]=\"item.disabledCheckBox\" [size]=\"size\"\r\n [indeterminate]=\"true\" [value]=\"item.select\" (onClick)=\"internalSelectItem(item)\">\r\n </ax-check-box>\r\n\r\n\r\n </div>\r\n <div class=\"text-list\" (click)=\"nodeClick(item)\" (dblclick)=\"itemdbClick($event,item)\">\r\n <ng-container *ngIf=\"nodeTemplate; else elseTemplate\">\r\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context:{ $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n {{item.title}}\r\n </ng-template>\r\n </div>\r\n </div>\r\n <ul *ngIf=\"item.loading\">\r\n <i class=\"far \"></i>\r\n </ul>\r\n <ul class=\"child\" *ngIf=\"item.toggle\" style=\"background-color: white !important;\">\r\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: item.childeren }\">\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: list }\"></ng-container>\r\n</ul>\r\n\r\n<ax-context-menu #menu></ax-context-menu>" }]
713
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { nodeTemplate: [{
714
- type: ContentChild,
715
- args: [TemplateRef, { static: true }]
716
- }], _contentDataSource: [{
717
- type: ContentChild,
718
- args: [AXDataSourceComponent, { static: true }]
719
- }], selectionMode: [{
720
- type: Input
721
- }], selectionLevel: [{
722
- type: Input
723
- }], selectedFieldName: [{
724
- type: Input
725
- }], checkParents: [{
726
- type: Input
727
- }], checkChilds: [{
728
- type: Input
729
- }], seletedKeyFields: [{
730
- type: Input
731
- }], keyField: [{
732
- type: Input
733
- }], hasChildField: [{
734
- type: Input
735
- }], bordered: [{
736
- type: Input
737
- }], lazyLoading: [{
738
- type: Input
739
- }], allowDrag: [{
740
- type: Input
741
- }], size: [{
742
- type: Input
743
- }], selectionChanged: [{
744
- type: Output
745
- }], seletedKeyFieldsChanged: [{
746
- type: Output
747
- }], onItemOpening: [{
748
- type: Output
749
- }], onItemClick: [{
750
- type: Output
751
- }], onItemClosing: [{
752
- type: Output
753
- }], onItemDrag: [{
754
- type: Output
755
- }], onItemMoved: [{
756
- type: Output
757
- }], selectableField: [{
758
- type: Input
759
- }], onContextMenuItemClick: [{
760
- type: Output
761
- }], contextMenuItems: [{
762
- type: Input
763
- }] } });
764
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb21wb25lbnRzL3NyYy9saWIvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29tcG9uZW50cy9zcmMvbGliL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQWUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0FBSXhELE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBRUUsYUFBUSxHQUF1QixJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFFMUQsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLGtCQUFrQjtDQVE5QjtBQUVELE1BQU0sT0FBTyx3QkFBd0I7Q0FJcEM7QUFFRCxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsWUFBNEI7Q0FFaEY7QUFFRCxNQUFNLE9BQU8sc0NBQXVDLFNBQVEsWUFBNEI7Q0FFdkY7QUFFRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBdUI7Q0FLL0Q7QUFPRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZUFBZTtJQStGdEQsWUFBb0IsR0FBZTtRQUNqQyxLQUFLLEVBQUUsQ0FBQztRQURVLFFBQUcsR0FBSCxHQUFHLENBQVk7UUF2Rm5DLGtCQUFhLEdBQTBCLFFBQVEsQ0FBQztRQUdoRCxtQkFBYyxHQUFnQyxLQUFLLENBQUM7UUFFcEQsd0VBQXdFO1FBQ3hFLDhDQUE4QztRQUM5Qyx3REFBd0Q7UUFFeEQsc0JBQWlCLEdBQVcsSUFBSSxDQUFDO1FBRWpDLFdBQVc7UUFDWCw4RUFBOEU7UUFHOUUsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFHN0IsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUFHNUIscUJBQWdCLEdBQVUsRUFBRSxDQUFDO1FBRzdCLGFBQVEsR0FBVyxJQUFJLENBQUM7UUFHeEIsa0JBQWEsR0FBVyxPQUFPLENBQUM7UUFHaEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUcxQixnQkFBVyxHQUFZLElBQUksQ0FBQztRQUc1QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRzNCLFNBQUksR0FBZ0IsSUFBSSxDQUFDO1FBR3pCLHFCQUFnQixHQUFrRCxJQUFJLFlBQVksRUFBbUMsQ0FBQztRQUd0SCw0QkFBdUIsR0FBeUQsSUFBSSxZQUFZLEVBQW1DLENBQUM7UUFHcEksa0JBQWEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUczRCxnQkFBVyxHQUFzQyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUd6RixrQkFBYSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRzNELGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUd4RCxnQkFBVyxHQUEyQyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUduRyxvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUc3QiwyQkFBc0IsR0FBOEMsSUFBSSxZQUFZLEVBQStCLENBQUM7UUFFcEgsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixTQUFJLEdBQVUsRUFBRSxDQUFDO1FBRWpCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzFCLG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBQzVCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFHckIsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGVBQVUsR0FBVyxXQUFXLENBQUM7UUFDakMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsVUFBSyxHQUFZLEtBQUssQ0FBQztRQTRSdkIsZUFBVSxHQUFXLENBQUMsQ0FBQztJQXRSdkIsQ0FBQztJQUVELHVCQUF1QixDQUFDLENBQThCO1FBQ3BELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQUksRUFBRSxhQUFzQixJQUFJO1FBQ2pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUU7WUFDekUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO2dCQUNuRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtnQkFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRTtvQkFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDL0IsQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ25CLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDL0I7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQy9CO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDakc7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFFM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO2dCQUNyRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtnQkFDakUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDM0M7WUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO2dCQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFO29CQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDcEcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2pDO3FCQUFNO29CQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQ2pDLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNuQixDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2pDO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDckc7U0FDRjtRQUNELElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDekIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUMxQixXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhO2FBQ3BDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBdUIsSUFBSTtRQUNoRCxNQUFNLElBQUksR0FBbUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNsRCxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoSDtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ2xCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsSUFDRSxDQUFDLElBQUksUUFBUTtnQkFDYixDQUFDLElBQUksVUFBVTtnQkFDZixDQUFDLElBQUksU0FBUztnQkFDZCxDQUFDLElBQUksV0FBVztnQkFDaEIsQ0FBQyxJQUFJLFVBQVU7Z0JBQ2YsQ0FBQyxJQUFJLE1BQU07Z0JBQ1gsQ0FBQyxJQUFJLFlBQVk7Z0JBQ2pCLENBQUMsSUFBSSxRQUFRO2dCQUNiLENBQUMsSUFBSSxRQUFRO2dCQUNiLENBQUMsSUFBSSxlQUFlO2dCQUNwQixDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFDcEI7Z0JBQ0EseUJBQXlCO2dCQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO1NBQ0Y7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDcEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0YsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtZQUN0QixJQUFJLENBQUMsTUFBYyxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUU7Z0JBQ3ZDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNoRDtZQUNILENBQUMsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFjLENBQUMsY0FBYyxHQUFHLEdBQUcsRUFBRTtnQkFDekMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRTtvQkFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ2hEO1lBQ0gsQ0FBQyxDQUFDO1NBQ0g7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwRCxJQUFJLENBQUMsUUFBZ0IsQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNqQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUU7d0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3hDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLFFBQWdCLENBQUMsY0FBYyxHQUFHLEdBQUcsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDakMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFO3dCQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUN4QztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IscUZBQXFGO1FBQ3JGLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRTt3QkFDcEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7d0JBRWYsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxFQUFFOzRCQUNqRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs0QkFDbkcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQ2hDO3dCQUNELElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRTs0QkFDbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7eUJBQ3BHO3dCQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ2hDO3lCQUFNO3dCQUNMLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3dCQUNmLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRTs0QkFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7NEJBQy9GLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUM5Qjt3QkFDRCxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUU7NEJBQ2xELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3lCQUNoRztxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ2pCO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBSTtRQUM3QixxRkFBcUY7UUFDckYsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztZQUU1QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3pCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDakUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7d0JBQ2hELFdBQVcsR0FBRyxLQUFLLENBQUM7d0JBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUM7cUJBQ2xCO29CQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTt3QkFDdEcsU0FBUyxHQUFHLEtBQUssQ0FBQztxQkFDbkI7b0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7d0JBQ2hELGVBQWUsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLFdBQVcsR0FBRyxLQUFLLENBQUM7d0JBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUM7d0JBQ2pCLFNBQVMsR0FBRyxLQUFLLENBQUM7cUJBQ25CO2lCQUNGO2FBQ0Y7WUFFRCxJQUFJLFNBQVMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO2dCQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFO2dCQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDcEcsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7YUFDckI7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMxQztTQUNGO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQXlCLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFhLEVBQUUsSUFBSTtRQUM3QixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksUUFBUSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLENBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLEtBQUs7UUFDakQsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ3BCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJO1lBQ0osSUFBSTtTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBSTtRQUNaLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDN0I7YUFBTTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsS0FBSztRQUMzQix1Q0FBdUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUM1QyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO2FBQzVEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMvQjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxFQUFFO2dCQUNuQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO2lCQUM1RDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQy9CO2FBQ0Y7WUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2pGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNoQztZQUNELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDcEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUM5QztpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDNUQsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUM5QztTQUNGO0lBQ0gsQ0FBQztJQUlELFFBQVEsQ0FBQyxJQUFJO1FBQ1gsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxRQUFRLENBQUE7WUFDUixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQTthQUNIO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7YUFDekI7UUFDSCxDQUFDLENBQ0EsQ0FBQTtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUU5QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUN2QixFQUFFLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDekgsRUFBRSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBRWxCLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLEVBQUU7d0JBQ3BFLEVBQUUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7cUJBQzVCO29CQUVELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLEVBQUU7d0JBQ3ZFLEVBQUUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7cUJBQzVCO29CQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTs0QkFDdkMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtnQ0FDakMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksRUFBRTtvQ0FDbEMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO3dDQUM3RyxpRkFBaUY7d0NBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7cUNBQ3JCO29DQUNELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUNBQ2Y7cUNBQU07b0NBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQ0FDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7aUNBQzVCOzZCQUNGO3dCQUNILENBQUMsQ0FBQyxDQUFDO3FCQUNKO3lCQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRTt3QkFDekMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxFQUFFOzRCQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUssRUFBRTtnQ0FDMUYsaUZBQWlGO2dDQUNqRixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzZCQUNyQjs0QkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3lCQUNmOzZCQUFNLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksRUFBRTs0QkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7eUJBQzVCO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xGLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDM0IsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQy9CLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUVqQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFDMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUM3RSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0NBQ3BCLEVBQUUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dDQUN6SCx1RkFBdUY7Z0NBQ3ZGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFDM0UsQ0FBQyxDQUFDLENBQUM7eUJBQ0o7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO3lCQUN4Qzt3QkFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDdEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtnQ0FDeEIsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzs0QkFFbkgsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksRUFBRTtnQ0FDM0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzs2QkFDbkM7NEJBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssRUFBRTtnQ0FDOUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzs2QkFDbkM7NEJBQ0QsMEhBQTBIOzRCQUMxSCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO2dDQUMvRCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2dDQUU3RixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFVBQVUsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssRUFBRTtvQ0FDL0csSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0NBQ3JHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lDQUNwQztxQ0FBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFVBQVUsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRTtvQ0FDckgsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0NBQ3pHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2lDQUNyQzs2QkFFRjtpQ0FBTTtnQ0FDTCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs2QkFDMUI7NEJBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDOzRCQUVwQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0NBQ3ZDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7d0NBQ3hDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLEVBQUU7NENBRXpDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDOzRDQUNwQixRQUFRLENBQUE7NENBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnREFDekMsUUFBUSxDQUFBO2dEQUNSLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29EQUMxRixpRkFBaUY7b0RBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aURBQzVCO2dEQUVELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NENBQ3ZCLENBQUMsQ0FBQyxDQUFBO3lDQUdIOzZDQUFNOzRDQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NENBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO3lDQUM1QjtxQ0FDRjtnQ0FDSCxDQUFDLENBQUMsQ0FBQzs2QkFDSjtpQ0FBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLEVBQUU7Z0NBQ3pDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLElBQUksRUFBRTtvQ0FDdEYsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUssRUFBRTt3Q0FDM0QsaUZBQWlGO3dDQUNqRixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FDQUM1QjtvQ0FDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lDQUN0QjtxQ0FBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLEVBQUU7b0NBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2lDQUM1Qjs2QkFDRjt5QkFDRjt3QkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7cUJBQzVCO2lCQUNGO2FBQ0Y7WUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUM7b0JBQ2hDLFNBQVMsRUFBRSxJQUFJO29CQUNmLDhCQUE4QjtvQkFDOUIsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtpQkFDcEMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRTtZQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUMzQjtRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxzQkFBc0I7SUFFdEIsSUFBSTtJQUVKLFdBQVcsQ0FBQyxDQUFRLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QjtRQUNELENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztTQUNuQjtRQUNELENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLENBQUMsQ0FBQztRQUNKLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqSSxNQUFNLFVBQVUsR0FBNkIsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO2dCQUM1RSxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRCxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNoQyxVQUFVLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxLQUFLLEVBQUU7d0JBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDakQ7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7cUJBQ3pCO2dCQUNILENBQUMsQ0FBQztnQkFDRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNuQztTQUNGO1FBRUQsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSztRQUN0QixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDbkUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztpQkFDeEI7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNqSCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3hEO2FBQ0Y7U0FDRjthQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFTLEVBQUUsVUFBVTtRQUNoQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksT0FBTyxFQUFFO1lBQ2xDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7U0FDcEM7UUFFRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUU7WUFDeEIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUM1STthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDcEY7UUFDRCxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUNsQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUM7U0FDN0U7YUFBTTtZQUNMLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQzNDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDN0I7aUJBQU07Z0JBQ0wsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2FBQzFCO1lBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDdkM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUs7UUFDN0IsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRU8sWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSztRQUNyQyxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxFQUFFO1lBQzlFLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDckI7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDOUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0I7WUFDRCxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDN0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUNELElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztTQUM1QjtRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbEcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQUk7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFJO1FBQ3RCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFTSxPQUFPLENBQUMsVUFBbUIsS0FBSztRQUNyQyxpQkFBaUI7UUFDakIsK0JBQStCO1FBQy9CLG1DQUFtQztRQUNuQyxVQUFVO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSTtJQUNOLENBQUM7SUFFTSxVQUFVLENBQUMsSUFBSTtRQUNwQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFTSxZQUFZLENBQUMsSUFBSTtRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFTSxJQUFJLENBQUMsSUFBSTtRQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsSUFBSTtRQUN2QixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0UsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxFQUFFO1lBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRTtZQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDakMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8saUJBQWlCLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFJO1FBQ2YsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxvQkFBb0I7UUFDekIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxJQUFJLEdBQUcsRUFBRTtnQkFDUCxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sMkJBQTJCO1FBQ2hDLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ25DLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNyQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7aUhBcHdCVSxtQkFBbUI7cUdBQW5CLG1CQUFtQix1ekJBQ2hCLFdBQVcsbUdBR1gscUJBQXFCLHFGQ3JEckMsbXJGQTRDeUM7NEZESzVCLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxjQUFjLGlCQUVULGlCQUFpQixDQUFDLElBQUk7aUdBSXJDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUluQyxrQkFBa0I7c0JBRHpCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlyRCxhQUFhO3NCQURaLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQU9OLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFPTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixNQUFNO2dCQUlQLHVCQUF1QjtzQkFEdEIsTUFBTTtnQkFJUCxhQUFhO3NCQURaLE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQUlQLGFBQWE7c0JBRFosTUFBTTtnQkFJUCxVQUFVO3NCQURULE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQUlQLGVBQWU7c0JBRGQsS0FBSztnQkFJTixzQkFBc0I7c0JBRHJCLE1BQU07Z0JBb0JQLGdCQUFnQjtzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5wdXQsIENvbnRlbnRDaGlsZCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQVhEYXRhU291cmNlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UvZGF0YXNvdXJjZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWERhdGFFdmVudCwgQVhIdG1sRXZlbnQsIEFYVmFsdWVFdmVudCB9IGZyb20gJy4uL2Jhc2UvZXZlbnRzLmNsYXNzJztcclxuaW1wb3J0IHsgQVhCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS9lbGVtZW50LmNsYXNzJztcclxuaW1wb3J0IHsgQVhDb250ZXh0TWVudUl0ZW1DbGlja0V2ZW50LCBBWENvbnRleHRNZW51UHJvbWlzZUZ1bmN0aW9uLCBBWENvbnRleHRNZW51RnVuY3Rpb24gfSBmcm9tICcuLi9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFYTWVudUl0ZW0gfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFYVHJlZVZpZXdOb2RlIHtcclxuICBjaGlsZHJlbjogQVhUcmVlVmlld05vZGVbXTtcclxuICBpdGVtRGF0YTogQVhUcmVlVmlld0l0ZW1EYXRhID0gbmV3IEFYVHJlZVZpZXdJdGVtRGF0YSgpO1xyXG4gIHBhcmVudDogQVhUcmVlVmlld05vZGU7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBWFRyZWVWaWV3SXRlbURhdGEge1xyXG4gIHNlbGVjdGVkOiBib29sZWFuO1xyXG4gIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgb3BlbjogYm9vbGVhbjtcclxuICBoYXNDaGlsZDogYm9vbGVhbjtcclxuICBpdGVtOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBWFRyZWVWaWV3SXRlbU1vdmVkRXZlbnQge1xyXG4gIHNvdXJjZTogQVhUcmVlVmlld05vZGU7XHJcbiAgdGFyZ2V0OiBBWFRyZWVWaWV3Tm9kZTtcclxuICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBWFRyZWVWaWV3c2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgQVhWYWx1ZUV2ZW50PEFYVHJlZVZpZXdOb2RlPiB7XHJcbiAgY29tcG9uZW50OiBBWFRyZWVWaWV3Q29tcG9uZW50O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld3NlbGV0ZWRLZXlGaWVsZHNDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBBWFZhbHVlRXZlbnQ8QVhUcmVlVmlld05vZGU+IHtcclxuICBjb21wb25lbnQ6IEFYVHJlZVZpZXdDb21wb25lbnQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBWFRyZWVWaWV3SXRlbUNsaWNrIGV4dGVuZHMgQVhIdG1sRXZlbnQ8TW91c2VFdmVudD4ge1xyXG4gIGNvbXBvbmVudDogQVhUcmVlVmlld0NvbXBvbmVudDtcclxuICBpdGVtOiBhbnk7XHJcbiAgZmxhZzogYm9vbGVhbjtcclxuICBjYW5jZWw/OiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F4LXRyZWUtdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld0NvbXBvbmVudCBleHRlbmRzIEFYQmFzZUNvbXBvbmVudCB7XHJcbiAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBub2RlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoQVhEYXRhU291cmNlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHByaXZhdGUgX2NvbnRlbnREYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnID0gJ3NpbmdsZSc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2VsZWN0aW9uTGV2ZWw6ICdhbGwnIHwgJ25vZGVzJyB8ICdwYXJlbnRzJyA9ICdhbGwnO1xyXG5cclxuICAvLyB1c2VyIGNhbiBzZXQgb25seSBvbmUgb2YgdGhpcyAvc2VsZWN0ZWRGaWVsZE5hbWUgb3IgL3NlbGV0ZWRLZXlGaWVsZHNcclxuICAvL3NlbGV0ZWRLZXlGaWVsZHMgc2V0IGlkIG9mIG5vZGVzIGFuZCBwYXJlbnRzXHJcbiAgLy9zZWxlY3RlZEZpZWxkTmFtZSBzZXQgbmFtZSBvZiBmaWVsZHMgdGhhdCBzZXQgc2VsZWN0ZXNcclxuICBASW5wdXQoKVxyXG4gIHNlbGVjdGVkRmllbGROYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvLyBASW5wdXQoKVxyXG4gIC8vIHNlbGVjdE5vZGVzUmVjdXJzaXZlOiAnYWxsJyB8ICdwYXJlbnRzJyB8ICdjaGlsZHMnIHwgJ25vbmUnID0gJ2FsbCc7IC8vbGVhZlxyXG5cclxuICBASW5wdXQoKVxyXG4gIGNoZWNrUGFyZW50czogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgY2hlY2tDaGlsZHM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNlbGV0ZWRLZXlGaWVsZHM6IGFueVtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAga2V5RmllbGQ6IHN0cmluZyA9ICdpZCc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgaGFzQ2hpbGRGaWVsZDogc3RyaW5nID0gJ2NoaWxkJztcclxuXHJcbiAgQElucHV0KClcclxuICBib3JkZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGxhenlMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBhbGxvd0RyYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzaXplOiAnbWQnIHwgJ3NtJyA9ICdtZCc7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFRyZWVWaWV3c2VsZWN0aW9uQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhUcmVlVmlld3NlbGVjdGlvbkNoYW5nZWRFdmVudD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZXRlZEtleUZpZWxkc0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFRyZWVWaWV3c2VsZXRlZEtleUZpZWxkc0NoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYVHJlZVZpZXdzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbU9wZW5pbmc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbUNsaWNrOiBFdmVudEVtaXR0ZXI8QVhUcmVlVmlld0l0ZW1DbGljaz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYVHJlZVZpZXdJdGVtQ2xpY2s+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbUNsb3Npbmc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbURyYWc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbU1vdmVkOiBFdmVudEVtaXR0ZXI8QVhUcmVlVmlld0l0ZW1Nb3ZlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhUcmVlVmlld0l0ZW1Nb3ZlZEV2ZW50PigpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNlbGVjdGFibGVGaWVsZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uQ29udGV4dE1lbnVJdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxBWENvbnRleHRNZW51SXRlbUNsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWENvbnRleHRNZW51SXRlbUNsaWNrRXZlbnQ+KCk7XHJcblxyXG4gIHNob3dTZWxlY3RCb3g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdDogYW55W10gPSBbXTtcclxuICBpdGVtUm93OiBhbnk7XHJcbiAgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZFBhcmVudHM6IGFueVtdID0gW107XHJcbiAgbG9hZEFsbENoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdExvYWQ6IGFueVtdID0gW107XHJcbiAgaXRlbURyb3A6IGFueTtcclxuICBpdGVtRHJhZzogYW55O1xyXG4gIHZhbGlkRHJvcDogYm9vbGVhbiA9IHRydWU7XHJcbiAgbG9ja2VkRHJhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoaWxkRmllbGQ6IHN0cmluZyA9ICdjaGlsZGVyZW4nO1xyXG4gIHNob3dDb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU2VsZWN0ZWRJdGVtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbG9jZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGNvbnRleHRNZW51SXRlbXM6IEFYTWVudUl0ZW1bXSB8IEFYQ29udGV4dE1lbnVQcm9taXNlRnVuY3Rpb24gfCBBWENvbnRleHRNZW51RnVuY3Rpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT25Db250ZXh0TWVudUl0ZW0oZTogQVhDb250ZXh0TWVudUl0ZW1DbGlja0V2ZW50KSB7XHJcbiAgICB0aGlzLm9uQ29udGV4dE1lbnVJdGVtQ2xpY2suZW1pdChlKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgIHRoaXMuX2NvbnRlbnREYXRhU291cmNlLmZldGNoKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgaW50ZXJuYWxTZWxlY3RJdGVtKGl0ZW0sIHVzZXJDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAoaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSBmYWxzZSB8fCB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ID0gIWl0ZW0uc2VsZWN0O1xyXG4gICAgICBpZiAoaXRlbS5wYXJlbnROb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScgJiYgdGhpcy5jaGVja1BhcmVudHMgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlUGFyZW50U2VsZWN0KGl0ZW0ucGFyZW50Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW0uc2VsZWN0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIGUuc2VsZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBpdGVtW3RoaXMua2V5RmllbGRdKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbS5zZWxlY3QgPSAhaXRlbS5zZWxlY3Q7XHJcblxyXG4gICAgICBpZiAoaXRlbS5wYXJlbnROb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJyAmJiB0aGlzLmNoZWNrUGFyZW50cyA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VQYXJlbnRTZWxlY3QoaXRlbS5wYXJlbnROb2RlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlwbGUnICYmIHRoaXMuY2hlY2tDaGlsZHMgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQ2hpbGRTZWxlY3QoaXRlbSwgaXRlbS5zZWxlY3QpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbS5zZWxlY3QgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZScpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzID0gdGhpcy5zZWxlY3RlZFBhcmVudHMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBpdGVtW3RoaXMua2V5RmllbGRdKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgZS5zZWxlY3QgPSBmYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzID0gdGhpcy5zZWxlY3RlZFBhcmVudHMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBpdGVtW3RoaXMua2V5RmllbGRdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHVzZXJDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5tYWtlTm9kZShpdGVtKSxcclxuICAgICAgICBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZU5vZGUoaXRlbSwgYWRkQ2hpbGRyZW46IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBub2RlOiBBWFRyZWVWaWV3Tm9kZSA9IG5ldyBBWFRyZWVWaWV3Tm9kZSgpO1xyXG4gICAgaWYgKGFkZENoaWxkcmVuKSB7XHJcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBpdGVtW3RoaXMuY2hpbGRGaWVsZF0gPT09IHVuZGVmaW5lZCA/IFtdIDogaXRlbVt0aGlzLmNoaWxkRmllbGRdPy5tYXAoKG0pID0+IHRoaXMubWFrZU5vZGUobSkpO1xyXG4gICAgfVxyXG4gICAgbm9kZS5pdGVtRGF0YS5kaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWUgPyBpdGVtLmRpc2FibGVkIDogZmFsc2U7XHJcbiAgICBub2RlLml0ZW1EYXRhLm9wZW4gPSBpdGVtLm9wZW4gPT09IHRydWUgPyBpdGVtLm9wZW4gOiBmYWxzZTtcclxuICAgIG5vZGUuaXRlbURhdGEua2V5ID0gaXRlbVt0aGlzLmtleUZpZWxkXTtcclxuXHJcbiAgICBjb25zdCBjID0gW107XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBmb3IgKHZhciBrIGluIGl0ZW0pIHtcclxuICAgICAgaSA9IGkgKyAxO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgayAhPSAnc2VsZWN0JyAmJlxyXG4gICAgICAgIGsgIT0gJ2hhc0NoaWxkJyAmJlxyXG4gICAgICAgIGsgIT0gJ2xvYWRpbmcnICYmXHJcbiAgICAgICAgayAhPSAncmVxdWVzdElkJyAmJlxyXG4gICAgICAgIGsgIT0gJ2Rpc2FibGVkJyAmJlxyXG4gICAgICAgIGsgIT0gJ29wZW4nICYmXHJcbiAgICAgICAgayAhPSAncGFyZW50Tm9kZScgJiZcclxuICAgICAgICBrICE9ICd0b2dnbGUnICYmXHJcbiAgICAgICAgayAhPSAnbG9hZGVkJyAmJlxyXG4gICAgICAgIGsgIT0gJ2luZGV0ZXJtaW5hdGUnICYmXHJcbiAgICAgICAgayAhPSB0aGlzLmNoaWxkRmllbGRcclxuICAgICAgKSB7XHJcbiAgICAgICAgLy9jLnB1c2goeyBrOiBpdGVtW2tdIH0pO1xyXG4gICAgICAgIGNba10gPSBpdGVtW2tdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbm9kZS5pdGVtRGF0YS5pdGVtID0gYzsgLy9UTyBET1xyXG4gICAgbm9kZS5pdGVtRGF0YS5zZWxlY3RlZCA9IGl0ZW0uc2VsZWN0ID09PSB0cnVlID8gaXRlbS5zZWxlY3QgOiBmYWxzZTtcclxuICAgIG5vZGUuaXRlbURhdGEuaW5kZXRlcm1pbmF0ZSA9IGl0ZW0uc2VsZWN0ID09PSBudWxsID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgbm9kZS5pdGVtRGF0YS5oYXNDaGlsZCA9IGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXTtcclxuICAgIG5vZGUucGFyZW50ID0gaXRlbS5wYXJlbnROb2RlID09PSB1bmRlZmluZWQgPyBudWxsIDogdGhpcy5tYWtlTm9kZShpdGVtLnBhcmVudE5vZGUsIGZhbHNlKTtcclxuICAgIGlmIChub2RlLnBhcmVudCAhPSBudWxsKSB7XHJcbiAgICAgIChub2RlLnBhcmVudCBhcyBhbnkpLnNlbGVjdFBhcmVudCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5wYXJlbnROb2RlWydzZWxlY3QnXSAhPSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShpdGVtLnBhcmVudE5vZGUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgKG5vZGUucGFyZW50IGFzIGFueSkudW5TZWxlY3RQYXJlbnQgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ucGFyZW50Tm9kZVsnc2VsZWN0J10gPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbS5wYXJlbnROb2RlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZS5jaGlsZHJlbiAhPSBudWxsICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAobm9kZS5jaGlsZHJlbiBhcyBhbnkpLnNlbGVjdENoaWxkcyA9ICgpID0+IHtcclxuICAgICAgICBpdGVtLmNoaWxkZXJlbi5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudFsnc2VsZWN0J10gIT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShlbGVtZW50LCB0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgKG5vZGUuY2hpbGRyZW4gYXMgYW55KS51blNlbGVjdENoaWxkcyA9ICgpID0+IHtcclxuICAgICAgICBpdGVtLmNoaWxkZXJlbi5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudFsnc2VsZWN0J10gPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShlbGVtZW50LCB0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBub2RlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VDaGlsZFNlbGVjdChpdGVtLCBzKSB7XHJcbiAgICAvLyBpZiAodGhpcy5zZWxlY3ROb2Rlc1JlY3Vyc2l2ZSA9PSAnYWxsJyB8fCB0aGlzLnNlbGVjdE5vZGVzUmVjdXJzaXZlID09ICdjaGlsZHMnKSB7XHJcbiAgICBpZiAodGhpcy5jaGVja0NoaWxkcyA9PSB0cnVlKSB7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ID0gcztcclxuICAgICAgaWYgKGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSAmJiBpdGVtW3RoaXMuY2hpbGRGaWVsZF0gJiYgaXRlbVt0aGlzLmNoaWxkRmllbGRdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpdGVtW3RoaXMuY2hpbGRGaWVsZF0uZm9yRWFjaCgoZWxtKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxtW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT09IHRydWUpIHtcclxuICAgICAgICAgICAgZWxtLnNlbGVjdCA9IHM7XHJcblxyXG4gICAgICAgICAgICBpZiAocyA9PT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSB0aGlzLnNlbGVjdGVkUGFyZW50cy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGVsbVt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMucHVzaChlbG0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSB0aGlzLnNlbGVjdGVkUGFyZW50cy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGVsbVt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VDaGlsZFNlbGVjdChlbG0sIHMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZWxtLnNlbGVjdCA9IHM7XHJcbiAgICAgICAgICAgIGlmIChzID09PSB0cnVlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBlbG1bdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGVsbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHMgPT09IGZhbHNlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBlbG1bdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXRlbS5zZWxlY3QgPSBzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoYW5nZVBhcmVudFNlbGVjdChpdGVtKSB7XHJcbiAgICAvL2lmICh0aGlzLnNlbGVjdE5vZGVzUmVjdXJzaXZlID09ICdhbGwnIHx8IHRoaXMuc2VsZWN0Tm9kZXNSZWN1cnNpdmUgPT0gJ3BhcmVudHMnKSB7XHJcbiAgICBpZiAodGhpcy5jaGVja1BhcmVudHMpIHtcclxuICAgICAgbGV0IGFsbHNlbGVjdCA9IHRydWU7XHJcbiAgICAgIGxldCBhbGxkZXNlbGVjdCA9IHRydWU7XHJcbiAgICAgIGxldCBvbmVzZWxlY3QgPSBmYWxzZTtcclxuICAgICAgbGV0IGlzaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKGl0ZW1bdGhpcy5jaGlsZEZpZWxkXSkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtW3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVt0aGlzLmNoaWxkRmllbGRdW2luZGV4XS5zZWxlY3QgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgYWxsZGVzZWxlY3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgb25lc2VsZWN0ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtW3RoaXMuY2hpbGRGaWVsZF1baW5kZXhdLnNlbGVjdCA9PT0gZmFsc2UgfHwgaXRlbVt0aGlzLmNoaWxkRmllbGRdW2luZGV4XS5zZWxlY3QgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBhbGxzZWxlY3QgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtW3RoaXMuY2hpbGRGaWVsZF1baW5kZXhdLnNlbGVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpc2luZGV0ZXJtaW5hdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICBhbGxkZXNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBvbmVzZWxlY3QgPSB0cnVlO1xyXG4gICAgICAgICAgICBhbGxzZWxlY3QgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChvbmVzZWxlY3QgfHwgKGlzaW5kZXRlcm1pbmF0ZSAmJiAhYWxsc2VsZWN0KSkge1xyXG4gICAgICAgIGl0ZW0uc2VsZWN0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cyA9IHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPT0gaXRlbVt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYWxsc2VsZWN0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgaXRlbS5zZWxlY3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzID0gdGhpcy5zZWxlY3RlZFBhcmVudHMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBpdGVtW3RoaXMua2V5RmllbGRdKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhbGxkZXNlbGVjdCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzID0gdGhpcy5zZWxlY3RlZFBhcmVudHMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBpdGVtW3RoaXMua2V5RmllbGRdKTtcclxuICAgICAgICBpdGVtLnNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnBhcmVudE5vZGUgJiYgaXRlbS5wYXJlbnROb2RlW3RoaXMuY2hpbGRGaWVsZF0gJiYgaXRlbS5wYXJlbnROb2RlW3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlUGFyZW50U2VsZWN0KGl0ZW0ucGFyZW50Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkl0ZW1DbGljay5zdWJzY3JpYmUoKGRhdGE6IEFYVHJlZVZpZXdJdGVtQ2xpY2spID0+IHtcclxuICAgICAgaWYgKCFkYXRhLmNhbmNlbCkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlTm9kZShkYXRhLml0ZW0sIGRhdGEuZmxhZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXRlbWRiQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbSkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICB0aGlzLmhhbmRsZU9uTm9kZUNsaWNrKGUsIGl0ZW0sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlT25Ob2RlQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbSwgZmxhZyA9IGZhbHNlKSB7XHJcbiAgICAvLyAgdGhpcy5pbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbSk7XHJcbiAgICB0aGlzLm9uSXRlbUNsaWNrLmVtaXQoe1xyXG4gICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgIGh0bWxFdmVudDogZSxcclxuICAgICAgaXRlbSxcclxuICAgICAgZmxhZ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBub2RlQ2xpY2soaXRlbSkge1xyXG4gICAgaWYgKGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlTm9kZShpdGVtLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxTZWxlY3RJdGVtKGl0ZW0sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTm9kZShpdGVtLCBmbGFnID0gZmFsc2UpIHtcclxuICAgIC8vaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSBmYWxzZSAmJlxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScgJiYgIWZsYWcpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTGV2ZWwgPT0gJ25vZGVzJyAmJiBpdGVtLmhhc0NoaWxkID09IHRydWUpIHtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbS50b2dnbGUgPSAhaXRlbS50b2dnbGU7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTGV2ZWwgPT0gJ25vZGVzJyAmJiBpdGVtLmhhc0NoaWxkID09IHRydWUpIHtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSB0cnVlICYmIGl0ZW0ubG9hZGVkICE9PSB0cnVlICYmIHRoaXMubGF6eUxvYWRpbmcpIHtcclxuICAgICAgICB0aGlzLml0ZW1Sb3cgPSBpdGVtO1xyXG4gICAgICAgIGNvbnN0IHVpZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCk7XHJcbiAgICAgICAgaXRlbS5yZXF1ZXN0SWQgPSB1aWQ7XHJcbiAgICAgICAgdGhpcy5saXN0TG9hZC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuX2NvbnRlbnREYXRhU291cmNlLmZldGNoKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcodGhpcy5pdGVtUm93KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbS50b2dnbGUgJiYgaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSB0cnVlKSB7XHJcbiAgICAgICAgaXRlbS5vcGVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uSXRlbU9wZW5pbmcuZW1pdCh0aGlzLm1ha2VOb2RlKGl0ZW0pKTtcclxuICAgICAgfSBlbHNlIGlmICghaXRlbS50b2dnbGUgJiYgaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSB0cnVlKSB7XHJcbiAgICAgICAgaXRlbS5vcGVuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1DbG9zaW5nLmVtaXQodGhpcy5tYWtlTm9kZShpdGVtKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBsZXZlbENvdW50OiBudW1iZXIgPSAwO1xyXG4gIGdldExldmVsKGl0ZW0pIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGRlYnVnZ2VyXHJcbiAgICAgIGlmIChpdGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICB0aGlzLmxldmVsQ291bnQgPSB0aGlzLmxldmVsQ291bnQgKyAxO1xyXG4gICAgICAgIHRoaXMuZ2V0TGV2ZWwoaXRlbS5wYXJlbnROb2RlKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgIHJlc29sdmUodGhpcy5sZXZlbENvdW50KTtcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGV2ZWxDb3VudCA9IHRoaXMubGV2ZWxDb3VudCArIDE7XHJcbiAgICAgICAgcmVzb2x2ZSh0aGlzLmxldmVsQ291bnQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbnRlbnREYXRhU291cmNlLmZldGNoKG51bGwpO1xyXG4gICAgdGhpcy5fY29udGVudERhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQuc3Vic2NyaWJlKChfZGF0YSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5saXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuaGlkZUxvYWRpbmcobnVsbCk7XHJcbiAgICAgICAgdGhpcy5saXN0ID0gX2RhdGEuZGF0YS5yZXN1bHQ7XHJcblxyXG4gICAgICAgIHRoaXMubGlzdC5mb3JFYWNoKChlbCkgPT4ge1xyXG4gICAgICAgICAgZWwuZGlzYWJsZWRDaGVja0JveCA9IHRoaXMuc2VsZWN0YWJsZUZpZWxkICE9ICcnID8gKGVsW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA/IGVsW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA6IGZhbHNlKSA6IGZhbHNlO1xyXG4gICAgICAgICAgZWwuc2VsZWN0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTGV2ZWwgPT0gJ25vZGVzJyAmJiBlbFt0aGlzLmhhc0NoaWxkRmllbGRdID09IHRydWUpIHtcclxuICAgICAgICAgICAgZWwuZGlzYWJsZWRDaGVja0JveCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTGV2ZWwgPT0gJ3BhcmVudHMnICYmIGVsW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZWwuZGlzYWJsZWRDaGVja0JveCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxldGVkS2V5RmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxldGVkS2V5RmllbGRzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChuLmluY2x1ZGVzKGVsW3RoaXMua2V5RmllbGRdKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoKCh0aGlzLmNoZWNrUGFyZW50cyA9PSBmYWxzZSAmJiB0aGlzLmNoZWNrQ2hpbGRzID09IGZhbHNlKSB8fCB0aGlzLmNoZWNrQ2hpbGRzID09IGZhbHNlKSAmJiBuLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9zZWxlY3QgcGFyZW50IHdoZW4gY2hlY2sgY2hpbGQgYW5kIGNoZWNrIHBhcmVudCBpcyBmYWxzZSBUT0RPIGNoZWNrIHRoaXMgQWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGVsKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oZWwpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGVsKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGVkSXRlbSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEZpZWxkTmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbFt0aGlzLmhhc0NoaWxkRmllbGRdID09IHRydWUgJiYgZWxbdGhpcy5zZWxlY3RlZEZpZWxkTmFtZV0gPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIGlmICgodGhpcy5jaGVja1BhcmVudHMgPT0gZmFsc2UgJiYgdGhpcy5jaGVja0NoaWxkcyA9PSBmYWxzZSkgfHwgdGhpcy5jaGVja0NoaWxkcyA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgLy9zZWxlY3QgcGFyZW50IHdoZW4gY2hlY2sgY2hpbGQgYW5kIGNoZWNrIHBhcmVudCBpcyBmYWxzZSBUT0RPIGNoZWNrIHRoaXMgQWN0aW9uXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oZWwpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLm9wZW4oZWwpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsW3RoaXMuc2VsZWN0ZWRGaWVsZE5hbWVdID09IHRydWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oZWwpO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RlZEl0ZW0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pdGVtUm93ID0gdGhpcy5saXN0TG9hZC5maWx0ZXIoKGMpID0+IGMucmVxdWVzdElkID09PSBfZGF0YS5kYXRhLnJlcXVlc3RJZClbMF07XHJcbiAgICAgICAgdGhpcy5saXN0TG9hZCA9IHRoaXMubGlzdExvYWQuZmlsdGVyKChjKSA9PiBjLnJlcXVlc3RJZCAhPT0gX2RhdGEuZGF0YS5yZXF1ZXN0SWQpO1xyXG4gICAgICAgIHRoaXMuaXRlbVJvdy5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1Sb3cgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlTG9hZGluZyh0aGlzLml0ZW1Sb3cpO1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gX2RhdGEuZGF0YS5yZXN1bHQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMubGlzdC5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbVJvd1t0aGlzLmNoaWxkRmllbGRdICYmIHRoaXMuaXRlbVJvd1t0aGlzLmNoaWxkRmllbGRdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICByZXN1bHQuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLmRpc2FibGVkQ2hlY2tCb3ggPSB0aGlzLnNlbGVjdGFibGVGaWVsZCAhPSAnJyA/IChlbFt0aGlzLnNlbGVjdGFibGVGaWVsZF0gPyBlbFt0aGlzLnNlbGVjdGFibGVGaWVsZF0gOiBmYWxzZSkgOiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGVsLmRpc2FibGVkQ2hlY2tCb3ggPSB0aGlzLnNlbGVjdGFibGVGaWVsZCAhPSAnJyA/IGVsW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtUm93W3RoaXMuY2hpbGRGaWVsZF1bdGhpcy5pdGVtUm93W3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoXSA9IGVsO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbVJvd1t0aGlzLmNoaWxkRmllbGRdID0gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIHJlc3VsdFtpXS5kaXNhYmxlZENoZWNrQm94ID1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUZpZWxkICE9ICcnID8gKHJlc3VsdFtpXVt0aGlzLnNlbGVjdGFibGVGaWVsZF0gPyByZXN1bHRbaV1bdGhpcy5zZWxlY3RhYmxlRmllbGRdIDogZmFsc2UpIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkxldmVsID09ICdub2RlcycgJiYgcmVzdWx0W2ldW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldLmRpc2FibGVkQ2hlY2tCb3ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25MZXZlbCA9PSAncGFyZW50cycgJiYgcmVzdWx0W2ldW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtpXS5kaXNhYmxlZENoZWNrQm94ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScgJiYgKHRoaXMuc2VsZWN0Tm9kZXNSZWN1cnNpdmUgPT0gJ2FsbCcgfHwgdGhpcy5zZWxlY3ROb2Rlc1JlY3Vyc2l2ZSA9PSAnY2hpbGRzJykpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJyAmJiB0aGlzLmNoZWNrQ2hpbGRzID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtpXS5zZWxlY3QgPSB0aGlzLml0ZW1Sb3cuc2VsZWN0ID09PSAodW5kZWZpbmVkIHx8IG51bGwpID8gZmFsc2UgOiB0aGlzLml0ZW1Sb3cuc2VsZWN0O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1Sb3cuc2VsZWN0ID09PSB0cnVlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PSAnbXVsdGlwbGUnICYmIHJlc3VsdFtpXVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSByZXN1bHRbaV1bdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChyZXN1bHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLml0ZW1Sb3cuc2VsZWN0ID09PSB0cnVlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PSAnbXVsdGlwbGUnICYmIHJlc3VsdFtpXVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzID0gdGhpcy5zZWxlY3RlZFBhcmVudHMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSByZXN1bHRbaV1bdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cy5wdXNoKHJlc3VsdFtpXSlcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtpXS5zZWxlY3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmVzdWx0W2ldLnBhcmVudE5vZGUgPSB0aGlzLml0ZW1Sb3c7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGV0ZWRLZXlGaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxldGVkS2V5RmllbGRzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAobi5pbmNsdWRlcyhyZXN1bHRbaV1bdGhpcy5rZXlGaWVsZF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpXVt0aGlzLmhhc0NoaWxkRmllbGRdID09IHRydWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsQ291bnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZGVidWdnZXJcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGV2ZWwocmVzdWx0W2ldKS50aGVuKChyZXNMZXZlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja1BhcmVudHMgPT0gZmFsc2UgJiYgdGhpcy5jaGVja0NoaWxkcyA9PSBmYWxzZSAmJiBuLmxlbmd0aCA9PSB0aGlzLmxldmVsQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NlbGVjdCBwYXJlbnQgd2hlbiBjaGVjayBjaGlsZCBhbmQgY2hlY2sgcGFyZW50IGlzIGZhbHNlIFRPRE8gY2hlY2sgdGhpcyBBY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0ocmVzdWx0W2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKHJlc3VsdFtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShyZXN1bHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGVkSXRlbSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRGaWVsZE5hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpXVt0aGlzLmhhc0NoaWxkRmllbGRdID09IHRydWUgJiYgcmVzdWx0W2ldW3RoaXMuc2VsZWN0ZWRGaWVsZE5hbWVdID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tQYXJlbnRzID09IGZhbHNlICYmIHRoaXMuY2hlY2tDaGlsZHMgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL3NlbGVjdCBwYXJlbnQgd2hlbiBjaGVjayBjaGlsZCBhbmQgY2hlY2sgcGFyZW50IGlzIGZhbHNlIFRPRE8gY2hlY2sgdGhpcyBBY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0ocmVzdWx0W2ldKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9wZW4ocmVzdWx0W2ldKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0W2ldW3RoaXMuc2VsZWN0ZWRGaWVsZE5hbWVdID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKHJlc3VsdFtpXSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RlZEl0ZW0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLml0ZW1Sb3cubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRJdGVtID09IHRydWUgJiYgIXRoaXMubG9jZWQpIHtcclxuICAgICAgICB0aGlzLmxvY2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlbGV0ZWRLZXlGaWVsZHNDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgICAgLy8gdmFsdWU6IHRoaXMubWFrZU5vZGUoaXRlbSksXHJcbiAgICAgICAgICBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIHRoaXMuc2hvd1NlbGVjdEJveCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBvbkl0ZW1DbGljayhlLCB2KSB7XHJcblxyXG4gIC8vIH1cclxuXHJcbiAgb25EcmFnU3RhcnQoZTogRXZlbnQsIHYpIHtcclxuICAgIGlmICghdGhpcy5sb2NrZWREcmFnKSB7XHJcbiAgICAgIHRoaXMuaXRlbURyYWcgPSB2O1xyXG4gICAgICB0aGlzLm9uSXRlbURyYWcuZW1pdCh2KTtcclxuICAgIH1cclxuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbmQoZSwgdikge1xyXG4gICAgaWYgKCF0aGlzLmxvY2tlZERyYWcpIHtcclxuICAgICAgdGhpcy5pdGVtRHJvcCA9IHY7XHJcbiAgICB9XHJcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgZHJvcChlKSB7XHJcbiAgICAvLyAgdGhpcy5vbkl0ZW1Ecm9wLmVtaXQodGhpcy5pdGVtRHJvcCk7XHJcbiAgICBpZiAoIXRoaXMubG9ja2VkRHJhZykge1xyXG4gICAgICB0aGlzLnZhbGlkRHJvcCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2FtZUNoaWxkZSh0aGlzLml0ZW1EcmFnLCB0aGlzLml0ZW1Ecm9wKTtcclxuICAgICAgaWYgKHRoaXMudmFsaWREcm9wICYmIHRoaXMuaXRlbURyYWdbdGhpcy5rZXlGaWVsZF0gIT09IHRoaXMuaXRlbURyb3BbdGhpcy5rZXlGaWVsZF0gJiYgdGhpcy5pdGVtRHJhZy5wYXJlbnROb2RlICE9PSB0aGlzLml0ZW1Ecm9wKSB7XHJcbiAgICAgICAgY29uc3QgbW92ZWRFdmVudDogQVhUcmVlVmlld0l0ZW1Nb3ZlZEV2ZW50ID0gbmV3IEFYVHJlZVZpZXdJdGVtTW92ZWRFdmVudCgpO1xyXG4gICAgICAgIG1vdmVkRXZlbnQuc291cmNlID0gdGhpcy5tYWtlTm9kZSh0aGlzLml0ZW1EcmFnKTtcclxuICAgICAgICBtb3ZlZEV2ZW50LnRhcmdldCA9IHRoaXMubWFrZU5vZGUodGhpcy5pdGVtRHJvcCk7XHJcbiAgICAgICAgdGhpcy5sb2NrZWREcmFnID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dMb2FkaW5nKHRoaXMuaXRlbURyYWcpO1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcodGhpcy5pdGVtRHJvcCk7XHJcbiAgICAgICAgbW92ZWRFdmVudC5yZXNvbHZlID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVMb2FkaW5nKHRoaXMuaXRlbURyYWcpO1xyXG4gICAgICAgICAgdGhpcy5oaWRlTG9hZGluZyh0aGlzLml0ZW1Ecm9wKTtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdEcm9wSXRlbSh0aGlzLml0ZW1EcmFnLCB0aGlzLml0ZW1Ecm9wKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9ja2VkRHJhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1Nb3ZlZC5lbWl0KG1vdmVkRXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHNhbWVDaGlsZGUocGFyZW50LCBjaGlsZCkge1xyXG4gICAgaWYgKHBhcmVudFt0aGlzLmNoaWxkRmllbGRdICYmIHBhcmVudFt0aGlzLmNoaWxkRmllbGRdLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBhcmVudFt0aGlzLmNoaWxkRmllbGRdLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGlmIChwYXJlbnRbdGhpcy5jaGlsZEZpZWxkXVtpbmRleF1bdGhpcy5rZXlGaWVsZF0gPT0gY2hpbGRbdGhpcy5rZXlGaWVsZF0pIHtcclxuICAgICAgICAgIHRoaXMudmFsaWREcm9wID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnRbdGhpcy5jaGlsZEZpZWxkXVtpbmRleF1bdGhpcy5jaGlsZEZpZWxkXSAmJiBwYXJlbnRbdGhpcy5jaGlsZEZpZWxkXVtpbmRleF1bdGhpcy5jaGlsZEZpZWxkXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNhbWVDaGlsZGUocGFyZW50W3RoaXMuY2hpbGRGaWVsZF1baW5kZXhdLCBjaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHBhcmVudFt0aGlzLmtleUZpZWxkXSA9PSBjaGlsZFt0aGlzLmtleUZpZWxkXSkge1xyXG4gICAgICB0aGlzLnZhbGlkRHJvcCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJhZ0Ryb3BJdGVtKGl0ZW1DaGlsZCwgaXRlbVBhcmVudCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTGV2ZWwgPT0gJ25vZGVzJykge1xyXG4gICAgICBpdGVtUGFyZW50LmRpc2FibGVkQ2hlY2tCb3ggPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtQ2hpbGQucGFyZW50Tm9kZSkge1xyXG4gICAgICBpdGVtQ2hpbGQucGFyZW50Tm9kZVt0aGlzLmNoaWxkRmllbGRdID0gaXRlbUNoaWxkLnBhcmVudE5vZGVbdGhpcy5jaGlsZEZpZWxkXS5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGl0ZW1DaGlsZFt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBpdGVtQ2hpbGRbdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgfVxyXG4gICAgaXRlbUNoaWxkLnBhcmVudE5vZGUgPSBpdGVtUGFyZW50O1xyXG4gICAgaWYgKGl0ZW1QYXJlbnRbdGhpcy5jaGlsZEZpZWxkXSAmJiBpdGVtUGFyZW50W3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpdGVtUGFyZW50W3RoaXMuY2hpbGRGaWVsZF1baXRlbVBhcmVudFt0aGlzLmNoaWxkRmllbGRdLmxlbmd0aF0gPSBpdGVtQ2hpbGQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtUGFyZW50W3RoaXMuY2hpbGRGaWVsZF0gPSBbXTtcclxuICAgICAgaXRlbVBhcmVudFt0aGlzLmNoaWxkRmllbGRdWzBdID0gaXRlbUNoaWxkO1xyXG4gICAgICBpZiAoaXRlbVBhcmVudFt0aGlzLmhhc0NoaWxkRmllbGRdID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVOb2RlKGl0ZW1QYXJlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGl0ZW1QYXJlbnQudG9nZ2xlID0gIWl0ZW1QYXJlbnQudG9nZ2xlO1xyXG4gICAgICAgIGl0ZW1QYXJlbnQubG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpdGVtUGFyZW50W3RoaXMuaGFzQ2hpbGRGaWVsZF0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW1DaGlsZC5wYXJlbnROb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VQYXJlbnRTZWxlY3QoaXRlbUNoaWxkLnBhcmVudE5vZGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2NrZWREcmFnID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RDaGFuZ2UoZmllbGQsIHZhbHVlKSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5saXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICB0aGlzLmNoYW5nZUNoaWxlZCh0aGlzLmxpc3RbaW5kZXhdLCBmaWVsZCwgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkQWxsQ2hpbGRyZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlQ2hpbGVkKGl0ZW0sIGZpZWxkLCB2YWx1ZSkge1xyXG4gICAgaWYgKGZpZWxkID09PSAndG9nZ2xlJyAmJiAoaXRlbS5sb2FkZWQgPT09IGZhbHNlIHx8IGl0ZW0ubG9hZGVkID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgIGlmICh0aGlzLmxvYWRBbGxDaGlsZHJlbiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlTm9kZShpdGVtKTtcclxuICAgICAgICBpdGVtW2ZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtW2ZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICBpZiAoZmllbGQgPT09ICdzZWxlY3QnICYmIGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gZmFsc2UgJiYgdmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmllbGQgPT09ICdzZWxlY3QnICYmIGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChmaWVsZCA9PT0gJ3NlbGVjdCcpIHtcclxuICAgICAgaXRlbS5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSB0cnVlICYmIGl0ZW1bdGhpcy5jaGlsZEZpZWxkXSAmJiBpdGVtW3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpdGVtW3RoaXMuY2hpbGRGaWVsZF0uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQ2hpbGVkKGVsZW1lbnQsIGZpZWxkLCB2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93TG9hZGluZyhpdGVtKTogdm9pZCB7XHJcbiAgICBpdGVtLmxvYWRpbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoaWRlTG9hZGluZyhpdGVtKTogdm9pZCB7XHJcbiAgICBpZiAoaXRlbSAhPSBudWxsKSB7XHJcbiAgICAgIGl0ZW0ubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5BbGwobG9hZEFsbDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBpZiAobG9hZEFsbCkge1xyXG4gICAgLy8gdGhpcy5sb2FkQWxsQ2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5saXN0Q2hhbmdlKCd0b2dnbGUnLCB0cnVlKTtcclxuICAgIC8vfSBlbHNlIHtcclxuICAgIHRoaXMubGlzdENoYW5nZSgndG9nZ2xlJywgdHJ1ZSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0SXRlbShpdGVtKSB7XHJcbiAgICBpZiAoaXRlbVsnc2VsZWN0J10gIT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShpdGVtLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdW5TZWxlY3RJdGVtKGl0ZW0pIHtcclxuICAgIGlmIChpdGVtWydzZWxlY3QnXSA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxTZWxlY3RJdGVtKGl0ZW0sIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuKGl0ZW0pIHtcclxuICAgIGlmIChpdGVtWyd0b2dnbGUnXSAhPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnRvZ2dsZU5vZGUoaXRlbSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2Nyb2xJbnRvVmlldyhpdGVtKSB7XHJcbiAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGxpW2RhdGEtaWQ9JyR7aXRlbVt0aGlzLmtleUZpZWxkXX0nXWApO1xyXG4gICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlQWxsKCkge1xyXG4gICAgdGhpcy5saXN0Q2hhbmdlKCd0b2dnbGUnLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0QWxsKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcclxuICAgICAgdGhpcy5saXN0Q2hhbmdlKCdzZWxlY3QnLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1blNlbGVjdEFsbCgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIHRoaXMubGlzdENoYW5nZSgnc2VsZWN0JywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWROb2RlcygpOiBBWFRyZWVWaWV3Tm9kZVtdIHtcclxuICAgIGNvbnN0IHNlbGVjdEl0ZW1zTm9kZSA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgc2VsZWN0SXRlbXNOb2RlLnB1c2godGhpcy5tYWtlTm9kZShlKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzZWxlY3RJdGVtc05vZGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRQYXJlbnRzKCk6IEFYVHJlZVZpZXdOb2RlW10ge1xyXG4gICAgY29uc3Qgc2VsZWN0SXRlbXNQYXJlbnQgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgc2VsZWN0SXRlbXNQYXJlbnQucHVzaCh0aGlzLm1ha2VOb2RlKGUpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNlbGVjdEl0ZW1zUGFyZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyZW50c0lkKGl0ZW0pIHtcclxuICAgIGxldCBrZXlGaWVsZHMgPSBbXTtcclxuICAgIGtleUZpZWxkcy5wdXNoKGl0ZW1bdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgaWYgKGl0ZW0ucGFyZW50Tm9kZSkge1xyXG4gICAgICBrZXlGaWVsZHMucHVzaCguLi50aGlzLmdldFBhcmVudHNJZChpdGVtLnBhcmVudE5vZGUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXlGaWVsZHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRLZXlGaWVsZHMoKSB7XHJcbiAgICBsZXQga2V5RmllbGRzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCgoZWxtKSA9PiB7XHJcbiAgICAgIHZhciBJZHMgPSB0aGlzLmdldFBhcmVudHNJZChlbG0pO1xyXG4gICAgICBpZiAoSWRzKSB7XHJcbiAgICAgICAga2V5RmllbGRzLnB1c2goSWRzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4ga2V5RmllbGRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNlbGVjdGVkS2V5RmllbGRzUGFyZW50cygpIHtcclxuICAgIGxldCBrZXlGaWVsZHMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZvckVhY2goKGVsbSkgPT4ge1xyXG4gICAgICB2YXIgSWRzID0gdGhpcy5nZXRQYXJlbnRzSWQoZWxtKTtcclxuICAgICAgaWYgKElkcykge1xyXG4gICAgICAgIGtleUZpZWxkcy5wdXNoKElkcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGtleUZpZWxkcztcclxuICB9XHJcbn1cclxuIiwiPHVsIGNsYXNzPVwiYXggdHJlZXZpZXcge3tzaXplfX1cIj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjcmVjdXJzaXZlTGlzdCBsZXQtbGlzdD5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxpc3RcIj5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwiYWN0aXZlIHt7aXRlbVtoYXNDaGlsZEZpZWxkXSA/ICcnOidub2RlJ319XCIgW2NsYXNzLmJvcmRlcmVkXT1cImJvcmRlcmVkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpdGVtLnNlbGVjdFwiIFtkcmFnZ2FibGVdPVwiYWxsb3dEcmFnXCIgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtaWRdPVwiaXRlbVtrZXlGaWVsZF1cIiAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0VuZCgkZXZlbnQsaXRlbSlcIiAoZHJhZ2VuZCk9ZHJvcCgkZXZlbnQpPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBheENvbnRleHRNZW51IFtjb250ZXh0RGF0YUl0ZW1dPVwiaXRlbVwiIFtjb250ZXh0TWVudUl0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIiBbY29udGV4dE1lbnVdPVwibWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ29udGV4dE1lbnVJdGVtQ2xpY2spPVwiaGFuZGxlT25Db250ZXh0TWVudUl0ZW0oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBjdXJzb3I6IHBvaW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhcnQtc2lkZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbVtoYXNDaGlsZEZpZWxkXVwiIGNsYXNzPVwiY29sbGFwc2UtaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT25Ob2RlQ2xpY2soJGV2ZW50LGl0ZW0sdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZhLW1pbnVzJzogISFpdGVtLnRvZ2dsZSAsICdmYS1wbHVzJzogIWl0ZW0udG9nZ2xlICwgJ2ZhLXNwaW5uZXIgZmEtc3Bpbic6aXRlbS5sb2FkaW5nIH1cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWNoZWNrLWJveCAqbmdJZj1cInNob3dTZWxlY3RCb3hcIiBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZENoZWNrQm94XCIgW3NpemVdPVwic2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJ0cnVlXCIgW3ZhbHVlXT1cIml0ZW0uc2VsZWN0XCIgKG9uQ2xpY2spPVwiaW50ZXJuYWxTZWxlY3RJdGVtKGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtY2hlY2stYm94PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbGlzdFwiIChjbGljayk9XCJub2RlQ2xpY2soaXRlbSlcIiAoZGJsY2xpY2spPVwiaXRlbWRiQ2xpY2soJGV2ZW50LGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlVGVtcGxhdGU7IGVsc2UgZWxzZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZVRlbXBsYXRlOyBjb250ZXh0OnsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLnRpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHVsICpuZ0lmPVwiaXRlbS5sb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNoaWxkXCIgKm5nSWY9XCJpdGVtLnRvZ2dsZVwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVjdXJzaXZlTGlzdDsgY29udGV4dDp7ICRpbXBsaWNpdDogaXRlbS5jaGlsZGVyZW4gfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVjdXJzaXZlTGlzdDsgY29udGV4dDp7ICRpbXBsaWNpdDogbGlzdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbjwvdWw+XHJcblxyXG48YXgtY29udGV4dC1tZW51ICNtZW51PjwvYXgtY29udGV4dC1tZW51PiJdfQ==