tango-app-ui-analyse-trax 3.9.2 → 3.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/.eslintrc.json +37 -0
  2. package/ng-package.json +7 -0
  3. package/package.json +12 -25
  4. package/src/lib/components/action-centre/action-centre.component.html +607 -0
  5. package/src/lib/components/action-centre/action-centre.component.scss +185 -0
  6. package/src/lib/components/action-centre/action-centre.component.spec.ts +23 -0
  7. package/src/lib/components/action-centre/action-centre.component.ts +279 -0
  8. package/src/lib/components/activity-log/activity-log.component.html +84 -0
  9. package/src/lib/components/activity-log/activity-log.component.scss +33 -0
  10. package/src/lib/components/activity-log/activity-log.component.spec.ts +23 -0
  11. package/src/lib/components/activity-log/activity-log.component.ts +137 -0
  12. package/src/lib/components/activity-log-v2/activity-log-v2.component.html +189 -0
  13. package/src/lib/components/activity-log-v2/activity-log-v2.component.scss +162 -0
  14. package/src/lib/components/activity-log-v2/activity-log-v2.component.spec.ts +23 -0
  15. package/src/lib/components/activity-log-v2/activity-log-v2.component.ts +517 -0
  16. package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.html +19 -0
  17. package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.scss +148 -0
  18. package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.spec.ts +23 -0
  19. package/src/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.ts +141 -0
  20. package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.html +42 -0
  21. package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.scss +49 -0
  22. package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.spec.ts +23 -0
  23. package/src/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.ts +22 -0
  24. package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.html +724 -0
  25. package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.scss +217 -0
  26. package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.spec.ts +23 -0
  27. package/src/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.ts +122 -0
  28. package/src/lib/components/add-checklist/add-checklist.component.html +1459 -0
  29. package/src/lib/components/add-checklist/add-checklist.component.scss +1205 -0
  30. package/src/lib/components/add-checklist/add-checklist.component.spec.ts +23 -0
  31. package/src/lib/components/add-checklist/add-checklist.component.ts +2460 -0
  32. package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.html +207 -0
  33. package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.scss +213 -0
  34. package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.spec.ts +23 -0
  35. package/src/lib/components/add-checklist/checklist-popup/checklist-popup.component.ts +621 -0
  36. package/src/lib/components/add-checklist/counter/counter.component.html +43 -0
  37. package/src/lib/components/add-checklist/counter/counter.component.scss +49 -0
  38. package/src/lib/components/add-checklist/counter/counter.component.spec.ts +23 -0
  39. package/src/lib/components/add-checklist/counter/counter.component.ts +123 -0
  40. package/src/lib/components/add-multitask/add-multitask.component.html +705 -0
  41. package/src/lib/components/add-multitask/add-multitask.component.scss +296 -0
  42. package/src/lib/components/add-multitask/add-multitask.component.spec.ts +23 -0
  43. package/src/lib/components/add-multitask/add-multitask.component.ts +611 -0
  44. package/src/lib/components/add-multitask/ascending-validator.ts +13 -0
  45. package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.html +197 -0
  46. package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.scss +31 -0
  47. package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.spec.ts +23 -0
  48. package/src/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.ts +285 -0
  49. package/src/lib/components/add-multitask/create-task.data.ts +374 -0
  50. package/src/lib/components/add-multitask/create-task.interface.ts +177 -0
  51. package/src/lib/components/add-multitask/unique-string-validator.ts +13 -0
  52. package/src/lib/components/add-multitask/whitespace-validator.ts +11 -0
  53. package/src/lib/components/add-task/add-task.component.html +654 -0
  54. package/src/lib/components/add-task/add-task.component.scss +536 -0
  55. package/src/lib/components/add-task/add-task.component.spec.ts +23 -0
  56. package/src/lib/components/add-task/add-task.component.ts +569 -0
  57. package/src/lib/components/add-task/ascending-validator.ts +13 -0
  58. package/src/lib/components/add-task/create-task.data.ts +374 -0
  59. package/src/lib/components/add-task/create-task.interface.ts +192 -0
  60. package/src/lib/components/add-task/unique-string-validator.ts +13 -0
  61. package/src/lib/components/add-task/whitespace-validator.ts +11 -0
  62. package/src/lib/components/approval-popup/approval-popup.component.html +25 -0
  63. package/src/lib/components/approval-popup/approval-popup.component.scss +3 -0
  64. package/src/lib/components/approval-popup/approval-popup.component.spec.ts +23 -0
  65. package/src/lib/components/approval-popup/approval-popup.component.ts +26 -0
  66. package/src/lib/components/checklist/checklist.component.html +330 -0
  67. package/src/lib/components/checklist/checklist.component.scss +112 -0
  68. package/src/lib/components/checklist/checklist.component.spec.ts +23 -0
  69. package/src/lib/components/checklist/checklist.component.ts +344 -0
  70. package/src/lib/components/checklist-configure/assign/assign.component.html +665 -0
  71. package/src/lib/components/checklist-configure/assign/assign.component.scss +219 -0
  72. package/src/lib/components/checklist-configure/assign/assign.component.spec.ts +23 -0
  73. package/src/lib/components/checklist-configure/assign/assign.component.ts +932 -0
  74. package/src/lib/components/checklist-configure/checklist-configure.component.html +4340 -0
  75. package/src/lib/components/checklist-configure/checklist-configure.component.scss +2338 -0
  76. package/src/lib/components/checklist-configure/checklist-configure.component.spec.ts +23 -0
  77. package/src/lib/components/checklist-configure/checklist-configure.component.ts +4659 -0
  78. package/src/lib/components/checklistlayout/checklistlayout.component.html +30 -0
  79. package/src/lib/components/checklistlayout/checklistlayout.component.scss +15 -0
  80. package/src/lib/components/checklistlayout/checklistlayout.component.spec.ts +23 -0
  81. package/src/lib/components/checklistlayout/checklistlayout.component.ts +47 -0
  82. package/src/lib/components/chip-dropdown/chip-dropdown.component.html +36 -0
  83. package/src/lib/components/chip-dropdown/chip-dropdown.component.scss +97 -0
  84. package/src/lib/components/chip-dropdown/chip-dropdown.component.spec.ts +23 -0
  85. package/src/lib/components/chip-dropdown/chip-dropdown.component.ts +125 -0
  86. package/src/lib/components/create-task/create-task.component.html +2003 -0
  87. package/src/lib/components/create-task/create-task.component.scss +272 -0
  88. package/src/lib/components/create-task/create-task.component.spec.ts +23 -0
  89. package/src/lib/components/create-task/create-task.component.ts +614 -0
  90. package/src/lib/components/create-task/create-task.data.ts +372 -0
  91. package/src/lib/components/create-task/create-task.interface.ts +182 -0
  92. package/src/lib/components/create-task/validators/ascending-validator.ts +13 -0
  93. package/src/lib/components/create-task/validators/unique-string-validator.ts +13 -0
  94. package/src/lib/components/create-task/validators/whitespace-validator.ts +11 -0
  95. package/src/lib/components/custom-select/custom-select.component.html +44 -0
  96. package/src/lib/components/custom-select/custom-select.component.scss +144 -0
  97. package/src/lib/components/custom-select/custom-select.component.spec.ts +23 -0
  98. package/src/lib/components/custom-select/custom-select.component.ts +265 -0
  99. package/src/lib/components/dashboard/dashboard.component.html +1076 -0
  100. package/src/lib/components/dashboard/dashboard.component.scss +237 -0
  101. package/src/lib/components/dashboard/dashboard.component.spec.ts +23 -0
  102. package/src/lib/components/dashboard/dashboard.component.ts +539 -0
  103. package/src/lib/components/dashboard-info/dashboard-info.component.html +1420 -0
  104. package/src/lib/components/dashboard-info/dashboard-info.component.scss +409 -0
  105. package/src/lib/components/dashboard-info/dashboard-info.component.spec.ts +23 -0
  106. package/src/lib/components/dashboard-info/dashboard-info.component.ts +772 -0
  107. package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.html +110 -0
  108. package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.scss +260 -0
  109. package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.spec.ts +23 -0
  110. package/src/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.ts +143 -0
  111. package/src/lib/components/dashboard-layout/dashboard-layout.component.html +1 -0
  112. package/src/lib/components/dashboard-layout/dashboard-layout.component.scss +0 -0
  113. package/src/lib/components/dashboard-layout/dashboard-layout.component.spec.ts +23 -0
  114. package/src/lib/components/dashboard-layout/dashboard-layout.component.ts +10 -0
  115. package/src/lib/components/disabled-select/disabled-select.component.html +44 -0
  116. package/src/lib/components/disabled-select/disabled-select.component.scss +149 -0
  117. package/src/lib/components/disabled-select/disabled-select.component.spec.ts +23 -0
  118. package/src/lib/components/disabled-select/disabled-select.component.ts +146 -0
  119. package/src/lib/components/export-gallery/export-gallery.component.html +175 -0
  120. package/src/lib/components/export-gallery/export-gallery.component.scss +200 -0
  121. package/src/lib/components/export-gallery/export-gallery.component.spec.ts +23 -0
  122. package/src/lib/components/export-gallery/export-gallery.component.ts +263 -0
  123. package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.html +36 -0
  124. package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.scss +97 -0
  125. package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.spec.ts +23 -0
  126. package/src/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.ts +104 -0
  127. package/src/lib/components/eye-test-audit/custom-select/custom-select.component.html +44 -0
  128. package/src/lib/components/eye-test-audit/custom-select/custom-select.component.scss +144 -0
  129. package/src/lib/components/eye-test-audit/custom-select/custom-select.component.spec.ts +23 -0
  130. package/src/lib/components/eye-test-audit/custom-select/custom-select.component.ts +265 -0
  131. package/src/lib/components/eye-test-audit/eye-test/eye-test.component.html +1804 -0
  132. package/src/lib/components/eye-test-audit/eye-test/eye-test.component.scss +806 -0
  133. package/src/lib/components/eye-test-audit/eye-test/eye-test.component.spec.ts +23 -0
  134. package/src/lib/components/eye-test-audit/eye-test/eye-test.component.ts +1890 -0
  135. package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.html +25 -0
  136. package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.scss +0 -0
  137. package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.spec.ts +23 -0
  138. package/src/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.ts +20 -0
  139. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit-routing.module.ts +26 -0
  140. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.html +1 -0
  141. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.scss +0 -0
  142. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.spec.ts +23 -0
  143. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.ts +24 -0
  144. package/src/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.module.ts +44 -0
  145. package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.html +490 -0
  146. package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.scss +721 -0
  147. package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.spec.ts +23 -0
  148. package/src/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.ts +1017 -0
  149. package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.html +708 -0
  150. package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.scss +247 -0
  151. package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.spec.ts +23 -0
  152. package/src/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.ts +446 -0
  153. package/src/lib/components/eye-test-audit/group-select/group-select.component.html +44 -0
  154. package/src/lib/components/eye-test-audit/group-select/group-select.component.scss +144 -0
  155. package/src/lib/components/eye-test-audit/group-select/group-select.component.spec.ts +23 -0
  156. package/src/lib/components/eye-test-audit/group-select/group-select.component.ts +147 -0
  157. package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.html +18 -0
  158. package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.scss +49 -0
  159. package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.spec.ts +23 -0
  160. package/src/lib/components/eye-test-audit/reactive-select/reactive-select.component.ts +104 -0
  161. package/src/lib/components/eye-test-audit/select-drop/select-drop.component.html +44 -0
  162. package/src/lib/components/eye-test-audit/select-drop/select-drop.component.scss +144 -0
  163. package/src/lib/components/eye-test-audit/select-drop/select-drop.component.spec.ts +23 -0
  164. package/src/lib/components/eye-test-audit/select-drop/select-drop.component.ts +152 -0
  165. package/src/lib/components/eye-test-audit/services/eye-test-audit.service.spec.ts +16 -0
  166. package/src/lib/components/eye-test-audit/services/eye-test-audit.service.ts +190 -0
  167. package/src/lib/components/flag-layout/flag-layout.component.html +1 -0
  168. package/src/lib/components/flag-layout/flag-layout.component.scss +0 -0
  169. package/src/lib/components/flag-layout/flag-layout.component.spec.ts +23 -0
  170. package/src/lib/components/flag-layout/flag-layout.component.ts +10 -0
  171. package/src/lib/components/flags/flags.component.html +473 -0
  172. package/src/lib/components/flags/flags.component.scss +86 -0
  173. package/src/lib/components/flags/flags.component.spec.ts +23 -0
  174. package/src/lib/components/flags/flags.component.ts +280 -0
  175. package/{lib/components/flags/flags.interface.d.ts → src/lib/components/flags/flags.interface.ts} +73 -65
  176. package/src/lib/components/flags-info/flags-info.component.html +6012 -0
  177. package/src/lib/components/flags-info/flags-info.component.scss +278 -0
  178. package/src/lib/components/flags-info/flags-info.component.spec.ts +23 -0
  179. package/src/lib/components/flags-info/flags-info.component.ts +490 -0
  180. package/src/lib/components/flags-info/flags-info.interface.ts +441 -0
  181. package/src/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.html +1 -0
  182. package/src/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.scss +4 -0
  183. package/src/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.ts +78 -0
  184. package/src/lib/components/flags-new/flags-new.component.html +904 -0
  185. package/src/lib/components/flags-new/flags-new.component.scss +121 -0
  186. package/src/lib/components/flags-new/flags-new.component.spec.ts +23 -0
  187. package/src/lib/components/flags-new/flags-new.component.ts +357 -0
  188. package/{lib/components/flags-new/flags-new.interface.d.ts → src/lib/components/flags-new/flags-new.interface.ts} +90 -81
  189. package/src/lib/components/gallery/gallery.component.html +3660 -0
  190. package/src/lib/components/gallery/gallery.component.scss +930 -0
  191. package/src/lib/components/gallery/gallery.component.ts +3527 -0
  192. package/src/lib/components/group-select/group-select.component.html +44 -0
  193. package/src/lib/components/group-select/group-select.component.scss +144 -0
  194. package/src/lib/components/group-select/group-select.component.spec.ts +23 -0
  195. package/src/lib/components/group-select/group-select.component.ts +145 -0
  196. package/src/lib/components/image-popup/image-popup.component.html +11 -0
  197. package/src/lib/components/image-popup/image-popup.component.scss +5 -0
  198. package/src/lib/components/image-popup/image-popup.component.ts +18 -0
  199. package/src/lib/components/lib/custom-select/custom-select.component.html +42 -0
  200. package/src/lib/components/lib/custom-select/custom-select.component.scss +131 -0
  201. package/src/lib/components/lib/custom-select/custom-select.component.spec.ts +23 -0
  202. package/src/lib/components/lib/custom-select/custom-select.component.ts +151 -0
  203. package/src/lib/components/manage-task/manage-task.component.html +265 -0
  204. package/src/lib/components/manage-task/manage-task.component.scss +69 -0
  205. package/src/lib/components/manage-task/manage-task.component.spec.ts +23 -0
  206. package/src/lib/components/manage-task/manage-task.component.ts +267 -0
  207. package/src/lib/components/managechecklist/managechecklist.component.html +176 -0
  208. package/src/lib/components/managechecklist/managechecklist.component.scss +43 -0
  209. package/src/lib/components/managechecklist/managechecklist.component.spec.ts +23 -0
  210. package/src/lib/components/managechecklist/managechecklist.component.ts +176 -0
  211. package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.html +46 -0
  212. package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.scss +181 -0
  213. package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.spec.ts +23 -0
  214. package/src/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.ts +221 -0
  215. package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.html +36 -0
  216. package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.scss +89 -0
  217. package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.spec.ts +23 -0
  218. package/src/lib/components/multi-date-datepicker/multi-date-datepicker.component.ts +118 -0
  219. package/src/lib/components/orders/orders.component.html +203 -0
  220. package/src/lib/components/orders/orders.component.scss +180 -0
  221. package/src/lib/components/orders/orders.component.spec.ts +25 -0
  222. package/src/lib/components/orders/orders.component.ts +197 -0
  223. package/src/lib/components/pagination/pagination.component.html +28 -0
  224. package/src/lib/components/pagination/pagination.component.scss +6 -0
  225. package/src/lib/components/pagination/pagination.component.spec.ts +23 -0
  226. package/src/lib/components/pagination/pagination.component.ts +54 -0
  227. package/src/lib/components/reactive-select/reactive-select.component.html +18 -0
  228. package/src/lib/components/reactive-select/reactive-select.component.scss +48 -0
  229. package/src/lib/components/reactive-select/reactive-select.component.spec.ts +23 -0
  230. package/src/lib/components/reactive-select/reactive-select.component.ts +104 -0
  231. package/src/lib/components/reports/date-picker/date-picker.component.html +54 -0
  232. package/src/lib/components/reports/date-picker/date-picker.component.scss +156 -0
  233. package/src/lib/components/reports/date-picker/date-picker.component.spec.ts +23 -0
  234. package/src/lib/components/reports/date-picker/date-picker.component.ts +60 -0
  235. package/src/lib/components/reports/reports.component.html +225 -0
  236. package/src/lib/components/reports/reports.component.scss +69 -0
  237. package/src/lib/components/reports/reports.component.spec.ts +23 -0
  238. package/src/lib/components/reports/reports.component.ts +334 -0
  239. package/{lib/components/reports/reports.interface.d.ts → src/lib/components/reports/reports.interface.ts} +50 -46
  240. package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.html +1 -0
  241. package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.scss +15 -0
  242. package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.spec.ts +23 -0
  243. package/src/lib/components/tango-analyse-trax/tango-analyse-trax.component.ts +31 -0
  244. package/src/lib/components/task/task.component.html +322 -0
  245. package/src/lib/components/task/task.component.scss +169 -0
  246. package/src/lib/components/task/task.component.spec.ts +23 -0
  247. package/src/lib/components/task/task.component.ts +340 -0
  248. package/src/lib/components/task-configure/task-configure.component.html +737 -0
  249. package/src/lib/components/task-configure/task-configure.component.scss +569 -0
  250. package/src/lib/components/task-configure/task-configure.component.spec.ts +23 -0
  251. package/src/lib/components/task-configure/task-configure.component.ts +1603 -0
  252. package/src/lib/components/task-configure/task-configure.interface.ts +138 -0
  253. package/src/lib/components/task-info/task-info.component.html +390 -0
  254. package/src/lib/components/task-info/task-info.component.scss +56 -0
  255. package/src/lib/components/task-info/task-info.component.spec.ts +23 -0
  256. package/src/lib/components/task-info/task-info.component.ts +400 -0
  257. package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.html +141 -0
  258. package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.scss +460 -0
  259. package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.spec.ts +23 -0
  260. package/src/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.ts +202 -0
  261. package/src/lib/components/task-layout/task-layout.component.html +1 -0
  262. package/src/lib/components/task-layout/task-layout.component.scss +0 -0
  263. package/src/lib/components/task-layout/task-layout.component.spec.ts +23 -0
  264. package/src/lib/components/task-layout/task-layout.component.ts +10 -0
  265. package/src/lib/components/task-logs/task-logs.component.html +97 -0
  266. package/src/lib/components/task-logs/task-logs.component.scss +301 -0
  267. package/src/lib/components/task-logs/task-logs.component.spec.ts +23 -0
  268. package/src/lib/components/task-logs/task-logs.component.ts +80 -0
  269. package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.html +84 -0
  270. package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.scss +229 -0
  271. package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.spec.ts +23 -0
  272. package/src/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.ts +111 -0
  273. package/src/lib/components/trax-store/trax-store.component.html +78 -0
  274. package/src/lib/components/trax-store/trax-store.component.scss +134 -0
  275. package/src/lib/components/trax-store/trax-store.component.spec.ts +23 -0
  276. package/src/lib/components/trax-store/trax-store.component.ts +172 -0
  277. package/src/lib/components/traxpopup/traxpopup.component.html +130 -0
  278. package/src/lib/components/traxpopup/traxpopup.component.scss +225 -0
  279. package/src/lib/components/traxpopup/traxpopup.component.spec.ts +23 -0
  280. package/src/lib/components/traxpopup/traxpopup.component.ts +71 -0
  281. package/src/lib/services/trax.service.spec.ts +16 -0
  282. package/src/lib/services/trax.service.ts +789 -0
  283. package/src/lib/tango-analyse-trax-routing.module.ts +151 -0
  284. package/src/lib/tango-analyse-trax.module.ts +140 -0
  285. package/{public-api.d.ts → src/public-api.ts} +6 -2
  286. package/tsconfig.lib.json +14 -0
  287. package/tsconfig.lib.prod.json +10 -0
  288. package/tsconfig.spec.json +14 -0
  289. package/esm2022/lib/components/action-centre/action-centre.component.mjs +0 -288
  290. package/esm2022/lib/components/activity-log/activity-log.component.mjs +0 -150
  291. package/esm2022/lib/components/activity-log-v2/activity-log-v2.component.mjs +0 -502
  292. package/esm2022/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.mjs +0 -114
  293. package/esm2022/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.mjs +0 -24
  294. package/esm2022/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.mjs +0 -126
  295. package/esm2022/lib/components/add-checklist/add-checklist.component.mjs +0 -2352
  296. package/esm2022/lib/components/add-checklist/checklist-popup/checklist-popup.component.mjs +0 -612
  297. package/esm2022/lib/components/add-checklist/counter/counter.component.mjs +0 -138
  298. package/esm2022/lib/components/add-multitask/add-multitask.component.mjs +0 -604
  299. package/esm2022/lib/components/add-multitask/ascending-validator.mjs +0 -11
  300. package/esm2022/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.mjs +0 -297
  301. package/esm2022/lib/components/add-multitask/create-task.data.mjs +0 -372
  302. package/esm2022/lib/components/add-multitask/create-task.interface.mjs +0 -2
  303. package/esm2022/lib/components/add-multitask/unique-string-validator.mjs +0 -10
  304. package/esm2022/lib/components/add-multitask/whitespace-validator.mjs +0 -10
  305. package/esm2022/lib/components/add-task/add-task.component.mjs +0 -561
  306. package/esm2022/lib/components/add-task/ascending-validator.mjs +0 -11
  307. package/esm2022/lib/components/add-task/create-task.data.mjs +0 -372
  308. package/esm2022/lib/components/add-task/create-task.interface.mjs +0 -2
  309. package/esm2022/lib/components/add-task/unique-string-validator.mjs +0 -10
  310. package/esm2022/lib/components/add-task/whitespace-validator.mjs +0 -10
  311. package/esm2022/lib/components/approval-popup/approval-popup.component.mjs +0 -30
  312. package/esm2022/lib/components/checklist/checklist.component.mjs +0 -327
  313. package/esm2022/lib/components/checklist-configure/assign/assign.component.mjs +0 -912
  314. package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +0 -4161
  315. package/esm2022/lib/components/checklistlayout/checklistlayout.component.mjs +0 -44
  316. package/esm2022/lib/components/chip-dropdown/chip-dropdown.component.mjs +0 -120
  317. package/esm2022/lib/components/create-task/create-task.component.mjs +0 -585
  318. package/esm2022/lib/components/create-task/create-task.data.mjs +0 -372
  319. package/esm2022/lib/components/create-task/create-task.interface.mjs +0 -2
  320. package/esm2022/lib/components/create-task/validators/ascending-validator.mjs +0 -11
  321. package/esm2022/lib/components/create-task/validators/unique-string-validator.mjs +0 -10
  322. package/esm2022/lib/components/create-task/validators/whitespace-validator.mjs +0 -10
  323. package/esm2022/lib/components/custom-select/custom-select.component.mjs +0 -240
  324. package/esm2022/lib/components/dashboard/dashboard.component.mjs +0 -532
  325. package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +0 -741
  326. package/esm2022/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.mjs +0 -155
  327. package/esm2022/lib/components/dashboard-layout/dashboard-layout.component.mjs +0 -12
  328. package/esm2022/lib/components/disabled-select/disabled-select.component.mjs +0 -158
  329. package/esm2022/lib/components/export-gallery/export-gallery.component.mjs +0 -266
  330. package/esm2022/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.mjs +0 -105
  331. package/esm2022/lib/components/eye-test-audit/custom-select/custom-select.component.mjs +0 -240
  332. package/esm2022/lib/components/eye-test-audit/eye-test/eye-test.component.mjs +0 -1733
  333. package/esm2022/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.mjs +0 -24
  334. package/esm2022/lib/components/eye-test-audit/eye-test-audit/eye-test-audit-routing.module.mjs +0 -34
  335. package/esm2022/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.mjs +0 -27
  336. package/esm2022/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.module.mjs +0 -71
  337. package/esm2022/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.mjs +0 -823
  338. package/esm2022/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.mjs +0 -412
  339. package/esm2022/lib/components/eye-test-audit/group-select/group-select.component.mjs +0 -157
  340. package/esm2022/lib/components/eye-test-audit/reactive-select/reactive-select.component.mjs +0 -105
  341. package/esm2022/lib/components/eye-test-audit/select-drop/select-drop.component.mjs +0 -162
  342. package/esm2022/lib/components/eye-test-audit/services/eye-test-audit.service.mjs +0 -166
  343. package/esm2022/lib/components/flag-layout/flag-layout.component.mjs +0 -12
  344. package/esm2022/lib/components/flags/flags.component.mjs +0 -263
  345. package/esm2022/lib/components/flags/flags.interface.mjs +0 -2
  346. package/esm2022/lib/components/flags-info/flags-info.component.mjs +0 -452
  347. package/esm2022/lib/components/flags-info/flags-info.interface.mjs +0 -2
  348. package/esm2022/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.mjs +0 -71
  349. package/esm2022/lib/components/flags-new/flags-new.component.mjs +0 -335
  350. package/esm2022/lib/components/flags-new/flags-new.interface.mjs +0 -2
  351. package/esm2022/lib/components/gallery/gallery.component.mjs +0 -3402
  352. package/esm2022/lib/components/group-select/group-select.component.mjs +0 -155
  353. package/esm2022/lib/components/image-popup/image-popup.component.mjs +0 -25
  354. package/esm2022/lib/components/lib/custom-select/custom-select.component.mjs +0 -158
  355. package/esm2022/lib/components/manage-task/manage-task.component.mjs +0 -264
  356. package/esm2022/lib/components/managechecklist/managechecklist.component.mjs +0 -186
  357. package/esm2022/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.mjs +0 -229
  358. package/esm2022/lib/components/multi-date-datepicker/multi-date-datepicker.component.mjs +0 -124
  359. package/esm2022/lib/components/orders/orders.component.mjs +0 -171
  360. package/esm2022/lib/components/pagination/pagination.component.mjs +0 -62
  361. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +0 -108
  362. package/esm2022/lib/components/reports/date-picker/date-picker.component.mjs +0 -60
  363. package/esm2022/lib/components/reports/reports.component.mjs +0 -300
  364. package/esm2022/lib/components/reports/reports.interface.mjs +0 -2
  365. package/esm2022/lib/components/tango-analyse-trax/tango-analyse-trax.component.mjs +0 -32
  366. package/esm2022/lib/components/task/task.component.mjs +0 -341
  367. package/esm2022/lib/components/task-configure/task-configure.component.mjs +0 -1532
  368. package/esm2022/lib/components/task-configure/task-configure.interface.mjs +0 -2
  369. package/esm2022/lib/components/task-info/task-info.component.mjs +0 -375
  370. package/esm2022/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.mjs +0 -208
  371. package/esm2022/lib/components/task-layout/task-layout.component.mjs +0 -12
  372. package/esm2022/lib/components/task-logs/task-logs.component.mjs +0 -104
  373. package/esm2022/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.mjs +0 -107
  374. package/esm2022/lib/components/trax-store/trax-store.component.mjs +0 -179
  375. package/esm2022/lib/components/traxpopup/traxpopup.component.mjs +0 -70
  376. package/esm2022/lib/services/trax.service.mjs +0 -559
  377. package/esm2022/lib/tango-analyse-trax-routing.module.mjs +0 -153
  378. package/esm2022/lib/tango-analyse-trax.module.mjs +0 -221
  379. package/esm2022/public-api.mjs +0 -6
  380. package/esm2022/tango-app-ui-analyse-trax.mjs +0 -5
  381. package/fesm2022/tango-app-ui-analyse-trax.mjs +0 -28896
  382. package/fesm2022/tango-app-ui-analyse-trax.mjs.map +0 -1
  383. package/index.d.ts +0 -5
  384. package/lib/components/action-centre/action-centre.component.d.ts +0 -68
  385. package/lib/components/activity-log/activity-log.component.d.ts +0 -39
  386. package/lib/components/activity-log-v2/activity-log-v2.component.d.ts +0 -78
  387. package/lib/components/activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component.d.ts +0 -24
  388. package/lib/components/activity-log-v2/log-view-popup/store-user-dropdown/store-user-dropdown.component.d.ts +0 -9
  389. package/lib/components/activity-log-v2/log-view-popup/view-action/view-action.component.d.ts +0 -34
  390. package/lib/components/add-checklist/add-checklist.component.d.ts +0 -121
  391. package/lib/components/add-checklist/checklist-popup/checklist-popup.component.d.ts +0 -45
  392. package/lib/components/add-checklist/counter/counter.component.d.ts +0 -29
  393. package/lib/components/add-multitask/add-multitask.component.d.ts +0 -102
  394. package/lib/components/add-multitask/ascending-validator.d.ts +0 -2
  395. package/lib/components/add-multitask/bulkcreationmodel/bulkcreationmodel.component.d.ts +0 -45
  396. package/lib/components/add-multitask/create-task.data.d.ts +0 -293
  397. package/lib/components/add-multitask/create-task.interface.d.ts +0 -159
  398. package/lib/components/add-multitask/unique-string-validator.d.ts +0 -2
  399. package/lib/components/add-multitask/whitespace-validator.d.ts +0 -2
  400. package/lib/components/add-task/add-task.component.d.ts +0 -89
  401. package/lib/components/add-task/ascending-validator.d.ts +0 -2
  402. package/lib/components/add-task/create-task.data.d.ts +0 -293
  403. package/lib/components/add-task/create-task.interface.d.ts +0 -161
  404. package/lib/components/add-task/unique-string-validator.d.ts +0 -2
  405. package/lib/components/add-task/whitespace-validator.d.ts +0 -2
  406. package/lib/components/approval-popup/approval-popup.component.d.ts +0 -14
  407. package/lib/components/checklist/checklist.component.d.ts +0 -40
  408. package/lib/components/checklist-configure/assign/assign.component.d.ts +0 -105
  409. package/lib/components/checklist-configure/checklist-configure.component.d.ts +0 -325
  410. package/lib/components/checklistlayout/checklistlayout.component.d.ts +0 -15
  411. package/lib/components/chip-dropdown/chip-dropdown.component.d.ts +0 -28
  412. package/lib/components/create-task/create-task.component.d.ts +0 -76
  413. package/lib/components/create-task/create-task.data.d.ts +0 -293
  414. package/lib/components/create-task/create-task.interface.d.ts +0 -163
  415. package/lib/components/create-task/validators/ascending-validator.d.ts +0 -2
  416. package/lib/components/create-task/validators/unique-string-validator.d.ts +0 -2
  417. package/lib/components/create-task/validators/whitespace-validator.d.ts +0 -2
  418. package/lib/components/custom-select/custom-select.component.d.ts +0 -35
  419. package/lib/components/dashboard/dashboard.component.d.ts +0 -80
  420. package/lib/components/dashboard-info/dashboard-info.component.d.ts +0 -117
  421. package/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.d.ts +0 -41
  422. package/lib/components/dashboard-layout/dashboard-layout.component.d.ts +0 -5
  423. package/lib/components/disabled-select/disabled-select.component.d.ts +0 -34
  424. package/lib/components/export-gallery/export-gallery.component.d.ts +0 -44
  425. package/lib/components/eye-test-audit/chip-dropdown/chip-dropdown.component.d.ts +0 -26
  426. package/lib/components/eye-test-audit/custom-select/custom-select.component.d.ts +0 -35
  427. package/lib/components/eye-test-audit/eye-test/eye-test.component.d.ts +0 -218
  428. package/lib/components/eye-test-audit/eye-test/send-alert/send-alert.component.d.ts +0 -12
  429. package/lib/components/eye-test-audit/eye-test-audit/eye-test-audit-routing.module.d.ts +0 -7
  430. package/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.component.d.ts +0 -11
  431. package/lib/components/eye-test-audit/eye-test-audit/eye-test-audit.module.d.ts +0 -21
  432. package/lib/components/eye-test-audit/eye-test-audit/settings-audit/settings-audit.component.d.ts +0 -129
  433. package/lib/components/eye-test-audit/eye-test-audit/start-audit/start-audit.component.d.ts +0 -86
  434. package/lib/components/eye-test-audit/group-select/group-select.component.d.ts +0 -33
  435. package/lib/components/eye-test-audit/reactive-select/reactive-select.component.d.ts +0 -32
  436. package/lib/components/eye-test-audit/select-drop/select-drop.component.d.ts +0 -33
  437. package/lib/components/eye-test-audit/services/eye-test-audit.service.d.ts +0 -47
  438. package/lib/components/flag-layout/flag-layout.component.d.ts +0 -5
  439. package/lib/components/flags/flags.component.d.ts +0 -52
  440. package/lib/components/flags-info/flags-info.component.d.ts +0 -73
  441. package/lib/components/flags-info/flags-info.interface.d.ts +0 -430
  442. package/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.d.ts +0 -13
  443. package/lib/components/flags-new/flags-new.component.d.ts +0 -60
  444. package/lib/components/gallery/gallery.component.d.ts +0 -261
  445. package/lib/components/group-select/group-select.component.d.ts +0 -33
  446. package/lib/components/image-popup/image-popup.component.d.ts +0 -11
  447. package/lib/components/lib/custom-select/custom-select.component.d.ts +0 -33
  448. package/lib/components/manage-task/manage-task.component.d.ts +0 -47
  449. package/lib/components/managechecklist/managechecklist.component.d.ts +0 -33
  450. package/lib/components/multi-chip-dropdown/multi-chip-dropdown.component.d.ts +0 -40
  451. package/lib/components/multi-date-datepicker/multi-date-datepicker.component.d.ts +0 -27
  452. package/lib/components/orders/orders.component.d.ts +0 -38
  453. package/lib/components/pagination/pagination.component.d.ts +0 -16
  454. package/lib/components/reactive-select/reactive-select.component.d.ts +0 -32
  455. package/lib/components/reports/date-picker/date-picker.component.d.ts +0 -23
  456. package/lib/components/reports/reports.component.d.ts +0 -55
  457. package/lib/components/tango-analyse-trax/tango-analyse-trax.component.d.ts +0 -14
  458. package/lib/components/task/task.component.d.ts +0 -70
  459. package/lib/components/task-configure/task-configure.component.d.ts +0 -142
  460. package/lib/components/task-configure/task-configure.interface.d.ts +0 -128
  461. package/lib/components/task-info/task-info.component.d.ts +0 -76
  462. package/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.d.ts +0 -61
  463. package/lib/components/task-layout/task-layout.component.d.ts +0 -5
  464. package/lib/components/task-logs/task-logs.component.d.ts +0 -27
  465. package/lib/components/trax-run-ai-popup/trax-run-ai-popup.component.d.ts +0 -26
  466. package/lib/components/trax-store/trax-store.component.d.ts +0 -45
  467. package/lib/components/traxpopup/traxpopup.component.d.ts +0 -24
  468. package/lib/services/trax.service.d.ts +0 -175
  469. package/lib/tango-analyse-trax-routing.module.d.ts +0 -7
  470. package/lib/tango-analyse-trax.module.d.ts +0 -68
@@ -1,559 +0,0 @@
1
- import { HttpParams } from '@angular/common/http';
2
- import { Injectable, } from '@angular/core';
3
- import { BehaviorSubject, Subject, takeUntil, map } from 'rxjs';
4
- import * as FileSaver from 'file-saver';
5
- import * as XLSX from 'xlsx';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common/http";
8
- import * as i2 from "tango-app-ui-global";
9
- const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
10
- const EXCEL_EXTENSION = '.xlsx';
11
- const CSV_TYPE = 'text/csv;charset=utf-8';
12
- const CSV_EXTENSION = '.csv';
13
- export class TraxService {
14
- http;
15
- gs;
16
- traxUrl;
17
- storeUrl;
18
- galleryApiUrl;
19
- activitylogUrl;
20
- dropDownTrigger = new BehaviorSubject(null);
21
- reloadDataSubject = new BehaviorSubject(false);
22
- reloadData$ = this.reloadDataSubject.asObservable();
23
- // openedDropdowns:string[] = []
24
- dropdownCloseTrigger = new BehaviorSubject("");
25
- clientAPiUrl;
26
- trafficApiUrl;
27
- traxTaskUrl;
28
- constructor(http, gs) {
29
- this.http = http;
30
- this.gs = gs;
31
- this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {
32
- if (env) {
33
- this.traxUrl = env.traxUrl;
34
- this.storeUrl = env.storeApiUrl;
35
- this.galleryApiUrl = env.galleryApiUrl;
36
- this.clientAPiUrl = env.clientApiUrl;
37
- this.trafficApiUrl = env.trafficApiUrl;
38
- this.traxTaskUrl = env.traxTaskUrl;
39
- this.activitylogUrl = env.activitylogUrl;
40
- }
41
- });
42
- }
43
- triggerReload() {
44
- this.reloadDataSubject.next(true);
45
- }
46
- exportAsExcelFile(json, excelFileName) {
47
- const worksheet = XLSX.utils.json_to_sheet(json);
48
- const workbook = {
49
- Sheets: { data: worksheet },
50
- SheetNames: ["data"],
51
- };
52
- const excelBuffer = XLSX.write(workbook, {
53
- bookType: "xlsx",
54
- type: "array",
55
- });
56
- this.saveAsExcelFile(excelBuffer, excelFileName);
57
- }
58
- saveAsExcelFile(buffer, fileName) {
59
- const data = new Blob([buffer], {
60
- type: EXCEL_TYPE,
61
- });
62
- FileSaver.saveAs(data, fileName + "list" + EXCEL_EXTENSION);
63
- }
64
- saveAsTemplate(buffer, fileName) {
65
- const data = new Blob([buffer], {
66
- type: EXCEL_TYPE,
67
- });
68
- FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);
69
- }
70
- destroy$ = new Subject();
71
- ngOnDestroy() {
72
- this.destroy$.next(true);
73
- this.destroy$.complete();
74
- }
75
- getSummaryTableData(data) {
76
- return this.http.post(`${this.traxUrl}/zoneSummaryTable_v2`, data);
77
- }
78
- getchecklist(data) {
79
- return this.http.post(`${this.galleryApiUrl}/getchecklist`, data);
80
- }
81
- getTaskList(data) {
82
- return this.http.post(`${this.traxTaskUrl}/taskDropdown`, data);
83
- }
84
- getQuestions(data) {
85
- return this.http.post(`${this.traxTaskUrl}/getQuestions`, data);
86
- }
87
- approvechecklist(data) {
88
- return this.http.post(`${this.galleryApiUrl}/updateApprove`, data);
89
- }
90
- approvetask(data) {
91
- return this.http.post(`${this.traxTaskUrl}/updateApprove`, data);
92
- }
93
- getAnswers(data) {
94
- return this.http.post(`${this.traxTaskUrl}/getAnswers`, data);
95
- }
96
- getAnswercount(data) {
97
- return this.http.post(`${this.traxTaskUrl}/getAnswerCount`, data);
98
- }
99
- getMobUsagelist(data) {
100
- return this.http.post(`${this.galleryApiUrl}/getMobileUseagelist`, data);
101
- }
102
- getcustomerunattendedlist(data) {
103
- return this.http.post(`${this.galleryApiUrl}/getcustomerunattendedlist`, data);
104
- }
105
- storeOpencloselist(data) {
106
- return this.http.post(`${this.galleryApiUrl}/getcustomerunattendedlist`, data);
107
- }
108
- queuealertlist(data) {
109
- return this.http.post(`${this.galleryApiUrl}/getcustomerunattendedlist`, data);
110
- }
111
- getSummaryTableExport(data) {
112
- return this.http.post(`${this.traxUrl}/zoneSummaryTable_v2`, data, {
113
- responseType: "arraybuffer",
114
- });
115
- }
116
- checklist(obj) {
117
- return this.http.get(`${this.traxUrl}/checklist?limit=${obj.limit}&offset=${obj.offset}&sortColumnName=${obj.sortColumn}&search=${obj.search}&sortBy=${obj.sortBy}&clientId=${obj.clientId}`);
118
- }
119
- checklistv2(obj) {
120
- return this.http.get(`${this.traxUrl}/checklistV2?limit=${obj.limit}&offset=${obj.offset}&sortColumnName=${obj.sortColumn}&search=${obj.search}&sortBy=${obj.sortBy}&clientId=${obj.clientId}`);
121
- }
122
- imageupload(users) {
123
- return this.http.post(`${this.traxUrl}/upload`, users);
124
- }
125
- taskImageupload(users) {
126
- return this.http.post(`${this.traxTaskUrl}/uploadImage`, users);
127
- }
128
- validateUser(users) {
129
- return this.http.post(`${this.traxUrl}/validateUser`, users);
130
- }
131
- taskvalidateUserData(users) {
132
- return this.http.post(`${this.galleryApiUrl}/taskvalidateUserData`, users);
133
- }
134
- getallchecklist(users) {
135
- return this.http.post(`${this.galleryApiUrl}/getallchecklist`, users);
136
- }
137
- assignUpload(users) {
138
- return this.http.post(`${this.traxUrl}/assignUpload`, users);
139
- }
140
- validateUserv1(users) {
141
- return this.http.post(`${this.traxUrl}/validateUserv1`, users);
142
- }
143
- taskvalidateUserv1(users) {
144
- return this.http.post(`${this.traxTaskUrl}/upload`, users);
145
- }
146
- taskassignUpload(users) {
147
- return this.http.post(`${this.traxTaskUrl}/assignUpload`, users);
148
- }
149
- getUpdateChecklist(id, data) {
150
- return this.http.put(`${this.traxUrl}/checklist/update/${id}`, data);
151
- }
152
- createChecklist(data) {
153
- return this.http.post(`${this.traxUrl}/checklist/create`, data);
154
- }
155
- configUpdate(obj) {
156
- return this.http.post(`${this.traxUrl}/checklistConfigurev1`, obj);
157
- }
158
- assignUpdate(data) {
159
- return this.http.post(`${this.traxUrl}/updateAssign`, data);
160
- }
161
- assigntaskUpdate(data) {
162
- return this.http.post(`${this.traxTaskUrl}/updateAssign`, data);
163
- }
164
- updateAiConfigure(data) {
165
- return this.http.post(`${this.traxUrl}/updateAiConfigure`, data);
166
- }
167
- getconfig(obj) {
168
- let key = Object.keys(obj)[0];
169
- let value = obj[Object.keys(obj)[0]];
170
- return this.http.get(`${this.traxUrl}/getConfigDetails?${key}=${value}&clientId=${obj[Object.keys(obj)[1]]}`);
171
- }
172
- getAIconfig(obj) {
173
- let key = Object.keys(obj)[0];
174
- let value = obj[Object.keys(obj)[0]];
175
- return this.http.get(`${this.traxUrl}/getAiDetails?${key}=${value}&clientId=${obj[Object.keys(obj)[1]]}`);
176
- }
177
- runAIInsert(data) {
178
- return this.http.post(`${this.traxUrl}/runAIInsert`, data);
179
- }
180
- duplicatechecklist(data) {
181
- return this.http.get(`${this.traxUrl}/duplicateChecklist/${data.checklistId}?clientId=${data.clientId}`);
182
- }
183
- getUserDetails(obj) {
184
- return this.http.get(`${this.traxUrl}/userDetails/${obj.id}?offset=${obj.offset}&limit=${obj.limit}&search=${obj.search}&clientId=${obj.clientId}`);
185
- }
186
- getStoreList(data) {
187
- return this.http.post(`${this.storeUrl}/storeInfraList`, data);
188
- }
189
- deleteChecklist(data) {
190
- return this.http.delete(`${this.traxUrl}/deleteChecklist/${data.id}?clientId=${data.clientId}`);
191
- }
192
- publish(data) {
193
- return this.http.put(`${this.traxUrl}/publish`, data);
194
- }
195
- getStores(data) {
196
- return this.http.post(`${this.galleryApiUrl}/get-stores`, data);
197
- }
198
- getChecklists(data) {
199
- return this.http.post(`${this.galleryApiUrl}/checklistDropdown`, data);
200
- }
201
- viewChecklists(data) {
202
- return this.http.post(`${this.galleryApiUrl}/viewchecklist`, data);
203
- }
204
- overallFlagMetrics(body) {
205
- return this.http.post(`${this.traxUrl}/flag/flagCardsV1`, body);
206
- }
207
- overallFlagMetricsComparison(body) {
208
- return this.http.post(`${this.traxUrl}/flag/flagComparisonCardsV2`, body);
209
- }
210
- flagsTable(body) {
211
- return this.http.post(`${this.traxUrl}/flag/flagTablesV1`, body);
212
- }
213
- flagsTableV2(body) {
214
- return this.http.post(`${this.traxUrl}/flag/flagTablesV2`, body);
215
- }
216
- exportFlagsTable(body) {
217
- return this.http.post(`${this.traxUrl}/flag/flagTablesV1`, body, {
218
- responseType: "arraybuffer",
219
- });
220
- }
221
- exportFlagsTablev2(body) {
222
- return this.http.post(`${this.traxUrl}/flag/flagTablesV2`, body, {
223
- responseType: "arraybuffer",
224
- });
225
- }
226
- getOverallCardsData(data) {
227
- return this.http.post(`${this.traxUrl}/dashboard/overallCardsV1`, data);
228
- }
229
- getChecklistPerformanceData(data) {
230
- return this.http.post(`${this.traxUrl}/dashboard/checklistPerformance`, data);
231
- }
232
- getChecklistPerformanceDatav2(data) {
233
- return this.http.post(`${this.traxUrl}/dashboard/checklistPerformanceV2`, data);
234
- }
235
- getChecklistPerformanceDataExport(data) {
236
- return this.http.post(`${this.traxUrl}/dashboard/checklistPerformance`, data, { responseType: "arraybuffer" });
237
- }
238
- getChecklistPerformanceDataExportv2(data) {
239
- return this.http.post(`${this.traxUrl}/dashboard/checklistPerformanceV2`, data, { responseType: "arraybuffer" });
240
- }
241
- getStorePerformanceData(data) {
242
- return this.http.post(`${this.traxUrl}/dashboard/storePerformance`, data);
243
- }
244
- getStorePerformanceDatav2(data) {
245
- return this.http.post(`${this.traxUrl}/dashboard/checklistPerformanceV2`, data);
246
- }
247
- getStorePerformanceDataExport(data) {
248
- return this.http.post(`${this.traxUrl}/dashboard/storePerformance`, data, {
249
- responseType: "arraybuffer",
250
- });
251
- }
252
- getUserPerformanceData(data) {
253
- return this.http.post(`${this.traxUrl}/dashboard/userPerformance`, data);
254
- }
255
- getUserPerformanceDataExport(data) {
256
- return this.http.post(`${this.traxUrl}/dashboard/userPerformance`, data, {
257
- responseType: "arraybuffer",
258
- });
259
- }
260
- getChecklistDropdownData(data) {
261
- return this.http.post(`${this.traxUrl}/flag/flagChecklistDropDownV1`, data);
262
- }
263
- getChecklistDropdownDashboardData(data) {
264
- return this.http.post(`${this.traxUrl}/dashboard/checklistDropdown`, data);
265
- }
266
- getInfoCardsData(data) {
267
- return this.http.post(`${this.traxUrl}/dashboard/infoCardsV1`, data);
268
- }
269
- checklistFlagTable(body) {
270
- return this.http.post(`${this.traxUrl}/flag/flagChecklistTableV1`, body);
271
- }
272
- CreatechecklistTask(body) {
273
- return this.http.post(`${this.traxTaskUrl}/checklistTask`, body);
274
- }
275
- CreatechecklistMultiTask(body) {
276
- return this.http.post(`${this.traxTaskUrl}/checklistMultiTask`, body);
277
- }
278
- redoTaskchecklist(body) {
279
- return this.http.post(`${this.galleryApiUrl}/redo`, body);
280
- }
281
- redoTaskmultichecklist(body) {
282
- return this.http.post(`${this.galleryApiUrl}/multiredo`, body);
283
- }
284
- redomultiTask(body) {
285
- return this.http.post(`${this.traxTaskUrl}/multiredo`, body);
286
- }
287
- redoTask(body) {
288
- return this.http.post(`${this.traxTaskUrl}/redo`, body);
289
- }
290
- getredoLogs(body) {
291
- return this.http.post(`${this.galleryApiUrl}/getLogs`, body);
292
- }
293
- exportChecklistFlagTable(body) {
294
- return this.http.post(`${this.traxUrl}/flag/flagChecklistTableV1`, body, {
295
- responseType: "arraybuffer",
296
- });
297
- }
298
- reportTable(body) {
299
- return this.http.post(`${this.traxUrl}/dashboard/reportChecklistDatav1`, body);
300
- }
301
- flagCardValues(body) {
302
- return this.http.post(`${this.traxUrl}/flag/flagChecklistCardsV1`, body);
303
- }
304
- flagCardTerend(body) {
305
- return this.http.post(`${this.traxUrl}/flag/flagChecklistComparisonCardsV1`, body);
306
- }
307
- getChecklistInfoData(data) {
308
- return this.http.post(`${this.traxUrl}/dashboard/checklistInfo`, data);
309
- }
310
- getChecklistInfoDataExport(data) {
311
- return this.http.post(`${this.traxUrl}/dashboard/checklistInfo`, data, {
312
- responseType: "arraybuffer",
313
- });
314
- }
315
- getUserlistDropdownData(data) {
316
- return this.http.post(`${this.traxUrl}/dashboard/userlistDropdown`, data);
317
- }
318
- getMonthlyPeformanceData(data) {
319
- return this.http.post(`${this.traxUrl}/dashboard/monthlyGraphV1`, data);
320
- }
321
- getClientUser(clientId) {
322
- return this.http.get(`${this.traxUrl}/userList?clientId=${clientId}`);
323
- }
324
- getTeamList(clientId) {
325
- return this.http.get(`${this.traxUrl}/getTeamList?clientId=${clientId}`);
326
- }
327
- getZoneList(params) {
328
- let queryString = "";
329
- if (params.clientId)
330
- queryString = `?clientId=${params.clientId}`;
331
- if (params.checkListName)
332
- queryString = queryString + `&checkListName=${params.checkListName}`;
333
- return this.http.get(`${this.traxUrl}/zoneList${queryString}`);
334
- }
335
- getInfoComparisonCardsData(data) {
336
- return this.http.post(`${this.traxUrl}/dashboard/infoComparisonCardsV1`, data);
337
- }
338
- getOverallComparisonCardsData(data) {
339
- return this.http.post(`${this.traxUrl}/dashboard/overallComparisonCardsV1`, data);
340
- }
341
- getaichecklist(data) {
342
- return this.http.get(`${this.traxUrl}/aichecklist?clientId=${data}`);
343
- }
344
- reportTableExport(body) {
345
- return this.http.post(`${this.traxUrl}/downloads/downloadInsert`, body);
346
- }
347
- aichecklistExport(body) {
348
- return this.http.post(`${this.traxUrl}/downloads/downloadInsertAI`, body);
349
- }
350
- getpredefinedchecklist(data) {
351
- return this.http.get(`${this.traxUrl}/predefinedChecklist?clientId=${data}`);
352
- }
353
- getclient(data) {
354
- return this.http.get(`${this.clientAPiUrl}/detailed-client-count?clientId=${data.clientId}`);
355
- }
356
- getGroups(data) {
357
- return this.http.post(`${this.trafficApiUrl}/headerGroups_v1`, data);
358
- }
359
- getclusters(data) {
360
- return this.http.post(`${this.galleryApiUrl}/headercluster_v2`, data);
361
- }
362
- getusers(data) {
363
- return this.http.post(`${this.galleryApiUrl}/userList`, data);
364
- }
365
- getAllTeams(clientId) {
366
- return this.http.get(`${this.galleryApiUrl}/teamsList?clientId=${clientId}`);
367
- }
368
- getStoreslist(data) {
369
- return this.http.post(`${this.galleryApiUrl}/headerStores_v2`, data);
370
- }
371
- approvalstatuschecklist(data) {
372
- return this.http.post(`${this.galleryApiUrl}/approvalstatus`, data);
373
- }
374
- approvalstatustask(data) {
375
- return this.http.post(`${this.traxTaskUrl}/approvalstatus`, data);
376
- }
377
- Allapprovalstatuschecklist(data) {
378
- return this.http.post(`${this.galleryApiUrl}/allapprovalstatus`, data);
379
- }
380
- Allapprovalstatustask(data) {
381
- return this.http.post(`${this.traxTaskUrl}/allapprovalstatus`, data);
382
- }
383
- getOrdersByDate(data) {
384
- return this.http.post(`${this.traxUrl}/locusorder/get`, data);
385
- }
386
- orderUpdate(data) {
387
- return this.http.post(`${this.traxUrl}/locusorder/update`, data);
388
- }
389
- orderDelete(data) {
390
- return this.http.post(`${this.traxUrl}/locusorder/delete`, data);
391
- }
392
- isLocusAuthorized() {
393
- return this.http.get(`${this.traxUrl}/locusorder/user-allowed`);
394
- }
395
- reinitiateChecklist(data) {
396
- return this.http.post(`${this.traxUrl}/dashboard/reinitiatechecklist`, data);
397
- }
398
- checkNotificationCount(data) {
399
- return this.http.post(`${this.galleryApiUrl}/checkNotificationCount`, data);
400
- }
401
- exportAsCSVFile(json, excelFileName, identifier) {
402
- const worksheet = XLSX.utils.json_to_sheet(json);
403
- const csvOutput = XLSX.utils.sheet_to_csv(worksheet);
404
- this.saveAsCSVFile(csvOutput, excelFileName);
405
- }
406
- saveAsCSVFile(buffer, fileName) {
407
- const data = new Blob([buffer], {
408
- type: CSV_TYPE,
409
- });
410
- FileSaver.saveAs(data, fileName + CSV_EXTENSION);
411
- }
412
- reInitiate(body) {
413
- return this.http.post(`${this.traxUrl}/dashboard/reinitiatechecklist`, body);
414
- }
415
- createTask(data) {
416
- return this.http.post(`${this.traxTaskUrl}/create`, data);
417
- }
418
- getTaskconfig(id, clientId) {
419
- return this.http.get(`${this.traxTaskUrl}/details?taskId=${id}&clientId=${clientId}`);
420
- }
421
- configTask(data) {
422
- return this.http.post(`${this.traxTaskUrl}/config`, data);
423
- }
424
- getTaskUserDetails(data) {
425
- const params = new HttpParams({ fromObject: data });
426
- return this.http.get(`${this.traxTaskUrl}/userDetails`, { params });
427
- }
428
- uploadTaskAssignees(data) {
429
- return this.http.post(`${this.traxTaskUrl}/upload`, data);
430
- }
431
- getOverallTasksData(data) {
432
- return this.http.post(`${this.traxTaskUrl}/dashboard/overallcardsV1`, data);
433
- }
434
- // getTaskTableData( data:any):Observable<any>{
435
- // return this.http.post(`${this.traxTaskUrl}/dashboard/taskTableV1`, data)
436
- // }
437
- // getTaskTableDataExport( data:any):Observable<any>{
438
- // return this.http.post(`${this.traxTaskUrl}/dashboard/taskTableV1`, data, {responseType: 'arraybuffer'})
439
- // }
440
- getTaskTableData(data) {
441
- return this.http.post(`${this.traxTaskUrl}/dashboard/taskDetails`, data);
442
- }
443
- getTaskTableDataExport(data) {
444
- return this.http.post(`${this.traxTaskUrl}/dashboard/taskDetails`, data, {
445
- responseType: "arraybuffer",
446
- });
447
- }
448
- getTaskInfoTableData(data) {
449
- return this.http.post(`${this.traxTaskUrl}/dashboard/taskInfoTableV1`, data);
450
- }
451
- getTaskInfoTableDataExport(data) {
452
- return this.http.post(`${this.traxTaskUrl}/dashboard/taskInfoTableV1`, data, { responseType: "arraybuffer" });
453
- }
454
- getOverallActionCenterData(data) {
455
- return this.http.post(`${this.traxTaskUrl}/actionCenter/overallcardsV1`, data);
456
- }
457
- getApprovalData(data) {
458
- return this.http.post(`${this.traxTaskUrl}/actionCenter/approvalTableV1`, data);
459
- }
460
- getActivityLog(data) {
461
- return this.http.post(`${this.traxTaskUrl}/actionCenter/activityLogV1`, data);
462
- }
463
- getTaskDropdownList(data) {
464
- return this.http.post(`${this.traxTaskUrl}/dashboard/taskDropdownListV1`, data);
465
- }
466
- getTaskDelete(data) {
467
- return this.http.post(`${this.traxTaskUrl}/dashboard/taskDeleteV1`, data);
468
- }
469
- getTaskUpdate(data) {
470
- return this.http.post(`${this.traxTaskUrl}/reinitiate`, data);
471
- }
472
- selecttaskChips(data) {
473
- return this.http.post(`${this.traxTaskUrl}/assign`, data);
474
- }
475
- taskList(obj) {
476
- return this.http.get(`${this.traxTaskUrl}/task-list?limit=${obj.limit}&offset=${obj.offset}&sortColumnName=${obj.sortColumn}&search=${obj.search}&sortBy=${obj.sortBy}&clientId=${obj.clientId}`);
477
- }
478
- publishTask(data) {
479
- return this.http.put(`${this.traxTaskUrl}/publish`, data);
480
- }
481
- duplicateTask(data) {
482
- return this.http.get(`${this.traxTaskUrl}/duplicateTask/${data.checklistId}?clientId=${data.clientId}`);
483
- }
484
- getSendAlert(data) {
485
- return this.http.post(`${this.traxUrl}/dashboard/sendAlert`, data);
486
- }
487
- getassignDropdown(data) {
488
- return this.http.post(`${this.traxUrl}/selectAssign`, data);
489
- }
490
- selectChips(data) {
491
- return this.http.post(`${this.traxUrl}/assign`, data);
492
- }
493
- removeChips(data) {
494
- return this.http.post(`${this.traxUrl}/remove`, data);
495
- }
496
- getUserDetailsV2(obj) {
497
- return this.http.get(`${this.traxUrl}/userDetails/${obj.checklistId}?offset=${obj.offset}&limit=${obj.limit}&search=${obj.search}&clientId=${obj.clientId}&sortColumn=${obj.sortColumn}&sortBy=${obj.sortBy}`);
498
- }
499
- getUserDetailsV1(obj) {
500
- return this.http.get(`${this.traxUrl}/userDetailsv1/${obj.id}?clientId=${obj?.clientId}`);
501
- }
502
- gettaskUserDetailsV1(obj) {
503
- return this.http.get(`${this.traxTaskUrl}/userDetails/?taskId=${obj.id}&clientId=${obj?.clientId}`);
504
- }
505
- checklistCountByType(body) {
506
- return this.http.post(`${this.traxUrl}/flag/checklistCountByType`, body);
507
- }
508
- activityLogList(data) {
509
- return this.http.post(`${this.activitylogUrl}/listLog`, data);
510
- }
511
- downloadtemplate(data) {
512
- return this.http.post(`${this.galleryApiUrl}/exportTemplate`, data, {
513
- responseType: "arraybuffer",
514
- });
515
- }
516
- getClientrunAIFeatues(data) {
517
- return this.http.post(`${this.traxUrl}/getRunAIFeatures`, data);
518
- }
519
- updateRunAIFeatures(data) {
520
- return this.http.post(`${this.traxUrl}/updateRunAIFeatures`, data);
521
- }
522
- downloadQuestion(data) {
523
- return this.http.post(`${this.traxUrl}/exportQuestions`, { checklistId: data }, { responseType: "arraybuffer" });
524
- }
525
- getChecklistDetailsV1(data) {
526
- return this.http.post(`${this.galleryApiUrl}/getchecklistDetails`, data);
527
- }
528
- saveAsPdfBlob(blob, fileName = "report.pdf") {
529
- const finalFileName = fileName.endsWith(".pdf")
530
- ? fileName
531
- : `${fileName}.pdf`;
532
- FileSaver.saveAs(blob, finalFileName);
533
- }
534
- reportTableExportAsBlob(body) {
535
- return this.http
536
- .post(`${this.traxUrl}/downloads/downloadInsert`, body, { responseType: "blob", observe: "response" })
537
- .pipe(map((response) => {
538
- const blob = response.body;
539
- let fileName;
540
- const contentDisposition = response.headers.get("Content-Disposition");
541
- if (contentDisposition) {
542
- const match = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
543
- if (match && match[1]) {
544
- fileName = match[1].replace(/['"]/g, "").trim();
545
- }
546
- }
547
- return { blob, fileName };
548
- }));
549
- }
550
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraxService, deps: [{ token: i1.HttpClient }, { token: i2.GlobalStateService }], target: i0.ɵɵFactoryTarget.Injectable });
551
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraxService, providedIn: "root" });
552
- }
553
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraxService, decorators: [{
554
- type: Injectable,
555
- args: [{
556
- providedIn: "root",
557
- }]
558
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.GlobalStateService }] });
559
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJheC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvc2VydmljZXMvdHJheC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUMsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxFQUFFLFVBQVUsR0FBYyxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxTQUFTLEVBQWMsR0FBRyxFQUFrQixNQUFNLE1BQU0sQ0FBQztBQUN4RyxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQzs7OztBQUU3QixNQUFNLFVBQVUsR0FBRyxpRkFBaUYsQ0FBQztBQUNyRyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFDaEMsTUFBTSxRQUFRLEdBQUcsd0JBQXdCLENBQUM7QUFDMUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBSzdCLE1BQU0sT0FBTyxXQUFXO0lBaUJaO0lBQ0E7SUFqQlYsT0FBTyxDQUFNO0lBQ2IsUUFBUSxDQUFNO0lBQ2QsYUFBYSxDQUFNO0lBQ25CLGNBQWMsQ0FBTTtJQUNwQixlQUFlLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFFekMsaUJBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEUsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVwRCxnQ0FBZ0M7SUFDaEMsb0JBQW9CLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkQsWUFBWSxDQUFNO0lBQ2xCLGFBQWEsQ0FBTTtJQUNuQixXQUFXLENBQVM7SUFFcEIsWUFDVSxJQUFnQixFQUNoQixFQUFzQjtRQUR0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBRTlCLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkUsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO2dCQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDO2FBQzFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQVcsRUFBRSxhQUFxQjtRQUN6RCxNQUFNLFNBQVMsR0FBbUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQWtCO1lBQzlCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDM0IsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDO1NBQ3JCLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUM1QyxRQUFRLEVBQUUsTUFBTTtZQUNoQixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxlQUFlLENBQUMsTUFBVyxFQUFFLFFBQWdCO1FBQ2xELE1BQU0sSUFBSSxHQUFTLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxFQUFFLFVBQVU7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxHQUFHLE1BQU0sR0FBRyxlQUFlLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQVcsRUFBRSxRQUFnQjtRQUNqRCxNQUFNLElBQUksR0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BDLElBQUksRUFBRSxVQUFVO1NBQ2pCLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsR0FBRyxlQUFlLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ2dCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRTFDLFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFTO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsWUFBWSxDQUFDLElBQVM7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQVM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsWUFBWSxDQUFDLElBQVM7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsSUFBUztRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELFdBQVcsQ0FBQyxJQUFTO1FBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsVUFBVSxDQUFDLElBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVM7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELHlCQUF5QixDQUFDLElBQVM7UUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsR0FBRyxJQUFJLENBQUMsYUFBYSw0QkFBNEIsRUFDakQsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBUztRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxhQUFhLDRCQUE0QixFQUNqRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFDRCxjQUFjLENBQUMsSUFBUztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxhQUFhLDRCQUE0QixFQUNqRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFTO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxzQkFBc0IsRUFBRSxJQUFJLEVBQUU7WUFDakUsWUFBWSxFQUFFLGFBQWE7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFRO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLE9BQU8sb0JBQW9CLEdBQUcsQ0FBQyxLQUFLLFdBQVcsR0FBRyxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxVQUFVLFdBQVcsR0FBRyxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FDeEssQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxPQUFPLHNCQUFzQixHQUFHLENBQUMsS0FBSyxXQUFXLEdBQUcsQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsVUFBVSxXQUFXLEdBQUcsQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQzFLLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBVTtRQUM3QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFVO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVU7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsRUFBTyxFQUFFLElBQVM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLHFCQUFxQixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVM7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBUTtRQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFTO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVM7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBUztRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFRO1FBQ2hCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxPQUFPLHFCQUFxQixHQUFHLElBQUksS0FBSyxhQUFhLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDeEYsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBUTtRQUNsQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsT0FBTyxpQkFBaUIsR0FBRyxJQUFJLEtBQUssYUFBYSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BGLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBUztRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxPQUFPLHVCQUF1QixJQUFJLENBQUMsV0FBVyxhQUFhLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FDbkYsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBUTtRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxPQUFPLGdCQUFnQixHQUFHLENBQUMsRUFBRSxXQUFXLEdBQUcsQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssV0FBVyxHQUFHLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FDOUgsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBUztRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFTO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQ3JCLEdBQUcsSUFBSSxDQUFDLE9BQU8sb0JBQW9CLElBQUksQ0FBQyxFQUFFLGFBQWEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFTO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsU0FBUyxDQUFDLElBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxhQUFhLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVM7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxhQUFhLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFDRCxjQUFjLENBQUMsSUFBUztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxPQUFPLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxJQUFTO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsSUFBSSxDQUFDLE9BQU8sNkJBQTZCLEVBQzVDLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxPQUFPLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFTO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxvQkFBb0IsRUFBRSxJQUFJLEVBQUU7WUFDL0QsWUFBWSxFQUFFLGFBQWE7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLG9CQUFvQixFQUFFLElBQUksRUFBRTtZQUMvRCxZQUFZLEVBQUUsYUFBYTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBUztRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sMkJBQTJCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELDJCQUEyQixDQUFDLElBQVM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsR0FBRyxJQUFJLENBQUMsT0FBTyxpQ0FBaUMsRUFDaEQsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRUQsNkJBQTZCLENBQUMsSUFBUztRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxPQUFPLG1DQUFtQyxFQUNsRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxpQ0FBaUMsQ0FBQyxJQUFTO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsSUFBSSxDQUFDLE9BQU8saUNBQWlDLEVBQ2hELElBQUksRUFDSixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRCxtQ0FBbUMsQ0FBQyxJQUFTO1FBQzNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsSUFBSSxDQUFDLE9BQU8sbUNBQW1DLEVBQ2xELElBQUksRUFDSixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxJQUFTO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQseUJBQXlCLENBQUMsSUFBUztRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxPQUFPLG1DQUFtQyxFQUNsRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxJQUFTO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyw2QkFBNkIsRUFBRSxJQUFJLEVBQUU7WUFDeEUsWUFBWSxFQUFFLGFBQWE7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQVM7UUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLDRCQUE0QixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxJQUFTO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyw0QkFBNEIsRUFBRSxJQUFJLEVBQUU7WUFDdkUsWUFBWSxFQUFFLGFBQWE7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUFDLElBQVM7UUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFDRCxpQ0FBaUMsQ0FBQyxJQUFTO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBUztRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsR0FBRyxJQUFJLENBQUMsT0FBTyw0QkFBNEIsRUFDM0MsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBUztRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUNELHdCQUF3QixDQUFDLElBQVM7UUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxXQUFXLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFTO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELHNCQUFzQixDQUFDLElBQVM7UUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxhQUFhLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsYUFBYSxDQUFDLElBQVM7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxXQUFXLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxXQUFXLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQVM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxhQUFhLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0Qsd0JBQXdCLENBQUMsSUFBUztRQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sNEJBQTRCLEVBQUUsSUFBSSxFQUFFO1lBQ3ZFLFlBQVksRUFBRSxhQUFhO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBUztRQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxPQUFPLGtDQUFrQyxFQUNqRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxPQUFPLDRCQUE0QixFQUMzQyxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxPQUFPLHNDQUFzQyxFQUNyRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFTO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTywwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsMEJBQTBCLENBQUMsSUFBUztRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sMEJBQTBCLEVBQUUsSUFBSSxFQUFFO1lBQ3JFLFlBQVksRUFBRSxhQUFhO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxJQUFTO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsd0JBQXdCLENBQUMsSUFBUztRQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sMkJBQTJCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFhO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxzQkFBc0IsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWE7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLHlCQUF5QixRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBNkM7UUFDdkQsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksTUFBTSxDQUFDLFFBQVE7WUFBRSxXQUFXLEdBQUcsYUFBYSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEUsSUFBSSxNQUFNLENBQUMsYUFBYTtZQUN0QixXQUFXLEdBQUcsV0FBVyxHQUFHLGtCQUFrQixNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLFlBQVksV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsMEJBQTBCLENBQUMsSUFBUztRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxPQUFPLGtDQUFrQyxFQUNqRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFDRCw2QkFBNkIsQ0FBQyxJQUFTO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsSUFBSSxDQUFDLE9BQU8scUNBQXFDLEVBQ3BELElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFTO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyx5QkFBeUIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBUztRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxPQUFPLDJCQUEyQixFQUMxQyxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxJQUFTO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsSUFBSSxDQUFDLE9BQU8sNkJBQTZCLEVBQzVDLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUNELHNCQUFzQixDQUFDLElBQVM7UUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsT0FBTyxpQ0FBaUMsSUFBSSxFQUFFLENBQ3ZELENBQUM7SUFDSixDQUFDO0lBQ0QsU0FBUyxDQUFDLElBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsWUFBWSxtQ0FBbUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUNELFNBQVMsQ0FBQyxJQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQVM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDRCxRQUFRLENBQUMsSUFBUztRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxXQUFXLENBQUMsUUFBYTtRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxhQUFhLHVCQUF1QixRQUFRLEVBQUUsQ0FDdkQsQ0FBQztJQUNKLENBQUM7SUFDRCxhQUFhLENBQUMsSUFBUztRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELHVCQUF1QixDQUFDLElBQVM7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsMEJBQTBCLENBQUMsSUFBUztRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELHFCQUFxQixDQUFDLElBQVM7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8saUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFTO1FBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sMEJBQTBCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsSUFBUztRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxPQUFPLGdDQUFnQyxFQUMvQyxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxJQUFTO1FBQzlCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU0sZUFBZSxDQUNwQixJQUFXLEVBQ1gsYUFBcUIsRUFDckIsVUFBa0I7UUFFbEIsTUFBTSxTQUFTLEdBQW1CLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpFLE1BQU0sU0FBUyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDTyxhQUFhLENBQUMsTUFBVyxFQUFFLFFBQWdCO1FBQ2pELE1BQU0sSUFBSSxHQUFTLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsSUFBSSxDQUFDLE9BQU8sZ0NBQWdDLEVBQy9DLElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUFVLEVBQUUsUUFBZ0I7UUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsV0FBVyxtQkFBbUIsRUFBRSxhQUFhLFFBQVEsRUFBRSxDQUNoRSxDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBUztRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFTO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVywyQkFBMkIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsK0NBQStDO0lBQy9DLDZFQUE2RTtJQUM3RSxJQUFJO0lBQ0oscURBQXFEO0lBQ3JELDRHQUE0RztJQUM1RyxJQUFJO0lBQ0osZ0JBQWdCLENBQUMsSUFBUztRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELHNCQUFzQixDQUFDLElBQVM7UUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLHdCQUF3QixFQUFFLElBQUksRUFBRTtZQUN2RSxZQUFZLEVBQUUsYUFBYTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsSUFBUztRQUM1QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxXQUFXLDRCQUE0QixFQUMvQyxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFDRCwwQkFBMEIsQ0FBQyxJQUFTO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsSUFBSSxDQUFDLFdBQVcsNEJBQTRCLEVBQy9DLElBQUksRUFDSixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FDaEMsQ0FBQztJQUNKLENBQUM7SUFDRCwwQkFBMEIsQ0FBQyxJQUFTO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsSUFBSSxDQUFDLFdBQVcsOEJBQThCLEVBQ2pELElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUNELGVBQWUsQ0FBQyxJQUFTO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsSUFBSSxDQUFDLFdBQVcsK0JBQStCLEVBQ2xELElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUNELGNBQWMsQ0FBQyxJQUFTO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsSUFBSSxDQUFDLFdBQVcsNkJBQTZCLEVBQ2hELElBQUksQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUNELG1CQUFtQixDQUFDLElBQVM7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsR0FBRyxJQUFJLENBQUMsV0FBVywrQkFBK0IsRUFDbEQsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBQ0QsYUFBYSxDQUFDLElBQVM7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLHlCQUF5QixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDRCxhQUFhLENBQUMsSUFBUztRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxRQUFRLENBQUMsR0FBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLFdBQVcsb0JBQW9CLEdBQUcsQ0FBQyxLQUFLLFdBQVcsR0FBRyxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxVQUFVLFdBQVcsR0FBRyxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FDNUssQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBUztRQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxhQUFhLENBQUMsSUFBUztRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxXQUFXLGtCQUFrQixJQUFJLENBQUMsV0FBVyxhQUFhLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FDbEYsQ0FBQztJQUNKLENBQUM7SUFDRCxZQUFZLENBQUMsSUFBUztRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVM7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBUTtRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxPQUFPLGdCQUFnQixHQUFHLENBQUMsV0FBVyxXQUFXLEdBQUcsQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssV0FBVyxHQUFHLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLGVBQWUsR0FBRyxDQUFDLFVBQVUsV0FBVyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQ3pMLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBUTtRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxPQUFPLGtCQUFrQixHQUFHLENBQUMsRUFBRSxhQUFhLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FDcEUsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFRO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLFdBQVcsd0JBQXdCLEdBQUcsQ0FBQyxFQUFFLGFBQWEsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUM5RSxDQUFDO0lBQ0osQ0FBQztJQUNELG9CQUFvQixDQUFDLElBQVM7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsR0FBRyxJQUFJLENBQUMsT0FBTyw0QkFBNEIsRUFDM0MsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBQ0QsZUFBZSxDQUFDLElBQVM7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsSUFBUztRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsaUJBQWlCLEVBQUUsSUFBSSxFQUFFO1lBQ2xFLFlBQVksRUFBRSxhQUFhO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFTO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBUztRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELGdCQUFnQixDQUFDLElBQVM7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsR0FBRyxJQUFJLENBQUMsT0FBTyxrQkFBa0IsRUFDakMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQ3JCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUNELHFCQUFxQixDQUFDLElBQVM7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxhQUFhLENBQUMsSUFBVSxFQUFFLFdBQW1CLFlBQVk7UUFDOUQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDN0MsQ0FBQyxDQUFDLFFBQVE7WUFDVixDQUFDLENBQUMsR0FBRyxRQUFRLE1BQU0sQ0FBQztRQUV0QixTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsdUJBQXVCLENBQ3JCLElBQVM7UUFFVCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUNILEdBQUcsSUFBSSxDQUFDLE9BQU8sMkJBQTJCLEVBRTFDLElBQUksRUFFSixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUM5QzthQUNBLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNmLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFZLENBQUM7WUFFbkMsSUFBSSxRQUE0QixDQUFDO1lBRWpDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQzdDLHFCQUFxQixDQUN0QixDQUFDO1lBRUYsSUFBSSxrQkFBa0IsRUFBRTtnQkFDdEIsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUNwQyx3Q0FBd0MsQ0FDekMsQ0FBQztnQkFFRixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3JCLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDakQ7YUFDRjtZQUVELE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7d0dBcHdCVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCwgY2F0Y2hFcnJvciwgbWFwLCB0aHJvd0Vycm9yLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcblxyXG5jb25zdCBFWENFTF9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xyXG5jb25zdCBFWENFTF9FWFRFTlNJT04gPSAnLnhsc3gnO1xyXG5jb25zdCBDU1ZfVFlQRSA9ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04JztcclxuY29uc3QgQ1NWX0VYVEVOU0lPTiA9ICcuY3N2JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyYXhTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICB0cmF4VXJsOiBhbnk7XHJcbiAgc3RvcmVVcmw6IGFueTtcclxuICBnYWxsZXJ5QXBpVXJsOiBhbnk7XHJcbiAgYWN0aXZpdHlsb2dVcmw6IGFueTtcclxuICBkcm9wRG93blRyaWdnZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcblxyXG4gIHByaXZhdGUgcmVsb2FkRGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWxvYWREYXRhJCA9IHRoaXMucmVsb2FkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8vIG9wZW5lZERyb3Bkb3duczpzdHJpbmdbXSA9IFtdXHJcbiAgZHJvcGRvd25DbG9zZVRyaWdnZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oXCJcIik7XHJcbiAgY2xpZW50QVBpVXJsOiBhbnk7XHJcbiAgdHJhZmZpY0FwaVVybDogYW55O1xyXG4gIHRyYXhUYXNrVXJsOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICAgICAgIHRoaXMudHJheFVybCA9IGVudi50cmF4VXJsO1xyXG4gICAgICAgIHRoaXMuc3RvcmVVcmwgPSBlbnYuc3RvcmVBcGlVcmw7XHJcbiAgICAgICAgdGhpcy5nYWxsZXJ5QXBpVXJsID0gZW52LmdhbGxlcnlBcGlVcmw7XHJcbiAgICAgICAgdGhpcy5jbGllbnRBUGlVcmwgPSBlbnYuY2xpZW50QXBpVXJsO1xyXG4gICAgICAgIHRoaXMudHJhZmZpY0FwaVVybCA9IGVudi50cmFmZmljQXBpVXJsO1xyXG4gICAgICAgIHRoaXMudHJheFRhc2tVcmwgPSBlbnYudHJheFRhc2tVcmw7XHJcbiAgICAgICAgdGhpcy5hY3Rpdml0eWxvZ1VybCA9IGVudi5hY3Rpdml0eWxvZ1VybDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyUmVsb2FkKCkge1xyXG4gICAgdGhpcy5yZWxvYWREYXRhU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cG9ydEFzRXhjZWxGaWxlKGpzb246IGFueVtdLCBleGNlbEZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQgPSBYTFNYLnV0aWxzLmpzb25fdG9fc2hlZXQoanNvbik7XHJcbiAgICBjb25zdCB3b3JrYm9vazogWExTWC5Xb3JrQm9vayA9IHtcclxuICAgICAgU2hlZXRzOiB7IGRhdGE6IHdvcmtzaGVldCB9LFxyXG4gICAgICBTaGVldE5hbWVzOiBbXCJkYXRhXCJdLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSBYTFNYLndyaXRlKHdvcmtib29rLCB7XHJcbiAgICAgIGJvb2tUeXBlOiBcInhsc3hcIixcclxuICAgICAgdHlwZTogXCJhcnJheVwiLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNhdmVBc0V4Y2VsRmlsZShleGNlbEJ1ZmZlciwgZXhjZWxGaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcclxuICAgICAgdHlwZTogRVhDRUxfVFlQRSxcclxuICAgIH0pO1xyXG4gICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCBmaWxlTmFtZSArIFwibGlzdFwiICsgRVhDRUxfRVhURU5TSU9OKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlQXNUZW1wbGF0ZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XHJcbiAgICAgIHR5cGU6IEVYQ0VMX1RZUEUsXHJcbiAgICB9KTtcclxuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyBFWENFTF9FWFRFTlNJT04pO1xyXG4gIH1cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdW1tYXJ5VGFibGVEYXRhKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS96b25lU3VtbWFyeVRhYmxlX3YyYCwgZGF0YSk7XHJcbiAgfVxyXG4gIGdldGNoZWNrbGlzdChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZ2FsbGVyeUFwaVVybH0vZ2V0Y2hlY2tsaXN0YCwgZGF0YSk7XHJcbiAgfVxyXG4gIGdldFRhc2tMaXN0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VGFza1VybH0vdGFza0Ryb3Bkb3duYCwgZGF0YSk7XHJcbiAgfVxyXG4gIGdldFF1ZXN0aW9ucyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFRhc2tVcmx9L2dldFF1ZXN0aW9uc2AsIGRhdGEpO1xyXG4gIH1cclxuICBhcHByb3ZlY2hlY2tsaXN0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5nYWxsZXJ5QXBpVXJsfS91cGRhdGVBcHByb3ZlYCwgZGF0YSk7XHJcbiAgfVxyXG4gIGFwcHJvdmV0YXNrKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VGFza1VybH0vdXBkYXRlQXBwcm92ZWAsIGRhdGEpO1xyXG4gIH1cclxuICBnZXRBbnN3ZXJzKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VGFza1VybH0vZ2V0QW5zd2Vyc2AsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QW5zd2VyY291bnQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhUYXNrVXJsfS9nZXRBbnN3ZXJDb3VudGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9iVXNhZ2VsaXN0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5nYWxsZXJ5QXBpVXJsfS9nZXRNb2JpbGVVc2VhZ2VsaXN0YCwgZGF0YSk7XHJcbiAgfVxyXG4gIGdldGN1c3RvbWVydW5hdHRlbmRlZGxpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCR7dGhpcy5nYWxsZXJ5QXBpVXJsfS9nZXRjdXN0b21lcnVuYXR0ZW5kZWRsaXN0YCxcclxuICAgICAgZGF0YSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdG9yZU9wZW5jbG9zZWxpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCR7dGhpcy5nYWxsZXJ5QXBpVXJsfS9nZXRjdXN0b21lcnVuYXR0ZW5kZWRsaXN0YCxcclxuICAgICAgZGF0YSxcclxuICAgICk7XHJcbiAgfVxyXG4gIHF1ZXVlYWxlcnRsaXN0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIGAke3RoaXMuZ2FsbGVyeUFwaVVybH0vZ2V0Y3VzdG9tZXJ1bmF0dGVuZGVkbGlzdGAsXHJcbiAgICAgIGRhdGEsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3VtbWFyeVRhYmxlRXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS96b25lU3VtbWFyeVRhYmxlX3YyYCwgZGF0YSwge1xyXG4gICAgICByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tsaXN0KG9iajogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgYCR7dGhpcy50cmF4VXJsfS9jaGVja2xpc3Q/bGltaXQ9JHtvYmoubGltaXR9Jm9mZnNldD0ke29iai5vZmZzZXR9JnNvcnRDb2x1bW5OYW1lPSR7b2JqLnNvcnRDb2x1bW59JnNlYXJjaD0ke29iai5zZWFyY2h9JnNvcnRCeT0ke29iai5zb3J0Qnl9JmNsaWVudElkPSR7b2JqLmNsaWVudElkfWAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tsaXN0djIob2JqOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgJHt0aGlzLnRyYXhVcmx9L2NoZWNrbGlzdFYyP2xpbWl0PSR7b2JqLmxpbWl0fSZvZmZzZXQ9JHtvYmoub2Zmc2V0fSZzb3J0Q29sdW1uTmFtZT0ke29iai5zb3J0Q29sdW1ufSZzZWFyY2g9JHtvYmouc2VhcmNofSZzb3J0Qnk9JHtvYmouc29ydEJ5fSZjbGllbnRJZD0ke29iai5jbGllbnRJZH1gLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGltYWdldXBsb2FkKHVzZXJzOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhVcmx9L3VwbG9hZGAsIHVzZXJzKTtcclxuICB9XHJcblxyXG4gIHRhc2tJbWFnZXVwbG9hZCh1c2VyczogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VGFza1VybH0vdXBsb2FkSW1hZ2VgLCB1c2Vycyk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVVzZXIodXNlcnM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFVybH0vdmFsaWRhdGVVc2VyYCwgdXNlcnMpO1xyXG4gIH1cclxuXHJcbiAgdGFza3ZhbGlkYXRlVXNlckRhdGEodXNlcnM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZ2FsbGVyeUFwaVVybH0vdGFza3ZhbGlkYXRlVXNlckRhdGFgLCB1c2Vycyk7XHJcbiAgfVxyXG4gIGdldGFsbGNoZWNrbGlzdCh1c2VyczogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5nYWxsZXJ5QXBpVXJsfS9nZXRhbGxjaGVja2xpc3RgLCB1c2Vycyk7XHJcbiAgfVxyXG5cclxuICBhc3NpZ25VcGxvYWQodXNlcnM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFVybH0vYXNzaWduVXBsb2FkYCwgdXNlcnMpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVVc2VydjEodXNlcnM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFVybH0vdmFsaWRhdGVVc2VydjFgLCB1c2Vycyk7XHJcbiAgfVxyXG5cclxuICB0YXNrdmFsaWRhdGVVc2VydjEodXNlcnM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFRhc2tVcmx9L3VwbG9hZGAsIHVzZXJzKTtcclxuICB9XHJcblxyXG4gIHRhc2thc3NpZ25VcGxvYWQodXNlcnM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFRhc2tVcmx9L2Fzc2lnblVwbG9hZGAsIHVzZXJzKTtcclxuICB9XHJcblxyXG4gIGdldFVwZGF0ZUNoZWNrbGlzdChpZDogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMudHJheFVybH0vY2hlY2tsaXN0L3VwZGF0ZS8ke2lkfWAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQ2hlY2tsaXN0KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFVybH0vY2hlY2tsaXN0L2NyZWF0ZWAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlnVXBkYXRlKG9iajogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9jaGVja2xpc3RDb25maWd1cmV2MWAsIG9iaik7XHJcbiAgfVxyXG5cclxuICBhc3NpZ25VcGRhdGUoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS91cGRhdGVBc3NpZ25gLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGFzc2lnbnRhc2tVcGRhdGUoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VGFza1VybH0vdXBkYXRlQXNzaWduYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBaUNvbmZpZ3VyZShkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhVcmx9L3VwZGF0ZUFpQ29uZmlndXJlYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRjb25maWcob2JqOiBhbnkpIHtcclxuICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyhvYmopWzBdO1xyXG4gICAgbGV0IHZhbHVlID0gb2JqW09iamVjdC5rZXlzKG9iailbMF1dO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIGAke3RoaXMudHJheFVybH0vZ2V0Q29uZmlnRGV0YWlscz8ke2tleX09JHt2YWx1ZX0mY2xpZW50SWQ9JHtvYmpbT2JqZWN0LmtleXMob2JqKVsxXV19YCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBSWNvbmZpZyhvYmo6IGFueSkge1xyXG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKG9iailbMF07XHJcbiAgICBsZXQgdmFsdWUgPSBvYmpbT2JqZWN0LmtleXMob2JqKVswXV07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgYCR7dGhpcy50cmF4VXJsfS9nZXRBaURldGFpbHM/JHtrZXl9PSR7dmFsdWV9JmNsaWVudElkPSR7b2JqW09iamVjdC5rZXlzKG9iailbMV1dfWAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcnVuQUlJbnNlcnQoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9ydW5BSUluc2VydGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZHVwbGljYXRlY2hlY2tsaXN0KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIGAke3RoaXMudHJheFVybH0vZHVwbGljYXRlQ2hlY2tsaXN0LyR7ZGF0YS5jaGVja2xpc3RJZH0/Y2xpZW50SWQ9JHtkYXRhLmNsaWVudElkfWAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckRldGFpbHMob2JqOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgJHt0aGlzLnRyYXhVcmx9L3VzZXJEZXRhaWxzLyR7b2JqLmlkfT9vZmZzZXQ9JHtvYmoub2Zmc2V0fSZsaW1pdD0ke29iai5saW1pdH0mc2VhcmNoPSR7b2JqLnNlYXJjaH0mY2xpZW50SWQ9JHtvYmouY2xpZW50SWR9YCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZUxpc3QoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5zdG9yZVVybH0vc3RvcmVJbmZyYUxpc3RgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUNoZWNrbGlzdChkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKFxyXG4gICAgICBgJHt0aGlzLnRyYXhVcmx9L2RlbGV0ZUNoZWNrbGlzdC8ke2RhdGEuaWR9P2NsaWVudElkPSR7ZGF0YS5jbGllbnRJZH1gLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1Ymxpc2goZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLnRyYXhVcmx9L3B1Ymxpc2hgLCBkYXRhKTtcclxuICB9XHJcbiAgZ2V0U3RvcmVzKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmdhbGxlcnlBcGlVcmx9L2dldC1zdG9yZXNgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGdldENoZWNrbGlzdHMoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZ2FsbGVyeUFwaVVybH0vY2hlY2tsaXN0RHJvcGRvd25gLCBkYXRhKTtcclxuICB9XHJcbiAgdmlld0NoZWNrbGlzdHMoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZ2FsbGVyeUFwaVVybH0vdmlld2NoZWNrbGlzdGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcmFsbEZsYWdNZXRyaWNzKGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRyYXhVcmx9L2ZsYWcvZmxhZ0NhcmRzVjFgLCBib2R5KTtcclxuICB9XHJcblxyXG4gIG92ZXJhbGxGbGFnTWV0cmljc0NvbXBhcmlzb24oYm9keTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KFxyXG4gICAgICBgJHt0aGlzLnRyYXhVcmx9L2ZsYWcvZmxhZ0NvbXBhcmlzb25DYXJkc1YyYCxcclxuICAgICAgYm9keSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmbGFnc1RhYmxlKGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRyYXhVcmx9L2ZsYWcvZmxhZ1RhYmxlc1YxYCwgYm9keSk7XHJcbiAgfVxyXG5cclxuICBmbGFnc1RhYmxlVjIoYm9keTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMudHJheFVybH0vZmxhZy9mbGFnVGFibGVzVjJgLCBib2R5KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydEZsYWdzVGFibGUoYm9keTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhVcmx9L2ZsYWcvZmxhZ1RhYmxlc1YxYCwgYm9keSwge1xyXG4gICAgICByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0RmxhZ3NUYWJsZXYyKGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9mbGFnL2ZsYWdUYWJsZXNWMmAsIGJvZHksIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldE92ZXJhbGxDYXJkc0RhdGEoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhVcmx9L2Rhc2hib2FyZC9vdmVyYWxsQ2FyZHNWMWAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tsaXN0UGVyZm9ybWFuY2VEYXRhKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIGAke3RoaXMudHJheFVybH0vZGFzaGJvYXJkL2NoZWNrbGlzdFBlcmZvcm1hbmNlYCxcclxuICAgICAgZGF0YSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRDaGVja2xpc3RQZXJmb3JtYW5jZURhdGF2MihkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICBgJHt0aGlzLnRyYXhVcmx9L2Rhc2hib2FyZC9jaGVja2xpc3RQZXJmb3JtYW5jZVYyYCxcclxuICAgICAgZGF0YSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRDaGVja2xpc3RQZXJmb3JtYW5jZURhdGFFeHBvcnQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCR7dGhpcy50cmF4VXJsfS9kYXNoYm9hcmQvY2hlY2tsaXN0UGVyZm9ybWFuY2VgLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogXCJhcnJheWJ1ZmZlclwiIH0sXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tsaXN0UGVyZm9ybWFuY2VEYXRhRXhwb3J0djIoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCR7dGhpcy50cmF4VXJsfS9kYXNoYm9hcmQvY2hlY2tsaXN0UGVyZm9ybWFuY2VWMmAsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIHsgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCIgfSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZVBlcmZvcm1hbmNlRGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFVybH0vZGFzaGJvYXJkL3N0b3JlUGVyZm9ybWFuY2VgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGdldFN0b3JlUGVyZm9ybWFuY2VEYXRhdjIoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCR7dGhpcy50cmF4VXJsfS9kYXNoYm9hcmQvY2hlY2tsaXN0UGVyZm9ybWFuY2VWMmAsXHJcbiAgICAgIGRhdGEsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmVQZXJmb3JtYW5jZURhdGFFeHBvcnQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhVcmx9L2Rhc2hib2FyZC9zdG9yZVBlcmZvcm1hbmNlYCwgZGF0YSwge1xyXG4gICAgICByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlclBlcmZvcm1hbmNlRGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFVybH0vZGFzaGJvYXJkL3VzZXJQZXJmb3JtYW5jZWAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlclBlcmZvcm1hbmNlRGF0YUV4cG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFVybH0vZGFzaGJvYXJkL3VzZXJQZXJmb3JtYW5jZWAsIGRhdGEsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENoZWNrbGlzdERyb3Bkb3duRGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFVybH0vZmxhZy9mbGFnQ2hlY2tsaXN0RHJvcERvd25WMWAsIGRhdGEpO1xyXG4gIH1cclxuICBnZXRDaGVja2xpc3REcm9wZG93bkRhc2hib2FyZERhdGEoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhVcmx9L2Rhc2hib2FyZC9jaGVja2xpc3REcm9wZG93bmAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5mb0NhcmRzRGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFVybH0vZGFzaGJvYXJkL2luZm9DYXJkc1YxYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBjaGVja2xpc3RGbGFnVGFibGUoYm9keTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KFxyXG4gICAgICBgJHt0aGlzLnRyYXhVcmx9L2ZsYWcvZmxhZ0NoZWNrbGlzdFRhYmxlVjFgLFxyXG4gICAgICBib2R5LFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIENyZWF0ZWNoZWNrbGlzdFRhc2soYm9keTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMudHJheFRhc2tVcmx9L2NoZWNrbGlzdFRhc2tgLCBib2R5KTtcclxuICB9XHJcbiAgQ3JlYXRlY2hlY2tsaXN0TXVsdGlUYXNrKGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRyYXhUYXNrVXJsfS9jaGVja2xpc3RNdWx0aVRhc2tgLCBib2R5KTtcclxuICB9XHJcblxyXG4gIHJlZG9UYXNrY2hlY2tsaXN0KGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmdhbGxlcnlBcGlVcmx9L3JlZG9gLCBib2R5KTtcclxuICB9XHJcbiAgcmVkb1Rhc2ttdWx0aWNoZWNrbGlzdChib2R5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5nYWxsZXJ5QXBpVXJsfS9tdWx0aXJlZG9gLCBib2R5KTtcclxuICB9XHJcbiAgcmVkb211bHRpVGFzayhib2R5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy50cmF4VGFza1VybH0vbXVsdGlyZWRvYCwgYm9keSk7XHJcbiAgfVxyXG4gIHJlZG9UYXNrKGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRyYXhUYXNrVXJsfS9yZWRvYCwgYm9keSk7XHJcbiAgfVxyXG4gIGdldHJlZG9Mb2dzKGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmdhbGxlcnlBcGlVcmx9L2dldExvZ3NgLCBib2R5KTtcclxuICB9XHJcbiAgZXhwb3J0Q2hlY2tsaXN0RmxhZ1RhYmxlKGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9mbGFnL2ZsYWdDaGVja2xpc3RUYWJsZVYxYCwgYm9keSwge1xyXG4gICAgICByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVwb3J0VGFibGUoYm9keTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KFxyXG4gICAgICBgJHt0aGlzLnRyYXhVcmx9L2Rhc2hib2FyZC9yZXBvcnRDaGVja2xpc3REYXRhdjFgLFxyXG4gICAgICBib2R5LFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZsYWdDYXJkVmFsdWVzKGJvZHk6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oXHJcbiAgICAgIGAke3RoaXMudHJheFVybH0vZmxhZy9mbGFnQ2hlY2tsaXN0Q2FyZHNWMWAsXHJcbiAgICAgIGJvZHksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmxhZ0NhcmRUZXJlbmQoYm9keTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihcclxuICAgICAgYCR7dGhpcy50cmF4VXJsfS9mbGFnL2ZsYWdDaGVja2xpc3RDb21wYXJpc29uQ2FyZHNWMWAsXHJcbiAgICAgIGJvZHksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tsaXN0SW5mb0RhdGEoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhVcmx9L2Rhc2hib2FyZC9jaGVja2xpc3RJbmZvYCwgZGF0YSk7XHJcbiAgfVxyXG4gIGdldENoZWNrbGlzdEluZm9EYXRhRXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9kYXNoYm9hcmQvY2hlY2tsaXN0SW5mb2AsIGRhdGEsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJsaXN0RHJvcGRvd25EYXRhKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9kYXNoYm9hcmQvdXNlcmxpc3REcm9wZG93bmAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9udGhseVBlZm9ybWFuY2VEYXRhKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9kYXNoYm9hcmQvbW9udGhseUdyYXBoVjFgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGdldENsaWVudFVzZXIoY2xpZW50SWQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnRyYXhVcmx9L3VzZXJMaXN0P2NsaWVudElkPSR7Y2xpZW50SWR9YCk7XHJcbiAgfVxyXG5cclxuICBnZXRUZWFtTGlzdChjbGllbnRJZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMudHJheFVybH0vZ2V0VGVhbUxpc3Q/Y2xpZW50SWQ9JHtjbGllbnRJZH1gKTtcclxuICB9XHJcblxyXG4gIGdldFpvbmVMaXN0KHBhcmFtczogeyBjbGllbnRJZDogYW55OyBjaGVja0xpc3ROYW1lOiBhbnkgfSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgcXVlcnlTdHJpbmcgPSBcIlwiO1xyXG4gICAgaWYgKHBhcmFtcy5jbGllbnRJZCkgcXVlcnlTdHJpbmcgPSBgP2NsaWVudElkPSR7cGFyYW1zLmNsaWVudElkfWA7XHJcbiAgICBpZiAocGFyYW1zLmNoZWNrTGlzdE5hbWUpXHJcbiAgICAgIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcgKyBgJmNoZWNrTGlzdE5hbWU9JHtwYXJhbXMuY2hlY2tMaXN0TmFtZX1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy50cmF4VXJsfS96b25lTGlzdCR7cXVlcnlTdHJpbmd9YCk7XHJcbiAgfVxyXG4gIGdldEluZm9Db21wYXJpc29uQ2FyZHNEYXRhKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIGAke3RoaXMudHJheFVybH0vZGFzaGJvYXJkL2luZm9Db21wYXJpc29uQ2FyZHNWMWAsXHJcbiAgICAgIGRhdGEsXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRPdmVyYWxsQ29tcGFyaXNvbkNhcmRzRGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICBgJHt0aGlzLnRyYXhVcmx9L2Rhc2hib2FyZC9vdmVyYWxsQ29tcGFyaXNvbkNhcmRzVjFgLFxyXG4gICAgICBkYXRhLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldGFpY2hlY2tsaXN0KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy50cmF4VXJsfS9haWNoZWNrbGlzdD9jbGllbnRJZD0ke2RhdGF9YCk7XHJcbiAgfVxyXG5cclxuICByZXBvcnRUYWJsZUV4cG9ydChib2R5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oXHJcbiAgICAgIGAke3RoaXMudHJheFVybH0vZG93bmxvYWRzL2Rvd25sb2FkSW5zZXJ0YCxcclxuICAgICAgYm9keSxcclxuICAgICk7XHJcbiAgfVxyXG4gIGFpY2hlY2tsaXN0RXhwb3J0KGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihcclxuICAgICAgYCR7dGhpcy50cmF4VXJsfS9kb3dubG9hZHMvZG93bmxvYWRJbnNlcnRBSWAsXHJcbiAgICAgIGJvZHksXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRwcmVkZWZpbmVkY2hlY2tsaXN0KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIGAke3RoaXMudHJheFVybH0vcHJlZGVmaW5lZENoZWNrbGlzdD9jbGllbnRJZD0ke2RhdGF9YCxcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldGNsaWVudChkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgJHt0aGlzLmNsaWVudEFQaVVybH0vZGV0YWlsZWQtY2xpZW50LWNvdW50P2NsaWVudElkPSR7ZGF0YS5jbGllbnRJZH1gLFxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0R3JvdXBzKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJhZmZpY0FwaVVybH0vaGVhZGVyR3JvdXBzX3YxYCwgZGF0YSk7XHJcbiAgfVxyXG4gIGdldGNsdXN0ZXJzKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZ2FsbGVyeUFwaVVybH0vaGVhZGVyY2x1c3Rlcl92MmAsIGRhdGEpO1xyXG4gIH1cclxuICBnZXR1c2VycyhkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmdhbGxlcnlBcGlVcmx9L3VzZXJMaXN0YCwgZGF0YSk7XHJcbiAgfVxyXG4gIGdldEFsbFRlYW1zKGNsaWVudElkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgJHt0aGlzLmdhbGxlcnlBcGlVcmx9L3RlYW1zTGlzdD9jbGllbnRJZD0ke2NsaWVudElkfWAsXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRTdG9yZXNsaXN0KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZ2FsbGVyeUFwaVVybH0vaGVhZGVyU3RvcmVzX3YyYCwgZGF0YSk7XHJcbiAgfVxyXG4gIGFwcHJvdmFsc3RhdHVzY2hlY2tsaXN0KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZ2FsbGVyeUFwaVVybH0vYXBwcm92YWxzdGF0dXNgLCBkYXRhKTtcclxuICB9XHJcbiAgYXBwcm92YWxzdGF0dXN0YXNrKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFRhc2tVcmx9L2FwcHJvdmFsc3RhdHVzYCwgZGF0YSk7XHJcbiAgfVxyXG4gIEFsbGFwcHJvdmFsc3RhdHVzY2hlY2tsaXN0KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZ2FsbGVyeUFwaVVybH0vYWxsYXBwcm92YWxzdGF0dXNgLCBkYXRhKTtcclxuICB9XHJcbiAgQWxsYXBwcm92YWxzdGF0dXN0YXNrKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFRhc2tVcmx9L2FsbGFwcHJvdmFsc3RhdHVzYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRPcmRlcnNCeURhdGUoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9sb2N1c29yZGVyL2dldGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgb3JkZXJVcGRhdGUoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9sb2N1c29yZGVyL3VwZGF0ZWAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgb3JkZXJEZWxldGUoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9sb2N1c29yZGVyL2RlbGV0ZWAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNMb2N1c0F1dGhvcml6ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnRyYXhVcmx9L2xvY3Vzb3JkZXIvdXNlci1hbGxvd2VkYCk7XHJcbiAgfVxyXG4gIHJlaW5pdGlhdGVDaGVja2xpc3QoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIGAke3RoaXMudHJheFVybH0vZGFzaGJvYXJkL3JlaW5pdGlhdGVjaGVja2xpc3RgLFxyXG4gICAgICBkYXRhLFxyXG4gICAgKTtcclxuICB9XHJcbiAgY2hlY2tOb3RpZmljYXRpb25Db3VudChkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmdhbGxlcnlBcGlVcmx9L2NoZWNrTm90aWZpY2F0aW9uQ291bnRgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBvcnRBc0NTVkZpbGUoXHJcbiAgICBqc29uOiBhbnlbXSxcclxuICAgIGV4Y2VsRmlsZU5hbWU6IHN0cmluZyxcclxuICAgIGlkZW50aWZpZXI/OiBhbnlbXSxcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQgPSBYTFNYLnV0aWxzLmpzb25fdG9fc2hlZXQoanNvbik7XHJcblxyXG4gICAgY29uc3QgY3N2T3V0cHV0OiBzdHJpbmcgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2Nzdih3b3Jrc2hlZXQpO1xyXG4gICAgdGhpcy5zYXZlQXNDU1ZGaWxlKGNzdk91dHB1dCwgZXhjZWxGaWxlTmFtZSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgc2F2ZUFzQ1NWRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XHJcbiAgICAgIHR5cGU6IENTVl9UWVBFLFxyXG4gICAgfSk7XHJcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIGZpbGVOYW1lICsgQ1NWX0VYVEVOU0lPTik7XHJcbiAgfVxyXG5cclxuICByZUluaXRpYXRlKGJvZHk6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihcclxuICAgICAgYCR7dGhpcy50cmF4VXJsfS9kYXNoYm9hcmQvcmVpbml0aWF0ZWNoZWNrbGlzdGAsXHJcbiAgICAgIGJvZHksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVGFzayhkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhUYXNrVXJsfS9jcmVhdGVgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGdldFRhc2tjb25maWcoaWQ6IHN0cmluZywgY2xpZW50SWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIGAke3RoaXMudHJheFRhc2tVcmx9L2RldGFpbHM/dGFza0lkPSR7aWR9JmNsaWVudElkPSR7Y2xpZW50SWR9YCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb25maWdUYXNrKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFRhc2tVcmx9L2NvbmZpZ2AsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFza1VzZXJEZXRhaWxzKGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoeyBmcm9tT2JqZWN0OiBkYXRhIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy50cmF4VGFza1VybH0vdXNlckRldGFpbHNgLCB7IHBhcmFtcyB9KTtcclxuICB9XHJcblxyXG4gIHVwbG9hZFRhc2tBc3NpZ25lZXMoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VGFza1VybH0vdXBsb2FkYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRPdmVyYWxsVGFza3NEYXRhKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VGFza1VybH0vZGFzaGJvYXJkL292ZXJhbGxjYXJkc1YxYCwgZGF0YSk7XHJcbiAgfVxyXG4gIC8vIGdldFRhc2tUYWJsZURhdGEoIGRhdGE6YW55KTpPYnNlcnZhYmxlPGFueT57XHJcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VGFza1VybH0vZGFzaGJvYXJkL3Rhc2tUYWJsZVYxYCwgZGF0YSlcclxuICAvLyB9XHJcbiAgLy8gZ2V0VGFza1RhYmxlRGF0YUV4cG9ydCggZGF0YTphbnkpOk9ic2VydmFibGU8YW55PntcclxuICAvLyAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhUYXNrVXJsfS9kYXNoYm9hcmQvdGFza1RhYmxlVjFgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcclxuICAvLyB9XHJcbiAgZ2V0VGFza1RhYmxlRGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFRhc2tVcmx9L2Rhc2hib2FyZC90YXNrRGV0YWlsc2AsIGRhdGEpO1xyXG4gIH1cclxuICBnZXRUYXNrVGFibGVEYXRhRXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VGFza1VybH0vZGFzaGJvYXJkL3Rhc2tEZXRhaWxzYCwgZGF0YSwge1xyXG4gICAgICByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIixcclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRUYXNrSW5mb1RhYmxlRGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICBgJHt0aGlzLnRyYXhUYXNrVXJsfS9kYXNoYm9hcmQvdGFza0luZm9UYWJsZVYxYCxcclxuICAgICAgZGF0YSxcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldFRhc2tJbmZvVGFibGVEYXRhRXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIGAke3RoaXMudHJheFRhc2tVcmx9L2Rhc2hib2FyZC90YXNrSW5mb1RhYmxlVjFgLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogXCJhcnJheWJ1ZmZlclwiIH0sXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRPdmVyYWxsQWN0aW9uQ2VudGVyRGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICBgJHt0aGlzLnRyYXhUYXNrVXJsfS9hY3Rpb25DZW50ZXIvb3ZlcmFsbGNhcmRzVjFgLFxyXG4gICAgICBkYXRhLFxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0QXBwcm92YWxEYXRhKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIGAke3RoaXMudHJheFRhc2tVcmx9L2FjdGlvbkNlbnRlci9hcHByb3ZhbFRhYmxlVjFgLFxyXG4gICAgICBkYXRhLFxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0QWN0aXZpdHlMb2coZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCR7dGhpcy50cmF4VGFza1VybH0vYWN0aW9uQ2VudGVyL2FjdGl2aXR5TG9nVjFgLFxyXG4gICAgICBkYXRhLFxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0VGFza0Ryb3Bkb3duTGlzdChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICBgJHt0aGlzLnRyYXhUYXNrVXJsfS9kYXNoYm9hcmQvdGFza0Ryb3Bkb3duTGlzdFYxYCxcclxuICAgICAgZGF0YSxcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldFRhc2tEZWxldGUoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhUYXNrVXJsfS9kYXNoYm9hcmQvdGFza0RlbGV0ZVYxYCwgZGF0YSk7XHJcbiAgfVxyXG4gIGdldFRhc2tVcGRhdGUoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhUYXNrVXJsfS9yZWluaXRpYXRlYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3R0YXNrQ2hpcHMoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VGFza1VybH0vYXNzaWduYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICB0YXNrTGlzdChvYmo6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgYCR7dGhpcy50cmF4VGFza1VybH0vdGFzay1saXN0P2xpbWl0PSR7b2JqLmxpbWl0fSZvZmZzZXQ9JHtvYmoub2Zmc2V0fSZzb3J0Q29sdW1uTmFtZT0ke29iai5zb3J0Q29sdW1ufSZzZWFyY2g9JHtvYmouc2VhcmNofSZzb3J0Qnk9JHtvYmouc29ydEJ5fSZjbGllbnRJZD0ke29iai5jbGllbnRJZH1gLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1Ymxpc2hUYXNrKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy50cmF4VGFza1VybH0vcHVibGlzaGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZHVwbGljYXRlVGFzayhkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgJHt0aGlzLnRyYXhUYXNrVXJsfS9kdXBsaWNhdGVUYXNrLyR7ZGF0YS5jaGVja2xpc3RJZH0/Y2xpZW50SWQ9JHtkYXRhLmNsaWVudElkfWAsXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRTZW5kQWxlcnQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhVcmx9L2Rhc2hib2FyZC9zZW5kQWxlcnRgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGdldGFzc2lnbkRyb3Bkb3duKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudHJheFVybH0vc2VsZWN0QXNzaWduYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDaGlwcyhkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRyYXhVcmx9L2Fzc2lnbmAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2hpcHMoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9yZW1vdmVgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJEZXRhaWxzVjIob2JqOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgJHt0aGlzLnRyYXhVcmx9L3VzZXJEZXRhaWxzLyR7b2JqLmNoZWNrbGlzdElkfT9vZmZzZXQ9JHtvYmoub2Zmc2V0fSZsaW1pdD0ke29iai5saW1pdH0mc2VhcmNoPSR7b2JqLnNlYXJjaH0mY2xpZW50SWQ9JHtvYmouY2xpZW50SWR9JnNvcnRDb2x1bW49JHtvYmouc29ydENvbHVtbn0mc29ydEJ5PSR7b2JqLnNvcnRCeX1gLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFVzZXJEZXRhaWxzVjEob2JqOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgJHt0aGlzLnRyYXhVcmx9L3VzZXJEZXRhaWxzdjEvJHtvYmouaWR9P2NsaWVudElkPSR7b2JqPy5jbGllbnRJZH1gLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldHRhc2tVc2VyRGV0YWlsc1YxKG9iajogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgYCR7dGhpcy50cmF4VGFza1VybH0vdXNlckRldGFpbHMvP3Rhc2tJZD0ke29iai5pZH0mY2xpZW50SWQ9JHtvYmo/LmNsaWVudElkfWAsXHJcbiAgICApO1xyXG4gIH1cclxuICBjaGVja2xpc3RDb3VudEJ5VHlwZShib2R5OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oXHJcbiAgICAgIGAke3RoaXMudHJheFVybH0vZmxhZy9jaGVja2xpc3RDb3VudEJ5VHlwZWAsXHJcbiAgICAgIGJvZHksXHJcbiAgICApO1xyXG4gIH1cclxuICBhY3Rpdml0eUxvZ0xpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmFjdGl2aXR5bG9nVXJsfS9saXN0TG9nYCwgZGF0YSk7XHJcbiAgfVxyXG4gIGRvd25sb2FkdGVtcGxhdGUoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmdhbGxlcnlBcGlVcmx9L2V4cG9ydFRlbXBsYXRlYCwgZGF0YSwge1xyXG4gICAgICByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2xpZW50cnVuQUlGZWF0dWVzKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS9nZXRSdW5BSUZlYXR1cmVzYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSdW5BSUZlYXR1cmVzKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50cmF4VXJsfS91cGRhdGVSdW5BSUZlYXR1cmVzYCwgZGF0YSk7XHJcbiAgfVxyXG4gIGRvd25sb2FkUXVlc3Rpb24oZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCR7dGhpcy50cmF4VXJsfS9leHBvcnRRdWVzdGlvbnNgLFxyXG4gICAgICB7IGNoZWNrbGlzdElkOiBkYXRhIH0sXHJcbiAgICAgIHsgcmVzcG9uc2VUeXBlOiBcImFycmF5YnVmZmVyXCIgfSxcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldENoZWNrbGlzdERldGFpbHNWMShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZ2FsbGVyeUFwaVVybH0vZ2V0Y2hlY2tsaXN0RGV0YWlsc2AsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVBc1BkZkJsb2IoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZyA9IFwicmVwb3J0LnBkZlwiKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaW5hbEZpbGVOYW1lID0gZmlsZU5hbWUuZW5kc1dpdGgoXCIucGRmXCIpXHJcbiAgICAgID8gZmlsZU5hbWVcclxuICAgICAgOiBgJHtmaWxlTmFtZX0ucGRmYDtcclxuXHJcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIGZpbmFsRmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcmVwb3J0VGFibGVFeHBvcnRBc0Jsb2IoXHJcbiAgICBib2R5OiBhbnksXHJcbiAgKTogT2JzZXJ2YWJsZTx7IGJsb2I6IEJsb2I7IGZpbGVOYW1lPzogc3RyaW5nIH0+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QoXHJcbiAgICAgICAgYCR7dGhpcy50cmF4VXJsfS9kb3dubG9hZHMvZG93bmxvYWRJbnNlcnRgLFxyXG5cclxuICAgICAgICBib2R5LFxyXG5cclxuICAgICAgICB7IHJlc3BvbnNlVHlwZTogXCJibG9iXCIsIG9ic2VydmU6IFwicmVzcG9uc2VcIiB9LFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJsb2IgPSByZXNwb25zZS5ib2R5IGFzIEJsb2I7XHJcblxyXG4gICAgICAgICAgbGV0IGZpbGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXHJcbiAgICAgICAgICAgIFwiQ29udGVudC1EaXNwb3NpdGlvblwiLFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29udGVudERpc3Bvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY29udGVudERpc3Bvc2l0aW9uLm1hdGNoKFxyXG4gICAgICAgICAgICAgIC9maWxlbmFtZVteOz1cXG5dKj0oKFsnXCJdKS4qP1xcMnxbXjtcXG5dKikvLFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XHJcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBtYXRjaFsxXS5yZXBsYWNlKC9bJ1wiXS9nLCBcIlwiKS50cmltKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4geyBibG9iLCBmaWxlTmFtZSB9O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=